ZS - prowadzenie potwora (potwór wraca do swojego WP) 3298 10

O temacie

Autor TheKetrab

Zaczęty 24.08.2017 roku

Wyświetleń 3298

Odpowiedzi 10

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Dzień dobry,

w skryptach oryginalnego Gothica z prowadzenia owcy nie znalazłem nic, co by działało. Chodzi o to, że po zaprowadzeniu potwora do danego WP, potwór jest tam sobie; ale gdy odejdę na znaczną odległość i skorzystam z set time, to potwór jest teleportowany ze swojego nowego WP do WP, w którym stał przed prowadzeniem.

// ********************************************
// ZS_MM_Rtn_Follow_Monster_You
// ********************************************

func void ZS_MM_Rtn_Follow_Monster_You()
{
Npc_SetPercTime (self, 1);

Npc_PercEnable (self, PERC_ASSESSPLAYER , B_MM_AssessPlayer);
};

func int ZS_MM_Rtn_Follow_Monster_You_Loop ()
{
if (Npc_GetDistToWP(hero, "NAZWA_WP") > 500)
{
if (Npc_GetDistToNpc (self, hero) > 500)
{
if !C_BodyStateContains(self, BS_SWIM)
{
AI_SetWalkmode (self, NPC_RUN);
};
PrintScreen ("idzie za toba!", -1, 40, FONT_ScreenSmall, 2);
AI_GotoNpc (self, hero);
}
else
{
AI_TurnToNpc (self, hero);
self.WP = Npc_GetNearestWP (self);
};
}
else
{
AI_StartState (self, ZS_MM_Rtn_Roam, 1, "NAZWA_WP");
self.WP = "NAZWA_WP";
PrintScreen ("doszedl", -1, 40, FONT_ScreenSmall, 2);
};

return LOOP_CONTINUE;
};

func void ZS_MM_Rtn_Follow_Monster_You_End ()
{

};

Pytanie: co jest powodem powracania potwora do swojego macierzystego WP/FP, oraz jak zlikwidować tę usterkę?
 

Fabio

Fabio

The Modders
posty3477
Propsy2157
ProfesjaSkrypter
  • The Modders
Pokaż skrypt potwora. Prowadzisz danego potwora do danego WP, zmieniła mu się rutyna (idzie za tobą), doszliście do danego WP i po dojściu tam, powinna się zmienić znowu rutyna tego potwora, tamto miejsce jako nowe WP, w którym będzie stał. To tak na moje, ale możesz pokazać skrypt.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Potwór to jakiś wybrany ze świata. Dowolny. Więc tutaj jego skrypt nie ma znaczenia. ZS_MM_Rtn_Follow_Monster_You jest wywoływane w zaklęciu na dowolnego NPC.

edit: kiedyś robiłem to w ten sposób, że co kilka sekund teleportowałem potwora do nowego WP, ale tutaj jest to raczej trudne zważywszy na nieokreślone jasno INSTANCE potwora (bo gracz może wybrać dowolnego) + wygląda to po prostu nieładnie.
 

Fabio

Fabio

The Modders
posty3477
Propsy2157
ProfesjaSkrypter
  • The Modders
Mnie to nie dziwi. Skoro to jakiś losowy potwór, który jedynie ma wpisane swoje miejsce docelowe w startupie, a ty go przeprowadzisz gdzieś tam, to potem i tak wróci nas woje miejsce. W jaki sposób te potwory za tobą idą? Czarem? Ja tu widzę tylko dwie opcje, albo czar albo dialog, ale gdyby był dialog, to musiałby być jasno określony instance potwora, a nie nieokreślony, więc zakładam, że to czar.

Za bardzo nie wiem co zrobić w przypadku czaru, może rozpisz idee, do czego ma to służyć, jak to ma konkretnie wyglądać.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
ZS_MM_Rtn_Follow_Monster_You jest wywoływane w zaklęciu na dowolnego NPC.

W czarze. Tak, zgadza się.

Czar 'oswojenie' włącza nam:
AI_StartState (other, ZS_Oswojenie, 0, "");
Czar sprawia, że potwór nie atakuje hero.
I teraz tak: jeśli misja XYZ jest aktywna to poza oswojeniem ten czar sprawia, że potwór podąża za hero.

// **************
// ZS_Oswojenie
// **************
var int StanOswojenie;
func int ZS_Oswojenie()
{

};


func int ZS_Oswojenie_Loop ()
{
if (StanOswojenie < 1)
{
B_SetAttitude (self, ATT_FRIENDLY);
self.guild = GIL_FRIENDLY_ORC;
Npc_SetTrueGuild (self, GIL_FRIENDLY_ORC);
 
StanOswojenie = 1;
}
else if (StanOswojenie == 1)
{
Npc_ClearAIQueue(self);
self.aivar[AIV_LastFightAgainstPlayer] = FIGHT_NONE;
//AI_StartState (self, ZS_MM_AllScheduler, 1, "");

//if (OswajaszDlaWrzoda == TRUE)
//{
if (self.aivar[AIV_MM_REAL_ID] == ID_SCAVENGER) || (self.aivar[AIV_MM_REAL_ID] == ID_SCAVENGER_DEMON)
{
AI_StartState (self, ZS_MM_Rtn_Follow_Monster_You, 1, "");
PrintScreen ("powinna isc za toba", -1, 45, FONT_ScreenSmall, 5);

};






//};




return LOOP_END;
};

AI_Wait (self, 0.38); // 5 Sekunden gesamte Schrumpfzeit geteilt durch 13 Stadien

return LOOP_CONTINUE;
};

func void ZS_Oswojenie_End()
{
StanOswojenie = 0;
PrintScreen ("koniec petli", -1, 50, FONT_ScreenSmall, 2);
};






// ********************************************
// ZS_MM_Rtn_Follow_Monster_You
// ********************************************

func void ZS_MM_Rtn_Follow_Monster_You()
{
Npc_SetPercTime (self, 1);

Npc_PercEnable (self, PERC_ASSESSPLAYER , B_MM_AssessPlayer);
};

func int ZS_MM_Rtn_Follow_Monster_You_Loop ()
{
if (Npc_GetDistToWP(hero, "NASZ_ZAPALISADA_TARTAK_10") > 500)
{
if (Npc_GetDistToNpc (self, hero) > 500)
{
if !C_BodyStateContains(self, BS_SWIM)
{
AI_SetWalkmode (self, NPC_RUN);
};
PrintScreen ("idzie za toba!", -1, 40, FONT_ScreenSmall, 2);
AI_GotoNpc (self, hero);
}
else
{
AI_TurnToNpc (self, hero);
self.WP = Npc_GetNearestWP (self);
};
}
else
{
AI_StartState (self, ZS_MM_Rtn_Roam, 1, "NASZ_ZAPALISADA_TARTAK_10");
self.WP = "NASZ_ZAPALISADA_TARTAK_10";
PrintScreen ("doszedl", -1, 40, FONT_ScreenSmall, 2);
};

return LOOP_CONTINUE;
};

func void ZS_MM_Rtn_Follow_Monster_You_End ()
{

};

Wszystko do tej pory działa. Potwór (akurat dowolny ścierwojad jest w kodzie) podąża za hero, dochodzi do nowego WP, staje tam, je sobie trawę, śpi, wszystko śmiga. JEDNAK: Gdy oddalę się na kilometr, powiedzmy, to ścierwojad jest teleportowany do swojego WP, który miał wpisany w Startupie. Nie wiem, jak sprawić, żeby go nie wracało do WP, tylko żeby zostawał w nowym.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Nie jestem pewien, ale skrypt Betsy (czy jak jej tam) różni się nieco skryptem innych potworów itp. Nie jestem w stanie teraz popatrzeć na skrypty (bo mi się tak cholernie nie chce, że jest to po prostu niemożliwe), więc nie wiem czy się mylę.
 
: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.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Owieczka B_Liesel nie ma nic, u Opolosa możemy znaleźć:
func void DIA_Opolos_LIESEL_Info ()
{


AI_Output (other, self, "DIA_Opolos_LIESEL_15_00"); //Spójrz, przyprowadziłem Betsy. Zaopiekujesz się nią?

Npc_PerceiveAll (self);

if  Wld_DetectNpc (self,Follow_Sheep,NOFUNC,-1)
&& (Npc_GetDistToNpc(self, other) < 800)
{
other.aivar[AIV_PARTYMEMBER] = FALSE;
other.aivar[AIV_TAPOSITION] = TRUE;
other.wp = "FP_ROAM_MONASTERY_04";
other.start_aistate = ZS_MM_AllScheduler;

Liesel_Giveaway = TRUE;
AI_Output (self, hero, "DIA_Opolos_LIESEL_12_01"); //Oczywiście. Bardzo ładne zwierzę. Dobrze się nią zajmę.
AI_StopProcessInfos (self);
}
else
{
AI_Output (other, self, "DIA_Opolos_Add_15_00"); //Hm... Gdzieś mi się chyba zapodziała. Wrócę później.
};



};

Ale wyżej wymienione funkcje nic nie robią i dzieje się ciągle to samo. Ścierwojad po pewnym czasie znika do swojego pierwotnego WP.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
W skrypcie ZS_MM_Rtn_Follow_Sheep jest funkcja, która zmienia wp owcy na ten z klasztoru. Ty robisz to tak:

AI_StartState (other, ZS_Oswojenie, 0, "");a w tym skrypcie wygląda to tak:
AI_StartState (self, ZS_MM_Rtn_Roam, 1, "NW_BIGMILL_FARM3_BALTHASAR");
Nie chodzi tutaj o parametr 1 (w Twoim przypadku 0)?
 
: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.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Oswojeniem się nie przejmuj. Gdy rzucam czar na npc, to wywołuje u niego już kolejne ZS.

func int ZS_MM_Rtn_Follow_Monster_You_Loop ()
i jest tam:
else
{
AI_StartState (self, ZS_MM_Rtn_Roam, 1, "NASZ_ZAPALISADA_TARTAK_10");
self.WP = "NASZ_ZAPALISADA_TARTAK_10";
PrintScreen ("doszedl", -1, 40, FONT_ScreenSmall, 2);
};

Gra wywołuje napis 'doszedl', więc Ai_StartState się zmienia; tym bardziej skoro ścierwojad wykonuje ruchy typowe dla ZS_MM_RTN_ROAM (takie jak jedzenie trawy, spanie, ...). 'Jedynkę' mam w skrypcie napisaną. Nie wiem dalej co się pieprzy ;/
 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Mniej więcej rozwiązałem problem. Chociaż jest to tylko iluzja. Dla ciekawych:

-jeśli hero się oddali od WP, to doprowadzone potwory cofają się do swoich WP, ale wstawia się całkiem nowy potwór:

if (QuestWrzodDoprowadzilesScierwojada == TRUE) && (WrzodQuestZabralesScierwojada == 1) && (WrzodQuestScierwojadOneTime == FALSE)
{
Wld_InsertNpc (QuestWrzodScavenger,"NASZ_ZAPALISADA_TARTAK_10");
WrzodQuestScierwojadOneTime = TRUE;
};

O ile się nie mylę, to tak samo w Gothic 2 dzieje się z owcami Balthasara. Po prostu są wstawiane nowe.
PROBLEM ROZWIĄZANY
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Możesz też potraktować zwierzę/bestię jak normalnego NPC - Npc_ExchangeRoutine. Da radę zrobić to manualnie, nie edytując innych postaci - zmieniasz daily_routine na to samo, co u zwierząt (np. ZS_MM_AllScheduler). Czyli będzie to po prostu Npc_ExchangeRoutine(zwierzak, "ZS_MM_AllScheduler").

EDIT: Jednak może być problem, bo trzeba jeszcze ustawić godziny wykonywania tej rutyny (dodatkowy, ten sam ZS, ale ustawiony jak do npc).

Próbowałeś ustawiać npc.wp? Z tym powinno działać, chyba, że Twoje nowe WP nie są połączone.
 
: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.


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