Timer Pomysł Toworisha 4723 8

O temacie

Autor Toworish

Zaczęty 21.08.2016 roku

Wyświetleń 4723

Odpowiedzi 8

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Siema, sory za orty i interpunkcję ale to mój znak rozpoznawczy ;p

Timer? Tak timer wywoływanie czegoś co jakiś czas lub na jakiś czas, nie mam pojęcia czy coś takiego istnieje jako gotowe w LeGo czy też w Ikarusie, ale wpadłem na pomysł jak to zrobić za pomocą Frame Functions.


Czyli co? Czyli Lego i ikarus zainicjuj bo inaczej lipa, linka nie podam, tym razem jesteście zdani na poszukiwania :) w samouczkach w dziale skrypty znajdziecie wszystko co trezba.

No wiec tak przykład pierwszy item który zwiększa nam skille walki na minutę(Standardowo w moich poradnikach wszystko z grubsza wyjaśnine w komentarzu)
const int time = 0;//stała czasu do wywołania lub do zaprzestania.
const int stop = 0;//stała potrzebna po to aby pewn funkcja nie wywoływała się co sekundę a tylko raz, niżej wyjaśnię.



func void SkillUpp()//wiadomo, ale jak coś to jest to funkcja zwiększająca skille.
{
B_AddFightSkill (hero, NPC_TALENT_1H, Npc_GetTalentSkill (hero, NPC_TALENT_1H)+40);//GetTalent mogłem zrobić na zmiennych ale nie chciałem śmiecić.
B_AddFightSkill (hero, NPC_TALENT_2H, Npc_GetTalentSkill(hero, NPC_TALENT_2H)+40);//Ogólnie te cztery linijki dodają do 1h/2h/kuszy/łuku 40.
B_AddFightSkill (hero, NPC_TALENT_BOW, Npc_GetTalentSkill (hero, NPC_TALENT_BOW)+40);//Czyli jak masz 20 1h to dzięki temu masz 60 :D
B_AddFightSkill (hero, NPC_TALENT_CROSSBOW, Npc_GetTalentSkill (hero, NPC_TALENT_CROSSBOW)+40);
};

func void SkillBack()
{
B_AddFightSkill (hero, NPC_TALENT_1H, Npc_GetTalentSkill (hero, NPC_TALENT_1H)-41);//Tutaj odejmujemy dodaną wcześniej wartość.
B_AddFightSkill (hero, NPC_TALENT_2H, Npc_GetTalentSkill(hero, NPC_TALENT_2H)-41);// Nie potrafię pojąć dlaczego ale musiałem dać 41
B_AddFightSkill (hero, NPC_TALENT_BOW, Npc_GetTalentSkill (hero, NPC_TALENT_BOW)-41);//Bo inaczej odejmowało 39 a nie 40 <>
B_AddFightSkill (hero, NPC_TALENT_CROSSBOW, Npc_GetTalentSkill (hero, NPC_TALENT_CROSSBOW)-41);
};


func void MyTimer()//Funkcja timera
{
  time = time + 1;//stała czasu równa się stała czasu dodać 1 i tak co sekundę
  print(IntToString(time));// to tylko taki print, do niczego nie potrzebny, do testów ale zostawiam go tak w razie "W"
if(stop == 0)//Pamiętasz na górze pisałem o tym stopie, widzisz jesli tego nie dasz to co sekundę doda ci 40 do każdego skilla
{
SkillUpp();//wywołujemy funkcję w której dodajemy po 40 do talentów walki
}
if(time == 1)//tutaj też zweiązane z tym stopem musimy zmienić jego wartość w pierwszej sekundzie aby się właśnie więcej nie wywołało
{
stop = 1;//chyba wiesz o co chodzi?
};
if(time == 60)// tu zaś znaczy że jeśli upłynie 60 sekund
{
print("wywołaj");//kolejny print też tylko testowy
SkillBack();//wywołujemy funkcję odejmowania tego co dodaliśmy naszym umiejętnością walki
time = 0;// zerujemy zmienną czasu aby wszystko można było zrobić jeszcze raz od nowa
stop = 0;//tak jak wyżej.
};
};

func void MyTimerApply()//funkcja dzięki której wywołamy cały ten timer.
{
FF_ApplyOnceExt (MyTimer, 1000, 60);//FF_AppluOnceExt(funkcja którą chcesz wywołać, co ile ma się wywołać w tym przypadku co jedną sekundę, no i ile razy ma się wywołać zawsze daj tyle ile dajesz w if time
};


INSTANCE mieszek (C_Item)//To jest item po użyciu którego wywołujemy naszą funkcję. To tylko przykład robisz jak chcesz!!!
{
name = "Zwiększ swoje atrybuty na minutę";

mainflag = ITEM_KAT_FOOD;
flags = ITEM_MULTI;

visual = "ItMi_Pocket.3ds";
material = MAT_LEATHER;
scemeName = "MAPSEALED";
on_state[0] = ATT_UP_TIMER;

description = "1h/2h/łuk/kusza+40";

};
func void ATT_UP_TIMER()
{
MyTimerApply();// że po użyciu itemu wywołamy timer który zwiększy nam skille na 60 sekund
};

Oczywiście to tylko przykład a możecie robić co chcecie i jak chcecie tym sposobem.





PRZYKŁAD 2!!!
Czyli wywoływanie czegoś cały czas, np co godzinę -1 hp

const int time = 0;//stała czasu do wywołania lub do zaprzestania.

func void MyTimer()//Funkcja timera
{
  time = time + 1;//stała czasu równa się stała czasu dodać 1 i tak co sekundę
  print(IntToString(time));// to tylko taki print, do niczego nie potrzebny, do testów ale zostawiam go tak w razie "W"

if(time == 3600)// co godzinę czyli co 3600 sekund :D
{
print("wywołaj");//kolejny print też tylko testowy
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS]-1;// hp gracza równa się hp gracza minus 1
time = 0;// zerujemy zmienną czasu aby się zapętliło.
};
};

func void MyTimerApply()//funkcja którą musimy wywołać w startup.d w metodzie initGlobal w ten sposób: MyTimerApply();.
{
FF_ApplyOnceExt (MyTimer, 1000, -1);//ZAUWAŻ!!!! że teraz dałem -1 zamisat 60. A no bo -1 znaczy że funkcja jest wywoływana cały czas. dokładne info napisał Bogdan Zwei w poradniku Frame functions miast tick tocka
};

co do przykładu numer 2 nie mam pojęcia na ile to byłoby stabilne jeżeli chodzi o płynność gry. a i tak samo nie wiem jak zachowałoby się w stosunku do zapisu i wczytywania gry, jednak mimo to podaje patent, można sie bawić :)


Btw jeżeli któryś z bardziej zaawansowanych w świecie ikarusa/Lego zna prostszy i bardziej stabilny sposób na timer to fajnie by było gdyby się nim podzielił :)

Btw Gdzie to wkleić co nie? no normalnie najlepiej jak stworzycie nowy plik np timer.d

i parsujecie w gothic.src nie będę tłumaczył jak to zrobić jak nie umiesz tego to daj se wgl spokój xd

UWAGA!!!!! sposób nr1 najlepiej parsować tuż przed startup.d a sposób nr2 możecie parsować na samej górze zaraz po lego i ikarusie :)
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Szczerze, to jeśli ustawisz częstotliwość FrameFunctions na co najmniej 100, to nie będzie spadku FPS (chyba, że masz komputer ze złomowiska). Per frame też nie obciąża, to dlatego, że jeśli coś jest wywoływane co klatkę, albo troszkę rzadziej, to grze jest to "na rękę", bo nie musi się męczyć. Częstotliwości od 1 do 99 spowalniają grę, dlatego, że gra musi regulować system sprawdzania czasu, co wiąże się ze zwiększeniem ogólnej częstotliwości gry.

A teraz, jakby ktoś nie zrozumiał mojego głupiego pierdolenia:

Częstotliwość na 0, lub 100 i wyżej: bieg truchtem na 2km.
Częstotliwość na 1 - 99: sprint na 2000 km.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
no tak na 100 ale to chyba w takim razie działa podobnie z 1000? bo też jest pełna łatwa cyfra tak?
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
100 - 10 razy na sekundę
1000 - 1 raz na sekundę.

Chodziło mi o to, że jeśli dasz 0, albo ponad 100 (czyli np. 131, 234, 481, 812 itp.) to nie będzie żadnych spadków wydajności.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota

Siemekk
Złote Wrota

Timer Pomysł Toworisha
#4 2016-08-21, 19:28(Ostatnia zmiana: 2016-08-21, 19:53)
Szczerze xD Do czasowych eliksirów(na hero) mam taki sposób:
func void Temp_potions_Select (){
if (item.range == 1){
STR_SMALL();
}
[...]
Dzięki temu w OneState ustawiam: Temp_potions_Select
A później np. zasięg w Eliksirze i mam efekt :D
func void STR_SMALL(){ //funkcje
if (!STR_1){//jezeli nie mamy efektu to:
STR_1=true;//zaaplikuj efekt
STR_timer = PotionTime_Small;//ustaw czas działania eliksiru
hero.attribute[ATR_STRENGTH] += 10;//dodaj siłę
/*******************************************/
STR1_Icon=View_CreateCenter(100,7500,128,160);//To nie potrzebne - Ikonki
View_SetTexture(STR1_Icon,"Ico_Potion_STR_Gray.tga");//@up
View_Open(STR1_Icon);//@up
/*******************************************/
}
else//jezeli mamy efekt
{
PrintS_Ext(Efekttrwa,RGBA(180,0,0,255));//Wyświetl napis
CreateInvItems(hero, ItPo_Time_STR_1,1);//Oddaj eliksir bohaterowi
};
};
[code]
I na samym końcu Timer wywoływany co 1s :D
[code]
func void Trigger_TempPotions()
if (STUNBASH){//jezeli mamy efekt
STUNBASH_timer -=1;//odejmuj czas efektu
};
/***************************************
Zdejowanie efektów :D
****************************************/
if (STR_1 && STR_timer ==0){//jezeli efekt trwa, i czas jest równy 0
View_Delete(STR1_Icon);//Usuń ikonkę/ nie potrzebne
STR_timer =0;//Zeruj czas
STR_1=false;//Nie mamy efektu
hero.attribute[ATR_STRENGTH] -= 10;//Odejmij siłę
};
Cały kod ma 13 eliksirów z ikonkami, i randomowym czasem działania + migające ikonki, zajmuje tylko lub aż 638 linijek :D
Jak skończe L'hvier UnBalance to całość będzie na serwisie Github więc każdy sobie to łatwo zajuma ;-;
Na razie korzystajcie z tutoriali darmozjadki :trollface:

Edit: I polecam FF_ApplyOnceExtponieważ będzie lepiej działać, i nie będzie działać potrójnie :F
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
@SiemaczyS to znaczy że oprócz FF_ApplyOnceExt  jest jeszcze FF_ApplyExtOnce?
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Poprawiłem :I Tak to jest jak się pisze z głowy.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Problem w tym, że Twoje skrypty, SiemaczyS, są nieczytelne. Masz wszystko pod sobą i nie używasz tabulatorów. Kill me...
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
spoko moje jak najprościej napisane ify zwsze ponoć są nie czytelne xd

Btw to spoko. Siemaczys bo już myślałem że Boguś coś pominął uzupełniając mój poprzedni tutek xd
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.


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