[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:
@@ -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.');
|
||||
@@ -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 }
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user