From 051d6ef9259915f81651c1e5b9ba30c1b3b6139c Mon Sep 17 00:00:00 2001 From: Ascathor Date: Sun, 19 May 2013 19:57:14 +0200 Subject: Core/Command: Rework PInfo and give more output and add Gender to trinity_string * Prints out in several strings instead of few * Leaves unnecessary ones out (e.g. phase for GMs) * Some code documentation included (including doxygen) * Cleaner code (partly) * Prints more content, e.g.: ** Localized Class- and Race names ** Localizable Gender names ** Current experience, required experience ** And more Shoutouts to @Nay, @Subv, @Shauren and several others from the irc Core/Command: Rework PInfo and give more output and add Gender to trinity_string --- src/server/shared/Database/Implementation/CharacterDatabase.cpp | 6 +++++- src/server/shared/Database/Implementation/CharacterDatabase.h | 2 ++ src/server/shared/Database/Implementation/LoginDatabase.cpp | 2 +- src/server/shared/Database/Implementation/WorldDatabase.cpp | 2 ++ src/server/shared/Database/Implementation/WorldDatabase.h | 1 + 5 files changed, 11 insertions(+), 2 deletions(-) (limited to 'src/server/shared/Database/Implementation') diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 2e6ab10b087..4f8a32aa950 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -421,8 +421,12 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHAR_DEL_INFO_BY_NAME, "SELECT guid, deleteInfos_Name, deleteInfos_Account, deleteDate FROM characters WHERE deleteDate IS NOT NULL AND deleteInfos_Name LIKE CONCAT('%%', ?, '%%')", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_DEL_INFO, "SELECT guid, deleteInfos_Name, deleteInfos_Account, deleteDate FROM characters WHERE deleteDate IS NOT NULL", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHARS_BY_ACCOUNT_ID, "SELECT guid FROM characters WHERE account = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_SEL_CHAR_PINFO, "SELECT totaltime, level, money, account, race, class, map, zone FROM characters WHERE guid = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_CHAR_PINFO, "SELECT totaltime, level, money, account, race, class, map, zone, gender FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_PINFO_BANS, "SELECT unbandate, bandate = unbandate, bannedby, banreason FROM character_banned WHERE guid = ? AND active ORDER BY bandate ASC LIMIT 1", CONNECTION_SYNCH); + //0: lowGUID + PrepareStatement(CHAR_SEL_PINFO_MAILS, "SELECT SUM(CASE WHEN (checked & 1) THEN 1 ELSE 0 END) AS 'readmail', COUNT(*) AS 'totalmail' FROM mail WHERE `receiver` = ?", CONNECTION_SYNCH); + //0: lowGUID + PrepareStatement(CHAR_SEL_PINFO_XP, "SELECT xp FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_HOMEBIND, "SELECT mapId, zoneId, posX, posY, posZ FROM character_homebind WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_GUID_NAME_BY_ACC, "SELECT guid, name FROM characters WHERE account = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_POOL_QUEST_SAVE, "SELECT quest_id FROM pool_quest_save WHERE pool_id = ?", CONNECTION_SYNCH); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index 59ac15978b6..362bb3545df 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -365,6 +365,8 @@ enum CharacterDatabaseStatements CHAR_SEL_CHARS_BY_ACCOUNT_ID, CHAR_SEL_CHAR_PINFO, + CHAR_SEL_PINFO_XP, + CHAR_SEL_PINFO_MAILS, CHAR_SEL_PINFO_BANS, CHAR_SEL_CHAR_HOMEBIND, CHAR_SEL_CHAR_GUID_NAME_BY_ACC, diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp index 0118f637205..6113dd61d70 100644 --- a/src/server/shared/Database/Implementation/LoginDatabase.cpp +++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp @@ -79,7 +79,7 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_GET_USERNAME_BY_ID, "SELECT username FROM account WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_CHECK_PASSWORD, "SELECT 1 FROM account WHERE id = ? AND sha_pass_hash = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_CHECK_PASSWORD_BY_NAME, "SELECT 1 FROM account WHERE username = ? AND sha_pass_hash = ?", CONNECTION_SYNCH); - PrepareStatement(LOGIN_SEL_PINFO, "SELECT a.username, aa.gmlevel, a.email, a.last_ip, DATE_FORMAT(a.last_login, '%Y-%m-%d %T'), a.mutetime, a.mutereason, a.muteby FROM account a LEFT JOIN account_access aa ON (a.id = aa.id AND (aa.RealmID = ? OR aa.RealmID = -1)) WHERE a.id = ?", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_PINFO, "SELECT a.username, aa.gmlevel, a.email, a.last_ip, DATE_FORMAT(a.last_login, '%Y-%m-%d %T'), a.mutetime, a.mutereason, a.muteby, a.failed_logins, a.locked, a.OS FROM account a LEFT JOIN account_access aa ON (a.id = aa.id AND (aa.RealmID = ? OR aa.RealmID = -1)) WHERE a.id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_PINFO_BANS, "SELECT unbandate, bandate = unbandate, bannedby, banreason FROM account_banned WHERE id = ? AND active ORDER BY bandate ASC LIMIT 1", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_GM_ACCOUNTS, "SELECT a.username, aa.gmlevel FROM account a, account_access aa WHERE a.id=aa.id AND aa.gmlevel >= ? AND (aa.realmid = -1 OR aa.realmid = ?)", CONNECTION_SYNCH); PrepareStatement(LOGIN_SEL_ACCOUNT_INFO, "SELECT a.username, a.last_ip, aa.gmlevel, a.expansion FROM account a LEFT JOIN account_access aa ON (a.id = aa.id) WHERE a.id = ?", CONNECTION_SYNCH); diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp index fa7818d2dca..a36023a23b0 100644 --- a/src/server/shared/Database/Implementation/WorldDatabase.cpp +++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp @@ -91,4 +91,6 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_INS_DISABLES, "INSERT INTO disables (entry, sourceType, flags, comment) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_DISABLES, "SELECT entry FROM disables WHERE entry = ? AND sourceType = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_DEL_DISABLES, "DELETE FROM disables WHERE entry = ? AND sourceType = ?", CONNECTION_ASYNC); + // 0: uint8 + PrepareStatement(WORLD_SEL_REQ_XP, "SELECT xp_for_next_level FROM player_xp_for_level WHERE lvl = ?", CONNECTION_SYNCH); } diff --git a/src/server/shared/Database/Implementation/WorldDatabase.h b/src/server/shared/Database/Implementation/WorldDatabase.h index d8c3c69dbba..171627bb83a 100644 --- a/src/server/shared/Database/Implementation/WorldDatabase.h +++ b/src/server/shared/Database/Implementation/WorldDatabase.h @@ -112,6 +112,7 @@ enum WorldDatabaseStatements WORLD_SEL_DISABLES, WORLD_INS_DISABLES, WORLD_DEL_DISABLES, + WORLD_SEL_REQ_XP, MAX_WORLDDATABASE_STATEMENTS }; -- cgit v1.2.3 From 178cb300d1807e3082eb3a2f67c4282a8936d085 Mon Sep 17 00:00:00 2001 From: Bezo Date: Wed, 22 May 2013 00:50:51 +0300 Subject: Implement .arena commands - add new commands to the core to handle with arena teams. *.arena create [player] "arena name" [type] *.arena create "arena name" [type] *.arena disband [TeamID] *.arena rename "oldName" "newName" *.arena captain [TeamID] [Player] *.arena info [TeamID] *.arena lookup [name] --- sql/updates/world/2013_05_xx_xx_world_misc.sql | 25 ++ src/server/game/Battlegrounds/ArenaTeam.cpp | 36 +++ src/server/game/Battlegrounds/ArenaTeam.h | 2 + src/server/game/Miscellaneous/Language.h | 16 +- src/server/game/Scripting/ScriptLoader.cpp | 2 + src/server/scripts/Commands/CMakeLists.txt | 1 + src/server/scripts/Commands/cs_arena.cpp | 345 +++++++++++++++++++++ .../Database/Implementation/CharacterDatabase.cpp | 1 + .../Database/Implementation/CharacterDatabase.h | 1 + 9 files changed, 428 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/2013_05_xx_xx_world_misc.sql create mode 100644 src/server/scripts/Commands/cs_arena.cpp (limited to 'src/server/shared/Database/Implementation') diff --git a/sql/updates/world/2013_05_xx_xx_world_misc.sql b/sql/updates/world/2013_05_xx_xx_world_misc.sql new file mode 100644 index 00000000000..59a7c67833c --- /dev/null +++ b/sql/updates/world/2013_05_xx_xx_world_misc.sql @@ -0,0 +1,25 @@ +DELETE FROM `command` WHERE `name` LIKE 'arena%'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('arena create', 3, 'Syntax: .arena create $name \"arena name\" #type\n\nA command to create a new Arena-team in game. #type = [2/3/5]'), +('arena disband', 3, 'Syntax: .arena disband #TeamID\n\nA command to disband Arena-team in game.'), +('arena rename', 3, 'Syntax: .arena rename \"oldname\" \"newname\"\n\nA command to rename Arena-team name.'), +('arena captain', 3, 'Syntax: .arena captain #TeamID $name\n\nA command to set new captain to the team $name must be in the team'), +('arena info', 2, 'Syntax: .arena info #TeamID\n\nA command that show info about arena team'), +('arena lookup', 2, 'Syntax: .arena lookup $name\n\nA command that give a list of arenateam with the given $name'); + +DELETE FROM `trinity_string` WHERE `entry` BETWEEN 857 AND 870; +INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES +(857, 'Arena team [%u] not found'), +(858, 'There is already an arena team named \"%s\"'), +(859, '%s is already in an arena team of that size'), +(860, 'Arena Team In Combat'), +(861, 'Arena with name: \"%s\" or silmilar not found'), +(862, '[%s] not member of the team \"%s\"'), +(863, '[%s] already capitan in the team \"%s\"'), +(864, 'New ArenaTeam created [Name: \"%s\"][Id: %u][Type: %u][Captain GUID: %u]'), +(865, 'Arena team Name: \"%s\"[Id: %u] disbanded'), +(866, 'Arena team [Id: %u] change from \"%s\" to \"%s\"'), +(867, 'Arena team Name: \"%s\"[Id: %u] change capitan from[%s] to [%s]'), +(868, 'Arena team: \"%s\"[%u] - Rating: %u - Type: %ux%u'), +(869, 'Name:\"%s\"[guid:%u] - PR: %u - %s'), +(870, '|\"%s\"[ID:%u](%ux%u)|'); diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index af76ff71223..a84e7ec30db 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -269,6 +269,19 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result) return true; } +bool ArenaTeam::SetName(std::string const& name) +{ + if (TeamName == name || name.empty() || name.length() > 24 || sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name)) + return false; + + TeamName = name; + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ARENA_TEAM_NAME); + stmt->setString(0, TeamName); + stmt->setUInt32(1, GetId()); + CharacterDatabase.Execute(stmt); + return true; +} + void ArenaTeam::SetCaptain(uint64 guid) { // Disable remove/promote buttons @@ -360,6 +373,29 @@ void ArenaTeam::Disband(WorldSession* session) sArenaTeamMgr->RemoveArenaTeam(TeamId); } +void ArenaTeam::Disband() +{ + // Remove all members from arena team + while (!Members.empty()) + DelMember(Members.front().Guid, false); + + // Update database + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ARENA_TEAM); + stmt->setUInt32(0, TeamId); + trans->Append(stmt); + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ARENA_TEAM_MEMBERS); + stmt->setUInt32(0, TeamId); + trans->Append(stmt); + + CharacterDatabase.CommitTransaction(trans); + + // Remove arena team from ObjectMgr + sArenaTeamMgr->RemoveArenaTeam(TeamId); +} + void ArenaTeam::Roster(WorldSession* session) { Player* player = NULL; diff --git a/src/server/game/Battlegrounds/ArenaTeam.h b/src/server/game/Battlegrounds/ArenaTeam.h index 7a1d9fa131c..0d37351583d 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.h +++ b/src/server/game/Battlegrounds/ArenaTeam.h @@ -121,6 +121,7 @@ class ArenaTeam bool Create(uint64 captainGuid, uint8 type, std::string const& teamName, uint32 backgroundColor, uint8 emblemStyle, uint32 emblemColor, uint8 borderStyle, uint32 borderColor); void Disband(WorldSession* session); + void Disband(); typedef std::list MemberList; @@ -136,6 +137,7 @@ class ArenaTeam uint32 GetAverageMMR(Group* group) const; void SetCaptain(uint64 guid); + bool SetName(std::string const& name); bool AddMember(uint64 PlayerGuid); // Shouldn't be uint64 ed, because than can reference guid from members on Disband diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 3bb663f2978..15673ffd0c5 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -828,7 +828,21 @@ enum TrinityStrings LANG_CHARACTER_GENDER_MALE = 855, LANG_CHARACTER_GENDER_FEMALE = 856, - // Room for in-game strings 857-999 not used + LANG_ARENA_ERROR_NOT_FOUND = 857, + LANG_ARENA_ERROR_NAME_EXISTS = 858, + LANG_ARENA_ERROR_SIZE = 859, + LANG_ARENA_ERROR_COMBAT = 860, + LANG_AREAN_ERROR_NAME_NOT_FOUND = 861, + LANG_ARENA_ERROR_NOT_MEMBER = 862, + LANG_ARENA_ERROR_CAPTAIN = 863, + LANG_ARENA_CREATE = 864, + LANG_ARENA_DISBAND = 865, + LANG_ARENA_RENAME = 866, + LANG_ARENA_CAPTAIN = 867, + LANG_ARENA_INFO_HEADER = 868, + LANG_ARENA_INFO_MEMBERS = 869, + LANG_ARENA_LOOKUP = 870, + // Room for in-game strings 870-999 not used // Level 4 (CLI only commands) LANG_COMMAND_EXIT = 1000, diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 5f5024729ca..e65c5884319 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -46,6 +46,7 @@ void AddSC_SmartSCripts(); //Commands void AddSC_account_commandscript(); void AddSC_achievement_commandscript(); +void AddSC_arena_commandscript(); void AddSC_ban_commandscript(); void AddSC_bf_commandscript(); void AddSC_cast_commandscript(); @@ -680,6 +681,7 @@ void AddCommandScripts() { AddSC_account_commandscript(); AddSC_achievement_commandscript(); + AddSC_arena_commandscript(); AddSC_ban_commandscript(); AddSC_bf_commandscript(); AddSC_cast_commandscript(); diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index 15e16c2caf1..ce31fa1f4d3 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -12,6 +12,7 @@ set(scripts_STAT_SRCS ${scripts_STAT_SRCS} Commands/cs_account.cpp Commands/cs_achievement.cpp + Commands/cs_arena.cpp Commands/cs_ban.cpp Commands/cs_bf.cpp Commands/cs_cast.cpp diff --git a/src/server/scripts/Commands/cs_arena.cpp b/src/server/scripts/Commands/cs_arena.cpp new file mode 100644 index 00000000000..4c487942dcc --- /dev/null +++ b/src/server/scripts/Commands/cs_arena.cpp @@ -0,0 +1,345 @@ +/* + * Copyright (C) 2008-2013 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +/* ScriptData +Name: arena_commandscript +%Complete: 100 +Comment: All arena team related commands +Category: commandscripts +EndScriptData */ + +#include "Chat.h" +#include "Language.h" +#include "ArenaTeamMgr.h" + +class arena_commandscript : public CommandScript +{ +public: + arena_commandscript() : CommandScript("arena_commandscript") { } + + ChatCommand* GetCommands() const + { + static ChatCommand arenaCommandTable[] = + { + { "create", SEC_ADMINISTRATOR, true, &HandleArenaCreateCommand, "", NULL }, + { "disband", SEC_ADMINISTRATOR, true, &HandleArenaDisbandCommand, "", NULL }, + { "rename", SEC_ADMINISTRATOR, true, &HandleArenaRenameCommand, "", NULL }, + { "captain", SEC_ADMINISTRATOR, false, &HandleArenaCaptainCommand, "", NULL }, + { "info", SEC_GAMEMASTER, true, &HandleArenaInfoCommand, "", NULL }, + { "lookup", SEC_GAMEMASTER, false, &HandleArenaLookupCommand, "", NULL }, + { NULL, SEC_GAMEMASTER, false, NULL, "", NULL } + }; + static ChatCommand commandTable[] = + { + { "arena", SEC_GAMEMASTER, false, NULL, "", arenaCommandTable }, + { NULL, SEC_PLAYER, false, NULL, "", NULL } + }; + return commandTable; + } + + static bool HandleArenaCreateCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + Player* target; + if (!handler->extractPlayerTarget(*args != '"' ? (char*)args : NULL, &target)) + return false; + + char* tailStr = *args != '"' ? strtok(NULL, "") : (char*)args; + if (!tailStr) + return false; + + char* name = handler->extractQuotedArg(tailStr); + if (!name) + return false; + char* typeStr = strtok(NULL, ""); + if (!typeStr) + return false; + int8 type = atoi(typeStr); + if (sArenaTeamMgr->GetArenaTeamByName(name)) + { + handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_EXISTS, name); + handler->SetSentErrorMessage(true); + return false; + } + if (type == 2 || type == 3 || type == 5 ) + { + if (Player::GetArenaTeamIdFromDB(target->GetGUID(), type) != 0) + { + handler->PSendSysMessage(LANG_ARENA_ERROR_SIZE, target->GetName().c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + ArenaTeam* Arena = new ArenaTeam(); + + if (!Arena->Create(target->GetGUID(), type, name, 4293102085, 101, 4293253939, 4, 4284049911)) + { + delete Arena; + handler->SendSysMessage(LANG_BAD_VALUE); + handler->SetSentErrorMessage(true); + return false; + } + + sArenaTeamMgr->AddArenaTeam(Arena); + handler->PSendSysMessage(LANG_ARENA_CREATE, Arena->GetName().c_str(), Arena->GetId(), Arena->GetType(), Arena->GetCaptain()); + } + else + { + handler->SendSysMessage(LANG_BAD_VALUE); + handler->SetSentErrorMessage(true); + return false; + } + return true; + } + + static bool HandleArenaDisbandCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 teamid = atoi((char*)args); + if (!teamid) + return false; + + ArenaTeam* Arena = sArenaTeamMgr->GetArenaTeamById(teamid); + + if (!Arena) + { + handler->PSendSysMessage(LANG_ARENA_ERROR_NOT_FOUND, teamid); + handler->SetSentErrorMessage(true); + return false; + } + + if (Arena->IsFighting()) + { + handler->SendSysMessage(LANG_ARENA_ERROR_COMBAT); + handler->SetSentErrorMessage(true); + return false; + } + std::string name = Arena->GetName(); + Arena->Disband(); + if (handler->GetSession()) + TC_LOG_DEBUG(LOG_FILTER_ARENAS, "GameMaster: %s [GUID: %u] disbanded arena team type: %u [Id: %u].", + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), Arena->GetType(), teamid); + else + TC_LOG_DEBUG(LOG_FILTER_ARENAS, "Console: disbanded arena team type: %u [Id: %u].", Arena->GetType(), teamid); + delete(Arena); + handler->PSendSysMessage(LANG_ARENA_DISBAND, name.c_str(), teamid); + return true; + } + + static bool HandleArenaRenameCommand(ChatHandler* handler, char const* _args) + { + if (!*_args) + return false; + + char *args = (char *)_args; + + char const* oldArenaStr = handler->extractQuotedArg(args); + if (!oldArenaStr) + { + handler->SendSysMessage(LANG_BAD_VALUE); + handler->SetSentErrorMessage(true); + return false; + } + + char const* newArenaStr = handler->extractQuotedArg(strtok(NULL, "")); + if (!newArenaStr) + { + handler->SendSysMessage(LANG_BAD_VALUE); + handler->SetSentErrorMessage(true); + return false; + } + + ArenaTeam* Arena = sArenaTeamMgr->GetArenaTeamByName(oldArenaStr); + if (!Arena) + { + handler->PSendSysMessage(LANG_AREAN_ERROR_NAME_NOT_FOUND, oldArenaStr); + handler->SetSentErrorMessage(true); + return false; + } + + if (sArenaTeamMgr->GetArenaTeamByName(newArenaStr)) + { + handler->PSendSysMessage(LANG_ARENA_ERROR_NAME_EXISTS, oldArenaStr); + handler->SetSentErrorMessage(true); + return false; + } + + if (Arena->IsFighting()) + { + handler->SendSysMessage(LANG_ARENA_ERROR_COMBAT); + handler->SetSentErrorMessage(true); + return false; + } + + if (!Arena->SetName(newArenaStr)) + { + handler->SendSysMessage(LANG_BAD_VALUE); + handler->SetSentErrorMessage(true); + return false; + } + handler->PSendSysMessage(LANG_ARENA_RENAME, Arena->GetId(), oldArenaStr, newArenaStr); + if (handler->GetSession()) + TC_LOG_DEBUG(LOG_FILTER_ARENAS, "GameMaster: %s [GUID: %u] rename arena team \"%s\"[Id: %u] to \"%s\"", + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), oldArenaStr, Arena->GetId(), newArenaStr); + else + TC_LOG_DEBUG(LOG_FILTER_ARENAS, "Console: rename arena team \"%s\"[Id: %u] to \"%s\"", oldArenaStr, Arena->GetId(), newArenaStr); + return true; + } + + static bool HandleArenaCaptainCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + char* idStr; + char* nameStr; + handler->extractOptFirstArg((char*)args, &idStr, &nameStr); + if (!idStr) + return false; + + uint32 teamid = atoi(idStr); + if (!teamid) + return false; + + Player* target; + uint64 target_guid; + if (!handler->extractPlayerTarget(nameStr, &target, &target_guid)) + return false; + + ArenaTeam *Arena = sArenaTeamMgr->GetArenaTeamById(teamid); + + if (!Arena) + { + handler->PSendSysMessage(LANG_ARENA_ERROR_NOT_FOUND, teamid); + handler->SetSentErrorMessage(true); + return false; + } + + if (!target) + { + handler->PSendSysMessage(LANG_PLAYER_NOT_EXIST_OR_OFFLINE, nameStr); + handler->SetSentErrorMessage(true); + return false; + } + + if (Arena->IsFighting()) + { + handler->SendSysMessage(LANG_ARENA_ERROR_COMBAT); + handler->SetSentErrorMessage(true); + return false; + } + + if(!Arena->IsMember(target_guid)) + { + handler->PSendSysMessage(LANG_ARENA_ERROR_NOT_MEMBER, nameStr, Arena->GetName().c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + if(Arena->GetCaptain() == target_guid) + { + handler->PSendSysMessage(LANG_ARENA_ERROR_CAPTAIN, nameStr, Arena->GetName().c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + Player* oldCaptain = sObjectMgr->GetPlayerByLowGUID(Arena->GetCaptain()); + Arena->SetCaptain(target_guid); + handler->PSendSysMessage(LANG_ARENA_CAPTAIN, Arena->GetName().c_str(), Arena->GetId(), oldCaptain->GetName().c_str(), target->GetName().c_str()); + if (handler->GetSession()) + TC_LOG_DEBUG(LOG_FILTER_ARENAS, "GameMaster: %s [GUID: %u] promoted player: %s [GUID: %u] to leader of arena team \"%s\"[Id: %u]", + handler->GetSession()->GetPlayer()->GetName().c_str(), handler->GetSession()->GetPlayer()->GetGUIDLow(), target->GetName().c_str(), target->GetGUIDLow(), Arena->GetName().c_str(), Arena->GetId()); + else + TC_LOG_DEBUG(LOG_FILTER_ARENAS, "Console: promoted player: %s [GUID: %u] to leader of arena team \"%s\"[Id: %u]", + target->GetName().c_str(), target->GetGUIDLow(), Arena->GetName().c_str(), Arena->GetId()); + return true; + } + + static bool HandleArenaInfoCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + uint32 teamid = atoi((char*)args); + if (!teamid) + return false; + + ArenaTeam *Arena = sArenaTeamMgr->GetArenaTeamById(teamid); + + if (!Arena) + { + handler->PSendSysMessage(LANG_ARENA_ERROR_NOT_FOUND, teamid); + handler->SetSentErrorMessage(true); + return false; + } + + handler->PSendSysMessage(LANG_ARENA_INFO_HEADER, Arena->GetName().c_str(), Arena->GetId(), Arena->GetRating(), Arena->GetType(), Arena->GetType()); + for (ArenaTeam::MemberList::iterator itr = Arena->m_membersBegin(); itr != Arena->m_membersEnd(); ++itr) + { + handler->PSendSysMessage(LANG_ARENA_INFO_MEMBERS, itr->Name.c_str(), GUID_LOPART(itr->Guid), itr->PersonalRating, (Arena->GetCaptain() == itr->Guid ? "- Captain" : "")); + } + return true; + } + + static bool HandleArenaLookupCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + std::string namepart = args; + std::wstring wnamepart; + + if (!Utf8toWStr(namepart, wnamepart)) + return false; + + wstrToLower(wnamepart); + + bool found = false; + ArenaTeamMgr::ArenaTeamContainer::const_iterator i = sArenaTeamMgr->GetArenaTeamMapBegin(); + for (; i != sArenaTeamMgr->GetArenaTeamMapEnd(); ++i) + { + ArenaTeam *Arena = i->second; + + if (Utf8FitTo(Arena->GetName(), wnamepart)) + { + uint32 teamid = Arena->GetId(); + + if (handler->GetSession()) + handler->PSendSysMessage(LANG_ARENA_LOOKUP, Arena->GetName().c_str(), Arena->GetId(), Arena->GetType(), Arena->GetType()); + + if (!found) + found = true; + + continue; + } + } + + if (!found) + handler->PSendSysMessage(LANG_AREAN_ERROR_NAME_NOT_FOUND, namepart.c_str()); + + return true; + } +}; + +void AddSC_arena_commandscript() +{ + new arena_commandscript(); +} diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 4f8a32aa950..280dad3766c 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -302,6 +302,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_ARENA_TEAM_MEMBER, "UPDATE arena_team_member SET personalRating = ?, weekGames = ?, weekWins = ?, seasonGames = ?, seasonWins = ? WHERE arenaTeamId = ? AND guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_REP_CHARACTER_ARENA_STATS, "REPLACE INTO character_arena_stats (guid, slot, matchMakerRating) VALUES (?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_PLAYER_ARENA_TEAMS, "SELECT arena_team_member.arenaTeamId FROM arena_team_member JOIN arena_team ON arena_team_member.arenaTeamId = arena_team.arenaTeamId WHERE guid = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_UPD_ARENA_TEAM_NAME, "UPDATE arena_team SET name = ? WHERE arenaTeamId = ?", CONNECTION_ASYNC); // Character battleground data PrepareStatement(CHAR_INS_PLAYER_BGDATA, "INSERT INTO character_battleground_data (guid, instanceId, team, joinX, joinY, joinZ, joinO, joinMapId, taxiStart, taxiEnd, mountSpell) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index 362bb3545df..f97dd63064d 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -253,6 +253,7 @@ enum CharacterDatabaseStatements CHAR_UPD_ARENA_TEAM_MEMBER, CHAR_REP_CHARACTER_ARENA_STATS, CHAR_SEL_PLAYER_ARENA_TEAMS, + CHAR_UPD_ARENA_TEAM_NAME, CHAR_SEL_PETITION, CHAR_SEL_PETITION_SIGNATURE, -- cgit v1.2.3 From 590133c2b0b89735850356647df15edb84d1ce91 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 24 May 2013 18:33:33 +0200 Subject: Missed change for previous commit --- src/server/shared/Database/Implementation/CharacterDatabase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/shared/Database/Implementation') diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 280dad3766c..069f2127a72 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -422,7 +422,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHAR_DEL_INFO_BY_NAME, "SELECT guid, deleteInfos_Name, deleteInfos_Account, deleteDate FROM characters WHERE deleteDate IS NOT NULL AND deleteInfos_Name LIKE CONCAT('%%', ?, '%%')", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHAR_DEL_INFO, "SELECT guid, deleteInfos_Name, deleteInfos_Account, deleteDate FROM characters WHERE deleteDate IS NOT NULL", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_CHARS_BY_ACCOUNT_ID, "SELECT guid FROM characters WHERE account = ?", CONNECTION_SYNCH); - PrepareStatement(CHAR_SEL_CHAR_PINFO, "SELECT totaltime, level, money, account, race, class, map, zone, gender FROM characters WHERE guid = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_CHAR_PINFO, "SELECT totaltime, level, money, account, race, class, map, zone, gender, health, playerFlags FROM characters WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_PINFO_BANS, "SELECT unbandate, bandate = unbandate, bannedby, banreason FROM character_banned WHERE guid = ? AND active ORDER BY bandate ASC LIMIT 1", CONNECTION_SYNCH); //0: lowGUID PrepareStatement(CHAR_SEL_PINFO_MAILS, "SELECT SUM(CASE WHEN (checked & 1) THEN 1 ELSE 0 END) AS 'readmail', COUNT(*) AS 'totalmail' FROM mail WHERE `receiver` = ?", CONNECTION_SYNCH); -- cgit v1.2.3