*Added rewrited ticket system - by Machiavelli

--HG--
branch : trunk
This commit is contained in:
Blaymoira
2008-12-31 15:07:29 +01:00
parent a315baeb77
commit 6f0b9fe944
24 changed files with 941 additions and 661 deletions
+6
View File
@@ -0,0 +1,6 @@
ALTER TABLE `character_ticket` RENAME TO `gm_tickets`;
ALTER TABLE gm_tickets CHANGE `guid` `playerGuid` int(11) unsigned NOT NULL default '0';
ALTER TABLE gm_tickets CHANGE `ticket_id` `guid` int(11) unsigned NOT NULL default '0';
ALTER TABLE gm_tickets CHANGE `ticket_text` `message` text(0) NOT NULL;
ALTER TABLE gm_tickets CHANGE `ticket_lastchange` `timestamp` int(10) NOT NULL default '0';
ALTER TABLE gm_tickets ADD( `closed` bit(1) NOT NULL, `assignedto` int(10) NOT NULL default '0', `comment` text(0) NOT NULL default '');␍
+30
View File
@@ -0,0 +1,30 @@
DELETE FROM `trinity_string` WHERE (`entry`='290');
DELETE FROM `trinity_string` WHERE (`entry`='296');
DELETE FROM `trinity_string` WHERE (`entry`='289');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2000, '|cff00ff00New ticket from|r|cffff00ff %s.|r |cff00ff00Ticket entry:|r|cffff00ff %d.|r', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2001, '|cff00ff00Character|r|cffff00ff %s |r|cff00ff00edited his/her ticket:|r|cffff00ff %d.|r', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2002, '|cff00ff00Character|r|cffff00ff %s |r|cff00ff00abandoned ticket entry:|r|cffff00ff %d.|r', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2003, '|cffff00ff %s|r |cff00ff00closed ticket|r |cffff00ff %d.|r', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2004, 'Ticket %d permanently deleted by %s.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2005, 'Ticket not found.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2007, 'Please close ticket before deleting it permanently.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2008, 'Ticket %d is already assigned to GM %s.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2009, '%u Tickets succesfully reloaded from the database.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2010, 'Showing list of open tickets.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2011, 'Showing list of open tickets whose creator is online.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2012, 'Invalid name specified. Name should be that of an online Gamemaster.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2013, 'This ticket is already assigned to yourself. To unassign use .ticket unassign %d and then reassign.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2014, 'Ticket %d is not assigned, you cannot unassign it.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2015, 'You cannot unassign tickets from staffmembers with a higher security level than yourself.', '', '', '', '', '', '', '', '');
INSERT INTO trinity_string (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (2016, 'Cannot close ticket %d, it is assigned to another GM.', '', '', '', '', '', '', '', '');
DELETE FROM `command` WHERE (`name` LIKE '%ticket%');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.ticket list','1','Displays a list of open GM tickets.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.ticket onlinelist','1','Displays a list of open GM tickets whose owner is online.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.ticket viewname','1','Usage: .ticket viewname $creatorname. \r\nReturns details about specified ticket. Ticket must be open and not deleted.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.ticket viewid','1','Usage: .ticket viewid $ticketid.\r\nReturns details about specified ticket. Ticket must be open and not deleted.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.ticket close','2','Usage: .ticket close $ticketid.\r\nCloses the specified ticket. Does not delete permanently.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.ticket delete','3','Usage: .ticket delete $ticketid.\r\nDeletes the specified ticket permanently. Ticket must be closed first.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.ticket assign','3','Usage: .ticket assign $ticketid $gmname.\r\nAssigns the specified ticket to the specified Game Master.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.ticket unassign','3','Usage: .ticket unassign $ticketid.\r\nUnassigns the specified ticket from the current assigned Game Master.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.ticket comment','2','Usage: .ticket comment $ticketid $comment.\r\nAllows the adding or modifying of a comment to the specified ticket.');
INSERT INTO `command` (`name`,`security`,`help`) VALUES ('.reload tickets','4','Usage: .reload tickets.\r\nReloads GM Tickets from the database and re-caches them into memory.');
+17 -2
View File
@@ -33,6 +33,7 @@
#include "MapManager.h" #include "MapManager.h"
#include "GridNotifiersImpl.h" #include "GridNotifiersImpl.h"
#include "CellImpl.h" #include "CellImpl.h"
#include "TicketMgr.h"
bool ChatHandler::load_command_table = true; bool ChatHandler::load_command_table = true;
@@ -298,6 +299,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "locales_page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesPageTextCommand, "", NULL }, { "locales_page_text", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesPageTextCommand, "", NULL },
{ "locales_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesQuestCommand, "", NULL }, { "locales_quest", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadLocalesQuestCommand, "", NULL },
{ "waypoint_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadWpScriptsCommand, "", NULL }, { "waypoint_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadWpScriptsCommand, "", NULL },
{ "tickets", SEC_ADMINISTRATOR, true, &ChatHandler::HandleGMTicketReloadCommand, "", NULL },
{ "", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommand, "", NULL }, { "", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL } { NULL, 0, false, NULL, "", NULL }
@@ -499,10 +501,25 @@ ChatCommand * ChatHandler::getCommandTable()
{ NULL, 0, false, NULL, "", NULL } { NULL, 0, false, NULL, "", NULL }
}; };
static ChatCommand ticketCommandTable[] =
{
{ "list", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketListCommand, "", NULL },
{ "onlinelist", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketListOnlineCommand, "", NULL },
{ "viewname", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketGetByNameCommand, "", NULL },
{ "viewid", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketGetByIdCommand, "", NULL },
{ "close", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketCloseByIdCommand, "", NULL },
{ "delete", SEC_ADMINISTRATOR, false, &ChatHandler::HandleGMTicketDeleteByIdCommand, "", NULL },
{ "assign", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketAssignToCommand, "", NULL },
{ "unassign", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketUnAssignCommand, "", NULL },
{ "comment", SEC_MODERATOR, false, &ChatHandler::HandleGMTicketCommentCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] = static ChatCommand commandTable[] =
{ {
{ "account", SEC_PLAYER, true, NULL, "", accountCommandTable }, { "account", SEC_PLAYER, true, NULL, "", accountCommandTable },
{ "gm", SEC_MODERATOR, true, NULL, "", gmCommandTable }, { "gm", SEC_MODERATOR, true, NULL, "", gmCommandTable },
{ "ticket", SEC_MODERATOR, true, NULL, "", ticketCommandTable },
{ "npc", SEC_MODERATOR, false, NULL, "", npcCommandTable }, { "npc", SEC_MODERATOR, false, NULL, "", npcCommandTable },
{ "go", SEC_MODERATOR, false, NULL, "", goCommandTable }, { "go", SEC_MODERATOR, false, NULL, "", goCommandTable },
{ "learn", SEC_MODERATOR, false, NULL, "", learnCommandTable }, { "learn", SEC_MODERATOR, false, NULL, "", learnCommandTable },
@@ -576,8 +593,6 @@ ChatCommand * ChatHandler::getCommandTable()
{ "additemset", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAddItemSetCommand, "", NULL }, { "additemset", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAddItemSetCommand, "", NULL },
{ "bank", SEC_ADMINISTRATOR, false, &ChatHandler::HandleBankCommand, "", NULL }, { "bank", SEC_ADMINISTRATOR, false, &ChatHandler::HandleBankCommand, "", NULL },
{ "wchange", SEC_ADMINISTRATOR, false, &ChatHandler::HandleChangeWeather, "", NULL }, { "wchange", SEC_ADMINISTRATOR, false, &ChatHandler::HandleChangeWeather, "", NULL },
{ "ticket", SEC_GAMEMASTER, true, &ChatHandler::HandleTicketCommand, "", NULL },
{ "delticket", SEC_GAMEMASTER, true, &ChatHandler::HandleDelTicketCommand, "", NULL },
{ "maxskill", SEC_ADMINISTRATOR, false, &ChatHandler::HandleMaxSkillCommand, "", NULL }, { "maxskill", SEC_ADMINISTRATOR, false, &ChatHandler::HandleMaxSkillCommand, "", NULL },
{ "setskill", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSetSkillCommand, "", NULL }, { "setskill", SEC_ADMINISTRATOR, false, &ChatHandler::HandleSetSkillCommand, "", NULL },
{ "whispers", SEC_MODERATOR, false, &ChatHandler::HandleWhispersCommand, "", NULL }, { "whispers", SEC_MODERATOR, false, &ChatHandler::HandleWhispersCommand, "", NULL },
+17 -4
View File
@@ -46,7 +46,7 @@ class ChatHandler
public: public:
explicit ChatHandler(WorldSession* session) : m_session(session) {} explicit ChatHandler(WorldSession* session) : m_session(session) {}
explicit ChatHandler(Player* player) : m_session(player->GetSession()) {} explicit ChatHandler(Player* player) : m_session(player->GetSession()) {}
~ChatHandler() {} ~ChatHandler() {}
static void FillMessageData( WorldPacket *data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit *speaker); static void FillMessageData( WorldPacket *data, WorldSession* session, uint8 type, uint32 language, const char *channelName, uint64 target_guid, const char *message, Unit *speaker);
@@ -72,6 +72,7 @@ class ChatHandler
int ParseCommands(const char* text); int ParseCommands(const char* text);
virtual char const* GetName() const; virtual char const* GetName() const;
protected: protected:
explicit ChatHandler() : m_session(NULL) {} // for CLI subclass explicit ChatHandler() : m_session(NULL) {} // for CLI subclass
@@ -404,8 +405,20 @@ class ChatHandler
bool HandleResetTalentsCommand(const char * args); bool HandleResetTalentsCommand(const char * args);
bool HandleResetAllCommand(const char * args); bool HandleResetAllCommand(const char * args);
bool HandleTicketCommand(const char* args);
bool HandleDelTicketCommand(const char* args);
// GM ticket command handlers
bool HandleGMTicketListCommand(const char* args);
bool HandleGMTicketListOnlineCommand(const char* args);
bool HandleGMTicketGetByIdCommand(const char* args);
bool HandleGMTicketGetByNameCommand(const char* args);
bool HandleGMTicketCloseByIdCommand(const char* args);
bool HandleGMTicketAssignToCommand(const char* args);
bool HandleGMTicketUnAssignCommand(const char* args);
bool HandleGMTicketCommentCommand(const char* args);
bool HandleGMTicketDeleteByIdCommand(const char* args);
bool HandleGMTicketReloadCommand(const char*);
bool HandleMaxSkillCommand(const char* args); bool HandleMaxSkillCommand(const char* args);
bool HandleSetSkillCommand(const char* args); bool HandleSetSkillCommand(const char* args);
bool HandleListCreatureCommand(const char* args); bool HandleListCreatureCommand(const char* args);
@@ -490,7 +503,7 @@ class ChatHandler
void SetSentErrorMessage(bool val){ sentErrorMessage = val;}; void SetSentErrorMessage(bool val){ sentErrorMessage = val;};
private: private:
WorldSession * m_session; // != NULL for chat command call and NULL for CLI command WorldSession * m_session; // != NULL for chat command call and NULL for CLI command
// common global flag // common global flag
static bool load_command_table; static bool load_command_table;
bool sentErrorMessage; bool sentErrorMessage;
-177
View File
@@ -1,177 +0,0 @@
/*
* Copyright (C) 2005-2008 MaNGOS
*
* Copyright (C) 2008 Trinity
*
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "Common.h"
#include "Language.h"
#include "WorldPacket.h"
#include "Log.h"
#include "GMTicketMgr.h"
#include "ObjectAccessor.h"
#include "Player.h"
#include "Chat.h"
void WorldSession::SendGMTicketGetTicket(uint32 status, char const* text)
{
int len = text ? strlen(text) : 0;
WorldPacket data( SMSG_GMTICKET_GETTICKET, (4+len+1+4+2+4+4) );
data << uint32(status); // standard 0x0A, 0x06 if text present
if(status == 6)
{
data << text; // ticket text
data << uint8(0x7); // ticket category
data << float(0); // time from ticket creation?
data << float(0); // const
data << float(0); // const
data << uint8(0); // const
data << uint8(0); // const
}
SendPacket( &data );
}
void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/ )
{
WorldPacket data( SMSG_QUERY_TIME_RESPONSE, 4+4 );
data << (uint32)time(NULL);
data << (uint32)0;
SendPacket( &data );
GMTicket* ticket = ticketmgr.GetGMTicket(GetPlayer()->GetGUIDLow());
if(ticket)
SendGMTicketGetTicket(0x06,ticket->GetText());
else
SendGMTicketGetTicket(0x0A,0);
}
void WorldSession::HandleGMTicketUpdateTextOpcode( WorldPacket & recv_data )
{
CHECK_PACKET_SIZE(recv_data,1);
std::string ticketText;
recv_data >> ticketText;
if(GMTicket* ticket = ticketmgr.GetGMTicket(GetPlayer()->GetGUIDLow()))
ticket->SetText(ticketText.c_str());
else
sLog.outError("Ticket update: Player %s (GUID: %u) doesn't have active ticket", GetPlayer()->GetName(), GetPlayer()->GetGUIDLow());
}
void WorldSession::HandleGMTicketDeleteOpcode( WorldPacket & /*recv_data*/ )
{
ticketmgr.Delete(GetPlayer()->GetGUIDLow());
WorldPacket data( SMSG_GMTICKET_DELETETICKET, 4 );
data << uint32(9);
SendPacket( &data );
SendGMTicketGetTicket(0x0A, 0);
}
void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data )
{
CHECK_PACKET_SIZE(recv_data, 4*4+1+2*4);
uint32 map;
float x, y, z;
std::string ticketText = "";
uint32 unk1, unk2;
recv_data >> map >> x >> y >> z; // last check 2.4.3
recv_data >> ticketText;
// recheck
CHECK_PACKET_SIZE(recv_data,4*4+(ticketText.size()+1)+2*4);
recv_data >> unk1 >> unk2;
// note: the packet might contain more data, but the exact structure of that is unknown
sLog.outDebug("TicketCreate: map %u, x %f, y %f, z %f, text %s, unk1 %u, unk2 %u", map, x, y, z, ticketText.c_str(), unk1, unk2);
if(ticketmgr.GetGMTicket(GetPlayer()->GetGUIDLow()))
{
WorldPacket data( SMSG_GMTICKET_CREATE, 4 );
data << uint32(1);
SendPacket( &data );
return;
}
ticketmgr.Create(_player->GetGUIDLow(), ticketText.c_str());
WorldPacket data( SMSG_QUERY_TIME_RESPONSE, 4+4 );
data << (uint32)time(NULL);
data << (uint32)0;
SendPacket( &data );
data.Initialize( SMSG_GMTICKET_CREATE, 4 );
data << uint32(2);
SendPacket( &data );
DEBUG_LOG("update the ticket\n");
//TODO: Guard player map
HashMapHolder<Player>::MapType &m = ObjectAccessor::Instance().GetPlayers();
for(HashMapHolder<Player>::MapType::iterator itr = m.begin(); itr != m.end(); ++itr)
{
if(itr->second->GetSession()->GetSecurity() >= SEC_GAMEMASTER && itr->second->isAcceptTickets())
ChatHandler(itr->second).PSendSysMessage(LANG_COMMAND_TICKETNEW,GetPlayer()->GetName());
}
}
void WorldSession::HandleGMTicketSystemStatusOpcode( WorldPacket & /*recv_data*/ )
{
WorldPacket data( SMSG_GMTICKET_SYSTEMSTATUS,4 );
data << uint32(1); // we can also disable ticket system by sending 0 value
SendPacket( &data );
}
void WorldSession::HandleGMSurveySubmit( WorldPacket & recv_data)
{
// GM survey is shown after SMSG_GM_TICKET_STATUS_UPDATE with status = 3
CHECK_PACKET_SIZE(recv_data,4+4);
uint32 x;
recv_data >> x; // answer range? (6 = 0-5?)
sLog.outDebug("SURVEY: X = %u", x);
uint8 result[10];
memset(result, 0, sizeof(result));
for( int i = 0; i < 10; ++i)
{
CHECK_PACKET_SIZE(recv_data,recv_data.rpos()+4);
uint32 questionID;
recv_data >> questionID; // GMSurveyQuestions.dbc
if (!questionID)
break;
CHECK_PACKET_SIZE(recv_data,recv_data.rpos()+1+1);
uint8 value;
std::string unk_text;
recv_data >> value; // answer
recv_data >> unk_text; // always empty?
result[i] = value;
sLog.outDebug("SURVEY: ID %u, value %u, text %s", questionID, value, unk_text.c_str());
}
CHECK_PACKET_SIZE(recv_data,recv_data.rpos()+1);
std::string comment;
recv_data >> comment; // addional comment
sLog.outDebug("SURVEY: comment %s", comment.c_str());
// TODO: chart this data in some way
}
-82
View File
@@ -1,82 +0,0 @@
/*
* Copyright (C) 2005-2008 MaNGOS
*
* Copyright (C) 2008 Trinity
*
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "Common.h"
#include "Database/DatabaseEnv.h"
#include "Database/SQLStorage.h"
#include "GMTicketMgr.h"
#include "ObjectMgr.h"
#include "ProgressBar.h"
#include "Policies/SingletonImp.h"
#include "Player.h"
#include "ObjectDefines.h"
INSTANTIATE_SINGLETON_1(GMTicketMgr);
void GMTicketMgr::LoadGMTickets()
{
m_GMTicketMap.clear(); // For reload case
QueryResult *result = CharacterDatabase.Query(
// 0 1 2
"SELECT guid, ticket_text,UNIX_TIMESTAMP(ticket_lastchange) FROM character_ticket");
if( !result )
{
barGoLink bar( 1 );
bar.step();
sLog.outString();
sLog.outString(">> Loaded `character_ticket`, table is empty.");
return;
}
barGoLink bar( result->GetRowCount() );
uint32 count = 0;
do
{
bar.step();
Field* fields = result->Fetch();
uint32 guid = fields[0].GetUInt32();
m_GMTicketMap[guid] = GMTicket(guid, fields[1].GetCppString(), time_t(fields[2].GetUInt64()));
++count;
} while (result->NextRow());
delete result;
sLog.outString();
sLog.outString( ">> Loaded %d GM tickets", count );
}
void GMTicketMgr::DeleteAll()
{
for(GMTicketMap::iterator itr = m_GMTicketMap.begin(); itr != m_GMTicketMap.end(); ++itr)
{
if(Player* owner = objmgr.GetPlayer(MAKE_NEW_GUID(itr->first,0,HIGHGUID_PLAYER)))
owner->GetSession()->SendGMTicketGetTicket(0x0A,0);
}
CharacterDatabase.PExecute("DELETE FROM character_ticket");
m_GMTicketMap.clear();
}
-125
View File
@@ -1,125 +0,0 @@
/*
* Copyright (C) 2005-2008 MaNGOS <http://getmangos.com/>
*
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _GMTICKETMGR_H
#define _GMTICKETMGR_H
#include "Policies/Singleton.h"
#include "Database/DatabaseEnv.h"
#include "Util.h"
#include <map>
class GMTicket
{
public:
explicit GMTicket()
{
}
GMTicket(uint32 guid, const std::string& text, time_t update) : m_guid(guid), m_text(text), m_lastUpdate(update)
{
}
const char* GetText() const
{
return m_text.c_str();
}
uint64 GetLastUpdate() const
{
return m_lastUpdate;
}
void SetText(const char* text)
{
m_text = text ? text : "";
m_lastUpdate = time(NULL);
std::string escapedString = m_text;
CharacterDatabase.escape_string(escapedString);
CharacterDatabase.PExecute("UPDATE character_ticket SET ticket_text = '%s' WHERE guid = '%u'", escapedString.c_str(), m_guid);
}
void DeleteFromDB() const
{
CharacterDatabase.PExecute("DELETE FROM character_ticket WHERE guid = '%u' LIMIT 1", m_guid);
}
void SaveToDB() const
{
CharacterDatabase.BeginTransaction();
DeleteFromDB();
std::string escapedString = m_text;
CharacterDatabase.escape_string(escapedString);
CharacterDatabase.PExecute("INSERT INTO character_ticket (guid, ticket_text) VALUES ('%u', '%s')", m_guid, escapedString.c_str());
CharacterDatabase.CommitTransaction();
}
private:
uint32 m_guid;
std::string m_text;
time_t m_lastUpdate;
};
typedef std::map<uint32, GMTicket> GMTicketMap;
class GMTicketMgr
{
public:
GMTicketMgr() { }
~GMTicketMgr() { }
void LoadGMTickets();
GMTicket* GetGMTicket(uint32 guid)
{
GMTicketMap::iterator itr = m_GMTicketMap.find(guid);
if(itr == m_GMTicketMap.end())
return NULL;
return &(itr->second);
}
size_t GetTicketCount() const
{
return m_GMTicketMap.size();
}
void Delete(uint32 guid)
{
GMTicketMap::iterator itr = m_GMTicketMap.find(guid);
if(itr == m_GMTicketMap.end())
return;
itr->second.DeleteFromDB();
m_GMTicketMap.erase(itr);
}
void DeleteAll();
void Create(uint32 guid, const char* text)
{
GMTicket t = GMTicket(guid, text, time(NULL));
t.SaveToDB();
m_GMTicketMap[guid] = t;
}
private:
GMTicketMap m_GMTicketMap;
};
#define ticketmgr Trinity::Singleton<GMTicketMgr>::Instance()
#endif
+22 -10
View File
@@ -269,15 +269,9 @@ enum TrinityStrings
LANG_COMMAND_WHISPERON = 285, LANG_COMMAND_WHISPERON = 285,
LANG_COMMAND_WHISPEROFF = 286, LANG_COMMAND_WHISPEROFF = 286,
LANG_COMMAND_CREATGUIDNOTFOUND = 287, LANG_COMMAND_CREATGUIDNOTFOUND = 287,
LANG_COMMAND_TICKETCOUNT = 288, // TICKET STRINGS NEED REWRITE // 288-296 FREE
LANG_COMMAND_TICKETNEW = 289,
LANG_COMMAND_TICKETVIEW = 290, // END
LANG_COMMAND_TICKETON = 291,
LANG_COMMAND_TICKETOFF = 292,
LANG_COMMAND_TICKENOTEXIST = 293,
LANG_COMMAND_ALLTICKETDELETED = 294,
LANG_COMMAND_TICKETPLAYERDEL = 295,
LANG_COMMAND_TICKETDEL = 296,
LANG_COMMAND_SPAWNDIST = 297, LANG_COMMAND_SPAWNDIST = 297,
LANG_COMMAND_SPAWNTIME = 298, LANG_COMMAND_SPAWNTIME = 298,
LANG_COMMAND_MODIFY_HONOR = 299, LANG_COMMAND_MODIFY_HONOR = 299,
@@ -763,7 +757,25 @@ enum TrinityStrings
LANG_MUST_MALE_OR_FEMALE = 1119, LANG_MUST_MALE_OR_FEMALE = 1119,
LANG_YOU_CHANGE_GENDER = 1120, LANG_YOU_CHANGE_GENDER = 1120,
LANG_YOUR_GENDER_CHANGED = 1121, LANG_YOUR_GENDER_CHANGED = 1121,
// Room for more level 3 1122-1199 not used
// Ticket Strings 2000-2020
LANG_COMMAND_TICKETNEW = 2000,
LANG_COMMAND_TICKETUPDATED = 2001,
LANG_COMMAND_TICKETPLAYERABANDON = 2002,
LANG_COMMAND_TICKETCLOSED = 2003,
LANG_COMMAND_TICKETDELETED = 2004,
LANG_COMMAND_TICKETNOTEXIST = 2005,
LANG_COMMAND_TICKETCLOSEFIRST = 2007,
LANG_COMMAND_TICKETALREADYASSIGNED = 2008,
LANG_COMMAND_TICKETRELOAD = 2009,
LANG_COMMAND_TICKETSHOWLIST = 2010,
LANG_COMMAND_TICKETSHOWONLINELIST = 2011,
LANG_COMMAND_TICKETASSIGNERROR_A = 2012,
LANG_COMMAND_TICKETASSIGNERROR_B = 2013,
LANG_COMMAND_TICKETNOTASSIGNED = 2014,
LANG_COMMAND_TICKETUNASSIGNSECURITY = 2015,
LANG_COMMAND_TICKETCANNOTCLOSE = 2016,
// Trinity strings 5000-9999 // Trinity strings 5000-9999
LANG_COMMAND_FREEZE = 5000, LANG_COMMAND_FREEZE = 5000,
+316 -1
View File
@@ -34,6 +34,8 @@
#include "CellImpl.h" #include "CellImpl.h"
#include "InstanceSaveMgr.h" #include "InstanceSaveMgr.h"
#include "Util.h" #include "Util.h"
#include "TicketMgr.h"
#ifdef _DEBUG_VMAPS #ifdef _DEBUG_VMAPS
#include "VMapFactory.h" #include "VMapFactory.h"
#endif #endif
@@ -265,6 +267,319 @@ bool ChatHandler::HandleGMChatCommand(const char* args)
return false; return false;
} }
bool ChatHandler::HandleGMTicketListCommand(const char* args)
{
SendSysMessage(LANG_COMMAND_TICKETSHOWLIST);
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
{
if((*itr)->closed)
continue;
std::stringstream message;
message << "|cff00ff00Ticket|r: |cff00ccff" << (*itr)->guid;
message << ".|r |cff00ff00created by:|r |cff00ccff" << (*itr)->name;
message << ".|r |cff00ff00Last change:|r |cff00ccff " << secsToTimeString(time(NULL) - (*itr)->timestamp, true, false) << " ago.";
if((*itr)->assignedToGM != 0 && objmgr.GetPlayer((*itr)->assignedToGM))
{
std::string gmname = objmgr.GetPlayer((*itr)->assignedToGM)->GetName();
message << "|r |cff00ff00Assigned to:|r |cff00ccff " << gmname;
}
SendGlobalGMSysMessage(message.str().c_str());
}
return true;
}
bool ChatHandler::HandleGMTicketListOnlineCommand(const char* args)
{
SendSysMessage(LANG_COMMAND_TICKETSHOWONLINELIST);
for(GmTicketList::iterator itr = ticketmgr.GM_TicketList.begin(); itr != ticketmgr.GM_TicketList.end(); ++itr)
{
if((*itr)->closed || !objmgr.GetPlayer((*itr)->playerGuid))
continue;
std::stringstream message;
message << "|cff00ff00Ticket|r: |cff00ccff" << (*itr)->guid;
message << ".|r |cff00ff00created by:|r |cff00ccff" << (*itr)->name;
message << ".|r |cff00ff00Last change:|r |cff00ccff " << secsToTimeString((time(NULL) - (*itr)->timestamp), true, false) << " ago.";
if((*itr)->assignedToGM != 0 && objmgr.GetPlayer((*itr)->assignedToGM))
{
std::string gmname = objmgr.GetPlayer((*itr)->assignedToGM)->GetName();
message << "|r |cff00ff00Assigned to:|r |cff00ccff " << gmname;
}
SendGlobalGMSysMessage(message.str().c_str());
}
return true;
}
bool ChatHandler::HandleGMTicketGetByIdCommand(const char* args)
{
if(!*args)
return false;
uint64 tguid = atoi(args);
GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid);
if(!ticket)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
std::stringstream message;
message << "|cff00ff00Ticket|r: |cff00ccff" << ticket->guid;
message << ".|r |cff00ff00created by:|r |cff00ccff" << ticket->name;
message << ".|r |cff00ff00Last change:|r |cff00ccff " << secsToTimeString((time(NULL)-ticket->timestamp), true, false) << " ago.";
if(ticket->assignedToGM != 0 && objmgr.GetPlayer(ticket->assignedToGM))
{
std::string gmname = objmgr.GetPlayer(ticket->assignedToGM)->GetName();
message << "|r |cff00ff00Assigned to:|r |cff00ccff " << gmname;
}
message << "|r\n|cff00ff00Message:|r " << ticket->message;
if(ticket->comment != "")
{
message << "|r |cff00ff00Comment:|r |cff00ccff " << ticket->comment;
}
PSendSysMessage(message.str().c_str());
return true;
}
bool ChatHandler::HandleGMTicketGetByNameCommand(const char* args)
{
if(!*args)
return false;
GM_Ticket *ticket = ticketmgr.GetGMTicketByName(args);
if(!ticket)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
std::stringstream message;
message << "|cff00ff00Ticket|r: |cff00ccff" << ticket->guid;
message << ".|r |cff00ff00created by:|r |cff00ccff" << ticket->name;
message << ".|r |cff00ff00Last change:|r |cff00ccff " << secsToTimeString((time(NULL)-ticket->timestamp), true, false) << " ago.";
if(ticket->assignedToGM != 0 && objmgr.GetPlayer(ticket->assignedToGM))
{
std::string gmname = objmgr.GetPlayer(ticket->assignedToGM)->GetName();
message << "|r |cff00ff00Assigned to:|r |cff00ccff " << gmname;
}
message << "|r\n|cff00ff00Message:|r " << ticket->message;
if(ticket->comment != "")
{
message << "|r |cff00ff00Comment:|r |cff00ccff " << ticket->comment;
}
PSendSysMessage(message.str().c_str());
return true;
}
bool ChatHandler::HandleGMTicketCloseByIdCommand(const char* args)
{
if(!*args)
return false;
uint64 tguid = atoi(args);
GM_Ticket *ticket = ticketmgr.GetGMTicket(tguid);
if(!ticket || ticket->closed)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
if(ticket && ticket->assignedToGM != m_session->GetPlayer()->GetGUID())
{
PSendSysMessage(LANG_COMMAND_TICKETCANNOTCLOSE, ticket->guid);
}
sWorld.SendGMText(LANG_COMMAND_TICKETCLOSED, ticket->name, ticket->guid);
ticketmgr.RemoveGMTicket(ticket->guid);
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
if(!plr || !plr->IsInWorld())
return true;
// send abandon ticket
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
data << uint32(9);
plr->GetSession()->SendPacket( &data );
return true;
}
bool ChatHandler::HandleGMTicketAssignToCommand(const char* args)
{
if(!*args)
return false;
char* tguid = strtok((char*)args, " ");
uint64 ticketGuid = atoi(tguid);
char* targetgm = strtok( NULL, " ");
if(!targetgm)
return false;
std::string targm = targetgm;
if(!normalizePlayerName(targm))
return false;
Player *cplr = m_session->GetPlayer();
std::string gmname;
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
if(!ticket || ticket->closed)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
Player *plr = objmgr.GetPlayer(targm.c_str());
if(!plr || !plr->IsInWorld() || plr->GetSession()->GetSecurity() < SEC_MODERATOR)
{
SendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_A);
return true;
}
if(ticket->assignedToGM == plr->GetGUID())
{
PSendSysMessage(LANG_COMMAND_TICKETASSIGNERROR_B, ticket->guid);
return true;
}
if(ticket->assignedToGM != 0 && ticket->assignedToGM != cplr->GetGUID())
{
Player *aplr = objmgr.GetPlayer(ticket->assignedToGM);
if(aplr && aplr->IsInWorld())
{
gmname = aplr->GetName();
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->guid, gmname.c_str());
return true;
}
}
ticket->assignedToGM = plr->GetGUID();
ticketmgr.UpdateGMTicket(ticket);
std::stringstream ss;
ss << "|cff00ff00Ticket:|r ";
ss << "|cffff00ff" << ticket->guid << ". " << cplr->GetName() << "|r";
ss << "|cff00ff00 assigned to:|r ";
ss << "|cffff00ff\"" << targetgm << "\".";
SendGlobalGMSysMessage(ss.str().c_str());
return true;
}
bool ChatHandler::HandleGMTicketUnAssignCommand(const char* args)
{
if(!*args)
return false;
uint64 ticketGuid = atoi(args);
Player *cplr = m_session->GetPlayer();
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
if(!ticket|| ticket->closed)
{
SendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
if(ticket->assignedToGM = 0)
{
SendSysMessage(LANG_COMMAND_TICKETNOTASSIGNED);
return true;
}
Player *plr = objmgr.GetPlayer(ticket->assignedToGM);
if(plr && plr->IsInWorld() && plr->GetSession()->GetSecurity() > cplr->GetSession()->GetSecurity())
{
SendSysMessage(LANG_COMMAND_TICKETUNASSIGNSECURITY);
return true;
}
std::stringstream ss;
ss << "|cff00ff00Ticket:|r ";
ss << "|cffff00ff" << ticket->guid << ". " << cplr->GetName() << "|r";
ss << "|cff00ff00 unassigned.|r";
SendGlobalGMSysMessage(ss.str().c_str());
ticket->assignedToGM = 0;
ticketmgr.UpdateGMTicket(ticket);
return true;
}
bool ChatHandler::HandleGMTicketCommentCommand(const char* args)
{
if(!args)
return false;
char* tguid = strtok((char*)args, " ");
uint64 ticketGuid = atoi(tguid);
char* comment = strtok( NULL, "\n");
if(!comment)
return false;
std::string gmname;
Player *cplr = m_session->GetPlayer();
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
if(!ticket || ticket->closed)
{
PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST);
return true;
}
if(ticket->assignedToGM = 0 && ticket->assignedToGM != cplr->GetGUID())
{
gmname = objmgr.GetPlayer(ticket->assignedToGM)->GetName();
PSendSysMessage(LANG_COMMAND_TICKETALREADYASSIGNED, ticket->guid, gmname.c_str());
return true;
}
ticket->comment = comment;
ticketmgr.UpdateGMTicket(ticket);
std::stringstream ss;
ss << "|cff00ff00Ticket:|r ";
ss << "|cffff00ff" << ticket->guid << ". " << cplr->GetName() << "|r";
ss << "|cff00ff00 added comment:|r ";
ss << "|cffff00ff\"" << ticket->comment << "\".";
SendGlobalGMSysMessage(ss.str().c_str());
return true;
}
bool ChatHandler::HandleGMTicketDeleteByIdCommand(const char* args)
{
if(!*args)
return false;
uint64 ticketGuid = atoi(args);
GM_Ticket *ticket = ticketmgr.GetGMTicket(ticketGuid);
if(!ticket)
{
PSendSysMessage(LANG_COMMAND_TICKETNOTEXIST, ticketGuid);
return true;
}
if(!ticket->closed)
{
SendSysMessage(LANG_COMMAND_TICKETCLOSEFIRST);
return true;
}
std::string gmname = m_session->GetPlayer()->GetName();
sWorld.SendGMText(LANG_COMMAND_TICKETDELETED, ticket->guid, gmname.c_str());
ticketmgr.DeleteGMTicketPermanently(ticket->guid);
Player *plr = objmgr.GetPlayer(ticket->playerGuid);
if(plr && plr->IsInWorld())
{
// Force abandon ticket
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
data << uint32(9);
plr->GetSession()->SendPacket( &data );
}
ticket = NULL;
return true;
}
bool ChatHandler::HandleGMTicketReloadCommand(const char*)
{
ticketmgr.LoadGMTickets();
return true;
}
//Enable\Dissable Invisible mode //Enable\Dissable Invisible mode
bool ChatHandler::HandleVisibleCommand(const char* args) bool ChatHandler::HandleVisibleCommand(const char* args)
{ {
@@ -280,7 +595,7 @@ bool ChatHandler::HandleVisibleCommand(const char* args)
{ {
m_session->GetPlayer()->SetGMVisible(true); m_session->GetPlayer()->SetGMVisible(true);
m_session->SendNotification(LANG_INVISIBLE_VISIBLE); m_session->SendNotification(LANG_INVISIBLE_VISIBLE);
return true; return true;
} }
if (argstr == "off") if (argstr == "off")
-186
View File
@@ -36,7 +36,6 @@
#include "GameEvent.h" #include "GameEvent.h"
#include "SpellMgr.h" #include "SpellMgr.h"
#include "AccountMgr.h" #include "AccountMgr.h"
#include "GMTicketMgr.h"
#include "WaypointManager.h" #include "WaypointManager.h"
#include "Util.h" #include "Util.h"
#include <cctype> #include <cctype>
@@ -1941,191 +1940,6 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
return true; return true;
} }
//show tickets
void ChatHandler::ShowTicket(uint64 guid, char const* text, char const* time)
{
std::string name;
if(!objmgr.GetPlayerNameByGUID(guid,name))
name = GetTrinityString(LANG_UNKNOWN);
PSendSysMessage(LANG_COMMAND_TICKETVIEW, name.c_str(),time,text);
}
//ticket commands
bool ChatHandler::HandleTicketCommand(const char* args)
{
char* px = strtok((char*)args, " ");
// ticket<end>
if (!px)
{
if(!m_session)
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
size_t count = ticketmgr.GetTicketCount();
bool accept = m_session->GetPlayer()->isAcceptTickets();
PSendSysMessage(LANG_COMMAND_TICKETCOUNT, count, accept ? GetTrinityString(LANG_ON) : GetTrinityString(LANG_OFF));
return true;
}
// ticket on
if(strncmp(px,"on",3) == 0)
{
if(!m_session)
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
m_session->GetPlayer()->SetAcceptTicket(true);
SendSysMessage(LANG_COMMAND_TICKETON);
return true;
}
// ticket off
if(strncmp(px,"off",4) == 0)
{
if(!m_session)
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
m_session->GetPlayer()->SetAcceptTicket(false);
SendSysMessage(LANG_COMMAND_TICKETOFF);
return true;
}
// ticket #num
int num = atoi(px);
if(num > 0)
{
QueryResult *result = CharacterDatabase.PQuery("SELECT guid,ticket_text,ticket_lastchange FROM character_ticket ORDER BY ticket_id ASC "_OFFSET_, num-1);
if(!result)
{
PSendSysMessage(LANG_COMMAND_TICKENOTEXIST, num);
SetSentErrorMessage(true);
return false;
}
Field* fields = result->Fetch();
uint32 guid = fields[0].GetUInt32();
char const* text = fields[1].GetString();
char const* time = fields[2].GetString();
ShowTicket(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER),text,time);
delete result;
return true;
}
std::string name = px;
if(!normalizePlayerName(name))
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
uint64 guid = objmgr.GetPlayerGUIDByName(name);
if(!guid)
return false;
// ticket $char_name
GMTicket* ticket = ticketmgr.GetGMTicket(GUID_LOPART(guid));
if(!ticket)
return false;
std::string time = TimeToTimestampStr(ticket->GetLastUpdate());
ShowTicket(guid, ticket->GetText(), time.c_str());
return true;
}
//dell all tickets
bool ChatHandler::HandleDelTicketCommand(const char *args)
{
char* px = strtok((char*)args, " ");
if (!px)
return false;
// delticket all
if(strncmp(px,"all",4) == 0)
{
ticketmgr.DeleteAll();
SendSysMessage(LANG_COMMAND_ALLTICKETDELETED);
return true;
}
int num = (uint32)atoi(px);
// delticket #num
if(num > 0)
{
QueryResult* result = CharacterDatabase.PQuery("SELECT guid FROM character_ticket ORDER BY ticket_id ASC "_OFFSET_,num-1);
if(!result)
{
PSendSysMessage(LANG_COMMAND_TICKENOTEXIST, num);
SetSentErrorMessage(true);
return false;
}
Field* fields = result->Fetch();
uint32 guid = fields[0].GetUInt32();
delete result;
ticketmgr.Delete(guid);
//notify player
if(Player* pl = objmgr.GetPlayer(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER)))
{
pl->GetSession()->SendGMTicketGetTicket(0x0A, 0);
PSendSysMessage(LANG_COMMAND_TICKETPLAYERDEL, pl->GetName());
}
else
PSendSysMessage(LANG_COMMAND_TICKETDEL);
return true;
}
std::string name = px;
if(!normalizePlayerName(name))
{
SendSysMessage(LANG_PLAYER_NOT_FOUND);
SetSentErrorMessage(true);
return false;
}
uint64 guid = objmgr.GetPlayerGUIDByName(name);
if(!guid)
return false;
// delticket $char_name
ticketmgr.Delete(GUID_LOPART(guid));
// notify players about ticket deleting
if(Player* sender = objmgr.GetPlayer(guid))
sender->GetSession()->SendGMTicketGetTicket(0x0A,0);
PSendSysMessage(LANG_COMMAND_TICKETPLAYERDEL,px);
return true;
}
//set spawn dist of creature //set spawn dist of creature
bool ChatHandler::HandleNpcSpawnDistCommand(const char* args) bool ChatHandler::HandleNpcSpawnDistCommand(const char* args)
{ {
+3 -3
View File
@@ -116,9 +116,6 @@ $(srcdir)/GameObject.cpp \
$(srcdir)/GameObject.h \ $(srcdir)/GameObject.h \
$(srcdir)/GlobalEvents.cpp \ $(srcdir)/GlobalEvents.cpp \
$(srcdir)/GlobalEvents.h \ $(srcdir)/GlobalEvents.h \
$(srcdir)/GMTicketHandler.cpp \
$(srcdir)/GMTicketMgr.cpp \
$(srcdir)/GMTicketMgr.h \
$(srcdir)/GossipDef.cpp \ $(srcdir)/GossipDef.cpp \
$(srcdir)/GossipDef.h \ $(srcdir)/GossipDef.h \
$(srcdir)/GridDefines.h \ $(srcdir)/GridDefines.h \
@@ -256,6 +253,9 @@ $(srcdir)/TargetedMovementGenerator.h \
$(srcdir)/TaxiHandler.cpp \ $(srcdir)/TaxiHandler.cpp \
$(srcdir)/TemporarySummon.cpp \ $(srcdir)/TemporarySummon.cpp \
$(srcdir)/TemporarySummon.h \ $(srcdir)/TemporarySummon.h \
$(srcdir)/TicketHandler.cpp \
$(srcdir)/TicketMgr.cpp \
$(srcdir)/TicketMgr.h \
$(srcdir)/tools.cpp \ $(srcdir)/tools.cpp \
$(srcdir)/Tools.h \ $(srcdir)/Tools.h \
$(srcdir)/TotemAI.cpp \ $(srcdir)/TotemAI.cpp \
+2 -2
View File
@@ -547,7 +547,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
/*0x204*/ { "CMSG_DECHARGE", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x204*/ { "CMSG_DECHARGE", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x205*/ { "CMSG_GMTICKET_CREATE", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketCreateOpcode }, /*0x205*/ { "CMSG_GMTICKET_CREATE", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketCreateOpcode },
/*0x206*/ { "SMSG_GMTICKET_CREATE", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x206*/ { "SMSG_GMTICKET_CREATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x207*/ { "CMSG_GMTICKET_UPDATETEXT", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketUpdateTextOpcode }, /*0x207*/ { "CMSG_GMTICKET_UPDATETEXT", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketUpdateOpcode },
/*0x208*/ { "SMSG_GMTICKET_UPDATETEXT", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x208*/ { "SMSG_GMTICKET_UPDATETEXT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x209*/ { "SMSG_ACCOUNT_DATA_TIMES", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x209*/ { "SMSG_ACCOUNT_DATA_TIMES", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x20A*/ { "CMSG_REQUEST_ACCOUNT_DATA", STATUS_LOGGEDIN, &WorldSession::HandleRequestAccountData }, /*0x20A*/ { "CMSG_REQUEST_ACCOUNT_DATA", STATUS_LOGGEDIN, &WorldSession::HandleRequestAccountData },
@@ -838,7 +838,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
/*0x327*/ { "CMSG_GM_UPDATE_TICKET_STATUS", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x327*/ { "CMSG_GM_UPDATE_TICKET_STATUS", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x328*/ { "SMSG_GM_TICKET_STATUS_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x328*/ { "SMSG_GM_TICKET_STATUS_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x329*/ { "MSG_SET_DUNGEON_DIFFICULTY", STATUS_LOGGEDIN, &WorldSession::HandleDungeonDifficultyOpcode }, /*0x329*/ { "MSG_SET_DUNGEON_DIFFICULTY", STATUS_LOGGEDIN, &WorldSession::HandleDungeonDifficultyOpcode },
/*0x32A*/ { "CMSG_GMSURVEY_SUBMIT", STATUS_LOGGEDIN, &WorldSession::HandleGMSurveySubmit }, /*0x32A*/ { "CMSG_GMSURVEY_SUBMIT", STATUS_LOGGEDIN, &WorldSession::Handle_NULL },//&WorldSession::HandleGMSurveySubmit
/*0x32B*/ { "SMSG_UPDATE_INSTANCE_OWNERSHIP", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x32B*/ { "SMSG_UPDATE_INSTANCE_OWNERSHIP", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x32C*/ { "CMSG_IGNORE_KNOCKBACK_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x32C*/ { "CMSG_IGNORE_KNOCKBACK_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x32D*/ { "SMSG_CHAT_PLAYER_AMBIGUOUS", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x32D*/ { "SMSG_CHAT_PLAYER_AMBIGUOUS", STATUS_NEVER, &WorldSession::Handle_ServerSide },
+1 -14
View File
@@ -268,9 +268,7 @@ Player::Player (WorldSession *session): Unit()
m_divider = 0; m_divider = 0;
m_ExtraFlags = 0; m_ExtraFlags = 0;
if(GetSession()->GetSecurity() >= SEC_GAMEMASTER)
SetAcceptTicket(true);
// players always accept // players always accept
if(GetSession()->GetSecurity() == SEC_PLAYER) if(GetSession()->GetSecurity() == SEC_PLAYER)
SetAcceptWhispers(true); SetAcceptWhispers(true);
@@ -14313,17 +14311,6 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder )
break; break;
} }
switch(sWorld.getConfig(CONFIG_GM_ACCEPT_TICKETS))
{
default:
case 0: break; // disable
case 1: SetAcceptTicket(true); break; // enable
case 2: // save state
if(extraflags & PLAYER_EXTRA_GM_ACCEPT_TICKETS)
SetAcceptTicket(true);
break;
}
switch(sWorld.getConfig(CONFIG_GM_CHAT)) switch(sWorld.getConfig(CONFIG_GM_CHAT))
{ {
default: default:
-3
View File
@@ -496,7 +496,6 @@ enum PlayerExtraFlags
{ {
// gm abilities // gm abilities
PLAYER_EXTRA_GM_ON = 0x0001, PLAYER_EXTRA_GM_ON = 0x0001,
PLAYER_EXTRA_GM_ACCEPT_TICKETS = 0x0002,
PLAYER_EXTRA_ACCEPT_WHISPERS = 0x0004, PLAYER_EXTRA_ACCEPT_WHISPERS = 0x0004,
PLAYER_EXTRA_TAXICHEAT = 0x0008, PLAYER_EXTRA_TAXICHEAT = 0x0008,
PLAYER_EXTRA_GM_INVISIBLE = 0x0010, PLAYER_EXTRA_GM_INVISIBLE = 0x0010,
@@ -959,8 +958,6 @@ class TRINITY_DLL_SPEC Player : public Unit
void InitTaxiNodesForLevel() { m_taxi.InitTaxiNodesForLevel(getRace(),getLevel()); } void InitTaxiNodesForLevel() { m_taxi.InitTaxiNodesForLevel(getRace(),getLevel()); }
bool ActivateTaxiPathTo(std::vector<uint32> const& nodes, uint32 mount_id = 0 , Creature* npc = NULL); bool ActivateTaxiPathTo(std::vector<uint32> const& nodes, uint32 mount_id = 0 , Creature* npc = NULL);
// mount_id can be used in scripting calls // mount_id can be used in scripting calls
bool isAcceptTickets() const { return GetSession()->GetSecurity() >= SEC_GAMEMASTER && (m_ExtraFlags & PLAYER_EXTRA_GM_ACCEPT_TICKETS); }
void SetAcceptTicket(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_GM_ACCEPT_TICKETS; else m_ExtraFlags &= ~PLAYER_EXTRA_GM_ACCEPT_TICKETS; }
bool isAcceptWhispers() const { return m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS; } bool isAcceptWhispers() const { return m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS; }
void SetAcceptWhispers(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; } void SetAcceptWhispers(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; }
bool isGameMaster() const { return m_ExtraFlags & PLAYER_EXTRA_GM_ON; } bool isGameMaster() const { return m_ExtraFlags & PLAYER_EXTRA_GM_ON; }
+186
View File
@@ -0,0 +1,186 @@
/*
* Copyright (C) 2005-2008 MaNGOS
*
* Copyright (C) 2008 Trinity
*
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "Language.h"
#include "ObjectAccessor.h"
#include "WorldPacket.h"
#include "Common.h"
#include "Log.h"
#include "ObjectAccessor.h"
#include "Player.h"
#include "Chat.h"
#include "TicketMgr.h"
#include "World.h"
#include "Chat.h"
void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data )
{
// always do a packet check
CHECK_PACKET_SIZE(recv_data, 4*4+1+2*4);
uint32 map;
float x, y, z;
std::string ticketText = "";
std::string ticketText2 = "";
GM_Ticket *ticket = new GM_Ticket;
WorldPacket data(SMSG_GMTICKET_CREATE, 4);
// recv Data
recv_data >> map;
recv_data >> x;
recv_data >> y;
recv_data >> z;
recv_data >> ticketText;
// get additional data
recv_data >> ticketText2;
// assign values
ticket->name = GetPlayer()->GetName();
ticket->guid = ticketmgr.GenerateTicketID();
ticket->playerGuid = GetPlayer()->GetGUID();
ticket->message = ticketText;
ticket->timestamp = time(NULL);
ticket->closed = false;
ticket->assignedToGM = 0;
ticket->comment = "";
// remove ticket by player, shouldn't happen
ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID());
// add ticket
ticketmgr.AddGMTicket(ticket, false);
// Response - no errors
data << uint32(2);
// Send ticket creation
SendPacket(&data);
sWorld.SendGMText(LANG_COMMAND_TICKETNEW, ticket->name.c_str(), ticket->guid);
}
void WorldSession::HandleGMTicketUpdateOpcode( WorldPacket & recv_data)
{
// always do a packet check
CHECK_PACKET_SIZE(recv_data,1);
std::string message = "";
time_t t = time(NULL);
WorldPacket data(SMSG_GMTICKET_UPDATETEXT, 4);
// recv Data
recv_data >> message;
// Update Ticket
GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
// Check if player has a GM Ticket yet
if(!ticket)
{
// Response - error couldnt find existing Ticket
data << uint32(1);
// Send packet
SendPacket(&data);
return;
}
ticket->message = message;
ticket->timestamp = (uint32)t;
ticketmgr.UpdateGMTicket(ticket);
// Response - no errors
data << uint32(2);
// Send packet
SendPacket(&data);
sWorld.SendGMText(LANG_COMMAND_TICKETUPDATED, GetPlayer()->GetName(), ticket->guid);
}
void WorldSession::HandleGMTicketDeleteOpcode( WorldPacket & /*recv_data*/)
{
// NO recv_data, NO packet check size
GM_Ticket* ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
// Remove Tickets from Player
ticketmgr.RemoveGMTicketByPlayer(GetPlayer()->GetGUID());
// Response - no errors
WorldPacket data(SMSG_GMTICKET_DELETETICKET, 4);
data << uint32(9);
// Send Packet
SendPacket(&data);
sWorld.SendGMText(LANG_COMMAND_TICKETPLAYERABANDON, GetPlayer()->GetName(), ticket->guid );
}
void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/)
{
// NO recv_data NO packet size check
WorldPacket data(SMSG_GMTICKET_GETTICKET, 400);
// get Current Ticket
GM_Ticket *ticket = ticketmgr.GetGMTicketByPlayer(GetPlayer()->GetGUID());
// check for existing ticket
if(!ticket)
{
data << uint32(10);
// send packet
SendPacket(&data);
return;
}
// Send current Ticket
data << uint32(6); // unk ?
data << ticket->message.c_str();
SendPacket(&data);
}
void WorldSession::HandleGMTicketSystemStatusOpcode( WorldPacket & /*recv_data*/)
{
// NO recv_data NO packet size check
WorldPacket data(SMSG_GMTICKET_SYSTEMSTATUS, 4);
// Response - System is working Fine
// No need for checks, ticket system is active
// in case of disactivity, this should be set to (0)
data << uint32(1);
// Send Packet
SendPacket(&data);
}
+207
View File
@@ -0,0 +1,207 @@
/*
* Copyright (C) 2005-2008 MaNGOS
*
* Copyright (C) 2008 Trinity
*
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "TicketMgr.h"
#include "Policies/SingletonImp.h"
#include "World.h"
#include "ObjectMgr.h"
#include "Language.h"
#include "Player.h"
INSTANTIATE_SINGLETON_1( TicketMgr );
#include "Common.h"
//#include "Log.h"
#include "ObjectAccessor.h"
GM_Ticket* TicketMgr::GetGMTicket(uint64 ticketGuid)
{
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
{
if((*i)->guid == ticketGuid)
{
return (*i);
}
++i;
}
return NULL;
}
GM_Ticket* TicketMgr::GetGMTicketByPlayer(uint64 playerGuid)
{
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
{
if((*i)->playerGuid == playerGuid && !(*i)->closed)
{
return (*i);
}
++i;
}
return NULL;
}
GM_Ticket* TicketMgr::GetGMTicketByName(const char* name)
{
std::string pname = name;
if(!normalizePlayerName(pname))
return NULL;
Player *plr = objmgr.GetPlayer(pname.c_str());
if(!plr)
return NULL;
uint64 playerGuid = plr->GetGUID();
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
{
if((*i)->playerGuid == playerGuid && !(*i)->closed)
{
return (*i);
}
++i;
}
return NULL;
}
void TicketMgr::AddGMTicket(GM_Ticket *ticket, bool startup)
{
ASSERT( ticket );
GM_TicketList.push_back(ticket);
// save
if(!startup)
SaveGMTicket(ticket);
}
void TicketMgr::DeleteGMTicketPermanently(uint64 ticketGuid)
{
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
{
if((*i)->guid == ticketGuid)
{
i = GM_TicketList.erase(i);
}
else
{
++i;
}
}
// delete database record
CharacterDatabase.PExecute("DELETE FROM gm_tickets WHERE guid=%u", ticketGuid);
}
void TicketMgr::LoadGMTickets()
{
// Delete all out of object holder
GM_TicketList.clear();
QueryResult *result = CharacterDatabase.Query( "SELECT `guid`, `playerGuid`, `name`, `message`, `timestamp`, `closed`, `assignedto`, `comment` FROM gm_tickets WHERE deleted = '0'" );
GM_Ticket *ticket;
//ticket = NULL;
if(!result)
return;
do
{
Field *fields = result->Fetch();
ticket = new GM_Ticket;
ticket->guid = fields[0].GetUInt64();
ticket->playerGuid = fields[1].GetUInt64();
ticket->name = fields[2].GetString();
ticket->message = fields[3].GetString();
ticket->timestamp = fields[4].GetUInt32();
ticket->closed = fields[5].GetUInt16();
ticket->assignedToGM = fields[6].GetUInt64();
ticket->comment = fields[7].GetString();
AddGMTicket(ticket, true);
} while( result->NextRow() );
sWorld.SendGMText(LANG_COMMAND_TICKETRELOAD, result->GetRowCount());
delete result;
}
void TicketMgr::RemoveGMTicket(uint64 ticketGuid)
{
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
{
if((*i)->guid == ticketGuid && !(*i)->closed)
{
(*i)->closed = true;
SaveGMTicket((*i));
}
++i;
}
}
void TicketMgr::RemoveGMTicketByPlayer(uint64 playerGuid)
{
for(GmTicketList::iterator i = GM_TicketList.begin(); i != GM_TicketList.end();)
{
if((*i)->playerGuid == playerGuid && !(*i)->closed)
{
(*i)->closed = true;
SaveGMTicket((*i));
}
++i;
}
}
void TicketMgr::SaveGMTicket(GM_Ticket* ticket)
{
std::stringstream ss;
ss << "REPLACE INTO gm_tickets (`guid`, `playerGuid`, `name`, `message`, `timestamp`, `closed`, `assignedto`, `comment`) VALUES(";
ss << ticket->guid << ", ";
ss << ticket->playerGuid << ", '";
ss << ticket->name << "', '";
ss << ticket->message << "', " ;
ss << ticket->timestamp << ", ";
ss << ticket->closed << ", '";
ss << ticket->assignedToGM << "', '";
ss << ticket->comment << "');";
CharacterDatabase.BeginTransaction();
CharacterDatabase.Execute(ss.str().c_str());
CharacterDatabase.CommitTransaction();
}
void TicketMgr::UpdateGMTicket(GM_Ticket *ticket)
{
SaveGMTicket(ticket);
}
uint64 TicketMgr::GenerateTicketID()
{
QueryResult *result = CharacterDatabase.Query("SELECT MAX(guid) FROM gm_tickets");
if(result)
{
m_ticketid = result->Fetch()[0].GetUInt64() + 1;
delete result;
}
return m_ticketid;
}
+89
View File
@@ -0,0 +1,89 @@
/*
* Copyright (C) 2005-2008 MaNGOS
*
* Copyright (C) 2008 Trinity
*
* 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, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _TICKETMGR_H
#define _TICKETMGR_H
#include "Policies/Singleton.h"
#include "Database/DatabaseEnv.h"
#include "Util.h"
#include "Config/ConfigEnv.h"
#include <map>
struct GM_Ticket
{
uint64 guid;
uint64 playerGuid;
std::string name;
std::string message;
uint64 timestamp;
bool closed;
uint64 assignedToGM;
std::string comment;
};
enum GMticketType
{
GM_TICKET_TYPE_STUCK = 1,
GM_TICKET_TYPE_BEHAVIOR_HARASSMENT = 2,
GM_TICKET_TYPE_GUILD = 3,
GM_TICKET_TYPE_ITEM = 4,
GM_TICKET_TYPE_ENVIRONMENTAL = 5,
GM_TICKET_TYPE_NON_QUEST_CREEP = 6,
GM_TICKET_TYPE_QUEST_QUEST_NPC = 7,
GM_TICKET_TYPE_TECHNICAL = 8,
GM_TICKET_TYPE_ACCOUNT_BILLING = 9,
GM_TICKET_TYPE_CHARACTER = 10
};
// Map Typedef
typedef std::list<GM_Ticket*> GmTicketList;
class TicketMgr
{
public:
TicketMgr(){} //constructor
~TicketMgr(){} //destructor
// Object Holder
GmTicketList GM_TicketList;
void AddGMTicket(GM_Ticket *ticket, bool startup);
void DeleteAllRemovedGMTickets();
void DeleteGMTicketPermanently(uint64 ticketGuid);
void LoadGMTickets();
void RemoveGMTicketByPlayer(uint64 playerGuid);
void RemoveGMTicket(uint64 ticketGuid);
void UpdateGMTicket(GM_Ticket *ticket);
void SaveGMTicket(GM_Ticket* ticket);
uint64 TicketMgr::GenerateTicketID();
GM_Ticket* GetGMTicket(uint64 ticketGuid);
GM_Ticket* GetGMTicketByPlayer(uint64 playerGuid);
GM_Ticket* GetGMTicketByName(const char *name);
protected:
uint64 m_ticketid;
};
#endif
#define ticketmgr Trinity::Singleton<TicketMgr>::Instance()
+1 -4
View File
@@ -59,7 +59,7 @@
#include "CellImpl.h" #include "CellImpl.h"
#include "InstanceSaveMgr.h" #include "InstanceSaveMgr.h"
#include "WaypointManager.h" #include "WaypointManager.h"
#include "GMTicketMgr.h" #include "TicketMgr.h"
#include "Util.h" #include "Util.h"
#include "Language.h" #include "Language.h"
#include "CreatureGroups.h" #include "CreatureGroups.h"
@@ -737,14 +737,11 @@ void World::LoadConfigSettings(bool reload)
} }
m_configs[CONFIG_GM_LOGIN_STATE] = sConfig.GetIntDefault("GM.LoginState",2); m_configs[CONFIG_GM_LOGIN_STATE] = sConfig.GetIntDefault("GM.LoginState",2);
m_configs[CONFIG_GM_ACCEPT_TICKETS] = sConfig.GetIntDefault("GM.AcceptTickets",2);
m_configs[CONFIG_GM_CHAT] = sConfig.GetIntDefault("GM.Chat",2); m_configs[CONFIG_GM_CHAT] = sConfig.GetIntDefault("GM.Chat",2);
m_configs[CONFIG_GM_WISPERING_TO] = sConfig.GetIntDefault("GM.WhisperingTo",2); m_configs[CONFIG_GM_WISPERING_TO] = sConfig.GetIntDefault("GM.WhisperingTo",2);
m_configs[CONFIG_GM_IN_GM_LIST] = sConfig.GetBoolDefault("GM.InGMList",false); m_configs[CONFIG_GM_IN_GM_LIST] = sConfig.GetBoolDefault("GM.InGMList",false);
m_configs[CONFIG_GM_IN_WHO_LIST] = sConfig.GetBoolDefault("GM.InWhoList",false); m_configs[CONFIG_GM_IN_WHO_LIST] = sConfig.GetBoolDefault("GM.InWhoList",false);
m_configs[CONFIG_GM_LOG_TRADE] = sConfig.GetBoolDefault("GM.LogTrade", false); m_configs[CONFIG_GM_LOG_TRADE] = sConfig.GetBoolDefault("GM.LogTrade", false);
m_configs[CONFIG_START_GM_LEVEL] = sConfig.GetIntDefault("GM.StartLevel", 1); m_configs[CONFIG_START_GM_LEVEL] = sConfig.GetIntDefault("GM.StartLevel", 1);
if(m_configs[CONFIG_START_GM_LEVEL] < m_configs[CONFIG_START_PLAYER_LEVEL]) if(m_configs[CONFIG_START_GM_LEVEL] < m_configs[CONFIG_START_PLAYER_LEVEL])
{ {
-1
View File
@@ -121,7 +121,6 @@ enum WorldConfigs
CONFIG_MAX_PRIMARY_TRADE_SKILL, CONFIG_MAX_PRIMARY_TRADE_SKILL,
CONFIG_MIN_PETITION_SIGNS, CONFIG_MIN_PETITION_SIGNS,
CONFIG_GM_LOGIN_STATE, CONFIG_GM_LOGIN_STATE,
CONFIG_GM_ACCEPT_TICKETS,
CONFIG_GM_CHAT, CONFIG_GM_CHAT,
CONFIG_GM_WISPERING_TO, CONFIG_GM_WISPERING_TO,
CONFIG_GM_IN_GM_LIST, CONFIG_GM_IN_GM_LIST,
+8 -7
View File
@@ -268,14 +268,15 @@ class TRINITY_DLL_SPEC WorldSession
void HandleLogoutRequestOpcode(WorldPacket& recvPacket); void HandleLogoutRequestOpcode(WorldPacket& recvPacket);
void HandlePlayerLogoutOpcode(WorldPacket& recvPacket); void HandlePlayerLogoutOpcode(WorldPacket& recvPacket);
void HandleLogoutCancelOpcode(WorldPacket& recvPacket); void HandleLogoutCancelOpcode(WorldPacket& recvPacket);
void HandleGMTicketGetTicketOpcode(WorldPacket& recvPacket);
void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
void HandleGMTicketSystemStatusOpcode(WorldPacket& recvPacket);
void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket); // GM Ticket opcodes
void HandleGMTicketUpdateTextOpcode(WorldPacket& recvPacket); void HandleGMTicketCreateOpcode(WorldPacket& recvPacket);
void HandleGMTicketUpdateOpcode(WorldPacket& recvPacket);
void HandleGMSurveySubmit(WorldPacket& recvPacket); void HandleGMTicketDeleteOpcode(WorldPacket& recvPacket);
void HandleGMTicketGetTicketOpcode(WorldPacket& recvPacket);
void HandleGMTicketSystemStatusOpcode(WorldPacket& recvPacket);
//void HandleGMSurveySubmit(WorldPacket& recvPacket);
void HandleTogglePvP(WorldPacket& recvPacket); void HandleTogglePvP(WorldPacket& recvPacket);
-7
View File
@@ -830,12 +830,6 @@ Channel.SilentlyGMJoin = 0
# 0 (disable) # 0 (disable)
# 1 (enable) # 1 (enable)
# #
# GM.AcceptTickets
# Is GM accepting tickets from player by default or not.
# Default: 2 (last save state)
# 0 (disable)
# 1 (enable)
#
# GM.Chat # GM.Chat
# GM chat mode at login # GM chat mode at login
# Default: 2 (last save state) # Default: 2 (last save state)
@@ -870,7 +864,6 @@ Channel.SilentlyGMJoin = 0
################################################################################################################### ###################################################################################################################
GM.LoginState = 2 GM.LoginState = 2
GM.AcceptTickets = 2
GM.Chat = 2 GM.Chat = 2
GM.WhisperingTo = 2 GM.WhisperingTo = 2
GM.InGMList = 0 GM.InGMList = 0
+12 -9
View File
@@ -252,9 +252,6 @@
<File <File
RelativePath="..\..\src\game\GameEvent.h"> RelativePath="..\..\src\game\GameEvent.h">
</File> </File>
<File
RelativePath="..\..\src\game\GMTicketHandler.cpp">
</File>
<File <File
RelativePath="..\..\src\game\GossipDef.cpp"> RelativePath="..\..\src\game\GossipDef.cpp">
</File> </File>
@@ -490,6 +487,9 @@
<File <File
RelativePath="..\..\src\game\TaxiHandler.cpp"> RelativePath="..\..\src\game\TaxiHandler.cpp">
</File> </File>
<File
RelativePath="..\..\src\game\TicketHandler.cpp">
</File>
<File <File
RelativePath="..\..\src\game\TradeHandler.cpp"> RelativePath="..\..\src\game\TradeHandler.cpp">
</File> </File>
@@ -628,12 +628,7 @@
<File <File
RelativePath="..\..\src\game\GameObject.h"> RelativePath="..\..\src\game\GameObject.h">
</File> </File>
<File
RelativePath="..\..\src\game\GMTicketMgr.cpp">
</File>
<File
RelativePath="..\..\src\game\GMTicketMgr.h">
</File>
<File <File
RelativePath="..\..\src\game\GuardAI.cpp"> RelativePath="..\..\src\game\GuardAI.cpp">
</File> </File>
@@ -797,6 +792,14 @@
<File <File
RelativePath="..\..\src\game\TemporarySummon.h"> RelativePath="..\..\src\game\TemporarySummon.h">
</File> </File>
<File
RelativePath="..\..\src\game\TicketMgr.cpp"
>
</File>
<File
RelativePath="..\..\src\game\TicketMgr.h"
>
</File>
<File <File
RelativePath="..\..\src\game\Totem.cpp"> RelativePath="..\..\src\game\Totem.cpp">
</File> </File>
+12 -12
View File
@@ -514,10 +514,6 @@
RelativePath="..\..\src\game\GameEvent.h" RelativePath="..\..\src\game\GameEvent.h"
> >
</File> </File>
<File
RelativePath="..\..\src\game\GMTicketHandler.cpp"
>
</File>
<File <File
RelativePath="..\..\src\game\GossipDef.cpp" RelativePath="..\..\src\game\GossipDef.cpp"
> >
@@ -810,6 +806,10 @@
RelativePath="..\..\src\game\TaxiHandler.cpp" RelativePath="..\..\src\game\TaxiHandler.cpp"
> >
</File> </File>
<File
RelativePath="..\..\src\game\TicketHandler.cpp"
>
</File>
<File <File
RelativePath="..\..\src\game\TradeHandler.cpp" RelativePath="..\..\src\game\TradeHandler.cpp"
> >
@@ -994,14 +994,6 @@
RelativePath="..\..\src\game\GameObject.h" RelativePath="..\..\src\game\GameObject.h"
> >
</File> </File>
<File
RelativePath="..\..\src\game\GMTicketMgr.cpp"
>
</File>
<File
RelativePath="..\..\src\game\GMTicketMgr.h"
>
</File>
<File <File
RelativePath="..\..\src\game\GuardAI.cpp" RelativePath="..\..\src\game\GuardAI.cpp"
> >
@@ -1214,6 +1206,14 @@
RelativePath="..\..\src\game\TemporarySummon.h" RelativePath="..\..\src\game\TemporarySummon.h"
> >
</File> </File>
<File
RelativePath="..\..\src\game\TicketMgr.cpp"
>
</File>
<File
RelativePath="..\..\src\game\TicketMgr.h"
>
</File>
<File <File
RelativePath="..\..\src\game\Totem.cpp" RelativePath="..\..\src\game\Totem.cpp"
> >
+12 -12
View File
@@ -519,10 +519,6 @@
RelativePath="..\..\src\game\GameEvent.h" RelativePath="..\..\src\game\GameEvent.h"
> >
</File> </File>
<File
RelativePath="..\..\src\game\GMTicketHandler.cpp"
>
</File>
<File <File
RelativePath="..\..\src\game\GossipDef.cpp" RelativePath="..\..\src\game\GossipDef.cpp"
> >
@@ -815,6 +811,10 @@
RelativePath="..\..\src\game\TaxiHandler.cpp" RelativePath="..\..\src\game\TaxiHandler.cpp"
> >
</File> </File>
<File
RelativePath="..\..\src\game\TicketHandler.cpp"
>
</File>
<File <File
RelativePath="..\..\src\game\TradeHandler.cpp" RelativePath="..\..\src\game\TradeHandler.cpp"
> >
@@ -999,14 +999,6 @@
RelativePath="..\..\src\game\GameObject.h" RelativePath="..\..\src\game\GameObject.h"
> >
</File> </File>
<File
RelativePath="..\..\src\game\GMTicketMgr.cpp"
>
</File>
<File
RelativePath="..\..\src\game\GMTicketMgr.h"
>
</File>
<File <File
RelativePath="..\..\src\game\GuardAI.cpp" RelativePath="..\..\src\game\GuardAI.cpp"
> >
@@ -1219,6 +1211,14 @@
RelativePath="..\..\src\game\TemporarySummon.h" RelativePath="..\..\src\game\TemporarySummon.h"
> >
</File> </File>
<File
RelativePath="..\..\src\game\TicketMgr.cpp"
>
</File>
<File
RelativePath="..\..\src\game\TicketMgr.h"
>
</File>
<File <File
RelativePath="..\..\src\game\Totem.cpp" RelativePath="..\..\src\game\Totem.cpp"
> >