[svn] * Added freeze/unfreeze/listfreeze commands patch by toilet1 (I swear I didnt make up the name)

* Fixed a couple of spelling errors in TC conf file

--HG--
branch : trunk
This commit is contained in:
KingPin
2008-10-19 11:42:21 -05:00
parent bc05228d9f
commit d936f1bbd8
7 changed files with 208 additions and 2 deletions
+16
View File
@@ -0,0 +1,16 @@
-- add lang strings
DELETE FROM mangos_string WHERE entry BETWEEN 1000 AND 1006;
INSERT INTO mangos_string VALUES
(1000,'You froze player %s.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(1001,'It might be amusing but no... you cant freeze yourself!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(1002,'Invalid input check the name of target.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(1003,'You unfroze player %s.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(1004,'There are no frozen players.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(1005,'Following players are frozen on the server:',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
(1006,'- %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
-- add commands
DELETE FROM `command` WHERE `name` = 'freeze' or `name` = 'unfreeze' or name = 'listfreeze';
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('freeze','2','Syntax: .freeze (#player)\r\n\"Freezes\" #player and disables his chat. When using this without #name it will freeze your target.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('unfreeze','2','Syntax: .unfreeze (#player)\r\n\"Unfreezes\" #player and enables his chat again. When using this without #name it will unfreeze your target.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('listfreeze','1','Syntax: .listfreeze\r\n\r\nSearch and output all frozen players.');
+3
View File
@@ -472,6 +472,9 @@ ChatCommand * ChatHandler::getCommandTable()
{ "cometome", SEC_ADMINISTRATOR, &ChatHandler::HandleComeToMeCommand, "", NULL },
{ "damage", SEC_ADMINISTRATOR, &ChatHandler::HandleDamageCommand, "", NULL },
{ "combatstop", SEC_GAMEMASTER, &ChatHandler::HandleCombatStopCommand, "", NULL },
{ "freeze", SEC_ADMINISTRATOR, &ChatHandler::HandleFreezeCommand, "", NULL },
{ "unfreeze", SEC_ADMINISTRATOR, &ChatHandler::HandleUnFreezeCommand, "", NULL },
{ "listfreeze", SEC_ADMINISTRATOR, &ChatHandler::HandleListFreezeCommand, "", NULL },
{ "flusharenapoints", SEC_ADMINISTRATOR, &ChatHandler::HandleFlushArenaPointsCommand, "", NULL },
{ NULL, 0, NULL, "", NULL }
+3
View File
@@ -245,6 +245,9 @@ class ChatHandler
bool HandleMuteCommand(const char* args);
bool HandleUnmuteCommand(const char* args);
bool HandleMovegensCommand(const char* args);
bool HandleFreezeCommand(const char *args);
bool HandleUnFreezeCommand(const char *args);
bool HandleListFreezeCommand(const char* args);
bool HandleBanCommand(const char* args);
bool HandleUnBanCommand(const char* args);
+7
View File
@@ -659,6 +659,13 @@ enum TrinityStrings
// Room for in-game strings 810-999 not used
// FREE IDS 1000-9999
LANG_COMMAND_FREEZE = 1000,
LANG_COMMAND_FREEZE_ERROR = 1001,
LANG_COMMAND_FREEZE_WRONG = 1002,
LANG_COMMAND_UNFREEZE = 1003,
LANG_COMMAND_NO_FROZEN_PLAYERS = 1004,
LANG_COMMAND_LIST_FREEZE = 1005,
LANG_COMMAND_FROZEN_PLAYERS = 1006,
// Use for not-in-svn patches 10000-10999
// opvp hp
+176
View File
@@ -5507,6 +5507,182 @@ bool ChatHandler::HandleInstanceSaveDataCommand(const char * /*args*/)
return true;
}
bool ChatHandler::HandleFreezeCommand(const char *args)
{
std::string name;
Player* player;
char* TargetName = strtok((char*)args, " "); //get entered name
if (!TargetName) //if no name entered use target
{
player = getSelectedPlayer();
if (player) //prevent crash with creature as target
{
name = player->GetName();
normalizePlayerName(name);
}
}
else // if name entered
{
name = TargetName;
normalizePlayerName(name);
player = objmgr.GetPlayer(name.c_str()); //get player by name
}
if (!player)
{
SendSysMessage(LANG_COMMAND_FREEZE_WRONG);
return true;
}
if (player==m_session->GetPlayer())
{
SendSysMessage(LANG_COMMAND_FREEZE_ERROR);
return true;
}
//effect
if ((player) && (!(player==m_session->GetPlayer())))
{
PSendSysMessage(LANG_COMMAND_FREEZE,name.c_str());
//stop combat + make player unattackable + duel stop + stop some spells
player->setFaction(35);
player->CombatStop();
if(player->IsNonMeleeSpellCasted(true))
player->InterruptNonMeleeSpells(true);
player->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
player->SetUInt32Value(PLAYER_DUEL_TEAM, 1);
//if player class = hunter || warlock remove pet if alive
if((player->getClass() == CLASS_HUNTER) || (player->getClass() == CLASS_WARLOCK))
{
if(Pet* pet = player->GetPet())
{
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
// not let dismiss dead pet
if(pet && pet->isAlive())
player->RemovePet(pet,PET_SAVE_NOT_IN_SLOT);
}
}
//stop movement and disable spells
uint32 spellID = 9454;
//m_session->GetPlayer()->CastSpell(player,spellID,false);
SpellEntry const *spellInfo = sSpellStore.LookupEntry( spellID );
if(spellInfo) //TODO: Change the duration of the aura to -1 instead of 5000000
{
for(uint32 i = 0;i<3;i++)
{
uint8 eff = spellInfo->Effect[i];
if (eff>=TOTAL_SPELL_EFFECTS)
continue;
if( eff == SPELL_EFFECT_APPLY_AREA_AURA_PARTY || eff == SPELL_EFFECT_APPLY_AURA ||
eff == SPELL_EFFECT_PERSISTENT_AREA_AURA || eff == SPELL_EFFECT_APPLY_AREA_AURA_FRIEND ||
eff == SPELL_EFFECT_APPLY_AREA_AURA_ENEMY)
{
Aura *Aur = CreateAura(spellInfo, i, NULL, player);
player->AddAura(Aur);
}
}
}
//save player
player->SaveToDB();
}
return true;
}
bool ChatHandler::HandleUnFreezeCommand(const char *args)
{
std::string name;
Player* player;
char* TargetName = strtok((char*)args, " "); //get entered name
if (!TargetName) //if no name entered use target
{
player = getSelectedPlayer();
if (player) //prevent crash with creature as target
{
name = player->GetName();
}
}
else // if name entered
{
name = TargetName;
normalizePlayerName(name);
player = objmgr.GetPlayer(name.c_str()); //get player by name
}
//effect
if (player)
{
PSendSysMessage(LANG_COMMAND_UNFREEZE,name.c_str());
//Reset player faction + allow combat + allow duels
player->setFactionForRace(player->getRace());
player->RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
//allow movement and spells
uint32 spellID = 9454;
player->RemoveAurasDueToSpell(spellID);
//save player
player->SaveToDB();
}
if (!player)
{
if (TargetName)
{
//check for offline players
QueryResult *result = CharacterDatabase.PQuery("SELECT characters.guid FROM `characters` WHERE characters.name = '%s'",name.c_str());
if(!result)
{
SendSysMessage(LANG_COMMAND_FREEZE_WRONG);
return true;
}
//if player found: delete his freeze aura
Field *fields=result->Fetch();
uint64 pguid = fields[0].GetUInt64();
delete result;
CharacterDatabase.PQuery("DELETE FROM `character_aura` WHERE character_aura.spell = 9454 AND character_aura.guid = '%u'",pguid);
PSendSysMessage(LANG_COMMAND_UNFREEZE,name.c_str());
return true;
}
else
{
SendSysMessage(LANG_COMMAND_FREEZE_WRONG);
return true;
}
}
return true;
}
bool ChatHandler::HandleListFreezeCommand(const char* args)
{
//Get names from DB
QueryResult *result = CharacterDatabase.PQuery("SELECT characters.name FROM `characters` LEFT JOIN `character_aura` ON (characters.guid = character_aura.guid) WHERE character_aura.spell = 9454");
if(!result)
{
SendSysMessage(LANG_COMMAND_NO_FROZEN_PLAYERS);
return true;
}
//Header of the names
PSendSysMessage(LANG_COMMAND_LIST_FREEZE);
//Output of the results
do
{
Field *fields = result->Fetch();
std::string fplayers = fields[0].GetCppString();
PSendSysMessage(LANG_COMMAND_FROZEN_PLAYERS,fplayers.c_str());
} while (result->NextRow());
delete result;
return true;
}
bool ChatHandler::HandleFlushArenaPointsCommand(const char * /*args*/)
{
sBattleGroundMgr.DistributeArenaPoints();
+1
View File
@@ -287,6 +287,7 @@ void WorldSession::HandleLogoutRequestOpcode( WorldPacket & /*recv_data*/ )
//Can not logout if...
if( GetPlayer()->isInCombat() || //...is in combat
GetPlayer()->duel || //...is in Duel
GetPlayer()->HasAura(9454,0) || //...is frozen by GM via freeze command
//...is jumping ...is falling
GetPlayer()->HasUnitMovementFlag(MOVEMENTFLAG_JUMPING | MOVEMENTFLAG_FALLING))
{
+2 -2
View File
@@ -83,7 +83,7 @@ EAIErrorLevel = 2
# number (bitmask value of selected processors)
#
# ProcessPriority
# Process proirity setting (Used only at Windows)
# Process priority setting (Used only at Windows)
# Default: 1 (HIGH)
# 0 (Normal)
#
@@ -845,7 +845,7 @@ Visibility.Distance.Grey.Object = 10
# Rate.Drop.Item.Artifact
# Rate.Drop.Item.Referenced
# Rate.Drop.Money
# Drop rates (items by qualify and money)
# Drop rates (items by quality and money)
# Default: 1
#
# Rate.Drop.Money