Вопросы

acatsuci
Новичок
 

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

/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;
}


Как я понимаю дело вот в этой проверке в паблике 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:

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);
}

 

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


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

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

  • 0
acatsuci
Новичок

@Anton_Urchenko 

Заменил сток, получилось вот так:

 

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

И заменил все J_SetPlayerArmour которые существуют на SetPlayerArmour 
И куча варнингов:

 

(23056) : error 010: invalid function or declaration
(23056) : error 021: symbol already defined: "acc_SetPlayerArmour"
(23059) : error 021: symbol already defined: "GetPlayerArmour"
(23060) : error 010: invalid function or declaration
(23061) : error 010: invalid function or declaration
(23058) : warning 203: symbol is never used: "armour"

строчки с варнингами:

 

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


Фулл код:

 

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

 

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


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

Ну смотри ты обьявил stock с названием SetPlayerAmour, хотя такая функция УЖЕ есть изначально в инклуде samp.inc, поэтому вместо того чтобы создавать свой новый сток просто в тех местах где ты использовал J_SeTPlayerAmour, замени на SetPlayerAmour, не нужно создавать эту функцию!

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


Ссылка на сообщение
  • 0
acatsuci
Новичок

@Anton_Urchenko 

 

Бро я же написал, я так и сделал, я в стоке J_SetPlayerAmour, заменил J_SetPlayerAmour на SetPlayerAmour И во всех остальных местах где есть функция J_SetPlayerArmour я заменил ее на SetPlayerAmour, я не создавал какой то новый сток 

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

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


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

вот этот сток у него имя такое же как у стандартного паблика

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

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

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


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

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

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

    • whccompany
      От whccompany
      World Hosting Corporations 
                                                                GTA Game Host 
                                               CRMP PC& Mobile Project 
                                           Rostov Role Play | Rostov RP 
      Друзья, нашему проекту срочно требуется маппер для масштабного маппинга, нам требуется сделать:
      1) Городской маппинг (удалить города и создать новые города, сначало необходимо создать город Ростов-на-Дону ; посёлок Коксовый и село Ряженое, создать используя стоковые фотографии из Яндекса и Гугла)
      2) Фракционный маппинг ( Текстуры + Экстерьер + Интерьер )
      3) Маппинг работ ( Текстуры + Экстерьеры + Интерьеры )
      Бюджет до 60 000 рублей
      Возможно заключение трудового контракта 
      Пишите: ВКонтакте

    • gooding
      От gooding
      Всем здравствуйте, уважаемые читатели. Я много времени потратил на доработку данного игрового мода, чтобы его выставить на форум.
      Лог доработок можно посмотреть внизу, а скриншоты игрового мода внизу и верху.
       
       

    • gooding
      От gooding


      Скачать файл PAR RP | Уникальный мод без багов
      Всем здравствуйте, уважаемые читатели. Я много времени потратил на доработку данного игрового мода, чтобы его выставить на форум.
      Лог доработок можно посмотреть внизу, а скриншоты игрового мода внизу и верху.
       
       

      Добавил gooding Добавлено 20.11.2024 Категория Моды Автор GOODING (Я)  
    • Kalinin
      От Kalinin
      1. Набираю команду для создания CRMP сервера.
      2. Вакансии  которые свободны. Связь через TG @kalinin_sql
      Нам нужны;
      1.Кодеры
      2.Маперы
      3.СММ
      Так-же дружная работа. По поводу зарплаты будем обговаривать все лично в беседе ТГ