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.

Correlli

U ovom topiku možete staviti vaše korisne skripte i kodove (ne komande).
Poslednja Izmena: Jul 08, 2017, 17:49:05 POSLE PODNE od MEDO

Correlli

Sa ovom funkcijom možete "prisiliti" bilo kojeg igraća na korištenje komande ako ta komanda postoji u gamemodu ili filterskripti:
Funkcija:
stock ForcePlayerCommand(playerid, command[]) // Emilio "Correlli" Lovrić
{
    if(!IsPlayerConnected(playerid)) return false;
    new
            playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername, sizeof(playername));
    CallRemoteFunctionEx("OnPlayerCommandText", "is", playerid, "/%s", command);
    printf("Forcing player command: Player: \"%s (%i)\", Command: \"/%s\"", playername, playerid, command);
    return true;
}


Primjer:
public OnPlayerCommandText(playerid, cmdtext[])
{
    // ova će komanda pozvati komandu /command
    if(strcmp("/mycmd", cmdtext, true) == 0) return ForcePlayerCommand(playerid, "command");

    // ovo je test komanda koja će izbaciti obićnu poruku "testMsg."
    if(strcmp("/command", cmdtext, true) == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "testMsg.");
    return false;
}


/* ime komande morate koristiti bez "/"
ovo je primjer ako želimo pozvati komandu /kick koja ima parametre: ime, razlog */
ForcePlayerCommand(playerid, "kick Marko psovanje");


Trebat će vam CallRemoteFunctionEx funkcija:
// ovaj varijabl će vam trebati za CallRemoteFunctionEx funkciju.
new
        FALSE = 0;


CallRemoteFunctionEx funkcija:
#if !defined CallRemoteFunctionEx
    #define CallRemoteFunctionEx(%0,%1,%2,%3,%4) \  // Emilio "Correlli" Lovrić
    do \
    { \
        new \
                string[64]; \
        format(string, sizeof(string), %3, %4); \
        CallRemoteFunction(%0, %1, %2, string); \
    } \
    while(FALSE)
#endif




Sa ovom funkcijom možete promijeniti ime vašeg servera:
Funkcija:
stock SetServerName(name[])  // Emilio "Correlli" Lovrić
{
    SendRconCommandEx("hostname %s", name);
    printf("Setting server name to: \"%s\"", name);
    return true;
}


Primjer:
SetServerName("SA-MP v0.3a server");


Sa ovom funkcijom možete promijeniti text gamemoda koji je trenutno na vašem serveru:
Funkcija:
stock SetServerGamemode(gamemode[])  // Emilio "Correlli" Lovrić
{
    SendRconCommandEx("gamemodetext %s", gamemode);
    printf("Setting server gamemode name to: \"%s\"", gamemode);
    return true;
}


Primjer:
SetServerGamemode("San Andreas Role-Play");


Sa ovom funkcijom možete promijeniti ime mape vašeg servera:
Funkcija:
stock SetServerMap(map[])  // Emilio "Correlli" Lovrić
{
    SendRconCommandEx("mapname %s", map);
    printf("Setting server map name to: \"%s\"", map);
    return true;
}


Primjer:
SetServerMap("Liberty City");


Za funkcije SetServerName, SetServerGamemode & SetServerMap trebat će vam SendRconCommandEx funkcija:
/* ovaj varijabl će vam trebati za SendRconCommandEx funkciju.
UPOZORENJE: ako već imate ovaj varijabl definiran od prije (CallRemoteFunctionEx funkcija), onda nema potrebe da ga stavljate još jednom. */
new
        FALSE = 0;


SendRconCommandEx funkcija:
#if !defined SendRconCommandEx
    #define SendRconCommandEx(%0,%1) \  // Emilio "Correlli" Lovrić
    do \
    { \
        new \
                string[64]; \
        if(strlen(%0) > 0) \
        { \
            format(string, sizeof(string), %0, %1); \
            SendRconCommand(string); \
        } \
    } \
    while(FALSE)
#endif

Eto napokon je ponovno otvorena, inace mislim da se nasla metoda(pomocu AMX opcode) da ne trebas macro stavljati da moze primiti x parametara te iste parametre koristi na format. Imas to tamo kod Y_Less optimization topic, al svejedno i ovo ce raditi(a bit ce i sigurno razumljivije nego opcodovi  :D). Evo jedna za pocetak:


#define is_even(%1) !((%1) & 1)
#define is_odd(%1)  !is_even(%1)


Zasto bi trebali broj bitwise AND-ati da bismo vidjeli jeli paran tj. neparan, razlog:
svi parni brojevi imaju bit koji je prvi s desne strane(tzv. LSB) vrijednosti 0, a neparni 1.
Inace se koristi (x % 2), ali to je sporije od ovoga  ;)

Svidja mi se ovo za tjeranje igraca na neku komandu. Sinula mi je ideja.  :P




GameMode je u izradi(0.1 %). Ovaj Game Mode nije edit bilo kojeg vec postojeceg gamemoda. Ovaj mod se radi od nule.

www.domino-samp.net | Portal i Forum Otvoreni
IP: 188.72.226.228:7777 | Server za zezanciju sa LARP modom.

Eto posto nitko nije postao vec otprilike 2 mjeseca moram ja ovaj topic malo ozivit(nadam se da ce bit aktivan kao i prije):

/**
*  Orginal algorithm:
*      --------------------------
*      str[x] += (3^x) * (x % 15)
*      --------------------------
*          Objasnjenje:
*          # x => trenutna pozicija u stringu
*          # Dodaje (3^x) * (x % 15) na slovo koje je trenutno na poziciji x u stringu(zato nam treba charset)
*          # Takoder se moze vidjeti jako vazna slabost ovdje: ulazna duzina stringa ce biti jednaka izlaznoj duzini stringa
*/
stock Decrypt(str[])
{
new
    result[128];
for(new i = 0, j = strlen(str), z = 0; i < j; i++)
{
    for(new x = 0; charset[x] < sizeof(charset); x++)
    {
new
target = charset[x] + (((3^i) * (i % 15)));
if(((target > 0xFF) ? target-256 : target) == str[i])
{
result[z++] = charset[x];
}
    }
}
return result;
}

[quote author=Luka P. link=topic=4245.msg69131#msg69131 date=1276697770]
Nisam znao jel ima nativna funkcija za ovo, pa sam napravio svoju  :P

...

Ali recimo meni je lakše naći ID kada koristim GivePlayerWeapon, to koristim za /givegun [player] [ime oruzja] [municija]

[/quote]
to se zove lose skriptanje, bolji nacin je:

new const
    g_WeaponTable[46][] =
    {
        "ime prvog oruzja",
        "ime drugog oruzja",
       // i tako sve
    }
stock GetWeaponIDByName(const name[])
{
    new
        id = -1;
    for(new i = 0; i < sizeof(g_WeaponTable); i++)
    {
        if(!strcmp(name, g_WeaponTable[i]))
        {
            id = i;
        }
    }
    return id;
}

stock GetPlayerFirstName(playerid)
{
new namestring[2][MAX_PLAYER_NAME];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
split(name, namestring, '_');
return namestring[0];
}


stock GetPlayerLastName(playerid)
{
new namestring[2][MAX_PLAYER_NAME];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
split(name, namestring, '_');
return namestring[1];
}


stock GetPlayerNameEx(playerid)//Brise "_" u imenu igraca
{
    new string[24];
    GetPlayerName(playerid,string,24);
    new str[24];
    strmid(str,string,0,strlen(string),24);
    for(new i = 0; i < MAX_PLAYER_NAME; i++)
    {
        if (str[i] == '_') str[i] = ' ';
    }
    return str;
}
Aequam memento rebus in arduis servare mentem.

stock SendMessageToAdmins(bool:client,sender,color,msg[])
{
   foreach (Player, i)
{
    if(IsPlayerAdmin(i))
    {
      new string[128];
                 if(client == true)
         {
                new pName[MAX_PLAYER_NAME+1];
                GetPlayerName(i,pName,sizeof(pName));
format(string,sizeof(string),"%s(%d): %s",pName,sender,msg);
SendClientMessage(i,color,string);
}
else
{
        format(string,sizeof(string),"%s",msg);
SendClientMessage(i,color,string);
}
}
}
}


Korištenje: SendMessageToAdmins(bool:client,sender,color,msg[]);
bool:Client - ako je true onda će se adminima poslati msg(poruka) s imenom i IDom sendera, a ako je na false onda ce se poslati samo msg(poruka)
sender - id igraca koji je poslao poruku, koristi se samo ako je Client na true
color - boja u kojoj ce tekst biti poslan adminima
msg[] - poruka koja se šalje adminima



PRIMJERI:
SendMessageToAdmins(true,playerid,0xF95D5DAA,"Test kod")
rezultat: Ime_Prezime(0): Test kod

SendMessageToAdmins(false,0,0xF95D5DAA,"Test kod")
rezultat: Test kod



NAPOMENA: Za ovu funkciju je potreban foreach include koji mozete skinuti OVDJE .
Poslednja Izmena: Avgust 15, 2010, 09:31:58 PRE PODNE od LordShigi


RESPECT 4 EVER: John, GLC,bAndzi, Nikola, Sop, Zoki, Bruno_Venuti, Mele, Luka P,ExtremePower,Wang(neki kineski frajer)

NAJBOLJI CITATI:
Citat: [GF]Alive poslato Jun 24, 2010, 18:20:19 POSLE PODNE
Paizte ljud mozda je KayLoger! ! !
MOJI RADOVI:
[FS]Trofeji

nastoe


  • Eto vidim da je neaktivan ovaj topic pa da ga malo ozivim eto nekih osnovnih funkcija kojim si mozete skratiti posao.

stock DajHelte(playerid,Float:Helti)
{
    new
    Float:Helti;
    GetPlayerHealth( playerid,Helti );
    SetPlayerHealth( playerid, Helti + Helti );
}


UzmiHelte(playerid,- Helti);

stock UzmiHelte( playerid,Float:Helti )
{
    new
    Float:Helti;
    GetPlayerHealth( playerid,Helti );
    SetPlayerHealth( playerid, Helti - Helti );
}


primjer....

cmd:mojakomanda(playerid,params[])
{
    UzmiHelte(playerid,50);
    SCM(playerid,siva,"Odluzelo ti se 50 helti..");
    return 1;
}


ImeIgraca(id igraca);

stock ImeIgraca(playerid)
{
   new
   Ime[ MAX_PLAYER_NAME ];
   GetPlayerName( playerid,Ime, MAX_PLAYER_NAME );
   return Ime;
}


primjer...

format(string, sizeof string,"Igracevo ime je %s",ImeIgraca(id));
SCM(playerid,gf,string);


ClearChat(); - 50 SCM

stock ClearChat()
{
   for( new i = 0; i < 50; i++ )
   {
     SendClientMessageToAll( siva, " " );
   }
   return 1;
}


DodajScore(playerid, +iznos);

stock DodajScore( playerid, valuta )
{
    SetPlayerScore (playerid,  GetPlayerScore( playerid ) + Valuta );
    return 1;
}


Evo jedne macro funkcije koje koristim za ekonomiju u serveru, zelio bi se zahvaliti Don Correlli-u koji mi je pomogao...

new
VALUE = 5;
#define returnValue( %0 ) %0 * VALUE
stock SetNewValue( valuta ) return VALUE = valuta;

// Primjer primjene.....

SetNewValue( 8 );
printf("%i", returnValue( 6 )); // vrati 48 ( prije toga stavimo VALUE kao 8, znači 8 * 6 = 48. )


JeUvodi(playerid);

  • Ovo sam jos davno radio neznam dali ce raditi na 0.3b ali vrijedi pokusati ovo samo gleda jeli igrac na Z poziciji tj. u moru i napravljene su aree u kojem je more..Trebat ce vam Y_lessova funkcija IsPlayerInArea


stock JeUvodi(playerid)
{
new
Float:X,Float:Y,Float:doljegore;
GetPlayerPos(playerid,X,Y,doljegore);
if ((IsPlayerInArea(playerid, 2032.1371, 1841.2656, 1703.1653, 1467.1099) && doljegore <= 9.0484)
|| (IsPlayerInArea(playerid, 2109.0725, 2065.8232, 1962.5355, 10.8547) && doljegore <= 10.0792)
|| (IsPlayerInArea(playerid, -492.5810, -1424.7122, 2836.8284, 2001.8235) && doljegore <= 41.06)
  || (IsPlayerInArea(playerid, -2675.1492, -2762.1792, -413.3973, -514.3894) && doljegore <= 4.24)
  || (IsPlayerInArea(playerid, -453.9256, -825.7167, -1869.9600, -2072.8215) && doljegore <= 5.72)
  || (IsPlayerInArea(playerid, 1281.0251, 1202.2368, -2346.7451, -2414.4492) && doljegore <= 9.3145)
  || (IsPlayerInArea(playerid, 2012.6154, 1928.9028, -1178.6207, -1221.4043) && doljegore <= 18.45)
  || (IsPlayerInArea(playerid, 2326.4858, 2295.7471, -1400.2797, -1431.1266) && doljegore <= 22.615)
  || (IsPlayerInArea(playerid, 2550.0454, 2513.7588, 1583.3751, 1553.0753) && doljegore <= 9.4171)
  || (IsPlayerInArea(playerid, 1102.3634, 1087.3705, -663.1653, -682.5446) && doljegore <= 112.45)
  || (IsPlayerInArea(playerid, 1287.7906, 1270.4369, -801.3882, -810.0527) && doljegore <= 87.123)
  || (doljegore < 1.5))
{
return 1;
}
return 0;
}


stock IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy) // BY Y_Less
{
   new Float:x, Float:y, Float:z;
   GetPlayerPos(playerid, x, y, z);
   if (x > minx && x < maxx && y > miny && y < maxy) return 1;
   return 0;
}


SetPlayerPosEx(playerid, X,Y,Z,Int,VW);

stock SetPlayerPosEx(playerid,Float:X,Float:Y,Float:Z,interior,VirtualWorld)
{
   new
   vozilo = GetPlayerVehicleID(playerid);
   if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
   {
     SetPlayerVirtualWorld(playerid,VirtualWorld);
     SetPlayerPos(playerid, X, Y, Z);
     SetVehiclePos(car, X, Y, Z);
     PutPlayerInVehicle(playerid, vozilo, 0);
     SetPlayerInterior(playerid,interior);
   }
   else
   {
     SetPlayerPos(playerid, X, Y, Z);
   }
   return 1;
}


if(JeBicikl(carid))

stock JeBicikl(carid)
{
   if( GetVehicleModel( carid ) == 481 || GetVehicleModel( carid ) == 509 || GetVehicleModel( carid ) == 510 )
   {
       return 1;
   }
   return 0;
}


IgracIgracu(playerid,playerid2);

stock IgracIgracu(playerid, playerid2)
{
    new
    Float: X, Float: Y, Float Z;
    GetPlayerPos(playerid,X,Y,Z);
    SetPlayerPos(playerid2,X+2,Y,Z);
    return 1;
}

Poslednja Izmena: Septembar 04, 2010, 14:58:52 POSLE PODNE od ExtremePower

1. de facto u programiranju/skriptanju u vezi ime varijabla, funkcija, i svega sta nije tekst je da bude pisano na Engleskom jer je to internacionalni jezik.

2.

stock DodajScore( playerid, valuta ) 

     SetPlayerScore (playerid,  GetPlayerScore( playerid ) + Valuta ); 
     return 1; 


ovdje ce izbacit error jer si koristio "Valuta"(veliko 'V') umjesto "valuta"

3. Ovdje se moze maknut overhead pozivanja funkcije jer je trivialna

stock JeBicikl(carid) 

    if( GetVehicleModel( carid ) == 481 || GetVehicleModel( carid ) == 509 || GetVehicleModel( carid ) == 510 ) 
    { 
        return 1; 
    } 
    return 0; 
}

bolje:

#define IsBike(%1) (GetVehicleModel(%1) == 481 || GetVehicleModel(%1) == 509 || GetVehicleModel(%1) == 510)


4. Ime funkcije "IgracIgracu" ne govori bas puno, bolje bi ime bilo "SetPlayerPosToPlayer" ili slicno.

5. "JeUvodi" je nesigurna funkcija po tome sto ne mozes tocno pokriti sva podrucja, pa ce nekad vracat krivi rezultat.

6. funkcija SetPlayerPosEx nema bas logike jer ce napravit sto treba kad je igrac vozac al kad nije onda ce mu samo postavit poziciju, pa eto dobre verzije:

stock SetPlayerPosEx(playerid, Float: x, Float: y, Float: z, interior, virtualWorld)
{
    if(SetPlayerVirtualWorld(playerid, virtualWorld))
    { // player is connected
if(SetPlayerInterior(playerid, interior))
{
        new
        vehicle = GetPlayerVehicleID(playerid);
        if(vehicle)
        {
        return SetVehiclePos(vehicle, x, y, z);
        }
        else
        {
        return SetPlayerPos(playerid, x, y, z);
        }
}
     }
     return 0;
}

nisam testirao al trebala bi radit.

nastoe

Dobro hvala na ispravku velikih slova. Drugo, sta se tice jezika znas i sam da neki neznaju osnove engleskog jezika


A sta se tice SetPlayerPosEx sam planiro al mi se nije dalo dodavati da ako je u vozilu da linka vozilo sa INT i da teleportira i vozilo

Svida mi se ova ideja

#define IsBike(%1) (GetVehicleModel(%1) == 481 || GetVehicleModel(%1) == 509 || GetVehicleModel(%1) == 510)

Evo jedne funkcije, nije nesto al mozete si ubrzati freeze i unfreeze jer znam kad ja radim onda uvjek trazim toggleplayercont. jer nikako da zapamtim kako se tocno pise ^^

stock Freeze(playerid,bool:zaleden)
{
if(zaleden == true)
{
// FREEZE
TogglePlayerControllable(playerid,0);
}
else if(zaleden == false)
{
   // UNFREEZE
   TogglePlayerControllable(playerid,1);
}
return false;
}



Znaci primjena, ako nekog zelite freezati onda stavite Freeze(playerid,1); a za unfreeze Freeze(playerid,0);

Freeze(playerid,1); // ZALEDEN (FREEZE)
Freeze(playerid,0); // ODLEDEN (UNFREEZE)
Kristijan Stipić

Citat: Luka P. poslato Septembar 26, 2010, 18:29:02 POSLE PODNE
Citat: taft poslato Septembar 26, 2010, 12:35:53 POSLE PODNE
Evo jedne funkcije, nije nesto al mozete si ubrzati freeze i unfreeze jer znam kad ja radim onda uvjek trazim toggleplayercont. jer nikako da zapamtim kako se tocno pise ^^

stock Freeze(playerid,bool:zaleden)
{
if(zaleden == true)
{
// FREEZE
TogglePlayerControllable(playerid,0);
}
else if(zaleden == false)
{
   // UNFREEZE
   TogglePlayerControllable(playerid,1);
}
return false;
}



Znaci primjena, ako nekog zelite freezati onda stavite Freeze(playerid,1); a za unfreeze Freeze(playerid,0);

Freeze(playerid,1); // ZALEDEN (FREEZE)
Freeze(playerid,0); // ODLEDEN (UNFREEZE)


#define Freeze TogglePlayerControllable

#define Freeze(%1,%2) TogglePlayerControllable((%1), !(%2))

tvoje bi radilo obrnuto, znaci kad netko hoce Freeze(playerid, 1); onda bi ga unfreezao.
evo i funkcije pa mozete koristiti sta hocete(i da pokazem kako lakse napraviti nego sta je onaj taft):

stock Freeze(playerid, bool: freeze)
{
    return TogglePlayerControllable(playerid, !freeze);
}

i btw. @taft; tvoj kod bi uvijek vracao false...

hvala bullet, hvala luka...Samo luka ja sam ubiti htio ovo sta je bullet napravio a to je ovo obrnuto "#define Freeze(%1,%2) TogglePlayerControllable((%1), !(%2))" hvala
Poslednja Izmena: Maj 14, 2011, 13:47:53 POSLE PODNE od [H]265
Kristijan Stipić

Da malo refresham..

Od garsina:

Detekcija dali je igrac pauzao igru
new LastPlayerUpdate[MAX_PLAYERS];
#define IsPlayerPaused(%1,%2) GetTickCount() > (LastPlayerUpdate[%1] + (%2 * 1000))//vraca pauzirano vrijeme u sekundama
// Primjer
public OnPlayerUpdate(playerid)
{
    LastPlayerUpdate[playerid] = GetTickCount();
    return 1;
}

//U Timeru ili slicno
if(IsPlayerPaused(playerid, 300) && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)
{
    Kick(playerid);
}
Aequam memento rebus in arduis servare mentem.