Changeset 42 for trunk/src/game

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

[svn] * Send ShutdownMsg? to console using outstring_log.
* Prevent Client Crashes when MOVEMENTFLAG_ONTRANSPORT and MOVEMENTFLAG_SPLINE2 is set on creatures.
* Implement four new SEC_ADMINISTRATOR commands:

  • Group (.group [leader]/[disband]/[remove]) commands.
  • GameObject? State (.gobject state <guid> <state>) command.

Original author: Seline
Date: 2008-10-12 18:26:26-05:00

Location:
trunk/src/game
Files:
6 modified

Legend:

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

    r40 r42  
    215215    }; 
    216216 
     217    static ChatCommand groupCommandTable[] = 
     218    { 
     219        { "leader",         SEC_ADMINISTRATOR,  &ChatHandler::HandleGroupLeaderCommand,         "", NULL }, 
     220        { "disband",        SEC_ADMINISTRATOR,  &ChatHandler::HandleGroupDisbandCommand,        "", NULL }, 
     221        { "remove",         SEC_ADMINISTRATOR,  &ChatHandler::HandleGroupRemoveCommand,         "", NULL }, 
     222        { NULL,             0,                  NULL,                                           "", NULL } 
     223    }; 
     224 
    217225    static ChatCommand lookupPlayerCommandTable[] = 
    218226    { 
     
    341349        { "move",           SEC_GAMEMASTER,     &ChatHandler::HandleMoveObjectCommand,          "", NULL }, 
    342350        { "near",           SEC_ADMINISTRATOR,  &ChatHandler::HandleNearObjectCommand,          "", NULL }, 
     351        { "state",          SEC_ADMINISTRATOR,  &ChatHandler::HandleObjectStateCommand,         "", NULL }, 
    343352        { NULL,             0,                  NULL,                                           "", NULL } 
    344353    }; 
     
    389398        { "lookup",         SEC_ADMINISTRATOR,  NULL,                                           "", lookupCommandTable }, 
    390399        { "pdump",          SEC_ADMINISTRATOR,  NULL,                                           "", pdumpCommandTable }, 
     400        { "group",          SEC_ADMINISTRATOR,  NULL,                                           "", groupCommandTable }, 
    391401        { "guild",          SEC_ADMINISTRATOR,  NULL,                                           "", guildCommandTable }, 
    392402        { "cast",           SEC_ADMINISTRATOR,  NULL,                                           "", castCommandTable }, 
     
    10851095    return objmgr.GetGameTele(cId); 
    10861096} 
     1097 
     1098bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline) 
     1099{ 
     1100    plr  = NULL; 
     1101    guid = 0; 
     1102 
     1103    if(cname) 
     1104    { 
     1105        std::string name = cname; 
     1106        if(!name.empty()) 
     1107        { 
     1108            if(!normalizePlayerName(name)) 
     1109            { 
     1110                PSendSysMessage(LANG_PLAYER_NOT_FOUND); 
     1111                SetSentErrorMessage(true); 
     1112                return false; 
     1113            } 
     1114 
     1115            plr = objmgr.GetPlayer(name.c_str()); 
     1116            if(offline) 
     1117                guid = objmgr.GetPlayerGUIDByName(name.c_str()); 
     1118        } 
     1119    } 
     1120 
     1121    if(plr) 
     1122    { 
     1123        group = plr->GetGroup(); 
     1124        if(!guid || !offline) 
     1125            guid = plr->GetGUID(); 
     1126    } 
     1127    else 
     1128    { 
     1129        if(getSelectedPlayer()) 
     1130            plr = getSelectedPlayer(); 
     1131        else 
     1132            plr = m_session->GetPlayer(); 
     1133 
     1134        if(!guid || !offline) 
     1135            guid  = plr->GetGUID(); 
     1136        group = plr->GetGroup(); 
     1137    } 
     1138 
     1139    return true; 
     1140} 
  • trunk/src/game/Chat.h

    r40 r42  
    240240        bool HandleMoveObjectCommand(const char* args); 
    241241        bool HandleTurnObjectCommand(const char* args); 
     242        bool HandleObjectStateCommand(const char* args); 
    242243        bool HandlePInfoCommand(const char* args); 
    243244        bool HandlePLimitCommand(const char* args); 
     
    314315        bool HandleAddItemCommand(const char* args); 
    315316        bool HandleAddItemSetCommand(const char* args); 
     317 
     318        bool HandleGroupLeaderCommand(const char* args); 
     319        bool HandleGroupDisbandCommand(const char* args); 
     320        bool HandleGroupRemoveCommand(const char* args); 
    316321 
    317322        bool HandleGuildCreateCommand(const char* args); 
     
    394399        uint32    extractSpellIdFromLink(char* text); 
    395400        GameTele const* extractGameTeleFromLink(char* text); 
     401        bool GetPlayerGroupAndGUIDByName(const char* cname, Player* &plr, Group* &group, uint64 &guid, bool offline = false); 
    396402 
    397403        GameObject* GetObjectGlobalyWithGuidOrNearWithDbGuid(uint32 lowguid,uint32 entry); 
  • trunk/src/game/Level1.cpp

    r40 r42  
    123123    if(!*args) 
    124124        return false; 
    125     char str[1024]; 
     125    //char str[1024]; 
    126126    //sprintf(str, GetMangosString(LANG_ANNOUNCE_COLOR), m_session->GetPlayer()->GetName(), args); 
    127127    sWorld.SendWorldText(LANG_ANNOUNCE_COLOR, m_session->GetPlayer()->GetName(), args); 
  • trunk/src/game/Level3.cpp

    r40 r42  
    21762176} 
    21772177 
     2178bool ChatHandler::HandleObjectStateCommand(const char* args) 
     2179{ 
     2180    // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r 
     2181    char* cId = extractKeyFromLink((char*)args, "Hgameobject"); 
     2182    if(!cId) 
     2183        return false; 
     2184 
     2185    uint32 lowguid = atoi(cId); 
     2186    if(!lowguid) 
     2187        return false; 
     2188 
     2189    GameObject* gobj = NULL; 
     2190 
     2191    if(GameObjectData const* goData = objmgr.GetGOData(lowguid)) 
     2192        gobj = GetObjectGlobalyWithGuidOrNearWithDbGuid(lowguid, goData->id); 
     2193 
     2194    if(!gobj) 
     2195    { 
     2196        PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, lowguid); 
     2197        SetSentErrorMessage(true); 
     2198        return false; 
     2199    } 
     2200 
     2201    char* cstate = strtok(NULL, " "); 
     2202    if(!cstate) 
     2203        return false; 
     2204 
     2205    int32 state = atoi(cstate); 
     2206    if(state < 0) 
     2207        gobj->SendObjectDeSpawnAnim(gobj->GetGUID()); 
     2208    else 
     2209        gobj->SetGoState(state); 
     2210 
     2211    return true; 
     2212 
     2213    return true; 
     2214} 
     2215 
    21782216bool ChatHandler::HandleListCreatureCommand(const char* args) 
    21792217{ 
     
    54735511    return true; 
    54745512} 
     5513 
     5514bool ChatHandler::HandleGroupLeaderCommand(const char* args) 
     5515{ 
     5516    Player* plr  = NULL; 
     5517    Group* group = NULL; 
     5518    uint64 guid  = 0; 
     5519    char* cname  = strtok((char*)args, " "); 
     5520 
     5521    if(GetPlayerGroupAndGUIDByName(cname, plr, group, guid)) 
     5522        if(group && group->GetLeaderGUID() != guid) 
     5523            group->ChangeLeader(guid); 
     5524 
     5525    return true; 
     5526} 
     5527 
     5528bool ChatHandler::HandleGroupDisbandCommand(const char* args) 
     5529{ 
     5530    Player* plr  = NULL; 
     5531    Group* group = NULL; 
     5532    uint64 guid  = 0; 
     5533    char* cname  = strtok((char*)args, " "); 
     5534 
     5535    if(GetPlayerGroupAndGUIDByName(cname, plr, group, guid)) 
     5536        if(group) 
     5537            group->Disband(); 
     5538 
     5539    return true; 
     5540} 
     5541 
     5542bool ChatHandler::HandleGroupRemoveCommand(const char* args) 
     5543{ 
     5544    Player* plr  = NULL; 
     5545    Group* group = NULL; 
     5546    uint64 guid  = 0; 
     5547    char* cname  = strtok((char*)args, " "); 
     5548 
     5549    if(GetPlayerGroupAndGUIDByName(cname, plr, group, guid, true)) 
     5550        if(group) 
     5551            group->RemoveMember(guid, 0); 
     5552 
     5553    return true; 
     5554} 
  • trunk/src/game/Object.cpp

    r37 r42  
    265265            { 
    266266                flags2 = ((Unit*)this)->GetUnitMovementFlags(); 
     267                flags2 &= ~MOVEMENTFLAG_ONTRANSPORT; 
     268                flags2 &= ~MOVEMENTFLAG_SPLINE2; 
    267269            } 
    268270            break; 
  • trunk/src/game/World.cpp

    r41 r42  
    24272427 
    24282428        SendServerMessage(msgid,str.c_str(),player); 
    2429         DEBUG_LOG("Server is %s in %s",(m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shuttingdown"),str.c_str()); 
     2429        outstring_log("Server will %s in %s", (m_ShutdownMask & SHUTDOWN_MASK_RESTART ? "restart" : "shutdown"), str.c_str()); 
    24302430    } 
    24312431}