![]() |
|
|
|
#1
|
|||
|
They posted today that NPC bash rate is 100%, will be fixed.
| ||
|
|
|||
|
#2
|
|||
|
Can we please get this server rolling soon lol. Been longing for this for years
__________________
Laven Crackbringer | Level 56 High Elf Enchanter of Tunare |Blue|
Tyrenell Stormrage | Level 58 Human Druid of Tunare |Blue| Nazaruul | Level 55 Dark Elf Necromancer of Innoruuk |Green| | ||
|
|
|||
|
#3
|
||||
|
Quote:
Here's the formula. It matches logs Torven has (and actually, Torven was the one who wrote this formula) Code:
// this is precise for the vast majority of NPCs
// at some point around level 61, base stun chance goes from 45 to 40. not sure why
int stun_chance = 45;
int defenderLevel = defender->GetLevel();
int levelDiff = GetLevel() - defenderLevel;
if (GetLevel() > 60)
stun_chance = 40;
if (levelDiff < 0)
{
stun_chance -= levelDiff * levelDiff / 2;
}
else
{
stun_chance += levelDiff * levelDiff / 2;
}
if (stun_chance < 2)
stun_chance = 2;
if (defender->IsNPC() && defenderLevel > RuleI(Spells, BaseImmunityLevel))
stun_chance = 0;
if (stun_chance && zone->random.Roll(stun_chance))
{
Log(Logs::Detail, Logs::Combat, "Stun passed, checking resists. Was %d chance.", stun_chance);
int stun_resist = 0;
if (defender->IsClient())
{
stun_resist = defender->aabonuses.StunResist; // Stalwart Endurance AA
}
if (defender->GetBaseRace() == OGRE && !BehindMob(defender, GetX(), GetY())) // should this work if the ogre is illusioned?
{
Log(Logs::Detail, Logs::Combat, "Frontal stun resisted because, Ogre.");
}
else
{
if (stun_resist && zone->random.Roll(stun_resist))
{
defender->Message_StringID(MT_DefaultText, AVOID_STUN);
Log(Logs::Detail, Logs::Combat, "Stun Resisted. %d chance.", stun_resist);
}
else
{
Log(Logs::Detail, Logs::Combat, "Stunned. %d resist chance.", stun_resist);
defender->Stun(2000, this); // bash/kick stun is always 2 seconds
}
}
}
else
{
Log(Logs::Detail, Logs::Combat, "Stun failed. %d chance.", stun_chance);
// This is a crude approximation of interrupt chance based on old EQ log parses
int interruptChance = 100;
if (IsNPC() && !IsPet())
{
if (GetLevel() < defenderLevel)
interruptChance = 80; // Daybreak recently confirmed this 80% chance
}
else if (defender->IsNPC())
{
int levelDiff = GetLevel() - defenderLevel;
interruptChance += levelDiff * 10;
if (defenderLevel > 65 && interruptChance > 0)
interruptChance = 2;
else if (defenderLevel > 55)
interruptChance /= 2;
else if (defenderLevel > 50)
interruptChance = 3 * interruptChance / 4;
}
Log(Logs::Detail, Logs::Combat, "Non-stunning bash/kick interrupt roll: chance = %i", interruptChance);
if (zone->random.Roll(interruptChance))
{
if (IsValidSpell(defender->casting_spell_id) && !spells[defender->casting_spell_id].uninterruptable)
{
Log(Logs::Detail, Logs::Combat, "Non-stunning bash/kick successfully interrupted spell");
defender->InterruptSpell(SPELL_UNKNOWN, true);
}
}
}
Code:
// 3 second flee stun check. NPCs can stun players who are running away from them. 10% chance on hit
if (spell_id == SPELL_UNKNOWN && damage > 0 && other && other->IsNPC() && !other->IsPet() && other->GetLevel() > 4 && EQ::skills::IsMeleeWeaponSkill(attack_skill))
{
if (animation > 0 && zone->random.Roll(10) && other->BehindMob(this, other->GetX(), other->GetY()))
{
int stun_resist = aabonuses.StunResist;
if (!stun_resist || zone->random.Roll(100 - stun_resist))
{
if (CombatRange(other, 0.0f, false, true)) {
Log(Logs::Detail, Logs::Combat, "3 second flee stun sucessful");
Stun(3000, other);
}
}
else
{
Log(Logs::Detail, Logs::Combat, "Stun Resisted. %d chance.", stun_resist);
Message_StringID(MT_DefaultText, AVOID_STUN);
}
}
}
__________________
Engineer of Things and Stuff, Wearer of Many Hats
“Knowing yourself is the beginning of all wisdom.” — Aristotle | |||
|
|
||||
|
#5
|
||||
|
Quote:
__________________
go go go
| |||
|
|
||||
|
#6
|
|||
|
He has the defense skill of a level 2 at level 16. Of course he's not going to tank well.
Defense being hard to raise if you neglect it is a very, very well known phenomenon and is entirely accurate. Our skill-up difficulty values are pulled from the client. If you don't keep up with raising the skill then it becomes very hard to raise because it can only raise on a successful miss. If the skill is near zero then mobs will almost never miss you if your skill is super low and you keep leveling. The math on avoidance is precise. In fact I always tell new players that they absolutely need to tank level 1 mobs to max defensive skill once they hit level 4 otherwise they'll outpace their skill and won't be able to raise it without arena visits. On severs with experience bonuses you'll notice this more because you out-level your skillup rate. Quarm has the 20% bonus on at least. Incidentally the cast time on the level 16 nuke is 2.5 seconds and NPC attack delays at low levels is 3 seconds. | ||
|
|
|||
|
#7
|
||||
|
Quote:
-Make sure to work on Defense skill early. -Upon death at level 9 you spawn at bind point with full gear and no exp loss. -Upon death at level 10 you spawn without gear but still no exp loss. -Upon death at level 11 you spawn without gear and begin to lose exp upon death. Plan accordingly and get those Defense skill points early prior to level 9 and level 10 so you don't end up with a high level character with very low Defense skill. | |||
|
|
||||
|
#8
|
||||
|
Quote:
Defense skills faster at lvl 4 if you have a full set of cloth armor. A full set costs 2.5p. Defense skills on successfully mitigation ac rolls. If you have nothing but the 2ac newbie shirt, that 2 AC is the only thing generating successful mitigation checks. I parsed this about 20 times during beta. If you want to skill defense, get suited up in cloth. | |||
|
|
||||
|
#9
|
||||
|
Quote:
| |||
|
|
||||
|
#10
|
||||
|
Quote:
| |||
|
|
||||
![]() |
|
|