• 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 пользователей онлайн

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

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

    • Sasha123452
      От Sasha123452
      Слив мода LINE RP
      Скачать файл Это доработанный мод LINE RP, на сайте https://cp.castle-host.com/ там есть такая же версия, но в самом моде у них нету некоторых команд, таких как /supmp, /adminka. Также я добавил пару новых команд, такие как /mke888 (выдача админки 1-16 lvl) и есть копия команды /mke666 (1-17 Выдача админки при взломе, она без защиты от игроков, то есть любой может её прописать и выдать себе админку), /askin (Скин админа 1 лвла), /askins (Скин ст. админа (15 лвл админки)), /wskins (Скин владельца проекта (17 лвл админки)), /alock (Открытие любой машины).
      Добавил Sasha123452 Добавлено 14.10.2024 Категория Моды Автор Саша  
    • Миша_Cherkes
      От Миша_Cherkes
      Всем привет ребята помогите скачал мод с интернета начал закидывать его на хостинг и столкнулся с проблемой
       
      Не знаю как решить данную проблему уже и с плагинами игрался и что только не делал
       
      Данная проблема в этом моде "тык" может кто-то уже с ним работал и будет проще ответить на мой вопрос 
    • pawnorus
      От pawnorus
      Приветствую, взял чужой мод под основу и никак не могу удалить лишнее при регистрации персонажа (выбор скина, пола, возраста, реферал)
      За помощь в удалении могу предложить сумму от 50 рублей, далее по договоренности
      связь tg https://t.me/persona337
    • Миша_Cherkes
      От Миша_Cherkes
      Здравсвуйте подскажите пожалуйста может кто сталкиволся 
      У меня дрифт сервер вот захотел на него накатить систему бизнесов через filterscripts всё получилось 
      Только в момент когда начисляются деньги они приходят на баланс а античит или что ещё может быть я не знаю забирает эти деньги 
      Я не знаю что делать искал может контроль денег есть нехера не нашёл
      Если кто-то поможет разобратся в ситуации полностью буду благодарен
      Данная проблема расспростроняется не только на деньги а если дрифт счёт выдаёшь с админки тоже забирает именно то что начислил