Korisne skripte i kodovi

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

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

Citat: [BU] Gigi_Falcone poslato Jun 07, 2011, 00:08:37 PRE PODNE
zbog cega skracujete funkcije tako?
pa nije valjda toliko tesko otkucati 5 slova vise?  :)
Cool mi je tako , jer kad mi doÄ'e frend kod mene i vidi GF pa moj pa se uživi.. xD :P

Citat: [BU] Gigi_Falcone poslato Jun 06, 2011, 21:05:23 POSLE PODNE
Eto:

stock Port(playerid,Float:nX,Float:nY,Float:nZ)
{
new Float:oX,Float:oY,Float:oZ;//old position
new Float:tX,Float:tY,Float:tZ,Float:tDist;//temporary position
new string[128];
GetPlayerPos(playerid,oX,oY,oZ);
tX = nX - oX;
tY = nY - oY;
tZ = nZ - oZ;
tDist = floatsqroot(floatpower(tX,2) + floatpower(tY,2) + floatpower(tZ,2));
SetPlayerPos(playerid, nX, nY, nZ);
format(string,sizeof(string),"x: %f, y: %f, z: %f | ox: %f, oy: %f, oz: %f | trez: %f",nX,nY,nZ,oX,oY,oZ,tDist);
SendClientMessage(playerid,-1,string);
return 1;
}


Moze i krace da se napise, al ovako je jasnije za procitati
Super svaka cast! Samo malo da uredis i bilo bi to to... Nisam se setio wikija niti icega ali nema veze...

Evo da malo oživim topic  ;D
3 Macro funkcije s kojima si skratite vrijeme...


// by [H]265
#define Sec(%0)             (( %0 ) * ( 1000 ))
#define Min(%0)             (( %0 ) * ( 1000*60 ))
#define Sati(%0)            (( %0 ) * ( 1000*60*60 ))


npr.

SetTimerEx(...,Min(5),false...

Uživajte
Poslednja Izmena: Jun 08, 2011, 15:45:53 POSLE PODNE od [H]265
Kristijan Stipić

u to brate ja se bas mucim koliko je jedan sat milisekundi xS
Uskoro novi stunt server iStunt. DoÄ'ite i zabavite se!




   
   




Dizajniram za $$$
Popis stvari koje radim:

Wallpaper √  Signature ×  Logo √  Dizajn stranice (Ne kodiranje) √  Baner √  Avatar √  Animacija √  Intro √

Citat: [H]265 poslato Jun 08, 2011, 15:23:37 POSLE PODNE
Evo da malo oživim topic  ;D
3 Macro funkcije s kojima si skratite vrijeme...


// by [H]265
#define Sec(%0)             (( %0 ) * ( 1000 ))
#define Min(%0)             (( %0 ) * ( 1000*60 ))
#define Sati(%0)            (( %0 ) * ( 1000*60*60 ))


npr.

SetTimerEx(...,Min(5),false...

Uživajte
Super ideja, i dobro odradjeno!

Evo jedne funkcije...

#define MAX_KICKS (5)

#define SetPVarIntEx(%0,%1,%2,%3)  SetPVarInt(%0, %1, GetPVarInt(%0, %1) %2 %3) // by [H]265

#define KickEx(%0) \
do \
{ \
 SetPVarIntEx(%0,"pKicks",+,1); \
 Kick(%0); \
} \
while(FALSE) // by[H]265

new stock
   bool:FALSE = false;

KicksCheck(id) // by [H]265
{
if(GetPVarInt(id,"pKicks") >= MAX_KICKS)
{
BanEx(id,"Previse kickova");
}
return true;
}


Ispod OnPlayerConnect stavite ovako:

public OnPlayerConnect(playerid)
{
       KicksCheck(playerid);
return true;
}


Znači tamo di koristite kick(playerid); sada morate koristiti Kick(playerid);

NAPOMENA: Morate staviti u svoj saving sustav da sprema pKicks varijablu kako bi nakon kicka moglo pamtiti koliko kickova imate inače nemate koristi od ove funkcije...

NAPOMENA 2: Funkciju KickEx NE SMIJETE return-ati npr.

public OnPlayerConnect....
{
     return KickEx(playerid);
}


razlog: macro funkcije se ne mogu return-ati!


Evo još jedna funkcija...


IsPlayerFreeFalling(playerid)
{
     if(GetPlayerAnimationIndex(playerid))
     {
        new
             animlib[32],
             animname[32];
        GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
        GivePlayerWeapon(playerid, 46, 1);
    }
    return true;
}


Ako igrač 'pada' s neba dobit će padobran :)
Poslednja Izmena: Jun 13, 2011, 17:35:48 POSLE PODNE od [H]265
Kristijan Stipić

Lepo ali za ovu poslednju si trebao da das zasluge bar, wikipediji.

[code]
HPROX(id,const iString[],color = 0xFFFFF, Float:Distance)
{
new
  Float:Pos[4];
foreach(Player, i)
{
GetPlayerPos(id, Float:Pos[1], Float:Pos[2], Float:Pos[3]);
if(IsPlayerInRangeOfPoint(i, Float:Distance, Float:Pos[1], Float:Pos[2], Float:Pos[3]))
{
   SendClientMessage(i,color,iString);
}
else return false;
}
return true;
}


U praksi...


public OnPlayerText(playerid, text[])
{
HPROX(playerid,text,0xFFFFF,15.0);
return true;
}


Parametri:

playerid - Od tog igraca ce uzeti poziciju i nju ce provoditi tj. poruka ce biti vidljiva u rangu kordinata ovog igraca...
iString - format text-a
color - boja texta
Float:Distance - Range, znači neki krug vidljivosti poruke

NAPOMENA: Funkcija nije testirana.

Citat: _eXtreme_ poslato Jun 13, 2011, 17:47:16 POSLE PODNE
Lepo ali za ovu poslednju si trebao da das zasluge bar, wikipediji.

Šta pričaš ti, kakve zasluge, za šta?
Onda bi trebao davati zasluge za svaku funkciju koju je SA:MP dev. ekipa kreirala zar ne?

[/code]
Poslednja Izmena: Jun 28, 2011, 19:44:56 POSLE PODNE od [H]265
Kristijan Stipić

Da ispravim ovu BloodMasterovu funkciju, posto je donekle korisna:
Citat: [TG] BloodMaster poslato April 13, 2011, 20:20:47 POSLE PODNE
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;
}


Luka potpuno si u pravu u vezi GetMaxPlayers zato sto to 2 usporava brzinu cele funkcije.
Ovako je ispravno:

stock SendClientMessageInRangeOfPoint(const str[], boja, Float:radius, Float:X, Float:Y, Float:Z)
{
    new players = GetMaxPlayers();
    for(new i = 0; i < players; i++)
    {
        if(IsPlayerInRangeOfPoint(i, radius, X, Y, Z))
        {
            SendClientMessage(i, boja, string);
        }
    }
    return false;
}

Greske:
radius ne Float:radius da
for(new i=0; i<players i++) ne for(new i = 0; i < players; i++) da (zaboravio si ; )

evo jedne funkcije da vam olaksa posao s teleportom s vozilom :D
isto se koristi kao SetPlayerPos odnosno ima iste parametre samo sto je funkcija SetPlayerPosWithVehicle


stock SetPlayerPosWithVehicle(playerid, Float:X, Float:Y, Float:Z)
{
new cartype = GetPlayerVehicleID(playerid);
SetPlayerPos(playerid, X, Y, Z);
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
LinkVehicleToInterior(cartype, GetPlayerInterior(playerid));
SetVehiclePos(cartype,X,Y,Z);
  PutPlayerInVehicle(playerid,cartype,0);
}
}
Uskoro novi stunt server iStunt. DoÄ'ite i zabavite se!




   
   




Dizajniram za $$$
Popis stvari koje radim:

Wallpaper √  Signature ×  Logo √  Dizajn stranice (Ne kodiranje) √  Baner √  Avatar √  Animacija √  Intro √

SetPlayerPosWithVehicle(playerid, Float:X, Float:Y, Float:Z, Float:kut = 0, vw = 0, int = 0)
{
  if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  {
       new cartype = GetPlayerVehicleID(playerid);
       LinkVehicleToInterior(cartype, int);
       SetVehicleVirtualWorld(cartype,vw);
       SetVehiclePos(cartype,X,Y,Z);
       SetVehicleZAngle(cartype,kut);
       new aa= GetMaxPlayers();
       for(new i=0; i<aa; i++; )
       {
          if(IsPlayerInVehicle(i,cartype))
          {
             SetPlayerInterior(i,int);
             SetPlayerVirtualWorld(i,vw);
          }
       }
       return 1;
   }
  new cartype = GetPlayerVehicleID(playerid);
  SetPlayerPos(playerid, X, Y, Z);
  SetPlayerFacingAngle(playerid,kut);
  SetPlayerInterior(playerid,int);
  SetPlayerVirtualWorld(playerid,vw);
  return 1;
}


Malo ljepse? :D

Poslednja Izmena: Jun 28, 2011, 00:23:03 PRE PODNE od [TG] BloodMaster

ljepse ako os int,vw itd.
Uskoro novi stunt server iStunt. DoÄ'ite i zabavite se!




   
   




Dizajniram za $$$
Popis stvari koje radim:

Wallpaper √  Signature ×  Logo √  Dizajn stranice (Ne kodiranje) √  Baner √  Avatar √  Animacija √  Intro √

2 macro funkcije:


/*

  MACRO FNC - H_FNC: FNC(parametri)
  by: [H]265
  _______________________________
 
  Umjesto public FNC(parametri) pa onda forward FNC(parametri)
  samo H_FNC: FNC(parametri)
 
*/

#define H_FNC:%0(%1) \
            forward%0(%1); public%0(%1)

/*

  MACRO FNC - H_CB: FNC(parametri)
  by: [H]265
  _______________________________

  Umjesto foward(paramteri) samo H_CB: FNC(paramteri)
 
*/

#define H_CB:%0(%1) \
forward%0(%1); // MACRO FNC by: [H]265


npr. umjesto ovoga


SetTimer("Timer",1000,true);

forward Timer();
public Timer()
{
    return true;
}


samo ovo...


SetTimer("Timer",1000,true);

H_FNC: Timer()
{
     return true;
}


takoÄ'er ako radite neku funkciju koju ćete pozivati iz timera od sada nemorate forwardati nego samo ovako:


forward FNC();



// novi nacin
H_CB: FNC()

NAPOMENA: NE stavljajte na kraju ';'



NAPOMENA: Testirao sam savjet od luke, usporedio sam ga sa MAX_PLAYERS, i MAX_PLAYERS sa GetMaxPlayers bez new players = GetMaxPlayers, ugl. sve upucuje da je GetMaxPlayers brži tako da super :)

ALIII!!

Gledajte ove rezultate:

# foreach - 268
# GetMaxPlayers - 2966


Tako da ipak se isplati foreach više :)
Poslednja Izmena: Jul 01, 2011, 14:06:50 POSLE PODNE od [H]265
Kristijan Stipić

Moji rezultati (10000 puta "izmucena" koda):

GetMaxPlayers | Direktno: 20 milisec
GetMaxPlayers | Po Lukinom: 11 milisec
Foreach | 3 milisec

Evo jedna funkcija koju sam razvio kad me iziritiralo stalno doubleside, ps. ovo radi samo na staklima:

stock _ALT_CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:distance = 200.0)
{
             //by BloodMaster
if(modelid == 1649 || modelid == 3851)
{
CreateDynamicObject(modelid,  x, y, z, rx+180, ry, rz,worldid,interiorid,playerid,distance);
CreateDynamicObject(modelid,  x, y, z, rx, ry, rz, worldid ,interiorid,playerid,distance);
return 1;
}

   return CreateDynamicObject(modelid,  x, y, z, rx, ry, rz, worldid ,interiorid,playerid,distance);
}

#if defined _ALS_CreateDynamicObject
#undef CreateDynamicObject
#else
#define _ALS_CreateDynamicObject
#endif
#define CreateDynamicObject _ALT_CreateDynamicObject


Istina, stakla necete moci micati (MoveDynObject), ali makar na static mapama se necete morati brinuti.

HINT: Ako koristite u MTA double side na staklima, tako ce biti i u sa:mp-u

P.S. Ovo se dodaje prije prvog callbacka!! (ili pri pocetku samog moda)