[Problema] No se guardan las casas. -
Komputilo - 30.12.2010
Resulta que tengo un GM que funciona mediante MySQL, al poner /crearcasa, se crea y funciona correctamente, pero se pierden cuando reinicio el servidor. En cambio, las HQ sн que se guardan.
Cuando pongo /crearcasa funciona todo perfectamente, pero si miro en la DB, estбn los valores a 0. Pero si relleno esos valores manualmente, la casa sн que funciona al reiniciar. Les pongo el cуdigo de /crearcasa, /crearhq, Loadproperty, Saveproperty, LoadHeadQuarters y SaveHeadQuarters. Tambiйn el tramo de cуdigo de la DB:
Код:
if(strcmp(cmd, "/crearcasa", true) == 0)
{
new sql[80], row[512], id;
if(InfoJugador[playerid][pAdmin] < 6)
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Insuficientes Permisos!");
return 1;
}
print("Conectando SQL");
samp_mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS);
samp_mysql_select_db(MYSQL_DB);
print("Query 1");
format(sql, 80, "INSERT INTO casas (Owner) VALUES ('El Estado')");
samp_mysql_query(sql);
print("Query 2");
format(sql, sizeof(sql), "SELECT COUNT(*) FROM casas");
samp_mysql_query(sql);
samp_mysql_store_result();
samp_mysql_fetch_row(row);
id = strval(row);
printf("Query Result: %d",id);
print("Seteando Datos");
HouseInfo[id][hId] = id;
HouseInfo[id][hLock] = 1;
HouseInfo[id][hValue] = 30000;
HouseInfo[id][hLevel] = 5;
HouseInfo[id][hDinero] = 0;
HouseInfo[id][hOwner] = 0;
print("Seteando Armas");
HouseInfo[id][hGun][0] = 0;
HouseInfo[id][hAmmo][0] = 0;
HouseInfo[id][hGun][1] = 0;
HouseInfo[id][hAmmo][1] = 0;
HouseInfo[id][hGun][2] = 0;
HouseInfo[id][hAmmo][2] = 0;
print("Seteando Droga");
HouseInfo[id][hDroga] = 0;
HouseInfo[id][hDroga2] = 0;
print("Seteando Owner");
format(HouseInfo[id][hOwner], 24, "El Estado");
new Float:X[MAX_PLAYERS], Float:Y[MAX_PLAYERS], Float:Z[MAX_PLAYERS];
GetPlayerPos(playerid, X[playerid],Y[playerid],Z[playerid]);
print("Seteando Coords");
HouseInfo[id][hEx] = X[playerid];
HouseInfo[id][hEy] = Y[playerid];
HouseInfo[id][hEz] = Z[playerid];
HouseInfo[id][hSx] = -794.9160;
HouseInfo[id][hSy] = 489.9226;
HouseInfo[id][hSz] = 1376.1953;
HouseInfo[id][hInterior] = 1;
print("Salvando Datos");
SaveProperty(idx);
print("Creando Pickup");
HouseInfo[id][hPickup] = CreatePickup(1273, 23,X[playerid],Y[playerid],Z[playerid]);
return 1;
}
//-----------------------------------HQ System--------------------------------------
if(strcmp(cmd, "/crearhq", true) == 0)
{
tmp = strtokex(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD1, "USO: /crearhq [ID FACCION]");
return 1;
}
new faccionid = strval(tmp);
new sql[80], row[512], id;
if(InfoJugador[playerid][pAdmin] < 6)
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Insuficientes Permisos!");
return 1;
}
samp_mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS);
samp_mysql_select_db(MYSQL_DB);
format(sql, 80, "INSERT INTO headquarters (Nombre) VALUES ('HQ')");
samp_mysql_query(sql);
format(sql, sizeof(sql), "SELECT COUNT(*) FROM headquarters");
samp_mysql_query(sql);
samp_mysql_store_result();
samp_mysql_fetch_row(row);
id = strval(row);
HeadQuarterInfo[id][hqFaccion] = faccionid;
HeadQuarterInfo[id][hqLocked] = 0;
HeadQuarterInfo[id][hqCajaFuerte] = 0;
format(HeadQuarterInfo[id][hqName], 128, "HQ Numero %d", id);
new Float:X[MAX_PLAYERS], Float:Y[MAX_PLAYERS], Float:Z[MAX_PLAYERS];
GetPlayerPos(playerid, X[playerid],Y[playerid],Z[playerid]);
HeadQuarterInfo[id][hqEPos_x] = X[playerid];
HeadQuarterInfo[id][hqEPos_y] = Y[playerid];
HeadQuarterInfo[id][hqEPos_z] = Z[playerid];
HeadQuarterInfo[id][hqSPos_x] = 2169.7097;
HeadQuarterInfo[id][hqSPos_y] = 1618.2808;
HeadQuarterInfo[id][hqSPos_z] = 999.9766;
HeadQuarterInfo[id][hqInterior] = 1;
SaveHeadQuarter(id);
HeadQuarterInfo[id][hqPickup] = CreatePickup(1273, 23,X[playerid],Y[playerid],Z[playerid]);
return 1;
}
Код:
LoadProperty()
{
samp_mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS);
samp_mysql_select_db(MYSQL_DB);
new sql[80], row[512];
format(sql, sizeof(sql), "SELECT COUNT(*) FROM casas");
samp_mysql_query(sql);
samp_mysql_store_result();
samp_mysql_fetch_row(row);
hcount = strval(row);
for (new idx=1; idx<=hcount; idx++)
{
format(sql, sizeof(sql), "SELECT * FROM casas WHERE id=%d LIMIT 1", idx);
samp_mysql_query(sql);
samp_mysql_store_result();
samp_mysql_fetch_row(row);
split(row, arrCoords, '|');
HouseInfo[idx][hId] = strval(arrCoords[0]);
HouseInfo[idx][hEx] = floatstr(arrCoords[1]);
HouseInfo[idx][hEy] = floatstr(arrCoords[2]);
HouseInfo[idx][hEz] = floatstr(arrCoords[3]);
HouseInfo[idx][hSx] = floatstr(arrCoords[4]);
HouseInfo[idx][hSy] = floatstr(arrCoords[5]);
HouseInfo[idx][hSz] = floatstr(arrCoords[6]);
HouseInfo[idx][hInterior] = strval(arrCoords[7]);
HouseInfo[idx][hOwned] = strval(arrCoords[8]);
format(HouseInfo[idx][hOwner],24,"%s", arrCoords[9]);
HouseInfo[idx][hLevel] = strval(arrCoords[10]);
HouseInfo[idx][hValue] = strval(arrCoords[11]);
HouseInfo[idx][hLock] = strval(arrCoords[12]);
HouseInfo[idx][hGun][0] = strval(arrCoords[13]);
HouseInfo[idx][hAmmo][0] = strval(arrCoords[14]);
HouseInfo[idx][hGun][1] = strval(arrCoords[15]);
HouseInfo[idx][hAmmo][1] = strval(arrCoords[16]);
HouseInfo[idx][hGun][2] = strval(arrCoords[17]);
HouseInfo[idx][hAmmo][2] = strval(arrCoords[18]);
HouseInfo[idx][hDroga] = strval(arrCoords[19]);
HouseInfo[idx][hDroga2] = strval(arrCoords[20]);
HouseInfo[idx][hDinero] = strval(arrCoords[21]);
}
return 1;
}
SaveProperty(idx)
{
new sql[1024];
format(sql, 1024, "UPDATE casas SET EX=%f,EY=%f,EZ=%f,SX=%f,SY=%f,SZ=%f,Interior=%d,Owned=%d,Owner='%s',Nivel= %d,Costo=%d,Locked=%d WHERE id=%d",
HouseInfo[idx][hEx],
HouseInfo[idx][hEy],
HouseInfo[idx][hEz],
HouseInfo[idx][hSx],
HouseInfo[idx][hSy],
HouseInfo[idx][hSz],
HouseInfo[idx][hInterior],
HouseInfo[idx][hOwned],
HouseInfo[idx][hOwner],
HouseInfo[idx][hLevel],
HouseInfo[idx][hValue],
HouseInfo[idx][hLock],
HouseInfo[idx][hId]);
samp_mysql_query(sql);
return 1;
}
Код:
LoadHeadQuarter()
{
samp_mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS);
samp_mysql_select_db(MYSQL_DB);
new sql[80], row[512];
format(sql, sizeof(sql), "SELECT COUNT(*) FROM headquarters");
samp_mysql_query(sql);
samp_mysql_store_result();
samp_mysql_fetch_row(row);
hqcount = strval(row);
for (new idx=0; idx<hqcount; idx++)
{
format(sql, sizeof(sql), "SELECT * FROM headquarters WHERE id=%d LIMIT 1", idx+1);
samp_mysql_query(sql);
samp_mysql_store_result();
samp_mysql_fetch_row(row);
split(row, arrCoords, '|');
format(HeadQuarterInfo[idx][hqName], 128, "%s", arrCoords[1]);
HeadQuarterInfo[idx][hqFaccion] = strval(arrCoords[2]);
HeadQuarterInfo[idx][hqEPos_x] = floatstr(arrCoords[3]);
HeadQuarterInfo[idx][hqEPos_y] = floatstr(arrCoords[4]);
HeadQuarterInfo[idx][hqEPos_z] = floatstr(arrCoords[5]);
HeadQuarterInfo[idx][hqSPos_x] = floatstr(arrCoords[6]);
HeadQuarterInfo[idx][hqSPos_y] = floatstr(arrCoords[7]);
HeadQuarterInfo[idx][hqSPos_z] = floatstr(arrCoords[8]);
HeadQuarterInfo[idx][hqInterior] = strval(arrCoords[9]);
HeadQuarterInfo[idx][hqLocked] = strval(arrCoords[10]);
HeadQuarterInfo[idx][hqCajaFuerte] = strval(arrCoords[11]);
printf("HQ de la Facciуn: %d | X: %f Y:%f Z:%f | Interior: %d | Cerradura: %d | CF: $%d",
HeadQuarterInfo[idx][hqFaccion],
HeadQuarterInfo[idx][hqEPos_x],
HeadQuarterInfo[idx][hqEPos_y],
HeadQuarterInfo[idx][hqEPos_z],
HeadQuarterInfo[idx][hqInterior],
HeadQuarterInfo[idx][hqLocked],
HeadQuarterInfo[idx][hqCajaFuerte]);
}
printf("HQs Totales: %d",hqcount);
return 1;
}
SaveHeadQuarter(i)
{
new sql[1024];
format(sql, sizeof(sql), "UPDATE headquarters SET Nombre='%s',Faccion=%d,EPos_X=%f,EPos_Y=%f,EPos_Z=%f,SPos_X=%f,SPos_Y=%f,SPos_Z=%f,Interior=%d,Locked=%d,CajaFuerte=%d WHERE id=%d LIMIT 1",
HeadQuarterInfo[i][hqName],
HeadQuarterInfo[i][hqFaccion],
HeadQuarterInfo[i][hqEPos_x],
HeadQuarterInfo[i][hqEPos_y],
HeadQuarterInfo[i][hqEPos_z],
HeadQuarterInfo[i][hqSPos_x],
HeadQuarterInfo[i][hqSPos_y],
HeadQuarterInfo[i][hqSPos_z],
HeadQuarterInfo[i][hqInterior],
HeadQuarterInfo[i][hqLocked],
HeadQuarterInfo[i][hqCajaFuerte],
i);
samp_mysql_query(sql);
return 1;
}
Код:
Estructura de tabla para la tabla `casas`
--
CREATE TABLE IF NOT EXISTS `casas` (
`id` int(11) NOT NULL auto_increment,
`EX` float NOT NULL,
`EY` float NOT NULL,
`EZ` float NOT NULL,
`SX` float NOT NULL,
`SY` float NOT NULL,
`SZ` float NOT NULL,
`Interior` int(11) NOT NULL,
`Owned` int(11) NOT NULL,
`Owner` varchar(255) NOT NULL,
`Nivel` int(11) NOT NULL,
`Costo` int(11) NOT NULL,
`Locked` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=107 ;
--
-- Volcar la base de datos para la tabla `casas`
--
INSERT INTO `casas` (`id`, `EX`, `EY`, `EZ`, `SX`, `SY`, `SZ`, `Interior`, `Owned`, `Owner`, `Nivel`, `Costo`, `Locked`) VALUES
(1, -43.0591, -1846.39, 3.79557, 140.207, 1366.13, 1083.86, 5, 1, 'El Estado', 15, 750000, 1),
(2, 1298.74, -799.712, 84.1406, 140.207, 1366.13, 1083.86, 5, 0, 'El Estado', 15, 950000, 1);
-- --------------------------------------------------------
--
--
Код:
Estructura de tabla para la tabla `headquarters`
--
CREATE TABLE IF NOT EXISTS `headquarters` (
`id` int(11) NOT NULL auto_increment,
`Nombre` varchar(255) NOT NULL,
`Faccion` int(11) NOT NULL,
`EPos_X` float NOT NULL,
`EPos_Y` float NOT NULL,
`EPos_Z` float NOT NULL,
`SPos_X` float NOT NULL,
`SPos_Y` float NOT NULL,
`SPos_Z` float NOT NULL,
`Interior` int(11) NOT NULL,
`Locked` int(11) NOT NULL,
`CajaFuerte` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Volcar la base de datos para la tabla `headquarters`
--
INSERT INTO `headquarters` (`id`, `Nombre`, `Faccion`, `EPos_X`, `EPos_Y`, `EPos_Z`, `SPos_X`, `SPos_Y`, `SPos_Z`, `Interior`, `Locked`, `CajaFuerte`) VALUES
(1, 'HQ Numero 1', 12, 1123.64, -2036.82, 69.8866, 2324.29, -1149.36, 1050.71, 12, 0, 0),
(2, 'HQ Numero 2', 23, 979.96, -676.8, 121.976, 225.995, 1021.44, 1084.02, 7, 0, 0);
-- --------------------------------------------------------
--
--