[G2] Party member atakujący innego npc? 4630 5

O temacie

Autor Graveir

Zaczęty 25.12.2019 roku

Wyświetleń 4630

Odpowiedzi 5

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Czy istnieje jakiś sposób, żeby sprawdzić, czy bohater nie należy do instancji Other? Bo chciałbym zrobić tak, żeby postać, która posiada self.aivar[AIV_PARTYMEMBER] = TRUE; atakowała postać, którą my zaatakujemy lub która zaatakowała nas. Głównie chodzi o "globalny" aivar, żeby nie trzeba było rozpisywać tego do wszystkich skryptów. Coś na zasadzie:
Npc_SetTarget (self, other);
B_Attack (self, other, AR_NONE, 0);
Ale tak, żeby "other" nie był traktowany jako "pc_hero", tylko pozostałe postacie. Istnieje taka możliwość? Bo wiem, że w przypadku potworów wystarczyło zmienić nastawienie gildii, a z racji, że tutaj chciałbym u różnych postaci takie coś mieć, to zmiany nastawień w dialogach mijają się z celem.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Ewentualnie mógłby ktoś na chłopski rozum pokierować, czemu się przyjrzeć w skryptach?
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Cruc

Cruc

Użytkownicy
posty667
Propsy236
Profesjabrak
  • Użytkownicy
Może dobrym pomysłem byłoby przerobić ZS_WatchFight w taki sposób, że jeśli jedną z postaci, które walczą, jest PC_Hero, to wówczas self ma się rzucić do walki? Nawet jest tam wykorzystywany jakiś victim, który może okazać się pomocny.
 
while (!success) try{...}

Najlepszy modder od gothic multiplayer - polecam pytać go o wszystko!

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
@Cruc Twoja porada podsunęła mi trop, ale jest drobny problem. Mianowicie w B_AssessFightSound.d lekko przerobiłem skrypt na takie coś(na samym dole):
if (!self.aivar[AIV_PARTYMEMBER] == TRUE)
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
AI_StartState (self, ZS_WatchFight, 0, ""); //Bogen und Magie geduldet bis zur AssessMurder-Wahrnehmung
return;
}
else if (self.aivar[AIV_PARTYMEMBER] == TRUE)
&& (Hlp_GetInstanceID(pc_hero) == Hlp_GetInstanceID(victim))
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
B_Attack (self, other, AR_NONE, 0);
PrintScreen ("Bezio jako ofiara", -1, -1, FONT_ScreenSmall, 2);
return;
}
else
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
B_Attack (self, victim, AR_NONE, 0);
PrintScreen ("Npc jako ofiara", -1, -1, FONT_ScreenSmall, 2);
return;
};
Aczkolwiek problem pojawia się w trakcie dialogów, które wywołują funkcję zaatakowania bohatera(przykładowo, rozmowa z bandytą przed jaskinią Braga). Testuję to na Aya_Testmodel i jeśli w trakcie dialoguję wybiorę opcję, która powoduje zaatakowanie nas przez niego, to Aya zdąży go zaatakować i zabić, zanim się skończy dialog[co buguje postać]. Natomiast w przypadku walki z Alrikiem, atakuje dopiero, kiedy on nas uderzy.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Cruc

Cruc

Użytkownicy
posty667
Propsy236
Profesjabrak
  • Użytkownicy
Przed atakiem daj warunek czy AIV_INVINCIBLE celu jest false. Jest to ustawiane na true podczas dialogu, a na jego koniec zerowane. Może coś takiego wystarczy.
 
while (!success) try{...}

Najlepszy modder od gothic multiplayer - polecam pytać go o wszystko!

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Dobra, udało mi się stworzyć coś takiego:
if (!self.aivar[AIV_PARTYMEMBER] == TRUE)
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
AI_StartState (self, ZS_WatchFight, 0, ""); //Bogen und Magie geduldet bis zur AssessMurder-Wahrnehmung
return;
}
else if (self.aivar[AIV_PARTYMEMBER] == TRUE)
&& (Hlp_GetInstanceID(pc_hero) == Hlp_GetInstanceID(victim))
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
B_Attack (self, other, AR_NONE, 0);
PrintScreen ("Bezio jako ofiara", -1, -1, FONT_ScreenSmall, 2);
return;
}
else
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
B_Attack (self, victim, AR_NONE, 0);
PrintScreen ("Npc jako ofiara", -1, -1, FONT_ScreenSmall, 2);
return;
};
W B_AssessFightSound.d, w ZS_Unconscious.d dodałem:
// ------ NSC hat gegen Spieler verloren ------
if (self.guild < GIL_SEPERATOR_HUM)
|| (self.aivar[AIV_PARTYMEMBER] == TRUE) // tylko to
&& (Npc_IsPlayer(other))
{
I niby działa, tylko zauważyłem, że Rączka podczas misji zachowuje się jak Gorn podczas odbijania Wolnej Kopalni. Czyli czasami zaatakuje nas bez powodu, gdzie powinien atakować tylko Cassię/Ramireza/Jespera.
Edit: Co ciekawe, Aya też ignoruje Jespera. A Cassię i Ramireza atakuje.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti


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