• 0

Вопросы

Всем Привет! Столкнулся я с такой проблемой, на аккаунте числится что есть дом/бизнес/заправка но на самом деле нет. Соответственно при выборе спавна предлагает вариант "в доме", купить дом, бизнес, и прочую фигню нельзя т.к пишет что уже есть дом..
Прилагаю код проверки на наличие того или иного имущества у игрока

Спойлер

stock GetPlayerHouse(playerid)//Это дома(впрочем такая же проверка стоит у бизнесов/заправок и.т.д)
{
    new house = 0;
    for(new i = 0; i <= HouseCount; i++)
    {
        if(!strcmp(HouseInfo[i][hOwner],PlayerInfo[playerid][pSendername],true)) house++, SetPVarInt(playerid, "PlayerHouse", i);
    }
    return house;
}

 


Произошло это всё после того как я на шаманил с i = 0, до этого вместо 0 стояла 1 почти везде(загрузка, взаимодействие с пикапом и так далее.) но т.к из за единицы не прогружалось имущество с 1 ид, было принято решение поставить 0.

Поделиться сообщением


Ссылка на сообщение

36 ответов на этот вопрос

  • 0

@Mason, вы мне что скинули, то я и анализирую, на основе чего формирую мысли. 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee, А ой извините, забыл приложить код проверки на наличие дома у игрока, простите, мой косяк..¬¬

 

Спойлер

stock GetPlayerHouse(playerid)
{
    new house = 0;
    for(new i = 0; i <= HouseCount; i++)
    {
        if(!strcmp(HouseInfo[i][hOwner],PlayerInfo[playerid][pSendername],true)) house++, SetPVarInt(playerid, "PlayerHouse", i);
    }
    return house;
}

 

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Mason Проверь, с какого числа должен начинаться цикл в проверке имущества. Убедись, что это действительно должно быть 0, а не 1.

Добавь в код вывод отладочных сообщений, чтобы видеть, какое имущество присваивается игроку. Это поможет понять, где ошибка.

Исправь цикл в функции, чтобы он проверял все дома до последнего. Сделай так, чтобы цикл заканчивался на "меньше чем количество домов" (i < HouseCount).

Убедись, что в других частях кода, где проверяется наличие имущества, тоже используются правильные индексы.

Поделиться сообщением


Ссылка на сообщение
  • 0

@D2DChat, Сделал ваш способ с циклом, помогло. Но теперь творится такая дичь, когда я покупаю дом допустим с 365 ид вроде всё нормально всё отлично, а вот после рестарта сервера оказывается что владею я домом с 364 ид.:(

Поделиться сообщением


Ссылка на сообщение
  • 0

@Mason Это может происходить из-за неправильного сохранения или загрузки данных. Проверь, как ты сохраняешь данные о домах. Убедись, что ID дома сохраняется правильно и не смещается на 1. Проверь, как ты загружаешь данные о домах после рестарта сервера. Убедись, что данные загружаются с правильными ID.

 

Добавь отладочные сообщения в функции сохранения и загрузки данных, чтобы увидеть, что именно сохраняется и загружается.

Например, если у тебя есть функция, которая сохраняет данные о домах, добавь туда что-то вроде:

 

 

printf("Saving house data: ID = %d, Owner = %s", houseID, ownerName);

 

А в функции загрузки данных:

 

printf("Loading house data: ID = %d, Owner = %s", houseID, ownerName);

Так ты сможешь увидеть, где происходит смещение. Также проверь, нет ли в логике кода ошибок, которые могут приводить к смещению ID дома. Например, где-то может использоваться i-1 вместо i.

 

Попробуй эти шаги и посмотри, поможет ли это выявить и исправить ошибку. Если что-то будет неясно или понадобится помощь с конкретным кодом, дай знать!

Отредактировано пользователем D2DChat

Поделиться сообщением


Ссылка на сообщение
  • 0

@D2DChat, Функции сохранения домов у меня нет, но я выявил вот такой прикол, покупаю 381 дом, в игре покупается 381 дом, а в базе присвоение владельца и прочая шняга идёт 380 дому..

Поделиться сообщением


Ссылка на сообщение
  • 0

Попробуй проверить код, который отвечает за присвоение владельца дому. Убедись, что нигде не происходит смещение индекса на 1. Например, проверь, что ты не используешь i-1 вместо i.

 

Так же добавь отладочные сообщения в те места, где присваиваются владельцы домам, чтобы увидеть, где именно происходит смещение. Например, если у тебя есть функция, которая присваивает владельца дому, добавь туда что-то вроде:

 

printf("Setting owner for house ID %d to %s", houseid, PlayerInfo[playerid][pSendername]);

 

А когда ты сохраняешь данные в базу, добавь сообщение вроде:

 

printf("Saving house ID %d with owner %s to database", houseid, HouseInfo[houseid][hOwner]);

Так ты сможешь увидеть, где именно происходит смещение. Проверь все функции, которые работают с массивами домов, чтобы убедиться, что нигде нет ошибок с индексами.

Поделиться сообщением


Ссылка на сообщение
  • 0

@D2DChat, и так я вставил принтфки куда надо, но что в привоении владельца что в записи в базу указывает 364 ид(покупаю я соответственно 365), ну... А посмотрев код я не увидел никаких странностей

Поделиться сообщением


Ссылка на сообщение
  • 0

@Mason попробуй это, в стоке/паблике загрузки тоже измени на i = 1, если там 0

stock GetPlayerHouse(playerid)
{
    new house = 1;
    for(new i = 1; i <= HouseCount; i++)
    {
        if(!strcmp(HouseInfo[i][hOwner],PlayerInfo[playerid][pSendername],true)) house++, SetPVarInt(playerid, "PlayerHouse", i);
    }
    return house;
}

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@ddrgtagfon, увы но не помогло, если в загрузке домов поставить вместо 0 1 то дом с 0 ид пропадёт. А если поставить это в buyhouse но не менять в load house то это не даст никакого эффекта.

Поделиться сообщением


Ссылка на сообщение
  • 0

Закрыто. Исправил всё сам.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Sten Developer
      От Sten Developer
      Объясню всю ситуацию, пишу систему смерти игрока но она не работает. Решил по приколу написать туда обычный вывод текста SCM(playerid, COLOR_RED, "Вы умерли");
      Но однако после смерти текст не выводиться. Не работает абсолютно все. Кто знает как решить эту проблему?
       
    • Fpfe
      От Fpfe
      Я не могу понять в чем ошибка помогите пожалуйста
      C:\Users\Deze{s\Desktop\arzdd\gamemodes\arizonarp.pwn(50864) : error 037: invalid string (possibly non-terminated string)
      Pawn compiler 3.10.8              Copyright (c) 1997-2006, ITB CompuPhase

      1 Error.
       
      Уже почитал Что в этой строке мне просто нужно было 2 запятые поставить,Кто первый ответит тому положительный оставлю
       
    • Rumi Channel
      От Rumi Channel
      Добрый вечер,комьюнити форума у меня такая проблема хочу сделать вход и выход из здания кастом, но при заходе на метку выкидывает на улицу и сразу же в здания мод prp
      видео.rar