Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Server Code Submissions

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #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
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 01:44 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3