mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 06:21:28 +00:00
Added mod_spell_cast and various mod_functions fixes.
This commit is contained in:
parent
fa0196b987
commit
0ee54f1117
@ -812,6 +812,7 @@ public:
|
|||||||
int mod_buff_duration(int res, Mob* caster, Mob* target, uint16 spell_id);
|
int mod_buff_duration(int res, Mob* caster, Mob* target, uint16 spell_id);
|
||||||
int mod_spell_stack(uint16 spellid1, int caster_level1, Mob* caster1, uint16 spellid2, int caster_level2, Mob* caster2);
|
int mod_spell_stack(uint16 spellid1, int caster_level1, Mob* caster1, uint16 spellid2, int caster_level2, Mob* caster2);
|
||||||
int mod_spell_resist(int resist_chance, int level_mod, int resist_modifier, int target_resist, uint8 resist_type, uint16 spell_id, Mob* caster);
|
int mod_spell_resist(int resist_chance, int level_mod, int resist_modifier, int target_resist, uint8 resist_type, uint16 spell_id, Mob* caster);
|
||||||
|
void mod_spell_cast(uint16 spell_id, Mob* spelltar, bool reflect, bool use_resist_adjust, int16 resist_adjust, bool isproc);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillType attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic);
|
void CommonDamage(Mob* other, int32 &damage, const uint16 spell_id, const SkillType attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic);
|
||||||
|
|||||||
@ -662,8 +662,8 @@ int Mob::mod_effect_value(int effect_value, uint16 spell_id, int effect_type, Mo
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Shroud of the bear
|
//Shroud of the bear and Blood of the Master
|
||||||
if(caster->FindBuff(5045))
|
if(caster->FindBuff(5045) || caster->FindBuff(1169))
|
||||||
{
|
{
|
||||||
if(adval > 80) { caster->Message(315, "Shroud of bear nerf"); }
|
if(adval > 80) { caster->Message(315, "Shroud of bear nerf"); }
|
||||||
spadd = spadd * -1;
|
spadd = spadd * -1;
|
||||||
@ -969,24 +969,29 @@ int32 Mob::mod_cast_time(int32 cast_time) {
|
|||||||
|
|
||||||
//res - Default buff duration formula
|
//res - Default buff duration formula
|
||||||
int Mob::mod_buff_duration(int res, Mob* caster, Mob* target, uint16 spell_id) {
|
int Mob::mod_buff_duration(int res, Mob* caster, Mob* target, uint16 spell_id) {
|
||||||
if(!IsClient()) { return(res); }
|
//if(!IsClient()) { return(res); }
|
||||||
|
if(res <= 1) { return(res); }
|
||||||
|
if(!caster) { return(res); }
|
||||||
|
if(!caster->IsClient()) { return(res); }
|
||||||
|
|
||||||
float cmult = 1;
|
float cmult = 1;
|
||||||
|
|
||||||
if(GetClass() == BARD)
|
// caster->Message(315, "Duration: %d", res);
|
||||||
|
|
||||||
|
if(caster->GetClass() == BARD)
|
||||||
{
|
{
|
||||||
cmult = (float)(CastToClient()->GetActCHA() - DW_STATBASE) / 200;
|
cmult = (float)(caster->CastToClient()->GetActCHA() - DW_STATBASE) / 200;
|
||||||
}
|
}
|
||||||
else if(GetCasterClass() == 'W')
|
else if(caster->GetCasterClass() == 'W')
|
||||||
{
|
{
|
||||||
cmult = (float)(CastToClient()->GetActWIS() - DW_STATBASE) / 200;
|
cmult = (float)(caster->CastToClient()->GetActWIS() - DW_STATBASE) / 200;
|
||||||
}
|
}
|
||||||
else if(GetCasterClass() == 'I')
|
else if(caster->GetCasterClass() == 'I')
|
||||||
{
|
{
|
||||||
cmult = (float)(CastToClient()->GetActINT() - DW_STATBASE) / 200;
|
cmult = (float)(caster->CastToClient()->GetActINT() - DW_STATBASE) / 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmult += (float)(CastToClient()->GetActSTA() - DW_STATBASE) / 400;
|
cmult += (float)(caster->CastToClient()->GetActSTA() - DW_STATBASE) / 400;
|
||||||
|
|
||||||
if(cmult < 1) { cmult = 1; }
|
if(cmult < 1) { cmult = 1; }
|
||||||
|
|
||||||
@ -1068,6 +1073,38 @@ int Mob::mod_spell_resist(int resist_chance, int level_mod, int resist_modifier,
|
|||||||
return(final);
|
return(final);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Spell is cast by this on spelltar, called from spellontarget after the event_cast_on NPC event
|
||||||
|
void Mob::mod_spell_cast(uint16 spell_id, Mob* spelltar, bool reflect, bool use_resist_adjust, int16 resist_adjust, bool isproc)
|
||||||
|
{
|
||||||
|
float cval = 5;
|
||||||
|
|
||||||
|
if(!IsClient()) { return; }
|
||||||
|
if(GetClass() == WIZARD)
|
||||||
|
{
|
||||||
|
cval += (float)(CastToClient()->GetActINT() - DW_STATBASE) / 100;
|
||||||
|
cval += (float)(CastToClient()->GetActDEX() - DW_STATBASE) / 100;
|
||||||
|
cval += (float)(CastToClient()->GetActCHA() - DW_STATBASE) / 100;
|
||||||
|
|
||||||
|
if(MakeRandomFloat(0, 99) < cval)
|
||||||
|
{
|
||||||
|
Message(14, "You channel addition power into the spell!");
|
||||||
|
SpellOnTarget(spell_id, spelltar, reflect, use_resist_adjust, resist_adjust, isproc);
|
||||||
|
|
||||||
|
if(MakeRandomFloat(0, 99) < cval)
|
||||||
|
{
|
||||||
|
Message(14, "You continue to channel additional power!");
|
||||||
|
SpellOnTarget(spell_id, spelltar, reflect, use_resist_adjust, resist_adjust, isproc);
|
||||||
|
|
||||||
|
if(MakeRandomFloat(0, 99) < cval)
|
||||||
|
{
|
||||||
|
Message(14, "You apply the full force of your concentration into the spell!");
|
||||||
|
SpellOnTarget(spell_id, spelltar, reflect, use_resist_adjust, resist_adjust, isproc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//This is called right before regular event processing (the switch block)
|
//This is called right before regular event processing (the switch block)
|
||||||
void PerlembParser::mod_quest_event(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob, uint32 extradata, bool global, std::string packagename) {
|
void PerlembParser::mod_quest_event(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob, uint32 extradata, bool global, std::string packagename) {
|
||||||
NPC *tnpc = 0;
|
NPC *tnpc = 0;
|
||||||
|
|||||||
@ -3077,6 +3077,8 @@ bool Mob::SpellOnTarget(uint16 spell_id, Mob* spelltar, bool reflect, bool use_r
|
|||||||
parse->EventNPC(EVENT_CAST_ON, spelltar->CastToNPC(), this, temp1, 0);
|
parse->EventNPC(EVENT_CAST_ON, spelltar->CastToNPC(), this, temp1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod_spell_cast(spell_id, spelltar, reflect, use_resist_adjust, resist_adjust, isproc);
|
||||||
|
|
||||||
// now check if the spell is allowed to land
|
// now check if the spell is allowed to land
|
||||||
|
|
||||||
// invuln mobs can't be affected by any spells, good or bad
|
// invuln mobs can't be affected by any spells, good or bad
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user