Question

Здравствуйте, хотел сделать систему домов, но что-то пошло не так, пытался сделать что угодно. Проще говоря проблема в том что когда покупаешь дом, пикап меняется на этот, также в папке сохранения вместо None "владельца дома до покупки", появляется пустая строка. Помогите исправить

sa-mp-003.png

Edited by Asminov

Share this post


Link to post

5 answers to this question

  • 0

@Asminov, тут остаётся только код показывать...

Share this post


Link to post
  • 0

Вот команда для покупки:

Спойлер

CMD:buyhouse(playerid, params[])
{
    if(PlayerInfo[playerid][pHouse] != 255return SCM(playerid, 0xFF0000AA"![Ошибка]{afa9a9} У вас уже есть дом!");
    for(new h = 0; h <= AllHouse; h++)
    {
        if(!IsPlayerInRangeOfPoint(playerid, 1.0, HousesInfo[h][hX], HousesInfo[h][hY], HousesInfo[h][hZ])) continue;
        if(PlayerInfo[playerid][pMoney] < HousesInfo[h][hPrise])return SCM(playerid, 0xFF0000AA"![Ошибка]{afa9a9} У вас недостаточно денег на покупку дома!");
        if(strcmp(HousesInfo[h][hOwner], "None"true) == 0return SCM(playerid, 0xFF0000AA"![Ошибка]{afa9a9} Этот дом уже куплен!");
        HousesInfo[h][hOwned] = 1;
        strmid(HousesInfo[h][hOwner], PlayerInfo[playerid][pName], 02424);
        PlayerInfo[playerid][pHouse] = h;
        PlayerInfo[playerid][pMoney] -= HousesInfo[h][hPrise];
        UpdateHouse(h);
        SaveHouses();
        SCM(playerid, COLOR_WHITE, "< Поздравляем вас с покупкой дома. (/house - помощь по дому)");
        SetPlayerInterior(playerid, HInts[HousesInfo[h][hInterior]][hiInt]);
        SetPlayerVirtualWorld(playerid, HousesInfo[h][hVirtWorld]);
        SetPlayerPos(playerid, HInts[HousesInfo[h][hInterior]][hiX], HInts[HousesInfo[h][hInterior]][hiY], HInts[HousesInfo[h][hInterior]][hiZ]);
        }
    return 1;

}

 

 

Вот код обновления дома после покупки:

Спойлер

stock UpdateHouse(h)
{
    new string[228];
    DestroyDynamicMapIcon(HousesInfo[h][hIcon]);
    DestroyPickup(HousesInfo[h][hPickup]);
    
    if(HousesInfo[h][hOwned] == 0) {
        format(string,sizeof(string), "{FF9900}*** Продается ***\n\n{ffffff}Номер: {AFAFAF}%d\n{FFFFFF}Стоимость: {AFAFAF}%d {FFFFFF}[$]\nУровень: {AFAFAF}%d{ffffff}\n\nЧтобы купить, введите {AFAFAF}/buyhouse",h,HousesInfo[h][hPrice],HousesInfo[h][hLevel]);
        Update3DTextLabelText(houses_text[h], 0xFFFFFFFF, string);
        HousesInfo[h][hIcon] = CreateDynamicMapIcon(HousesInfo[h][hX], HousesInfo[h][hY],HousesInfo[h][hZ], 31, COLOR_WHITE, 0, -1, -1400.0);
        HousesInfo[h][hPickup] = CreatePickup(127323, HousesInfo[h][hX], HousesInfo[h][hY],HousesInfo[h][hZ]);
    }
    else if(HousesInfo[h][hOwned] == 1) {
        format(string,sizeof(string), "Дом № %d\n\nУровень: %d\nВладелец: %s",h,HousesInfo[h][hLevel],HousesInfo[h][hOwner]);
        Update3DTextLabelText(houses_text[h], 0xFFFFFFFF, string);
        HousesInfo[h][hIcon] = CreateDynamicMapIcon(HousesInfo[h][hX], HousesInfo[h][hY],HousesInfo[h][hZ], 32, COLOR_WHITE, 0, -1, -1400.0);
        HousesInfo[h][hPickup] = CreatePickup(127223, HousesInfo[h][hX], HousesInfo[h][hY],HousesInfo[h][hZ]);
    }
}

 

 

Edited by Cawfee

Заметка от Cawfee , создано

3.2. Код необходимо брать в тег "Код", а код более 10 строк – еще и в "Спойлер". Как это сделать рассказано в разделе "FAQ".

Устное предупреждение.

Share this post


Link to post
  • 0
19 часов назад, Asminov сказал:

когда покупаешь дом, пикап меняется на этот

А это является проблемой? В явном виде обозначается, что дом кем-либо приобретен. В любом случае, если вам это не нравится, в теле функции UpdateHouse вы можете изменить эту логику или изменить модель пикапа в функции CreatePickup.

 

19 часов назад, Asminov сказал:

также в папке сохранения вместо None "владельца дома до покупки", появляется пустая строка

Добавьте какой-нибудь вывод для отладки, чтобы убедиться, что в hOwner есть значение имени. 

printf("Дом приобретается игроком %s", HousesInfo[h][hOwner]);

Перед следующей строкой:

format(string,sizeof(string), "Дом № %d\n\nУровень: %d\nВладелец: %s",h,HousesInfo[h][hLevel],HousesInfo[h][hOwner]);

И после приобретения дома посмотрите, что там в консоли (логах сервера).

Share this post


Link to post
  • 0

@Cawfee Проблема заключается в том что после покупки надпись меняется на всякую балбурду, то есть строчка на строчке и не поймёшь что там написано. На фото видно

Edited by Asminov

Share this post


Link to post
  • 0

@Asminov Возможно проблема заключается в некорректном обновлении информации о владельце дома и неправильном форматировании строки отображающей информации о доме. Посмотри что проверка на наличие владельца работает корректно, а присваивание имени владельца происходит без ошибок. Так-же ещё проверь правильно ли форматируются строки перед их обновлением, нужно это сделать дабы исключить смешивание текста. Как сказал выше CAWFEE чтобы упростить себе задачу добавь отладочные сообщения, они тебе помогут понять где именно происходит ошибка в логике обновления данных.

Edited by angel_sinvays
Причина: исправил

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By def
      arizona.pwn(23374) : error 012: invalid function call, not a valid address
      arizona.pwn(23374) : error 001: expected token: ";", but found ")"
      arizona.pwn(23374) : error 029: invalid expression, assumed zero
      arizona.pwn(23374) : fatal error 107: too many error messages on one line
      жалуется на данную строчку:
       
      %s{cccccc}Для продолжения нажмите 'Далее'",PN(playerid),playerid,ItemsInfo[itemid][ItemName2],hours,cost*hours,Inventory[playerid][2][slot], AksColorName(Inventory[playerid][4][slot]), Inventory[playerid][5][slot] ? GetNameStripe(Inventory[playerid][5][slot]) : "");