duże obciążenie silnika 15047 55

O temacie

Autor mass1500

Zaczęty 7.02.2012 roku

Wyświetleń 15047

Odpowiedzi 55

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
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.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
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ą.

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy
Ale to nie jest potrzebne, bo c_item.munition jest var int. Czy nie?
 

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Jesteś pewien tej zmiennej item? W LeGo używają takiej zmiennej i sami przypisują jej wartość.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

duże obciążenie silnika
#44 2012-02-10, 18:16(Ostatnia zmiana: 2012-02-10, 18:28)
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).

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
jak wpisuje

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

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

duże obciążenie silnika
#46 2012-02-10, 18:27(Ostatnia zmiana: 2012-02-10, 18:28)
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).

mass1500

mass1500

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

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel

Sawik
Moderator działu

duże obciążenie silnika
#48 2012-02-10, 19:40(Ostatnia zmiana: 2012-02-10, 19:41)
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);
};
};
};

 
Ż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

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
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);

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
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?!
 


mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
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///////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
};      
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

duże obciążenie silnika
#53 2012-02-13, 15:41(Ostatnia zmiana: 2012-02-13, 15:44)
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.

mass1500

mass1500

Użytkownicy
posty149
Propsy11
ProfesjaGracz
  • Użytkownicy
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
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

duże obciążenie silnika
#55 2012-02-13, 16:38(Ostatnia zmiana: 2012-02-13, 16:44)
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);


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