AMX MOD X
Четверг, 05.12.2024, 01:15:45



Приветствую Вас Гость | RSS
[ Главная ] [ Armor Damage - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Armor Damage
ExtasyДата: Вторник, 29.12.2009, 15:51:13 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 3
Статус: Не в сети
Как можно получить значение дамага по броне?
Просто damage, на сколько я понимаю, это дамаг по ХП.

Добавлено (29.12.2009, 15:51:13)
---------------------------------------------
UP

 
CLLlAgOBДата: Вторник, 12.01.2010, 01:31:47 | Сообщение # 2
Полковник
Группа: Скриптеры
Сообщений: 217
Репутация: 14
Статус: Не в сети
use http://wiki.tcwonline.org/index.php/Half-Life_1_Game_Events#Damage
and

Check out:
HLSDK: multiplayer source\dlls\player.cpp: CPlayer::TakeDamage
(at 12% of the file)

Code
// From ../multiplayer source/dlls/player.cpp   
#define ARMOR_RATIO  0.2 // Armor Takes 80% of the damage (was .2 in the SDK)   
#define ARMOR_BONUS  0.5    // Each Point of Armor is work 1/x points of health       
// Damage calculation due to armor from: ../multiplayer source/dlls/player.cpp       
new Float:flNew = float(damage) * ARMOR_RATIO       
new Float:flArmor = (float(damage) - flNew) * ARMOR_BONUS       
new Float:armor = float(get_user_armor(victim))       

// Does this use more armor than we have?       
if( flArmor > armor ){           
   flArmor = armor;           
   flArmor *= (1/ARMOR_BONUS)          
   flNew = float(damage) - flArmor           
   set_user_armor(victim, 0)       
   } else    set_user_armor(victim, floatround(armor - flArmor))      
   damage = floatround(flNew)


Сообщение отредактировал CLLlAgOB - Вторник, 12.01.2010, 01:36:51
 
ExtasyДата: Вторник, 12.01.2010, 20:32:48 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 3
Статус: Не в сети
CLLlAgOB, пардон, врядли это в моих силах... blink
 
CLLlAgOBДата: Вторник, 12.01.2010, 21:03:41 | Сообщение # 4
Полковник
Группа: Скриптеры
Сообщений: 217
Репутация: 14
Статус: Не в сети
Посмотри внимательно там видно как высчитывается урон брони формула там )))
 
ExtasyДата: Четверг, 14.01.2010, 17:16:46 | Сообщение # 5
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 3
Статус: Не в сети
Code
#define ARMOR_RATIO  0.2 // Armor Takes 80% of the damage (was .2 in the SDK)
#define ARMOR_BONUS  0.5 // Each Point of Armor is work 1/x points of health

new armv = get_user_armor(victim)
new arma = get_user_armor(attacker)

new Float:flNew = float(damage) * ARMOR_RATIO
new Float:flArmor = (float(damage) - flNew) * ARMOR_BONUS  

set_user_armor(victim, floatround(armv + flArmor))
set_user_armor(attacker, floatround(arma - flArmor))

Хм... Ну вот данный код даёт эффект.. да не тот что надо... Он прибавляет либо очень много брони, либо мало.
как я понял
new Float:flArmor = (float(damage) - flNew) * ARMOR_BONUS - урон нанесённый по броне...

 
CLLlAgOBДата: Пятница, 15.01.2010, 17:19:53 | Сообщение # 6
Полковник
Группа: Скриптеры
Сообщений: 217
Репутация: 14
Статус: Не в сети
:)))) Так зачем эти сточки у тебя?
set_user_armor(victim, floatround(armv + flArmor)) зачем жертве прибавлять броню?
set_user_armor(attacker, floatround(arma - flArmor)) и зачем атакующему убавлять броню)
и что за armv и arma

Ты напиши конкретно что ты хочешь сделать...
ты же просто хотел получить скок брони снимается у чела.
Да там вроде как хитоны действуют и если попадаешь скажем в руку броня не отнимается

Сообщение отредактировал CLLlAgOB - Пятница, 15.01.2010, 17:32:23
 
ExtasyДата: Суббота, 16.01.2010, 07:06:36 | Сообщение # 7
Лейтенант
Группа: Пользователи
Сообщений: 61
Репутация: 3
Статус: Не в сети
Пардон, надо наверное было весь код, для лучшего понимания.
Quote (CLLlAgOB)
что за armv и arma

ArmV - Armor Victim и ArmA - Armor Attacker соответствнно

Quote (CLLlAgOB)
ты же просто хотел получить скок брони снимается у чела.

Ну да, но я думал оно будет стабильно работать, а после "эксперемента", так сказать, я понял, что оно как-то неверно считает.

Quote (CLLlAgOB)
Ты напиши конкретно что ты хочешь сделать...

Хочу дописать этот плагин. Чтобы прибавляло не только ХП, но и броню восстанавливало.

Так же, оставляю исходник того, что я сделал с бронёй по формуле...

Прикрепления: anti_admin_tk.sma (1.5 Kb)
 
CLLlAgOBДата: Среда, 20.01.2010, 17:57:15 | Сообщение # 8
Полковник
Группа: Скриптеры
Сообщений: 217
Репутация: 14
Статус: Не в сети
ВОт кусок из исходника ХЛ1
Code

#define ARMOR_RATIO  0.2    // Armor Takes 80% of the damage
#define ARMOR_BONUS  0.5    // Each Point of Armor is work 1/x points of health

int CBasePlayer :: TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType )
{
    // have suit diagnose the problem - ie: report damage type
    int bitsDamage = bitsDamageType;
    int ffound = TRUE;
    int fmajor;
    int fcritical;
    int fTookDamage;
    int ftrivial;
    float flRatio;
    float flBonus;
    float flHealthPrev = pev->health;

    flBonus = ARMOR_BONUS;
    flRatio = ARMOR_RATIO;

    if ( ( bitsDamageType & DMG_BLAST ) && g_pGameRules->IsMultiplayer() )
    {
     // blasts damage armor more.
     flBonus *= 2;
    }

    // Already dead
    if ( !IsAlive() )
     return 0;
    // go take the damage first

       
    CBaseEntity *pAttacker = CBaseEntity::Instance(pevAttacker);

    if ( !g_pGameRules->FPlayerCanTakeDamage( this, pAttacker ) )
    {
     // Refuse the damage
     return 0;
    }

    // keep track of amount of damage last sustained
    m_lastDamageAmount = flDamage;

    // Armor.    
    if (pev->armorvalue && !(bitsDamageType & (DMG_FALL | DMG_DROWN)) )// armor doesn't protect against fall or drown damage!
    {
     float flNew = flDamage * flRatio;

     float flArmor;

     flArmor = (flDamage - flNew) * flBonus;

     // Does this use more armor than we have?
     if (flArmor > pev->armorvalue)
     {
      flArmor = pev->armorvalue;
      flArmor *= (1/flBonus);
      flNew = flDamage - flArmor;
      pev->armorvalue = 0;
     }
     else
      pev->armorvalue -= flArmor;
        
     flDamage = flNew;
    }


Сообщение отредактировал CLLlAgOB - Среда, 20.01.2010, 18:32:50
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024