Ozzi
Ученик
Вобщем, хотел сам сделать систему домов. Появилось куча проблем. Буду очень благодарен тем, кто поможет.
Загрузка из бд:
Диалоги:
Клавиши взаимодействия:
Первая проблема: Я покупаю дом(Допустим номер: 87). В игре все нормально покупается и тпшит игрока в дом, но когда перезапускаю мод выкуплен дом номер 86, а номер 87 продается.
Вторая проблема: Когда дом куплен и я подхожу нажимаю 'N' и выбираю 'информация', мне выдает иероглифы вместо никнейма и цвета сбиваются.
Загрузка из бд:
PHP:
publics load_house()
{
new rows;
cache_get_row_count(rows);
new time = GetTickCount();
if(rows)
{
for(new he = 0;he < rows; he++)
{
cache_get_value_name_int(he, "hID", h_info[he][hID]);
cache_get_value_name_float(he, "hEnterx", h_info[he][hEnterx]);
cache_get_value_name_float(he, "hEntery", h_info[he][hEntery]);
cache_get_value_name_float(he, "hEnterz", h_info[he][hEnterz]);
cache_get_value_name_float(he, "hExitx", h_info[he][hExitx]);
cache_get_value_name_float(he, "hExity", h_info[he][hExity]);
cache_get_value_name_float(he, "hExitz", h_info[he][hExitz]);
cache_get_value_name(he, "hOwner", h_info[he][hOwner],MAX_PLAYER_NAME);
cache_get_value_name_int(he, "hValue", h_info[he][hValue]);
cache_get_value_name_int(he, "hInt", h_info[he][hInt]);
cache_get_value_name_int(he, "hLock", h_info[he][hLock]);
cache_get_value_name_int(he, "hOwned", h_info[he][hOwned]);
cache_get_value_name_int(he, "hKlass", h_info[he][hKlass]);
++totalhouse;
if(h_info[he][hOwned] == 0)
{
h_info[he][hMIcon] = CreateDynamicMapIcon(h_info[he][hEnterx], h_info[he][hEntery], h_info[he][hEnterz], 31, -1, 0, -1, -1, 90.0);
h_info[he][hPickup] = CreateDynamicPickup(1273, 23, h_info[he][hEnterx], h_info[he][hEntery], h_info[he][hEnterz],-1);
h_info[he][hText] = CreateDynamic3DTextLabel("Äëÿ âõîäà íàæìèòå 'ALT'\nÄëÿ âçàèìîäåéñòâèÿ íàæìèòå 'N'",COLOR_BLUE,h_info[he][hEnterx], h_info[he][hEntery], h_info[he][hEnterz],7.0,INVALID_PLAYER_ID,INVALID_PLAYER_ID,0,-1,-1,-1,10.0);
}
else //if(h_info[he][hOwned] == 1)
{
h_info[he][hMIcon] = CreateDynamicMapIcon(h_info[he][hEnterx], h_info[he][hEntery], h_info[he][hEnterz], 32, -1, 0, -1, -1, 90.0);
h_info[he][hPickup] = CreateDynamicPickup(19522, 23, h_info[he][hEnterx], h_info[he][hEntery], h_info[he][hEnterz],-1);
h_info[he][hText] = CreateDynamic3DTextLabel("Äëÿ âõîäà íàæìèòå 'ALT'\nÄëÿ âçàèìîäåéñòâèÿ íàæìèòå 'N'",COLOR_BLUE,h_info[he][hEnterx], h_info[he][hEntery], h_info[he][hEnterz],7.0,INVALID_PLAYER_ID,INVALID_PLAYER_ID,0,-1,-1,-1,10.0);
}
}
printf("[SERVER]: Äîìîâ çàãðóæåíî: %d. Çà: (%d ms)",totalhouse,GetTickCount() - time);
}
else printf("[SERVER]: Äîìà íå çàãðóæåíû!");
if(totalhouse < 1)totalhouse = 1;
return 1;
}
PHP:
case dMenuHome:// если продатся
{
new klass[12];
switch(h_info[HouseID[playerid]][hKlass])
{
case 0: klass = "Экономный";
case 1: klass = "Комфортный";
case 2: klass = "Бизнесс";
case 3: klass = "Элитный";
}
if(!response) return 1;
switch(listitem)
{
case 0:// info
{
static const fmt_str[] = ""w"Статус: "valik"Продаётся\n\
"w"Номер дома: "valik"%d\n\
"w"Цена: "valik"%d$\n\
"w"Класс: "valik"%s";
new str[sizeof(fmt_str)+(-2+4)+(-2+11)+(-2+12)];
format(str,sizeof(str),fmt_str,HouseID[playerid],h_info[HouseID[playerid]][hValue],klass);
ShowPlayerDialog(playerid,dInfo_House,DIALOG_STYLE_MSGBOX,"Информация",str,"Понял","");
}
case 1:// покупка
{
if(PI[playerid][pMoney] < h_info[HouseID[playerid]][hValue]) return ShowInfoForPlayer(playerid, TranslateText("~g~[Ошибка]:~w~ У вас недостаточно денег!"), 5000);
if(PI[playerid][pHome] != 65000) return ShowInfoForPlayer(playerid, TranslateText("~g~[Ошибка]:~w~ У вас уже есть дом!"), 5000);
kazna += h_info[HouseID[playerid]][hValue];
GivePlayerCash(playerid,-h_info[HouseID[playerid]][hValue],"Покупка дома");
send(playerid,-1,!"Поздравляем вас с покупкой дома!");
// телепортируем в дом
SetPlayerPos(playerid,h_info[HouseID[playerid]][hExitx],h_info[HouseID[playerid]][hExity],h_info[HouseID[playerid]][hExitz]);
SetPlayerInterior(playerid,h_info[HouseID[playerid]][hInt]);
SetPlayerVirtualWorld(playerid,HouseID[playerid]+50);
// обновить иконку и пикап
DestroyDynamicPickup(h_info[HouseID[playerid]][hPickup]);
DestroyDynamicMapIcon(h_info[HouseID[playerid]][hMIcon]);
h_info[HouseID[playerid]][hMIcon] = CreateDynamicMapIcon(h_info[HouseID[playerid]][hEnterx], h_info[HouseID[playerid]][hEntery], h_info[HouseID[playerid]][hEnterz], 32, -1, 0, -1, -1, 90.0);
h_info[HouseID[playerid]][hPickup] = CreateDynamicPickup(19522, 23, h_info[HouseID[playerid]][hEnterx], h_info[HouseID[playerid]][hEntery], h_info[HouseID[playerid]][hEnterz],-1);
h_info[HouseID[playerid]][hOwned] = 1;
h_info[HouseID[playerid]][hLock] = 1;
strmid(h_info[HouseID[playerid]][hOwner], GN(playerid), 0, strlen(GN(playerid)), 255);
//сохраню данные игрока(дом,деньги)
PI[playerid][pHome] = HouseID[playerid];
UpdatePlayerData(playerid, "pMoney", PI[playerid][pMoney]);
UpdatePlayerData(playerid, "pHome", PI[playerid][pHome]);
//сохраню дом
static const fmt_str[] = "UPDATE house SET hOwned = 1, hLock = 1, hOwner = '%s' WHERE hID = %d";
new str[sizeof(fmt_str)+(-2+MAX_PLAYER_NAME)+(-2+4)];
format(str,sizeof(str),fmt_str,GN(playerid),HouseID[playerid]);
mysql_tquery(connects,str,"","");
}
}
}
case dMenuHome_2://если куплен
{
new klass[12];
switch(h_info[HouseID[playerid]][hKlass])
{
case 0: klass = "Экономный";
case 1: klass = "Комфортный";
case 2: klass = "Бизнесс";
case 3: klass = "Элитный";
}
if(!response) return 1;
switch(listitem)
{
case 0://инфа
{
static const fmt_str[] = ""w"Статус: "valik"Куплен\n"w"Владелец: "valik"%s\n"w"Номер дома: "valik"%d\n"w"Цена: "valik"%d$\n"w"Класс: "valik"%s";
new str[sizeof(fmt_str)+(-2+MAX_PLAYER_NAME)+(-2+5)+(-2+11)+(-2+12)];
format(str,sizeof(str),fmt_str,h_info[HouseID[playerid]][hOwner],HouseID[playerid],h_info[HouseID[playerid]][hValue],klass);
ShowPlayerDialog(playerid,dInfo_House,DIALOG_STYLE_MSGBOX,"Информация",str,"Понял","");
}
//case 1://аренда
//case 2://покупка
}
}
PHP:
if(newkeys == 1024)// alt для домов
{
for(new idx = 1; idx <= totalhouse; idx++)
{
if(IsPlayerInRangeOfPoint(playerid,2.0,h_info[idx][hEnterx],h_info[idx][hEntery],h_info[idx][hEnterz]))
{
//if(h_info[idx][hLock] == 0 || !strcmp(PI[playerid][pName],h_info[idx][hOwner],true))
//{
SetPlayerPos(playerid,h_info[idx][hExitx],h_info[idx][hExity],h_info[idx][hExitz]);
SetPlayerInterior(playerid,h_info[idx][hInt]);
SetPlayerVirtualWorld(playerid,idx+50);
break;
//}
//else { GameTextForPlayer(playerid,"~r~CLOSED",5000,1); break; }
}
else if(IsPlayerInRangeOfPoint(playerid,2.0,h_info[idx][hExitx],h_info[idx][hExity],h_info[idx][hExitz]) && GetPlayerVirtualWorld(playerid) == idx+50)
{
SetPlayerPos(playerid,h_info[idx][hEnterx],h_info[idx][hEntery],h_info[idx][hEnterz]);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
break;
}
}
}
if(newkeys == 131072)// "N" для домов
{
for(new idx = 1; idx <= totalhouse; idx++)
{
if(IsPlayerInRangeOfPoint(playerid,2.0,h_info[idx][hEnterx],h_info[idx][hEntery],h_info[idx][hEnterz]))
{
HouseID[playerid] = idx;
if(h_info[idx][hOwned] == 0 )
{
ShowPlayerDialog(playerid,dMenuHome,DIALOG_STYLE_LIST,""orange"Меню взаимодействия",""orange"[1]"w" Информация\n"orange"[2] "w"Купить дом","Выбрать","Отмена");
}
else
{
ShowPlayerDialog(playerid,dMenuHome_2,DIALOG_STYLE_LIST,""orange"Меню взаимодействия",""orange"[1] "w"Информация\n"orange"[2] "w"Арендовать дом\n"orange"[3] "w"Купить дом","Выбрать","Отмена");
}
}
}
}
Вторая проблема: Когда дом куплен и я подхожу нажимаю 'N' и выбираю 'информация', мне выдает иероглифы вместо никнейма и цвета сбиваются.
