duże obciążenie silnika
2026-07-06, 22:01

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

duże obciążenie silnikaPrzeczytany 18361 razy

Offline Zysk

  • Użytkownicy
  • Offline
  • Posty606
  • Propsy451
0 Pokaż propsujących
dobra ale to jest opcja alternatywna, pewnie przy innych sprawach przyda mi się przypisywanie zmiennej
Nie martw się na zapas. Ten język jest zepsuty i wielu rzeczy nie da się zrobić tak, jakby się chciało. Jak będziesz miał jakieś konkretny pomysł, to pewnie będzie się dało jakoś obejść problem.

Offline inż. Avallach

  • Administrator
  • Offline
  • Posty7661
  • Propsy5239
  • NagrodyV
  • ProfesjaProgramista
0 Pokaż propsujących
Zedytowałem posta, ale przez ten czas temat przeskoczył na następną stronę, więc dopisuję jeszcze raz, tym razem jestem praktycznie pewien odpowiedzi:
//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ą.

Offline Zysk

  • Użytkownicy
  • Offline
  • Posty606
  • Propsy451
0 Pokaż propsujących
Ale to nie jest potrzebne, bo c_item.munition jest var int. Czy nie?

Offline EdekSumo

  • Wyspa Khorinis
  • *
  • Offline
  • Posty1739
  • Propsy925
  • ProfesjaLvl designer
0 Pokaż propsujących
Jesteś pewien tej zmiennej item? W LeGo używają takiej zmiennej i sami przypisują jej wartość.

Offline inż. Avallach

  • Administrator
  • Offline
  • Posty7661
  • Propsy5239
  • NagrodyV
  • ProfesjaProgramista
0 Pokaż propsujących
Ale to nie jest potrzebne, bo c_item.munition jest var int. Czy nie?
Swoim postem przyczepiłem się nie do twojego:
bow.munition = Itrw_superstrzala;Które jest własnie jak najbardziej poprawne i demonstruje zastosowanie identyfikatora interpretowanego jako liczbowy indeks (mylący jest przykład który podałem w poprzednim poście), ale linijki powyżej, dotyczącej łuku:
var c_item bow = Npc_GetInvItem(hero, Itrw_superluk);Jeśli lista Nico jest prawidłowa, to w tym momencie otrzymasz błąd dotyczący niezgodności typów (próbujesz przypisać wynik funkcji typu int do zmiennej typu c_item) (chyba że parser zinterpretuje liczbę zwróconą przez tą funkcję jako indeks symbolu, a do zmiennej przypisze odpowiadający mu obiekt - chociaż aż takie sprytne to chyba nie jest).

Według mnie trzeba by to raczejzastąpić przez
var c_item bow = Npc_GetEquippedRangedWeapon(self);lub tego haxiorskiego, dającego "dowolny" wybór:hlp_isitem(Itrw_superluk);
var c_item bow = item;

@edeksumo: tym zmiennym oczywiście można przypisywać wartość samemu jeśli wie się co robi. Nie ma żadnego konfliktu, są one przecież normalnie zdefiniowane na podstawie skryptów (ironicznie w pliku "constans".d). Po prostu zmieniając ich wartość trzeba liczyć się z tym że z jednej strony możemy popsuć szyki innym funkcjom (minimalna szansa, prawie się #msg1019315item#msg1019315 nie używa) lub że silnik zaraz nam ją znowu zmieni (jeśli wywołujemy zaraz inną funkcję operującą na innym przedmiocie, jest to bardzo prawdopodobne).

Właściwie najlepiej byłoby po prostu spróbować:
print (IntToString(Npc_GetInvItem(hero, itlstorch)));Jeśli wywali błąd o niezgodności typów, to znaczy że Nico się pomylił, a przez niego i ja. Jeśli zwróci liczbę, to będzie trzeba sprawdzić czy jest taka sama jak
print (IntToString(itlstorch));a więc czy w razie czego mogłaby posłużyć parserowi do znalezienia obiektu (właściwie ta funkcja byłaby wtedy bezużyteczna).

Offline mass1500

  • Użytkownicy
  • Offline
  • Posty149
  • Propsy11
  • ProfesjaGracz
0 Pokaż propsujących
jak wpisuje

hlp_isitem(itrw_arrow);
wywala mi błąd że oczekiwany jest , (nie średnik)

Offline inż. Avallach

  • Administrator
  • Offline
  • Posty7661
  • Propsy5239
  • NagrodyV
  • ProfesjaProgramista
0 Pokaż propsujących
Aha, zapomniałem że ta funkcja ma dwa argumenty. W takim razie spróbuj:
Hlp_IsValidItem(Itrw_superluk);
var c_item bow = item;
a w ostateczności:
Npc_GetInvItem(hero, Itrw_superluk);
var c_item bow = item;
(tylko dlatego że chodzi tu nie o wartość zwracaną przez funkcję, ale sam fakt że dotyczy danego obiektu klasy c_item).

Offline mass1500

  • Użytkownicy
  • Offline
  • Posty149
  • Propsy11
  • ProfesjaGracz
0 Pokaż propsujących
dalej nie zwraca instancji :[

Offline Sawik

  • Moderator działu
  • Rebel
  • Offline
  • Posty4772
  • Propsy3197
  • ProfesjaNierób
0 Pokaż propsujących
Przecież znasz wszelkie rodzaje strzał jakie możesz użyć, zamiast zmieniać jakąś zmienną po prostu zmień munition.
Po pierwsze pobierz instance łuku jaki masz założony
var c_item bow = Npc_GetEquippedRangedWeapon(self);
Teraz zamiast w funkcji jakiejś tam zmieniać zmienną zmieniaj bow.munition. bow.munition = twoja_strzała; Sposób sprawdzony bo ja tak robiłem.
przykład takiej funkcji:
Spoiler
func void assign_arrow_to_bow(){
If bow.flags = ITEM_BOW
{
 if Npc_HasItems(hero, ItRw_ArrowFire)
                        {
                        bow.munition = ITRW_ARROWFIRE;
                        }
else if Npc_HasItems (hero, ItRw_SuperArrow)
{
Bow.munition = ITRW_SUPERARROW;
}
else
{
bow.munition = ITRW_ARROW);
};
};
};

« Ostatnia zmiana: 2012-02-10, 19:41 wysłany przez: sawik »
Ż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

Offline inż. Avallach

  • Administrator
  • Offline
  • Posty7661
  • Propsy5239
  • NagrodyV
  • ProfesjaProgramista
0 Pokaż propsujących
Eee... To co dałem w poprzednim poście? Przecież tam nie ma nigdzie zwracać instancji 0.o
Chyba że item jest w ogóle nie przypisane...
A to co proponował Zysk działa?
var c_item bow = Npc_GetInvItem(hero, Itrw_superluk);

Offline mass1500

  • Użytkownicy
  • Offline
  • Posty149
  • Propsy11
  • ProfesjaGracz
0 Pokaż propsujących
wywaliłem troche rzeczy z tick  tocka (w tym trucie) i o dziwo tnie i to nawet bardziej niż przy uproszczeniu tych śmieci pierwszej wersji tick tocka (2 pokazany tick tock w temacie) i tu moje pytanie WHAT THE FUCK?!


Offline mass1500

  • Użytkownicy
  • Offline
  • Posty149
  • Propsy11
  • ProfesjaGracz
0 Pokaż propsujących
func void TICK_TOCK()
{

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

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

const int hp_vposx = 80;
const int hp_vposy = 7272;
const int mana_vposx = 80;
const int mana_vposy = 7722;
// ----- 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/////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
R_key = mem_keystate(key_r);
if (r_key == key_pressed)
{
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));

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

Offline Adanos

  • Administrator
  • Szara eminencja
  • Offline
  • Posty5204
  • Propsy3870
  • ProfesjaProgramista
0 Pokaż propsujących
const int hp_vposx = 80;
const int hp_vposy = 7272;
const int mana_vposx = 80;
const int mana_vposy = 7722;
// ----- an die Bars rankommen -----
MEM_InitGlobalInst ();
var oCViewStatusBar bar_hp;
var oCViewStatusBar bar_mana;
To raczej powinno być przed całą funkcją tick_tock. W szczególności, wydaje mi się, że to MEM_InitGlobalInst (); może spowalniać i powinno być tylko raz wywołane, ale nie jestem pewien.

PrintScreen     (hp_finish, 2, 91, FONT_ScreenSmall, 2); Może to być niebezpieczne. Nie wiem, co ile masz tick_tocka, ale za każdym wywołaniem wyświetlasz tekst na dwie sekundy.

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

 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);
Czy to koniecznie musi być w tick tocku? To może nie wpływa na wydajność tick tocka, ale trochę zasłania widok tego skryptu. To powinno się znaleźć, tam gdzie są napisane wszystkie dokumenty, jedynie klawiszem key_r wywołujesz wyświetlanie tego dokumentu.

Offline mass1500

  • Użytkownicy
  • Offline
  • Posty149
  • Propsy11
  • ProfesjaGracz
0 Pokaż propsujących
const int hp_vposx = 80;
const int hp_vposy = 7272;
const int mana_vposx = 80;
const int mana_vposy = 7722;
// ----- an die Bars rankommen -----
MEM_InitGlobalInst ();
var oCViewStatusBar bar_hp;
var oCViewStatusBar bar_mana;
To raczej powinno być przed całą funkcją tick_tock. W szczególności, wydaje mi się, że to MEM_InitGlobalInst (); może spowalniać i powinno być tylko raz wywołane, ale nie jestem pewien.

też myślałem że raz wystarczy wywołać ale przy niektórych sytuacjach paski zmienią swoje położenie na pierwotne dlatego wywołuje to non stop

Offline inż. Avallach

  • Administrator
  • Offline
  • Posty7661
  • Propsy5239
  • NagrodyV
  • ProfesjaProgramista
0 Pokaż propsujących
Człowieku, dalej masz w ticktocku to:
MEM_InitGlobalInst ();
var oCViewStatusBar bar_hp; bar_hp = MEM_PtrToInst (MEM_GAME.hpBar);
var oCViewStatusBar bar_mana; bar_mana = MEM_PtrToInst (MEM_GAME.manaBar);
A przecież wyraźnie pisałem że tego nie ma prawa tu być i już to nawet chyba wywalałeś wcześniej:
Te funkcje nie powinny być wywoływane co klatkę. Wywal je lub w razie potrzeby wywołuj raz, ich efekty już zostaną.
MEM_InitGlobalInst ();
MEM_PtrToInst (MEM_GAME.hpBar);
MEM_PtrToInst (MEM_GAME.manaBar);
Jeśli cośtam ci się dzieje z paskami, to zostaw to:
const int hp_vposx = 80;
const int hp_vposy = 7272;
const int mana_vposx = 80;
const int mana_vposy = 7722;
Ale absolutnie nie to co przed chwilą skopiowałem! To nie jest nawet kwestia położenia pasków, zostawianie ich tam z jakiegokolwiek powodu to poważny błąd.


Jest też jedna drobnostka:
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);
To można uprościć, niepotrzebnie dałeś jedno łączenie:PrintScreen (ConcatStrings (ConcatStrings (IntToString(hero.attribute[atr_hitpoints]), "/"), IntToString(hero.attribute[atr_hitpoints_max)), 2, 91, FONT_ScreenSmall, 2);
PrintScreen (ConcatStrings (ConcatStrings (IntToString(hero.attribute[atr_mana]), "/"), IntToString(hero.attribute[atr_mana_max)), 2, 97, FONT_ScreenSmall, 2);