rEf 53 Odesláno: 16. Květen, 2015 Share Odesláno: 16. Květen, 2015 (upraveno) Ahoj ahoj... Trochu sem se nudil tak jsem udělal menší easy, simple, basic systém pro vytváření srnek/deers. Je to jednoduché takže takže tak samozřejmě si můžete dodělat různý věci např že srnu pujde zabít jen určitou zbraní, nebo určitý zaměstnání atd to už záleží na vás. Funguje to tak že srnu strefíte a objekt se smaže nic více nic méně. Třeba se to někomu hodí Samotný includ: ref_deers.pwn + menší popis #define MAX_DEERS 100 // Počet srnek new DeerObject[MAX_DEERS]; new DeerCount = -1; forward CreateDeers(); // do OnGameModeInt forward DeersShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ); // do OnPlayerWeaponShot forward UpdateDeers(); public CreateDeers(){ Deers(); // vytvoří srnky SetTimer("UpdateDeers", 15*60000, true); // spustí timer který updatuje každých 15 minut srnky return true; } Deers(){ //CreateDeer(x, y, z); CreateDeer(0, 0, 0); // místo 0, 0, 0 si dejte svou pozici } stock CreateDeer(Float:x, Float:y, Float:z){ DeerCount++; if(DeerCount >= MAX_DEERS) return print("Byl prekroceny maximalni pocet srn."); DeerObject[DeerCount] = CreateObject(19315,x,y,z-0.6,0,0,0,300); // vytvoří objekt srnky (19315) return DeerCount; } public DeersShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ){ for(new i; i <= DeerCount;i++){ // zjistí počet srnek if(hitid == DeerObject[i]){ // zjistí objekt (srnku) DestroyObject(DeerObject[i]); // smaže objekt (srnku) SendClientMessage(playerid, -1, "Zabil si srnu."); } } return true; } public UpdateDeers(){ for(new i; i <= DeerCount;i++){ // zjistí počet srnek DestroyObject(DeerObject[i]); // smaže srnky } Deers(); // vytvoří zase srnky return true; } Takhle by to mělo vypadat v módě: aneb pro lamy kam to vložit #include <a_samp> #include "ref_deers.pwn" // samotný includ main(){ print("bla bla bla bla bla"); } public OnGameModeInit(){ SetGameModeText("NÁZEV VAŠEHO MÓDU"); AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); CreateDeers(); return 1; } public OnGameModeExit(){ return 1; } public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ){ DeersShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ); return 1; } Pozor public OnPlayerWeaponShot si musíte vytvořit! V new.pwn nebývá se mi zdá nebo mam old pwn Komplet to můžete stáhnout tady: http://lb.clanweb.eu/files/deersbic.rar Srnky se přidávají CreateDeer(x, y, z); do Deers() v INCLUDU. Kdo nechápe tak X, Y, Z jsou pozice. Kdo chce může si udělat třeba: new ZabilSrn[MAX_PLAYERS]; pak dá pod zprávu: Zabil si srnu. ZabilSrn[playerid]++; a udělá si nějaký příkaz přes formát Taky to jde přes PVar... To je na vás. Pokud máte inventář můžete za zabití dát hráči třeba určitý počet masa ze srny. Zbraň si můžete udělat zase takhle: public DeersShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ){ for(new i; i <= DeerCount;i++){ // zjistí počet srnek if(hitid == DeerObject[i]){ // zjistí objekt (srnku) if(weaponid == id zbraně){ // zjistí jestli má v ruce zbraň pro zabití srny DestroyObject(DeerObject[i]); // smaže objekt (srnku) SendClientMessage(playerid, -1, "Zabil si srnu."); } else SendClientMessage(playerid, -1, "Srnu můžeš zabít pouze se zbraní bla bla bla."); // pokud nemá zbraň kterou musí mít napíše mu to zprávu } } return true; } ATD....... ATD........ To je vše, díky. Edited 17. Květen, 2015 by rEf 1 Link to comment Share on other sites More sharing options...
Om3n 78 Odesláno: 17. Květen, 2015 Share Odesláno: 17. Květen, 2015 krasny, akorat dost neoptimalizovany. si predstav ze tohle spustis na serveru kde je 10 hracu. kazdej dostane minigun. a kazdej vystrel vyvola DeerShot a v nem ten cyklus. kdyz uz tak bych pridal aspon if(hittype == BULLET_HIT_TYPE_OBJECT) DeersShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ); aby to vyvolavalo kontrolu az po zasahu vytvorenyho objektu. a este jedna vec if(GetPlayerWeapon(playerid) == id zbraně){ // zjistí jestli má v ruce zbraň pro zabití srny to GetPlayerWeapon je taky zbytecny vyvolavat kdyz uz ti public DeerShot preposila weaponid primo z OnPlayerWeaponShot 1 Link to comment Share on other sites More sharing options...
rEf 53 Odesláno: 17. Květen, 2015 Author Share Odesláno: 17. Květen, 2015 To s tím GetPlayerWeapon beru. Hittype mam v píči. Link to comment Share on other sites More sharing options...
ATomas 286 Odesláno: 17. Květen, 2015 Share Odesláno: 17. Květen, 2015 Hittype mam v píči. Ty budes jeden z tech lidi "Vysoke vyuziti CPU ? Kupte si silnejsi stroj" :D Link to comment Share on other sites More sharing options...
rEf 53 Odesláno: 18. Květen, 2015 Author Share Odesláno: 18. Květen, 2015 (upraveno) Ty budes jeden z tech lidi "Vysoke vyuziti CPU ? Kupte si silnejsi stroj" :d víš jak nikdy sem nedávám to co cpu do módu, cpu sem jenom zbytek co s toho zbylo a tohle je snad po prvé... takže mě je jedno jestli jim to sežere celou serverovnu hlavní je že to funguje a zbytek není můj problém aneb jak odrovnat budoucí konkurenční servery Edited 18. Květen, 2015 by rEf Link to comment Share on other sites More sharing options...
Administrátor Ewwe 434 Odesláno: 18. Květen, 2015 Administrátor Share Odesláno: 18. Květen, 2015 (upraveno) Určitě budu opět zpíčován ale dovolil jsem si přepsat script pro použití s YSI4 #define MAX_DEERS 100 #include <a_samp> #include <YSI_Data\y_iterate> #include <YSI_Coding\y_timers> #include <YSI_Coding\y_hooks> new Iterator:Deer<MAX_DEERS>; new DeerObject[MAX_DEERS]; Deers() { CreateDeer(0, 0, 0); } CreateDeer(Float:x, Float:y, Float:z) { new id = Iter_Free(Deer); if( id != -1 ) { if( !Iter_Contains(Deer, id) ) { Iter_Add(Deer, id); } DeerObject[id] = CreateObject(19315,x,y,z-0.6,0,0,0,300); }else print("Nelze vytvořit"); return id; } hook OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) { foreach( new i : Deer ) { if(hittype == BULLET_HIT_TYPE_OBJECT && hitid == DeerObject[i]) { DestroyObject(DeerObject[i]); SendClientMessage(playerid, -1, "Zabil si srnu."); new next; Iter_SafeRemove(Deer, i, next); i = next; break; } } return 1; } task UpdateDeers[ 15*60000]() { foreach( new i : Deer ) { if (Iter_Contains(Deer, i)) { DestroyObject(DeerObject[i]); new next; Iter_SafeRemove(Deer, i, next); i = next; } } Deers(); return 1; } PS Snažím se na tom pochopit iterátory takže pokud jsem něco s iterátory použil špatně neváhej a piš Edited 18. Květen, 2015 by Ewwe 1 Link to comment Share on other sites More sharing options...
Om3n 78 Odesláno: 18. Květen, 2015 Share Odesláno: 18. Květen, 2015 neboli, jak to dostat na level kdyz uz to nejde vic optimalizovat i kdyz jak na to koukam malinko jo kdyz bys dal if(hittype == BULLET_HIT_TYPE_OBJECT.... este pred spustenim foreach. ale jinak hezky pouziti a nazornej priklad iteratoru Link to comment Share on other sites More sharing options...
Administrátor Ewwe 434 Odesláno: 18. Květen, 2015 Administrátor Share Odesláno: 18. Květen, 2015 neboli, jak to dostat na level kdyz uz to nejde vic optimalizovat i kdyz jak na to koukam malinko jo kdyz bys dal if(hittype == BULLET_HIT_TYPE_OBJECT.... este pred spustenim foreach. ale jinak hezky pouziti a nazornej priklad iteratoru Já hlavně doufám že jsem je použil správně... Link to comment Share on other sites More sharing options...
eXot 18 Odesláno: 18. Květen, 2015 Share Odesláno: 18. Květen, 2015 Mám dotaz, čo sú to tie iterátory ? YSI nepoužívam vôbec takže o tom počujem 1x Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now