- Регистрация
- 26 Ноя 2013
- Сообщения
- 126
- Лучшие ответы
- 0
- Репутация
- 7
Проблема такова:
1 - Долго мучился с переводом системы домов с файлов на базу, всё получилось, но была проблема что при создании дома в базу они записывались, но stock сохранения дома не срабатывал. - проблему решил (Что то мудрил там с id самого дома, кое как получилось)
2 - Появилось следующее, скорее всего тоже связано с id дома - при покупке дома не идет обновление самих домов, да и при загрузке сами MapIcon домов не появляются, в аккаунта игрока не сохраняются новые данные - хотя сохраняю их сразу же при изменении.
В общем сам код всей системы:
PHP:
enum hInfo
{
hID,
Float: hEnter[3],
Float: hExit[3],
Float: hCar[4],
hOwner[MAX_PLAYER_NAME+1],
hValue,
hHel,
hInt,
hLock,
hOwned,
hTakings,
hKlass,
hPickup,
hMIcon
};
new House[600][hInfo], TOTALHOUSE;
PHP:
connect = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_BASE); // Подключение к базе данных
mysql_set_charset("cp1251");
mysql_tquery(connect, "SELECT * FROM `house`", "LoadHouses", ""); // Загрузка домов
for(new h = 0; h < TOTALHOUSE; h++)
{
House[h][hPickup] = -1;
House[h][hMIcon] = -1;
if(House[h][hOwned] == 0)
{
House[h][hPickup] = CreateDynamicPickup(1273, 23, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2], -1);
House[h][hMIcon] = CreateDynamicMapIcon(House[h][hExit][0], House[h][hExit][1], House[h][hExit][2], 31, COLOR_WHITE, 0, -1, -1);
}
else
{
House[h][hPickup] = CreateDynamicPickup(19522, 23, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2], -1);
House[h][hMIcon] = CreateDynamicMapIcon(House[h][hExit][0], House[h][hExit][1], House[h][hExit][2], 32, COLOR_WHITE, 0, -1, -1);
}
}
PHP:
case 10026://покупаем ДОМ
{
if(response)
{
if(IsPlayerConnected(playerid))
{
for(new h = 0; h < TOTALHOUSE; h++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2]) && House[h][hOwned] == 0)
{
if(Player[playerid][pHouse] != 9999 && strcmp(GN(playerid), House[Player[playerid][pHouse]][hOwner], true) == 0) return SCM(playerid, COLOR_GREY, !"[!] У вас уже есть дом.");
if(Player[playerid][pMoney] < House[h][hValue]) return SCM(playerid, COLOR_GREY,! "[!] У вас нет столько денег!");
Player[playerid][pHouse] = h;
House[h][hOwned] = 1;
House[h][hHel] = 0;
House[h][hTakings] = 400;
strmid(House[h][hOwner], GN(playerid), 0, strlen(GN(playerid)), 255);
Player[playerid][pMoney] -= House[h][hValue];
new kvartira;
switch(House[h][hKlass])
{
case 0: kvartira = 400;
case 1: kvartira = 650;
case 2: kvartira = 1200;
case 3: kvartira = 2800;
case 4: kvartira = 4500;
case 5: kvartira = 6500;
case 6: kvartira = 200;
}
SCM(playerid, COLOR_WHITE, !"Поздравляем с покупкой!");
f("Теперь каждый день со счёта вашего дома будут снимать квартплату в размере: {FFFFFF}%d{24C92F}$.", kvartira);
SCM(playerid, COLOR_YELLOW, string);
SCM(playerid, COLOR_YELLOW, !"Если на счету недостаточно денег, вас выселят. Сейчас на счету: {FFFFFF}400{24C92F}$");
SCM(playerid, COLOR_WHITE, !"Пополнить квартплату или узнать баланс можно в банке.");
SCM(playerid, COLOR_BLUE, !"Чтобы выйти из дома нажмите \"Alt\".");
Player[playerid][pSpawn] = 2;
if(Player[playerid][pCar] == 0) return SPD(playerid, 29900, DSM, !"Транспорт", !"{FFFFFF}У вас нет транспорта. \nВозможно вы захотите приобрести поддержанный велосипед?? \n\t\t\tЦена: 550$", "Купить", "Отказаться");
SavePlayer(playerid, "House", Player[playerid][pHouse], "d");
SavePlayer(playerid, "Spawn", Player[playerid][pSpawn], "d");
SaveHouse(h);
UpdateHouse(h);
return true;
}
}
}
}
}
case 29900:
{
if(response)
{
if(Player[playerid][pMoney] < 550) return SCM(playerid, COLOR_GREY, !"[!] У вас нет столько денег!");
Player[playerid][pMoney] -= 550;
new cvetT = random(255);
SCM(playerid, COLOR_GREEN, !"Вы приобрели транспорт!");
Player[playerid][pCar] = 605;
Player[playerid][pFuel] = 90.0;
Player[playerid][pColor][0] = cvetT;
Player[playerid][pColor][1] = cvetT;
SavePlayer(playerid, "Car", Player[playerid][pCar], "d");
if(caridhouse[playerid] != INVALID_VEHICLE_ID) Fuell[caridhouse[playerid]] = 200;
}
}
case 10075:
{
if(response)
{
for(new h = 0; h < TOTALHOUSE; h++)
{
if(Player[playerid][pHouse] == h || House[h][hLock] == 0)
{
SetPlayerInterior(playerid, House[h][hInt]);
SetPlayerVirtualWorld(playerid, h+50);
SetPlayerPos(playerid, House[h][hExit][0], House[h][hExit][1], House[h][hExit][2]);
}
else GameTextForPlayer(playerid, !"~r~Locked", 4000, 4);
}
}
}
PHP:
fpublic LoadHouses()
{
new rows, time = GetTickCount();
cache_get_row_count(rows);
if(!rows) print(!"Дома не были загружены!");
else
{
for(new i; i < rows; i++)
{
cache_get_value_name_int(i, "ID", House[i][hID]);
cache_get_value_name_float(i, "EnterX", House[i][hEnter][0]);
cache_get_value_name_float(i, "EnterY", House[i][hEnter][1]);
cache_get_value_name_float(i, "EnterZ", House[i][hEnter][2]);
cache_get_value_name_float(i, "ExitX", House[i][hExit][0]);
cache_get_value_name_float(i, "ExitY", House[i][hExit][1]);
cache_get_value_name_float(i, "ExitZ", House[i][hExit][2]);
cache_get_value_name(i, "Owner", House[i][hOwner], 24);
cache_get_value_name_int(i, "Value", House[i][hValue]);
cache_get_value_name_int(i, "Hel", House[i][hHel]);
cache_get_value_name_int(i, "Int", House[i][hInt]);
cache_get_value_name_int(i, "Lock", House[i][hLock]);
cache_get_value_name_int(i, "Owned", House[i][hOwned]);
cache_get_value_name_int(i, "Takings", House[i][hTakings]);
cache_get_value_name_int(i, "Klass", House[i][hKlass]);
cache_get_value_name_float(i, "CarX", House[i][hCar][0]);
cache_get_value_name_float(i, "CarY", House[i][hCar][1]);
cache_get_value_name_float(i, "CarZ", House[i][hCar][2]);
cache_get_value_name_float(i, "CarA", House[i][hCar][3]);
UpdateHouse(i);
TOTALHOUSE++;
}
}
printf("[%i штук/%d m.s] >> загружено Дома", TOTALHOUSE, GetTickCount() - time);
return true;
}
PHP:
CMD:setpos(playerid, params[])
{
if(strcmp(GN(playerid), "Kevin_Elevin", true)) return true;
if(sscanf(params, "ii", params[0], params[1])) return SCM(playerid, -1, !"Ââåäèòå: /setpos [Class] [Price]");
if(params[0] < 0 || params[0] > 6) return SCM(playerid, -1, !"Class: 0 - 6");
if(params[1] < 1000 || params[1] > 900000000) return SCM(playerid, -1, !"Price: 1000 - 900000000");
new Float: Pos[3], Float: iPos[3], inter;
GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
switch(params[0])
{
case 0:
{
inter = 2;
iPos[0] = 2454.717041;
iPos[1] = -1700.871582;
iPos[2] = 1013.515197;
}
case 1:
{
inter = 1;
iPos[0] = 2527.654052;
iPos[1] = -1679.388305;
iPos[2] = 1015.498596;
}
case 2:
{
inter = 8;
iPos[0] = 2807.619873;
iPos[1] = -1171.899902;
iPos[2] = 1025.570312;
}
case 3:
{
inter = 3;
iPos[0] = 235.508994;
iPos[1] = 1189.169897;
iPos[2] = 1080.339966;
}
case 4:
{
inter = 6;
iPos[0] = 234.045990;
iPos[1] = 1064.879883;
iPos[2] = 1084.309937;
}
case 5:
{
inter = 12;
iPos[0] = 2324.419921;
iPos[1] = -1145.568359;
iPos[2] = 1050.710083;
}
case 6:
{
inter = 1;
iPos[0] = 244.411987;
iPos[1] = 305.032989;
iPos[2] = 999.148437;
}
}
mysql_format(connect, string, sizeof(string), "INSERT INTO `house` (`ID`, `EnterX`, `EnterY`, `EnterZ`, `Value`, `Int`, `Klass`) VALUES ('%d', '%f', '%f', '%f', '%d', '%d', '%d')", TOTALHOUSE, Pos[0], Pos[1], Pos[2], params[1], inter, params[0]);
mysql_tquery(connect, string, "", "");
House[TOTALHOUSE][hID] = TOTALHOUSE;
House[TOTALHOUSE][hEnter][0] = Pos[0];
House[TOTALHOUSE][hEnter][1] = Pos[1];
House[TOTALHOUSE][hEnter][2] = Pos[2];
House[TOTALHOUSE][hExit][0] = iPos[0];
House[TOTALHOUSE][hExit][1] = iPos[1];
House[TOTALHOUSE][hExit][2] = iPos[2];
House[TOTALHOUSE][hValue] = params[1];
House[TOTALHOUSE][hInt] = inter;
House[TOTALHOUSE][hKlass] = params[0];
strmid(House[TOTALHOUSE][hOwner], "The State", 0, strlen("The State"), 9999);
SCM(playerid, COLOR_WHITE, !"Êîðäèíàòû äîìà óñòàíîâëåíû");
SaveHouse(TOTALHOUSE);
UpdateHouse(TOTALHOUSE);
TOTALHOUSE++;
return true;
}
PHP:
stock SaveHouse(i)
{
mysql_format(connect, string, sizeof(string), "UPDATE `house` SET `EnterX` = '%f', `EnterY` = '%f', `EnterZ` = '%f', `ExitX` = '%f', `ExitY` = '%f', `ExitZ` = '%f'",
House[i][hEnter][0], House[i][hEnter][1], House[i][hEnter][2], House[i][hExit][0], House[i][hExit][1], House[i][hExit][2]);
mysql_format(connect, string, sizeof(string), "%s, `Value` = '%d', `Hel` = '%d', `Int` = '%d', `Lock` = '%d', `Owned` = '%d', `Takings` = '%d', `Klass` = '%d'",
string, House[i][hValue], House[i][hHel], House[i][hInt], House[i][hLock], House[i][hOwned], House[i][hTakings], House[i][hKlass]);
mysql_format(connect, string, sizeof(string), "%s, `CarX` = '%f', `CarY` = '%f', `CarZ` = '%f', `CarA` = '%f'",
string, House[i][hCar][0], House[i][hCar][1], House[i][hCar][2], House[i][hCar][3]);
mysql_format(connect, string, sizeof(string), "%s, `Owner` = '%e' WHERE `ID` = '%d'", string, House[i][hOwner], House[i][hID]);
mysql_tquery(connect, string, "", "");
}
stock UpdateHouse(h)
{
if(House[h][hPickup] != -1) DestroyDynamicPickup(House[h][hPickup]), House[h][hPickup] = -1;
if(House[h][hMIcon] != -1) DestroyDynamicMapIcon(House[h][hMIcon]), House[h][hMIcon] = -1;
if(House[h][hOwned] == 0)
{
House[h][hPickup] = CreateDynamicPickup(1273, 23, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2]);
House[h][hMIcon] = CreateDynamicMapIcon(House[h][hExit][0], House[h][hExit][1], House[h][hExit][2], 31, COLOR_WHITE, 0, -1, -1);
}
else
{
House[h][hPickup] = CreateDynamicPickup(19522, 23, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2]);
House[h][hMIcon] = CreateDynamicMapIcon(House[h][hExit][0], House[h][hExit][1], House[h][hExit][2], 32, COLOR_WHITE, 0, -1, -1);
}
}