Passe salvo e carregado de Msql para INI. - Rcon2014 - 02/01/2023
Olá, gostaria de saber se vocês podem me ajudar a passar esse save e load do Msql para o INI, como meu GM é ini, tentei fazer sozinho, mas não consigo. Por favor, alguém pode fazer isso? Será apreciado..
É um sistema para capturar x pontos no mapa, é um sistema para role-playing game. Sistema somente para gangues. Deixo o código completo para melhor entendimento
Código: #define MAX_GANGSPOINTS 5
//enums
enum gpInfo
{
gName[15],
gFaction[24],
gTimePoint,
Float:gPosX,
Float:gPosY,
Float:gPosZ,
Text3D:gTextLabel,
gPickup,
gGangZone,
gAvailable,
Bar:gPointBarID,
gCapturePoint,
Float:gCaptureX,
Float:gCaptureY,
Float:gCaptureZ,
gCaptureTime
};
new GangPoint[MAX_GANGSPOINTS][gpInfo];
//OnplayerSpawn
if(GetPlayerFactionType(playerid) == 2 || PlayerInfo[playerid][pAdmin] > 0)
{
for(new i = 0; i < MAX_GANGSPOINTS; i++)
{
GangZoneShowForPlayer(playerid, GangPoint[i][gGangZone], 0x274BB088);
if(GangPoint[i][gAvailable] == 1)
{
GangZoneFlashForPlayer(playerid, GangPoint[i][gGangZone], COLOR_FLASH);
}
}
}
//OngamemodeInit
for(new g = 0; g < MAX_GANGSPOINTS; g++)
{
GangPoint[g][gGangZone] = GangZoneCreate(ZoneData[g][0], ZoneData[g][1], ZoneData[g][2], ZoneData[g][3]);
}
//Eject x hora
if(ServerPoints == 60) { GangsPointsCheck(); TillTimer(); }
//functions
function CreateGlobalGangPointIcon()
{
for(new i = 0; i < MAX_GANGSPOINTS; i++)
{
UpdateGangPointIcon(i)
}
}
function UpdateGangPointIcon(i)
{
new string[130];
if(GangPoint[i][gTimePoint] == 0)
{
DestroyDynamic3DTextLabel(GangPoint[i][gTextLabel]);
DestroyDynamicPickup(GangPoint[i][gPickup]);
format(string, sizeof string, "{9EC73D}Punto de Pandilla [ {FFFFFF}%d{9EC73D} ]\nNombre: %s", i+1, GangPoint[i][gName]);
GangPoint[i][gTextLabel] = CreateDynamic3DTextLabel(string,-1,GangPoint[i][gPosX],GangPoint[i][gPosY],GangPoint[i][gPosZ],6.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,0,0);
GangPoint[i][gPickup] = CreateDynamicPickup(1313, 1, GangPoint[i][gPosX], GangPoint[i][gPosY], GangPoint[i][gPosZ]);
}
else
{
DestroyDynamic3DTextLabel(GangPoint[i][gTextLabel]);
DestroyDynamicPickup(GangPoint[i][gPickup]);
format(string, sizeof string, "{9EC73D}Punto de Pandilla [ {FFFFFF}%d{9EC73D} ]\nNombre: %s\nFaccion: %s\nHoras: %d", i+1, GangPoint[i][gName], GangPoint[i][gFaction], GangPoint[i][gTimePoint]);
GangPoint[i][gTextLabel] = CreateDynamic3DTextLabel(string,-1,GangPoint[i][gPosX],GangPoint[i][gPosY],GangPoint[i][gPosZ],6.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,0,0);
GangPoint[i][gPickup] = CreateDynamicPickup(1254, 1, GangPoint[i][gPosX], GangPoint[i][gPosY], GangPoint[i][gPosZ]);
}
return 1;
}
//delete factions
if(FactionInfo[f][fType] == 2)
{
for(new i = 0; i < MAX_GANGSPOINTS; i++)
{
if(strcmp(FactionInfo[f][fName], GangPoint[i][gFaction], true) == 0){
GangPoint[i][gTimePoint] = 0;
format(GangPoint[i][gFaction], 24, "Ninguna");
UpdateGangPointIcon(i);
}
}
}
//functions
function GangsPointsCheck()
{
new string[130], fd = -1;
ServerPoints = 0;
for(new i = 0; i < MAX_GANGSPOINTS; i++)
{
if(GangPoint[i][gTimePoint] == 0 && GangPoint[i][gAvailable] == 1)
{
if(strcmp(GangPoint[i][gFaction], "Ninguna", true) != 0)
{
GangPoint[i][gTimePoint] = TIME_VULNERABLE+1;
format(string, sizeof string, "{DC092F}ATENCION: {FFFFFF}El punto {BDE92D}%s {FFFFFF}no ha sido capturado y seguirá perteneciendo a la misma pandilla.", GangPoint[i][gName]);
SendPointMessage(-1, string);
GangZoneStopFlashForAll(GangPoint[i][gGangZone]);
}
GangPoint[i][gAvailable] = 0;
}
if(GangPoint[i][gTimePoint] > 0)
{
fd = GetFactionID(GangPoint[i][gFaction]);
if(fd != -1) {
FactionInfo[fd][fFounds] += 75;
UpdateFactionFounds(fd);
}
GangPoint[i][gTimePoint] --;
UpdateGangPoint(i);
}
if(GangPoint[i][gTimePoint] == 0 && GangPoint[i][gAvailable] == 0)
{
format(string, sizeof string, "{DC092F}ATENCION: {FFFFFF}El punto {BDE92D}%s {FFFFFF}está disponible para la captura.", GangPoint[i][gName]);
SendPointMessage(-1, string);
GangPoint[i][gAvailable] = 1;
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(GetPlayerFactionType(p) == 2 || PlayerInfo[p][pAdmin] > 0)
{
GangZoneFlashForPlayer(p, GangPoint[i][gGangZone], COLOR_FLASH);
}
}
}
UpdateGangPointIcon(i);
}
return 1;
}
function ProgressTimer(playerid, point)
{
if(playerid != INVALID_PLAYER_ID && GangPoint[point][gCapturePoint] == 1)
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
if(GangPoint[point][gCaptureX] == X && GangPoint[point][gCaptureY] == Y && GangPoint[point][gCaptureZ] == Z)
{
GangPoint[point][gCaptureTime]--;
SetProgressBarValue(GangPoint[point][gPointBarID], GetProgressBarValue(GangPoint[point][gPointBarID])-1.0);
UpdateProgressBar(GangPoint[point][gPointBarID], playerid);
if(GangPoint[point][gCaptureTime] >= 1) SetTimerEx("ProgressTimer", 1000, false, "id", playerid, point);
else if(GangPoint[point][gCaptureTime] <= 0)
{
CapturePointEnd(playerid, point);
GangPoint[point][gCaptureTime] = 0;
DestroyProgressBar(GangPoint[point][gPointBarID]);
}
}
else
{
Message(playerid, COLOR_GRAD2, "No pudiste capturar el punto, te moviste o fuiste asesinado.");
DestroyProgressBar(GangPoint[point][gPointBarID]);
GangPoint[point][gCapturePoint] = 0;
GangPoint[point][gCaptureTime] = 0;
}
}
else
{
DestroyProgressBar(GangPoint[point][gPointBarID]);
GangPoint[point][gCapturePoint] = 0;
GangPoint[point][gCaptureTime] = 0;
}
return 1;
}
function CapturePointEnd(playerid, point)
{
if(playerid != INVALID_PLAYER_ID && GangPoint[point][gCapturePoint] == 1)
{
new string[160];
GangPoint[point][gAvailable] = 0;
GangPoint[point][gCapturePoint] = 0;
GangPoint[point][gTimePoint] = TIME_VULNERABLE;
format(GangPoint[point][gFaction], 24, PlayerStatInfo[playerid][3]);
format(string, sizeof string, "{DC092F}ATENCION: {FFFFFF}El punto {BDE92D}%s {FFFFFF}ha sido tomado por la pandilla %s (%s).", GangPoint[point][gName], GangPoint[point][gFaction], PlayerNameFixed[playerid]);
SendPointMessage(-1, string);
UpdateGangPoint(point);
UpdateGangPointIcon(point);
GangZoneStopFlashForAll(GangPoint[point][gGangZone]);
}
return 1;
}
//load points
LoadPoints()
{
mysql_function_query(g_Handle, "SELECT * FROM `GangsPoints`", true, "GetPointsData", "");
return 1;
}
//
function GetPointsData()
{
new rows, fields;
cache_get_data(rows, fields, g_Handle);
if(rows){
for(new p = 0; p < MAX_GANGSPOINTS; p++)
{
cache_get_field_content(p, "Name", GangPoint[p][gName], g_Handle, 15);
cache_get_field_content(p, "Faction", GangPoint[p][gFaction], g_Handle, 24);
GangPoint[p][gTimePoint] = cache_get_field_content_int(p, "TimePoint", g_Handle);
GangPoint[p][gPosX] = cache_get_field_content_float(p, "PosX", g_Handle);
GangPoint[p][gPosY] = cache_get_field_content_float(p, "PosY", g_Handle);
GangPoint[p][gPosZ] = cache_get_field_content_float(p, "PosZ", g_Handle);
}
CreateGlobalGangPointIcon();
print("MySQL: Datos cargados desde la tabla GangsPoints.");
}
else {
print("MySQL: Ha ocurrido un error al obtener datos de la tabla GangsPoints.");
SendRconCommand("exit");
}
return 1;
}
UpdateGangPoint(p)
{
new Query[110];
format(Query, sizeof Query, "UPDATE `GangsPoints` SET Faction = '%s', TimePoint = %d WHERE `ID_Point` = '%d'", GangPoint[p][gFaction], GangPoint[p][gTimePoint], p);
mysql_query(Query, THREAD_UPDATEPOINTS, 1, g_Handle);
return 1;
}
RE: Passe salvo e carregado de Msql para INI. - strelo - 02/01/2023
Para converter o seu código de MySQL para INI, o primeiro passo seria mudar a forma de armazenar os dados. No MySQL, você armazena as informações dos pontos de gangues em uma matriz chamada GangPoint, que possui um conjunto de informações (gName, gFaction, etc).
Em vez disso, você pode criar um arquivo INI com seções para cada ponto de gangue e armazenar cada informação em um par chave-valor. Por exemplo:
Código PHP: [Point1] name = Nome do Ponto 1 faction = Facção do Ponto 1 time = Tempo do Ponto 1 pos_x = Posição X do Ponto 1 pos_y = Posição Y do Ponto 1 pos_z = Posição Z do Ponto 1
Código PHP: [Point2] name = Nome do Ponto 2 faction = Facção do Ponto 2 time = Tempo do Ponto 2 pos_x = Posição X do Ponto 2 pos_y = Posição Y do Ponto 2 pos_z = Posição Z do Ponto 2
E assim por diante.
Em seguida, você precisará adaptar o seu código para ler esses dados do arquivo INI em vez de consultar o MySQL. Para isso, você pode usar as funções IniRead e IniWrite da biblioteca YSI (YSI é uma biblioteca de scripts para SA:MP).
Por exemplo:
Código PHP: // No lugar de carregar os dados do MySQL, você lê os dados do arquivo INI for (new i = 0; i < MAX_GANGSPOINTS; i++) { GangPoint[i][gName] = IniRead(iniFile, "Point"+i, "name"); GangPoint[i][gFaction] = IniRead(iniFile, "Point"+i, "faction"); GangPoint[i][gTimePoint] = IniRead(iniFile, "Point"+i, "time"); GangPoint[i][gPosX] = IniRead(iniFile, "Point"+i, "pos_x"); GangPoint[i][gPosY] = IniRead(iniFile, "Point"+i, "pos_y"); GangPoint[i][gPosZ] = IniRead(iniFile, "Point"+i, "pos_z"); }
// No lugar de atualizar os dados no MySQL, você atualiza os dados no arquivo INI IniWrite(iniFile, "Point"+i, "name", GangPoint[i][gName]); IniWrite(iniFile, "Point"+i, "faction", GangPoint[i][gFaction]); IniWrite(iniFile, "Point"+i, "time", GangPoint[i][gTimePoint]); IniWrite(iniFile, "Point"+i, "pos_x", GangPoint[i][gPosX]); IniWrite(iniFile, "Point"+i, "pos_y", GangPoint[i][gPosY]); IniWrite(iniFile, "Point"+i, "pos_z", GangPoint[i][gPosZ]);
Não se esqueça de adicionar a biblioteca YSI ao seu script e de incluir o arquivo INI em seu projeto
|