Usunięcie NPC po dialogu 5438 16

O temacie

Autor Buras

Zaczęty 10.01.2012 roku

Wyświetleń 5438

Odpowiedzi 16

Buras

Buras

Użytkownicy
posty202
Propsy23
Profesjabrak
  • Użytkownicy

Buras

Usunięcie NPC po dialogu
2012-01-10, 21:27(Ostatnia zmiana: 2012-01-10, 21:35)
Moje pytanie brzmi: Jakiej funkcji powinienem użyć, by po skończonym dialogu NPC, z którym rozmawiamy został bezpowrotnie usunięty?

Wklejam kawałek skryptu:

Wld_InsertNpc (NON_2001_Leon,"OW_PATH_1");

        AI_StopProcessInfos (self);

Wld_RemoveNpc (); //W nawiasie próbowałem wpisać "self", co owocowało niczym, brakiem efektu. Gdy zaś wpisywałem instancję NPC, gra odmawiała posłuszeństwa i otrzymałem Access Volation.
};
 

maciejh

maciejh

Rzeka
posty779
Propsy258
ProfesjaScenarzysta
  • Rzeka
NPC z którym rozmawiasz czy inny?
 

Buras

Buras

Użytkownicy
posty202
Propsy23
Profesjabrak
  • Użytkownicy
Tak, NPC, z którym rozmawiam. Chcę, aby zniknął zaraz po skończeniu dialogu.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Spróbuj użyć
Wld_RemoveNpc (Hlp_GetNpc(instance));Jednak oba sposoby których próbowałeś (zarówno podawanie jako argumentu zmiennej self, jak i identyfikatora) powinny działać, więc przyczyna może tkwić gdzie indziej - na przykład w tym, że menedżer dialogów musi zostać zakończony zanim npc zostanie usunięty.

Czy jesteś pewien że musisz go usuwać? Nie wystarczyłoby np przeteleportować go poza zasięg gracza i zabić?
Są też inne metody które z punktu widzenia gracza spowodowałyby jego całkowite zniknięcie.

maciejh

maciejh

Rzeka
posty779
Propsy258
ProfesjaScenarzysta
  • Rzeka
Avuś ma niestety rację.

Cytuj
Nie wystarczyłoby np przeteleportować go poza zasięg gracza i zabić?
Są też inne metody które z punktu widzenia gracza spowodowałyby jego całkowite zniknięcie.                                      

To najlepszy sposób.
 

Buras

Buras

Użytkownicy
posty202
Propsy23
Profesjabrak
  • Użytkownicy
Parser twierdzi: "Func doesn't return an int".
Jednak użyję metody teleportuj i zabij. Funkcje postaram się znaleźć sam.
Dziękuję za odpowiedzi.
 

Buras

Buras

Użytkownicy
posty202
Propsy23
Profesjabrak
  • Użytkownicy
Pozwolę sobie odświeżyć temat z powodu kolejnego problemu, który tkwi w teleportacji. O ile uporałem się z zabiciem NPC, o tyle nie chce się on potem teleportować do danego WP.

AI_Teleport (self,"wp");
//Najdziwniejsze jest to, że teleportacja "other" działa, gdy tp "self" już nie.
        AI_StopProcessInfos (other);


self.attribute[ATR_HITPOINTS] -=self.attribute[ATR_HITPOINTS];
Wld_InsertNpc (NON_2001_Leon,"OW_PATH_1");
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Musisz mu zmienić rutynę zapewne się przenosi ale zaraz wraca bo tam ma być i tyle.
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Pozwolę sobie odświeżyć temat z powodu kolejnego problemu, który tkwi w teleportacji. O ile uporałem się z zabiciem NPC, o tyle nie chce się on potem teleportować do danego WP.

AI_Teleport (self,"wp");
//Najdziwniejsze jest to, że teleportacja "other" działa, gdy tp "self" już nie.
        AI_StopProcessInfos (other);


self.attribute[ATR_HITPOINTS] -=self.attribute[ATR_HITPOINTS];
Wld_InsertNpc (NON_2001_Leon,"OW_PATH_1");
Najpierw zakończ rozmowę, potem teleportuj.
AI_StopProcessInfos (self);
AI_Teleport (self,"wp");

Buras

Buras

Użytkownicy
posty202
Propsy23
Profesjabrak
  • Użytkownicy

Buras

Usunięcie NPC po dialogu
#9 2012-01-16, 19:09(Ostatnia zmiana: 2012-01-16, 19:10)
Nie wiem, co zrobiłem nie tak, ale podsumujmy:

Kawałek skryptu NPC obrazującego rutyny:

daily_routine = Rtn_start_2000;
};

FUNC VOID Rtn_start_2000 ()
{
TA_Boss (00,00,24,00,"OW_PATH_1_17_3");
};
func void Rtn_start_2000_1 ()
{

TA_Stay (00,00,24,00,"SMIETNIK");
};

A tu kawałek skryptu dialogu obrazującego przebieg zmian:


Npc_ExchangeRoutine (self, "Rtn_start_2000_1");
AI_Teleport (self,"SMIETNIK");
        AI_StopProcessInfos (other);


self.attribute[ATR_HITPOINTS] -=self.attribute[ATR_HITPOINTS];
Wld_InsertNpc (NON_2001_Leon,"OW_PATH_1");  

W każdym razie nie mam bladego pojęcia, dlaczego to nie chodzi.

@up
Napisałem trochę za szybko, już sprawdzam.
 

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
wiem że głupie pytanie ale czy dodałeś tego NPC do startup'a? Nie jestem pewien ale może to być przyczyna błędu.
 

Paser

Paser

Użytkownicy
Crazy Diamond
posty281
Propsy119
ProfesjaNierób
  • Użytkownicy
  • Crazy Diamond
Jak by nie dodał to by nie miał w grze na mapie tylko by musiał konsolą przywołać.
 

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
Nie wiem, co zrobiłem nie tak, ale podsumujmy:

Kawałek skryptu NPC obrazującego rutyny:

daily_routine = Rtn_start_2000;
};

FUNC VOID Rtn_start_2000 ()
{
TA_Boss (00,00,24,00,"OW_PATH_1_17_3");
};
func void Rtn_start_2000_1 ()
{

TA_Stay (00,00,24,00,"SMIETNIK");
};

A tu kawałek skryptu dialogu obrazującego przebieg zmian:


Npc_ExchangeRoutine (self, "Rtn_start_2000_1");
AI_Teleport (self,"SMIETNIK");
        AI_StopProcessInfos (other);


self.attribute[ATR_HITPOINTS] -=self.attribute[ATR_HITPOINTS];
Wld_InsertNpc (NON_2001_Leon,"OW_PATH_1");  

W każdym razie nie mam bladego pojęcia, dlaczego to nie chodzi.

@up
Napisałem trochę za szybko, już sprawdzam.

Wydaję mi się że to może być winna nazwy tej drugiej rutyny, spróbuj ją zmienić na np. "Rtn_Smietnik_2000"
 

Buras

Buras

Użytkownicy
posty202
Propsy23
Profesjabrak
  • Użytkownicy
Zapomnijmy o usuwaniu NPC i tego typu rzeczach. Męczę to już miesiąc i nic nie mogę wymyślić. Po prostu zmienię NPC rutynę i pójdzie w miejsce, w którym respi się jego sobowtór. Ale...



Nie wiem, dlaczego, ale rutyna nie chce się zmieniać.

Skrypcik NPC:
daily_routine = Rtn_start_2000;
};

FUNC VOID Rtn_start_2000 ()
{
TA_Boss (00,00,23,59,"OW_PATH_1_17_3");
};

func void Rtn_start1_2000 ()
{

TA_Stay (00,00,23,59,"OW_PATH_1");
};



Skrypcik dialogu:
Npc_ExchangeRoutine (NON_2000_Leon, "Rtn_start1_2000");
AI_StopProcessInfos (self);



Ma ktoś jakieś propozycje?
 

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis

EdekSumo
Wyspa Khorinis

Usunięcie NPC po dialogu
#14 2012-03-14, 14:32(Ostatnia zmiana: 2012-03-14, 14:33)
Po pierwsze rutyna powinna mieć 2 czynności (pewien nie jestem). A skrypt zmiany rutyny powinien wyglądać tak:
Npc_ExchangeRoutine     (self, "start1");//jeśli dla osoby mówiącej w dialogu
a tak w innej sytuacji:
var c_npc Leon; Leon = Hlp_GetNpc(NON_2000_Leon);
B_StartOtherRoutine (Leon,"start");
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
to
Npc_ExchangeRoutine (NON_2000_Leon, "Rtn_start1_2000");
zmianiasz na to
Npc_ExchangeRoutine (NON_2000_Leon, "start1");
I rutyny musza mieć przynajmniej 2 funkcje nawet takie same

func void Rtn_start1_2000 ()
{
        TA_Stay (00,00,23,00,"OW_PATH_1");      
        TA_Stay (23,00,00,00,"OW_PATH_1");  
};

Buras

Buras

Użytkownicy
posty202
Propsy23
Profesjabrak
  • Użytkownicy
Cóż, wygląda na to, że działa. Dzięki wielkie.

Myślę, że temat można zamknąć.
 


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