.\zone\spdat.h
After:
	Code:
	int GetMinLevel(int16 spell_id);
int CalcBuffDuration_formula(int level, int formula, int duration);
sint32 CalculatePoisonCounters(int16 spell_id);
sint32 CalculateDiseaseCounters(int16 spell_id);
sint32 CalculateCurseCounters(int16 spell_id);
bool IsDiscipline(int16 spell_id);
bool IsResurrectionEffects(int16 spell_id);
bool IsRuneSpell(int16 spell_id);
bool IsMagicRuneSpell(int16 spell_id);
 Add:
	Code:
	bool IsShadowStepSpell(int16 spell_id);
bool IsSuccorSpell(int16 spell_id);
bool IsTeleportSpell(int16 spell_id);
bool IsGateSpell(int16 spell_id);
 .\zone\spdat.cpp
After:
	Code:
	bool IsRuneSpell(int16 spell_id) {
	bool Result = false;
	if(IsValidSpell(spell_id)) {
		for(int i = 0; i < EFFECT_COUNT; i++) {
			if(spells[spell_id].effectid[i] == SE_Rune) {
				Result = true;
				break;
			}
		}
	}
	return Result;
}
 Add:
	Code:
	bool IsShadowStepSpell(int16 spell_id) {
	if (IsEffectInSpell(spell_id, SE_ShadowStep)){
		return true;
	}
	else {
		return false;
	}
}
bool IsSuccorSpell(int16 spell_id) {
	if (IsEffectInSpell(spell_id, SE_Succor)){
		return true;
	}
	else {
		return false;
	}
}
bool IsTeleportSpell(int16 spell_id) {
	if (IsEffectInSpell(spell_id, SE_Teleport)){
		return true;
	}
	else {
		return false;
	}
}
bool IsGateSpell(int16 spell_id) {
	if (IsEffectInSpell(spell_id, SE_Gate)){
		return true;
	}
	else {
		return false;
	}
}
 
.\zone\spell_effects.cpp
Change (Insert Red Lines):
	Code:
				case SE_SummonPC:
			{
				if(IsClient()){
					CastToClient()->cheat_timer.Start(3500, false);  //Lieka:  Exempt spells the "SummonPC" effect from triggering the MQWarp detector.
					CastToClient()->MovePC(zone->GetZoneID(), caster->GetX(), caster->GetY(), caster->GetZ(), caster->GetHeading(), 2, SummonPC);
					Message(15, "You have been summoned!");
				} else {
					caster->Message(13, "This spell can only be cast on players.");
				}
				break;
			}
 .\zone\spells.cpp
Change (Insert Red Lines):
	Code:
		if(bard_song_mode)
	{
		if(IsClient())
		{
			this->CastToClient()->CheckSongSkillIncrease(spell_id);
			//Lieka start Edit:  Fixing Warp Detector triggered for Bard Songs
			if ((IsGateSpell(spell_id)) ||//Lieka Edit Begin:  Checking effects within the spell, rather than hardcoding Spell IDs.
				(IsTeleportSpell(spell_id)) ||
				(IsSuccorSpell(spell_id)) ||
				(IsShadowStepSpell(spell_id)) ||
				(IsGateSpell(spell_id)))
				{
						this->cheat_timer.Start(2000,false);  //Lieka:  Exempt above effects from setting off MQWarp detector due to intrazone movement generated from the bard song effects
				}
				//Lieka end edit.
		}
		// go again in 6 seconds
//this is handled with bardsong_timer
//		DoCastSpell(casting_spell_id, casting_spell_targetid, casting_spell_slot, 6000, casting_spell_mana);
		mlog(SPELLS__CASTING, "Bard song %d should be started", spell_id);
	}
	else
 After:
	Code:
		else
	{
		if(IsClient())
		{
			Client *c = CastToClient();
			SendSpellBarEnable(spell_id);
			// this causes the delayed refresh of the spell bar gems
			c->MemorizeSpell(slot, spell_id, memSpellSpellbar);
			// this tells the client that casting may happen again
			SetMana(GetMana());
			// skills
			if(slot < MAX_PP_MEMSPELL)
			{
				c->CheckIncreaseSkill(spells[spell_id].skill);
				
				// increased chance of gaining channel skill if you regained concentration
				c->CheckIncreaseSkill(CHANNELING, regain_conc ? 5 : 0);
				
				c->CheckSpecializeIncrease(spell_id);
			}
 Add:
	Code:
				if ((IsGateSpell(spell_id)) ||//Lieka Edit Begin:  Checking effects within the spell, rather than hardcoding Spell IDs.
				(IsTeleportSpell(spell_id)) ||
				(IsSuccorSpell(spell_id)) ||
				(IsShadowStepSpell(spell_id)) ||
				(IsGateSpell(spell_id)))
				{
				c->cheat_timer.Start(2000,false); //Lieka:  Exempt above effects from setting off MQWarp detector due to intrazone movement generated from the spell effects
				}
 After:
	Code:
		if	// Bind Sight line of spells 
	(
		spell_id == 500 || 	// bind sight
		spell_id == 407 		// cast sight
	)
	{ 
		action->target = GetID(); 
	} 
	else
	{ 
		action->target = spelltar->GetID(); 
	} 
	action->level = caster_level;	// caster level, for animation only
	action->type = 231;	// 231 means a spell
	action->spell = spell_id;
	action->sequence = (int32) (GetHeading() * 2);	// just some random number
	action->instrument_mod = GetInstrumentMod(spell_id);
	action->buff_unknown = 0;
 Add:
	Code:
			//Lieka start Edit:  Fixing Warp Detector triggered by spells cast on the player.
	if ((IsGateSpell(spell_id)) ||//Lieka Edit Begin:  Checking effects within the spell, rather than hardcoding Spell IDs.
		(IsTeleportSpell(spell_id)) ||
		(IsSuccorSpell(spell_id)) ||
		(IsShadowStepSpell(spell_id)) ||
		(IsGateSpell(spell_id)))
		{
				spelltar->cheat_timer.Start(2000,false); //Lieka:  Exempt above effects from setting off MQWarp detector due to intrazone movement generated from the spell effects
		}
		//Lieka end edit.
 .\zone\zone.h
Change:
	Code:
		ZonePoint* GetClosestZonePoint(float x, float y, float z, int32	to, float max_distance = 40000.0f);
 To:
	Code:
	ZonePoint* GetClosestZonePoint(float x, float y, float z, int32	to, float max_distance = 40000.0f, Client* client = NULL);
 
.\zone\zone.cpp
Change:
	Code:
	ZonePoint* Zone::GetClosestZonePoint(float x, float y, float z, int32 to, float max_distance) {
 To:
	Code:
	ZonePoint* Zone::GetClosestZonePoint(float x, float y, float z, int32 to, float max_distance, Client* client) {
 Change (Insert Red Lines):
	Code:
		if(closest_dist>(200.0f*200.0f) && closest_dist<max_distance2)
	{
		client->CheatDetected(MQZone); //[Paddy] Someone is trying to use /zone
		LogFile->write(EQEMuLog::Status, "WARNING: Closest zone point for zone id %d is %f, you might need to update your zone_points table if you dont arrive at the right spot.",to,closest_dist);
		LogFile->write(EQEMuLog::Status, "<Real Zone Points>.  %f x %f y %fz ",x,y,z);
		//worldserver.SendEmoteMessage(0,0,0,13,"<Real Zone Points>.  %f x %f y %fz ",x,y,z);
		closest_zp = NULL; //Lieka:  Prevent the zone request from happening.
	}
	if(closest_dist > max_distance2)
		closest_zp = NULL;
	
	if(!closest_zp)
		closest_zp = GetClosestZonePointWithoutZone(x,y,z);
	return closest_zp;
}