// Check to see if they should evade this shot? iSkillLevel = SM_GetSkillLevel( idUser, SKILL_EVASION ); //Some random mechanism a bit changed when experimenting; if (!p_data_b[idUser][PB_HEXED] && iSkillLevel > 0 && random_num( 1, 100 ) <= p_evasion[iSkillLevel-1] ) {
// i made global var in constants.inl if (NE_lastshot[idUser] < 0.1 && NE_lastshot[idUser] > 0.0) {
//Message player about evasion WC3_StatusText( idUser, TXT_SKILL, "You have evaded a shot!" );
new iGlowIntensity = random_num( 20, 50 );
// Head shot if ( iHitZone & (1 << HITGROUP_HEAD) ) { iGlowIntensity += 250; }
2 Шаг) В файле constants.inl добавляем новую срочку
//This var is new and must go away when proc param tweaked new Float: NE_lastshot[33];
3 Шаг) В events.inl находим код подобный этому и заменяем его
Code
// Check to see if this user has night elf's evasion if ( SM_GetSkillLevel( iVictim, SKILL_EVASION ) > 0 ) { // Do the check to see if we should "evade" this shot new Float:fTime = halflife_time(); new Float:fDifference = fTime - fLastShotFired[iAttacker];
//Here we save this value into var; but better would be to give it to NE_Evasion later NE_lastshot[iVictim] = fDifference;
//Here we make to check every time now if ( SHARED_ValidPlayer( iAttacker )) {
// Friendly fire is off! - This means we shouldn't evade since no damage will be done! if ( !get_pcvar_num( CVAR_mp_friendlyfire ) ) { if ( g_iPlayerTeam[iAttacker] == g_iPlayerTeam[iVictim] ) { return FMRES_IGNORED; } }
// Then we should evade this shot! if ( NE_Evasion( iVictim, iHitZone ) ) { set_tr( TR_flFraction, 1.0 );
return FMRES_SUPERCEDE; } } }
http://war3ft-help.tk/ - форум поддержки war3ftmod
Сообщение отредактировал Kartman - Понедельник, 07.05.2012, 18:33
//Evasion - вероятность в % избежать получение ущерба от выстрела противника. //Навык: Уклонение (Evasion), Раса: Ночные Эльфы (Night Elves of Kalimdor) NE_Evasion( idUser, iHitZone ) { static iSkillLevel;
// Check to see if they should evade this shot? iSkillLevel = SM_GetSkillLevel( idUser, SKILL_EVASION ); //Some random mechanism a bit changed when experimenting; if (!p_data_b[idUser][PB_HEXED] && iSkillLevel > 0 && random_num( 1, 100 ) <= p_evasion[iSkillLevel-1] * 100 ) {
// i made global var in constants.inl if (NE_lastshot[idUser] < 0.1 && NE_lastshot[idUser] > 0.0) {
//Message player about evasion WC3_StatusText( idUser, TXT_SKILL, "You have evaded a shot!" );
new iGlowIntensity = random_num( 20, 50 );
// Head shot if ( iHitZone & (1 << HITGROUP_HEAD) ) { iGlowIntensity += 250; }
// Used for spectating info #define SPEC_HOLDTIME 10.0 new g_iSpectatingID[33]; new Float:g_fLastSpecDisplay[33];
// Lets keep track of what team the player is on! new g_iPlayerTeam[33];
#define BOT_CAST_ULT_CHANCE 0.10
new bool:g_bCZBotRegisterHam
//This var is new and must go away when proc param tweaked new Float: NE_lastshot[33];
3)
// Check to see if this user has night elf's evasion if ( SM_GetSkillLevel( iVictim, SKILL_EVASION ) > 0 ) { // Do the check to see if we should "evade" this shot new Float:fTime = halflife_time(); new Float:fDifference = fTime - fLastShotFired[iAttacker];
//Here we save this value into var; but better would be to give it to NE_Evasion later NE_lastshot[iVictim] = fDifference;
//Here we make to check every time now if ( SHARED_ValidPlayer( iAttacker )) {
// Friendly fire is off! - This means we shouldn't evade since no damage will be done! if ( !get_pcvar_num( CVAR_mp_friendlyfire ) ) { if ( g_iPlayerTeam[iAttacker] == g_iPlayerTeam[iVictim] ) { return FMRES_IGNORED; } }
// Then we should evade this shot! if ( NE_Evasion( iVictim, iHitZone ) ) { set_tr( TR_flFraction, 1.0 );
if (NE_lastshot[idUser] < 0.1 && NE_lastshot[idUser] > 0.0)
Ты просто создал переменную в которую сохраняешь значение fDifference и вынес его в NE_Evasion( idUser,iAttacker, iHitZone ) Разницы нет абсолютно ни какой.
Сам баг которого просто нет, не исправлен. Наша группа вконтакте http://vk.com/nano_world_cs
Это разность по времени между выстрелами. Если это время больше 0.1 у вас уклонение не будет срабатывать.
Т.е. если вы стрельнули один раз и потом ждете, то значение fDifference будет расти,а следовательно уклонение уже не сработает. Другими словами само уклонение зависит от частоты попадания да плюс еще шанс срабатывания самого скила.
Так что дорогие мои нет тут багов абсолютно ни каких!
--- Кому уж сильно хочется чтобы уклонение работало еще чаще, достаточно сделать примерно так fDifference < 10.0 Наша группа вконтакте http://vk.com/nano_world_cs