Changeset 28 for trunk/src/game

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

[svn] * Updated to 6743 and 685

Moved language id used by Arena to a higher place to solve conflicts
Added the empty script folders

Original author: Neo2003
Date: 2008-10-09 08:42:22-05:00

Location:
trunk/src/game
Files:
39 modified

Legend:

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

    r6 r28  
    4848        return; 
    4949     
    50     if( !i_creature.getVictim() && !i_creature.hasUnitState(UNIT_STAT_STUNDED) && u->isTargetableForAttack() && 
     50    if( !i_creature.getVictim() && !i_creature.hasUnitState(UNIT_STAT_STUNNED) && u->isTargetableForAttack() && 
    5151        ( i_creature.IsHostileTo( u ) /*|| u->getVictim() && i_creature.IsFriendlyTo( u->getVictim() )*/ ) && 
    5252        u->isInAccessablePlaceFor(&i_creature) ) 
  • trunk/src/game/ArenaTeamHandler.cpp

    r2 r28  
    2626#include "World.h" 
    2727#include "SocialMgr.h" 
     28#include "Language.h" 
    2829 
    2930void WorldSession::HandleInspectArenaStatsOpcode(WorldPacket & recv_data) 
     
    118119        //SendArenaTeamCommandResult(ARENA_TEAM_INVITE_SS,"",Invitedname,ARENA_TEAM_PLAYER_NOT_FOUND_S); 
    119120                                                            // can't find related opcode 
    120         SendNotification("%s is not high enough level to join your team", player->GetName()); 
     121        SendNotification(LANG_HIS_ARENA_LEVEL_REQ_ERROR, player->GetName()); 
    121122        return; 
    122123    } 
     
    155156        // should send an "arena team is full" or the likes message, I just don't know the proper values so... ERR_INTERNAL 
    156157//        SendArenaTeamCommandResult(ERR_ARENA_TEAM_INVITE_SS, "", "", ERR_ARENA_TEAM_INTERNAL); 
    157         SendNotification("Your arena team is full, %s cannot join it.", player->GetName()); 
     158        SendNotification(LANG_YOUR_ARENA_TEAM_FULL, player->GetName()); 
    158159        return; 
    159160    } 
  • trunk/src/game/BattleGroundHandler.cpp

    r9 r28  
    5757    { 
    5858                                                            // temp, must be gossip message... 
    59         SendNotification("You don't meet Battleground level requirements"); 
     59        SendNotification(LANG_YOUR_BG_LEVEL_REQ_ERROR); 
    6060        return; 
    6161    } 
  • trunk/src/game/CharacterHandler.cpp

    r6 r28  
    3737#include "SocialMgr.h" 
    3838#include "Util.h" 
     39#include "Language.h" 
    3940 
    4041class LoginQueryHolder : public SqlQueryHolder 
     
    719720    { 
    720721        pCurrChar->resetSpells(); 
    721         SendNotification("Spells has been reset."); 
     722        SendNotification(LANG_RESET_SPELLS); 
    722723    } 
    723724 
     
    725726    { 
    726727        pCurrChar->resetTalents(true); 
    727         SendNotification("Talents has been reset."); 
     728        SendNotification(LANG_RESET_TALENTS); 
    728729    } 
    729730 
     
    733734 
    734735    if(pCurrChar->isGameMaster()) 
    735         SendNotification("GM mode is ON"); 
     736        SendNotification(LANG_GM_ON); 
    736737 
    737738    std::string IP_str = GetRemoteAddress(); 
  • trunk/src/game/Chat.cpp

    r18 r28  
    354354    static ChatCommand gmCommandTable[] = 
    355355    { 
     356        { "chat",           SEC_MODERATOR,      &ChatHandler::HandleGMChatCommand,              "", NULL }, 
    356357        { "list",           SEC_PLAYER,         &ChatHandler::HandleGMListCommand,              "", NULL }, 
    357358        { "visible",        SEC_MODERATOR,      &ChatHandler::HandleVisibleCommand,             "", NULL }, 
     
    508509} 
    509510 
    510 bool ChatHandler::hasStringAbbr(const char* s1, const char* s2) 
    511 { 
    512     for(;;) 
    513     { 
    514         if( !*s2 ) 
    515             return true; 
    516         else if( !*s1 ) 
     511bool ChatHandler::hasStringAbbr(const char* name, const char* part) 
     512{ 
     513    // non "" command 
     514    if( *name ) 
     515    { 
     516        // "" part from non-"" command 
     517        if( !*part ) 
    517518            return false; 
    518         else if( tolower( *s1 ) != tolower( *s2 ) ) 
    519             return false; 
    520         ++s1; ++s2; 
    521     } 
     519 
     520        for(;;) 
     521        { 
     522            if( !*part ) 
     523                return true; 
     524            else if( !*name ) 
     525                return false; 
     526            else if( tolower( *name ) != tolower( *part ) ) 
     527                return false; 
     528            ++name; ++part; 
     529        } 
     530    } 
     531    // allow with any for "" 
     532 
     533    return true; 
    522534} 
    523535 
     
    595607    while (*text == ' ') ++text; 
    596608 
    597     if(!cmd.length()) 
    598         return false; 
    599  
    600609    for(uint32 i = 0; table[i].Name != NULL; i++) 
    601610    { 
    602         // allow pass "" command name in table 
    603         if(strlen(table[i].Name) && !hasStringAbbr(table[i].Name, cmd.c_str())) 
     611        if( !hasStringAbbr(table[i].Name, cmd.c_str()) ) 
    604612            continue; 
    605613 
     
    689697            continue; 
    690698 
    691         if(strlen(table[i].Name) && !hasStringAbbr(table[i].Name, subcmd)) 
    692             continue; 
     699        if( !hasStringAbbr(table[i].Name, subcmd) ) 
    693700 
    694701        (list += "\n    ") += table[i].Name; 
     
    718725                continue; 
    719726 
    720             if(strlen(table[i].Name) && !hasStringAbbr(table[i].Name, cmd)) 
     727            if( !hasStringAbbr(table[i].Name, cmd) ) 
    721728                continue; 
    722729 
  • trunk/src/game/Chat.h

    r18 r28  
    7070 
    7171    protected: 
    72         bool hasStringAbbr(const char* s1, const char* s2); 
     72        bool hasStringAbbr(const char* name, const char* part); 
    7373        void SendGlobalSysMessage(const char *str); 
    7474 
     
    9595        bool HandleNotifyCommand(const char* args); 
    9696        bool HandleGMmodeCommand(const char* args); 
     97        bool HandleGMChatCommand(const char* args); 
    9798        bool HandleVisibleCommand(const char* args); 
    9899        bool HandleGPSCommand(const char* args); 
  • trunk/src/game/ChatHandler.cpp

    r2 r28  
    5959    if(!langDesc) 
    6060    { 
    61         SendNotification("Unknown language"); 
     61        SendNotification(LANG_UNKNOWN_LANGUAGE); 
    6262        return; 
    6363    } 
     
    7777        if(!foundAura) 
    7878        { 
    79             SendNotification("You don't know that language"); 
     79            SendNotification(LANG_NOT_LEARNED_LANGUAGE); 
    8080            return; 
    8181        } 
  • trunk/src/game/ConfusedMovementGenerator.cpp

    r2 r28  
    102102        return true; 
    103103 
    104     if(unit.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED | UNIT_STAT_DISTRACTED)) 
     104    if(unit.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED)) 
    105105        return true; 
    106106 
  • trunk/src/game/Creature.cpp

    r18 r28  
    7474    } 
    7575    return false; 
     76} 
     77 
     78size_t VendorItemData::FindItemSlot(uint32 item_id) const 
     79{ 
     80    for(size_t i = 0; i < m_items.size(); ++i ) 
     81        if(m_items[i]->item==item_id) 
     82            return i; 
     83    return m_items.size(); 
    7684} 
    7785 
     
    19111919void Creature::GetRespawnCoord( float &x, float &y, float &z, float* ori, float* dist ) const 
    19121920{ 
    1913     if(CreatureData const* data = objmgr.GetCreatureData(GetDBTableGUIDLow())) 
    1914     { 
    1915         x = data->posX; 
    1916         y = data->posY; 
    1917         z = data->posZ; 
    1918         if(ori) 
    1919             *ori = data->orientation; 
    1920         if(dist) 
    1921             *dist = data->spawndist; 
    1922     } 
    1923     else 
    1924     { 
    1925         x = GetPositionX(); 
    1926         y = GetPositionY(); 
    1927         z = GetPositionZ(); 
    1928         if(ori) 
    1929             *ori = GetOrientation(); 
    1930         if(dist) 
    1931             *dist = 0; 
    1932     } 
     1921    if (m_DBTableGuid) 
     1922    { 
     1923        if (CreatureData const* data = objmgr.GetCreatureData(GetDBTableGUIDLow())) 
     1924        { 
     1925            x = data->posX; 
     1926            y = data->posY; 
     1927            z = data->posZ; 
     1928            if(ori) 
     1929                *ori = data->orientation; 
     1930            if(dist) 
     1931                *dist = data->spawndist; 
     1932 
     1933            return; 
     1934        } 
     1935    } 
     1936 
     1937    x = GetPositionX(); 
     1938    y = GetPositionY(); 
     1939    z = GetPositionZ(); 
     1940    if(ori) 
     1941        *ori = GetOrientation(); 
     1942    if(dist) 
     1943        *dist = 0; 
    19331944} 
    19341945 
  • trunk/src/game/Creature.h

    r18 r28  
    309309    bool RemoveItem( uint32 item_id ); 
    310310    VendorItem const* FindItem(uint32 item_id) const; 
     311    size_t FindItemSlot(uint32 item_id) const; 
    311312 
    312313    void Clear() 
  • trunk/src/game/FleeingMovementGenerator.cpp

    r2 r28  
    3333        return; 
    3434 
    35     if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED) ) 
     35    if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED) ) 
    3636        return; 
    3737 
     
    339339    if( !&owner || !owner.isAlive() ) 
    340340        return false; 
    341     if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED) ) 
     341    if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED) ) 
    342342        return true; 
    343343 
  • trunk/src/game/GridNotifiers.h

    r13 r28  
    853853        { 
    854854            if(u->isAlive() && u->isInCombat() && !i_obj->IsHostileTo(u) && i_obj->IsWithinDistInMap(u, i_range) && 
    855                 (u->isFeared() || u->isCharmed() || u->isFrozen() || u->hasUnitState(UNIT_STAT_STUNDED) || u->hasUnitState(UNIT_STAT_STUNDED) || u->hasUnitState(UNIT_STAT_CONFUSED))) 
     855                (u->isFeared() || u->isCharmed() || u->isFrozen() || u->hasUnitState(UNIT_STAT_STUNNED) || u->hasUnitState(UNIT_STAT_CONFUSED))) 
    856856            { 
    857857                return true; 
  • trunk/src/game/Group.cpp

    r9 r28  
    624624        case 1:                                             //player choose Need 
    625625        { 
    626             SendLootRoll(0, playerGUID, 1, 1, *roll); 
     626            SendLootRoll(0, playerGUID, 0, 0, *roll); 
    627627            ++roll->totalNeed; 
    628628            itr->second = NEED; 
     
    631631        case 2:                                             //player choose Greed 
    632632        { 
    633             SendLootRoll(0, playerGUID, 2, 2, *roll); 
     633            SendLootRoll(0, playerGUID, 128, 2, *roll); 
    634634            ++roll->totalGreed; 
    635635            itr->second = GREED; 
  • trunk/src/game/HomeMovementGenerator.cpp

    r2 r28  
    4444        return; 
    4545 
    46     if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED | UNIT_STAT_DISTRACTED) ) 
     46    if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED) ) 
    4747        return; 
    4848 
  • trunk/src/game/Language.h

    r18 r28  
    7676    LANG_LEVEL_MINREQUIRED_AND_ITEM     = 50, 
    7777    LANG_NPC_TAINER_HELLO               = 51, 
    78     // Room for more level 0 
     78    LANG_COMMAND_INVALID_ITEM_COUNT     = 52, 
     79    LANG_COMMAND_MAIL_ITEMS_LIMIT       = 53, 
     80    // Room for more level 0              54-99 not used 
    7981 
    8082    // level 1 chat 
     
    160162    LANG_MAIL_SENT                      = 169, 
    161163    LANG_SOUND_NOT_EXIST                = 170, 
    162     // Room for more level 1 
     164    // Room for more level 1              171-199 not used 
    163165 
    164166    // level 2 chat 
     
    305307    LANG_NO_PLAYERS_FOUND               = 330, 
    306308    LANG_EXTENDED_COST_NOT_EXIST        = 331, 
    307  
    308     // Room for more level 2 
     309    LANG_GM_ON                          = 332, 
     310    LANG_GM_OFF                         = 333, 
     311    LANG_GM_CHAT_ON                     = 334, 
     312    LANG_GM_CHAT_OFF                    = 335, 
     313    // Room for more level 2              336-399 not used 
    309314 
    310315    // level 3 chat 
     
    611616    LANG_BG_GROUP_TOO_LARGE             = 711, 
    612617    LANG_ARENA_GROUP_TOO_LARGE          = 712, 
    613     LANG_ARENA_YOUR_TEAM_ONLY           = 713, 
    614     LANG_ARENA_NOT_ENOUGH_PLAYERS       = 714, 
    615     LANG_ARENA_GOLD_WINS                = 715, 
    616     LANG_ARENA_GREEN_WINS               = 716, 
    617     LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING = 717, 
    618     LANG_BG_GROUP_OFFLINE_MEMBER        = 718, 
    619     LANG_BG_GROUP_MIXED_FACTION         = 719, 
    620     LANG_BG_GROUP_MIXED_LEVELS          = 720, 
    621     LANG_BG_GROUP_MEMBER_ALREADY_IN_QUEUE = 721, 
    622     LANG_BG_GROUP_MEMBER_DESERTER       = 722, 
    623     LANG_BG_GROUP_MEMBER_NO_FREE_QUEUE_SLOTS = 723, 
    624  
    625     LANG_CANNOT_TELE_TO_BG              = 724, 
    626     LANG_CANNOT_SUMMON_TO_BG            = 725, 
    627     LANG_CANNOT_GO_TO_BG_GM             = 726, 
    628     LANG_CANNOT_GO_TO_BG_FROM_BG        = 727, 
    629  
    630     LANG_ARENA_TESTING                  = 728 
    631  
     618    LANG_YOUR_ARENA_LEVEL_REQ_ERROR     = 713, 
     619    LANG_HIS_ARENA_LEVEL_REQ_ERROR      = 714, 
     620    LANG_YOUR_BG_LEVEL_REQ_ERROR        = 715, 
     621    LANG_YOUR_ARENA_TEAM_FULL           = 716, 
     622    // Room for BG/ARENA                  717-799 not used 
     623 
     624    LANG_ARENA_YOUR_TEAM_ONLY           = 730, 
     625    LANG_ARENA_NOT_ENOUGH_PLAYERS       = 731, 
     626    LANG_ARENA_GOLD_WINS                = 732, 
     627    LANG_ARENA_GREEN_WINS               = 733, 
     628    LANG_BATTLEGROUND_PREMATURE_FINISH_WARNING = 734, 
     629    LANG_BG_GROUP_OFFLINE_MEMBER        = 735, 
     630    LANG_BG_GROUP_MIXED_FACTION         = 736, 
     631    LANG_BG_GROUP_MIXED_LEVELS          = 737, 
     632    LANG_BG_GROUP_MEMBER_ALREADY_IN_QUEUE = 738, 
     633    LANG_BG_GROUP_MEMBER_DESERTER       = 739, 
     634    LANG_BG_GROUP_MEMBER_NO_FREE_QUEUE_SLOTS = 740, 
     635 
     636    LANG_CANNOT_TELE_TO_BG              = 741, 
     637    LANG_CANNOT_SUMMON_TO_BG            = 742, 
     638    LANG_CANNOT_GO_TO_BG_GM             = 743, 
     639    LANG_CANNOT_GO_TO_BG_FROM_BG        = 744, 
     640 
     641    LANG_ARENA_TESTING                  = 745, 
     642 
     643    // in game strings 
     644    LANG_PET_INVALID_NAME               = 800, 
     645    LANG_NOT_ENOUGH_GOLD                = 801, 
     646    LANG_NOT_FREE_TRADE_SLOTS           = 802, 
     647    LANG_NOT_PARTNER_FREE_TRADE_SLOTS   = 803, 
     648    LANG_YOU_NOT_HAVE_PERMISSION        = 804, 
     649    LANG_UNKNOWN_LANGUAGE               = 805, 
     650    LANG_NOT_LEARNED_LANGUAGE           = 806, 
     651    LANG_NEED_CHARACTER_NAME            = 807, 
     652    LANG_PLAYER_NOT_EXIST_OR_OFFLINE    = 808, 
     653    LANG_ACCOUNT_FOR_PLAYER_NOT_FOUND   = 809, 
     654    // Room for in-game strings           810-999 not used 
     655 
     656    // FREE IDS                           1000-9999 
     657 
     658    // Use for not-in-svn patches         10000-10999 
     659    // Use for custom patches             11000-11999 
     660 
     661    // NOT RESERVED IDS                   12000- 
    632662}; 
    633663#endif 
    634  
    635 /*  NOT USED VALUES 
    636 // alliance ranks 
    637 #define LANG_ALI_PRIVATE                 "Private " 
    638 #define LANG_ALI_CORPORAL                "Corporal " 
    639 #define LANG_ALI_SERGEANT                "Sergeant " 
    640 #define LANG_ALI_MASTER_SERGEANT         "Master Sergeant " 
    641 #define LANG_ALI_SERGEANT_MAJOR          "Sergeant Major " 
    642 #define LANG_ALI_KNIGHT                  "Knight " 
    643 #define LANG_ALI_KNIGHT_LIEUTENANT       "Knight-Lieutenant " 
    644 #define LANG_ALI_KNIGHT_CAPTAIN          "Knight-Captain " 
    645 #define LANG_ALI_KNIGHT_CHAMPION         "Knight-Champion " 
    646 #define LANG_ALI_LIEUTENANT_COMMANDER    "Lieutenant Commander " 
    647 #define LANG_ALI_COMMANDER               "Commander " 
    648 #define LANG_ALI_MARSHAL                 "Marshal " 
    649 #define LANG_ALI_FIELD_MARSHAL           "Field Marshal " 
    650 #define LANG_ALI_GRAND_MARSHAL           "Grand Marshal " 
    651 #define LANG_ALI_GAME_MASTER             "Game Master " 
    652  
    653 // horde ranks 
    654 #define LANG_HRD_SCOUT                   "Scout " 
    655 #define LANG_HRD_GRUNT                   "Grunt " 
    656 #define LANG_HRD_SERGEANT                "Sergeant " 
    657 #define LANG_HRD_SENIOR_SERGEANT         "Senior Sergeant " 
    658 #define LANG_HRD_FIRST_SERGEANT          "First Sergeant " 
    659 #define LANG_HRD_STONE_GUARD             "Stone Guard " 
    660 #define LANG_HRD_BLOOD_GUARD             "Blood Guard " 
    661 #define LANG_HRD_LEGIONNARE              "Legionnaire " 
    662 #define LANG_HRD_CENTURION               "Centurion " 
    663 #define LANG_HRD_CHAMPION                "Champion " 
    664 #define LANG_HRD_LIEUTENANT_GENERAL      "Lieutenant General " 
    665 #define LANG_HRD_GENERAL                 "General " 
    666 #define LANG_HRD_WARLORD                 "Warlord " 
    667 #define LANG_HRD_HIGH_WARLORD            "High Warlord " 
    668 #define LANG_HRD_GAME_MASTER             "Game Master " 
    669  
    670 #define LANG_NO_RANK                     "No rank " 
    671 #define LANG_RANK                        "%s (Rank %u)" 
    672 #define LANG_HONOR_TODAY                 "Today: [Honorable kills: |c0000ff00%u|r] [Dishonorable kills: |c00ff0000%u|r]" 
    673 #define LANG_HONOR_YESTERDAY             "Yesterday: [Kills: |c0000ff00%u|r] [Honor: %u]" 
    674 #define LANG_HONOR_THIS_WEEK             "This week: [Kills: |c0000ff00%u|r] [Honor: %u]" 
    675 #define LANG_HONOR_LAST_WEEK             "Last week: [Kills: |c0000ff00%u|r] [Honor: %u] [Standing: %u]" 
    676 #define LANG_HONOR_LIFE                  "Lifetime: [Honorable kills: |c0000ff00%u|r] [Dishonorable kills: |c00ff0000%u|r] [Highest rank %u: %s]" 
    677  
    678 // level 2 
    679 #define LANG_ADD_OBJ                     "AddObject at Chat.cpp" //log 
    680 #define LANG_DEMORPHED                   "Demorphed %s"     //log 
    681  
    682 // level 3 
    683 #define LANG_SPAWNING_SPIRIT_HEAL        "Spawning spirit healers\n" 
    684 #define LANG_NO_SPIRIT_HEAL_DB           "No spirit healers in database, exiting." 
    685  
    686 #define LANG_ADD_OBJ_LV3                 "AddObject at Level3.cpp line 1176" 
    687  
    688 */ 
  • trunk/src/game/Level1.cpp

    r9 r28  
    148148    if(!*args) 
    149149    { 
    150         SendSysMessage(LANG_USE_BOL); 
    151         SetSentErrorMessage(true); 
    152         return false; 
     150        if(m_session->GetPlayer()->isGameMaster()) 
     151            m_session->SendNotification(LANG_GM_ON); 
     152        else 
     153            m_session->SendNotification(LANG_GM_OFF); 
     154        return true; 
    153155    } 
    154156 
     
    158160    { 
    159161        m_session->GetPlayer()->SetGameMaster(true); 
    160         m_session->SendNotification("GM mode is ON"); 
     162        m_session->SendNotification(LANG_GM_ON); 
    161163        #ifdef _DEBUG_VMAPS 
    162164        VMAP::IVMapManager *vMapManager = VMAP::VMapFactory::createOrGetVMapManager(); 
     
    169171    { 
    170172        m_session->GetPlayer()->SetGameMaster(false); 
    171         m_session->SendNotification("GM mode is OFF"); 
     173        m_session->SendNotification(LANG_GM_OFF); 
    172174        #ifdef _DEBUG_VMAPS 
    173175        VMAP::IVMapManager *vMapManager = VMAP::VMapFactory::createOrGetVMapManager(); 
     
    182184} 
    183185 
     186// Enables or disables hiding of the staff badge 
     187bool ChatHandler::HandleGMChatCommand(const char* args) 
     188{ 
     189    if(!*args) 
     190    { 
     191        if(m_session->GetPlayer()->isGMChat()) 
     192            m_session->SendNotification(LANG_GM_CHAT_ON); 
     193        else 
     194            m_session->SendNotification(LANG_GM_CHAT_OFF); 
     195        return true; 
     196    } 
     197 
     198    std::string argstr = (char*)args; 
     199 
     200    if (argstr == "on") 
     201    { 
     202        m_session->GetPlayer()->SetGMChat(true); 
     203        m_session->SendNotification(LANG_GM_CHAT_ON); 
     204        return true; 
     205    } 
     206 
     207    if (argstr == "off") 
     208    { 
     209        m_session->GetPlayer()->SetGMChat(false); 
     210        m_session->SendNotification(LANG_GM_CHAT_OFF); 
     211        return true; 
     212    } 
     213 
     214    SendSysMessage(LANG_USE_BOL); 
     215    SetSentErrorMessage(true); 
     216    return false; 
     217} 
     218 
     219 
    184220//Enable\Dissable Invisible mode 
    185221bool ChatHandler::HandleVisibleCommand(const char* args) 
     
    196232    { 
    197233        m_session->GetPlayer()->SetGMVisible(true); 
    198         m_session->SendNotification(GetMangosString(LANG_INVISIBLE_VISIBLE)); 
     234        m_session->SendNotification(LANG_INVISIBLE_VISIBLE); 
    199235        return true; 
    200236    } 
     
    202238    if (argstr == "off") 
    203239    { 
    204         m_session->SendNotification(GetMangosString(LANG_INVISIBLE_INVISIBLE)); 
     240        m_session->SendNotification(LANG_INVISIBLE_INVISIBLE); 
    205241        m_session->GetPlayer()->SetGMVisible(false); 
    206242        return true; 
     
    18241860        return false; 
    18251861 
     1862    // format: name "subject text" "mail text" item1[:count1] item2[:count2] ... item12[:count12] 
     1863 
    18261864    char* pName = strtok((char*)args, " "); 
    1827     char* msgSubject = strtok(NULL, " "); 
    1828     char* msgText = strtok(NULL, ""); 
     1865    if(!pName) 
     1866        return false; 
     1867 
     1868    char* tail1 = strtok(NULL, ""); 
     1869    if(!tail1) 
     1870        return false; 
     1871 
     1872    char* msgSubject; 
     1873    if(*tail1=='"') 
     1874        msgSubject = strtok(tail1+1, "\""); 
     1875    else 
     1876    { 
     1877        char* space = strtok(tail1, "\""); 
     1878        if(!space) 
     1879            return false; 
     1880        msgSubject = strtok(NULL, "\""); 
     1881    } 
     1882 
     1883    if (!msgSubject) 
     1884        return false; 
     1885 
     1886    char* tail2 = strtok(NULL, ""); 
     1887    if(!tail2) 
     1888        return false; 
     1889 
     1890    char* msgText; 
     1891    if(*tail2=='"') 
     1892        msgText = strtok(tail2+1, "\""); 
     1893    else 
     1894    { 
     1895        char* space = strtok(tail2, "\""); 
     1896        if(!space) 
     1897            return false; 
     1898        msgText = strtok(NULL, "\""); 
     1899    } 
    18291900 
    18301901    if (!msgText) 
     
    18321903 
    18331904    // pName, msgSubject, msgText isn't NUL after prev. check 
    1834  
    18351905    std::string name    = pName; 
    18361906    std::string subject = msgSubject; 
    18371907    std::string text    = msgText; 
    18381908 
     1909    // extract items 
     1910    typedef std::pair<uint32,uint32> ItemPair; 
     1911    typedef std::list< ItemPair > ItemPairs; 
     1912    ItemPairs items; 
     1913 
     1914    // get all tail string 
     1915    char* tail = strtok(NULL, ""); 
     1916 
     1917    // get from tail next item str 
     1918    while(char* itemStr = strtok(tail, " ")) 
     1919    { 
     1920        // and get new tail  
     1921        tail = strtok(NULL, ""); 
     1922 
     1923        // parse item str 
     1924        char* itemIdStr = strtok(itemStr, ":"); 
     1925        char* itemCountStr = strtok(NULL, " "); 
     1926         
     1927        uint32 item_id = atoi(itemIdStr); 
     1928        if(!item_id) 
     1929            return false; 
     1930 
     1931        ItemPrototype const* item_proto = objmgr.GetItemPrototype(item_id); 
     1932        if(!item_proto) 
     1933        { 
     1934            PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, item_id); 
     1935            SetSentErrorMessage(true); 
     1936            return false; 
     1937        } 
     1938 
     1939        uint32 item_count = itemCountStr ? atoi(itemCountStr) : 1; 
     1940        if(item_count < 1 || item_proto->MaxCount && item_count > item_proto->MaxCount) 
     1941        { 
     1942            PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, item_count,item_id); 
     1943            SetSentErrorMessage(true); 
     1944            return false; 
     1945        } 
     1946 
     1947        while(item_count > item_proto->Stackable) 
     1948        { 
     1949            items.push_back(ItemPair(item_id,item_proto->Stackable)); 
     1950            item_count -= item_proto->Stackable; 
     1951        } 
     1952 
     1953        items.push_back(ItemPair(item_id,item_count)); 
     1954 
     1955        if(items.size() > MAX_MAIL_ITEMS) 
     1956        { 
     1957            PSendSysMessage(LANG_COMMAND_MAIL_ITEMS_LIMIT, MAX_MAIL_ITEMS); 
     1958            SetSentErrorMessage(true); 
     1959            return false; 
     1960        } 
     1961    } 
     1962 
    18391963    if(!normalizePlayerName(name)) 
    18401964    { 
     
    18451969 
    18461970    uint64 receiver_guid = objmgr.GetPlayerGUIDByName(name); 
    1847  
    18481971    if(!receiver_guid) 
    1849         return false; 
     1972    { 
     1973        SendSysMessage(LANG_PLAYER_NOT_FOUND); 
     1974        SetSentErrorMessage(true); 
     1975        return false; 
     1976    } 
    18501977 
    18511978    uint32 mailId = objmgr.GenerateMailID(); 
     
    18611988    Player *receiver = objmgr.GetPlayer(receiver_guid); 
    18621989 
    1863     WorldSession::SendMailTo(receiver,messagetype, stationery, sender_guidlo, GUID_LOPART(receiver_guid), subject, itemTextId, NULL, 0, 0, MAIL_CHECK_MASK_NONE); 
     1990    // fill mail 
     1991    MailItemsInfo mi;                                       // item list preparing 
     1992 
     1993    for(ItemPairs::const_iterator itr = items.begin(); itr != items.end(); ++itr) 
     1994    { 
     1995        if(Item* item = Item::CreateItem(itr->first,itr->second,m_session->GetPlayer())) 
     1996        { 
     1997            item->SaveToDB();                               // save for prevent lost at next mail load, if send fail then item will deleted 
     1998            mi.AddItem(item->GetGUIDLow(), item->GetEntry(), item); 
     1999        } 
     2000    } 
     2001 
     2002    WorldSession::SendMailTo(receiver,messagetype, stationery, sender_guidlo, GUID_LOPART(receiver_guid), subject, itemTextId, &mi, 0, 0, MAIL_CHECK_MASK_NONE); 
    18642003 
    18652004    PSendSysMessage(LANG_MAIL_SENT, name.c_str()); 
  • trunk/src/game/MiscHandler.cpp

    r9 r28  
    14271427        GetPlayer()->TeleportTo(mapid,PositionX,PositionY,PositionZ,Orientation); 
    14281428    else 
    1429         SendNotification("You do not have permission to perform that function"); 
     1429        SendNotification(LANG_YOU_NOT_HAVE_PERMISSION); 
    14301430    sLog.outDebug("Received worldport command from player %s", GetPlayer()->GetName()); 
    14311431} 
     
    14361436 
    14371437    sLog.outDebug("Received opcode CMSG_WHOIS"); 
    1438     std::string charname, acc, email, lastip, msg; 
     1438    std::string charname; 
    14391439    recv_data >> charname; 
    14401440 
    14411441    if (GetSecurity() < SEC_ADMINISTRATOR) 
    14421442    { 
    1443         SendNotification("You do not have permission to perform that function"); 
     1443        SendNotification(LANG_YOU_NOT_HAVE_PERMISSION); 
    14441444        return; 
    14451445    } 
     
    14471447    if(charname.empty()) 
    14481448    { 
    1449         SendNotification("Please provide character name"); 
    1450         return; 
    1451     } 
    1452  
    1453     uint32 accid; 
    1454     Field *fields; 
     1449        SendNotification(LANG_NEED_CHARACTER_NAME); 
     1450        return; 
     1451    } 
    14551452 
    14561453    Player *plr = objmgr.GetPlayer(charname.c_str()); 
    14571454 
    1458     if(plr) 
    1459         accid = plr->GetSession()->GetAccountId(); 
    1460     else 
    1461     { 
    1462         SendNotification("Player %s not found or offline", charname.c_str()); 
    1463         return; 
    1464     } 
    1465  
    1466     if(!accid) 
    1467     { 
    1468         SendNotification("Account for character %s not found", charname.c_str()); 
    1469         return; 
    1470     } 
     1455    if(!plr) 
     1456    { 
     1457        SendNotification(LANG_PLAYER_NOT_EXIST_OR_OFFLINE, charname.c_str()); 
     1458        return; 
     1459    } 
     1460 
     1461    uint32 accid = plr->GetSession()->GetAccountId(); 
    14711462 
    14721463    QueryResult *result = loginDatabase.PQuery("SELECT username,email,last_ip FROM account WHERE id=%u", accid); 
    1473     if(result) 
    1474     { 
    1475         fields = result->Fetch(); 
    1476         acc = fields[0].GetCppString(); 
    1477         if(acc.empty()) 
    1478             acc = "Unknown"; 
    1479         email = fields[1].GetCppString(); 
    1480         if(email.empty()) 
    1481             email = "Unknown"; 
    1482         lastip = fields[2].GetCppString(); 
    1483         if(lastip.empty()) 
    1484             lastip = "Unknown"; 
    1485         msg = charname + "'s " + "account is " + acc + ", e-mail: " + email + ", last ip: " + lastip; 
    1486  
    1487         WorldPacket data(SMSG_WHOIS, msg.size()+1); 
    1488         data << msg; 
    1489         _player->GetSession()->SendPacket(&data); 
    1490     } 
    1491     else 
    1492         SendNotification("Account for character %s not found", charname.c_str()); 
     1464    if(!result) 
     1465    { 
     1466        SendNotification(LANG_ACCOUNT_FOR_PLAYER_NOT_FOUND, charname.c_str()); 
     1467        return; 
     1468    } 
     1469 
     1470    Field *fields = result->Fetch(); 
     1471    std::string acc = fields[0].GetCppString(); 
     1472    if(acc.empty()) 
     1473        acc = "Unknown"; 
     1474    std::string email = fields[1].GetCppString(); 
     1475    if(email.empty()) 
     1476        email = "Unknown"; 
     1477    std::string lastip = fields[2].GetCppString(); 
     1478    if(lastip.empty()) 
     1479        lastip = "Unknown"; 
     1480 
     1481    std::string msg = charname + "'s " + "account is " + acc + ", e-mail: " + email + ", last ip: " + lastip; 
     1482 
     1483    WorldPacket data(SMSG_WHOIS, msg.size()+1); 
     1484    data << msg; 
     1485    _player->GetSession()->SendPacket(&data); 
    14931486 
    14941487    delete result; 
     1488 
    14951489    sLog.outDebug("Received whois command from player %s for character %s", GetPlayer()->GetName(), charname.c_str()); 
    14961490} 
  • trunk/src/game/MotionMaster.cpp

    r2 r28  
    7777MotionMaster::UpdateMotion(const uint32 &diff) 
    7878{ 
    79     if( i_owner->hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED) ) 
     79    if( i_owner->hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED) ) 
    8080        return; 
    8181    assert( !empty() ); 
  • trunk/src/game/ObjectMgr.cpp

    r18 r28  
    66806680    m_mCacheTrainerSpellMap.clear(); 
    66816681 
     6682    std::set<uint32> skip_trainers; 
     6683 
    66826684    QueryResult *result = WorldDatabase.PQuery("SELECT entry, spell,spellcost,reqskill,reqskillvalue,reqlevel FROM npc_trainer"); 
    66836685 
     
    67156717        if(!(cInfo->npcflag & UNIT_NPC_FLAG_TRAINER)) 
    67166718        { 
    6717             sLog.outErrorDb("Table `npc_trainer` have data for not creature template (Entry: %u) without trainer flag, ignore", entry); 
     6719            if(skip_trainers.count(entry) == 0) 
     6720            { 
     6721                sLog.outErrorDb("Table `npc_trainer` have data for not creature template (Entry: %u) without trainer flag, ignore", entry); 
     6722                skip_trainers.insert(entry); 
     6723            } 
    67186724            continue; 
    67196725        } 
     
    67656771    m_mCacheVendorItemMap.clear(); 
    67666772 
     6773    std::set<uint32> skip_vendors; 
     6774 
    67676775    QueryResult *result = WorldDatabase.PQuery("SELECT entry, item, maxcount, incrtime, ExtendedCost FROM npc_vendor"); 
    67686776    if( !result ) 
     
    67916799        uint32 ExtendedCost = fields[4].GetUInt32(); 
    67926800 
    6793         if(!IsVendorItemValid(entry,item_id,maxcount,incrtime,ExtendedCost)) 
     6801        if(!IsVendorItemValid(entry,item_id,maxcount,incrtime,ExtendedCost,NULL,&skip_vendors)) 
    67946802            continue; 
    67956803 
     
    68796887} 
    68806888 
    6881 bool ObjectMgr::IsVendorItemValid( uint32 vendor_entry, uint32 item_id, uint32 maxcount, uint32 incrtime, uint32 ExtendedCost, Player* pl ) const 
     6889bool ObjectMgr::IsVendorItemValid( uint32 vendor_entry, uint32 item_id, uint32 maxcount, uint32 incrtime, uint32 ExtendedCost, Player* pl, std::set<uint32>* skip_vendors ) const 
    68826890{ 
    68836891    CreatureInfo const* cInfo = GetCreatureTemplate(vendor_entry); 
     
    68936901    if(!(cInfo->npcflag & UNIT_NPC_FLAG_VENDOR)) 
    68946902    { 
    6895         if(pl) 
    6896             ChatHandler(pl).SendSysMessage(LANG_COMMAND_VENDORSELECTION); 
    6897         else 
    6898             sLog.outErrorDb("Table `npc_vendor` have data for not creature template (Entry: %u) without vendor flag, ignore", vendor_entry); 
     6903        if(!skip_vendors || skip_vendors->count(vendor_entry)==0) 
     6904        { 
     6905            if(pl) 
     6906                ChatHandler(pl).SendSysMessage(LANG_COMMAND_VENDORSELECTION); 
     6907            else 
     6908                sLog.outErrorDb("Table `npc_vendor` have data for not creature template (Entry: %u) without vendor flag, ignore", vendor_entry); 
     6909 
     6910            if(skip_vendors) 
     6911                skip_vendors->insert(vendor_entry); 
     6912        } 
    68996913        return false; 
    69006914    } 
  • trunk/src/game/ObjectMgr.h

    r18 r28  
    743743        void AddVendorItem(uint32 entry,uint32 item, uint32 maxcount, uint32 incrtime, uint32 ExtendedCost); 
    744744        bool RemoveVendorItem(uint32 entry,uint32 item); 
    745         bool IsVendorItemValid( uint32 vendor_entry, uint32 item, uint32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* pl = NULL ) const; 
     745        bool IsVendorItemValid( uint32 vendor_entry, uint32 item, uint32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* pl = NULL, std::set<uint32>* skip_vendors = NULL ) const; 
    746746    protected: 
    747747        uint32 m_auctionid; 
  • trunk/src/game/PetHandler.cpp

    r2 r28  
    3131#include "Util.h" 
    3232#include "Pet.h" 
     33#include "Language.h" 
    3334 
    3435void WorldSession::HandlePetAction( WorldPacket & recv_data ) 
     
    396397    if((!ObjectMgr::IsValidPetName(name)) || (objmgr.IsReservedName(name))) 
    397398    { 
    398         SendNotification("Invalid name"); 
     399        SendNotification(LANG_PET_INVALID_NAME); 
    399400        return; 
    400401    } 
     
    416417        if(!ObjectMgr::CheckDeclinedNames(GetMainPartOfName(wname,0),declinedname)) 
    417418        { 
    418             SendNotification("Invalid name"); 
     419            SendNotification(LANG_PET_INVALID_NAME); 
    419420            return; 
    420421        } 
  • trunk/src/game/PetitionsHandler.cpp

    r2 r28  
    112112        if(_player->getLevel() < sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)) 
    113113        { 
    114             SendNotification(GetMangosString(LANG_ARENA_ONE_TOOLOW), 70); 
     114            SendNotification(LANG_ARENA_ONE_TOOLOW, 70); 
    115115            return; 
    116116        } 
     
    531531    { 
    532532        // player is too low level to join an arena team 
    533         SendNotification("You must be level %u to join an arena team!",sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)); 
     533        SendNotification(LANG_YOUR_ARENA_LEVEL_REQ_ERROR,sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)); 
    534534        return; 
    535535    } 
  • trunk/src/game/Player.cpp

    r18 r28  
    266266        SetAcceptTicket(true); 
    267267 
    268     // players always and GM if set in config accept whispers by default 
    269     if(GetSession()->GetSecurity() == SEC_PLAYER || sWorld.getConfig(CONFIG_GM_WISPERING_TO)) 
     268    // players always accept  
     269    if(GetSession()->GetSecurity() == SEC_PLAYER) 
    270270        SetAcceptWhispers(true); 
    271271 
     
    14161416    // 0x2 - dnd 
    14171417    // 0x1 - afk 
    1418     if(isGameMaster()) 
     1418    if(isGMChat()) 
    14191419        return 4; 
    14201420    else if(isDND()) 
     
    15561556        } 
    15571557 
    1558         SetSemaphoreTeleport(false); 
    1559  
    15601558        if(!GetSession()->PlayerLogout()) 
     1559        { 
     1560            // don't reset teleport semaphore while logging out, otherwise m_teleport_dest won't be used in Player::SaveToDB 
     1561            SetSemaphoreTeleport(false); 
     1562 
    15611563            UpdateZone(GetZoneId()); 
     1564        } 
    15621565 
    15631566        // new zone 
     
    93239326        if( pProto ) 
    93249327        { 
     9328            // May be here should be more stronger checks; STUNNED checked 
     9329            // ROOT, CONFUSED, DISTRACTED, FLEEING this needs to be checked. 
     9330            if (not_loading && hasUnitState(UNIT_STAT_STUNNED)) 
     9331                return EQUIP_ERR_YOU_ARE_STUNNED; 
     9332 
    93259333            if(pItem->IsBindedNotWith(GetGUID())) 
    93269334                return EQUIP_ERR_DONT_OWN_THAT_ITEM; 
     
    93469354            if(isInCombat()&& pProto->Class == ITEM_CLASS_WEAPON && m_weaponChangeTimer != 0) 
    93479355                return EQUIP_ERR_CANT_DO_RIGHT_NOW;         // maybe exist better err 
     9356 
     9357            if(IsNonMeleeSpellCasted(false)) 
     9358                return EQUIP_ERR_CANT_DO_RIGHT_NOW; 
    93489359 
    93499360            uint8 eslot = FindEquipSlot( pProto, slot, swap ); 
     
    1379913810        switch(sWorld.getConfig(CONFIG_GM_LOGIN_STATE)) 
    1380013811        { 
    13801             case 0:                                         // disable 
    13802                 break; 
    13803             case 1:                                         // enable 
    13804                 SetGameMaster(true); 
    13805                 break; 
     13812            default: 
     13813            case 0:                      break;             // disable 
     13814            case 1: SetGameMaster(true); break;             // enable 
    1380613815            case 2:                                         // save state 
    13807                 if(gmstate) 
     13816                if(gmstate & PLAYER_EXTRA_GM_ON) 
    1380813817                    SetGameMaster(true); 
    1380913818                break; 
     13819        } 
     13820 
     13821        switch(sWorld.getConfig(CONFIG_GM_ACCEPT_TICKETS)) 
     13822        { 
    1381013823            default: 
     13824            case 0:                        break;           // disable 
     13825            case 1: SetAcceptTicket(true); break;           // enable 
     13826            case 2:                                         // save state 
     13827            if(gmstate & PLAYER_EXTRA_GM_ACCEPT_TICKETS) 
     13828                SetAcceptTicket(true); 
     13829            break; 
     13830        } 
     13831 
     13832        switch(sWorld.getConfig(CONFIG_GM_CHAT)) 
     13833        { 
     13834            default: 
     13835            case 0:                  break;                 // disable 
     13836            case 1: SetGMChat(true); break;                 // enable 
     13837            case 2:                                         // save state 
     13838                if(gmstate & PLAYER_EXTRA_GM_CHAT) 
     13839                    SetGMChat(true); 
     13840                break; 
     13841        } 
     13842 
     13843        switch(sWorld.getConfig(CONFIG_GM_WISPERING_TO)) 
     13844        { 
     13845            default: 
     13846            case 0:                          break;         // disable 
     13847            case 1: SetAcceptWhispers(true); break;         // enable 
     13848            case 2:                                         // save state 
     13849                if(gmstate & PLAYER_EXTRA_ACCEPT_WHISPERS) 
     13850                    SetAcceptWhispers(true); 
    1381113851                break; 
    1381213852        } 
     
    1487814918 
    1487914919    ss << ", "; 
    14880     ss << (isGameMaster()? 1 : 0); 
     14920    ss << m_ExtraFlags; 
    1488114921 
    1488214922    ss << ", "; 
     
    1638816428    } 
    1638916429 
    16390     VendorItem const* crItem = vItems->FindItem(item); 
    16391     if(!crItem) 
     16430    size_t vendor_slot = vItems->FindItemSlot(item); 
     16431    if(vendor_slot >= vItems->GetItemCount()) 
    1639216432    { 
    1639316433        SendBuyError( BUY_ERR_CANT_FIND_ITEM, pCreature, item, 0); 
    1639416434        return false; 
    1639516435    } 
     16436 
     16437    VendorItem const* crItem = vItems->m_items[vendor_slot]; 
    1639616438 
    1639716439    // check current item amount if it limited 
     
    1652116563            WorldPacket data(SMSG_BUY_ITEM, (8+4+4+4)); 
    1652216564            data << pCreature->GetGUID(); 
    16523             data << (uint32)crItem->item; 
     16565            data << (uint32)(vendor_slot+1);                // numbered from 1 at client 
    1652416566            data << (uint32)(crItem->maxcount > 0 ? new_count : 0xFFFFFFFF); 
    1652516567            data << (uint32)count; 
     
    1656016602            WorldPacket data(SMSG_BUY_ITEM, (8+4+4+4)); 
    1656116603            data << pCreature->GetGUID(); 
    16562             data << (uint32)crItem->item; 
     16604            data << (uint32)(vendor_slot+1);                // numbered from 1 at client 
    1656316605            data << (uint32)(crItem->maxcount > 0 ? new_count : 0xFFFFFFFF); 
    1656416606            data << (uint32)count; 
  • trunk/src/game/Player.h

    r18 r28  
    497497    PLAYER_EXTRA_TAXICHEAT          = 0x0008, 
    498498    PLAYER_EXTRA_GM_INVISIBLE       = 0x0010, 
     499    PLAYER_EXTRA_GM_CHAT            = 0x0020,               // Show GM badge in chat messages 
    499500 
    500501    // other states 
     
    955956        bool isGameMaster() const { return m_ExtraFlags & PLAYER_EXTRA_GM_ON; } 
    956957        void SetGameMaster(bool on); 
     958        bool isGMChat() const { return GetSession()->GetSecurity() >= SEC_MODERATOR && (m_ExtraFlags & PLAYER_EXTRA_GM_CHAT); } 
     959        void SetGMChat(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_GM_CHAT; else m_ExtraFlags &= ~PLAYER_EXTRA_GM_CHAT; } 
    957960        bool isTaxiCheater() const { return m_ExtraFlags & PLAYER_EXTRA_TAXICHEAT; } 
    958961        void SetTaxiCheater(bool on) { if(on) m_ExtraFlags |= PLAYER_EXTRA_TAXICHEAT; else m_ExtraFlags &= ~PLAYER_EXTRA_TAXICHEAT; } 
  • trunk/src/game/PointMovementGenerator.cpp

    r18 r28  
    4242        return false; 
    4343 
    44     if(unit.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED)) 
     44    if(unit.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED)) 
    4545        return true; 
    4646 
  • trunk/src/game/RandomMovementGenerator.cpp

    r26 r28  
    127127RandomMovementGenerator<Creature>::Update(Creature &creature, const uint32 &diff) 
    128128{ 
    129     if(creature.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED | UNIT_STAT_DISTRACTED)) 
     129    if(creature.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED)) 
    130130    { 
    131131        i_nextMoveTime.Update(i_nextMoveTime.GetExpiry());    // Expire the timer 
  • trunk/src/game/SocialMgr.cpp

    r2 r28  
    4242bool PlayerSocial::AddToSocialList(uint32 friend_guid, bool ignore) 
    4343{ 
    44     // prevent list (client-side) overflow 
    45     if(m_playerSocialMap.size() >= (255-1)) 
     44    // client limit 
     45    if(m_playerSocialMap.size() >= 50) 
    4646        return false; 
    4747 
     
    181181    bool gmInWhoList = sWorld.getConfig(CONFIG_GM_IN_WHO_LIST) || security > SEC_PLAYER; 
    182182 
     183    PlayerSocialMap::iterator itr = player->GetSocial()->m_playerSocialMap.find(friendGUID); 
     184    if(itr != player->GetSocial()->m_playerSocialMap.end()) 
     185        friendInfo.Note = itr->second.Note; 
     186 
    183187    // PLAYER see his team only and PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters 
    184188    // MODERATOR, GAME MASTER, ADMINISTRATOR can see all 
     
    219223    WorldPacket data; 
    220224    MakeFriendStatusPacket(result, friend_guid, &data); 
     225    GetFriendInfo(player, friend_guid, fi); 
    221226    switch(result) 
    222227    { 
     228        case FRIEND_ADDED_OFFLINE: 
     229        case FRIEND_ADDED_ONLINE: 
     230            data << fi.Note; 
     231            break; 
     232    } 
     233 
     234    switch(result) 
     235    { 
     236        case FRIEND_ADDED_ONLINE: 
    223237        case FRIEND_ONLINE: 
    224             GetFriendInfo(player, friend_guid, fi); 
    225238            data << uint8(fi.Status); 
    226239            data << uint32(fi.Area); 
    227240            data << uint32(fi.Level); 
    228241            data << uint32(fi.Class); 
    229             break; 
    230         case FRIEND_ADDED_ONLINE: 
    231             GetFriendInfo(player, friend_guid, fi); 
    232             data << name; 
    233             data << uint8(fi.Status); 
    234             data << uint32(fi.Area); 
    235             data << uint32(fi.Level); 
    236             data << uint32(fi.Class); 
    237             break; 
    238         case FRIEND_ADDED_OFFLINE: 
    239             data << name; 
    240242            break; 
    241243    } 
     
    300302        social->m_playerSocialMap[friend_guid] = FriendInfo(flags, note); 
    301303 
    302         // prevent list (client-side) overflow 
    303         if(social->m_playerSocialMap.size() >= 255) 
     304        // client limit 
     305        if(social->m_playerSocialMap.size() >= 50) 
    304306            break; 
    305307    } 
  • trunk/src/game/Spell.cpp

    r18 r28  
    987987                if( !(m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_NO_INITIAL_AGGRO) ) 
    988988                { 
    989                     if(!unit->IsStandState() && !unit->hasUnitState(UNIT_STAT_STUNDED)) 
     989                    if(!unit->IsStandState() && !unit->hasUnitState(UNIT_STAT_STUNNED)) 
    990990                        unit->SetStandState(PLAYER_STATE_NONE); 
    991991 
     
    24082408 
    24092409                    // check for incapacitating player states 
    2410                     if( m_caster->hasUnitState(UNIT_STAT_STUNDED | UNIT_STAT_CONFUSED)) 
     2410                    if( m_caster->hasUnitState(UNIT_STAT_STUNNED | UNIT_STAT_CONFUSED)) 
    24112411                        cancel(); 
    24122412 
  • trunk/src/game/SpellAuras.cpp

    r2 r28  
    31903190    if (apply) 
    31913191    { 
    3192         m_target->addUnitState(UNIT_STAT_STUNDED); 
     3192        m_target->addUnitState(UNIT_STAT_STUNNED); 
    31933193        m_target->SetUInt64Value(UNIT_FIELD_TARGET, 0); 
    31943194 
     
    32143214            return; 
    32153215 
    3216         m_target->clearUnitState(UNIT_STAT_STUNDED); 
     3216        m_target->clearUnitState(UNIT_STAT_STUNNED); 
    32173217        m_target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_ROTATE); 
    32183218 
     
    34433443        m_target->RemoveFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); 
    34443444 
    3445         if(!m_target->hasUnitState(UNIT_STAT_STUNDED))      // prevent allow move if have also stun effect 
     3445        if(!m_target->hasUnitState(UNIT_STAT_STUNNED))      // prevent allow move if have also stun effect 
    34463446        { 
    34473447            if(m_target->getVictim() && m_target->isAlive()) 
  • trunk/src/game/SpellEffects.cpp

    r18 r28  
    14661466                        return; 
    14671467 
    1468                     if( !unitTarget->hasUnitState(UNIT_STAT_STUNDED) && m_caster->GetTypeId()==TYPEID_PLAYER) 
     1468                    if( !unitTarget->hasUnitState(UNIT_STAT_STUNNED) && m_caster->GetTypeId()==TYPEID_PLAYER) 
    14691469                    { 
    14701470                        // decreased damage (/2) for non-stunned target. 
     
    34023402 
    34033403    // target must be OK to do this 
    3404     if( unitTarget->hasUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_STUNDED | UNIT_STAT_FLEEING ) ) 
     3404    if( unitTarget->hasUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_STUNNED | UNIT_STAT_FLEEING ) ) 
    34053405        return; 
    34063406 
  • trunk/src/game/TargetedMovementGenerator.cpp

    r18 r28  
    4848        return; 
    4949 
    50     if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED | UNIT_STAT_DISTRACTED) ) 
     50    if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED) ) 
    5151        return; 
    5252 
     
    128128        return true; 
    129129 
    130     if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED | UNIT_STAT_FLEEING | UNIT_STAT_DISTRACTED) ) 
     130    if( owner.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_FLEEING | UNIT_STAT_DISTRACTED) ) 
    131131        return true; 
    132132 
  • trunk/src/game/TradeHandler.cpp

    r2 r28  
    2727#include "Item.h" 
    2828#include "SocialMgr.h" 
     29#include "Language.h" 
    2930 
    3031enum TradeStatus 
     
    256257    if( _player->tradeGold > _player->GetMoney() ) 
    257258    { 
    258         SendNotification( "You do not have enough gold" ); 
     259        SendNotification(LANG_NOT_ENOUGH_GOLD); 
    259260        _player->pTrader->GetSession()->SendTradeStatus(TRADE_STATUS_BACK_TO_TRADE); 
    260261        _player->acceptTrade = false; 
     
    265266    if( _player->pTrader->tradeGold > _player->pTrader->GetMoney() ) 
    266267    { 
    267         _player->pTrader->GetSession( )->SendNotification( "You do not have enough gold" ); 
     268        _player->pTrader->GetSession( )->SendNotification(LANG_NOT_ENOUGH_GOLD); 
    268269        SendTradeStatus(TRADE_STATUS_BACK_TO_TRADE); 
    269270        _player->pTrader->acceptTrade = false; 
     
    339340        if(!myCanCompleteTrade) 
    340341        { 
    341             SendNotification("You do not have enough free slots"); 
    342             GetPlayer( )->pTrader->GetSession( )->SendNotification("Your partner does not have enough free bag slots"); 
     342            SendNotification(LANG_NOT_FREE_TRADE_SLOTS); 
     343            GetPlayer( )->pTrader->GetSession( )->SendNotification(LANG_NOT_PARTNER_FREE_TRADE_SLOTS); 
    343344            SendTradeStatus(TRADE_STATUS_BACK_TO_TRADE); 
    344345            _player->pTrader->GetSession()->SendTradeStatus(TRADE_STATUS_BACK_TO_TRADE); 
     
    347348        else if (!hisCanCompleteTrade) 
    348349        { 
    349             SendNotification("Your partner does not have enough free bag slots"); 
    350             GetPlayer()->pTrader->GetSession()->SendNotification("You do not have enough free slots"); 
     350            SendNotification(LANG_NOT_PARTNER_FREE_TRADE_SLOTS); 
     351            GetPlayer()->pTrader->GetSession()->SendNotification(LANG_NOT_FREE_TRADE_SLOTS); 
    351352            SendTradeStatus(TRADE_STATUS_BACK_TO_TRADE); 
    352353            _player->pTrader->GetSession()->SendTradeStatus(TRADE_STATUS_BACK_TO_TRADE); 
     
    462463    } 
    463464 
    464     if( GetPlayer()->hasUnitState(UNIT_STAT_STUNDED) ) 
     465    if( GetPlayer()->hasUnitState(UNIT_STAT_STUNNED) ) 
    465466    { 
    466467        SendTradeStatus(TRADE_STATUS_YOU_STUNNED); 
     
    508509    } 
    509510 
    510     if( pOther->hasUnitState(UNIT_STAT_STUNDED) ) 
     511    if( pOther->hasUnitState(UNIT_STAT_STUNNED) ) 
    511512    { 
    512513        SendTradeStatus(TRADE_STATUS_TARGET_STUNNED); 
  • trunk/src/game/Unit.cpp

    r9 r28  
    471471            RemoveSpellsCausingAura(SPELL_AURA_MOD_INVISIBILITY); 
    472472 
    473         if(pVictim->GetTypeId() == TYPEID_PLAYER && !pVictim->IsStandState() && !pVictim->hasUnitState(UNIT_STAT_STUNDED)) 
     473        if(pVictim->GetTypeId() == TYPEID_PLAYER && !pVictim->IsStandState() && !pVictim->hasUnitState(UNIT_STAT_STUNNED)) 
    474474            pVictim->SetStandState(PLAYER_STATE_NONE); 
    475475    } 
     
    21502150void Unit::AttackerStateUpdate (Unit *pVictim, WeaponAttackType attType, bool extra ) 
    21512151{ 
    2152     if(hasUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_STUNDED | UNIT_STAT_FLEEING) || HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED) ) 
     2152    if(hasUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_STUNNED | UNIT_STAT_FLEEING) || HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED) ) 
    21532153        return; 
    21542154 
     
    29622962float Unit::GetUnitDodgeChance() const 
    29632963{ 
    2964     if(hasUnitState(UNIT_STAT_STUNDED)) 
     2964    if(hasUnitState(UNIT_STAT_STUNNED)) 
    29652965        return 0.0f; 
    29662966    if( GetTypeId() == TYPEID_PLAYER ) 
     
    29812981float Unit::GetUnitParryChance() const 
    29822982{ 
    2983     if ( IsNonMeleeSpellCasted(false) || hasUnitState(UNIT_STAT_STUNDED)) 
     2983    if ( IsNonMeleeSpellCasted(false) || hasUnitState(UNIT_STAT_STUNNED)) 
    29842984        return 0.0f; 
    29852985 
     
    30133013float Unit::GetUnitBlockChance() const 
    30143014{ 
    3015     if ( IsNonMeleeSpellCasted(false) || hasUnitState(UNIT_STAT_STUNDED)) 
     3015    if ( IsNonMeleeSpellCasted(false) || hasUnitState(UNIT_STAT_STUNNED)) 
    30163016        return 0.0f; 
    30173017 
     
    79867986    if (spellInfo->Mechanic == MECHANIC_FEAR ) 
    79877987    { 
    7988         if ( hasUnitState(UNIT_STAT_STUNDED) ) 
     7988        if ( hasUnitState(UNIT_STAT_STUNNED) ) 
    79897989            return true; 
    79907990    } 
     
    86638663 
    86648664    //If a mob or player is stunned he will not be able to detect stealth 
    8665     if (u->hasUnitState(UNIT_STAT_STUNDED) && (u != this)) 
     8665    if (u->hasUnitState(UNIT_STAT_STUNNED) && (u != this)) 
    86668666        return false; 
    86678667 
     
    91379137    if(target) 
    91389138    { 
    9139         if(!hasUnitState(UNIT_STAT_STUNDED)) 
     9139        if(!hasUnitState(UNIT_STAT_STUNNED)) 
    91409140            SetInFront(target); 
    91419141        ((Creature*)this)->AI()->AttackStart(target); 
  • trunk/src/game/Unit.h

    r9 r28  
    347347    UNIT_STAT_MELEE_ATTACKING = 0x0002,                     // player is melee attacking someone 
    348348    //UNIT_STAT_MELEE_ATTACK_BY = 0x0004,                     // player is melee attack by someone 
    349     UNIT_STAT_STUNDED         = 0x0008, 
     349    UNIT_STAT_STUNNED         = 0x0008, 
    350350    UNIT_STAT_ROAMING         = 0x0010, 
    351351    UNIT_STAT_CHASE           = 0x0020, 
     
    757757        { 
    758758            return !hasUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_FLEEING | UNIT_STAT_IN_FLIGHT | 
    759                 UNIT_STAT_ROOT | UNIT_STAT_STUNDED | UNIT_STAT_DISTRACTED ) && GetOwnerGUID()==0; 
     759                UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED ) && GetOwnerGUID()==0; 
    760760        } 
    761761 
  • trunk/src/game/WaypointMovementGenerator.cpp

    r18 r28  
    8686    // Waypoint movement can be switched on/off 
    8787    // This is quite handy for escort quests and other stuff 
    88     if(creature.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNDED | UNIT_STAT_DISTRACTED)) 
     88    if(creature.hasUnitState(UNIT_STAT_ROOT | UNIT_STAT_STUNNED | UNIT_STAT_DISTRACTED)) 
    8989        return true; 
    9090 
  • trunk/src/game/World.cpp

    r19 r28  
    643643    } 
    644644 
    645     m_configs[CONFIG_GM_WISPERING_TO] = sConfig.GetBoolDefault("GM.WhisperingTo",false); 
    646     m_configs[CONFIG_GM_IN_GM_LIST]  = sConfig.GetBoolDefault("GM.InGMList",false); 
    647     m_configs[CONFIG_GM_IN_WHO_LIST]  = sConfig.GetBoolDefault("GM.InWhoList",false); 
    648     m_configs[CONFIG_GM_LOGIN_STATE]  = sConfig.GetIntDefault("GM.LoginState",2); 
    649     m_configs[CONFIG_GM_LOG_TRADE] = sConfig.GetBoolDefault("GM.LogTrade", false); 
     645    m_configs[CONFIG_GM_LOGIN_STATE]       = sConfig.GetIntDefault("GM.LoginState",2); 
     646    m_configs[CONFIG_GM_ACCEPT_TICKETS]    = sConfig.GetIntDefault("GM.AcceptTickets",2); 
     647    m_configs[CONFIG_GM_CHAT]              = sConfig.GetIntDefault("GM.Chat",2); 
     648    m_configs[CONFIG_GM_WISPERING_TO]      = sConfig.GetIntDefault("GM.WhisperingTo",2); 
     649 
     650    m_configs[CONFIG_GM_IN_GM_LIST]        = sConfig.GetBoolDefault("GM.InGMList",false); 
     651    m_configs[CONFIG_GM_IN_WHO_LIST]       = sConfig.GetBoolDefault("GM.InWhoList",false); 
     652    m_configs[CONFIG_GM_LOG_TRADE]         = sConfig.GetBoolDefault("GM.LogTrade", false); 
    650653 
    651654    m_configs[CONFIG_GROUP_VISIBILITY] = sConfig.GetIntDefault("Visibility.GroupMode",0); 
  • trunk/src/game/World.h

    r19 r28  
    107107    CONFIG_MAX_PRIMARY_TRADE_SKILL, 
    108108    CONFIG_MIN_PETITION_SIGNS, 
     109    CONFIG_GM_LOGIN_STATE, 
     110    CONFIG_GM_ACCEPT_TICKETS, 
     111    CONFIG_GM_CHAT, 
    109112    CONFIG_GM_WISPERING_TO, 
    110113    CONFIG_GM_IN_GM_LIST, 
    111114    CONFIG_GM_IN_WHO_LIST, 
    112     CONFIG_GM_LOGIN_STATE, 
    113115    CONFIG_GM_LOG_TRADE, 
    114116    CONFIG_GROUP_VISIBILITY, 
  • trunk/src/game/WorldSession.cpp

    r6 r28  
    441441} 
    442442 
     443void WorldSession::SendNotification(int32 string_id,...) 
     444{ 
     445    char const* format = GetMangosString(string_id); 
     446    if(format) 
     447    { 
     448        va_list ap; 
     449        char szStr [1024]; 
     450        szStr[0] = '\0'; 
     451        va_start(ap, format); 
     452        vsnprintf( szStr, 1024, format, ap ); 
     453        va_end(ap); 
     454 
     455        WorldPacket data(SMSG_NOTIFICATION, (strlen(szStr)+1)); 
     456        data << szStr; 
     457        SendPacket(&data); 
     458    } 
     459} 
     460 
    443461const char * WorldSession::GetMangosString( int32 entry ) 
    444462{ 
  • trunk/src/game/WorldSession.h

    r6 r28  
    8080        void SendPacket(WorldPacket const* packet); 
    8181        void SendNotification(const char *format,...) ATTR_PRINTF(2,3); 
     82        void SendNotification(int32 string_id,...); 
    8283        void SendLfgResult(uint32 type, uint32 entry, uint8 lfg_type); 
    8384        void SendPartyResult(PartyOperation operation, std::string member, PartyResult res);