Zmiana rutyny. Problem. 3181 9

O temacie

Autor MrSnooker

Zaczęty 24.06.2022 roku

Wyświetleń 3181

Odpowiedzi 9

MrSnooker

MrSnooker

Użytkownicy
posty13
Profesjabrak
  • Użytkownicy
Witam, stworzona postać nie chce zmienić rutyny. próbowałem komend takich jak:
B_StartOtherRoutine (self,"wait");i
Npc_ExchangeRoutine (self,"wait");
kod postaci wygląda tak:
instance NONE_01_Test(NPC_DEFAULT)
{
name[0] = "Test";
guild = GIL_NONE;
id = 01;
voice = 7;
flags = NPC_FLAG_IMMORTAL;
npctype = NPCTYPE_MAIN;
aivar[AIV_TOUGHGUY] = TRUE;
aivar[AIV_TOUGHGUYNEWSOVERRIDE] = TRUE;
aivar[AIV_IGNORE_THEFT] = TRUE;
b_setattributestochapter(self,6);
fight_tactic = FAI_HUMAN_MASTER;
EquipItem(self,itmw_2h_sld_sword);
b_setnpcvisual(self,MALE,"Hum_Head_Bald",FACE_B_NORMAL_KIRGO,BODYTEX_B,itar_djg_crawler);
Mdl_SetModelFatness(self,0);
Mdl_ApplyOverlayMds(self,"Humans_MILITIA.mds");
b_givenpctalents(self);
b_setfightskills(self,60);
daily_routine = rtn_prestart_01;
};


func void rtn_prestart_01()
{
ta_Stand_Armscrossed(8,0,23,0,"MOB_01");
ta_Stand_Armscrossed(23,0,8,0,"MOB_01");
};

func void rtn_wait_01()
{
ta_Stand_Eating(8,0,23,0,"MOB_03");
ta_Stand_Eating(23,0,8,0,"MOB_03");
};

kod w dialogach, gdzie chcę tego użyć:

func void DIA_NONE_01_Test_zadanie_info()
{
AI_Output(other,self,"DIA_NONE_01_Test_zadanie_15_00"); //Co mam zrobić?
AI_Output(self,other,"DIA_NONE_01_Test_zadanie_01_01"); //Zbierz 5 roślin leczniczych i 2 menzurki.
Log_CreateTopic (TOPIC_ADDON_TEST1, LOG_MISSION);
Log_SetTopicStatus (TOPIC_ADDON_TEST1, LOG_RUNNING);
B_LogEntry (TOPIC_ADDON_TEST1, "Mam zebrać 5 roślin leczniczych i 2 menzurki.");
AI_Output(other,self,"DIA_NONE_01_Test_zadanie_15_02"); //Jasne.
AI_Output(self,other,"DIA_NONE_01_Test_zadanie_01_02"); //Jak już zbierzesz co trzeba wróć do mnie, sprawdzimy inne rodzaje zadań.
AI_StopProcessInfos(self);
B_StartOtherRoutine (self,"wait");
};
Zamiana kolejności z ai_stopprocessinfos nic nie daje, zmiana nazwy rutyny również. Postać dalej stoi w miejscu ze skrzyżowanymi rękami, zamiast przemieścić się jesć w inne miejsce. Skrypt podczas kompilacji bez błędów.
 

outlander

outlander

Użytkownicy
posty452
Propsy224
ProfesjaReżyser
  • Użytkownicy
Używaj Npc_ExchangeRoutine. Czy waypointy z nowej rutyny są połączone z waynetem świata? Czy po użyciu komendy set time npc pojawia się w nowym miejscu?
 

MrSnooker

MrSnooker

Użytkownicy
posty13
Profesjabrak
  • Użytkownicy
Cytuj
Używaj Npc_ExchangeRoutine.
Tak, już zmieniłem. chciałem sprawdzić czy przy drugiej komendzie gościu się ruszy, ale nic to nie dało.
Cytuj
Czy waypointy z nowej rutyny są połączone z waynetem świata?
Tak są na pewno, nawet specjalnie sprawdzałem w spacerze, jak gościa przywoływałem z daleka od waypointa z 1 rutyny to normalnie poszedł na miejsce.
Cytuj
Czy po użyciu komendy set time npc pojawia się w nowym miejscu?
Nie, dalej stoi w tym samym miejscu.
 

outlander

outlander

Użytkownicy
posty452
Propsy224
ProfesjaReżyser
  • Użytkownicy
Hmm nic więcej mi się nie rzuca tutaj w oczy. Jeszcze bym na twoim miejscu spróbował zmienić ID postaci na jakieś czterocyfrowe, najlepiej jakaś wysoka liczba żeby się nie powtórzyło.
 

MrSnooker

MrSnooker

Użytkownicy
posty13
Profesjabrak
  • Użytkownicy
No właśnie jak dla mnie też wszystko powinno działać, siedziałem nad tym cały dzień i już mi się pomysły skończyły dlatego tutaj napisałem  pokombinuje jeszcze trochę, może coś się zawiesiło, spróbuję stworzyć inną postać, albo dodać ten kod do istniejącej postaci i sprawdzę czy zadziała
 

Splash

Splash

Moderator
posty4207
Propsy3403
ProfesjaNierób
  • Moderator
B_StartOtherRoutine działa na zasadzie łączenia "RTN_", ID postaci i argumentu w nazwę funkcji. 01 to po prostu 1, więc gra próbuje wywołać funkcję o nawie rtn_1_wait. Dlatego nie chce działać. Poza tym wydaje mi się, że ID 1 jest przypisany innemu npc, a to może powodować bugi.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Damianu

Damianu

Użytkownicy
posty8
Propsy2
Profesjabrak
  • Użytkownicy
Patrz jak twórcy Gothica tworzyli skrypty. Nie stworzyli NPCa, którego ID zaczynałoby się od "0".

Używaj Npc_ExchangeRoutine. Czy waypointy z nowej rutyny są połączone z waynetem świata? Czy po użyciu komendy set time npc pojawia się w nowym miejscu?

Funkcja "B_StartOtherRoutine" i tak wywołuje funkcję "Npc_ExchangeRoutine", a przy okazji "AI_Standup", bez "AI_Standup" NPCe potrafią się "zaciąć" i nie ruszyć w kierunku odpowiedniego Waypointu.

 

MrSnooker

MrSnooker

Użytkownicy
posty13
Profesjabrak
  • Użytkownicy
ok porawię, a jak użyć AI_Standup? i do czego ta funkcja służy?
 

Damianu

Damianu

Użytkownicy
posty8
Propsy2
Profesjabrak
  • Użytkownicy
ok porawię, a jak użyć AI_Standup? i do czego ta funkcja służy?

Aby użyć ją na konkretnym NPCu, na przykład bohaterze:

AI_Standup (hero);

Z tym, że ona i tak jest używana w funkcji "B_StartOtherRoutine", to wystarczy, że skorzystasz z tej funkcji do zmiany rutyny i nie musisz się przejmować funkcją "AI_Standup".
 

MrSnooker

MrSnooker

Użytkownicy
posty13
Profesjabrak
  • Użytkownicy
Dzięki wielkie, po zmienieniu numeru i dodaniu,
AI_Standup (self);
Npc_ExchangeRoutine (self,"wait");
zadziałało.
Temat można zamknąć
 


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