Show
Ignore:
Timestamp:
11/19/08 13:46:22 (17 years ago)
Author:
yumileroy
Message:

[svn] * Improve some arena team related DB access
* Cache GM tickets on server startup.
* Remove unused src/game/HateMatrix.h and references.
* Better check client inventory pos data received in some client packets to
skip invalid cases

Original author: KingPin?
Date: 2008-11-10 09:04:23-06:00

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/Level2.cpp

    r177 r207  
    3737#include "SpellMgr.h" 
    3838#include "AccountMgr.h" 
     39#include "GMTicketMgr.h" 
    3940#include "WaypointManager.h" 
    4041#include "Util.h" 
     
    863864    if(srcslot==dstslot) 
    864865        return true; 
    865          
     866 
     867    if(!m_session->GetPlayer()->IsValidPos(INVENTORY_SLOT_BAG_0,srcslot)) 
     868        return false; 
     869 
     870    if(!m_session->GetPlayer()->IsValidPos(INVENTORY_SLOT_BAG_0,dstslot)) 
     871        return false; 
     872 
    866873    uint16 src = ((INVENTORY_SLOT_BAG_0 << 8) | srcslot); 
    867874    uint16 dst = ((INVENTORY_SLOT_BAG_0 << 8) | dstslot); 
     
    17961803    else 
    17971804    { 
    1798         QueryResult *result = CharacterDatabase.PQuery("SELECT totaltime FROM characters WHERE guid = '%u'", targetGUID); 
     1805        QueryResult *result = CharacterDatabase.PQuery("SELECT totaltime FROM characters WHERE guid = '%u'", GUID_LOPART(targetGUID)); 
    17991806        if (!result) 
    18001807        { 
     
    19211928                } 
    19221929 
    1923         size_t count; 
    1924         QueryResult *result = CharacterDatabase.Query("SELECT COUNT(ticket_id) FROM character_ticket"); 
    1925         if(result) 
    1926         { 
    1927             count = (*result)[0].GetUInt32(); 
    1928             delete result; 
    1929         } 
    1930         else 
    1931             count = 0; 
     1930        size_t count = ticketmgr.GetTicketCount(); 
    19321931 
    19331932        bool accept = m_session->GetPlayer()->isAcceptTickets(); 
     
    19761975        { 
    19771976            PSendSysMessage(LANG_COMMAND_TICKENOTEXIST, num); 
    1978             delete result; 
    19791977            SetSentErrorMessage(true); 
    19801978            return false; 
     
    19831981        Field* fields = result->Fetch(); 
    19841982 
    1985         uint64 guid = fields[0].GetUInt64(); 
     1983        uint32 guid = fields[0].GetUInt32(); 
    19861984        char const* text = fields[1].GetString(); 
    19871985        char const* time = fields[2].GetString(); 
    19881986 
    1989         ShowTicket(guid,text,time); 
     1987        ShowTicket(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER),text,time); 
    19901988        delete result; 
    19911989        return true; 
     
    20072005 
    20082006    // ticket $char_name 
    2009     QueryResult *result = CharacterDatabase.PQuery("SELECT ticket_text,ticket_lastchange FROM character_ticket WHERE guid = '%u' ORDER BY ticket_id ASC",GUID_LOPART(guid)); 
    2010  
    2011     if(!result) 
    2012         return false; 
    2013  
    2014     Field* fields = result->Fetch(); 
    2015  
    2016     char const* text = fields[0].GetString(); 
    2017     char const* time = fields[1].GetString(); 
    2018  
    2019     ShowTicket(guid,text,time); 
    2020     delete result; 
    2021  
    2022     return true; 
    2023 } 
    2024  
    2025 uint32 ChatHandler::GetTicketIDByNum(uint32 num) 
    2026 { 
    2027     QueryResult *result = CharacterDatabase.Query("SELECT ticket_id FROM character_ticket"); 
    2028  
    2029     if(!result || num > result->GetRowCount()) 
    2030     { 
    2031         PSendSysMessage(LANG_COMMAND_TICKENOTEXIST, num); 
    2032         delete result; 
    2033         return 0; 
    2034     } 
    2035  
    2036     for(uint32 i = 1; i < num; ++i) 
    2037         result->NextRow(); 
    2038  
    2039     Field* fields = result->Fetch(); 
    2040  
    2041     uint32 id = fields[0].GetUInt32(); 
    2042     delete result; 
    2043     return id; 
     2007    GMTicket* ticket = ticketmgr.GetGMTicket(GUID_LOPART(guid)); 
     2008    if(!ticket) 
     2009        return false; 
     2010 
     2011    std::string time = TimeToTimestampStr(ticket->GetLastUpdate()); 
     2012 
     2013    ShowTicket(guid, ticket->GetText(), time.c_str()); 
     2014 
     2015    return true; 
    20442016} 
    20452017 
     
    20542026    if(strncmp(px,"all",4) == 0) 
    20552027    { 
    2056         QueryResult *result = CharacterDatabase.Query("SELECT guid FROM character_ticket"); 
    2057  
    2058         if(!result) 
    2059             return true; 
    2060  
    2061         // notify players about ticket deleting 
    2062         do 
    2063         { 
    2064             Field* fields = result->Fetch(); 
    2065  
    2066             uint64 guid = fields[0].GetUInt64(); 
    2067  
    2068             if(Player* sender = objmgr.GetPlayer(guid)) 
    2069                 sender->GetSession()->SendGMTicketGetTicket(0x0A,0); 
    2070  
    2071         }while(result->NextRow()); 
    2072  
    2073         delete result; 
    2074  
    2075         CharacterDatabase.PExecute("DELETE FROM character_ticket"); 
     2028        ticketmgr.DeleteAll(); 
    20762029        SendSysMessage(LANG_COMMAND_ALLTICKETDELETED); 
    20772030        return true; 
     
    20832036    if(num > 0) 
    20842037    { 
    2085         QueryResult *result = CharacterDatabase.PQuery("SELECT ticket_id,guid FROM character_ticket ORDER BY ticket_id ASC "_OFFSET_,num-1); 
    2086  
     2038        QueryResult* result = CharacterDatabase.PQuery("SELECT guid FROM character_ticket ORDER BY ticket_id ASC "_OFFSET_,num-1); 
    20872039        if(!result) 
    20882040        { 
    20892041            PSendSysMessage(LANG_COMMAND_TICKENOTEXIST, num); 
    2090             delete result; 
    20912042            SetSentErrorMessage(true); 
    20922043            return false; 
     
    20952046        Field* fields = result->Fetch(); 
    20962047 
    2097         uint32 id   = fields[0].GetUInt32(); 
    2098         uint64 guid = fields[1].GetUInt64(); 
     2048        uint32 guid = fields[0].GetUInt32(); 
    20992049        delete result; 
    21002050 
    2101         CharacterDatabase.PExecute("DELETE FROM character_ticket WHERE ticket_id = '%u'", id); 
    2102  
    2103         // notify players about ticket deleting 
    2104         if(Player* sender = objmgr.GetPlayer(guid)) 
    2105         { 
    2106             sender->GetSession()->SendGMTicketGetTicket(0x0A,0); 
    2107             PSendSysMessage(LANG_COMMAND_TICKETPLAYERDEL,sender->GetName()); 
     2051        ticketmgr.Delete(guid); 
     2052 
     2053        //notify player 
     2054        if(Player* pl = objmgr.GetPlayer(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER))) 
     2055        { 
     2056            pl->GetSession()->SendGMTicketGetTicket(0x0A, 0); 
     2057            PSendSysMessage(LANG_COMMAND_TICKETPLAYERDEL, pl->GetName()); 
    21082058        } 
    21092059        else 
    2110             SendSysMessage(LANG_COMMAND_TICKETDEL); 
     2060            PSendSysMessage(LANG_COMMAND_TICKETDEL); 
    21112061 
    21122062        return true; 
     
    21282078 
    21292079    // delticket $char_name 
    2130     CharacterDatabase.PExecute("DELETE FROM character_ticket WHERE guid = '%u'",GUID_LOPART(guid)); 
     2080    ticketmgr.Delete(GUID_LOPART(guid)); 
    21312081 
    21322082    // notify players about ticket deleting