Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 2 из 2
  1. #1
    Аватар для Vasya_Pupkin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.02.2016
    Сообщений
    77
    Репутация:
    0 ±

    Не покупается последний созданный дом

    Всем привет.
    Столкнулся с такой проблемой нельзя купить дом который был созданный последний.
    На пример: создаю 1,2,3 дома то 3 дом купить нельзя а иконки все есть но не вылазит диалог который должен появляться(OnPlayerEnterDynamicArea(playerid, areaid))
    В public OnPlayerEnterDynamicArea(playerid, areaid)
    Код HTML:
    	for(new h = 1; h < TotalHouse; h++)
    	{
    		if(areaid != gHouses[h][hArea]) continue;
    
    		new subsidia = floatround(gHouses[h][hValue] * 0.005);
    		if(gHouses[h][houseImprove][3]) subsidia = subsidia / 2;
    		new raion[30];
    		GetPlayer2DZone(playerid,raion,30);
    
    		if(strcmp(gHouses[h][houseOwner], "The State"))
    		{
    			if ( gHouses[h][hFamily] && pInfo[playerid][pFamily] != gHouses[h][hFamily])
    			{
    				format(stringer, 250, "{f0f0f0}Внимание!\nЭтот дом принадлежит семье ' %s '.\n\nУ вас есть возможность вступить в эту семью, для этого нужно ввести секретный код в поле ниже.\nЕсли не желаете просто нажмите 'Отмена'", _family[gHouses[h][hFamily]-1][family_create_name]);
    				ShowPlayerDialog(playerid,DIALOG_ENTER_FAMILY_HOUSE,DIALOG_STYLE_INPUT,"{F0F0F0}Информация",stringer,"Ввод","Отмена");
    			}
    			else
    			{
    				new status_online[32] = "{AA3333}Оффлайн", id;
    				sscanf(gHouses[h][houseOwner], "u", id);
    				if(id != INVALID_PLAYER_ID) status_online = "{33AA33}Онлайн";
    				ShowPlayerDialog(playerid,DIALOG_HOUSE_INFO,DIALOG_STYLE_MSGBOX,"Дом занят",stringer,"Войти","Отмена");
    			}
    		}
    		else
    		{
    			stringer[0] = EOS;
    			format(stringer, 1024, "{f0f0f0}Номер дома: %d (%d)\nЦена: %d$\nКласс: %s\nКвартплата: %d$ за 1 день\nРайон: %s\n\nНа следующем шаге вы сможете купить этот дом или посмотреть его интерьер",gHouses[h][hID],h,gHouses[h][hValue],gHousesClassName[gHouses[h][hKlass]-1],subsidia,raion);
    			ShowPlayerDialog(playerid,DIALOG_HOUSE_INFO_2,DIALOG_STYLE_MSGBOX,"Дом продается",stringer,"Далее","Отмена");
    		}
    
    		SetPVarInt(playerid,"HOUSE_ID", h ) ;
    
    		break;
    	}
    Команда для создания дома:
    Код HTML:
    CMD:addhouse(playerid,params[])
    {
    	new house_class, house_price;
    	new Float:X,
    		Float:Y,
    		Float:Z,
    		Float:Az;
    
    	if(TotalHouse>=MAX_HOUSES) return SendClientMessage(playerid,COLOR_GREY,"Ëèìèò äîìîâ èñ÷åðïàí");
    	if(sscanf(params, "ii", house_class,house_price))
    	{
    		SendClientMessage(playerid, COLOR_GREY, "/addhouse [íîìåð êëàññà] [öåíà ïðîäàæè]");
    		SendClientMessage(playerid, COLOR_GREY, "Êëàññû: [1 - Ýêîíîì-êëàññ] [2 - Êîìôîðò-êëàññ] [3 - Ïðåìèóì-êëàññ] [4 - Ýëèòíûé-êëàññ]");
    		return 1;
    	}
    	if(house_class > 4 || house_class < 1)
    	{
    		SendClientMessage(playerid, COLOR_GREY, "ID èíòåðüåðà îò 1 äî 4");
    		return 1;
    	}
    	SetPVarInt(playerid, "aretick", GetTickCount());
    	TotalHouse ++;
    	//
    	GetPlayerPos(playerid,X,Y,Z);
    	GetPlayerFacingAngle(playerid,Az);
    	gHouses[TotalHouse][houseX]=X;
    	gHouses[TotalHouse][houseY]=Y;
    	gHouses[TotalHouse][houseZ]=Z;
    	gHouses[TotalHouse][houseA]=Az;
    	gHouses[TotalHouse][hKlass]=house_class;
    	gHouses[TotalHouse][hValue]=house_price;
    	gHouses[TotalHouse][hLock]=0;
    	gHouses[TotalHouse][hDays]=1;
     	strmid(gHouses[TotalHouse][houseOwner],"The State",0,strlen("The State"),28);
    	format(stringer, 144, "Âû óñïåøíî ñîçäàëè äîì íîìåð {e7e7e7}%d {ffffff}Ñòîèìîñòü ïîêóïêè: {e7e7e7}%d",TotalHouse,gHouses[TotalHouse][hValue]);
    	SendClientMessage(playerid,-1,stringer);
    	//
     	mysql_query_string[0] = EOS;
    	format(mysql_query_string,1000,"INSERT INTO `housetest`\
    	(`hEntrx`, `hEntry`, `hEntrz`,`houseA`, `hOwner`, `hDiscript`, `hPrice`, `hLock`, `hCarx`, `hCary`, `hCarz`, `hCara`, `hDays`) VALUES \
    	('%.2f','%.2f','%.2f','%.2f','The State','%d','%d','0','%.2f','%.2f','%.2f','%.2f','1')",
    	gHouses[TotalHouse][houseX],gHouses[TotalHouse][houseY],gHouses[TotalHouse][houseZ],gHouses[TotalHouse][houseA],gHouses[TotalHouse][hKlass],gHouses[TotalHouse][hValue],
    	gHouses[TotalHouse][houseParkX],gHouses[TotalHouse][houseParkY],gHouses[TotalHouse][houseParkZ],gHouses[TotalHouse][houseParkR]);
    	mysql_pquery(mysql_connect_ID,mysql_query_string,"AddHouseEpt","d", TotalHouse);
    	//
    	gHouses[TotalHouse][hPickup] = CreateDynamicPickup(1273, 23, gHouses[TotalHouse][houseX], gHouses[TotalHouse][houseY], gHouses[TotalHouse][houseZ]);
    	gHouses[TotalHouse][hMIcon] = CreateDynamicMapIcon(gHouses[TotalHouse][houseX], gHouses[TotalHouse][houseY], gHouses[TotalHouse][houseZ], 31, CWHITE);
    	gHouses[TotalHouse][hArea] = CreateDynamicSphere(gHouses[TotalHouse][houseX], gHouses[TotalHouse][houseY], gHouses[TotalHouse][houseZ], 1.3, 0, 0, -1);
    	return 1;
    }
    
    forward AddHouseEpt(id_house);
    public AddHouseEpt(id_house)
    {
    	gHouses[id_house][hID] = cache_insert_id();
    	return 1;
    }

    А так же как лучше
    Так
    for(new h = 1; h < TotalHouse; h++)
    или так
    for(new h = 1; h < sizeof(TotalHouse); h++)
    или разницы не какой?
    Последний раз редактировалось Vasya_Pupkin; 05.04.2018 в 20:39.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Касаемо вопроса о создании дома. Ну так при создании ты сначала прибавляешь значение к переменной TotalHouse, а потом уже это значение используешь в качестве индекса массива. В цикле же ты делаешь условие, которое не включает самое большое значение переменной TotalHouse в выборку, от чего и происходит такая проблема. Выходом будет смена условия на такой вид:
    PHP код:
    for(new 1<= TotalHouseh++) 
    Хотя лучше всего отказаться от пресловутой переменной TotalHouse и создать итератор для домов, который будет содержать в себе ID созданных домов. Тогда для поиска свободного ID достаточно использовать "Iter_Free", которая вернёт "-1" в случае, если свободных ячеек не будет. И "общение" с домами уже будет более надёжным (сейчас твой код создания домов будет ловить выход за пределы массива, когда ты создашь максимальное количество домов, так как условие
    PHP код:
    if(TotalHouse>=MAX_HOUSES
    стоит до того, как ты прибавляешь значение TotalHouse


    Касаемо второго вопроса. Правильнее, как я уже выше сказал, будет использовать итератор, но если отвечать на конкретно твой вопрос, то вот это условие:
    PHP код:
    for(new 1sizeof(TotalHouse); h++) 
    в корне неверно и даже не скомпилируется, так как TotalHouse - не массив. Ты, видимо, хотел сделать такое условие
    PHP код:
    for(new 1sizeof(gHouses); h++) 
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Vasya_Pupkin (06.04.2018)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •