Cómo cargar actores con posición en JSON en SA-MP (Pawn + MySQLR41-4)

n3uk

Nuevo miembro
Mensajes
2
Puntuación de reacción
0
#include <json>


#define MAX_ACTORES 128

enum actorinfo_
{
Float:_X_,
Float:_Y_,
Float:_Z_,
Float:_A_,
VW,
INT,
SKIN,
NOMBRE[24],
ID,
ROBADO,
bool:ROBAR,
STATUS,
Text3D:LABEL,
bool:DEAD,
bool:STEAL,
ROBADOPOR,
TIMER
};
new ACTOR[MAX_ACTORS][actorinfo_];
new Iterator: Actores<MAX_ACTORS>;

new ACTOR_COUNT = 0;



CargarActores()
{
mysql_tquery(conexion, "SELECT * FROM actores", "actors_loading");
}

callback:actors_loading()
{
new rows = cache_num_rows();
if (rows == 0)
{
printf("» Ultra INF: No se encontraron actores en la base de datos.");
return 1;
}
new jsonData[1024];
new labels[256],id2 = -1;
for (new i = 0; i < rows && i < MAX_ACTORS; i++)
{
if (cache_get_value_name(i, "DATA", jsonData, sizeof(jsonData)))
{
new Node:root;
if (JSON_Parse(jsonData, root) == 0) // 0 = éxito
{
new Float:x, Float:y, Float:z, Float:a;
if (JSON_GetFloat(root, "X", x) == 0 && JSON_GetFloat(root, "Y", y) == 0 &&JSON_GetFloat(root, "Z", z) == 0 && JSON_GetFloat(root, "A", a) == 0)
{
ACTOR[_X_] = x;
ACTOR[_Y_] = y;
ACTOR[_Z_] = z;
ACTOR[_A_] = a;
// printf("Verificando actor %d: X=%.4f, Y=%.4f, Z=%.4f, A=%.4f", i, ACTOR[_X_], ACTOR[_Y_], ACTOR[_Z_], ACTOR[_A_]);
}
JSON_Cleanup(root);
}
}

id2 = Iter_Free(Actores);
cache_get_value_int(i, "MUNDO",ACTOR[VW]);
cache_get_value_int(i, "INTERIOR",ACTOR[INT]);
cache_get_value_int(i, "SKIN",ACTOR[SKIN]);
cache_get_value_name(i, "NOMBRE", ACTOR[NOMBRE]);
cache_get_value_name(i, "ID", ACTOR[ID]);
format(labels,sizeof(labels),"{FFFFFF}%s {EF6256}[%d]",ACTOR[NOMBRE],i);
ACTOR[LABEL] = CreateDynamic3DTextLabel(labels, -1, ACTOR[_X_] , ACTOR[_Y_] , ACTOR[_Z_] + 1, 10.0, .testlos = 1, .interiorid = ACTOR[INT], .worldid = ACTOR[VW]);
ACTOR[ID] = CreateActor(ACTOR[SKIN],ACTOR[_X_] , ACTOR[_Y_] , ACTOR[_Z_] , ACTOR[_A_]);
SetActorInvulnerable(ACTOR[ID], false);
SetActorHealth(ACTOR[ID],100);
SetActorVirtualWorld(ACTOR[ID], ACTOR[VW]);
ACTOR[ROBADOPOR]=-1;
ACTOR[ROBADO]= 0;
ACTOR[ROBAR] = true;
ACTOR[STEAL]=false;
ACTOR[STATUS]=0;
ACTOR[ROBADOPOR] = -1;
ACTOR[DEAD]=false;
Iter_Add(Actores, id2);
}
ACTOR_COUNT = rows < MAX_ACTORS ? rows : MAX_ACTORS;
printf("» Ultra INF: %d actores cargados y datos leídos.", ACTOR_COUNT);
return 1;
}


db tabla:


CREATE TABLE IF NOT EXISTS `actores` (
`ID` int(6) NOT NULL,
`MUNDO` int(8) NOT NULL DEFAULT 0,
`NOMBRE` varchar(32) NOT NULL DEFAULT 'Pepe',
`SKIN` int(8) NOT NULL DEFAULT 1,
`INTERIOR` int(10) NOT NULL DEFAULT 0,
`DATA` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`DATA`))
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
INSERT INTO `actores` (`ID`, `MUNDO`, `NOMBRE`, `SKIN`, `INTERIOR`, `DATA`) VALUES
(1, 1020, 'Edgardo_Jose', 3, 18, '{"X": -28.3112, "Y": -91.6442, "Z": 1003.55, "A": 2.06545}');

github JSON SAMP
 
Arriba