View Single Post
  #4  
Old 03-28-2008, 05:30 PM
TheLieka
Developer
 
Join Date: Oct 2004
Location: THE ATL (wut wut)
Posts: 325
Default

.\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;
}
__________________
Daxum



Former ServerOp - Vallon Zek / Tallon Zek Emu Server - Legit / Guild PvP - (2007 - 2011 RIP)
Reply With Quote