Korisne skripte i kodovi

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

prethodna tema - sledeća tema

0 članova i 1 gost 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.

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.

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

#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.

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...



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

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ć

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:
for(new i = 0; i < MAX_PLAYERS; i++) ShowPlayerNameTagForPlayer(playerid, i, false);

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



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.