Cum sa creezi un sistem de crate-uri pe MySQL.
Inainte, eu am folosit ZCMD si am definit 'COLOR_CRATES', cat si 'SCM'
#include <zcmd> // pentru a scrie comenzile mai usor
#define COLOR_CRATES 0xCodCuloare // culoare
#define SCM SendClientMessage // pentru a-mi fi mai usor, sa nu mai stau sa scriu tot1. Definiti 'pCratePointsx', pentru salvarea in baza de date.
#define pCratePointsx2. Mergeti la 'enum pInfo' si definiti 'pCratePoints', pentru joc.
enum pInfo {
pCratePoints,
}3. Intram in baza de date, ne ducem la users (sau accounts, cum aveti dvs.), la "Structura", apoi va duceti jos de tot si o sa va apara o optiune "Adauga coloane". Veti adauga una, apoi apasati pe "Executa". La "Nume", veti pune "CratePoints", iar apoi salvati.
4. Apoi, definim si in baza de date pentru a se realiza conexiunea si sa se faca update-urile necesare la CratePoints-uri: Mergem in GM, la public Update si scriem linia (depinde cum aveti voi in gm, eu am astfel):
case pCratePointsx: format(var, sizeof(var), "UPDATE `users` SET `CratePoints`='%d' WHERE `ID`='%d'",PlayerInfo[playerid][pCratePoints], PlayerInfo[playerid][pSQLID]);5. Mergem la Payday si, adaugam liniile:
if(PlayerInfo[i][pCratePoints] < 3) PlayerInfo[i][pCratePoints] += 1, Update(i, pCratePointsx); // verfica daca jucatorul are 3 CP, daca nu, ii da una
format(string, sizeof(string), "Crate Points: %d (+1 CratePoint)", PlayerInfo[i][pCratePoints]); // mesajul ca a primit 1 CP
SCM(i, COLOR_YELLOW, string); // trimite mesajul6. Vom creea acum comanda prin care se deschide o cutie:
CMD:opencrate(playerid, params[]) { // comanda ce se executa in joc, /opencrate
if(PlayerInfo[playerid][pCratePoints] < 3) return SendClientMessage(playerid, -1, "Nu ai suficiente Crate Points!"); // daca nu ai 3 puncte, nu poti deschide
PlayerInfo[playerid][pCratePoints] -= 3; // ii ia jucatorului 3 puncte
Update(playerid, pCratePointsx); // actualizeaza punctele jucatorului in baza de date
new rand = random(50), string[64]; // pentru ca un premiu sa pice aleatoriu
switch(rand) { // sa pice intre aceste cazuri
case 0..15:
{
new amount = 10000 + random(5000); // banii, 10k + $ aleatorii pana in 5000
format(string, sizeof(string), "Ai primit $%d!", amount, FormatNumber(amount)); // mesajul cu cat a primit
SCM(playerid, COLOR_CRATES, string); // trimite mesajul
GivePlayerCash(playerid, amount); // da banii
}
case 16..20:
{
PlayerInfo[playerid][pLevel] ++; // un level up
Update(playerid, pLevelx); // actualizeaza nivelul in baza de date
format(string, sizeof(string), "Ai primit un Level Up!", PlayerInfo[playerid][pLevel]); // mesaj
SendClientMessage(playerid, COLOR_CRATES, string); // trimite mesajul
}
case 21..30:
{
PlayerInfo[playerid][pLevel] +=2; // 2x level up
Update(playerid, pLevelx); // actualizeaza nivelul
format(string, sizeof(string), "Ai primit un 2x Level Up!", PlayerInfo[playerid][pLevel]); // mesajul
SendClientMessage(playerid, COLOR_CRATES, string); // trimite mesajul
}
case 31..40:
{
new amount = 10 + random(5); // 10 puncte + puncte premium random pana in 5
PlayerInfo[playerid][pPremiumPoints] ++; // ofera pp-urile
Update(playerid, pPremiumPointsx); // actualizeaza pp-urile in baza de date
format(string, sizeof(string), "Ai primit %d Puncte Premium", amount, FormatNumber(amount)); // mesajul
SCM(playerid, COLOR_CRATES, string); // trimite mesajul
}
case 41..50:
{
new amount = 20000 + random(5000); // la fel ca cel cu banii de mai sus
format(string, sizeof(string), "Ai primit $%d!", amount, FormatNumber(amount));
SCM(playerid, COLOR_CRATES, string);
GivePlayerCash(playerid, amount);
}
}
return 1;
}7. Optional, dar recomandat, crearea comenzii '/givecratepoints', prin care puteti da Crate Points:
CMD:givecratepoints(playerid, params[])
{
if(IsPlayerConnected(playerid))
{
if (PlayerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, COLOR_LGREEN, "Nu ai acces la aceasta comanda!");
{
new money,id,string[256],sendername[25],giveplayer[25];
if(sscanf(params, "ui",id,money)) return SCM(playerid,COLOR_GREY, "Sintaxa: {FFFFFF}/givecratepoints <playerid/name> <CratePoints Points>");
new year, month,day;
getdate(year, month, day);
if(IsPlayerConnected(id))
{
PlayerInfo[id][pCratePoints] += money;
GetPlayerName(id, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, 256, "AdmCmd: Admin %s i-a trimis %d Crate Points-uri lui %s.", sendername,money,giveplayer);
SendAdminMessage(COLOR_LOGS,string,5);
Update(id, pCratePointsx);
}
else return SendClientMessage(playerid, COLOR_GREY, "Acel player nu este conectat.");
}
}
return 1;
}Sper ca v-am ajutat. Nu sunt mare scripter deci nu va asteptati la ceva maret de la mine. Nu mai ofer suport pentru ca nu ma mai ocup de scripting si am uitat cam tot sistemul



