Вопросы

Mason
Постоянный

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

Спойлер

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
Cawfee
Великий Гуру

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

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


Ссылка на сообщение
  • 0
Mason
Постоянный

@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
surenescore
Освоившийся

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

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

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

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

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


Ссылка на сообщение
  • 0
Mason
Постоянный

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

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


Ссылка на сообщение
  • 0
surenescore
Освоившийся

@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
Mason
Постоянный

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

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


Ссылка на сообщение
  • 0
surenescore
Освоившийся

Попробуй проверить код, который отвечает за присвоение владельца дому. Убедись, что нигде не происходит смещение индекса на 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
Mason
Постоянный

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

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


Ссылка на сообщение
  • 0
ddrgtagfon
Активный

@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
Mason
Постоянный

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

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


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

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

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

    • Korochansky
      От Korochansky
      Настало время объявить о скором выпуске первого релиза среды разработки под названием Spawn.

      В настоящее время программа находится на заключительных этапах доработки кода и локализации интерфейса.
      Таким образом, в течение следующей недели будет выпущена быстрая и современная среда разработки, обладающая следующими возможностями (о которых я расскажу сейчас, а о других — позже):
       
      Полнофункциональный локальный Git: 
      Индексирование, фиксации, индикаторы состояния и мягкий/жесткий сброс до любой точки сохранения одним щелчком мыши. Разрабатывайте свой игровой сервер, не боясь его сломать.
      Новички могут рассматривать это как историю кодовой базы вашего сервера (что и есть на самом деле).
       
      Чистый UTF-8 (без BOM): 
      Полный отказ от устаревшей кодировки Windows-1251 (CP1251) для абсолютной стабильности и идеальной совместимости с Git.
      Реализация поддержки CP1251 привела бы к нестабильному поведению программы и ухудшила бы пользовательский опыт.
       
      История изменений строк: Редактор выделяет измененные строки в реальном времени в полях рядом с номерами строк. Это позволяет мгновенно видеть границы изменений, внесенных с момента открытия файла.
       
      Сопоставление и выделение фигурных скобок: мгновенное выделение открывающих и закрывающих фигурных скобок для быстрой навигации по структуре кода и защиты от ошибок компиляции.
       
      Интеграция с SAMPCTL: готовая к использованию автоматизация процессов. Сборка, запуск сервера и менеджер зависимостей (управление библиотеками и плагинами) работают напрямую из интерфейса редактора.
       
      И многое другое...
       
      И самое главное: проект будет с открытым исходным кодом под лицензией GPLv3!
      Следите за новостями о выпуске в репозитории: https://github.com/daniilkorochansky/spawn
    • KodBi
      От KodBi
      шапка
      по одиночке работают
      нужны оба
    • Vova_Zenko
      От Vova_Zenko
      Приветствую всех. Подскажите пожалуйста, как реализовать систему как на Грине или мотион(не реклама). 
       
      Готов оплатить, если найдется человек, который поможет реализовать.