Browse Source

Support for tradeskills resist/failure to happen less often against the mastery skill, additional work for Issue #279

Emagi 1 year ago
parent
commit
3ee72ae22e
2 changed files with 11 additions and 5 deletions
  1. 7 3
      EQ2/source/WorldServer/Combat.cpp
  2. 4 2
      EQ2/source/WorldServer/SpellProcess.cpp

+ 7 - 3
EQ2/source/WorldServer/Combat.cpp

@@ -713,10 +713,14 @@ int8 Entity::DetermineHit(Spawn* victim, int8 damage_type, float ToHitBonus, boo
 			int32 master_skill_reduce = rule_manager.GetGlobalRule(R_Spells, MasterSkillReduceSpellResist)->GetInt32();
 			if(master_skill_reduce < 1)
 				master_skill_reduce = 25;
+			if(IsPlayer() && lua_spell->spell->GetSpellData()->spell_book_type == SPELL_BOOK_TYPE_TRADESKILL && 
+			   !((Player*)this)->GetSkills()->HasSkill(lua_spell->spell->GetSpellData()->mastery_skill)) {
+				((Player*)this)->AddSkill(lua_spell->spell->GetSpellData()->mastery_skill, 1, ((Player*)this)->GetLevel() * 5, true);
+			}
 			
-			Skill* master_skill = GetSkillByID(lua_spell->spell->GetSpellData()->mastery_skill, false);
-			if(master_skill && (master_skill->name.data == "Subjugation" || master_skill->name.data == "Disruption" || 
-				master_skill->name.data == "Ordination" || master_skill->name.data == "Aggression")) {
+			Skill* master_skill = GetSkillByID(lua_spell->spell->GetSpellData()->mastery_skill, true);
+			if(master_skill && (lua_spell->spell->GetSpellData()->spell_book_type == SPELL_BOOK_TYPE_TRADESKILL || 
+			  ((master_skill->name.data == "Subjugation" || master_skill->name.data == "Disruption" || master_skill->name.data == "Ordination" || master_skill->name.data == "Aggression")))) {
 				bonus += master_skill->current_val / master_skill_reduce;
 			}
 		}

+ 4 - 2
EQ2/source/WorldServer/SpellProcess.cpp

@@ -1768,8 +1768,10 @@ bool SpellProcess::CastProcessedSpell(LuaSpell* spell, bool passive, bool in_her
 	}
 
 	// if the caster is a player and the spell is a tradeskill spell check for a tradeskill event
-	if (client && spell->spell->GetSpellData()->spell_book_type == SPELL_BOOK_TYPE_TRADESKILL)
-		client->GetCurrentZone()->GetTradeskillMgr()->CheckTradeskillEvent(client, spell->spell->GetSpellData()->icon);
+	if (client && spell->spell->GetSpellData()->spell_book_type == SPELL_BOOK_TYPE_TRADESKILL) {
+		spell->resisted = (spell->caster->DetermineHit(target ? target : spell->caster, 255, 0, true, spell) == DAMAGE_PACKET_RESULT_RESIST);
+		client->GetCurrentZone()->GetTradeskillMgr()->CheckTradeskillEvent(client, spell->resisted ? 0 : spell->spell->GetSpellData()->icon);
+	}
 
 
 	if (spell->spell->GetSpellData()->friendly_spell && zone->GetSpawnByID(spell->initial_target))