Jump to content

script Jednoduchý systém pro vytváření Srn (INCLUD).


rEf

Recommended Posts

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í :d

 

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 :d

 

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() 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 by rEf
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

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

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Ty budes jeden z tech lidi "Vysoke vyuziti CPU ? Kupte si silnejsi stroj" :d :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 :d aneb jak odrovnat budoucí konkurenční servery

Edited by rEf
Link to comment
Share on other sites

  • Administrátor

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 by Ewwe
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

neboli, jak to dostat na level kdyz uz to nejde vic optimalizovat :)

 

i kdyz jak na to koukam malinko jo :d

 

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

  • Administrátor

neboli, jak to dostat na level kdyz uz to nejde vic optimalizovat :)

 

i kdyz jak na to koukam malinko jo :d

 

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...