Armor Damage
|
|
Extasy | Дата: Вторник, 29.12.2009, 15:51:13 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Не в сети
| Как можно получить значение дамага по броне? Просто damage, на сколько я понимаю, это дамаг по ХП.Добавлено (29.12.2009, 15:51:13) --------------------------------------------- UP
|
|
| |
CLLlAgOB | Дата: Вторник, 12.01.2010, 01:31:47 | Сообщение # 2 |
Полковник
Группа: Скриптеры
Сообщений: 217
Статус: Не в сети
| 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
Статус: Не в сети
| CLLlAgOB, пардон, врядли это в моих силах...
|
|
| |
CLLlAgOB | Дата: Вторник, 12.01.2010, 21:03:41 | Сообщение # 4 |
Полковник
Группа: Скриптеры
Сообщений: 217
Статус: Не в сети
| Посмотри внимательно там видно как высчитывается урон брони формула там )))
|
|
| |
Extasy | Дата: Четверг, 14.01.2010, 17:16:46 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 61
Статус: Не в сети
| 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
Статус: Не в сети
| :)))) Так зачем эти сточки у тебя? 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
Статус: Не в сети
| Пардон, надо наверное было весь код, для лучшего понимания. Quote (CLLlAgOB) что за armv и arma ArmV - Armor Victim и ArmA - Armor Attacker соответствнно Quote (CLLlAgOB) ты же просто хотел получить скок брони снимается у чела. Ну да, но я думал оно будет стабильно работать, а после "эксперемента", так сказать, я понял, что оно как-то неверно считает. Quote (CLLlAgOB) Ты напиши конкретно что ты хочешь сделать... Хочу дописать этот плагин. Чтобы прибавляло не только ХП, но и броню восстанавливало. Так же, оставляю исходник того, что я сделал с бронёй по формуле...
|
|
| |
CLLlAgOB | Дата: Среда, 20.01.2010, 17:57:15 | Сообщение # 8 |
Полковник
Группа: Скриптеры
Сообщений: 217
Статус: Не в сети
| ВОт кусок из исходника ХЛ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 |
|
| |