NPC nie chowa broni 1553 3

O temacie

Autor Liberty

Zaczęty 19.08.2019 roku

Wyświetleń 1553

Odpowiedzi 3

Liberty

Liberty

Użytkownicy
posty39
Propsy12
ProfesjaSkrypter
  • Użytkownicy
Witam, zrobiłem MDS'a dla zbieraczy z koszem ryżu, wszystko ładnie działa jak pracują

Lecz gdy skończą pracę zaczynają się odwalać dziwne rzeczy, np. to:

czy to


Dodałem coś takiego w rutynie:
func void ZS_PickRice_End ()
{
    PrintDebugNpc(PD_TA_FRAME,"ZS_PickRice_End");
AI_RemoveWeapon(self);
Npc_RemoveInvItem(self, ItAd_RiceBasket);
AI_UnequipWeapons(self);
Mdl_RemoveOverlayMds(self, "Basket.MDS");
B_SetPerception (self);
};
Lecz to nic nie dało, już jestem zmęczony walką z gothicem od godziny, ma ktoś jakieś pomysły?
 

Drops99full

Drops99full

Użytkownicy
posty8
Propsy3
Profesjabrak
  • Użytkownicy
Nie jestem pewny, ale takie coś powinno się umieszczać chyba w samym MDS. Przyjrzyj się animacją związanym z np.kowalstwem, są tam takie eventy jak "DEF_INSERT_ITEM", "DEF_EXCHANGE_ITEM" oraz chyba kluczowy dla tej sytuacji "DEF_REMOVE_ITEM".
 

Liberty

Liberty

Użytkownicy
posty39
Propsy12
ProfesjaSkrypter
  • Użytkownicy
Potem sprawdzę
 

Czudak

Czudak

Użytkownicy
posty141
Propsy60
ProfesjaSkrypter
  • Użytkownicy
Nigdy nie modowałem pierwszego Gothica, ale jeśli miałbym coś takiego zrobić, to:

- wyzerowałbym percypowanie wszystkiego przez B_ClearPerceptions u pacjenta z koszem najsamwpierw (nie wiem jak ta funkcja się nazywa w oryginalnym Gothicu; zobacz jakie są nazwy funkcji dla słowa "Perception" w Worldfile.txt, jeśli go masz; chyba dostaje się go z instalacją ModKita w katalogu _Work\Tools\UltraEdit\)
- jeśli kosz jest traktowany jako broń, to zamiast AI_RemoveWeapon(self), wrzuciłbym Npc_GetEquippedMeleeWeapon(self) w kombinacji z jakąś nazwą którą sobie zapamiętasz, a potem ten "kosz-broń" usunął funkcją od usuwania przedmiotów
- dopiero wtedy dał ustawianie percypowania za pomocą B_SetPerception (self)
- na początek ZS_PickRice dodałbym wyczarowywanie tego kosza na nowo

Wygłądałoby to mniej więcej tak dla ZS_PickRice_End:

func void ZS_PickRice_End ()
{
        PrintDebugNpc(PD_TA_FRAME,"ZS_PickRice_End");
AI_UnequipWeapons(self);
EquipKosz = Npc_GetEquippedMeleeWeapon(self); // Albo EquipKosz = Npc_GetEquippedRangedWeapon(self); w zależności jak ten kosz jest traktowany, czy jako broń wręcz, czy dystansowa
Npc_RemoveInvItems(self,Hlp_GetInstanceID(EquipKosz),Npc_HasItems(self,Hlp_GetInstanceID(EquipKosz)));
Mdl_RemoveOverlayMds(self, "Basket.MDS");
        B_SetPerception (self);
}

No i sprawdź czy zamiana self na slf nie jest potrzebna; ja nigdy nie zrozumiałem kiedy stosuje się którą zmienną, a tutaj to też może być ważne.
 


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