Код:
function AddServerHouse(id, Float:EntX, Float:EntY, Float:EntZ, Interior, Float:ExitX, Float:ExitY,Float:ExitZ, Price) {
if(id >= TOTAL_HOUSES) return 0;
format(globalquery, sizeof(globalquery), "SELECT * FROM "DB_TABLE_NAME" WHERE HouseID = %d", id);
mysql_query(globalquery,-1,-1,sqlconnection);
mysql_store_result(sqlconnection);
if(mysql_num_rows(sqlconnection) > 0) return 0;
format(globalquery, sizeof(globalquery), "INSERT INTO "DB_TABLE_NAME" (HouseID, X, Y, Z, Interior, ExitX, ExitY, ExitZ, Price, Owner) VALUES(%d,'%f','%f','%f',%d,'%f','%f','%f', %d,'Empty House')",
id, EntX, EntY, EntZ, Interior, ExitX, ExitY, ExitZ, Price);
mysql_query(globalquery, -1,-1, sqlconnection);
printf("House id: %d added to the DB.", id);
mysql_free_result();
return 1;
}
function SaveHouse(houseid) {
format(globalquery, sizeof(globalquery), "UPDATE "DB_TABLE_NAME" SET Owner = '%s', Locked = %d, Price = %d",
HouseData[houseid][Owner], HouseData[houseid][Locked], HouseData[houseid][hPrice]);
mysql_query(globalquery, -1, -1,sqlconnection);
}
function LoadServerHouses() {
mysql_query("SELECT * FROM "DB_TABLE_NAME"", 1, -1, sqlconnection);
}
public OnFilterScriptInit() {
sqlconnection = mysql_connect(DB_HOST, DB_USER, DB_NAME, DB_PASSWORD);
mysql_debug(1);
AddServerHouse(1, 1984.19,-1995.43,16.3322, 9, 315.856170,1024.496459,1949.797363, 9000);
LoadServerHouses();
}
public OnQueryFinish( query[], resultid, extraid, connectionHandle ) {
if(resultid == 1) {
mysql_store_result(sqlconnection);
new resultline[128], data[11][128];
while(mysql_fetch_row_format(resultline,"|"))
{
if(mysql_num_rows(sqlconnection) == 0) continue;
new hid = strval(data[0]);
split(resultline, data, '|');
printf("Loading House id %d", hid);
HouseData[hid][EntrancePos][0] = floatstr(data[1]);
HouseData[hid][EntrancePos][1] = floatstr(data[2]);
HouseData[hid][EntrancePos][2] = floatstr(data[3]);
HouseData[hid][hInterior] = strval(data[4]);
HouseData[hid][ExitPos][0] = floatstr(data[5]);
HouseData[hid][ExitPos][1] = floatstr(data[6]);
HouseData[hid][ExitPos][2] = floatstr(data[7]);
HouseData[hid][hPrice] = strval(data[8]);
format(HouseData[hid][Owner], MAX_PLAYER_NAME, data[9]);
HouseData[hid][Locked] = strval(data[10]);
HouseData[hid][HouseStructure][0] = CreatePickup(1273,1,HouseData[hid][EntrancePos][0], HouseData[hid][EntrancePos][1], HouseData[hid][EntrancePos][2],-1);
// HouseData[hid][HouseStructure2] = Create3DTextLabel("House",0x008080FF,HouseData[hid][EntrancePos][0], HouseData[hid][EntrancePos][1], HouseData[hid][EntrancePos][2]+1,40.0,-1);
}
}
}
public OnPlayerCommandText(playerid, cmdtext[]) {
new cmd[128], idx;
cmd = strtok(cmdtext, idx);
if(!strcmp(cmdtext, "/enter", true)) {
new pos = IsPlayerInRangeOfHouse(playerid);
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
if(HouseData[pos][Locked] == TRUE && strcmp(HouseData[pos][Owner], name, true)) return GameTextForPlayer(playerid, "~g~LOCKED", 3000, 5);
SetPlayerPos(playerid, HouseData[pos][ExitPos][0], HouseData[pos][ExitPos][1], HouseData[pos][ExitPos][2]);
SetPlayerInterior(playerid, HouseData[pos][hInterior]);
SetPlayerVirtualWorld(playerid, pos);
return 1;
}
if(!strcmp(cmdtext, "/sellhouse", true)) {
new pos = IsPlayerInRangeOfHouse(playerid);
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
if(!strcmp(HouseData[pos][Owner], name, true)) {
GameTextForPlayer(playerid, "~g~~>~House Sold.~<~", 3000, 5);
GivePlayerMoney(playerid, HouseData[pos][hPrice]-500);
strmid(HouseData[pos][Owner], "Empty House", 0, strlen("Empty House"), 255);
SaveHouse(pos);
}
else return GameTextForPlayer(playerid, "~g~You don't own this house", 3000, 5);
}
if(!strcmp(cmdtext, "/housecommands", true)) {
GameTextForPlayer(playerid, "~g~/sellhouse~n~/lockhouse~n~/unlockhouse~n~/buyhouse", 3000, 5);
return 1;
}
if(!strcmp(cmdtext, "/unlockhouse", true)) {
new pos = IsPlayerInRangeOfHouse(playerid);
if(HouseData[pos][Locked] == FALSE) return GameTextForPlayer(playerid, "~g~This house is already unlocked", 3000, 5);
if(!strcmp(HouseData[pos][Owner], "Empty House", true)) return GameTextForPlayer(playerid, "~g~You don't own this house!", 3000, 5);
HouseData[pos][Locked] = FALSE;
GameTextForPlayer(playerid, "~g~~>~House Unlocked.~<~", 3000, 5);
SaveHouse(pos);
}
if(strcmp(cmd, "/changehouseprice", true) == 0)
{
if(!IsPlayerAdmin(playerid)) return 1;
new pos = IsPlayerInRangeOfHouse(playerid);
new tmp[128];
tmp = strtok(cmdtext, idx);
if(strlen(tmp) == 0) return GameTextForPlayer(playerid, "~g~/changehouseprice <price>", 3000, 5);
HouseData[pos][hPrice] = strval(tmp);
GameTextForPlayer(playerid, "~g~~>~House Price Changed.~<~", 3000, 5);
SaveHouse(pos);
return 1;
}
if(!strcmp(cmdtext, "/lockhouse", true)) {
new pos = IsPlayerInRangeOfHouse(playerid);
if(HouseData[pos][Locked] == TRUE) return GameTextForPlayer(playerid, "~g~This house is already locked", 3000, 5);
if(!strcmp(HouseData[pos][Owner], "Empty House", true)) return GameTextForPlayer(playerid, "~g~You don't own this house!", 3000, 5);
HouseData[pos][Locked] = TRUE;
GameTextForPlayer(playerid, "~g~~>~House Locked.~<~", 3000, 5);
SaveHouse(pos);
}
if(!strcmp(cmdtext, "/buyhouse", true)) {
new pos = IsPlayerInRangeOfHouse(playerid);
if(!strcmp(HouseData[pos][Owner], "Empty House", true)) return GameTextForPlayer(playerid, "~g~OWNED", 3000, 5);
if(GetPlayerMoney(playerid) >= HouseData[pos][hPrice]) {
GivePlayerMoney(playerid, -HouseData[pos][hPrice]);
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
strmid(HouseData[pos][Owner], name, 0, MAX_PLAYER_NAME, 255);
SaveHouse(pos);
GameTextForPlayer(playerid, "~g~Welcome to your new house.~n~/~r~/housecommands", 3000, 5);
}
else return GameTextForPlayer(playerid, "~g~YOU CANNOT AFFORD THIS HOUSE.", 3000, 5);
return 1;
}
if(!strcmp(cmdtext, "/exit", true)) {
for(new i = 0; i < TOTAL_HOUSES; i ++ ) {
if(IsPlayerInRangeOfPoint(playerid, 10.0, HouseData[i][ExitPos][0], HouseData[i][ExitPos][1], HouseData[i][ExitPos][2])) {
if(GetPlayerVirtualWorld(playerid) == i) {
SetPlayerPos(playerid, HouseData[i][EntrancePos][0], HouseData[i][EntrancePos][1], HouseData[i][EntrancePos][2]);
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
}
}
}
return 1;
}
return 0;
}
Already in SQL you just need to fill your database details in the mysql_connect then put it in server.cfg and restart it ( don't load with rcon )