aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Handlers/TicketHandler.cpp9
-rw-r--r--src/server/game/Tickets/TicketMgr.cpp10
-rw-r--r--src/server/game/Tickets/TicketMgr.h5
-rw-r--r--src/server/scripts/Commands/cs_ticket.cpp4
4 files changed, 22 insertions, 6 deletions
diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp
index 2da2735a3f9..7b35462e7a2 100644
--- a/src/server/game/Handlers/TicketHandler.cpp
+++ b/src/server/game/Handlers/TicketHandler.cpp
@@ -41,10 +41,15 @@ void WorldSession::HandleGMTicketCreateOpcode(WorldPacket& recvData)
}
GMTicketResponse response = GMTICKET_RESPONSE_CREATE_ERROR;
+ GmTicket* ticket = sTicketMgr->GetTicketByPlayer(GetPlayer()->GetGUID());
+
+ if (ticket && ticket->IsCompleted())
+ sTicketMgr->CloseTicket(ticket->GetId(), GetPlayer()->GetGUID());;
+
// Player must not have ticket
- if (!sTicketMgr->GetTicketByPlayer(GetPlayer()->GetGUID()))
+ if (!ticket || ticket->IsClosed())
{
- GmTicket* ticket = new GmTicket(GetPlayer(), recvData);
+ ticket = new GmTicket(GetPlayer(), recvData);
uint32 count;
std::list<uint32> times;
diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp
index fe10b81b09d..d76f6e9444b 100644
--- a/src/server/game/Tickets/TicketMgr.cpp
+++ b/src/server/game/Tickets/TicketMgr.cpp
@@ -239,7 +239,10 @@ void GmTicket::SetChatLog(std::list<uint32> time, std::string const& log)
///////////////////////////////////////////////////////////////////////////////////////////////////
// Ticket manager
-TicketMgr::TicketMgr() : _status(true), _lastTicketId(0), _lastSurveyId(0), _openTicketCount(0), _lastChange(time(NULL)) { }
+TicketMgr::TicketMgr() : _status(true), _lastTicketId(0), _lastSurveyId(0), _openTicketCount(0),
+ _lastChange(time(NULL))
+{
+}
TicketMgr::~TicketMgr()
{
@@ -247,7 +250,10 @@ TicketMgr::~TicketMgr()
delete itr->second;
}
-void TicketMgr::Initialize() { SetStatus(sWorld->getBoolConfig(CONFIG_ALLOW_TICKETS)); }
+void TicketMgr::Initialize()
+{
+ SetStatus(sWorld->getBoolConfig(CONFIG_ALLOW_TICKETS));
+}
void TicketMgr::ResetTickets()
{
diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h
index 0fe45f81360..91ef98dda23 100644
--- a/src/server/game/Tickets/TicketMgr.h
+++ b/src/server/game/Tickets/TicketMgr.h
@@ -82,7 +82,7 @@ class GmTicket
{
public:
GmTicket();
- explicit GmTicket(Player* player, WorldPacket& recvData);
+ GmTicket(Player* player, WorldPacket& recvData);
~GmTicket();
bool IsClosed() const { return _closedBy; }
@@ -119,7 +119,8 @@ public:
else if (_escalatedStatus == TICKET_UNASSIGNED)
_escalatedStatus = TICKET_ASSIGNED;
}
- void SetClosedBy(const int64& value) { _closedBy = value; }
+ void SetClosedBy(int64 value) { _closedBy = value; }
+ void SetCompleted() { _completed = true; }
void SetMessage(std::string const& message)
{
_message = message;
diff --git a/src/server/scripts/Commands/cs_ticket.cpp b/src/server/scripts/Commands/cs_ticket.cpp
index 95cbf70e1f8..0795b2ab90c 100644
--- a/src/server/scripts/Commands/cs_ticket.cpp
+++ b/src/server/scripts/Commands/cs_ticket.cpp
@@ -235,6 +235,10 @@ public:
if (player->IsInWorld())
ticket->SendResponse(player->GetSession());
+ SQLTransaction trans = SQLTransaction(NULL);
+ ticket->SetCompleted();
+ ticket->SaveToDB(trans);
+
sTicketMgr->UpdateLastChange();
return true;
}