GTA-Center.com » Forum
http://www.gta-center.com/forums/

[ARG] Funzioni utili
http://www.gta-center.com/forums/viewtopic.php?f=41&t=211
Pagina 1 di 2

Autore:  Angelo [ 04/11/2010, 20:10 ]
Oggetto del messaggio:  [ARG] Funzioni utili

Raga qua potrete postare delle funzioni create da voi o da altri (Mettendo i crediti) inizio con alcune mie funzioni

IsPlayerInWater By me and Peppe951

Il IsPlayerInWater serve per gettare se un player è in acqua

Codice:
stock IsPlayerInWater(playerid)
{   
    new index = GetPlayerAnimationIndex(playerid);   
    return ((index >=  1538 && index <= 1541) || index == 1544);
}


uso

Codice:
if(IsPlayerInWater(playerid))
{
    // Funzione
}


GetPlayerIPFromID

Il GetPlayerIPFromID serve per gettare l'id di un player avendo il suo IP

Codice:
stock GetPlayerIPFromID(ip[])
{
    new IP[16];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            GetPlayerIP(i, IP, sizeof(IP));
            if(strcmp(ip, IP, true)==0) return i;
        }
    }
    return INVALID_PLAYER_ID;
}


Uso

Codice:
public OnRconLoginAttempt(ip[], password[], success)
{
    new playerid = GetPlayerIPFromID(ip);
    if(!success)
    {
        new string[128], nome[24];
        GetPlayerName(playerid, nome, 24);
        format(string, 128, "Il Player %s ha sbagliato il Rcon Login", nome);
        SendClientMessageToAll(COLOR_RED, string);
    }
    return 1;
}


BanTag(tag[])

Il BanTag serve per bannare tutti coloro che hanno quella Tag

Codice:
BanTag(tag[])
{       
    new nome[24], str[10];       
    format(str, sizeof(str), "[%s]" , tag);       
    for(new i = 0; i < MAX_PLAYERS; i++)       
    {               
        if(IsPlayerConnected(i))               
        {                       
            GetPlayerName(i, nome, 24);                       
            if(strfind(nome, str, true)==0)                       
            {                               
                Ban(i);                       
            }               
        }       
    }       
    return 1;
}


Uso

Codice:
BanTag("TLK");


Bannerà tutti coloro che avranno la Tag TLK

E infine posto il mio GetVehicleSpeed(vehicleid, type)

Il GetVehicleSpeed server per gettare la velocità di un veicolo in Kmh o Mph

Codice:
GetVehicleSpeed(vehicleid, type)
{       
    new Float: Vel[3];       
    GetVehicleVelocity(vehicleid, Vel[0], Vel[1], Vel[2]);       
    if(type == 1 || type > 2 || type < 1) type = floatround(floatsqroot(Vel[0]*Vel[0] + Vel[1]*Vel[1] + Vel[2]*Vel[2])*200, floatround_floor);       
    else if(type == 2) type = floatround(floatsqroot(Vel[0]*Vel[0] + Vel[1]*Vel[1] + Vel[2]*Vel[2])*200 / 1.609344, floatround_floor);       
    return type;
}


Uso

Codice:
new Kmh = GetVehicleSpeed(vehicleid, 1);


Con 1 gettate la velocità in Kmh mentre con 2 quella in Mph, se invece mettete un numero diverso la velocità sarà sempre in Kmh

Io finisco con queste 4 funzioni, ora postate voi le vostre :D

Autore:  barletheking [ 04/11/2010, 20:54 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

bravo angelo, anche io ho fatto appena quando è uscita la 0.3b PlayerInAcqua(playerid), così tramite GetPlayerAnimationIndex che è stato aggiunto in 0.3b puoi vedere se nel player è applicata un animazione, in questo caso quella del nuoto =D.

Autore:  Angelo [ 04/11/2010, 23:55 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

eh si è utilissimo, pensa che l'ho voluto creare x sistemare il fatto che quando cadi in acqua c'è sempre il anti fall off bike, all'inizio era semplicemente uno script che diceva che se la coordinata Z era minore 0 allora era in acqua, però alcuni interior sono sotto terra e così Peppe951 mi spiegò il funzionamento di GetPlayerAnimationIndex xD

Autore:  Angelo [ 05/11/2010, 21:05 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Posto la funzione "GetPlayerID(nome[])" la quale prende l'id del player attraverso il suo nome

Codice:
GetPlayerID(nome[])
{
    new name[24];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
         if(IsPlayerConnected(i))
         {
             GetPlayerName(i, name, 24);
             if(strcmp(nome, name, true)==0) return i;
         }
    }
    return INVALID_PLAYER_ID;
}


Uso:

Codice:
new playerid = GetPlayerID("Angelo");

Autore:  Lee_Zarock [ 05/11/2010, 21:26 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

il GetPlayerAnimationIndex è utilissimo, bisogna solo saperlo sfruttare

Autore:  Angelo [ 05/11/2010, 21:32 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

eh si, io ci ho fatto il IsPlayerShooting:

Codice:
stock IsPlayerShooting(playerid)
{
    new index = GetPlayerAnimationIndex(playerid);
    return(index == 1167 || index == 363);
}


getta solo se sta sparando con un'arma da fuoco

Autore:  barletheking [ 07/11/2010, 23:23 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

ottimo, per me è bene continuare questo topic mettendo le funzioni utili e renderlo importante ;)

Autore:  SNaKe_OlD [ 08/11/2010, 16:53 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Codice:
stock IsPlayerInCube(playerid, Float:xmin, Float:ymin, Float:zmin, Float:xmax, Float:ymax, Float:zmax)
{
new Float:cx, Float:cy, Float:cz;
GetPlayerPos(playerid, cx, cy, cz);
if(cx > xmin && cy > ymin && cz > zmin && cx < xmax && cy < ymax && cz < zmax)return 1;
return 1;
}


L'ho trovato in una mia vecchia gamemode. Questo script forma un cubo dove SOLO in quel cubo si possono fare determinate funzioni.

Autore:  Peppe [ 08/11/2010, 17:02 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

GivePlayerWeapons(playerid, params)
Codice:
GivePlayerWeapons(playerid, ...)
{
   new
      start = 1,
      num = numargs();
   for(new i = start; i < num; i++)
   {
      GivePlayerWeapon(playerid, getarg(i), getarg(i++));
   }
   return 1;
}

Questa funzione da delle armi al player ma a differenza del normale GivePlayerWeapon si possono dare più armi con la stessa funzione.
Esempio:
Codice:
GivePlayerWeapons(playerid, 24, 250, 30, 250, 34, 250);

In questo caso la struttura dei params è questa: weapon (deagle), ammo (250), weapon (AK-47), ammo (250), weapon (Sniper), ammo (250),


IsPlayerInWater>(playerid)
Codice:
stock IsPlayerInWater(playerid)
{
    new index = GetPlayerAnimationIndex(playerid);
    return (1538 <= index <= 1541 || index == 1544);
}

Funzione creata su idea di Angelo95 che mi ha dato gli id delle animazioni, returna 1 se un player è in acqua altrimenti returna 0.


Funzioni/Macro binarie

Nel pawn ogni cella è costituita di default da 32 bit, ovvero delle cifre che possono assumere il valore di 1 o 0.
Utilizzando gli operatori bitwise sono riuscito a creare delle funzioni che modificano il valore del bit di una cella di una variabile o agiscono su questi.
In poche parole utilizzando una sola variabile con queste funzioni potete inserire fino a 32 valori che possono essere true o false (booleani).

Codice:
#define bit(%1)  (1 << %1)

#define setBit(%1,%2)  %1 |= bit(%2)

#define unsetBit(%1,%2)  %1 &= ~bit(%2)

#define getBit(%1,%2)  ((%1 & bit(%2)) != 0)

#define setAllBits(%1)  %1 = cellmax

#define unsetAllBits(%1)  %1 = 0

stock encodeBits({bool}:...)
{
   new
      result = getarg(0),
      num = numargs(),
      arg;
   while(++arg < num)
   {
      if(getarg(arg))
      {
         setBit(result, arg);
      }
   }
   return result;
}


La macro "bit" è utilizzata privatamente nelle altre funzioni, quindi non vi serve.

Ecco a cosa servono le altre funzioni:

setBit(var, slot)
Setta il valore di un bit della variabile a true.
La variabile var è la variabile in cui memorizzare i bit mentre slot è il numero del bit, che va da 0 a 31.

unsetBit(var, slot)
Setta il valore di un bit della variabile a false.
La variabile var è la variabile in cui memorizzare i bit mentre slot è il numero del bit, che va da 0 a 31.

getBit(var, slot)
Returna true o false a seconda di ciò che è stato settato nella variabile di bit.

setAllBits(var)
Setta il valore di tutti i bit della variabile var a true.

unsetAllBits(var)
Setta il valore di tutti i bit della variabile var a false.

Esempi:
Codice:
enum
{
    Connected,
    Logged,
    Spawned,
    Dead     
}

new
    pBools[MAX_PLAYERS];

OnPlayerDeath(playerid, killerid, reason)
{
    unsetBit(pBools[playerid], Spawned);
    setBit(pBools[playerid], Dead);
    return 1;
}

OnPlayerRequestSpawn(playerid)
{
    if(!getBit(pBools[playerid], Logged)) return 0;
    return 1;
}

OnPlayerSpawn(playerid)
{
    if(getBit(pBools[playerid], Dead))
    {
   SendClientMessage(playerid, COLOR_WHITE, "Eri morto");
   unsetBit(pBools[playerid], Dead); 
    }
    setBit(pBools[playerid], Spawned);
    return 1;
}

OnPlayerConnect(playerid)
{
    setBit(pBools[playerid], Connected);
    return 1;
}

OnPlayerDisconnect(playerid, reason)
{
    unsetAllBits(pBools[playerid]);
    return 1;
}

// Cosi abbiamo memorizzato quattro valori booleani in un unica variabile, risparmiando memoria



encodeBits({Bool:}...)
Returna un set di bit secondo i valori dati tra le parentesi (infiniti), che possono essere true o false. Questa funzione ad esempio può essere utilizzata al posto di quelle dell'UpdateVehicleDamageStatus, come encode_tires, encode_panels o altre, ed è anche "universale", ovvero non dovete usare più funzioni.
PS: Necessita delle mie macro binarie precedentemente elencate.

Esempio:
Codice:
new panels, doors, lights, tires;   
GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, encodeBits(true, true, false, true));



SendClientMessage(playerid, color, message[, params])
SendClientToAll(color, message[, params])
Codice:
new
    SFM_tmpString[128];

#define SendClientMessage(%1,%2,%­3,%­4) \
format(SFM_tmpString, 128, %­3, %­4); \
SendClientMessage(%1, %2, SFM_tmpString)

#define SendClientMessageToAll(%1,%2,%­3) \
format(SFM_tmpString, 128, %2, %­3); \
SendClientMessageToAll(%1, SFM_tmpString)

Modifica del SendClientMessage(ToAll), con la quale se si inseriscono dei parametri dopo il messaggio ci sarà un format automatico.
Attenzione: lo script non spreca memoria/velocità se non si inseriscono parametri dopo il messaggio, perché interviene solo se i parametri sono più di 3 nel SendClientMessage o più di 2 nel SendClientMessageToAll.


ForeachPVar(playerid, varName[], varType);
Codice:
#define ForeachPVar(%1,%2,%­3) \
    for(new _index = 0, _numVars = GetPVarsUpperIndex(playerid); _index < _numVars; _index++) \
    { \
   GetPVarNameAtIndex(%1, _index, %2, sizeof(%2)); \
   %­3 = GetPVarType(%1, %2); \
    }


Esegue un ciclo con tutte le PVar di un player, dando alla stringa varName il nome della PVar e all'intero varType l'id corrispondente al tipo della PVar (1 = intero, 2 = stringa, 3 = float).
Utile ad esempio per agire su tutte le PVar di un player senza fare una o più righe di codice per ogni PVar...
Esempio:
Codice:
public OnPlayerSpawn(playerid)
{
    //Porta a dei valori prestabiliti tutte le PVar di un player
    new
   varName[128],
   varType;
    ForeachPVar(playerid, varName, varType)
    {
   switch(varType)
   {
       case 1:
       {
      SetPVarInt(playerid, varName, 2);
       }
       case 2:
       {
      SetPVarString(playerid, varName, "LoL");
       }
       case 3:
       {
      SetPVarFloat(playerid, varName, 0.255);
       }
   }
    }
    return 1;
}


Un altro esempio pratico sarebbe quello di usare questa macro per salvare tutte le PVar di un player in un file...
Naturalmente potrete escludere delle particolari PVar dal ciclo in vari modi, ad esempio usando lo strcmp per vedere se il varName corrisponde a quello della PVar da escludere.


_sleep(interval, bool:seconds = false)
Codice:
_sleep(interval, bool:seconds = false)
{
    new
       _start = tickcount(),
       _interval = seconds ? 1000*interval : interval;
    intervalCheck:
    if(tickcount() - _start < _interval) goto intervalCheck;
}


Ho fatto questa funzione per provare delle funzioni del pawno che ho sempre ignorato...
In pratica lo scopo di questa funzione è fermare una parte di codice per determinati millisecondi/secondi per poi continuare ad eseguire il codice.

Per usare la funzione mettete nella parte di codice interessata così:
Codice:
_sleep(intervallo);

in questo caso l'intervallo è in millisecondi... se volete invece mettere un intervallo in secondi fate cosi:
Codice:
_sleep(intervallo, true);

Quindi l'intervallo è definito in secondi.

Esempio pratico:
Codice:
public OnFilterScriptInit()
{
   print("3");
   _sleep(1, true);
   print("2");
   _sleep(1, true);
   print("1");
   _sleep(1, true);
   print("FS Caricato con successo ù.ù")
   return 1;
}

In questo caso quando viene avviato l'fs:
- Digita "1" nella console;
- C'è una pausa di un secondo;
- Digita "2" nella console;
- C'è una pausa di un secondo;
- Digita "1" nella console;
- C'è una pausa di un secondo;
- Digita "FS Caricato con successo ù.ù" nella console;
- Returna 1.

PS: nel pawno c'è già la funzione predefinita "sleep(millisecondi)" ma funziona solo nel main() a differenza della mia...
PPS: utilizzando questa funzione tutto lo script generale si fermerà fino a quando questa non è stata completata. Quindi non serve a molto xD.

Autore:  barletheking [ 08/11/2010, 17:59 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Ottimo

Autore:  Peppinux AKA Peppe_Stasu [ 08/11/2010, 20:32 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Codice:
pName(playerid)
{
    new playerName[24];
    GetPlayerName(playerid, playerName 24);
    return playerName;
}

Autore:  Angelo [ 08/11/2010, 20:41 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Codice:
stock SetPlayerPosWithVehicle(playerid, Float:x, Float:y, Float:z, Float:Angle, interior, virtualworld)
{
    if(IsPlayerInAnyVehicle(playerid))
    {
        new vehicleid = GetPlayerVehicleID(playerid);
        SetVehiclePos(vehicleid, x, y, z);
        SetVehicleZAngle(vehicleid, Angle);
        LinkVehicleToInterior(vehicleid, interior);
        SetVehicleVirtualWorld(vehicleid, virtualworld);
        SetPlayerPos(playerid, x, y, z);
        PutPlayerInVehicle(playerid, vehicleid, 1);
    }
}


Utile funzione che teletrasporta il player con tutto il veicolo (Non c'è bisogno di vedere se il player è nel veicolo);

Autore:  Peppinux AKA Peppe_Stasu [ 08/11/2010, 21:02 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Angelo ha scritto:
Codice:
stock SetPlayerPosWithVehicle(playerid, Float:x, Float:y, Float:z, Float:Angle, interior, virtualworld)
{
    if(IsPlayerInAnyVehicle(playerid))
    {
        new vehicleid = GetPlayerVehicleID(playerid);
        SetVehiclePos(vehicleid, x, y, z);
        SetVehicleZAngle(vehicleid, Angle);
        LinkVehicleToInterior(vehicleid, interior);
        SetVehicleVirtualWorld(vehicleid, virtualworld);
        SetPlayerPos(playerid, x, y, z);
        PutPlayerInVehicle(playerid, vehicleid, 1);
    }
}


Utile funzione che teletrasporta il player con tutto il veicolo (Non c'è bisogno di vedere se il player è nel veicolo);

Migliorato:
Codice:
stock SetPlayerPosWithVehicle(playerid, Float:x, Float:y, Float:z, Float:angle = 90.0, interior = 0, virtualworld = 0)
{
    if(IsPlayerInAnyVehicle(playerid))
   {
      if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
       {
           new vehicleid = GetPlayerVehicleID(playerid);
           SetVehiclePos(vehicleid, x, y, z);
           if(angle != 90) SetVehicleZAngle(vehicleid, angle);
           if(interior != 0) LinkVehicleToInterior(vehicleid, interior);
           if(virtualworld != 0) SetVehicleVirtualWorld(vehicleid, virtualworld);
           PutPlayerInVehicle(playerid, vehicleid, 0);
      }
    }
}

Autore:  Angelo [ 08/11/2010, 21:11 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

hai ragione ho dimenticato il PLAYER_STATE_DRIVER

Autore:  Peppinux AKA Peppe_Stasu [ 08/11/2010, 21:51 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Dimenticavo. Sarebbe meglio che se il player non è in nessun veicolo viene richiamata la funzione normale SetPlayerPos. Correggi tu :asd:

Autore:  Angelo [ 09/11/2010, 10:44 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Codice:
SetPlayerPosEx(playerid, Float:x, Float:y, Float:angle, interior, world)
{
    SetPlayerInterior(playerid, interior);
    SetPlayerVirtualWorld(playerid, world);
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
        new vehicleid = GetPlayerVehicleID(playerid);
        SetVehiclePos(vehicleid, x, y, z);
        SetPlayerPos(playerid, x, y, z);
        SetVehicleZAngle(vehicleid, angle);
        LinkVehicleToInterior(vehicleid, interior);
        SetVehicleVirtualWorld(vehicleid, world);
    }
    else
    {
        SetPlayerPos(playerid, x, y, z);
        SetPlayerFacingAngle(playerid, angle);
    }
}


Credo che così vada meglio basta mettere SetPlayerPosEx(playerid, x, y, z, angle, interior, world); e fa tutto da solo

Autore:  Peppe [ 09/11/2010, 15:44 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Angelo ha scritto:
Codice:
SetPlayerPosEx(playerid, Float:x, Float:y, Float:angle, interior, world)
{
    SetPlayerInterior(playerid, interior);
    SetPlayerVirtualWorld(playerid, world);
    if(GetPlayerState(playerid) &PLAYER_STATE_DRIVER)
    {
        new vehicleid = GetPlayerVehicleID(playerid);
        SetVehiclePos(vehicleid, x, y, z);
        SetPlayerPos(playerid, x, y, z);
        SetVehicleZAngle(vehicleid, angle);
        LinkVehicleToInterior(vehicleid, interior);
        SetVehicleVirtualWorld(vehicleid, world);
    }
    else if(GetPlayerState(playerid) &PLAYER_STATE_ONFOOT)
    {
        SetPlayerPos(playerid, x, y, z);
        SetPlayerFacingAngle(playerid, angle);
    }
}


Credo che così vada meglio basta mettere SetPlayerPosEx(playerid, x, y, z, angle, interior, world); e fa tutto da solo


L'operatore & non centra niente qui, usa ==, inoltre mettere l'if che controlla se un player a piedi è inutile, anzi, non setterebbe la pos dei player passeggeri.

Autore:  Angelo [ 09/11/2010, 15:50 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

modificato

Autore:  Angelo [ 30/01/2011, 14:01 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

Codice:
forward Float:GetDistance(Float:x1, Float:x2, Float:y1, Float:y2);
Float:GetDistance(Float:x1, Float:x2, Float:y1, Float:y2)
{
   return floatsqroot(floatpower(floatsub(x1, x2), 2) + floatpower(floatsub(y1, y2), 2));
}


Semplice funzione che returna la distanza tra due punti, basterà prendere le coordinate di questi due punti e sistemare la coordinata x del primo e quella del secondo al posto di x1, x2 (se le metterte al contrario non cambia niente) la stessa cosa fatela con le coordinate y.

Codice:
forward Float:GetPlayersDistance(playerid, pid);
Float:GetDistance(playerid, pid)
{
    if(IsPlayerConnected(playerid) && IsPlayerConnected(pid))
    {
        if(playerid != INVALID_PLAYER_ID && pid != INVALID_PLAYER_ID)
        {
       new Float:Pos[6];
       GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
       GetPlayerPos(pid, Pos[3], Pos[4], Pos[5]);
       return floatsqroot(floatpower(floatsub(Pos[0], Pos[3]), 2) + floatpower(floatsub(Pos[1], Pos[4]), 2));
        }
    }
}


Il GetPlayersDistance returna la distanza tra due players

Codice:
forward Float:GetVehiclesDistance(vehicleid, vehicleid2);
Float:GetDistance(vehicleid, vehicleid2)
{
    if(vehicleid != INVALID_VEHICLE_ID && vehicleid2 != INVALID_VEHICLE_ID)
    {
   new Float:Pos[6];
   GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);
   GetVehiclePos(vehicleid2, Pos[3], Pos[4], Pos[5]);
   return floatsqroot(floatpower(floatsub(Pos[0], Pos[3]), 2) + floatpower(floatsub(Pos[1], Pos[4]), 2));
    }
}


Il GetVehiclesDistance returna la distanza tra due veicoli.

Codice:
forward Float:GetObjectsDistance(obj1, obj2);
Float:GetDistance(obj1, obj2)
{
    if(obj1 != INVALID_OBJECT_ID && obj2 != INVALID_OBJECT_ID)
    {
   new Float:Pos[6];
   GetObjectPos(obj1, Pos[0], Pos[1], Pos[2]);
   GetObjectPos(obj2, Pos[3], Pos[4], Pos[5]);
   return floatsqroot(floatpower(floatsub(Pos[0], Pos[3]), 2) + floatpower(floatsub(Pos[1], Pos[4]), 2));
    }
}


Il GetObjectsDistance returna la distanza tra due objects

Autore:  Peppinux AKA Peppe_Stasu [ 25/02/2011, 16:23 ]
Oggetto del messaggio:  Re: [ARG] Funzioni utili

sendInfoMessage(playerid, bool:color, message[])
Codice:
sendInfoMessage(playerid, bool:color, message[])
{
    new string[128];
    if(color == true) format(string, 128, "{00FF00}INFO: {AFAFAF}%s", message);
    else format(string, 128, "{F60000}INFO: {AFAFAF}%s", message),
    SendClientMessage(playerid, -1, string);
}

-playerid: L'ID del Player a cui deve essere mandato il messaggio di INFO.
-bool:color: Il colore che deve avere "INFO:" nel messaggio. true = verde; false = rosso.
-message[]: Testo del messaggio di INFO.

sendErrorMessage(playerid, message[])
Codice:
sendErrorMessage(playerid, message[])
{
    new string[128];
    format(string, 128, "{F60000}ERRORE: {AFAFAF}%s", message),
    SendClientMessage(playerid, -1, string);
}

-playerid: L'ID del Player a cui deve essere mandato il messaggio di ERRORE.
-message[]: Testo del messaggio di ERRORE.

Pagina 1 di 2 Tutti gli orari sono UTC + 1 ora [ ora legale ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/