duże obciążenie silnika 15036 55

O temacie

Autor mass1500

Zaczęty 7.02.2012 roku

Wyświetleń 15036

Odpowiedzi 55

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
Mam pytanie czy można jakoś odciążyć silnik gry? Bo gdy się rozpisuje w tick tocku to potem mam mały fps w gothic-u, gra tnie i to dość znacznie, co bardzo przeszkadza w grze i odpycha wizualnie

z góry dzięki za pomoc
 


EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Co Ty dałeś do tego tick tocka ?? oO  Jak używałem ich jeszcze miałem tam nawalone bóg wie co i nie myło żadnych spadków. Może nie w tym tkwi problem.
 

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
tick tock jest niezbędny do moda a napisałem skrypty prosto bez zbędnych pierdół ale jest tego dość dużo
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

duże obciążenie silnika
#4 2012-02-07, 15:55(Ostatnia zmiana: 2012-02-07, 15:56)
Jeśli nie stanowią one tajemnicy, to wklej je tutaj - upewnilibyśmy się że są tak minimalistyczne jak to tylko możliwe.

Aha, jest jeszcze jeden, wcale nie głupi, sposób - zmniejszyć częstotliwość ticktocka. To jedyne wyjście oprócz przycinania kodu.

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Widziałem skrypt sporo tam tego nawalił ale miałem kiedyś podobnie może i więcej i nic mi nie muliło mówił mi że podczas zatruwania najbardziej mu muliło.
 

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy

mass1500

duże obciążenie silnika
#6 2012-02-07, 16:13(Ostatnia zmiana: 2012-02-07, 16:15)
może jest to trochę chamskie ale nie chce aby każdy tak poprostu skopiował sobie moje skrypty i wkleił do swojej modyfikacji

jeśli możesz to wejdź na gg i wyśle ci je i mógłbyś zobaczyć co jest źle
 

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy
Faktycznie, twoje zamulające skrypty są tak cenne... Kto będzie chciał i tak zdekompiluje moda i je wyciągnie, jest sens się tak bawić?
 

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
Dobra niech będzie i tak nikt mi raczej nie pomoże nie widząc skryptu

Spoiler
func void TICK_TOCK()
{
/////////////////////////////////////////////////////////////////////////
/////////////////////////////zatruwanie npc//////////////////////////////
/////////////////////////////////////////////////////////////////////////
if (trucie >= 1)
{
licznik_trucia += 1;

if (licznik_trucia >= max_licznik_trucia)
{
licznik_trucia = 0;
};

if (zatruty1.aivar[49] > 0 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (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 )
&& (licznik_trucia == 8)
&& (zatruty20.attribute[atr_hitpoints] > 10)
{
zatruty20.attribute[ATR_HITPOINTS] = zatruty20.attribute[ATR_HITPOINTS]-3;
zatruty20.aivar[49]=zatruty20.aivar[49]-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)
&& (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))
&& (koniec == 0)
{
bron2 = Npc_GetEquippedRangedWeapon(hero);
PrintScreen     (bron2.name, 80,91,"font_old_20_white.tga",1);
};
////////////////////////////////////////////////////////////////
/////////////////////////widoczny pasek many//////////////////////
///////////////////////////////////////////////////////////////////
const int MANABAR_SHOW =  227218667;
var int tmp;
       
        MemoryProtectionOverride(7091180, 4);
        tmp = MANABAR_SHOW;
MEM_WriteInt( 7091180, tmp);

////////////////////////////////////////////////////////////////
////////////////////////ustawienie pasków na ekranie/////////
///////////////////////////////////////////////////////////////////

// ----- 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)
{
if (licznik >= maxlicznika)
{
licznik = 0;
};
licznik += 1;

if (hero.attribute[atr_hitpoints] == 1)
{
hero.attribute[atr_hitpoints] = 1;
}
else
if hero.attribute[ATR_HITPOINTS] < hero.attribute[ATR_HITPOINTS_max]
&& (licznik == 7)

{
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS] + 1;

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 (regeneracja >= 3)
&& (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)
{
if (licznikmana >= maxlicznikamana)
{
licznikmana = 0;
};
licznikmana += 1;

if hero.attribute[ATR_mana] < hero.attribute[ATR_mana_max]
&& (licznikmana == 7)

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

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///////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
if(PerFrameCallTrigger_Init)
{
var int ptr;
ptr = MEM_SearchVobByName ("TICK_TOCK"); //TICK_TOCK to nazwa twojego tick_tocka
MEM_AssignInst (trigger, ptr);
PerFrameCallTrigger_Init=FALSE;
};
///////////////////////////////////////////////////////////////////////////////////////////
if (true)
{  Wld_SendTrigger("TICK_TOCK");   };
};                                                                                                                                                                                                                                                                                                                                  
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy

RafalBudzis

duże obciążenie silnika
#9 2012-02-07, 16:38(Ostatnia zmiana: 2012-02-07, 16:54)
1) na początek rozdziel to

       if (zatruty20.aivar[49] > 0 )
        && (licznik_trucia == 8)
        && (zatruty20.attribute[atr_hitpoints] > 10)

na

       if (zatruty20.aivar[49] > 0 ){
        if (licznik_trucia == 8){
        if (zatruty20.attribute[atr_hitpoints] > 10)

W pierwszym skrypcie ZAWSZE sprawdzało 3 warunki na raz.
W 2 możliwe jest ze po 1 warunki skończy się sprawdzanie kolejnych

2)co to za gówno ten licznik_trucia ?? :D

wydaje mi sie ze chodziło tu o spowolnienie tick`a ale w takim razie po cholere w tylu miejscach sprawdzac warunek (licznik_trucia == 8) ??



3) aaaa mam przyczyne ;d  
if (true)
{  Wld_SendTrigger("TICK_TOCK");   };

Edek kazał dać bo tak mu działało ? :D  Wypierdol to ;d  Te śmieszne coś powoduje wywoływanie skrypty zaraz po jego skończeniu. Wiec wykonało się wszystko w 0.4 s to zaczyna wykonywać skrypt jeszcze raz i nie ważne czy w spacerze ustawiłeś na 1 czy 2 sekundy opóźnienia.


4)         if (licznikmana >= maxlicznikamana)
{
        licznikmana = 0;
};      
        licznikmana += 1;

Skoro juz spowalniasz to zmienną licznik_trucia to użyj ją też do spowalniania many.

5) to juz tak czysto przeglądowi strasznie nie ogarnieniu ten skrypt trudno cokolwiek znaleźć. pamiętaj każda { to tabulator do przodu każda }; tabulator do tyłu. Od razu kod lepiej wygląda ;d

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy

mass1500

duże obciążenie silnika
#10 2012-02-07, 16:45(Ostatnia zmiana: 2012-02-07, 16:48)
co to za gówno ten licznik_trucia ?? :D

wydaje mi sie ze chodziło tu o spowolnienie tick`a ale w takim razie po cholere w tylu miejscach sprawdzac warunek (licznik_trucia == 8) ??

daje takie liczniki żeby nie robić 20 tick tocków

edit///////////////////////

zamieniając && na if wywala mi błąd że oczekiwany jest {
 

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
Podziel to na funkcje i wykonuj je tylko wtedy kiedy potrzeba. 'licznik_trucia' można sprawdzać raz na wywołanie, a nie 50. Napisy można sklejać tylko wtedy kiedy potrzeba etc.

@Refał operator && jest zwykle leniwy - jeśli pierwszy element jest fałszywy to kolejne nie są sprawdzane.
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
daje takie liczniki żeby nie robić 20 tick tocków

no nie zmienia faktu ze wystarczy jeden taki i jeden tick tock ale okej

zamieniając && na if wywala mi błąd że oczekiwany jest {

osoba myśląca wiedziała by ze trzeba też dodać };
to
       if (zatruty2.aivar[49] > 0 )
        && (licznik_trucia == 8)
        && (zatruty2.attribute[atr_hitpoints] > 10)
{
zatruty2.attribute[ATR_HITPOINTS] = zatruty2.attribute[ATR_HITPOINTS]-3;
zatruty2.aivar[49]=zatruty2.aivar[49]-1;
};
zamieniasz na

       if (zatruty2.aivar[49] > 0 ){
        if (licznik_trucia == 8){
        if (zatruty2.attribute[atr_hitpoints] > 10){

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

};
};
};



@Refał operator && jest zwykle leniwy - jeśli pierwszy element jest fałszywy to kolejne nie są sprawdzane.

Człowiek uczy się na błędach zapamiętam twoje słowa ;d


Zmień początem tick`a na
func void trucie(var C_NPC postac){

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

};


func void TICK_TOCK()
{
/////////////////////////////////////////////////////////////////////////
/////////////////////////////zatruwanie npc//////////////////////////////
/////////////////////////////////////////////////////////////////////////
        if (trucie >= 1){

        licznik_trucia += 1;

        if (licznik_trucia >= max_licznik_trucia){
        licznik_trucia = 0;
};

if (licznik_trucia == 8){

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);

};


};
/////////////////////////////////////////////////////////////////////////
/////////////////////////////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;
};
...

o wiele lepiej wygląda i o wiele mniej linijek masz ;d

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Te funkcje nie powinny być wywoływane co klatkę. Wywal je lub w razie potrzeby wywołuj raz, ich efekty już zostaną.
MemoryProtectionOverride(7091180, 4);
MEM_WriteInt( 7091180, tmp);
MEM_InitGlobalInst ();
MEM_PtrToInst (MEM_GAME.hpBar);
MEM_PtrToInst (MEM_GAME.manaBar);
MEM_AssignInst (trigger, ptr);
MEM_SearchVobByName ("TICK_TOCK");
Zwłaszcza ostatnia potwornie zamula. Podejrzewam że jak wywalisz chociaż ją, to gra zacznie działać płynnie.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Te funkcje nie powinny być wywoływane co klatkę. Wywal je lub w razie potrzeby wywołuj raz, ich efekty już zostaną.
Myśle ze to też powinieneś wywalić bo paski pozycje zmienią raz i zostaną na miejscu.

// ----- 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;

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
rafał dałem trucie jak kazałeś ale dalej tnie
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Trucie było w ramach przejzystosci kodu dla ciebie. Zastosuj sie do wszystkich punktów albo poczekaj bo pisze ci to z tabulatorami bo to jest horror co tam jest ;d

np.
Spoiler
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////regeneracja many///////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
        if (regeneracjamana >= 1)
{
        if (licznikmana >= maxlicznikamana)
{
        licznikmana = 0;
};      
        licznikmana += 1;

        if hero.attribute[ATR_mana] < hero.attribute[ATR_mana_max]
        && (licznikmana == 7)
       
{
        hero.attribute[ATR_mana] = hero.attribute[ATR_mana] + 1;

        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];
};
};

Wiesz która klamra jest do którego if`a ?? bo ja się gubię naucz się ogarniania bo potem jest lepiej ;d  przykładowo

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

if (licznikmana >= maxlicznikamana){
        licznikmana = 0;
};    
 
        licznikmana += 1;

         if (hero.attribute[ATR_mana] < hero.attribute[ATR_mana_max])
         && (licznikmana == 7){

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

        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];
};

};      
};

i dopiero po zrobieniu tabulatorów zobaczyłem ze nawet jeżeli nie masz wyuczonej regeneracji to sprawdzasz czy mana nie przekroczyła max many czego nie było widać bez tabulatorów

EDIT : Sorry dobrze było ale sie pogubiłem przez ten nie ład powinno byc całkiem inaczej ale co do spr przekroczenia było ok ;d

Ja bym to zrobił troche inaczej

       if (regeneracjamana >= 1)//sprawdza czy umiejentnosc jest wyuczona
if (hero.attribute[ATR_mana] < hero.attribute[ATR_mana_max]){//jeśli tak to sprawdza czy mamy braki many    
 
        licznikmana += 1;
         
         if (licznikmana == 8){
licznikmana = 0;
        hero.attribute[ATR_mana] = hero.attribute[ATR_mana] + 1;

        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];
};  
};

};

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

duże obciążenie silnika
#17 2012-02-07, 17:38(Ostatnia zmiana: 2012-02-07, 17:47)
Nie męcz się, po prostu wywal ten najbardziej kosztowny fragment który jak na ironię nawet nic nie robi:
//////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////koniec///////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
if(PerFrameCallTrigger_Init)
{
var int ptr;
ptr = MEM_SearchVobByName ("TICK_TOCK"); //TICK_TOCK to nazwa twojego tick_tocka
MEM_AssignInst (trigger, ptr);
PerFrameCallTrigger_Init=FALSE;
};
///////////////////////////////////////////////////////////////////////////////////////////

Chciałeś zrobić triggera klatkowego, ale ten fragment który miał być POZA ticktockiem (np w startupie) wstawiłeś DO niego, a tego który miał być w nim... nie wstawiłeś nigdzie. (PS: właściwie to nigdy nie korzystałem tak naprawdę z Ikarusa, mam tylko teoretyczną wiedzę - jednak szansa że się mylę jest tutaj raczej niewielka).

Jeśli nadal wydajność będzie za mała, przeczytaj mój poprzedni post. Ale na razie rzuć wszystkie skomplikowane przeróbki i spróbuj wywalić tylko to co tu napisałem.

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy
1) na początek rozdziel to

       if (zatruty20.aivar[49] > 0 )
        && (licznik_trucia == 8)
        && (zatruty20.attribute[atr_hitpoints] > 10)

na

       if (zatruty20.aivar[49] > 0 ){
        if (licznik_trucia == 8){
        if (zatruty20.attribute[atr_hitpoints] > 10)

(...) W pierwszym skrypcie ZAWSZE sprawdzało 3 warunki na raz. (...)

Do stwierdzenia, że koniunkcja jest fałszywa wystarczy znaleźć jedno fałszywe zdanie logiczne, które się na nią składa. Sprawdziłeś co robi parser zanim to napisałeś?

Cytuj
3) aaaa mam przyczyne ;d  
if (true)
{  Wld_SendTrigger("TICK_TOCK");   };

(...) Te śmieszne coś powoduje wywoływanie skrypty zaraz po jego skończeniu. (...)

Udowodnij jaki związek ma wpierdalanie zawsze spełniającego się warunku przed `Wld_SendTrigger` ze zmianą działania samego `Wld_SendTrigger`. Póki co nie widzę krzty logiki, ani w tym zapisie, ani w Twoim myśleniu.

Nie męcz się, po prostu wywal ten najbardziej kosztowny fragment który jak na ironię nawet nic nie robi:
//////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////koniec///////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
if(PerFrameCallTrigger_Init)
{
var int ptr;
ptr = MEM_SearchVobByName ("TICK_TOCK"); //TICK_TOCK to nazwa twojego tick_tocka
MEM_AssignInst (trigger, ptr);
PerFrameCallTrigger_Init=FALSE;
};
///////////////////////////////////////////////////////////////////////////////////////////

Chciałeś zrobić triggera klatkowego, ale ten fragment który miał być POZA ticktockiem (np w startupie) wstawiłeś DO niego, a tego który miał być w nim... nie wstawiłeś nigdzie. (PS: właściwie to nigdy nie korzystałem tak naprawdę z Ikarusa, mam tylko teoretyczną wiedzę - jednak szansa że się mylę jest tutaj raczej niewielka).

Jeśli nadal wydajność będzie za mała, przeczytaj mój poprzedni post. Ale na razie rzuć wszystkie skomplikowane przeróbki i spróbuj wywalić tylko to co tu napisałem.

Tu się zgodzę, lookupowanie całego świata w poszukiwaniu VOBa za pomocą stringa MUSI boleć. Prawdopodobnie najciężej strawny kawałek funkcji. (dopisano) Tylko zaraz... Przecież ta inicjalizacja i tak powinna wykonać się tylko raz, @see:
PerFrameCallTrigger_Init=FALSE;
Cytuj
                       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);

:facepalm:  Korzystasz z Ikarusa, po kiego wafla robisz 20 zmiennych i szlaczek? Użyj tablic/list/wtf.
 

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
nie umiem zrobić tablicy i dlatego robie to w ten sposób
spełniający się warunek już wywaliłem a jak wróce do domu to poprawie reszte i dam znać
 


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