Question

acatsuci
Новичок

Вообщем, при выдаче брони через команду /setarmour, при получении урона броня кончается, и выдается опять, и вот так до бесконечности, так скажем ГМ
Как пофиксить?

setarmour:

 

CMD:setarmour(playerid, params[])
{
    if(PI[playerid][pAdmin] < 2return SCM(playerid, COLOR_RED, NO_DOSTUP_TEXT);
    if(!ADuty{playerid}) return SCM(playerid, COLOR_GREY, NO_DUTY_TEXT);
    new target, Float:armour;
    if(sscanf(params, "uf", target, armour)) return SCM(playerid, COLOR_RED, !"Используйте: /setarmour [id] [ammount]");
    if(armour > 1000.0return SCM(playerid, COLOR_RED, !"Используйте: /setarmour [id] am < 1000");
    if(armour < 0.0return SCM(playerid, COLOR_RED, !"Используйте: /setarmour [id] am > 0");
    if(target == INVALID_PLAYER_ID) return 0;
    J_SetPlayerArmour(target, armour);
    SendAdminsMessagef(COLOR_GREY, "[A] Администратор %s установил игроку %s[%i] показатель брони на %.0f", PN(playerid), PN(target), target, armour);
    return 1;
}

 

Edited by acatsuci

Share this post


Link to post

3 answers to this question

  • 0
Sleash
Завсегдатый

Такое может быть если выдаётся больше кол-во брони, то есть если выдать те же 500 брони, то полоска отображения не будет выходить за рамки, а как бы делить всю броню "по 100", то есть сначала она показывает условные от 400 до 500 ед. брони, если снять игроку до значений 300-400, то показывать будет соответственно от 300 до 400 и так далее. Это "исправить" можно только запретив выдавать более 100 брони.

Share this post


Link to post
  • 0
acatsuci
Новичок

Нет бро, это происходит при выдаче 100 единиц брони, тоесть ты выдал 100 единиц брони и при снятии этих 100 единиц сразу же появляется новые 100 единиц, тоесть броня так скажем респавнится.

я создавал такую же тему на другом форуме под названием pawn-wiki, но на нем меня забанили за то что я забыл взять текст в рамки CODE
и там человек мне написал то что:

В твоём случае, скорее всего, прикол в этой проверке, находящейся в OnPlayerTakeDamage:
 

if(PI[playerid][pShield] >= 10.0)
            {
                GetPlayerHealth(playerid, Health);
                Health += 10;
                if(Health > 100) Health = 100;
                J_SetPlayerHealth(playerid, Health);
                PI[playerid][pShield] -= 10.0;
            }


То бишь, могу предположить, что внутри функции J_SetPlayerHealth имеется ещё и установка единиц брони игроку.


С его слов могу сделать вывод что дело в функции J_SetPlayerHealth 
Вот тебе эта функция, может найдешь в чем проблема)

J_SetPlayerHealth:

stock J_SetPlayerHealth(playerid, Float:hp, shareping = 0)
{
    if(hp < 1 && PlayerCure(playerid)) return J_SetPlayerArmour(playerid, 0), PlayerSpawn(playerid);
    new Float:health;
    GetPlayerHealth(playerid, health);
    PI[playerid][pHealth] = hp;
    UpdatePlayerDataFloat(playerid, "HP", PI[playerid][pHealth]);
    if(!shareping)
    {
        str_2[0] = EOS, f(str_2, sizeof(str_2),"+%.0f HP", (health-hp));
        SetPlayerChatBubble(playerid, str_2, COLOR_GREEN, 10.05000);
    }
    if(InventStatus{playerid})
    {
        f(str_2,sizeof(str_2),"HP: %.0f", hp),
        PlayerTextDrawSetString(playerid, Invent[playerid][38], str_2);
    }
    return SetPlayerHealth(playerid, hp);
}



Нашел еще какую то функцию связанную с setarmour, возможно она будет полезна в решении этой проблемы, вот она:

J_SetPlayerArmour:

stock J_SetPlayerArmour(playerid, Float:arm)
{
    new Float:armour;
    GetPlayerArmour(playerid, armour);
    if(InventStatus{playerid}) PlayerTextDrawSetStringf(playerid, Invent[playerid][37], "ARM: %.0f", arm);
    return SetPlayerArmour(playerid, PI[playerid][pArmour] = arm);
}

 

Share this post


Link to post
  • 0
Cawfee
Великий Гуру

@acatsuci,

В 30.07.2023 в 02:16, acatsuci сказал:

при снятии этих 100 единиц

 

Каким образом "снимаете"? Что у вас в OnPlayerTakeDamage? Используется ли эта функция в каких-нибудь регулярно вызываемых функциях (OnPlayerUpdate или таймеры)?

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • ВасилийСталин
      By ВасилийСталин
      VERDICT PROJECT - V:ACE
       
      Соревновательный проект на платформе SA-MP, вдохновлённый духом Counter-Strike: тактические перестрелки, честный рейтинг и ванильное PVP.
      В разработке, не используются ресурсы, из открытых источников. Всё строится с нуля, собственный игровой мод, полностью кастомный интерфейс и игровой лаунчер.
      Что мы разрабатываем:
       
      - Рейтинговый режим с подбором по ELO. Равные соперники, честные матчи, путь от новичка до вершины таблицы.
      - Полностью кастомный интерфейс (CEF): меню, лобби, магазин и статистика такого уровня, какого на SA-MP почти не встретишь.
      - Легионеры - уникальные оперативники с индивидуальным дизайном и редкостью, открываются через боевой пропуск или чёрные ячейки (кейсы).
      - Скины на оружие и кейсы - коллекционная система в духе CS. -> В активной разработке
      - Киберспортивные команды: теги, ростеры, матчи команда против команды.
      - Тренировка аима, система рангов, ежедневные награды и не только.
       
      Продуманный баланс и внимание к деталям ванильного сражения - то, ради чего мы за это взялись.
      Проект уже на серьёзной стадии разработки. Мы открываем сообщество раньше официального анонса, чтобы первые скриншоты, новости и дата старта достались тем, кто был с нами с самого начала. Мы всегда рады открытой критике, или советам - сделаем игру лучше для всех!
      Подписывайтесь, чтобы не пропустить официальное заявление о запуске и первые материалы проекта.
       
      Группа VK: https://vk.ru/verdictcs
      Официальная почта: verdictproject@mail.ru
    • Kevin_McCarthy
      By Kevin_McCarthy
      🔒 ОТКРЫТИЕ НАБОРА НА ЗАКРЫТОЕ БЕТА-ТЕСТИРОВАНИЕ (ЗБТ)!
      Друзья! Мы выходим на самый ответственный этап разработки Brilliant RP. Проект уже практически готов к полноценному запуску, но перед тем как открыть двери для всех игроков, нам нужно тщательно проверить каждую систему, каждую работу и каждую строчку кода.
      Именно поэтому мы объявляем о старте Закрытого Бета-Тестирования!
      🏆 ТОП-3 ТЕСТЕРА ПОЛУЧАТ КРУТЫЕ ПРИЗЫ!
      Мы высоко ценим время и вклад каждого участника. Тестеры, которые проявят наибольшую активность, найдут больше всего уникальных багов и подробно опишут их в нашей Google-форме, получат ценные награды:
      🥇 1 МЕСТО: 3000 рублей на кошелек, 100.000$ игровой валюты, и Diamond VIP на 30 дней
      🥈 2 МЕСТО: 2000 рублей на кошелек, 75.000$ игровой валюты, и Diamond VIP на 30 дней
      🥉 3 МЕСТО: 1000 рублей на кошелек, 50.000$ игровой валюты, и Diamond VIP на 30 дней
      📝 Как стать участником ЗБТ?
      Заполни заявку на участие: 👉 https://vk.ru/gtasamp_brilliantrp
      Дождись одобрения.
    • OOLOAIS
      By OOLOAIS
      Ищу скрипт для самп/crmp который может скопировать акссесуары с аризоны/родины пж помогите