Вопросы

Спойлер

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

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

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

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };