Kilka problemów ze skryptami 1940 5

O temacie

Autor Provo

Zaczęty 23.04.2019 roku

Wyświetleń 1940

Odpowiedzi 5

Provo

Provo

Użytkownicy
posty3
Profesjabrak
  • Użytkownicy

Provo

Kilka problemów ze skryptami
2019-04-23, 10:38(Ostatnia zmiana: 2019-04-23, 10:59)
Hej, mam dziwne problemy z którymi nie mogę sobie poradzić ze skryptami w G2NK..

1. Brak polskich znaków w dialogach (notepad++).
  • Wklepuje jakiś tekst z polskimi znakami (polskie znaki działają w edytorze)
  • Format/Konwertuj na format ANSI (polskie znaki znikają)
  • Reparsuje skrypty w Spacerze (upgrade, save)
  • W grze tekst jest bez polskich znaków.

2. Dziwne zachowanie z wyborem dialogu.
*Item jest przykładowy
FUNC VOID DIA_VLK_9998_SC_HELLO_Info(){


if( Npc_HasItems (other, ItAt_Addon_Heart) >= 1 ) {

Info_AddChoice (DIA_VLK_9998_SC_HELLO, "Tak, prosze"  ,   DIA_VLK_9998_SC_HELLO_YesIHave );

} else {

Info_AddChoice (DIA_VLK_9998_SC_HELLO, "Nie mam serca",   DIA_VLK_9998_SC_HELLO_iDontHave );
Info_ClearChoices (DIA_VLK_9998_SC_HELLO);

};
};

Według mnie powinno to działać tak, że jeżeli mam ten określony item to odpali się funkcja ...HELLO_YesIHave a jeśli nie mam tego itemu odpali się funkcja ...HELLO_iDontHave.

Działa prawidłowo jeżeli mam ten item ale jeżeli nie mam go to jakby pomijał funkcję iDontHave i uruchamiał tylko Info_ClearChoices

*Funkcja iDontHave to sam tekst, brak jakichkolwiek warunków.


3. Kolejny problem z dialogiem

func void DIA_9999_AR_Amulet_Info (){

AI_Output (self, other, "DIA_9999_AR_Amulet_26_00"); // Bla, bla


if( Npc_HasItems (other, ITAM_STRG_01) >= 1 ) {

AI_Output (self, other,"DIA_9999_Archibald_Amulet_26_01"); //Masz go

B_giveinvitems ( other, self, ITAM_STRG_01, 1);

B_LogEntry( TOPIC_SC, "Oddałem go");
Log_SetTopicStatus(TOPIC_SC, LOG_SUCCESS);


} else {

AI_Output (self, other,"DIA_9999_AR_Amulet_26_01"); //Nie masz go

B_LogEntry( TOPIC_Scenarzysta, "Nie miałem go");
Log_SetTopicStatus(TOPIC_Scenarzysta, LOG_SUCCESS);

};
};

Tym razem mając item if odpala się dobrze tyle, że pomija tekst NPC'a, oddaję mu item, zadanie zakończone jest sukcesem i odpala się tekst z elsa...

4. Mam przywołać swojego potworka i przy jego pomocy ubić konkretnego potworka, który ma konkretny przedmiot.
Po ubiciu potworka mam dostać wpis do dziennika oraz gdy zdobędę ten przedmiot kolejny wpis.

Kod sprawdzający żywotność potworka dodałem do ZS_Dead:
if( Npc_IsDead( ktos_tam ) && isDead == FALSE){

Log_CreateTopic( TOPIC_SC, LOG_MISSION );
Log_SetTopicStatus( TOPIC_ScC, LOG_RUNNING );
B_LogEntry( TOPIC_Scenarzysta, "Zabity" );

isDead = TRUE;
};

Kod do sprawdzania czy dorwałem item w startup.d

func void INIT_GLOBAL()
{
// wird fuer jede Welt aufgerufen (vor INIT_<LevelName>)
Game_InitGerman();
       LeGo_Init (LeGo_All);

if (!FF_Active (heart) && iHave == FALSE ) {

  FF_ApplyOnce (heart);

};

};

Wywoływana funkcja heart

func int heart()
{


if( Npc_HasItems (other, ItAt_Addon_Heart) ) {

iHave = TRUE;

} else {

iHave = FALSE;

return FALSE;

};


if( iHave == TRUE ) {

Log_CreateTopic(TOPIC_SC, LOG_MISSION);
Log_SetTopicStatus(TOPIC_SC, LOG_RUNNING);
B_LogEntry( TOPIC_SC, "Mam serce");

return TRUE;
};
   
};

(Funkcja troszkę pokombinowana bo już testowałem przeróżne warunki oraz jakiś sposób na zatrzymanie wywoływania tej funkcji po zdobyciu mojego fanta aby odciążyć system)
I gdy np odpalę mojego pomagiera to od razu po jego pierwszym ataku dostaję wpisy, że tamten jest martwy i mam z niego item...
 

outlander

outlander

Użytkownicy
posty471
Propsy237
ProfesjaReżyser
  • Użytkownicy
2. Tworzysz opcję a zaraz po niej dajesz ClearChoices, który usuwa wszystkie opcje. ClearChoices powinno być wyżej.
3. W AI_Output  w " " masz dwa razy taką samą wartość więc mówi to samo. I to, że za // masz inny tekst nie ma na to wpływu. Przy kompilacji spacer zapisuje tylko jedną wypowiedź.
4. if( Npc_HasItems (other, ItAt_Addon_Heart) ) - spróbuj dać tu hero zamiast other. Nie powinno się używać other w takich funkcjach, bo nie zawsze jest nim gracz.
 

Provo

Provo

Użytkownicy
posty3
Profesjabrak
  • Użytkownicy
Dzięki wielkie outlander! :) Problem nr 2 i 4 rozwiązany.

Z trzecim na pewno miało wpływ to o czym wspomniałeś ale problemu to nie rozwiązało, dopiero po entych próbach gdy linijkę z kodem oddania przedmiotu NPC'owi przesunąłem na koniec if'a (a nie jako druga linijka) problem się rozwiązał.

Wykonywało się to tak, że gdy miałem przedmiot to spełniałem warunek i wchodziłem do if'a , pomijał linijkę z dialogiem (tym razem numeracja była poprawiona), oddawałem przedmiot, pomijało wszystkie następne dialogi, robił wpis do dziennika i wskakiwał do elsa i wykonywał wszystkie dialogi z niego... Jak dla mnie to dziwna sytuacja ;P

No i pozostał mi jeszcze problem z polskimi znakami... gdyby ktoś coś to byłbym bardzo wdzięczny :)
Opis problemu w pierwszym poście :)
 

Patrix9999

Patrix9999

Użytkownicy
posty127
Propsy38
Profesjabrak
  • Użytkownicy
Zmiana kodowania pliku, to tak naprawdę wyedytowanie go.
Spróbuj może np:
1.skopiować całą zawartość pliku do schowka (ctrl+c)
2.ustawić kodowanie pliku ANSI lub windows-1250
3.wkleić spowrotem tekst

Wszystko wskazuje na to, że jest jakiś problem ze zmianą kodowania pliku.
 

Provo

Provo

Użytkownicy
posty3
Profesjabrak
  • Użytkownicy
No nareszcie, na windows-1250 działa w ~90% bo w ~10% przypadków nie wyświetla polskich znaków...
no ale tyle można przeboleć :)

Dzięki wielkie Patrix9999!
 
 

nergosu

nergosu

Użytkownicy
posty6
Propsy1
Profesjabrak
  • Użytkownicy
Podepnę się, bo robię coś podobnego i nie chce zakładać nowego tematu.
Nie startują mi FrameFunctions, gdy wywołam funkcję "ręcznie" to się wykonuje, a w global init FF_ApplyOnce nie trybi.
Spoiler
func void INIT_GLOBAL()
{
   Game_InitGerman();
   LeGo_Init (LeGo_HookEngine);
   LeGo_Init(LeGo_FrameFunctions);
   Hook_oCNpc__DoTakeVob();
   Hook_oCNpc__DoDropVob();
   if(!FF_Active(Check_Inv_SH))
   {
      FF_ApplyOnce(Check_Inv_SH); // 1 na sec
   };
};

Spoiler
func void Check_Inv_SH()
{
   IF (Npc_HasItems(hero,Itemek) >= 1 )
   {
      FF_Remove(Check_Inv_SH);
      B_LogEntry(TOPIC_Quest,"Dupa (ale głosem beziego)");
   };
};

@update: Dobra, po wybraniu LeGo_ALl działa, ciekawi mnie czego brakuje oprócz samych frame functions.
Bo nie chce używać wszystkich skryptów LeGo.
Ktoś coś?
 


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