Korisne skripte i kodovi


Započeo Correlli, Mart 10, 2010, 20:26:26 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 15 gostiju pregledaju ovu temu.

Citat: $--L84S--$ poslato April 04, 2011, 16:48:44 POSLE PODNE
Citat: bake_pg poslato April 04, 2011, 15:47:19 POSLE PODNE
a šta Fali TogglePlayerControllable?
Nefali nista ali je onako bolje i brze  ???

Nije brze, ali je bolje, tj. bolje je za korisnika da nemora pisati vise..
Aequam memento rebus in arduis servare mentem.

BloodMaster

*

Ex. Super Moderator

Kod: c
stock NovaPozicija(playerid,bool:WithVehicle,Float:x,Float:y,Float:z,Float:rot) //stock SetPlayerPosEx(playerid,bool:WithVehicle,Float:x,Float:y,Float:z,Float:rot)
{
      //by BloodMaster
	if(WithVehicle == true && IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
	{
	 new bu = GetPlayerVehicleID(playerid);
	 SetVehiclePos(bu,x,y,z);
	 SetVehicleZAngle(bu,rot);
	 PutPlayerInVehicle(playerid,bu,0);
	 return 1;
	}
	else
	{
	SetPlayerPos(playerid,x,y,z);
	SetPlayerFacingAngle(playerid,rot);
	 return 1;
	}
	return 1;
}


Evo da razjasnim:

playerid - Id Igraca koji se teleporta
WithVehicle - Ukoliko je igrac u vozilu, dali ce se i to vozilo portati (true = hoce, false = nece)
x,y,z - Koordinate porta
rot - Rotacija

NPR:


NovaPozicija(playerid,true,5000.56,1005.55,111.5,90);


Ako nije jasno, pitajte na PM pa cu razjasnit ovdje....
Poslednja Izmena: April 04, 2011, 22:25:05 POSLE PODNE od BloodMaster

black_dota

Citat: Luka P. poslato April 04, 2011, 14:49:39 POSLE PODNE
Gl.upost tko god da je to pisao, jer se to može napraviti puno jednostavnije i brže.
Kod: c
#define Freeze(%0,%1) TogglePlayerControllable((%0),(!(%1)))

Pa moze i onako

Citat: Luka P. poslato April 04, 2011, 22:07:23 POSLE PODNE
Pa baš i nije to, to je obrnuta funkcija od TogglePlayerControllable. Kada bi željeli da imamo kraće za napisati, onda bi samo koristili:
Kod: c
#define Freeze TogglePlayerControllable



Nisi me skuzio izgleda, bolje je za korisnika i sve, ALI je losije optimizirano, tj. naravno da je bolja default funkcija (ne-editana bi se reklo) nego definat za drugu funkciju. Ne mislim da je losije optimizirano u stilu da stavis string sa 1024 celija, nego jednostavno da je malo losije optimizirano.
Aequam memento rebus in arduis servare mentem.

BloodMaster

*

Ex. Super Moderator

Evo jos jedna od mene:

stock SendClientMessageInRangeOfPoint(str[],boja,radius,Float:x,Float:y,Float:z)
{
	//by BloodMaster
	new players = GetMaxPlayers();
	for(new i=0; i<players; i++)
	{
	if(IsPlayerInRangeOfPoint(i,radius,x,y,z) SendClientMessage(i,boja,str);
 	}
	return 1;
}


Naime, ova funkcija ce poslati poruku svima koju su na odredjenoj koordinati...

str[] - Sto ce pisati
boja - Boja texta
radius - do koje udaljenosti od xyz ce se slati poruka
x,y,z - Koordinate

Evo primjer:

SendClientMessageInRangeOfPoint("Dobar dan, vi ste dosli na poziciju",COLOR_WHITE,5,1115.5,541.44,43.515);

ps- Ovo sam ja bubno koordinate, vi stavite svoje i da, onaj stock dodajete na kraj moda :)
Poslednja Izmena: April 13, 2011, 20:45:38 POSLE PODNE od BloodMaster

Imam jedno pitanje za tebe...
Gde si pokupio ovaj mutavi str[]
Znam da moze tako al svaka tvoja korisna ima ovo str[], bilo bi logicnije text[]
To moze da zbuni mnoge...

BloodMaster

*

Ex. Super Moderator



BloodMaster

*

Ex. Super Moderator

Evo nesto kao /me komanda

Prvo morate imati ovo:

stock SendClientMessageInRangeOfPoint(str[],boja,radius,Float:x,Float:y,Float:z)
{
	//by BloodMaster
	new players = GetMaxPlayers();
	for(new i=0; i<players i++)
	{
	if(IsPlayerInRangeOfPoint(i,radius,x,y,z) SendClientMessage(i,boja,str);
 	}
	return 1;
}



A zatim ovo:

stock PlayerDoing(playerid,text[]/*Pusa eXtreme*/)
{
 //by BloodMaster
 if(!IsPlayerConnected(playerid)) return 1;
 new ime[20],string[128],Float:x,Float:y,Float:z;
 GetPlayerName(playerid,ime,20);
 format(string,sizeof string,"* %s %s",ime,text);
 GetPlayerPos(playerid,x,y,z);
 SendClientMessageInRangeOfPoint(string,C623CF,15,x,y,z);
 return 1;
}


Evo jedan primjer:


PlayerDoing(playerid,"ulazi u vozilo.");  //To npr dodate u OnPlayerEnterVehicle

i u igri ce pisati ovako:

*Netko_Netkic ulazi u vozilo.

Nece naravno pisati netko netkic vec ime koje taj igrac koristi... Kul, ha?
Poslednja Izmena: April 13, 2011, 20:45:12 POSLE PODNE od BloodMaster

BloodMaster

*

Ex. Super Moderator

Citat: Luka P. poslato April 13, 2011, 20:42:28 POSLE PODNE
Brže je, ne da mi se sada testirati, ali je očito da je brže kada ne pozivaš funkciju u svakoj iteraciji for-loopa.

Istina, uopce nisam obracao paznju. Nemoras ni testat, tako je.

Hvala ti

Evo jedna jednostavna skripta koju sam sada napravio. Za loto :)

#include "a_samp"
#include "foreach"

#define ScmToAll SendClientMessageToAll
#define zuta 0xFFFF00FF

// NAVIGACIJA
#define LOTO_SAT        18 // 18 sati, popodne > [ 0 - 24 ]
#define LOTO_MINUTA     0 // minuta > [ 0 - 59 ]
#define LOTO_SEC        0 // sekunda > [ 0 - 59 ]
#define MAX_DOBITAK     15000000 // MAXIMALNO MOGUCE DOBIT, $15,000,000

public OnGameModeInit()
{
    SetTimer("Timer",1000,1);
	return true;
}
forward Timer();
public Timer()
{
	 new
		Sati,
		Minute,
		Sec,
		string[128]
     ;
	 gettime(Sati,Minute,Sec);
	 foreach(Player,i)
	 {
	    if(Sati == LOTO_SAT && Minute == LOTO_MINUTA && Sec == LOTO_SEC)
	    {
		    SetPVarInt(i,"LotoID",random(MAX_PLAYERS));
		    if(IsPlayerConnected(GetPVarInt(i,"LotoID")))
		    {
			   OnPlayerWinLoto();
		    }
		    else
		    {
			   format(string, sizeof string,"LOTO: Danasnji izvuceni ID je '%d'. Nitko nije osvojio loto.",GetPVarInt(i,"LotoID"));
			   ScmToAll(zuta,string);
		    }
	    }
	 }
	 return true;
}

stock OnPlayerWinLoto()
{
	new
	   string[128]
    ;
	foreach(Player,i)
	{
		SetPVarInt(i,"LotoDobitak",random(MAX_DOBITAK));
	    format(string, sizeof string,"LOTO: %s[%d] je osvojio na lutriji $%d. Cestitamo.",GetName(GetPVarInt(i,"LotoID")),GetPVarInt(i,"LotoID"),GetPVarInt(i,"LotoDobitak"));
	    ScmToAll(zuta,string);
	    GivePlayerMoney(GetPVarInt(i,"LotoID"),GetPVarInt(i,"LotoDobitak"));
	    format(string, sizeof string,"~g~CESTITAMO~n~w~Osvojili ste loto od~n~~g~$%d",GetPVarInt(i,"LotoDobitak"));
	    GameTextForPlayer(GetPVarInt(i,"LotoID"),string,5000,4);
	}
	return true;
}

stock GetName(id)
{
	new
	  IME[MAX_PLAYER_NAME]
    ;
	GetPlayerName(id, IME, MAX_PLAYER_NAME);
	return IME;
}
Poslednja Izmena: April 23, 2011, 22:57:59 POSLE PODNE od [H]265
Kristijan Stipić

BloodMaster

*

Ex. Super Moderator

Citat: [Banana$]ReadMe.txt poslato April 26, 2011, 16:23:24 POSLE PODNE
Dakle ja radim Wild Wild West OWAA, gdje nece biti NameTagova,
p


Jednostavno ispod OnPlayerSpawn stavite:
Kod: c
for(new i = 0; i < MAX_PLAYERS; i++) ShowPlayerNameTagForPlayer(playerid, i, false);


BloodMaster

*

Ex. Super Moderator

stock IsAnyPlayerInVehicle(vehicleid)
{
	for(new i=0;i<MAX_VEHICLES;i++) if(IsPlayerInVehicle(i,vehicleid)) return 1;
	return 0;
}


- Provjerava dali je bilo koji igrac u vozilu vehicleid

netacan stock, nije za max_vehicles, nego za max_players

IsPlayerInVehicle


Pravilno:

#include <foreach>

stock IsAnyPlayerInVehicle(vehicleid)
{
	foreach(Player, i) if(IsPlayerInVehicle(i, vehicleid)) return 1;
	return 0;
}


zasto foreach? zbog brzeg loop-a
Poslednja Izmena: April 27, 2011, 19:01:02 POSLE PODNE od [BU] Gigi_Falcone



BloodMaster

*

Ex. Super Moderator

Ops, fulo sam. Hvala na ispravci. Koristim ja inace foreach ali ovdje nestavljam s njim jer ga nekoriste svi a zelim da svi mogu koristiti.