aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2012-09-01 22:19:13 +0100
committerNay <dnpd.dd@gmail.com>2012-09-01 22:19:13 +0100
commit2e1de60593fda0c1ad766fb0333a1992b17c35b9 (patch)
tree90d942b50b5f43676391192d6e2e81ed7c513b5d /src/server/game
parentd218afa19849e1be810bb06c96402cff956dc036 (diff)
parenta7dd289b04e3a9d0337fb5b6db3fc7a70f670933 (diff)
Merge remote-tracking branch 'origin/master' into 4.3.4
Conflicts: src/server/game/Entities/Player/Player.cpp src/server/scripts/Commands/cs_misc.cpp src/server/worldserver/worldserver.conf.dist
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h17
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp6
-rwxr-xr-xsrc/server/game/Scripting/ScriptLoader.cpp2
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp23
-rw-r--r--src/server/game/Spells/SpellEffects.cpp4
7 files changed, 53 insertions, 5 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 9edf161b8de..c24ba16475e 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -846,6 +846,8 @@ Player::Player(WorldSession* session): Unit(true), m_achievementMgr(this), m_rep
m_SeasonalQuestChanged = false;
SetPendingBind(0, 0);
+
+ _activeCheats = CHEAT_NONE;
memset(_voidStorageItems, 0, VOID_STORAGE_MAX_SLOT * sizeof(VoidStorageItem*));
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index f058b35fb5a..c4047485033 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -875,6 +875,16 @@ enum PlayerRestState
REST_STATE_RAF_LINKED = 0x06
};
+enum PlayerCommandStates
+{
+ CHEAT_NONE = 0x00,
+ CHEAT_GOD = 0x01,
+ CHEAT_CASTTIME = 0x02,
+ CHEAT_COOLDOWN = 0x04,
+ CHEAT_POWER = 0x08,
+ CHEAT_WATERWALK = 0x10
+};
+
class PlayerTaxi
{
public:
@@ -1196,6 +1206,11 @@ class Player : public Unit, public GridObject<Player>
void InitStatsForLevel(bool reapplyMods = false);
+ // .cheat command related
+ bool GetCommandStatus(uint32 command) const { return _activeCheats & command; }
+ void SetCommandStatusOn(uint32 command) { _activeCheats |= command; }
+ void SetCommandStatusOff(uint32 command) { _activeCheats &= ~command; }
+
// Played Time Stuff
time_t m_logintime;
time_t m_Last_tick;
@@ -2936,6 +2951,8 @@ class Player : public Unit, public GridObject<Player>
InstanceTimeMap _instanceResetTimes;
uint32 _pendingBindId;
uint32 _pendingBindTimer;
+
+ uint32 _activeCheats;
};
void AddItemsSetItem(Player*player, Item* item);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 19c522eff87..8c372bad34a 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -544,6 +544,10 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam
if (IsAIEnabled)
GetAI()->DamageDealt(victim, damage, damagetype);
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ if (victim->ToPlayer()->GetCommandStatus(CHEAT_GOD))
+ return 0;
+
// Signal to pets that their owner was attacked
if (victim->GetTypeId() == TYPEID_PLAYER)
{
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 649f09ad212..c7b66381158 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -740,11 +740,7 @@ void WorldSession::HandleCharDeleteOpcode(WorldPacket & recvData)
{
std::string dump;
if (PlayerDumpWriter().GetDump(GUID_LOPART(guid), dump))
- {
- std::ostringstream ss;
- ss << GetAccountId() << '_' << name.c_str();
- sLog->outCharDump(ss.str().c_str(), dump.c_str(), GetAccountId(), GUID_LOPART(guid), name.c_str());
- }
+ sLog->outCharDump(dump.c_str(), GetAccountId(), GUID_LOPART(guid), name.c_str());
}
Player::DeleteFromDB(guid, GetAccountId());
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index e7d203c9bc1..e05f35ffbf7 100755
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -50,6 +50,7 @@ void AddSC_ban_commandscript();
void AddSC_bf_commandscript();
void AddSC_cast_commandscript();
void AddSC_character_commandscript();
+void AddSC_cheat_commandscript();
void AddSC_debug_commandscript();
void AddSC_disable_commandscript();
void AddSC_event_commandscript();
@@ -658,6 +659,7 @@ void AddCommandScripts()
AddSC_bf_commandscript();
AddSC_cast_commandscript();
AddSC_character_commandscript();
+ AddSC_cheat_commandscript();
AddSC_debug_commandscript();
AddSC_disable_commandscript();
AddSC_event_commandscript();
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 9dd1d30f3ac..f5e5572734b 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -3001,7 +3001,13 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered
// calculate cast time (calculated after first CheckCast check to prevent charge counting for first CheckCast fail)
m_casttime = m_spellInfo->CalcCastTime(m_caster, this);
if (m_caster->GetTypeId() == TYPEID_PLAYER)
+ {
m_caster->ToPlayer()->SetSpellModTakingSpell(this, false);
+
+ // Set casttime to 0 if .cheat casttime is enabled.
+ if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_CASTTIME))
+ m_casttime = 0;
+ }
// don't allow channeled spells / spells with cast time to be casted while moving
// (even if they are interrupted on moving, spells with almost immediate effect get to have their effect processed before movement interrupter kicks in)
@@ -3293,7 +3299,13 @@ void Spell::cast(bool skipCheck)
}
if (m_caster->GetTypeId() == TYPEID_PLAYER)
+ {
m_caster->ToPlayer()->SetSpellModTakingSpell(this, false);
+
+ //Clear spell cooldowns after every spell is cast if .cheat cooldown is enabled.
+ if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_COOLDOWN))
+ m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true);
+ }
SetExecutedCurrently(false);
}
@@ -4333,6 +4345,13 @@ void Spell::TakePower()
if (m_CastItem || m_triggeredByAuraSpell)
return;
+ //Don't take power if the spell is cast while .cheat power is enabled.
+ if (m_caster->GetTypeId() == TYPEID_PLAYER)
+ {
+ if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_POWER))
+ return;
+ }
+
Powers powerType = Powers(m_spellInfo->PowerType);
bool hit = true;
if (m_caster->GetTypeId() == TYPEID_PLAYER)
@@ -7155,6 +7174,10 @@ void Spell::TriggerGlobalCooldown()
if (!gcd)
return;
+ if (m_caster->GetTypeId() == TYPEID_PLAYER)
+ if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_COOLDOWN))
+ return;
+
// Global cooldown can't leave range 1..1.5 secs
// There are some spells (mostly not casted directly by player) that have < 1 sec and > 1.5 sec global cooldowns
// but as tests show are not affected by any spell mods.
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 8396cd8b94c..8369a1b61c5 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -295,6 +295,10 @@ void Spell::EffectInstaKill(SpellEffIndex /*effIndex*/)
if (!unitTarget || !unitTarget->isAlive())
return;
+ if (unitTarget->GetTypeId() == TYPEID_PLAYER)
+ if (unitTarget->ToPlayer()->GetCommandStatus(CHEAT_GOD))
+ return;
+
if (m_caster == unitTarget) // prevent interrupt message
finish();