| xbatista |
10-14-2009 08:51 |
About looping
This called 2 times dunno why... I have only 1 worn item...
For example
Quote:
g_iPlayerItem[attacker][item_id] = 1
g_charcounter = 1
|
And why it called 2 times? ( I just do debug with client_print inside the task and saw it ,that prints 2 times )
PHP Code:
for(new item_id = 0; item_id <= g_charcounter ; item_id++)
{
if ( g_iPlayerItemWorn[attacker][item_id] && g_iPlayerItem[attacker][item_id] > 0 )
{
if ( item_data[item_id][CHAR_HASP] > 0 )
{
set_user_rendering(victim, kRenderFxGlowShell, 0, 255, 0, kRenderTransAlpha, 20)
set_task( 1.0, "Start_poison_damage", victim + TASKID_POISON, Param, sizeof Param, "b");
set_task( float(item_data[item_id][CHAR_PDURATION]), "End_poison_damage", victim);
}
if ( item_data[item_id][CHAR_DURABILITY] > 0 )
{
Set_Player_Item_Repair(attacker, item_id, g_iPlayerItemRepair[attacker][item_id] - 1);
}
}
}
Fuller code :D :
PHP Code:
public fwd_TraceAttack(victim, attacker, Float:damage, Float:direction[3], traceresult, damagebits)
{
if ( attacker == victim || !(1 <= attacker <= g_iMaxPlayers) )
return HAM_IGNORED;
new counted_dexterity, block_value;
for (new item_id = 0; item_id <= g_charcounter; item_id++)
{
block_value = (g_iPlayerItemWorn[victim][item_id] && g_iPlayerItem[victim][item_id] > 0 && item_data[item_id][CHAR_BLOCK] > 0 ? item_data[item_id][CHAR_BLOCK] : 0)
}
counted_dexterity = HEROES_DEXTERITY_PERSTAT[g_PlayerHero[victim]] * g_Dexterity[victim];
new Float:counted_strength;
new Param[1];
Param[0] = attacker;
new CsArmorType:iPlayerArmorType;
new iArmor = cs_get_user_armor(victim, iPlayerArmorType);
counted_strength = HEROES_STRENGTH_PERSTAT[g_PlayerHero[attacker]] * g_Strength[attacker];
new Float:counted_at_strength = ((counted_strength + 10.0) * 4.0);
new Float:counted_defence = (iArmor > counted_at_strength ? ( (iArmor / counted_at_strength) * 5.0) : 0.0);
new Float: counted_damage;
counted_damage = damage + counted_strength + Set_Player_Damage_Item(victim, attacker) - counted_defence + ( g_PlayerHero[attacker] == PALADIN && g_iPaladinSkills[attacker][SKILL_SMITE] > 0 && g_iCurSkill[attacker] == SKILL_SMITE &&
Player_WItemType(attacker, TYPE_SHIELD) && g_CurrentMana[attacker] >= get_pcvar_num(d2_smite_cost_mana) ? PalSmiteDmg[g_iPaladinSkills[attacker][SKILL_SMITE] - 1] : 0.0 ) +
(g_PlayerHero[attacker] == BARBARIAN && g_iBarbarianSkills[attacker][SKILL_BASH] > 0 && g_iCurSkill[attacker] == SKILL_BASH && g_CurrentMana[attacker] >= get_pcvar_num(d2_bash_cost_mana) ? BarBashDmg[g_iBarbarianSkills[attacker][SKILL_BASH] - 1] : 0.0) +
(g_PlayerHero[attacker] == AMAZON && g_iAmazonSkills[attacker][SKILL_IMPALE] > 0 && g_iCurSkill[attacker] == SKILL_IMPALE && g_CurrentMana[attacker] >= get_pcvar_num(d2_impale_cost_mana) ? AmazonImpaleDmg[g_iAmazonSkills[attacker][SKILL_IMPALE] - 1] : 0.0) +
( g_PlayerHero[attacker] == AMAZON && g_iAmazonSkills[attacker][SKILL_CRITICAL_S] > 0 && random_num( 0, 100 ) < AmazonCrit[g_iAmazonSkills[attacker][SKILL_CRITICAL_S] - 1] ? damage : 0.0);
if ( g_Player_NearEnt[attacker] || g_Player_NearEntAk[attacker] || g_Player_NearEntCh[attacker] )
{
return HAM_SUPERCEDE;
}
else
{
if ( random_num(0, get_pcvar_num(d2_max_random_value) ) < (counted_dexterity + block_value) )
{
set_hudmessage(0, 150, 255, 0.05, 0.35, 1, 1.5, 1.5, 0.0, 0.0, 3)
ShowSyncHudMsg(victim, g_SyncHudCreate_Avade , "Attack Avaded!" )
ShowSyncHudMsg(attacker, g_SyncHudCreate_Avade , "Attack Missed!" )
return HAM_SUPERCEDE;
}
else
{
if ( g_PlayerHero[victim] == NECROMANCER && g_iNecromancerSkills[victim][SKILL_BONEARMOR] > 0 && g_AbsorbDamage[victim] > 0 )
{
Set_Player_BoneArmorDmg(victim, g_AbsorbDamage[victim] - floatround(counted_damage));
return HAM_SUPERCEDE;
}
else
{
for(new item_id = 0; item_id <= g_charcounter ; item_id++)
{
if ( g_iPlayerItemWorn[attacker][item_id] && g_iPlayerItem[attacker][item_id] > 0 )
{
if ( item_data[item_id][CHAR_HASP] > 0 )
{
set_user_rendering(victim, kRenderFxGlowShell, 0, 255, 0, kRenderTransAlpha, 20)
set_task( 1.0, "Start_poison_damage", victim + TASKID_POISON, Param, sizeof Param, "b");
set_task( float(item_data[item_id][CHAR_PDURATION]), "End_poison_damage", victim);
}
if ( item_data[item_id][CHAR_DURABILITY] > 0 )
{
Set_Player_Item_Repair(attacker, item_id, g_iPlayerItemRepair[attacker][item_id] - 1);
}
}
}
if ( g_PlayerHero[attacker] == AMAZON && g_iAmazonSkills[attacker][SKILL_IMPALE] > 0 && g_iCurSkill[attacker] == SKILL_IMPALE
&& g_CurrentMana[attacker] >= get_pcvar_num(d2_impale_cost_mana) )
{
Set_Player_Mana(attacker, g_CurrentMana[attacker] - get_pcvar_num(d2_impale_cost_mana) );
for(new item_id = 0; item_id <= g_charcounter ; item_id++)
{
if ( g_iPlayerItemWorn[victim][item_id] && g_iPlayerItem[victim][item_id] > 0 && item_data[item_id][CHAR_DURABILITY] > 0)
{
Set_Player_Item_Repair(victim, item_id, g_iPlayerItemRepair[victim][item_id] - ( AmazonImpaleDurab[g_iAmazonSkills[attacker][SKILL_IMPALE] - 1]) );
}
}
}
new CsTeams:iTeam = cs_get_user_team(victim)
if( iTeam == cs_get_user_team(attacker) )
{
cs_set_user_team(victim, iTeam == CS_TEAM_T ? CS_TEAM_CT : CS_TEAM_T)
ExecuteHamB(Ham_TraceAttack, victim, attacker, damage, direction, traceresult, damagebits)
cs_set_user_team(victim, iTeam)
return HAM_SUPERCEDE;
}
}
}
}
return HAM_IGNORED;
}
public Start_poison_damage(Param[], victim)
{
victim -= TASKID_POISON;
new attacker = Param[0];
if ( !is_user_alive(victim) || !is_user_connected(attacker) )
return;
for(new item_id = 0; item_id <= g_charcounter ; item_id++)
{
Dmg_Kill_Player(victim, attacker, float(item_data[item_id][CHAR_PDAMAGE]), "poison");
}
client_printcolor(attacker, "damage")
}
public End_poison_damage(victim)
{
if ( task_exists( victim + TASKID_POISON ) )
{
if ( is_user_connected(victim) )
{
set_user_rendering(victim);
}
remove_task( victim + TASKID_POISON );
}
}
|