duże obciążenie silnika 15058 55

O temacie

Autor mass1500

Zaczęty 7.02.2012 roku

Wyświetleń 15058

Odpowiedzi 55

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Ha, faktycznie nie zauważyłem że to wykonuje się tylko raz (zakładając że zmienna PerFrameCallTrigger_Init jest globalna i nie traci za każdym razem wartości). Szkoda, bo inaczej to na bank byłoby przyczyną masakrycznego przycinania gry. Nadal jednak z całą pewnością ten fragment kodu nic nie robi, brakuje kluczowego kawałka poza warunkiem, który powinien ustawiać następne wywołanie na "przy następnej klatce".
W takim razie popróbuj z tymi kawałkami:
MemoryProtectionOverride(7091180, 4);
MEM_WriteInt( 7091180, tmp);
MEM_InitGlobalInst ();
MEM_PtrToInst (MEM_GAME.hpBar);
MEM_PtrToInst (MEM_GAME.manaBar);
Ustaw przy każdym warunek żeby wywoływały się tylko raz. Możesz nawet skorzystać z tej zmiennej PerFrameCallTrigger_Init.

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
olbrzymia poprawa wydajności WIELKIE DZIĘKI!!! ale dalej mi troszke tnie nieznacznie ale tnie może jeszcze jakieś rady pokazuje tick tocka

Spoiler
func void TICK_TOCK()
{
jednorazowe_wywolanie +=1;

if (jednorazowe_wywolanie >= 99999){
jednorazowe_wywolanie = 2;
};
/////////////////////////////////////////////////////////////////////////
/////////////////////////////zatruwanie npc//////////////////////////////
/////////////////////////////////////////////////////////////////////////
if (trucie >= 1){
if (licznik_trucia >= 8){

licznik_trucia = 0;

if (zatruty1.aivar[49] > 0 ){
        if (zatruty1.attribute[atr_hitpoints] > 10){

zatruty1.attribute[ATR_HITPOINTS] = zatruty1.attribute[ATR_HITPOINTS]-3;
zatruty1.aivar[49]=zatruty1.aivar[49]-1;

};
};
       
if (zatruty2.aivar[49] > 0 ){
        if (zatruty2.attribute[atr_hitpoints] > 10){

zatruty2.attribute[ATR_HITPOINTS] = zatruty2.attribute[ATR_HITPOINTS]-3;
zatruty2.aivar[49]=zatruty2.aivar[49]-1;

};
};
       
if (zatruty3.aivar[49] > 0 ){
        if (zatruty3.attribute[atr_hitpoints] > 10){

zatruty3.attribute[ATR_HITPOINTS] = zatruty3.attribute[ATR_HITPOINTS]-3;
zatruty3.aivar[49]=zatruty3.aivar[49]-1;

};
};
       
if (zatruty4.aivar[49] > 0 ){
        if (zatruty4.attribute[atr_hitpoints] > 10){

zatruty4.attribute[ATR_HITPOINTS] = zatruty4.attribute[ATR_HITPOINTS]-3;
zatruty4.aivar[49]=zatruty4.aivar[49]-1;

};
};
        if (zatruty5.aivar[49] > 0 ){
        if (zatruty5.attribute[atr_hitpoints] > 10){

zatruty5.attribute[ATR_HITPOINTS] = zatruty5.attribute[ATR_HITPOINTS]-3;
zatruty5.aivar[49]=zatruty5.aivar[49]-1;

};
};
       
if (zatruty6.aivar[49] > 0 ){
    if (zatruty6.attribute[atr_hitpoints] > 10){

zatruty6.attribute[ATR_HITPOINTS] = zatruty6.attribute[ATR_HITPOINTS]-3;
zatruty6.aivar[49]=zatruty6.aivar[49]-1;

};
};
       
if (zatruty7.aivar[49] > 0 ){
        if (zatruty7.attribute[atr_hitpoints] > 10){

zatruty7.attribute[ATR_HITPOINTS] = zatruty7.attribute[ATR_HITPOINTS]-3;
zatruty7.aivar[49]=zatruty7.aivar[49]-1;

};
};
       
if (zatruty8.aivar[49] > 0 ){
        if (zatruty8.attribute[atr_hitpoints] > 10){

zatruty8.attribute[ATR_HITPOINTS] = zatruty8.attribute[ATR_HITPOINTS]-3;
zatruty8.aivar[49]=zatruty8.aivar[49]-1;

};
};
       
if (zatruty9.aivar[49] > 0 ){
        if (zatruty9.attribute[atr_hitpoints] > 10){

zatruty9.attribute[ATR_HITPOINTS] = zatruty9.attribute[ATR_HITPOINTS]-3;
zatruty9.aivar[49]=zatruty9.aivar[49]-1;

};
};
       
if (zatruty10.aivar[49] > 0 ){
        if (zatruty10.attribute[atr_hitpoints] > 10){

zatruty10.attribute[ATR_HITPOINTS] = zatruty10.attribute[ATR_HITPOINTS]-3;
zatruty10.aivar[49]=zatruty10.aivar[49]-1;

};
};
       
if (zatruty11.aivar[49] > 0 ){
        if (zatruty11.attribute[atr_hitpoints] > 10){

zatruty11.attribute[ATR_HITPOINTS] = zatruty11.attribute[ATR_HITPOINTS]-3;
zatruty11.aivar[49]=zatruty11.aivar[49]-1;

};
};
       
if (zatruty12.aivar[49] > 0 ){
        if (zatruty12.attribute[atr_hitpoints] > 10){

zatruty12.attribute[ATR_HITPOINTS] = zatruty12.attribute[ATR_HITPOINTS]-3;
zatruty12.aivar[49]=zatruty12.aivar[49]-1;

};
};
       
if (zatruty13.aivar[49] > 0 ){
        if (zatruty13.attribute[atr_hitpoints] > 10){

zatruty13.attribute[ATR_HITPOINTS] = zatruty13.attribute[ATR_HITPOINTS]-3;
zatruty13.aivar[49]=zatruty13.aivar[49]-1;

};
};
       
if (zatruty14.aivar[49] > 0 ){
        if (zatruty14.attribute[atr_hitpoints] > 10){

zatruty14.attribute[ATR_HITPOINTS] = zatruty14.attribute[ATR_HITPOINTS]-3;
zatruty14.aivar[49]=zatruty14.aivar[49]-1;

};
};
       
if (zatruty15.aivar[49] > 0 ){
        if (zatruty15.attribute[atr_hitpoints] > 10){

zatruty15.attribute[ATR_HITPOINTS] = zatruty15.attribute[ATR_HITPOINTS]-3;
zatruty15.aivar[49]=zatruty15.aivar[49]-1;

};
};
       
if (zatruty16.aivar[49] > 0 ){
        if (zatruty16.attribute[atr_hitpoints] > 10){

zatruty16.attribute[ATR_HITPOINTS] = zatruty16.attribute[ATR_HITPOINTS]-3;
zatruty16.aivar[49]=zatruty16.aivar[49]-1;

};
};
       
if (zatruty17.aivar[49] > 0 ){
        if (zatruty17.attribute[atr_hitpoints] > 10){

zatruty17.attribute[ATR_HITPOINTS] = zatruty17.attribute[ATR_HITPOINTS]-3;
zatruty17.aivar[49]=zatruty17.aivar[49]-1;

};
};
       
if (zatruty18.aivar[49] > 0 ){
        if (zatruty18.attribute[atr_hitpoints] > 10){

zatruty18.attribute[ATR_HITPOINTS] = zatruty18.attribute[ATR_HITPOINTS]-3;
zatruty18.aivar[49]=zatruty18.aivar[49]-1;

};
};
       
if (zatruty19.aivar[49] > 0 ){
        if (zatruty19.attribute[atr_hitpoints] > 10){

zatruty19.attribute[ATR_HITPOINTS] = zatruty19.attribute[ATR_HITPOINTS]-3;
zatruty19.aivar[49]=zatruty19.aivar[49]-1;

};
};
       
if (zatruty20.aivar[49] > 0 ){
        if (zatruty20.attribute[atr_hitpoints] > 10){

zatruty20.attribute[ATR_HITPOINTS] = zatruty20.attribute[ATR_HITPOINTS]-3;
zatruty20.aivar[49]=zatruty20.aivar[49]-1;

};
};
};
};
if (naliczanie_on == 1){

licznik_trucia += 1;

};
/////////////////////////////////////////////////////////////////////////
/////////////////////////////uniwersalny mainflag//////////////////////
/////////////////////////////////////////////////////////////////////////
if (miecz_on == 1){

item_kat_nf_ff = item_kat_ff;
item_super_flag = item_axe;
}

else{

item_kat_nf_ff = item_kat_nf;
item_super_flag = item_2hd_axe;
};

//////////////////////////////////////////////////////////////////////////
///////////////////////////////skilowanie///////////////////////////////
/////////////////////////////////////////////////////////////////////////////


if (skil_1h_miecz >= 120){

B_RaiseFightTalent (hero, NPC_TALENT_1H, 1);
Lerne_Einhand = TRUE;
Snd_Play("Levelup");
skil_1h_miecz = 0;
PrintScreen     ("Bonus do walki bronią 1-ręczną +1", -1,-1,"font_old_20_white.tga",3);

};

////////////////////////////////////////////////////////////////////////
////////////////////////////wyciąganie duali i wyświetlanie broni////////
/////////////////////////////////////////////////////////////////////////
qkey = mem_keystate(key_Lshift);

if (qkey == key_pressed){
if (miecz_on_on >= 2){

Mdl_ApplyOverlayMds (hero,"Hum_Dual.mds");
AI_ReadyMeleeWeapon(hero);  
koniec = 1;
Print     ("Wyciągłeś broń");

};
}
else
if (Npc_HasEquippedMeleeWeapon(hero)){

bron1 = Npc_GetEquippedMeleeWeapon(hero);
koniec = 0;
PrintScreen     (bron1.name, 80,88,"font_old_20_white.tga",1);

};

if (Npc_HasEquippedRangedWeapon(hero)){
if (koniec == 0){

bron2 = Npc_GetEquippedRangedWeapon(hero);
PrintScreen     (bron2.name, 80,91,"font_old_20_white.tga",1);

};
};

////////////////////////////////////////////////////////////////
////////////////////////ustawienie pasków na ekranie/////////
///////////////////////////////////////////////////////////////////
if (jednorazowe_wywolanie == 1){
// ----- an die Bars rankommen -----
MEM_InitGlobalInst ();
var oCViewStatusBar bar_hp; bar_hp = MEM_PtrToInst (MEM_GAME.hpBar);
var oCViewStatusBar bar_mana; bar_mana = MEM_PtrToInst (MEM_GAME.manaBar);

// ----- Bars an die alte Position -----
bar_hp.zCView_vposx = hp_vposx;
bar_hp.zCView_vposy = hp_vposy;

bar_mana.zCView_vposx = mana_vposx;
bar_mana.zCView_vposy = mana_vposy;
};
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////regeneracja///////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
if (regeneracja >= 1){

licznik += 1;

if (hero.attribute[atr_hitpoints] == 1){

hero.attribute[atr_hitpoints] = 1;

}
else

if hero.attribute[ATR_HITPOINTS] < hero.attribute[ATR_HITPOINTS_max]{
if (licznik >= 8){

hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + 1;
licznik = 0;

if (regeneracja >= 2){

hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + 2;

if (regeneracja >= 3){

hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + 3;

if (hero.attribute[atr_strength] >= 150){

hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + 4;

};
};
};
};
};

if (hero.attribute[ATR_HITPOINTS] > hero.attribute[ATR_HITPOINTS_max]){

hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS_max];

};
};



////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////regeneracja many///////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
if (regeneracjamana >= 1){

licznikmana += 1;

if hero.attribute[ATR_mana] < hero.attribute[ATR_mana_max]{
if (licznikmana >= 8){

hero.attribute[ATR_mana] = hero.attribute[ATR_mana] + 1;
licznikmana = 0;

if (regeneracjamana >= 2){

hero.attribute[ATR_mana] = hero.attribute[ATR_mana] + 1;

if (regeneracjamana >= 3){

hero.attribute[ATR_mana] = hero.attribute[ATR_mana] + 2;
};
};
};
};

if (hero.attribute[ATR_mana] >= hero.attribute[ATR_mana_max]){

hero.attribute[ATR_mana] = hero.attribute[ATR_mana_max];
};
};
//////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////wyświetlanie hp i many/////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////

hp = ConcatStrings (IntToString(hero.attribute[atr_hitpoints]),   "/");
hp_max = ConcatStrings (IntToString(hero.attribute[atr_hitpoints_max]), "");
hp_finish = ConcatStrings (hp, hp_max);
PrintScreen     (hp_finish, 2, 91, FONT_ScreenSmall, 2);

ma = ConcatStrings (IntToString(hero.attribute[atr_mana]),   "/");
ma_max = ConcatStrings (IntToString(hero.attribute[atr_mana_max]), "");
ma_finish = ConcatStrings (ma, ma_max);
PrintScreen     (ma_finish, 2, 97, FONT_ScreenSmall, 2);

//////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////Reputacja/////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
wyswietlanie_rep_orkowie = ConcatStrings ("Reputacja u Orków:                                                                                                                                                                               ",intToString(rep_orkowie));
wyswietlanie_rep_Rebelia = ConcatStrings ("Reputacja u Rebeliantów:                                     ",intToString(rep_rebelia));
wyswietlanie_rep_assasyn = ConcatStrings ("Reputacja u Assasynów:                                       ",intToString(rep_assasyn));
wyswietlanie_rep_MO = ConcatStrings ("Reputacja u Magów Ognia:                                     ",intToString(rep_MO));
wyswietlanie_rep_MW = ConcatStrings ("Reputacja u Magów Wody:                                      ",intToString(rep_MW));
wyswietlanie_rep_nekro = ConcatStrings ("Reputacja u Nekromantów:                                     ",intToString(rep_nekro));
wyswietlanie_rep_mys = ConcatStrings ("Reputacja u Myśliwych:                                       ",intToString(rep_mys));
wyswietlanie_rep_druid = ConcatStrings ("Reputacja u Druidów:                                         ",intToString(rep_druid));
wyswietlanie_rep_deze = ConcatStrings ("Reputacja u Dezerterów:                                      ",intToString(rep_deze));

R_key = mem_keystate(key_r);
if (r_key == key_pressed)
{
 var int nDocID;
        nDocID = Doc_Create();
        Doc_SetPages(nDocID,1);
        Doc_SetPage(nDocID,0,"letters.TGA",0);
        Doc_SetFont(nDocID,0,FONT_BookHeadline);
        Doc_SetMargins(nDocID,-1,50,50,50,50,1);
        Doc_PrintLine(nDocID,0,"Moja reputacja");
        Doc_SetFont(nDocID,0,FONT_Book);
        Doc_PrintLine(nDocID,0,"");
        Doc_PrintLines(nDocID,0, wyswietlanie_rep_orkowie);
        Doc_PrintLines(nDocID,0, "");

Doc_PrintLines(nDocID,0, wyswietlanie_rep_Rebelia);
Doc_PrintLines(nDocID,0, "");

Doc_PrintLines(nDocID,0, wyswietlanie_rep_assasyn);
Doc_PrintLines(nDocID,0, "");

Doc_PrintLines(nDocID,0, wyswietlanie_rep_deze);
Doc_PrintLines(nDocID,0, "");

Doc_PrintLines(nDocID,0, wyswietlanie_rep_mys);
Doc_PrintLines(nDocID,0, "");

Doc_PrintLines(nDocID,0, wyswietlanie_rep_MW);
Doc_PrintLines(nDocID,0, "");

Doc_PrintLines(nDocID,0, wyswietlanie_rep_MO);
Doc_PrintLines(nDocID,0, "");

Doc_PrintLines(nDocID,0, wyswietlanie_rep_nekro);
Doc_PrintLines(nDocID,0, "");

Doc_PrintLines(nDocID,0, wyswietlanie_rep_druid);
Doc_Show(nDocID);
};
//////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////koniec///////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
};                                                                                                                                                                                                                                                                                                                                  
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

duże obciążenie silnika
#22 2012-02-08, 15:42(Ostatnia zmiana: 2012-02-08, 15:42)
if (Npc_HasEquippedMeleeWeapon(hero)){

bron1 = Npc_GetEquippedMeleeWeapon(hero);
koniec = 0;
PrintScreen     (bron1.name, 80,88,"font_old_20_white.tga",1);

};

if (Npc_HasEquippedRangedWeapon(hero)){
        if (koniec == 0){

        bron2 = Npc_GetEquippedRangedWeapon(hero);
        PrintScreen     (bron2.name, 80,91,"font_old_20_white.tga",1);
       
        };
};
Wywaliłbym, tylko niepotrzebnie zmula.



hp = ConcatStrings (IntToString(hero.attribute[atr_hitpoints]),   "/");
hp_max = ConcatStrings (IntToString(hero.attribute[atr_hitpoints_max]), "");
hp_finish = ConcatStrings (hp, hp_max);
PrintScreen     (hp_finish, 2, 91, FONT_ScreenSmall, 2);

ma = ConcatStrings (IntToString(hero.attribute[atr_mana]),   "/");
ma_max = ConcatStrings (IntToString(hero.attribute[atr_mana_max]), "");
ma_finish = ConcatStrings (ma, ma_max);
PrintScreen     (ma_finish, 2, 97, FONT_ScreenSmall, 2);
Jak wyżej, chyba że uważasz że jest to warte zmulania.



wyswietlanie_rep_orkowie = ConcatStrings ("Reputacja u Orków:                                                                                                                                                                               ",intToString(rep_orkowie));
wyswietlanie_rep_Rebelia = ConcatStrings ("Reputacja u Rebeliantów:                                     ",intToString(rep_rebelia));
wyswietlanie_rep_assasyn = ConcatStrings ("Reputacja u Assasynów:                                       ",intToString(rep_assasyn));
wyswietlanie_rep_MO      = ConcatStrings ("Reputacja u Magów Ognia:                                     ",intToString(rep_MO));
wyswietlanie_rep_MW      = ConcatStrings ("Reputacja u Magów Wody:                                      ",intToString(rep_MW));
wyswietlanie_rep_nekro   = ConcatStrings ("Reputacja u Nekromantów:                                     ",intToString(rep_nekro));
wyswietlanie_rep_mys     = ConcatStrings ("Reputacja u Myśliwych:                                       ",intToString(rep_mys));
wyswietlanie_rep_druid   = ConcatStrings ("Reputacja u Druidów:                                         ",intToString(rep_druid));
wyswietlanie_rep_deze    = ConcatStrings ("Reputacja u Dezerterów:    
Ten kawałek przesuń w to miejsce:
R_key = mem_keystate(key_r);
if (r_key == key_pressed)
{
###O TUTAJ###
 var int nDocID;
        nDocID = Doc_Create();

Do warunku na początku nie czepiam się tylko dlatego że jest nieszkodliwy.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Cytuj
Korzystasz z Ikarusa, po kiego wafla robisz 20 zmiennych i szlaczek? Użyj tablic/list/wtf.

Nie chciałeś 20 linijkowego szlaczka masz 180 linijek szlaczka na pewno to lepsze rozwiązanie ;p

p.s. Nie korzystam dużo z ikarusa.

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
wyświetlanie broni może nie jest potrzebne, ale nie chciałbym wywalać wyświetlania hp i many gdyż osobiście przy graniu w gothica często by mi było potrzebne np. przy walce z wrogiem magią przydatne jest widzieć dokładną wartość many
 

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
To zrób to pod jakiś klawisz. Choć według mnie i tak gdzieś jeszcze tkwi błąd że zamula.
 

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy
Cytuj
Korzystasz z Ikarusa, po kiego wafla robisz 20 zmiennych i szlaczek? Użyj tablic/list/wtf.

Nie chciałeś 20 linijkowego szlaczka masz 180 linijek szlaczka na pewno to lepsze rozwiązanie ;p

p.s. Nie korzystam dużo z ikarusa.

Gdzie w tym szlaczku jest użycie list, które rekomendowałem? Ehm?
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Cytuj
Korzystasz z Ikarusa, po kiego wafla robisz 20 zmiennych i szlaczek? Użyj tablic/list/wtf.

Nie chciałeś 20 linijkowego szlaczka masz 180 linijek szlaczka na pewno to lepsze rozwiązanie ;p

p.s. Nie korzystam dużo z ikarusa.

Gdzie w tym szlaczku jest użycie list, które rekomendowałem? Ehm?
No nie ma ale dzięki twojemu postowi (bo mass za dużo nie myśli) zamiast
                       trucie(zatruty1);
                        trucie(zatruty2);
                        trucie(zatruty3);
                        trucie(zatruty4);
                        trucie(zatruty5);
                        trucie(zatruty6);
                        trucie(zatruty7);
                        trucie(zatruty8);
                        trucie(zatruty9);
                        trucie(zatruty10);
                        trucie(zatruty11);
                        trucie(zatruty12);
                        trucie(zatruty13);
                        trucie(zatruty14);
                        trucie(zatruty15);
                        trucie(zatruty16);
                        trucie(zatruty17);
                        trucie(zatruty18);
                        trucie(zatruty19);
                        trucie(zatruty20);

masz
              if (zatruty1.aivar[49] > 0 ){
                        if (zatruty1.attribute[atr_hitpoints] > 10){

                        zatruty1.attribute[ATR_HITPOINTS] = zatruty1.attribute[ATR_HITPOINTS]-3;
                        zatruty1.aivar[49]=zatruty1.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty2.aivar[49] > 0 ){
                        if (zatruty2.attribute[atr_hitpoints] > 10){

                        zatruty2.attribute[ATR_HITPOINTS] = zatruty2.attribute[ATR_HITPOINTS]-3;
                        zatruty2.aivar[49]=zatruty2.aivar[49]-1;
                               
                        };
                };
               
                if (zatruty3.aivar[49] > 0 ){
                        if (zatruty3.attribute[atr_hitpoints] > 10){

                        zatruty3.attribute[ATR_HITPOINTS] = zatruty3.attribute[ATR_HITPOINTS]-3;
                        zatruty3.aivar[49]=zatruty3.aivar[49]-1;
                               
                        };
                };
               
                if (zatruty4.aivar[49] > 0 ){
                        if (zatruty4.attribute[atr_hitpoints] > 10){

                        zatruty4.attribute[ATR_HITPOINTS] = zatruty4.attribute[ATR_HITPOINTS]-3;
                        zatruty4.aivar[49]=zatruty4.aivar[49]-1;
                               
                        };
                };
                if (zatruty5.aivar[49] > 0 ){
                        if (zatruty5.attribute[atr_hitpoints] > 10){

                        zatruty5.attribute[ATR_HITPOINTS] = zatruty5.attribute[ATR_HITPOINTS]-3;
                        zatruty5.aivar[49]=zatruty5.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty6.aivar[49] > 0 ){
                        if (zatruty6.attribute[atr_hitpoints] > 10){

                        zatruty6.attribute[ATR_HITPOINTS] = zatruty6.attribute[ATR_HITPOINTS]-3;
                        zatruty6.aivar[49]=zatruty6.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty7.aivar[49] > 0 ){
                        if (zatruty7.attribute[atr_hitpoints] > 10){

                        zatruty7.attribute[ATR_HITPOINTS] = zatruty7.attribute[ATR_HITPOINTS]-3;
                        zatruty7.aivar[49]=zatruty7.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty8.aivar[49] > 0 ){
                        if (zatruty8.attribute[atr_hitpoints] > 10){

                        zatruty8.attribute[ATR_HITPOINTS] = zatruty8.attribute[ATR_HITPOINTS]-3;
                        zatruty8.aivar[49]=zatruty8.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty9.aivar[49] > 0 ){
                        if (zatruty9.attribute[atr_hitpoints] > 10){

                        zatruty9.attribute[ATR_HITPOINTS] = zatruty9.attribute[ATR_HITPOINTS]-3;
                        zatruty9.aivar[49]=zatruty9.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty10.aivar[49] > 0 ){
                        if (zatruty10.attribute[atr_hitpoints] > 10){

                        zatruty10.attribute[ATR_HITPOINTS] = zatruty10.attribute[ATR_HITPOINTS]-3;
                        zatruty10.aivar[49]=zatruty10.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty11.aivar[49] > 0 ){
                        if (zatruty11.attribute[atr_hitpoints] > 10){

                        zatruty11.attribute[ATR_HITPOINTS] = zatruty11.attribute[ATR_HITPOINTS]-3;
                        zatruty11.aivar[49]=zatruty11.aivar[49]-1;
                               
                        };
                };
               
                if (zatruty12.aivar[49] > 0 ){
                        if (zatruty12.attribute[atr_hitpoints] > 10){

                        zatruty12.attribute[ATR_HITPOINTS] = zatruty12.attribute[ATR_HITPOINTS]-3;
                        zatruty12.aivar[49]=zatruty12.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty13.aivar[49] > 0 ){
                        if (zatruty13.attribute[atr_hitpoints] > 10){

                        zatruty13.attribute[ATR_HITPOINTS] = zatruty13.attribute[ATR_HITPOINTS]-3;
                        zatruty13.aivar[49]=zatruty13.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty14.aivar[49] > 0 ){
                        if (zatruty14.attribute[atr_hitpoints] > 10){

                        zatruty14.attribute[ATR_HITPOINTS] = zatruty14.attribute[ATR_HITPOINTS]-3;
                        zatruty14.aivar[49]=zatruty14.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty15.aivar[49] > 0 ){
                        if (zatruty15.attribute[atr_hitpoints] > 10){

                        zatruty15.attribute[ATR_HITPOINTS] = zatruty15.attribute[ATR_HITPOINTS]-3;
                        zatruty15.aivar[49]=zatruty15.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty16.aivar[49] > 0 ){
                        if (zatruty16.attribute[atr_hitpoints] > 10){

                        zatruty16.attribute[ATR_HITPOINTS] = zatruty16.attribute[ATR_HITPOINTS]-3;
                        zatruty16.aivar[49]=zatruty16.aivar[49]-1;
                               
                        };
                };
               
                if (zatruty17.aivar[49] > 0 ){
                        if (zatruty17.attribute[atr_hitpoints] > 10){

                        zatruty17.attribute[ATR_HITPOINTS] = zatruty17.attribute[ATR_HITPOINTS]-3;
                        zatruty17.aivar[49]=zatruty17.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty18.aivar[49] > 0 ){
                        if (zatruty18.attribute[atr_hitpoints] > 10){

                        zatruty18.attribute[ATR_HITPOINTS] = zatruty18.attribute[ATR_HITPOINTS]-3;
                        zatruty18.aivar[49]=zatruty18.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty19.aivar[49] > 0 ){
                        if (zatruty19.attribute[atr_hitpoints] > 10){

                        zatruty19.attribute[ATR_HITPOINTS] = zatruty19.attribute[ATR_HITPOINTS]-3;
                        zatruty19.aivar[49]=zatruty19.aivar[49]-1;
                               
                        };
                };
       
                if (zatruty20.aivar[49] > 0 ){
                        if (zatruty20.attribute[atr_hitpoints] > 10){

                        zatruty20.attribute[ATR_HITPOINTS] = zatruty20.attribute[ATR_HITPOINTS]-3;
                        zatruty20.aivar[49]=zatruty20.aivar[49]-1;
                               
                        };

większość z tego forum nigdy nie widziała i nie zobaczy pętli czy tablicy wiec lepiej robić łatwiejsze sposoby bez ikarusa przynajmniej jest większa szansa ze zrozumieją ;p

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy
Co to ma związanego z Ikarusem w ogóle? To, że niektórzy są debilami i nie myślą logicznie to już nie mój problem.
 

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
nie to że nie myśle tylko nie siedze w modowaniu tyle co wy więc może troche wyrozumiałości skoro nie rozumiem nie których rzeczy i nie chce bezmyśle kopiować skryptu to nie znaczy że jestem głupi
 

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy
Właśnie bezmyślnie skopiowałeś własny skrypt 20 razy, nawet nie wiem w jakim celu.
 

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
trochę poczytałem o tablicach i zrobię trucie na zasadzie tablic, a żeby nie zakładać nowego tematu to może mi ktoś napisać jak przypisać zmiennej(c_item) instance item-a bo daje coś takiego

strzala = hlp_isitem(itrw_arrow);
i wywala mi błędy że nie zwracam instancji
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

duże obciążenie silnika
#32 2012-02-10, 15:10(Ostatnia zmiana: 2012-02-10, 15:11)
Nic dziwnego, hlp_isitem nie ma zwracać instancji, tylko 0 lub 1. Niestety nie mogę sobie w ogóle przypomnieć funkcji która zwraca typ c_item na podstawie podanego identyfikatora. Prawdopodobnie skrypterzy mają po prostu korzystać z mechanizmu opisanego w pierwszym linku z mojej sygnatury. W skrócie, po prostu wpisz
strzala = itrw_arrow;A parser resztą zajmie się sam.

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
dalej nie zwraca instancji
 


Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
Zmiennej c_item przypisujesz referencję do konkretnego obiektu. InstanceID trzymasz w zmiennych typu int. Napisz szerzej, co zamierzasz zrobić.
 

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy

mass1500

duże obciążenie silnika
#36 2012-02-10, 16:54(Ostatnia zmiana: 2012-02-10, 16:55)
chce zrobić łuk ze zmiennymi strzałami
zmienna typu c_item
g2nk
 

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
Chyba coś w stylu:
var c_item bow = Npc_GetInvItem(hero, Itrw_superluk);
bow.munition = Itrw_superstrzala;
 

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy

mass1500

duże obciążenie silnika
#38 2012-02-10, 17:02(Ostatnia zmiana: 2012-02-10, 17:02)
dobra ale to jest opcja alternatywna, pewnie przy innych sprawach przyda mi się przypisywanie zmiennej
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

duże obciążenie silnika
#39 2012-02-10, 17:23(Ostatnia zmiana: 2012-02-10, 18:12)
Zysk, według NicoDE Npc_GetInvItem zwraca inta (http://www.bendlins.de/temp/externals.d). Ai_intern/externals.d to tylko notatnik developerów, nie zawiera udokumentowanych wszystkich funkcji, a w wielu przypadkach są opisane wersje bardzo stare, niezgodne z tym co faktycznie jest zaimplementowane w silniku (jak prawdopodobnie w tym przypadku). Najpewniejsza jest lista dostarczona przez NicoDE którą przed chwilą podlinkowałem (jej kompletność potwierdzają choćby dane z dekompilatorów, sam przeczesywałem gothic.exe IDĄ). Wydaje mi się że prawidłową metodą jest przykładowo:
var c_item pochodnia;
pochodnia = itlstorch;
O tym co robi w takich sytuacjach parser, była już dyskusja, opisałem to tutaj: http://themodders.org/index.php?/topic/13579-identyfikatory-jako-indeksy-tablicy-symboli-parsera/ Może i nazewnictwo stosuję złe, ale praktyczny sens jest taki że parser potrafi interpretować skryptowe identyfikatory zarówno jako liczbowe indeksy, jak i odniesienia do obiektów, co było sprawdzone na wielu przykładach (niestety we wszystkich podstawiałem identyfikator jako argument funkcji, nie w operacji przypisania).


Tak na marginesie, to w ogóle w Gothicu jest bardzo mało funkcji zewnętrznych które zwracają odniesienie do obiektu:
Hlp_GetNpc : C_NPC
Npc_GetNewsOffender : C_NPC
Npc_GetNewsVictim : C_NPC
Npc_GetNewsWitness : C_NPC
Wld_GetFormerPlayerPortalOwner : C_NPC
Wld_GetPlayerPortalOwner : C_NPC
Npc_GetPortalOwner : ?
Npc_GetLookAtTarget : ?
Npc_GetReadiedWeapon : C_Item
Npc_GetEquippedMeleeWeapon : C_Item
Npc_GetEquippedRangedWeapon : C_Item
Npc_GetEquippedArmor : C_Item

Npc_GetInvItem : C_Item(int!)
Dwie z nich są nieudokumentowane (tam gdzie dałem "?"), można by zgadywać albo po prostu sprawdzić (można się domyślać że w obu jest c_npc).

//edit: w skryptach nie ma żadnych przykładów przypisywania do zmiennej c_item czegokolwiek oprócz założonej zbroi/broni. Zaryzykowałbym jednak użycie jeszcze innego hacka (ten silnik jest ich pełen...):
hlp_isitem(itrw_arrow);
strzala = item;
"Item" to dynamicznie przypisywana przez silnik zmienna podobna do "self" i "other". Jeśli wywoła się funkcję która "operuje" na jakimś obiekcie typu c_item, przy odrobinie szczęścia ustawi na niego tą zmienną.


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