FiveGame SA:MP GameMod, Tutoriale

Alăturați-vă forumului, este rapid și ușor

FiveGame SA:MP GameMod, Tutoriale

FiveGame SA:MP Daca aveti orice fel de intrebari nu ezitati sa ne contactati. O zi buna, Echipa
Forumul FiveGame este in cautare de persoane capabile pentru a modera forumul și pentru a ajuta utilizatorii la nevoie.
Salut, vreau sa va anunț ca în

8 rezultate gasite pentru include

Scris de InceMan
la data de 3/1/2021, 00:20
 
Cauta in: Scripturi SA:MP
Subiect: Samp Voice Plugin (Versiunea noua)
Raspunsuri: 0
Vizualizari: 238

Samp Voice Plugin (Versiunea noua)

[size=36]Samp Voice Plugin[/size]
SVP

[ltr]Salutare, aceasta este noua versiune de samp voice, varianta cea veche postata de mine fiind inactiva, din nou, este doar un plugin imprumutat de la rusi, si netestat, succes la implementat Smile[/ltr]


                  [size=18]TUTORIAL DE INSTALARE
[/size]
[size=18] Pentru inceput deschideti server.cfg si adaugati pe linia plugins urmatorul lucru:[/size]
[size=13]  Quote
 
 plugins sampvoice
 [/size]

[size=18]Mai apoi trebuie sa adaugati include-ul in gamemode:[/size]
[size=13]  Quote
#include [/size]

Apoi avem urmatoarele definitii
[size=13]  Quote
 
#if defined _sampvoice_included
#define SV_KEY_B 0x42 
#define SV_KEY_Z 0x5A 
 [/size]

Adaugam urmatoarele variabile
[size=13]  Quote
 
#if defined _sampvoice_included
new SV_GSTREAM:gstream = SV_NULL,
SV_LSTREAM:lstream[MAX_PLAYERS] = { SV_NULL, ... };
#endif
 
[/size]
Extinde  

Adaugam acest cod in OnGamemodeInit
[size=13]  Quote
 
#if defined _sampvoice_included
gstream = SvCreateGStream(0xFF0000FF, "Global");
#endif
 
[/size]
Extinde  

[size=15]Adaugam acest cod in OnGamemodeExit
 [/size]
[size=13]  Quote
 
#if defined _sampvoice_included
if (gstream != SV_NULL) {
SvDeleteStream(gstream);
gstream = SV_NULL; }
#endif
 
[/size]
Extinde  

[size=15]Adaugam asta la OnPlayerConnect
 [/size]
[size=13]  Quote
 
#if defined _sampvoice_included
if (SvGetVersion(playerid) == SV_NULL) {
SendClientMessage(playerid, -1, "Не удалось обнаружить плагин sampvoice");
} else if (SvHasMicro(playerid) == SV_FALSE) {
SendClientMessage(playerid, -1, "Не удалось обнаружить микрофон");
} else {
if (gstream != SV_NULL) {
SvAttachListenerToStream(gstream, playerid);
SvAddKey(playerid, SV_KEY_B);
}
if ((lstream[playerid] = SvCreateDLStreamAtPlayer(40.0, SV_INFINITY, playerid, 0x00FFFFFF, "Local")) != SV_NULL)

SvAddKey(playerid, SV_KEY_Z);
}
}
#endif
 
[/size]
Extinde  

[size=15]Iar apoi acest cod la finalul gamemode ului[/size]
 
[size=15]Tag include pe FiveGame SA:MP GameMod, Tutoriale 9NS05OO[/size]
LINK DOWNLOAD:[download=https://github.com/CyberMor/sampvoice/releases/download/v3.1/sv_server_037.zipd/v3.1/sv_server_037.zip]
Scris de InceMan
la data de 21/10/2017, 07:25
 
Cauta in: Tutoriale
Subiect: [Tutorial] - Utilizarea procesorului de comenzi ZCMD + SSCANF2
Raspunsuri: 0
Vizualizari: 271

[Tutorial] - Utilizarea procesorului de comenzi ZCMD + SSCANF2

Salutare fivegame, astazi va voi arata cum sa folositi procesorul de comenzi ZCMD combinat cu sscanf2. Toata lumea stie ca acest procesor de comenzi este foarte rapid si foarte usor de folosit. Mai jos in cateva randuri va vor fi explicate toate detaliile.
 
1. Descarcam include-urile zcmd si sscanf2;
2. Copiem include-urile in pawno/include;
3. Intram in gamemode si la inceputul acestua punem:
[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
[Trebuie sa fiti inscris si conectat pentru a vedea acest link]

4. Acum modificam vechiul sistem de comenzi (strcmp) in noul sistem (zcmd), astfel:
In loc de:
public OnPlayerCommandText(playerid, cmdtext[])
in
public OnPlayerCommandPerformed(playerid, cmdtext[], success)

apoi adaugam aceasta pentru a face vizibile comenzile inexistente in gamemode:
if(!success) return SendClientMessage(playerid, -1, "SERVER: Unknwon command.");
Cam asta a fost tot. Sper ca va fost de folos celor ce n-au aflat inca de acest procesor de comenzi
Scris de InceMan
la data de 15/7/2017, 07:35
 
Cauta in: Pluginuri
Subiect: [Plugin] Life Command Engine [LIFE:CMD]
Raspunsuri: 0
Vizualizari: 287

[Plugin] Life Command Engine [LIFE:CMD]

Life Commands v2.0:
Description:

This is a new shell that was created by me (Kazon).
It is written in C++ to Plugin

Installation:

Need to register [Trebuie sa fiti inscris si conectat pentru a vedea acest link]
[size=11]PHP Code:
[/size]
Cod:
#include <LIFE-CMD>  


Examples of commands:

Commands in LIFE:CMD written as in ZCMD, YCMD and other.
[size=11]PHP Code:
[/size]
Cod:
LIFE:command(playerid, params[]) //(command) You command no slash (/) 

    // You code 
    return true; 
}  


[size=11]PHP Code:
[/size]
Cod:
CMD:mycommand(playerid, params[]) //(mycommand) You command no slash (/) 

    return cmd::command(playerid, params); // So we call the command (/command) from the other command 
}  


CallBack's:

[size=11]PHP Code:
[/size]
Cod:
public OnPlayerCommandCall(playerid, cmdtext[]) 

    //playerid - ID Player | cmdtext - You Command 
    return true; 
}  


public OnPlayerCommandCall(playerid, cmdtext[]) - Called before using

[size=11]PHP Code:
[/size]
Cod:
public OnPlayerCommandFinish(playerid, cmdtext[], success) 

    //playerid - ID Player | cmdtext - You Command | success - returns true or false, that is, whether there is a command or not 
    return true; 
}  


public OnPlayerCommandFinish(playerid, cmdtext[], success) - Called after using the command

Functions:

[size=11]PHP Code:
[/size]
Cod:
CMD:command(playerid, params[]) // Create command 
LIFE:command(playerid, params[]) // Create command 
FCMD:command(playerid, params[]) // Create command 
FUSION:command(playerid, params[]) // Create command 
COMMAND:command(playerid, params[]) // Create command 

cmd::command(playerid, params); // Call command of the other command  


Speed Test:

[Trebuie sa fiti [Trebuie sa fiti inscris si conectat pentru a vedea acest link] şi [Trebuie sa fiti inscris si conectat pentru a vedea acest link] pentru a vedea această imagine]



The tests were conducted over:
RCMD - Romanius Command Engine
ZCMD - Zeex Command Engine
TCMD - Threaded Command Engine(Multithreading)
LIFE:CMD - Life Command Engine(Multithreading)



Dowload:

LIFE:CMD (dll + so + inc) - [Trebuie sa fiti inscris si conectat pentru a vedea acest link] (Updated 20/03/2013)
Speed Test - [url=https://www.dropbox.com/s/wye9yn3qjlc59kz/Speed Test .rar]Dowload*[/url] (Updated 20/03/2013)
Source - [Trebuie sa fiti inscris si conectat pentru a vedea acest link] (Updated 20/03/2013)
Scris de Shower
la data de 2/3/2017, 05:33
 
Cauta in: Tutoriale
Subiect: 0Follow this topic Anti-Hack ( +10 anti hacks )
Raspunsuri: 1
Vizualizari: 241

0Follow this topic Anti-Hack ( +10 anti hacks )

- Acest Anti-hack a fost creat de mine [HY De pe .COM] si contine:

1. Anti-High Ping (300) ;
2. Anti-Jetpack ;
3. Anti-Money Hack ;
4. Anti-Weapon Hack ; Weapon Blocker ;
5. Anti-Health Hack ;
6. Anti-Armour Hack ;
7. Anti-Vehicle Speed Hack ;
8. Anti-Command Spam ;
9. Anti-Fly Car ;
10. Anti C-BUG System ;


Pentru download [IN ROMANA DESIGUR] :

[Trebuie sa fiti inscris si conectat pentru a vedea acest link]" target="_blank" target="_blank" target="_blank -> PWN, doar compilati !


Cod:

/*

ANTI-SYSTEM BY HY


1. Anti-High Ping (300) ;
2. Anti-Jetpack ;
3. Anti-Money Hack ;
4. Anti-Weapon Hack ; Weapon Blocker ;
5. Anti-Health Hack ;
6. Anti-Armour Hack ;
7. Anti-Vehicle Speed Hack ;
8. Anti-Command Spam ;
9. Anti-Fly Car ;
10. Anti C-BUG System ;

*/


//------------------------------------------------------------------------------
[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
//------------------------------------------------------------------------------
forward PingChecker();
forward AntiJetpack();
forward GivePlayerMoneyEx(playerid,ammount);
forward CheckMoney();
//------------------------------------------------------------------------------
new bool:PingChecked[MAX_PLAYERS];
new OldMoney[MAX_PLAYERS];
new NewMoney[MAX_PLAYERS];
new Float:pHealth, Float:pArmour;
//------------------------------------------------------------------------------

public OnGameModeInit()
{
SetTimer("PingChecker", 60000, true);
SetTimer("CheckMoney",5000,true);
return 1;
}

public PingChecker()
{
for(new i;i < MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
if(GetPlayerPing(i) > 300 && PingChecked[i] == false)
{
SendClientMessage(i, -1, "[SERVER]: {15FF00}Ai fost prins cu Ping mare. Rezolva-l, sau vei primi kick !");
PingChecked[i] = true;
}
if(GetPlayerPing(i) > 300 && PingChecked[i] == true)
{
new pName[MAX_PLAYER_NAME] , string[MAX_PLAYER_NAME*2];
GetPlayerName(i, pName, sizeof(pName));
format(string, sizeof(string), "{FF0000}[SERVER]: {FFCC33}%s {15FF00}a primit kick de la {FF0000}AdmBot ! {FFFFFF}|| {FFFF00}Motiv: {15FF00}Ping-Mare", pName);
SendClientMessageToAll(-1, string);
SendClientMessage(i, -1, "{FF0000}[SERVER]: {FFCC33}Ai primit kick de la AdmBot || {FFFF00}Motiv: {15FF00}Ping Mare !");
Kick(i);
}
}
}
return 1;
}

public AntiJetpack()
{
new playerid;
if (GetPlayerSpecialAction(playerid) == 2)
{
new string[128],name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
format(string,sizeof(string),"{FF0000}[SERVER]: {FFCC33}%s {15FF00}a primit kick de la {FF0000}AdmBot ! {FFFFFF}|| {FFFF00}Motiv: {15FF00}Jetpack",name);
SendClientMessageToAll(-1,string);
Kick(playerid);
}
}

public GivePlayerMoneyEx(playerid,ammount)
{
OldMoney[playerid] = GetPlayerMoney(playerid);
NewMoney[playerid] = ammount;
GivePlayerMoney(playerid,ammount);

return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_FIRE && ForbiddenWeap(playerid) && !IsPlayerAdmin(playerid))
{
new pname[MAX_PLAYER_NAME];
new string[124];
GetPlayerName(playerid, pname, sizeof(pname));
format(string, sizeof(string), "[SERVER]: {FFCC33}%s {15FF00}a primit kick de la {FF0000}AdminBot ! {FFFFFF}|| {FFFF00}Motiv: {15FF00}Hack de arme !", pname);
SendClientMessageToAll(-1,string);
print(string);
SetTimerEx("KickTimer", 10, false, "i", playerid);
BanEx(playerid,string);
return 1;
}
if(pHealth >= 100.1)
{
Kick(playerid);
}
if(pArmour >= 100.1)
{
Kick(playerid);
}
return 0;
}

public CheckMoney()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(GetPlayerMoney(i) > NewMoney[i])
{
ResetPlayerMoney(i);
GivePlayerMoney(i,OldMoney[i]);
}
}
}
return 1;
}

public OnPlayerText(playerid, text[])
{
new lol = GetTickCount();
if(GetTickCount() - lol < 3000)
{
SendClientMessage(playerid,-1,"{FF0000}[SERVER]: {15FF00}Ai nevoie de 3 secunde, inainte sa folosesti alta comanda !");
}
return 1;
}

stock ForbiddenWeap(playerid)
{
new wp = GetPlayerWeapon(playerid);
if( wp == 38 || wp == 37 || wp == 36 || wp == 35)
{
return true;
}
return false;
}

stock GetVehicleVelocityVehicle(vehicle)
{
new Float:Velocity[3], output[80];
GetVehicleVelocity(GetPlayerVehicleID(playerid), Velocity[0], Velocity[1], Velocity[2]);
if(Velocity >= 500)
{
Kick(playerid);
}
}

forward OnPlayerCBug(playerid);
public OnPlayerCBug(playerid)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
new str2[128];
new string[128];
format(str2, sizeof(str2), "{FF0000}[SERVER]: {15FF00}%s a primit kick de la {FF0000}AdmBot ! || {FFFF00}Motiv: {15FF00}C-BUG", playername);
new Float:Health; GetPlayerHealth(playerid,Health); SetPlayerHealth(playerid,Health-10);
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x, y, z+15);
PlayerPlaySound(playerid,1190,0.0,0.0,0.0); PlayerPlaySound(playerid,1190,0.0,0.0,0.0);
SendClientMessageToAll(-1, string);
Kick(playerid);
return 1;
Scris de InceMan
la data de 18/2/2017, 06:32
 
Cauta in: Pluginuri
Subiect: [Include] IsPlayerFalling
Raspunsuri: 0
Vizualizari: 298

[Include] IsPlayerFalling

Acesta este un simplu include facut de mine, care poate fi utilizat pentru a verifica daca un player este in cadere sau nu.
Este util de folosit la animatii.
Scriptul nu are acuratete de 100%.
Cum se foloseste?
Pur si simplu descarcati scriptul de pe primul link, si il includeti in gamemode-ul vostru prin [Trebuie sa fiti inscris si conectat pentru a vedea acest link] .
Exemplu:
[size=13]if(IsPlayerFalling(playerid)) return SCM(playerid, -1, "You are falling right now, you can't use this command.");
// your code that will be executed if player is NOT falling

Direct download:[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
Pastebin:[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
Link SA-MP.com: [Trebuie sa fiti inscris si conectat pentru a vedea acest link][/size]
Scris de Shower
la data de 12/1/2017, 03:20
 
Cauta in: Tutoriale
Subiect: [TUTORIAL:SAMP]Evenimente
Raspunsuri: 0
Vizualizari: 265

[TUTORIAL:SAMP]Evenimente

Astazi va voi prezenta ceva simplu si frumos din punctul de vedere al jocului.
Cand este vreo sarbatoare sau vreun eveniment in viata reala, cu totii vrem in viata virtuala sa se faca anumite event-uri din care vreti sa aveti toti de castigat.
Ok, eu am gasit asa-zisa o solutie. Cum ?
Pai in primul rand m-am gandit la o sarbatoare din an,am ales craciunul, fiind in luna 12.
 
Asadar aceasta luna ma ajuta mult deoarece timpul trimis pe server este unul real, si prin urmare incepe automat evenimentul de craciun.(cadouri, brazi, etc).
 
Eu propun sa incepem.
 
[Pasul 1] Iarasi ne lovim de aceste include-uri dar acum si de definirea bazei de date.

[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
 
[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
 

[Trebuie sa fiti inscris si conectat pentru a vedea acest link] SQL_HOST "localhost"
[Trebuie sa fiti inscris si conectat pentru a vedea acest link] SQL_USER "root"
[Trebuie sa fiti inscris si conectat pentru a vedea acest link] SQL_PASS ""
[Trebuie sa fiti inscris si conectat pentru a vedea acest link] SQL_DB "accounts"

[Pasul 2] Definirea enumerotarii in care se vor situa urmatoarele variabile jucatoriale.

enum pInfo
{
    pSQLID,
    pGift,
    pNextGift
 
}
new PlayerInfo[MAX_PLAYERS][pInfo];

[Pasul 3] Crearea variabilelor globale de care ne vom folosi usor pe viitor in diverse functii.

new dbhandle;
 
new bool:EvenimentON[MAX_PLAYERS];
 
new Gift = 19054;
new timer;
 
new Float:x_gift[MAX_PLAYERS] = 0.0000; 
new Float:y_gift[MAX_PLAYERS] = 0.0000;
new Float:z_gift[MAX_PLAYERS] = 0.0000;
 
new Float:rx_gift[MAX_PLAYERS] = 0.0000;
new Float:ry_gift[MAX_PLAYERS] = 0.0000;
 
new Float:rz_gift[MAX_PLAYERS] = 0.0000;

[Pasul 4] Stabilirea forward-urilor care vor apela public-uri.

forward SaveData(playerid);
forward VerificaTimpul();

[Pasul 5] Ne ducem la public-ul OnGameModeInit si vom face in felul urmator:

public OnGameModeInit()
{
    dbhandle = mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
 
    for( new i = 0; i < MAX_PLAYERS; i++ ) {
        new year, month, day;
        getdate(year, month, day);
        if(month == 12 && day >= 24) {  
            CreateObject(gift, x_gift[i], y_gift[i], z_gift[i], rx_gift[i], ry_gift[i], rz_gift[i]);
            Create3DTextLabel("Scrie /getgift pentru a lua\nun cadou.", -1, x_gift[i], y_gift[i], z_gift[i], 10.0, 1);
            EvenimentON[i] = true;
            timer = SetTimer("VerificaTimpul", 1000, 1);
        }
        else {
            EvenimentON[i] = false;
        }
    }
    return 1;
 
}

 
[Pasul 6] Reprezinta comanda getgift imbogatita cu toate cele.
 


CMD:getgift(playerid, params[]) {
    new time = PlayerInfo[playerid][pNextGift],
            minutes,
            string[128];
    minutes = floatround(time / 60);
    format(string, sizeof(string), "%02d minute ramase pana la urmatorul cadou.", minutes);
    if(IsPlayerConnected(playerid)) {
        if(EvenimentON[playerid]) {
            if(IsPlayerInRangeOfPoint(playerid, 5.0, x_gift[playerid], y_gift[playerid], z_gift[playerid])) {
                if(PlayerInfo[playerid][pGift] == 0) {
                    GivePlayerMoney(playerid, 100000);
                    PlayerInfo[playerid][pGift] = 1;
                    PlayerInfo[playerid][pNextGift] = 3600;
                    SaveData(playerid);
                 }
                else {
                    SendClientMessage(playerid, -1, string);
                    return 1;
                }
             }
            else {
                SendClientMessage(playerid, -1, "Nu esti langa cadou.");
                return 1;
            }
         }
        else {
            SendClientMessage(playerid, -1, "Nu este nici o sarbatoare.");
            return 1;
        }
    }
    else {
        SendClientMessage(playerid, -1, "Nu esti conectat.");
        return 1;
    }
    return 1;
}

 
[Pasul 7] Apelul catre public-ul VerificaTimpul.
 


public VerificaTimpul() {
    for( new i = 0; i < MAX_PLAYERS; i++ ) {
        if(IsPlayerConnected(i)) {
            if(PlayerInfo[i][pGift]) {
                if(PlayerInfo[i][pNextGift] != 0) {
                    PlayerInfo[i][pNextGift]--;
                    SaveData(i);
                }
                else {
                    PlayerInfo[i][pGift] = 0;
                    PlayerInfo[i][pNextGift] = 0;
                    SaveData(i);
                    KillTimer(timer);
                    return 1;
                }
            }
        }
    }
    return 1;
 
}

 
[Pasul 8] Apelul catre public-ul SaveData.
 


public SaveData(playerid) {
    new query[128];
    format(query, sizeof(query), "UPDATE `accounts` SET `Gift` = '%d', `GiftTime` = '%d' WHERE `ID` = '%d'", PlayerInfo[playerid][pGift], PlayerInfo[playerid][pNextGift], PlayerInfo[playerid][pSQLID]);
    mysql_tquery(dbhandle, query, "", "");
    return 1;
 
}

 
[Pasul 9] La OnPlayerDisconnect vom adauga functia creata la pasul 8 + distrugerea timer-ului, astfel:
 

 
public OnPlayerDisconnect(playerid, reason)
{
    KillTimer(timer);
    SaveData(playerid);
    return 1;
}

 
Sper sa va fie de folos acest tutorial.
Scris de Shower
la data de 26/8/2016, 19:54
 
Cauta in: Tutoriale
Subiect: Anti SQL Injection
Raspunsuri: 7
Vizualizari: 1151

Anti SQL Injection

[size=12]Cum sa iti dai admin pe un server de SAMP / Cum sa adaugi o protectie de anti SQL Injection.[/size]
 
[size=12]Salutare, in cele ce urmeaza am sa va prezint cum sa creati o protectie de anti sql injection, si cum va puteti da administrator daca acel server nu are protectie anti sql injection, atentie: rog moderatorii sa nu mai stearga acest tutorial, este foarte folositor pentru cei newbie in limbajul pawn.[/size]
 
[size=12]Cum sa iti dai admin pe un server de SAMP[/size]
 
Sintaxa sugerata intr-un dialog de change name.
numenou', `Admin`=1000 where name="numevechi" #
numenou - reprezinta numele nou care vreti sa fie schimbat.
numevechi - reprezinta numele vechi cel cu care ati intrat pe server inainte de a va schimba numele.
 
[size=10]Cand ati schimbat numele intrati pe server cu noul nume si veti avea nivelul de administrator setat pe 1.000.[/size]
 
[size=10]Vulnerabilitate intalnita de catre mine pe: GameMode - saints, bigzone, vortex;[/size]
 
Cum sa adaugi o protectie de anti SQL Injection.
 
[size=12]Pasul 1: [/size]
[size=12]Creeam un static, mergem sus de tot in gamemode dupa ultimul [Trebuie sa fiti inscris si conectat pentru a vedea acest link][/size]
 
[size=12]si adaugam acest static:[/size]

static const antisqlinjection[][] =
{
    "'",
    "#",
    "`",
    "%s",
    "%d",
    "%f"
};

Pasul  2:
 
[size=12]Mergem la OnDialogResponse si adaugam aceasta functie:[/size]

for(new i; i < sizeof(antisqlinjection); i++)
{
    if(strfind(inputtext, antisqlinjection[i], true) != -1)
    {
        SCM(playerid, -1, "Nu sunt permise asemenea caractere.");
        return 1;
    }
}

Atentie: Aceasta functie trebuie adaugata imediat dupa linia: OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Scris de Shower
la data de 4/6/2016, 07:56
 
Cauta in: Tutoriale
Subiect: Tutorial Register/Login MYSQL R39
Raspunsuri: 3
Vizualizari: 238

Tutorial Register/Login MYSQL R39

Salutare, azi am sa va prezint cum sa faceti un tutorial register/login mysql R39.
Mai intai o sa va trebuiasca pluginul si includeul mysql care ip puteti gas[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
Mai intai o sa punem la inceputul GM-ului include-ul mysql.

 
[ltr][Trebuie sa fiti inscris si conectat pentru a vedea acest link] [/ltr]
 
Acum o sa definim datele de conectare
[ltr][Trebuie sa fiti inscris si conectat pentru a vedea acest link] mysql_host "localhost" // aici punem ip hostului. Daca folosim in PC GM lasam localhost
[Trebuie sa fiti inscris si conectat pentru a vedea acest link] mysql_db "bazadate"// aici punem numele bazei de date.
[Trebuie sa fiti inscris si conectat pentru a vedea acest link] mysql_user "root"// aici punem numele userului de la host. Daca folositi PC lasati root.
[Trebuie sa fiti inscris si conectat pentru a vedea acest link] mysql_pass ""//Aici puneti parola de la host(de la phpmyadmin al hostului). In caz de folositi PC lasati asa.[/ltr]

 
Vom crea 2 Enum-uri. Unul cu dialogurile de register/login si altul cu datele pe care le va avea playerul

[ltr]enum
{
    DIALOG_LOGIN, // dialogul de login
    DIALOG_REGISTER// dialogul de register
};

enum pInfo //numele enumului este pInfo. in el vom pune datele playerului gen Admin/Level/ Money/Experianta si altele.
{
    pParola,//cu pParola vom lua parola din baza de date a playerului
    pID// cu pID vom lua ID-ul din baza de date a playerului
};

new P_Data[MAX_PLAYERS][pInfo];// Aceasta variabila este array. cu ea vom verifica 2 lucruri. id playerului si datele lui gen P_Data[playerid][pID] == 1;

[/ltr]

 
Vom crea acum un new care ne va ajuta sa conectam datele de conectarea cu baza de date

[ltr]new handle; // handle(mâner) este cea de care ne vom folosi sa facem lagatura intre baza de date si server [/ltr]
Acum vom crea legatura intre baza de date si server.
 

[ltr]forward MySQLConnect();// se creaza un nou callback cu forward
public MySQLConnect()// se face callback-ul
{
    handle = mysql_connect(mysql_host, mysql_user, mysql_db, mysql_pass);// definim handle(manerul) ca fiind conectarea mysql la host, baza de date, parola si user-ul
    if(mysql_errno() != 0)// in caz ca aceasta va fi diferita de 0(0 inseamna ca e conectat, 1 inseamna ca nu e conectat , fiind un vector)
    {
        printf("Conexiunea la baza de date %s a esuat ---> Server Inchis ~~~", mysql_db);// va trimite un mesaj in consola
        SendRconCommand("exit");// se inchide serverul
    }
    else// altfel daca este 0(daca se face legatura)
    {
        printf("Conexiunea la baza de date '%s' cu user-ul '%s' a reusit!!!", mysql_db, mysql_user);// ne va da acest mesaj in consola
    }
    return 1;
}[/ltr]

 
Callback-ul MySQLConnect se va pune la OnGameModeInit pentru a fi finalizata conectarea la baza de date.

[ltr]public OnGameModeInit()
{
    MySQLConnect();
    return 1;
}[/ltr]

Se va crea un stock simplu cu care vom selecta numele playerului
 
[ltr]stock GetName(playerid)
{
new Name[MAX_PLAYER_NAME];

GetPlayerName(playerid, Name, sizeof(Name));
return Name;
}[/ltr]

 
Acum vom se va crea un nou callback , la care vom apela cand playerul se conecteaza. El va arata daca are cont sau nu.
 

[ltr]forward OnPlayerLogin(playerid);// se creaza callbac-ul
public OnPlayerLogin(playerid)//Se creaza publicul
{
    new rows, fields;// definim rows(randurile)si fields(domeniile)
    cache_get_data(rows, fields);//cache_get_data interogheaza date din baza de date. acele date sunt rows si fields
    if(rows)// atunci cand playerul se inregistreaza i se va crea niste randuri. Daca i se gasesc atunci cand se va conecta ii va da:
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logheaza-te!", "Te rog sa-ti introduci parola contuului mai jos!", "Logare", "Exit");// dialogul register
    }
    else// daca nu i se gasesc randuri, adica daca contul nu exista, atunci i se va da urmatorul dialog
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Inregistrare", "Trebuie sa iti creezi un cont ca sa joci pe server. nTasteaza mai jos o parola, pentru a te inregistra!", "Inregistreaza", "Exit");// dialogul register
    }
    return 1;
}
[/ltr]

 
Acum ca am creat dialogul care ne ajuta sa verificam daca playerul are cont sau nu , mergem la OnPlayerConnect si punem urmatoarele:
 

[ltr]public OnPlayerConnect(playerid)
{
    new query[100];// definim query(interogare)
    mysql_format(handle, query, sizeof(query), "SELECT * FROM conturi WHERE Nume = '%s'", GetName(playerid));// mysql format face interogarile/setarile/obtiunile/updateurile la baza de date
    //handle reprezinta conectarea la mysql, query si sizeof(queri) reprezinta interogarea
    //"SELECT * FROM conturi WHERE Nume = '%s'"- Selecteaza de la tabelul cu conturi, unde numele este %s(de exemplu eu am numele Widualk pe sa-mp. Mi se va extrage numele si
    mysql_tquery(handle, query, "OnPlayerLogin", "i", playerid);// se va interoga OnPlayerLogin. Adica mai pe scurt , cand se conecteaza se va verifica daca are cont sau nu acel player.
    return 1;
}[/ltr]

 
Acum ca am terminat cu callback-urile de la conectare, vom crea dialogurile.
 

[ltr]public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new query[128], ip[25];// se creaza interogarea si ip.
    switch(dialogid)// se va folosi switch pentru a selecta dialogul
    {
        case [Trebuie sa fiti inscris si conectat pentru a vedea acest link] daca se va selecta dialogul register
        {
            if(!response)
                    return Kick(playerid);// daca se va apasa pe butonul Exit ii va da kick
            if(response)// daca se apasa pe Butonul inregistrare se vor face urmatoarele verificari
            {
                if(!strlen(inputtext))// daca nu e scris nimic la parola
                        return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Introdu-ti o parola pentru a te inregistra pe server! n", "Inregistreaza", "Exit");// ii va da din nou dialogul register cu mesajul specific

                GetPlayerIp(playerid, ip, sizeof(ip));// definim ip-ul de mai sus
                mysql_format(handle, query, sizeof(query), "INSERT INTO conturi (Nume, Parola, IP) VALUES ('%s', '%e', '%s')", GetName(playerid), inputtext, ip);// se insereaza in tabelul cu conturi numele playerului, parola pe care a scris-o si ip pe care il are
                mysql_query(handle, query);// se va trimite setarile si se va interoga callback-ul OnRegistration
                SpawnPlayer(playerid); // ii da spawn
            }
            return 1;
        }
        case [Trebuie sa fiti inscris si conectat pentru a vedea acest link] daca se va selecta dialogul de login
        {
            if(!response) return Kick(playerid);// si se va apasa pe butonul exit ii va da kick
            if(response)//daca se apasa pe butonul LOGARE se va face urmatoarele verificari
            {
                if(!strlen(inputtext))// daca nu a scris nimic la parola
                        return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu login cu mesajul specific
                // daca se va trece peste aceasta verificare se vor face urmatoarele:
                mysql_format(handle, query, sizeof(query), "SELECT * FROM `conturi` WHERE `Nume`='%e' AND `Parola` = '%e'", GetName(playerid),inputtext);// va fi selectata parola de la tabelul cu conturi
mysql_tquery(handle, query, "OnLogin", "i", playerid);// se va face apel la baza si se va interoga CallBackUl OnLogin (Tquery = take query sau ia interogare in romana)
            }
            return 1;
        }
    }
    return 1;
}[/ltr]

 
Acum , ca am facut dialogurile , vom crea calback-urile care se interogheaza la dialogurile de mai sus.
Vom crea callback-ul pentrul dialogul de register.

 
Acum , vom crea callback-ul la care apeleaza dialogul de login
 

[ltr]forward OnLogin(playerid);// definim callback ul
public OnLogin(playerid)// facem publicul
{
    new rows, fields,temporar[200];// definim randurile si domeniile, iar temporar se va folosi la extragerea stringurilor
    cache_get_data(rows, fields);// facem interogarea lor
    if(rows)// daca playerul are randuri(adica daca are cont creat, odata cu contul se creeaza randurile)
    {
        //deci daca are randuri
        cache_get_field_content(0, "Parola",temporar), format(P_Data[playerid][pParola], 25, temporar);// i se vaextrage parola si i se verifica daca coincide cu numele. Se foloseste new-ul temporar pentru extragerea parolei, ea retinandu-se temporar(pana cand se deconecteaza jucatorul)
        P_Data[playerid][pID] = cache_get_field_content_int(0, "ID");// i se vaextrage ip-ul
        //un exemplu ar fi , daca are Admin , va fi ceva de genu P_Data[playerid][pAdmin] = cache_get_field_content_int(0,"Admin)"; i se va extrage din baza de date levelul de admin si i se va returna pe server, mai precis, cand se conecteaza are levelul de admin , care i-a fost setat de owner
        SpawnPlayer(playerid);// si se va da spawn
    }
    else// altfel , daca parola este gresita
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu mesajul specific.
    }
    return 1;
}[/ltr]

Iar la final punem la OnGameModeExit();
[ltr]public OnGameModeExit()
{
    mysql_close( handle ) ;// deconectam serverul de la baza de date, daca se inchide
    return 1;
}[/ltr]

Acum , o sa recapitulam.
Playerul are nevoie de ID, Nume, Parola si IP, deci 4 coloane in tabel.
Tabelul se numeste "conturi", deoarece interogarea se face acolo "mysql_format(handle, query, sizeof(query), "SELECT * FROM conturi"-conturi este tabelul unde vor aparea ID ,Nume, Parola, IP
Baza de date se numeste "bazadate" din: [Trebuie sa fiti inscris si conectat pentru a vedea acest link] mysql_db "bazadate"
 
O sa va arat acum cum se creaza tabelul.
Pasul 1. Definim baza de date cu numele "basedate":
Tag include pe FiveGame SA:MP GameMod, Tutoriale HcmJzne
Pasul 2: Se selecteaza noua baza:

Tag include pe FiveGame SA:MP GameMod, Tutoriale 3ryIXyW
Pasul 3: Se creaza tabelul cu cele 4 coloane:
[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
Pasul 4: Se definesc coloanele , cu fiecare setare
[Trebuie sa fiti inscris si conectat pentru a vedea acest link]
La tip    INT = intenger= numar de cifre.
             Varchar = string = sir de caractere(litere)
la Lungimea / setare se selecteaza cat spatiu se acorda, adica cate caractere incap maxim in acel tabel
 la id va fi maxim 9999999999(sun 10 cifre consecutive de "9", adica acel numar va fi maximul de playeri care pot avea cont)
 la nume, se va putea salva doar numele care contine doar 25 de caractere(adica daca numele depaseste 25 litere, doar primele 25 se vor salva)
la interclasare la Varchar , mereu sa puneti latin1_sweadich_ci, de ce, asta nu pot spune nici eu , dar , stiu ca asa trebuie
La ID tot timpul sa bifati casuta "A_I(auto Increment)" care va genera singur id-ul, altfel nu va merge tabelul conturi
 
Asa ar trebui sa va arata , atunci cand va inregistrati:
Tag include pe FiveGame SA:MP GameMod, Tutoriale NRYTl9R
 
[size=24]Atentie tutorial creat 100% de Widualk. Nerespectarea creditelor va duce la sanctiuni!
[/size]

Mergi direct la: