1
Błędy podczas parsowania / Tablice jednowymiarowe
« dnia: 2011-04-01, 18:49 »
Wiem już tak zrobiłem... Tylko hm.... ładniej by to wyglądało ^.^ Dobra temat to zamknięcia. Dzięki wszystkim za pomoc!
Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.
GIL_NONE to wbrew pozorom nie jest "prawdziwa" stała. W Gothicu w ogóle takich nie ma, "const" oznacza po prostu zmienną o z góry zdefiniowanej wartości. Jednak nadal można ją w dowolnym momencie zmieniać - gdyby na takich stałych działało, to to co napisał Adanos nie miałoby sensu.A kolejnej wersji GothicSourcera (większej niż 3.14) się nie doczekam ^.^
Indeksy tablic muszą być po prostu konkretnymi liczbami.
instance DIA_CH_Dex(C_Info)
, siły instance DIA_CH_Strength(C_Info)
. Spacerem nie pomoże, bo zanim używałem GothicSourcer'a to miałem podobny, problem, ale myślałem, że to wynikało z mojej (nie) umiejętności tworzenia dialogów.//Akrobatyka
instance DIA_CH_ACR(C_INFO)
{
npc = ch;
nr = 4;
condition = DIA_CH_ACR_Condition;
information = DIA_CH_ACR_Info;
permanent = TRUE;
description = "Nauka akrobatyki";
};
func int DIA_CH_ACR_Condition()
{
return true;
};
func void DIA_CH_ACR_Info()
{
ExitGame();
};
i dalej nie pokazuje się...AI_Output(other,self,"DIA_Xardas_AWAY_15_04"); //Pier*olisz...
Linijka działa poprawnie. Czyli kompilacja przebiega w sukcesie.((hero.attribute[ATR_DEXTERITY] >= 90) && (Npc_GetTalentSkill(hero, NPC_TALENT_ACROBAT) == 0))
oraz jak go nauczyćNpc_SetTalentSkill(hero, NPC_TALENT_ACROBAT, 1);
Do Characterhelpera, dodałem opcję dialogową: //Akrobatyka
instance DIA_CH_ACR(C_INFO)
{
npc = ch;
nr = 4;
condition = DIA_CH_ACR_Condition;
information = DIA_CH_ACR_Info;
permanent = TRUE;
description = "Nauka akrobatyki";
};
func int DIA_CH_ACR_Condition()
{
if ((AttributeStart == true)
&& (hero.attribute[ATR_DEXTERITY] >= 90)
&& (Npc_GetTalentSkill(hero, NPC_TALENT_ACROBAT) == 0))
{
return true;
};
return false;
};
func void DIA_CH_ACR_Info()
{
Info_ClearChoices(DIA_CH_ACR);
Npc_SetTalentSkill(hero, NPC_TALENT_ACROBAT, 1);
PrintScreen(PRINT_Addon_AcrobatBonus, -1, 55, FONT_Screen, 2);
};
No i nie działa ;/ Nie wiem co może być źle. Parser skryptów Gothica nie został napisany pod tym kątem, żeby wykorzystywać w argumencie funkcji tablicęTo też nie działa:![]()
var string TEXT;
TEXT = TXT_GUILDS[GIL_NONE];
Info_AddChoice(CH_Guild, TEXT, CH_NONE);
Czyli w ogóle nie został stworzony, by czytać z tablic ^.^:idea: to może by sprasować to Gothic SouceremNo nareszcie. Dzięki koleś! Teraz jest problem mniejszej wagi...
Info_AddChoice(CH_Guild, TXT_GUILDS[1], CH_PAL);
To wszystko działa, ale w przypadku:Info_AddChoice(CH_Guild, TXT_GUILDS[GIL_PAL], CH_PAL);
Wywala błąd: Error: Index = 1 out of bounds array #msg142430GIL_PAL#msg142430.Info_AddChoice(CH_Guild, TXT_GUILDS[GIL_NONE], CH_NONE);
Normalnie się kompiluje.
to akurat jest źleponieważ elementy w tablicy numeruje się od n-1 tak mi się zdaje przynajmniej
czyli powinno być tak
Kod: [Zaznacz]var string TEXT[2];
albo tak
TEXT[0] = "brak";
TEXT[1] = "cos";
Info_AddChoice(CH_Guild, TEXT[0], CH_NONE);Kod: [Zaznacz]var string TEXT[1];
zobacz dla przykładu czy będzie ok
TEXT[0] = "brak";
Info_AddChoice(CH_Guild, TEXT[0], CH_NONE);
...Indeksy tablic muszą być po prostu konkretnymi liczbami.No tak, ale w pierwszym poście napisałem (pierwszy i drugi edit), że z konkretnymi liczbami też nie działa. Sprawdziłem teraz drugi raz dla pewności i to samo ;/
var int GILed;
GILed = 0;
Info_AddChoice(CH_Guild, TXT_GUILDS[GILed], CH_NONE);
Tutaj jest ten sam błąd, więc jeden grzyb czy zmienna czy stała.Info_AddChoice(CH_Guild, TXT_GUILDS[GIL_NONE], CH_NONE);
Ciągle uważa, że zapomniałem ','. Więc najpierw sprawdziłem, o co mu biega, więc zamieniłem tą linijkę na:var string TEXT;
TEXT = TXT_GUILDS[GIL_NONE];
Info_AddChoice(CH_Guild, TEXT, CH_NONE);
Odpaliłem i teraz? Ma problem z linijką:TEXT = TXT_GUILDS[GIL_NONE];
Tym razem gada że zapomniałem średnika. Nie mam pojęcia o co mu chodzi. Dałem mu nawet dwa średniki i to samo. Dałem odstęp między ']', a ';' i dalej do samo. Zabrałem mu nawet ten średnik i dalej to samo. Więc jak mam odczytać zmienną z tej tablicy?TEXT = TXT_GUILDS[0];
Problem też występuje.var string TEXT[1];
TEXT[0] = "brak";
TEXT[1] = "cos";
Info_AddChoice(CH_Guild, TEXT[0], CH_NONE);
I dalej pisze, że wInfo_AddChoice(CH_Guild, TEXT[0], CH_NONE);
brakuje przecinka...
while (hero.exp >= hero.exp_next)
{
hero.level = hero.level+1;
hero.exp_next = hero.exp_next + ((hero.level+1)*500);
hero.attribute[ATR_HITPOINTS_MAX] = hero.attribute[ATR_HITPOINTS_MAX] + HP_PER_LEVEL;
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + HP_PER_LEVEL;
hero.LP = hero.LP + LP_PER_LEVEL;
PrintScreen (PRINT_LevelUp, -1, YPOS_LevelUp, FONT_Screen, 2);
Snd_Play ("LevelUp");
} do;
Na razie mam to zrobione rekurencyjnie, ale wiedza o pętli też by się przydała, poza tym lepiej to będzie wyglądać.