Pretraga

Pritisnite Enter za pretragu ili Escape za zatvaranje

Zaključano

Korisne skripte i kodovi

Započeo Obrisan korisnik
pre 15 godina
87,705
pregleda
366
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
Obrisan korisnik Obrisan korisnik
pre 15 godina
U ovom topiku možete staviti vaše korisne skripte i kodove (ne komande).
Obrisan korisnik Obrisan korisnik
pre 15 godina
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;
    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; \
        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; \
        if(strlen(%0) > 0) \
        { \
            format(string, sizeof(string), %0, %1); \
            SendRconCommand(string); \
        } \
    } \
    while(FALSE)
#endif
JoeBullet v2.1
Enforcer
pre 15 godina
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  😄). 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  😉
Daka
Enforcer
pre 15 godina
Svidja mi se ovo za tjeranje igraca na neku komandu. Sinula mi je ideja.  😛
JoeBullet v2.1
Enforcer
pre 15 godina
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 += (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;
for(new i = 0, j = strlen(str), z = 0; i < j; i++)
{
    for(new x = 0; charset < sizeof(charset); x++)
    {
new
target = charset + (((3^i) * (i % 15)));
if(((target > 0xFF) ? target-256 : target) == str)
{
result[z++] = charset;
}
    }
}
return result;
}
JoeBullet v2.1
Enforcer
pre 15 godina
Luka P. wrote on June 16, 2010, 2:16 pm:
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 [ime oruzja]
GGC
Godfather
pre 15 godina
stock GetPlayerFirstName(playerid)
{
new namestring;
new name;
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
split(name, namestring, '_');
return namestring;
}

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

stock GetPlayerNameEx(playerid)//Brise "_" u imenu igraca
{
    new string;
    GetPlayerName(playerid,string,24);
    new str;
    strmid(str,string,0,strlen(string),24);
    for(new i = 0; i < MAX_PLAYER_NAME; i++)
    {
        if (str == '_') str = ' ';
    }
    return str;
}
LordShigi
Crime Lord
pre 15 godina
stock SendMessageToAdmins(bool:client,sender,color,msg[])
{
  foreach (Player, i)
{
    if(IsPlayerAdmin(i))
    {
      new string;
                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 .
taft
Underboss
pre 15 godina
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)
JoeBullet v2.1
Enforcer
pre 15 godina
Luka P. wrote on September 26, 2010, 10:35 am:
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. @Slay; tvoj kod bi uvijek vracao false...
taft
Underboss
pre 15 godina
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
GGC
Godfather
pre 15 godina
Da malo refresham..

Od garsina:

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

//U Timeru ili slicno
if(IsPlayerPaused(playerid, 300) && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)
{
    Kick(playerid);
}
taft
Underboss
pre 15 godina
Macro funkcija:

formatEx ( playerid , string[] , len ) ;
#define DULJINA_FORMATA 128
#define SCM(%0,%1,%2) SendClientMessage(%2,%1,%0)
#define BOJA 0x00FF14FF

#define formatEx(%0,%1,%2) \
do \
{ \
new \
string; \
format(string, sizeof string, %1, %2); \
SCM(string, BOJA, %0); \
   } \
  while(false)


by 265

S ovom funkcijom si skratite muke...Standardni primjer
new
    string
;
format(string , sizeof string, "neka poruka" len );
SendClientMessage(playerid, nekaBoja, string);


a sa ovom funkcijom ce to ovako izgledati....
formatEx(playerid, "%s" ime );


I TO JE SVE! Evo jedan primjer u praksi
public OnPlayerSpawn(playerid)
{
      new
            ime
      ;
      GetPlayerName(playerid, ime, 24);
      formatEx(playerid, "Spawno si se %s", ime);
      return true;
}


Takoder sam napravio ako trebate format za SVE online igrace
#define DULJINA_FORMATA2 128

#define formatExToAll(%0,%1) \
do \
{ \
new \
string; \
format(string, sizeof string, %0, %1); \
ScmToAll(BOJA, string); \
} \
while(false)


formatExToAll(string[] , len );

primjer:
public OnPlayerConnect(playerid)
{
       new
           ime
       ;
       GetPlayerName(playerid, ime, 24);
       formatExToAll("|- %s se prikljucio na server -|" , ime);
       return true;
}


U slucaju da dobite ovakav warning

warning 205: redundant code: constant expression is zero
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase

1 Warning.


Onda na vrh stavite
new stock
    bool:FALSE = false;


Eto toliko od mene, nista posebno ali zasto si ne olaksati?
Marjan_King
Kingpin
pre 14 godina
Evo za AntiDriveBy 🙂

Pod public OnPlayerDeath dodajte ovo:

if(killerid != INVALID_PLAYER_ID)
{
if(GetPlayerState(killerid) == 2)
{
        SendClientMessage(killerid, ZELENA, "=====================================================");
SendClientMessage(killerid, CRVENA, "DRIVE BY UBISTVO!");
SendClientMessage(killerid, CRVENA, "TO JE ZABRANJENO | NEMOJ TO RADITI");
SendClientMessage(killerid, ZELENA, "=====================================================");
GetPlayerHealth(playa, shealth);
SetPlayerHealth(playa, shealth-5);
GetPlayerPos(playa, slx, sly, slz);
SetPlayerPos(playa, slx, sly, slz+5);
PlayerPlaySound(playa, 1130, slx, sly, slz+5);
return 1;
}
}

Odmah ispod OnPlayerDeath dodajte sledece:
new playa;
new Float:slx, Float:sly, Float:slz;]

I ako cete koristiti ovakav naziv boje kao ja ,trebate to definirati | Skroz gore kod define-a dodajte ovo:
#define CRVENA 0xAA3333AA
#define ZELENA 0x33AA33AA


Znaci kada igrac ubije igraca iz auta , taj igrac automatski dobija /slap komandu 😁
Obrisan korisnik Obrisan korisnik
pre 14 godina
joXy wrote on January 30, 2011, 12:55 am:
if(killerid != 255)
{
   // ...
}


INVALID_PLAYER_ID u 0.3 verziji SA:MP-a je definiran kao 0xFFFF (65535), a ne kao 255 (0.2 verzija). Šta želim reći jest da 255 nije više nevažeći ID ako koristiš 0.3 verziju, zato ti je bolje da koristiš definicije poput INVALID_PLAYER_ID.

I šta će ti uopče funkcija GetPlayerName i sa time i varijabl giveplayer kad ne koristiš toga nigdje?

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava