Pochodnia i rutyna 9510 23

O temacie

Autor Timler

Zaczęty 27.07.2012 roku

Wyświetleń 9510

Odpowiedzi 23

Timler

Timler

Użytkownicy
posty43
Propsy1
  • Użytkownicy
Witam bardzo. Chciałbym zrobić tak, żeby po dialogu NPC wziął pochodnię w rękę. Da się tak? Jeśli tak to jak?
I teraz drugie pytanie. Chcę zrobić tak, żeby jeden NPC był w 3 mapach. I teraz jak tą rutynę zrobić? ( w sensie chodzi o aktywowanie w innym świecie )
 

Alexior

Alexior

Użytkownicy
posty94
Propsy61
  • Użytkownicy

Alexior

Pochodnia i rutyna
#1 2012-07-27, 13:40(Ostatnia zmiana: 2012-07-27, 13:45)
Odpowiedź na pierwsze...
AI_UseItem (VAR C_NPC self, VAR INT itemInstance) { };Przykład zastosowania:
AI_UseItem (VLK_444_Jack, ItLsTorch);Co do drugiego to nie jestem pewny, ale musisz mieć dwie takie same postacie, np. Diego w Khorinis i w górniczej dolinie.

//Edit:
Jak nie będzie działać z Instance NPC to Self/Other ;d
//2
Aha no i nie wiem czy to na 100% zadziała, bo nie bawiłem się w dialogi od dawna, a więc zapodaje jeszcze dwa możliwe rozwiązania:
B_UseItem (self, ItPo_Health_03);i
AI_UseItemToState (self, ItMi_Broom, -1);
 

Timler

Timler

Użytkownicy
posty43
Propsy1
  • Użytkownicy
Czyli dwa pliki w NPC?
Właśnie wpadłem na pomysł.
Przeglądałem sobie wczoraj pliki z dialogami i NPC. Na Cor Kaloma zwróciłem szczególna uwagę. Jest jeden plik jego i jest w 2 miejscach (Świat i świątynia Śniącego). I mam taki pomysł. Da się tak zrobić, że gdy bohater PC_Hero podejdzie do jakiegoś punktu na odpowiednią odległość włączy się rutyna innego człowieka? :D
 

Alexior

Alexior

Użytkownicy
posty94
Propsy61
  • Użytkownicy

Alexior

Pochodnia i rutyna
#3 2012-07-27, 13:50(Ostatnia zmiana: 2012-07-27, 13:57)
Jest takie coś, plików NPC nie musisz dwóch tworzyć, poprostu musisz w dwóch światach postawić danego NPC, tylko nie wiem jak to zrobić, żeby w jednym zniknął, a w drugim się pojawił, w każdym razie napewno nie jest to bardzo skomplikowane, zobacz na przykładzie Diega albo Gorna w g2nk.
Tutaj masz warunek z tym, że podejdzie do jakiegoś punktu na daną odległość:
IF       (Npc_GetDistToWP (self,"waypoint") < XYZ )
                {
                 //Start rutyny
                };

XYZ - odległość w cm o ile pamiętam xd

//Double post xd
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Pochodnia i rutyna
#4 2012-07-27, 13:54(Ostatnia zmiana: 2012-07-27, 13:57)
NPC nie mogą używać pochodni. W sprawie jednego npc w dwóch światach, oprócz dodania go do startupu obu, musisz zatroszczyć się żeby albo waypointy z którego korzysta miały identyczne nazwy w obu światach, albo w ich bodajże initach dać funkcję która będzie mu zmieniała rutynę na inną. A jeszcze lepiej, zrobić tak jak twórcy gry - stworzyć dwóch różnych npc do dwóch światów którzy po prostu tak samo wyglądają i się nazywają, ewentualnie mogą mieć też niektóre dialogi takie same.

Timler

Timler

Użytkownicy
posty43
Propsy1
  • Użytkownicy
Dzięki, problem rozwiązany :)
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Co do pochodni to trochę się z tym bawiłem i udało mi się zrobić pochodnie dla NPC na scemeName. Wiec odpala pochodnie ale jak chce coś zrobić to ją chowa tak jak jointa. Jak cie to zadowoli to ci wytłumaczę jak to zrobić.

diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt
Długo się zastanawiałem nad warunkami, które dzieją się bez użycia dialogu.
I właśne chciałem się zapytać. Jeśli chcemy by po dojściu do jakiegoś waypointa pojawił się powiedzmy zwierzak.


if (Npc_GetDistToWP (self,"WAYPOINT_ABRAKADABRA") < 200 )  
   {                
   Wld_InsertNpc (Stoneguardian_TREASUREPITS_05F,"ADW_ADANOSTEMPEL_TREASUREPITS_05F");            
   };

To gdzie to wpisać ? Stworzyć do tego nowy plik czy gdzieś w startupie mapy ?
 

HerrKlebstoff

HerrKlebstoff

Użytkownicy
posty165
Propsy48
Profesjabrak
  • Użytkownicy
To raczej w startupie, ale głowy nie dam.
 

diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt
A w którym miejscu ?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Pochodnia i rutyna
#10 2012-07-31, 16:41(Ostatnia zmiana: 2012-07-31, 16:51)
Nie startup i nie warunek. Widać że obaj nie wiecie jak działają skrypty.
Kod wewnątrz funkcji wykonuje się wtedy kiedy zostanie ona wywołana. HerrKlebstoff, piszesz żeby dać to w startupie. Kiedy jest wywoływany startup i czy sprawdzenie tego warunku wtedy coś da? Nie, nic nie da, bo jest wywoływany przy ładowaniu gry.
Tego typu warunek musiałby być sprawdzany ciągle. Zamiast tego, lepiej użyć script triggera ustawionego na "dotyk". Dodaje się je w zenie za pomocą Spacera, poszukaj tutoriali o tym.

pawbuj

pawbuj

Użytkownicy
posty1624
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Co do pochodni to trochę się z tym bawiłem i udało mi się zrobić pochodnie dla NPC na scemeName. Wiec odpala pochodnie ale jak chce coś zrobić to ją chowa tak jak jointa. Jak cie to zadowoli to ci wytłumaczę jak to zrobić.

witam, może ktoś opisać jak zrobić  "scenename" do pochodni.
 

Mikotsune

Mikotsune

Czas Honoru
posty365
Propsy289
Profesjabrak
  • Czas Honoru
Na wogu widziałem, że ktoś wrzucił npc który trzyma pochodnie. Może to pomoże.
 
How can I see roses... and only feel thorns...

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Wystarczy Ikarus i wywołanie funkcji silnika.
oCNpc::UseItem(oCItem*)
lub
oCNpc::EquipItem(oCItem*)

 

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

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Nie całkiem... pochodnie są hardcodowane w silniku pod postać gracza. Nie da się ich w żaden normalny sposób używać z npc - trzeba zrobić nowy obiekt który działa na podobnej zasadzie. Na szczęście nie potrzeba do tego Ikarusa, chociaż może on pomóc (np w tym żeby taka nowa pochodnia naprawdę dawała światło).

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Wystarczy Ikarus i wywołanie funkcji silnika.
oCNpc::UseItem(oCItem*)
lub
oCNpc::EquipItem(oCItem*)
Oba sposoby nie zadziałają. Pochodnia nie jest zakładana jak broń czy biżuteria, a UseItem działa tylko na przedmiotach ze ScemeName.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
func void oCNpc_UseItem(var c_npc slf, var int ItemInst)
{
if (!Npc_HasItems (slf, ItemInst)) {
CreateInvItems (slf, ItemInst, 1);
    };

if (!Npc_GetInvItem(slf, ItemInst)) {
return;
};

CALL_PtrParam(_@(item));
    CALL__thiscall(_@(slf), MEMINT_SwitchG1G2(6916112, 7584784));
};



Zadziała, gdyż funkcja oCNpc::UseItem(oCItem*) ma warunki sprawdzające czy przedmiot ma flagę pochodni - do wyczytania w IDA. Także funkcja działa (Testowana na rutynie u Hagena oraz na QuickSlocie). Problem z przed kilku lat został więc rozwiązany xD
Instancja pochodni u Hagena to: ItLsTorch
 

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

pawbuj

pawbuj

Użytkownicy
posty1624
Propsy135
ProfesjaSkrypter
  • Użytkownicy
PANIE ja robie pod g1
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Ale ja użyłem funkcji MEMINT_SwitchG1G2, tak abyś nie musiał szukać adresów...
 

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



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