zeiksz2
01-19-2008, 02:43 AM
having human warrior as first char from 1999 made me dislike to fight NPCs that can cast spells.. heals.. blinds.. slows.. so the cleric / shaman mobs. sure you can shield bash, if you do not miss, if you manage to bash them actually with stunning effect.
after stopping to play the "blind fool" i started elf cleric to see the other sight of this.. well.. i was interrupted by each and every hit of my enemies.. hard to regain concentration and such, but no warhamer was good enough to interrupt an enemy casting but the high mana cost stun spells (etc).
nahh well.. after "ballancing" the NPC melee for my own "fair-play"-taste i thought i take my revenge on those duhhh casters. so first thing i thought why not make them be so less good caster and have same chance on losing concentration
instead of having bad dreams of old-time-rememberings of some sabbertooth soothslayer lets modify the spells.cpp a bit
//if(IsClient())
//{
// // max 93% chance at 252 skill
//we give same chances to PC and NPC
//first we get base amount after channeling skill
if (IsClient())
{
channelchance = 30 + GetSkill(CHANNELING) / 400.0f * 100;
}
else
{
channelchance = 30 + (GetLevel() * 5) / 400.0f * 100;
}
//then we take some chance for each (max 15) slaps taken
channelchance -= attacked_count * 2;
//then we give some chance after AA skill
float mult;
if (IsClient())
{
mult = (GetAA(aaChanellingFocus)*5) / 100;
}
else
{
//NPC has no AA, so we "make" it after level to have almost the same chances
int szimulaa = 0;
if (GetLevel() > 59) { szimulaa++; }
if (GetLevel() > 55) { szimulaa++; }
if (GetLevel() > 51) { szimulaa++; }
}
channelchance += channelchance * mult;
//would be good to know what level attackers are, so we could make sure that lesser
//levels interrupt us with less chances, but this is alright so far
//} else {
// // NPCs are just hard to interrupt, otherwise they get pwned
// channelchance = 85;
// channelchance -= attacked_count;
//}
check the commented out source (should be commented out) in mob::casterspellfinished(...
the code is not pretty at all, but wanted to rip it this apart so the comments are ok and good looking.
next thing for me is to go for mobs' fizzling (all i got so far is a fizzle and they never ever casted spells, so i guess there is more in it.. some timer or such - no idea yet.. any suggestions please?)
after stopping to play the "blind fool" i started elf cleric to see the other sight of this.. well.. i was interrupted by each and every hit of my enemies.. hard to regain concentration and such, but no warhamer was good enough to interrupt an enemy casting but the high mana cost stun spells (etc).
nahh well.. after "ballancing" the NPC melee for my own "fair-play"-taste i thought i take my revenge on those duhhh casters. so first thing i thought why not make them be so less good caster and have same chance on losing concentration
instead of having bad dreams of old-time-rememberings of some sabbertooth soothslayer lets modify the spells.cpp a bit
//if(IsClient())
//{
// // max 93% chance at 252 skill
//we give same chances to PC and NPC
//first we get base amount after channeling skill
if (IsClient())
{
channelchance = 30 + GetSkill(CHANNELING) / 400.0f * 100;
}
else
{
channelchance = 30 + (GetLevel() * 5) / 400.0f * 100;
}
//then we take some chance for each (max 15) slaps taken
channelchance -= attacked_count * 2;
//then we give some chance after AA skill
float mult;
if (IsClient())
{
mult = (GetAA(aaChanellingFocus)*5) / 100;
}
else
{
//NPC has no AA, so we "make" it after level to have almost the same chances
int szimulaa = 0;
if (GetLevel() > 59) { szimulaa++; }
if (GetLevel() > 55) { szimulaa++; }
if (GetLevel() > 51) { szimulaa++; }
}
channelchance += channelchance * mult;
//would be good to know what level attackers are, so we could make sure that lesser
//levels interrupt us with less chances, but this is alright so far
//} else {
// // NPCs are just hard to interrupt, otherwise they get pwned
// channelchance = 85;
// channelchance -= attacked_count;
//}
check the commented out source (should be commented out) in mob::casterspellfinished(...
the code is not pretty at all, but wanted to rip it this apart so the comments are ok and good looking.
next thing for me is to go for mobs' fizzling (all i got so far is a fizzle and they never ever casted spells, so i guess there is more in it.. some timer or such - no idea yet.. any suggestions please?)