Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Покупка домов

Статус
В этой теме нельзя размещать новые ответы.

Ozzi

Ученик
Вобщем, хотел сам сделать систему домов. Появилось куча проблем. Буду очень благодарен тем, кто поможет.
Загрузка из бд:
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"Купить дом","Выбрать","Отмена");
                }
            }
        }
    }
Первая проблема: Я покупаю дом(Допустим номер: 87). В игре все нормально покупается и тпшит игрока в дом, но когда перезапускаю мод выкуплен дом номер 86, а номер 87 продается.
Вторая проблема: Когда дом куплен и я подхожу нажимаю 'N' и выбираю 'информация', мне выдает иероглифы вместо никнейма и цвета сбиваются.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу