Вопросы

Спойлер

public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart)
{
        new Float:HP;
        GetPlayerHealth(damagedid, HP);
        new Float:oldposx, Float:oldposy, Float:oldposz;
        GetPlayerPos(damagedid, oldposx, oldposy, oldposz);
        if(IsPlayerInRangeOfPoint(playerid, 52.0, oldposx, oldposy, oldposz))
    {
        if(playerid != INVALID_PLAYER_ID)
        {
            switch(weaponid)
            {
                case 0: SetPlayerHealth(damagedid, HP -4);
                case 1: SetPlayerHealth(damagedid, HP -6);
                case 2: SetPlayerHealth(damagedid, HP -7);
                case 3: SetPlayerHealth(damagedid, HP -10);
                case 4..8: SetPlayerHealth(damagedid, HP -13.4);
                case 9: SetPlayerHealth(damagedid, HP -19.8);
                case 10..13: SetPlayerHealth(damagedid, HP -30);
                case 14: SetPlayerHealth(damagedid, HP -18);
                case 15: SetPlayerHealth(damagedid, HP -20);
                case 16: SetPlayerHealth(damagedid, HP -30);
                case 17: SetPlayerHealth(damagedid, HP -3);
                case 18: SetPlayerHealth(damagedid, HP -13);
                case 19: SetPlayerHealth(damagedid, HP -3);
                case 20: SetPlayerHealth(damagedid, HP -3);
                case 21: SetPlayerHealth(damagedid, HP -3);
                case 22: SetPlayerHealth(damagedid, HP -8.6);
                case 23: SetPlayerHealth(damagedid, HP -9.7);
                case 24: SetPlayerHealth(damagedid, HP -47.8);
                case 25: SetPlayerHealth(damagedid, HP -25.3);
                case 26: SetPlayerHealth(damagedid, HP -30.3);
                case 27: SetPlayerHealth(damagedid, HP -22.4);
                case 28: SetPlayerHealth(damagedid, HP -8);
                case 29: SetPlayerHealth(damagedid, HP -9);
                case 30: SetPlayerHealth(damagedid, HP -8);
                case 31: SetPlayerHealth(damagedid, HP -8);
                case 32: SetPlayerHealth(damagedid, HP -7);
                case 33: SetPlayerHealth(damagedid, HP -24);
                case 34: SetPlayerHealth(damagedid, HP -400);
            }
        }
    }
    	return true;
}

 

Суть проблемы - Если у игрока есть Armour, он отнимается вместе со здоровьем, как решить данную проблему?

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

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


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

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

  • 0
58 минут назад, Yong сказал:

case 0: SetPlayerHealth(damagedid, HP -4); case 1: SetPlayerHealth(damagedid, HP -6); case 2: SetPlayerHealth(damagedid, HP -7); case 3: SetPlayerHealth(damagedid, HP -10); case 4..8: SetPlayerHealth(damagedid, HP -13.4); case 9: SetPlayerHealth(damagedid, HP -19.8); case 10..13: SetPlayerHealth(damagedid, HP -30); case 14: SetPlayerHealth(damagedid, HP -18); case 15: SetPlayerHealth(damagedid, HP -20); case 16: SetPlayerHealth(damagedid, HP -30); case 17: SetPlayerHealth(damagedid, HP -3); case 18: SetPlayerHealth(damagedid, HP -13); case 19: SetPlayerHealth(damagedid, HP -3); case 20: SetPlayerHealth(damagedid, HP -3); case 21: SetPlayerHealth(damagedid, HP -3); case 22: SetPlayerHealth(damagedid, HP -8.6); case 23: SetPlayerHealth(damagedid, HP -9.7); case 24: SetPlayerHealth(damagedid, HP -47.8); case 25: SetPlayerHealth(damagedid, HP -25.3); case 26: SetPlayerHealth(damagedid, HP -30.3); case 27: SetPlayerHealth(damagedid, HP -22.4); case 28: SetPlayerHealth(damagedid, HP -8); case 29: SetPlayerHealth(damagedid, HP -9); case 30: SetPlayerHealth(damagedid, HP -8); case 31: SetPlayerHealth(damagedid, HP -8); case 32: SetPlayerHealth(damagedid, HP -7); case 33: SetPlayerHealth(damagedid, HP -24); case 34: SetPlayerHealth(damagedid, HP -400);

вот тут вместо SetPlayerHealth проставьте везде просто HP -= 4; HP -= 6; и т.д., чтобы получалось примерно так: 

case 0: HP -= 4; 
case 1: HP -= 6; 
case 2: HP -= 7; 
//TODO

и паблик заменить

Спойлер

public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart)
{
  new Float:HP, arm;
  GetPlayerHealth(damagedid, HP);
  GetPlayerArmour(damagedid, arm); 
  new Float:oldposx, Float:oldposy, Float:oldposz;
  GetPlayerPos(damagedid, oldposx, oldposy, oldposz);
  if(IsPlayerInRangeOfPoint(playerid, 52.0, oldposx, oldposy, oldposz))
  {
    if(playerid != INVALID_PLAYER_ID)
    {
      switch(weaponid)
      {
          //сделать, как указал раннее
      }
      if(arm != 0) SetPlayerArmour(damagedid, arm-HP); 
      else SetPlayerHealth(damagedid, HP); 
    }
  }
  return true;
}

 

 

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


Ссылка на сообщение
  • 0
31 минуту назад, DEST сказал:

вот тут вместо SetPlayerHealth проставьте везде просто HP -= 4; HP -= 6; и т.д., чтобы получалось примерно так: 


case 0: HP -= 4; 
case 1: HP -= 6; 
case 2: HP -= 7; 
//TODO

и паблик заменить

  Code (закрыть спойлер)


public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart)
{
  new Float:HP, arm;
  GetPlayerHealth(damagedid, HP);
  GetPlayerArmour(damagedid, arm); 
  new Float:oldposx, Float:oldposy, Float:oldposz;
  GetPlayerPos(damagedid, oldposx, oldposy, oldposz);
  if(IsPlayerInRangeOfPoint(playerid, 52.0, oldposx, oldposy, oldposz))
  {
    if(playerid != INVALID_PLAYER_ID)
    {
      switch(weaponid)
      {
          //сделать, как указал раннее
      }
      if(arm != 0) SetPlayerArmour(damagedid, arm-HP); 
      else SetPlayerHealth(damagedid, HP); 
    }
  }
  return true;
}

 

 

Варнинг

warning 213: tag mismatch

На строку 

GetPlayerArmour(damagedid, arm);

Либо же ниже

new Float:HP;
new Float:arm;

Сделал так, варнинг исчез

Ну вообщем такое происходит, сбивается армор до 0, потом восстанавливается обратно, начинается убавляться здоровье, до половины, а потом игрок вообще бессмертный становиться

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


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

@Yong заменить паблик: 
 

Спойлер


public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart)
{
  new Float:HP, arm = 1;
  GetPlayerArmour(damagedid, HP); 
  if(HP != 0) GetPlayerHealth(damagedid, HP), arm = 0; 
  new Float:oldposx, Float:oldposy, Float:oldposz;
  GetPlayerPos(damagedid, oldposx, oldposy, oldposz);
  if(IsPlayerInRangeOfPoint(playerid, 52.0, oldposx, oldposy, oldposz))
  {
    if(playerid != INVALID_PLAYER_ID)
    {
      switch(weaponid)
      {
          //сделать, как указал раннее
      }
      if(arm != 0) SetPlayerArmour(damagedid, HP); 
      else SetPlayerHealth(damagedid, HP); 
    }
  }
  return true;
}

 

 

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


Ссылка на сообщение
  • 0
38 минут назад, DEST сказал:

@Yong заменить паблик: 
 

  Код (закрыть спойлер)



public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart)
{
  new Float:HP, arm = 1;
  GetPlayerArmour(damagedid, HP); 
  if(HP != 0) GetPlayerHealth(damagedid, HP), arm = 0; 
  new Float:oldposx, Float:oldposy, Float:oldposz;
  GetPlayerPos(damagedid, oldposx, oldposy, oldposz);
  if(IsPlayerInRangeOfPoint(playerid, 52.0, oldposx, oldposy, oldposz))
  {
    if(playerid != INVALID_PLAYER_ID)
    {
      switch(weaponid)
      {
          //сделать, как указал раннее
      }
      if(arm != 0) SetPlayerArmour(damagedid, HP); 
      else SetPlayerHealth(damagedid, HP); 
    }
  }
  return true;
}

 

 

Так-же все вместе убавляется 

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


Ссылка на сообщение
  • 0
2 часа назад, DEST сказал:

if(HP != 0) GetPlayerHealth(damagedid, HP), arm = 0;

вот тут != замените на == 

Если не поможет, то в конец паблика добавить: 

printf("[DEBUG] %d - arm, %f - HP", arm, HP);

И скинуть логи. 

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


Ссылка на сообщение
  • 0
15 часов назад, DEST сказал:

вот тут != замените на == 

Если не поможет, то в конец паблика добавить: 

printf("[DEBUG] %d - arm, %f - HP", arm, HP);

И скинуть логи. 

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

[12:55:22] [DEBUG] 1 - arm, 52.200000 - HP
[12:55:24] [DEBUG] 1 - arm, 4.200000 - HP
[12:55:26] [DEBUG] 1 - arm, -43.799999 - HP
[12:55:29] [DEBUG] 1 - arm, 165.199996 - HP
[12:55:29] [kill] You killed Destroyer Desert Eagle
[12:55:50] [DEBUG] 0 - arm, 52.200000 - HP
[12:55:53] [DEBUG] 0 - arm, 52.200000 - HP
[12:55:54] [DEBUG] 0 - arm, 52.200000 - HP
[12:55:55] [DEBUG] 0 - arm, 52.200000 - HP

 

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


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

@Yong киньте финальную версию паблика, которая сейчас в моде

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


Ссылка на сообщение
  • 0
4 минуты назад, DEST сказал:

@Yong киньте финальную версию паблика, которая сейчас в моде

new Float:HP, arm = 1;
	GetPlayerArmour(damagedid, HP);
	if(HP == 0) GetPlayerHealth(damagedid, HP), arm = 0;
	new Float:oldposx, Float:oldposy, Float:oldposz;
	GetPlayerPos(damagedid, oldposx, oldposy, oldposz);
	if(IsPlayerInRangeOfPoint(playerid, 52.0, oldposx, oldposy, oldposz))
	{
    if(playerid != INVALID_PLAYER_ID)
    {
      switch(weaponid)
      {
          case 24: HP -= 47.8;
      }
      if(arm != 0) SetPlayerArmour(damagedid, HP);
      else SetPlayerHealth(damagedid, HP);
      }
    }
    printf("[DEBUG] %d - arm, %f - HP", arm, HP);
    return true;

 

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


Ссылка на сообщение
  • 0
3 часа назад, Yong сказал:

if(HP == 0)

заменить на: 

if(HP <= 0) 

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


Ссылка на сообщение
  • 0
7 минут назад, DEST сказал:

заменить на: 

if(HP <= 0) 

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

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


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

@Yong так у вас античит может на броню есть, вот и возвращает обратно? Посмотрите как в моде в других местах выдается броня. 

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


Ссылка на сообщение
  • 0
Только что, DEST сказал:

@Yong так у вас античит может на броню есть, вот и возвращает обратно? Посмотрите как в моде в других местах выдается броня. 

Нет античита.

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


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

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

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

    • gooding
      От gooding


      Скачать файл REDROW RP | ЛУЧШИЙ БОНУСНИК | АВТОПАРКИ
      Доброго времени суток! Я выложил на продажу игровой мод RedRow RolePlay!
       
      17 ТИТУЛОВ, 14 КОСТЮМОВ (КАМЕРМЭН, ФЕЯ, СИ-ДЖЕЙ, ДЭДПУЛ, СПАНЧ БОБ, НИНДЗЯ, ДЕД МОРОЗ и другие!),
      BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS, Rolls-Royce Phantom! Система рулетки  (Исправлена, теперь не выпадает одно и то же),
      Автопарки Фракций (FBI и банд), МОД ОПТИМИЗИРОВАЛИ под ИГРУ, ДОБАВИЛИ НОВЫЙ АНТИЧИТ (Latest Nex-AC) и АНТИЧИТ настроен. Проделано много работы (Над модом работали полгода) и исправили множество багов.
       
      Что было добавлено?
      1. 17 титулов,
      2. 14 костюмов,
      3. Эксклюзивный транспорт (SandKing, Rolls-Royce Phantom, BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS).
      4. Автопарк ФБР и всех банд.
      5. Новый анти-чит.
      6. Оптимизация игрового мода.
      7. Премиум и уникальные возможности для владельцев Премиума.
      8. Команда /bonus, где можно получить бесплатно Red Coins.
      9. За АКТИВ даются Red Coins!
      10. Рестарт сервера в 5:00 по МСК.
      11. Радужный клист.
      12. Уникальный тюнинг для эксклюзивных машин и ускорение.
      13. Новая система банка.
      14. Исправлено множество багов.
      15. Новый маппинг.
      Добавил gooding Добавлено 28.01.2024 Категория Моды Автор GOODING (Я)  
    • gooding
      От gooding
      Доброго времени суток! Я выложил на продажу игровой мод RedRow RolePlay!
       
      17 ТИТУЛОВ, 14 КОСТЮМОВ (КАМЕРМЭН, ФЕЯ, СИ-ДЖЕЙ, ДЭДПУЛ, СПАНЧ БОБ, НИНДЗЯ, ДЕД МОРОЗ и другие!),
      BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS, Rolls-Royce Phantom! Система рулетки  (Исправлена, теперь не выпадает одно и то же),
      Автопарки Фракций (FBI и банд), МОД ОПТИМИЗИРОВАЛИ под ИГРУ, ДОБАВИЛИ НОВЫЙ АНТИЧИТ (Latest Nex-AC) и АНТИЧИТ настроен. Проделано много работы (Над модом работали полгода) и исправили множество багов.
       
      Что было добавлено?
      1. 17 титулов,
      2. 14 костюмов,
      3. Эксклюзивный транспорт (SandKing, Rolls-Royce Phantom, BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS).
      4. Автопарк ФБР и всех банд.
      5. Новый анти-чит.
      6. Оптимизация игрового мода.
      7. Премиум и уникальные возможности для владельцев Премиума.
      8. Команда /bonus, где можно получить бесплатно Red Coins.
      9. За АКТИВ даются Red Coins!
      10. Рестарт сервера в 5:00 по МСК.
      11. Радужный клист.
      12. Уникальный тюнинг для эксклюзивных машин и ускорение.
      13. Новая система банка.
      14. Исправлено множество багов.
      15. Новый маппинг.
    • Redmondd
      От Redmondd
      Хочу сделать команду /gpsoff, которая убирает метку