[GIINK] "AI_UnequipWeapons(self)/B_GiveTradeInv(self)" oraz handel 5196 8

O temacie

Autor Elligon

Zaczęty 6.10.2017 roku

Wyświetleń 5196

Odpowiedzi 8

Elligon

Elligon

Użytkownicy
posty38
Propsy18
Profesjabrak
  • Zbanowany
Jak wiadomo, każdy handlarz w grze założy sobie broń którą mu sprzedano jeśli ta jest potężniejsza od tej którą aktualnie dzierży, a gracz oddali się poza zasięg materializacji tegoż kupca.

AI_UnequipWeapons(self) zapodane przed B_GiveTradeInv(self) zmusza pacjenta do zdjęcia broni (wręcz i dystansowej), ale ta pojawia się w oknie sprzedaży dopiero jeśli zakupi się cokolwiek z przedmiotów na handel albo wyjdzie się z konwersacji i zainicjuje się biznes raz jeszcze.

Czy istnieje jakaś komenda która odświeżyłaby ekwipunek danej postaci tak aby wszystkie obiekty na handel były dostępne już za pierwszym razem albo bez kupowania czegokolwiek?

Jeśli jednak trzeba do tego AST, Ikarusa, czy LeGo - to proszę nawet nie odpowiadać na to pytanie. Dzięki.
 

Cruc

Cruc

Użytkownicy
posty667
Propsy236
Profesjabrak
  • Użytkownicy
A jakby do funkcji B_RefreshAtInsert dodać warunek, aby handlarzom gra ściągała broń?
 
while (!success) try{...}

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

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Nope. Problem stanowi silnik, który wywołuje funkcje AI_EquipBestMeleeWeapon oraz AI_EquipBestRangedWeapon po umieszczeniu npc z powrotem do świata, gdy osiągnie się odpowiednią odległość. Jedyny pomysł jaki mi przychodzi do głowy to po prostu wywołanie funkcji AI_UnequipWeapons po wybraniu opcji handlu.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Cruc

Cruc

Użytkownicy
posty667
Propsy236
Profesjabrak
  • Użytkownicy
Tak, ale:

Cytuj
AI_UnequipWeapons(self) zapodane przed B_GiveTradeInv(self) zmusza pacjenta do zdjęcia broni (wręcz i dystansowej), ale ta pojawia się w oknie sprzedaży dopiero jeśli zakupi się cokolwiek z przedmiotów na handel albo wyjdzie się z konwersacji i zainicjuje się biznes raz jeszcze.

Żeby poradzić sobie z tym błędem można by napisać funkcję, która by sprawdzała założone przedmioty, usuwała je z ekwipunku, a następnie je z powrotem dodawała.

Ewentualnie, co jakby użyć AI_UnequipWeapons w funkcji rozpoczynającej dialog?
 
while (!success) try{...}

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

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Problem w tym, że funkcja EquipItem jest zbugowana. Jeśli npc odzyska broń i każesz mu założyć konkretną broń, to broń będzie założona, ale nie będzie widoczna. Nie bez powodu w zakładzie z Rodem, postać zakłada najlepszą broń zamiast jego miecz.

Cytuj
Ewentualnie, co jakby użyć AI_UnequipWeapons w funkcji rozpoczynającej dialog?
Powiedziałem to już wcześniej:
Jedyny pomysł jaki mi przychodzi do głowy to po prostu wywołanie funkcji AI_UnequipWeapons po wybraniu opcji handlu.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Cruc

Cruc

Użytkownicy
posty667
Propsy236
Profesjabrak
  • Użytkownicy
Tak, ale mi chodzi o podpięcie percem funkcji, która zdejmowałaby przedmioty po rozpoczęciu rozmowy (jeszcze przed wywołaniem AI_ProcessInfo), a nie po wybraniu konkretnej opcji dialogowej.
 
while (!success) try{...}

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

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Dodaj AI_UnequipWeapons do ZS odpowiadającego za rozmowę (nie pamiętam nazwy) - na sam początek, czyli funkcji rozpoczynającej dialog. W funkcji kończącej dialog (wszystko w tym samym ZS_*.d!) dodaj EquipBestRanged i Melee weapon.

W praktyce będzie to wyglądało tak: Zagadasz do byle jakiego npc, on odłoży broń do ekwipunku, po czym jak skończysz z nim gadać opcją "Koniec", założy on najsilniejszą broń dystansową i w zwarciu jaką posiada. Można dodać warunki typ if npc to pajac od handlu i wtedy to co napisałem wyżej.
 
: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.

Elligon

Elligon

Użytkownicy
posty38
Propsy18
Profesjabrak
  • Zbanowany
A jakby do funkcji B_RefreshAtInsert dodać warunek, aby handlarzom gra ściągała broń?

Dodaj AI_UnequipWeapons do ZS odpowiadającego za rozmowę (nie pamiętam nazwy) - na sam początek, czyli funkcji rozpoczynającej dialog. W funkcji kończącej dialog (wszystko w tym samym ZS_*.d!) dodaj EquipBestRanged i Melee weapon.

W praktyce będzie to wyglądało tak: Zagadasz do byle jakiego npc, on odłoży broń do ekwipunku, po czym jak skończysz z nim gadać opcją "Koniec", założy on najsilniejszą broń dystansową i w zwarciu jaką posiada. Można dodać warunki typ if npc to pajac od handlu i wtedy to co napisałem wyżej.

Przepraszam za opóźnienie w odpowiedziach. Małe uaktualnienie - kupcy ściągają broń po wywołaniu komendą AI_UnequipWeapons(self) dodaną na początku dialogu inicjującego handel - ale jak powiedziałem, te bronie które właśnie sobie ściągnęli pojawiają się w oknie handlu tylko w trzech (nie dwóch) przypadkach:

- po wyjściu z okna handlu i jego ponownego wywołania odpowiednią opcją dialogową
- sprzedaniu czegoś handlarzowi (ekwipunek w oknie się "odświeża", a zdjęte bronie pojawiają się w odpowiednich miejscach) [Tutaj jest pomysł, aby tworzyć jedną sztukę złota w ekwipunku Bezimiennego i przekazywać ją kupcowi, zaraz po wyświetleniu się okna handlu]
- kupna jakiegokolwiek przedmiotu (nawet za 1 szt. złota; reszta jak w nawiasie powyżej)

A teraz po kolei: wykorzystałem pomysł Cruca, ale po dodaniu delikwenta za pomocą Hlp_GetInstanceID(other) do długaśnej listy w B_REFRESHATINSERT.D, i tak musiałem ich najpierw zresetować poprzez opcję dialogową (nawet po rozpoczęciu nowej gry), tak aby założyli ten kijek (plus trzeba było się oddalić na odpowiedni dystans). I tak, ten manewr zadziałał, każdy pacjent miał wszystek broń od razu w ekwipunku; wszystko co mu sprzedałem. Ale potem gra wyczyściła noszony ekwipunek kupców wraz z nowym rozdziałem (tak, właśnie tę pałkę, bo jest w B_CLEARJUNKTRADEINV.D), przez co założyli oni najlepszy dostępny oręż (jeśli go im sprzedałem), wracając tym samym do schematu powyżej. Po zmianie broni na sierp w "refreshu", nie wiem czemu, ale w ogóle się ona nie zmaterializowała w nowym rozdziale (w pierwszym wciąż była, jak z pałką powyżej), więc metodyka powróciła z pełną mocą.

Nie zmieniałem nic w ZS_TALK.D, bowiem nie potrzebuję, aby każdy kupiec zakładał najlepszą broń po skończeniu rozmowy; lepiej pozostawić do dyspozycji gracza jak wykorzysta tę możliwość. I odkryje, że ekwipunek pobitego handlarza znika raz na zawsze, nawet po potraktowaniu zaklęciem "Zapomnienia", hehe (oczywisty błąd, ale ten problem zostawię sobie na później).

Na razie zostawię wszystko tak jak jest (czyli tylko AI_UnequipWeapons(self) i trzy warunki), a jak zacznę czytać o AST to zmierzę się z tym problemem raz jeszcze.

Dzięki wszystkim, temat do zamknięcia (to chyba trzeba gdzieś zgłosić?).
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Kupcy i tak założą najsilniejszą broń jak oddalisz się od nich na 25 metrów. Wyjdzie na dosłownie to samo. Ewentualnie możesz tylko zdjąć im broń i tak zostawić, a później sami i tak założą najsilniejszą.
 
: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