[NK] Mechanika "podstępnego ataku" i BS_SNEAK 2319 4

O temacie

Autor Czudak

Zaczęty 4.03.2018 roku

Wyświetleń 2319

Odpowiedzi 4

Czudak

Czudak

Użytkownicy
posty141
Propsy60
ProfesjaSkrypter
  • Użytkownicy
Jak w temacie. Na początek kod na funkcję "ciosu w plecy/kosę do snu":

Cytuj
func void CheckForBackstabDamage(var C_Npc oth,var C_Npc slf)
{
   if((Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero)) && ((!Npc_CanSeeNpc(slf,oth) || Npc_IsInState(slf,ZS_Sleep)) && C_BodyStateContains(oth,BS_HIT) && (Npc_GetTalentSkill(oth,NPC_TALENT_SNEAK) == TRUE) && Npc_IsInFightMode(oth,FMODE_MELEE) && !Npc_IsInState(slf,ZS_Attack) && !Npc_IsInState(slf,ZS_MM_Attack)))
   {
      Backstab = oth.attribute[ATR_DEXTERITY] * 2;
      B_MagicHurtNpc(oth,slf,Backstab);
      PrintScreen("Sneak attack!",-1,40,FONT_Screen,2);
   }
   else
   {
      Backstab = 0;
   };
};

Funkcja jest sprawdzana w funkcjach B_AssessDamage (dla ludzi) i B_MM_AssessDamage (dla potworów) za pomocą CheckForBackstabDamage(other,self); przed funkcją na obrażenia od Szpona Beliara.

Zamierzeniem była weryfikacja ciosu w plecy gdy gracz się skrada (w składzie z pozostałymi warunkami we funkcji); niestety warunek (C_BodyStateContains(oth,BS_SNEAK) nie działa w takiej konfiguracji i musiałem zastąpić go posiadaniem samej umiejętności skradania; nie jest to zbyt komfortowym rozwiązaniem, gdyż atak na nieświadomego (czytaj: nie mającego gracza w polu widzenia) przeciwnika zawsze skutkuje tymi obrażeniami ekstra, a brak wyboru w tej kwestii jest nielogiczny. C_BodyStateContains nie wskazuje żeby cokolwiek kolidowało z wywoływaniem BS_SNEAK.

Czy ktoś wie co jest nie tak?
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Z tego co pamiętam, Gothic dostaje downa jeśli dodasz dwa Body staty do jednego ifa. Nie zawsze, ale dosyć często. Ja sobie z tym radziłem stopniowo, czyli dawałem if do ifa:

if (obiad gotowy)
{ if (lubi naleśniki)
{
kapusta;
}
}

Dodatkowo, oddzielaj !warunek od warunek - Gothic czasami ignoruje !(warunek && warunek) i odczytuje tylko to pierwsze. Najpierw spróbuj oddzielić wszystkie zaprzeczenia i zaprzeczyć je osobno, jeśli nie podziała, podziel na ify w ifach. Pamiętam, jak raz spędziłem około 6 godzin na pierdoleniu się z jednym warunkiem, po czym okazało się, że grze się nie podobało sprawdzanie atrybutów i umiejętności w jednym ifie...
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.


Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
W życiu - parser nie ma takiego błędu. Po prostu gra nie obsługuje jednocześnie kilku BodyState na raz.
C_BodyStateContains(oth,BS_HIT)
W tym wypadku hero posiada tylko jeden BodyState - one nie łączą się ze sobą. Najlepiej byłoby sprawdzić ostatni BodyState, ale nie pamiętam jak łatwo można sprawdzić ostatni BodyState. Jako dowód podczas gry w marvin-mode kliknij klawisz G, wtedy wyświetli ci się obecny BodyState.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Czudak

Czudak

Użytkownicy
posty141
Propsy60
ProfesjaSkrypter
  • Użytkownicy
Z tego co pamiętam, Gothic dostaje downa jeśli dodasz dwa Body staty do jednego ifa. Nie zawsze, ale dosyć często. Ja sobie z tym radziłem stopniowo, czyli dawałem if do ifa:

if (obiad gotowy)
{ if (lubi naleśniki)
{
kapusta;
}
}

Dodatkowo, oddzielaj !warunek od warunek - Gothic czasami ignoruje !(warunek && warunek) i odczytuje tylko to pierwsze. Najpierw spróbuj oddzielić wszystkie zaprzeczenia i zaprzeczyć je osobno, jeśli nie podziała, podziel na ify w ifach. Pamiętam, jak raz spędziłem około 6 godzin na pierdoleniu się z jednym warunkiem, po czym okazało się, że grze się nie podobało sprawdzanie atrybutów i umiejętności w jednym ifie...

Będę w szoku jeśli to prawda, wydawało mi się że parser/interpreter Daedalusa nie ma takich elementarnych błędów.

W życiu - parser nie ma takiego błędu. Po prostu gra nie obsługuje jednocześnie kilku BodyState na raz.
C_BodyStateContains(oth,BS_HIT)
W tym wypadku hero posiada tylko jeden BodyState - one nie łączą się ze sobą. Najlepiej byłoby sprawdzić ostatni BodyState, ale nie pamiętam jak łatwo można sprawdzić ostatni BodyState. Jako dowód podczas gry w marvin-mode kliknij klawisz G, wtedy wyświetli ci się obecny BodyState.

Jeśli to problem z przyczynowością tylko jednego bodystate naraz, to spróbuję dosztukować "nową" funkcję C_BodyStateContainsBackstab i wkleję w niego wszystko C_BodyStateContains, i dam sprawdzanie BS_SNEAK z tej skopiowanej. Może jeśli będą dwie funkcje dla bodystate, to będzie można mieć dwa z nich w funkcji na cios w plecy.

Dam znać jutro jak poszło.

Post połączony: 2018-03-05, 09:17
Dodanie kolejnej funkcji do sprawdzenia bodystate nie działa. Rzeczywiście najlepiej byłoby sprawdzić ostatni bodystate przed tym z funkcji ciosu w plecy.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry