View Single Post
  #17  
Old 12-27-2013, 12:25 AM
haggzor
Fire Beetle
 
Join Date: Nov 2010
Location: Cincinnati, OH
Posts: 27
Default

Alright, well I figured out one thing. This is the line of code that's causing Harm Touch to fail (client_packet.cpp line 4623, Handle_OP_CastSpell method):

Code:
		
if(castspell->slot < MAX_PP_MEMSPELL)
		{
			LogFile->write(EQEMuLog::Debug, "Slot [%d] is less than MAX_PP_MEMSPELL [%d]", castspell->slot, MAX_PP_MEMSPELL);

			spell_to_cast = m_pp.mem_spells[castspell->slot];
			if(spell_to_cast != castspell->spell_id)
			{
				LogFile->write(EQEMuLog::Debug, "Code thinks I'm a cheater because [%d] does not equal [%d]", spell_to_cast, castspell->spell_id);

				InterruptSpell(castspell->spell_id); //CHEATER!!!
				return;
			}
		}
		else {
			LogFile->write(EQEMuLog::Debug, "Slot [%d] is greater than or equal to MAX_PP_MEMSPELL [%d]", castspell->slot, MAX_PP_MEMSPELL);

			InterruptSpell();
			return;
		}
In eq_packet_structs, you can see that MAX_PP_MEMSPELL is set to 9.

Code:
static const uint32 MAX_PP_MEMSPELL		= 9;
In the comments for Harm Touch and LoH it mentions that it's assuming that the spell slot is going to be 8, which is not correct in the Titanium client. LoH and Harm Touch are spell slot 9 (ABILITY_SLOT).

Does anyone know what the MAX_PP_MEMSPELL represents? I haven't been able to figure that one out yet. My assumption is that it represents a separation between memorized spells and ability/discipline/item spells (which are all handled individually).

Basically, as long as that value is set to 9 and Harm Touch is coming in on spell slot 9, it automatically goes to interruptSpell, which is why it's not working. My guess is that this block needs an additional elseif specifically for Abilities that are being processed as spells, such as LoH and Harm Touch.

Any input would be wonderful!
Reply With Quote