Changeset 2860

Show
Ignore:
Timestamp:
08/31/2009 05:27:10 PM (6 months ago)
Author:
Vlack
Message:

Notice: Trunk is now 3.2.0

FIXED: Mail sending (by providing a missing item for the world database, this item is necessary for the client - for the item, thanks goes to Darkgrööm)
FIXED: Battleground selection crash (now the server will queue you on Isle of Conquest - note: this does not mean you can play on it, but it solves the instant crash when players selected it)
FIXED: Glyphs (till we properly implement dual spec)
FIXED: A9 target GUID sending (on flags & UPDATEFLAG_HAS_TARGET - thanks Alleycat)
FIXED: Re-enabled ground targeted spells (on m_targetMask & TARGET_FLAG_DEST_LOCATION - if a spell where you can select the area of its effect crashes the client in the future, we'll revise this part)
FIXED: A9 (actually just moved the already existing code pieces up/down to better suit the required format, but to know the format right, I had looked into Mangos code too, as I haven't got months to figure out the right structure)
FIXED: TaxiMgr::GetGlobalTaxiNodeMask? (index check, as with the new DBCs we have a "to" with value "-1", and when that's used as an uint, it'll result in an index of 255, while the structure is from 0 to 11).
ADDED: Override support (this extends the core with special features for special gameobjects, like what's required for trams and transports, which include features as: "override update fields", "never despawn on same map", "announce on greater range" and "push to player on map entry").
FIXED: static map object pushing (repaired the buffer handling error which duplicated buffer content in a pretty unique way).
ADDED: SQL fixes for Deeprun and Ulduar Trams (retail data, but it works right only with the override system).
UPDATED: UpdateFields?.h
UPDATED: DBCs (thanks Xuni)
UPDATED: Error codes (thanks Hopla)
FIXED: various packets, especially the following ones: character enumeration, mail list, group details (raid difficulty), movement-related packets
FIXED: The display of quest rewards the player can choose from on the quest page before accepting it.
FIXED: A nasty bug when un-equipping an item to a bag and not to the backpack. The problem was that I have missed 2 for loops where the visible items get nulled out on unequip, it erased 17 fields instead of just 2, so it made the character pretty much naked.

Location:
trunk
Files:
4 added
48 modified

Legend:

Unmodified
Added
Removed
  • trunk/configs/logon.conf

    r2759 r2860  
    6969*/ 
    7070 
    71 <Client MinBuild = "9947" 
    72         MaxBuild = "9947"> 
     71<Client MinBuild = "10192" 
     72        MaxBuild = "10314"> 
    7373 
    7474/* WorldServer Setup 
  • trunk/sql/utilities/ArcEmu DB Updater.bat

    r2845 r2860  
    255255mysql -h %server% --user=%user% --password=%pass% --port=%port% %wdb% --force < ..\world_updates\2840_guardtype.sql 
    256256 
     257ECHO [Importing] 2860_gameobject_overrides.sql 
     258mysql -h %server% --user=%user% --password=%pass% --port=%port% %wdb% --force < ..\world_updates\2860_gameobject_overrides.sql 
     259 
     260ECHO [Importing] 2860_items.sql 
     261mysql -h %server% --user=%user% --password=%pass% --port=%port% %wdb% --force < ..\world_updates\2860_items.sql 
     262 
     263ECHO [Importing] 2860_mail_sending.sql 
     264mysql -h %server% --user=%user% --password=%pass% --port=%port% %wdb% --force < ..\world_updates\2860_mail_sending.sql 
     265 
    257266 
    258267ECHO [Importing] ArcScript_full.sql 
     
    350359mysql -h %server% --user=%user% --password=%pass% --port=%port% %chr% < ..\character_updates\2845_refund.sql 
    351360 
     361ECHO [Importing] 2860_groups.sql 
     362mysql -h %server% --user=%user% --password=%pass% --port=%port% %chr% < ..\character_updates\2860_groups.sql 
     363 
    352364ECHO [Importing] Finished 
    353365ECHO  Update Success. 
     
    540552ECHO [Importing] 2840_guardtype.sql 
    541553mysql -h %server% --user=%user% --password=%pass% --port=%port% %wdb% --force < ..\world_updates\2840_guardtype.sql 
     554 
     555ECHO [Importing] 2860_gameobject_overrides.sql 
     556mysql -h %server% --user=%user% --password=%pass% --port=%port% %wdb% --force < ..\world_updates\2860_gameobject_overrides.sql 
     557 
     558ECHO [Importing] 2860_items.sql 
     559mysql -h %server% --user=%user% --password=%pass% --port=%port% %wdb% --force < ..\world_updates\2860_items.sql 
     560 
     561ECHO [Importing] 2860_mail_sending.sql 
     562mysql -h %server% --user=%user% --password=%pass% --port=%port% %wdb% --force < ..\world_updates\2860_mail_sending.sql 
    542563 
    543564 
     
    631652ECHO [Importing] 2845_refund.sql 
    632653mysql -h %server% --user=%user% --password=%pass% --port=%port% %chr% < ..\character_updates\2845_refund.sql 
     654 
     655ECHO [Importing] 2860_groups.sql 
     656mysql -h %server% --user=%user% --password=%pass% --port=%port% %chr% < ..\character_updates\2860_groups.sql 
    633657 
    634658 
  • trunk/sql/world_updates/2801_items.sql

    r2801 r2860  
    1212 
    1313/* there is HolidayId column added in 3.1 */ 
    14 ALTER TABLE `items` ADD `HolidayId` INT( 32 ) UNSIGNED NOT NULL DEFAULT '0'; 
     14ALTER TABLE `items` ADD `HolidayId` INT( 32 ) UNSIGNED NOT NULL DEFAULT '0' after `ItemLimitCategoryId`; 
    1515 
    1616/* Cosmetic changes */ 
  • trunk/sql/world_updates/2817_recallorientation.sql

    r2817 r2860  
    1 ALTER TABLE recall ADD `Orientation` float unsigned NOT NULL DEFAULT '0'; 
     1ALTER TABLE recall ADD `Orientation` float unsigned NOT NULL DEFAULT '0' after `positionZ`; 
  • trunk/src/arcemu-shared/AuthCodes.h

    r2213 r2860  
    2121#define _AUTHCODES_H 
    2222 
    23 // client 3.0.3, 2008/11/13 
     23// client 3.2.0, 2009/08/16 
    2424enum LoginErrorCode 
    2525{ 
     
    3131        E_RESPONSE_CONNECTED                                                                            = 0x05, 
    3232        E_RESPONSE_VERSION_MISMATCH                                                                     = 0x06, 
    33          
     33 
    3434        E_CSTATUS_CONNECTING                                                                            = 0x07, 
    3535        E_CSTATUS_NEGOTIATING_SECURITY                                                          = 0x08, 
     
    3737        E_CSTATUS_NEGOTIATION_FAILED                                                            = 0x0A, 
    3838        E_CSTATUS_AUTHENTICATING                                                                        = 0x0B, 
    39          
     39 
    4040        E_AUTH_OK                                                                                                       = 0x0C, 
    4141        E_AUTH_FAILED                                                                                           = 0x0D, 
     
    6161        E_AUTH_PARENTAL_CONTROL                                                                         = 0x21, 
    6262        E_AUTH_LOCKED_ENFORCED                                                                          = 0x22, 
    63          
     63 
    6464        E_REALM_LIST_IN_PROGRESS                                                                        = 0x23, 
    6565        E_REALM_LIST_SUCCESS                                                                            = 0x24, 
     
    6767        E_REALM_LIST_INVALID                                                                            = 0x26, 
    6868        E_REALM_LIST_REALM_NOT_FOUND                                                            = 0x27, 
    69          
     69 
    7070        E_ACCOUNT_CREATE_IN_PROGRESS                                                            = 0x28, 
    7171        E_ACCOUNT_CREATE_SUCCESS                                                                        = 0x29, 
    7272        E_ACCOUNT_CREATE_FAILED                                                                         = 0x2A, 
    73          
     73 
    7474        E_CHAR_LIST_RETRIEVING                                                                          = 0x2B, 
    7575        E_CHAR_LIST_RETRIEVED                                                                           = 0x2C, 
    7676        E_CHAR_LIST_FAILED                                                                                      = 0x2D, 
    77          
     77 
    7878        E_CHAR_CREATE_IN_PROGRESS                                                                       = 0x2E, 
    7979        E_CHAR_CREATE_SUCCESS                                                                           = 0x2F, 
     
    8989        E_CHAR_CREATE_EXPANSION                                                                         = 0x39, 
    9090        E_CHAR_CREATE_EXPANSION_CLASS                                                           = 0x3A, 
    91         E_CHAR_CREATE_ERROR_NEED_LVL_55_CHAR                                            = 0x3B, 
    92         E_CHAR_CREATE_ERROR_HERO_CLASS_LIMIT                                            = 0x3C, 
    93          
    94         E_CHAR_DELETE_IN_PROGRESS                                                                       = 0x3D, 
    95         E_CHAR_DELETE_SUCCESS                                                                           = 0x3E, 
    96         E_CHAR_DELETE_FAILED                                                                            = 0x3F, 
    97         E_CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER                                        = 0x40, 
    98         E_CHAR_DELETE_FAILED_GUILD_LEADER                                                       = 0x41, 
    99         E_CHAR_DELETE_FAILED_ARENA_CAPTAIN                                                      = 0x42, 
    100          
    101         E_CHAR_LOGIN_IN_PROGRESS                                                                        = 0x43, 
    102         E_CHAR_LOGIN_SUCCESS                                                                            = 0x44, 
    103         E_CHAR_LOGIN_NO_WORLD                                                                           = 0x45, 
    104         E_CHAR_LOGIN_DUPLICATE_CHARACTER                                                        = 0x46, 
    105         E_CHAR_LOGIN_NO_INSTANCES                                                                       = 0x47, 
    106         E_CHAR_LOGIN_FAILED                                                                                     = 0x48, 
    107         E_CHAR_LOGIN_DISABLED                                                                           = 0x49, 
    108         E_CHAR_LOGIN_NO_CHARACTER                                                                       = 0x4A, 
    109         E_CHAR_LOGIN_LOCKED_FOR_TRANSFER                                                        = 0x4B, 
    110         E_CHAR_LOGIN_LOCKED_BY_BILLING                                                          = 0x4C, 
    111          
    112         E_CHAR_NAME_SUCCESS                                                                                     = 0x4D, 
    113         E_CHAR_NAME_FAILURE                                                                                     = 0x4E, 
    114         E_CHAR_NAME_NO_NAME                                                                                     = 0x4F, 
    115         E_CHAR_NAME_TOO_SHORT                                                                           = 0x50, 
    116         E_CHAR_NAME_TOO_LONG                                                                            = 0x51, 
    117         E_CHAR_NAME_INVALID_CHARACTER                                                           = 0x52, 
    118         E_CHAR_NAME_MIXED_LANGUAGES                                                                     = 0x53, 
    119         E_CHAR_NAME_PROFANE                                                                                     = 0x54, 
    120         E_CHAR_NAME_RESERVED                                                                            = 0x55, 
    121         E_CHAR_NAME_INVALID_APOSTROPHE                                                          = 0x56, 
    122         E_CHAR_NAME_MULTIPLE_APOSTROPHES                                                        = 0x57, 
    123         E_CHAR_NAME_THREE_CONSECUTIVE                                                           = 0x58, 
    124         E_CHAR_NAME_INVALID_SPACE                                                                       = 0x59, 
    125         E_CHAR_NAME_CONSECUTIVE_SPACES                                                          = 0x5A, 
    126         E_CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS                       = 0x5B, 
    127         E_CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END        = 0x5C, 
    128         E_CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME                           = 0x5D, 
    129  
     91        E_CHAR_CREATE_LEVEL_REQUIREMENT                                                         = 0x3B, 
     92        E_CHAR_CREATE_UNIQUE_CLASS_LIMIT                                                        = 0x3C, 
     93        E_CHAR_CREATE_CHARACTER_IN_GUILD                                                        = 0x3D, 
     94        E_CHAR_CREATE_RESTRICTED_RACECLASS                                                      = 0x3E, 
     95        E_CHAR_CREATE_CHARACTER_CHOOSE_RACE                                                     = 0x3F, 
     96        E_CHAR_CREATE_CHARACTER_ARENA_LEADER                                            = 0x40, 
     97        E_CHAR_CREATE_CHARACTER_DELETE_MAIL                                                     = 0x41, 
     98 
     99        E_CHAR_DELETE_IN_PROGRESS                                                                       = 0x42, 
     100        E_CHAR_DELETE_SUCCESS                                                                           = 0x43, 
     101        E_CHAR_DELETE_FAILED                                                                            = 0x44, 
     102        E_CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER                                        = 0x45, 
     103        E_CHAR_DELETE_FAILED_GUILD_LEADER                                                       = 0x46, 
     104        E_CHAR_DELETE_FAILED_ARENA_CAPTAIN                                                      = 0x47, 
     105 
     106        E_CHAR_LOGIN_IN_PROGRESS                                                                        = 0x48, 
     107        E_CHAR_LOGIN_SUCCESS                                                                            = 0x49, 
     108        E_CHAR_LOGIN_NO_WORLD                                                                           = 0x4A, 
     109        E_CHAR_LOGIN_DUPLICATE_CHARACTER                                                        = 0x4B, 
     110        E_CHAR_LOGIN_NO_INSTANCES                                                                       = 0x4C, 
     111        E_CHAR_LOGIN_FAILED                                                                                     = 0x4D, 
     112        E_CHAR_LOGIN_DISABLED                                                                           = 0x4E, 
     113        E_CHAR_LOGIN_NO_CHARACTER                                                                       = 0x4F, 
     114        E_CHAR_LOGIN_LOCKED_FOR_TRANSFER                                                        = 0x50, 
     115        E_CHAR_LOGIN_LOCKED_BY_BILLING                                                          = 0x51, 
     116 
     117        E_CHAR_NAME_SUCCESS                                                                                     = 0x52, 
     118        E_CHAR_NAME_FAILURE                                                                                     = 0x53, 
     119        E_CHAR_NAME_NO_NAME                                                                                     = 0x54, 
     120        E_CHAR_NAME_TOO_SHORT                                                                           = 0x55, 
     121        E_CHAR_NAME_TOO_LONG                                                                            = 0x56, 
     122        E_CHAR_NAME_INVALID_CHARACTER                                                           = 0x57, 
     123        E_CHAR_NAME_MIXED_LANGUAGES                                                                     = 0x58, 
     124        E_CHAR_NAME_PROFANE                                                                                     = 0x59, 
     125        E_CHAR_NAME_RESERVED                                                                            = 0x5A, 
     126        E_CHAR_NAME_INVALID_APOSTROPHE                                                          = 0x5B, 
     127        E_CHAR_NAME_MULTIPLE_APOSTROPHES                                                        = 0x5C, 
     128        E_CHAR_NAME_THREE_CONSECUTIVE                                                           = 0x5D, 
     129        E_CHAR_NAME_INVALID_SPACE                                                                       = 0x5E, 
     130        E_CHAR_NAME_CONSECUTIVE_SPACES                                                          = 0x5F, 
     131        E_CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS                       = 0x60, 
     132        E_CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END        = 0x61, 
     133        E_CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME                           = 0x62, 
    130134}; 
     135 
    131136//These defines are for use with OutPacket 
    132137#define    RESPONSE_SUCCESS "\x0" 
     
    168173#define    AUTH_LOCKED_ENFORCED "\x22" 
    169174 
    170 #define    REALM_LIST_RECIEVING "\x23" 
     175#define    REALM_LIST_IN_PROGRESS "\x23" 
    171176#define    REALM_LIST_SUCCESS "\x24" 
    172177#define    REALM_LIST_FAILED "\x25" 
     
    195200#define    CHAR_CREATE_EXPANSION "\x39" 
    196201#define    CHAR_CREATE_EXPANSION_CLASS "\x3A" 
    197 #define    CHAR_CREATE_ERROR_NEED_LVL_55_CHAR "\x3B" 
    198 #define    CHAR_CREATE_ERROR_HERO_CLASS_LIMIT "\x3C" 
    199  
    200 #define    CHAR_DELETE_IN_PROGRESS "\x3D" 
    201 #define    CHAR_DELETE_SUCCESS "\x3E" 
    202 #define    CHAR_DELETE_FAILED "\x3F" 
    203 #define    CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER "\x40" 
    204 #define    CHAR_DELETE_FAILED_GUILD_LEADER "\x41" 
    205 #define    CHAR_DELETE_FAILED_ARENA_CAPTAIN "\x42" 
    206  
    207 #define    CHAR_LOGIN_IN_PROGRESS "\x43" 
    208 #define    CHAR_LOGIN_SUCCESS "\x44" 
    209 #define    CHAR_LOGIN_NO_WORLD "\x45" 
    210 #define    CHAR_LOGIN_DUPLICATE_CHARACTER "\x46" 
    211 #define    CHAR_LOGIN_NO_INSTANCES "\x47" 
    212 #define    CHAR_LOGIN_FAILED "\x48" 
    213 #define    CHAR_LOGIN_DISABLED "\x49" 
    214 #define    CHAR_LOGIN_NO_CHARACTER "\x4A" 
    215 #define    CHAR_LOGIN_LOCKED_FOR_TRANSFER "\x4B" 
    216 #define    CHAR_LOGIN_LOCKED_BY_BILLING "\x4C" 
    217  
    218 #define    CHAR_NAME_SUCCESS "\x4D" 
    219 #define    CHAR_NAME_FAILURE "\x4E" 
    220 #define    CHAR_NAME_NO_NAME "\x4F" 
    221 #define    CHAR_NAME_TOO_SHORT "\x50" 
    222 #define    CHAR_NAME_TOO_LONG "\x51" 
    223 #define    CHAR_NAME_INVALID_CHARACTER "\x52" 
    224 #define    CHAR_NAME_MIXED_LANGUAGES "\x53" 
    225 #define    CHAR_NAME_PROFANE "\x54" 
    226 #define    CHAR_NAME_RESERVED "\x55" 
    227 #define    CHAR_NAME_INVALID_APOSTROPHE "\x56" 
    228 #define    CHAR_NAME_MULTIPLE_APOSTROPHES "\x57" 
    229 #define    CHAR_NAME_THREE_CONSECUTIVE "\x58" 
    230 #define    CHAR_NAME_INVALID_SPACE "\x59" 
    231 #define    CHAR_NAME_CONSECUTIVE_SPACES "\x5A" 
    232 #define    CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS "\x5B" 
    233 #define    CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END "\x5C" 
    234 #define    CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME "\x5D" 
     202#define    CHAR_CREATE_LEVEL_REQUIREMENT "\x3B" 
     203#define    CHAR_CREATE_UNIQUE_CLASS_LIMIT "\x3C" 
     204#define    CHAR_CREATE_CHARACTER_IN_GUILD "\x3D" 
     205#define    CHAR_CREATE_RESTRICTED_RACECLASS "\x3E" 
     206#define    CHAR_CREATE_CHARACTER_CHOOSE_RACE "\x3F" 
     207#define    CHAR_CREATE_CHARACTER_ARENA_LEADER "\x40" 
     208#define    CHAR_CREATE_CHARACTER_DELETE_MAIL "\x41" 
     209 
     210#define    CHAR_DELETE_IN_PROGRESS "\x42" 
     211#define    CHAR_DELETE_SUCCESS "\x43" 
     212#define    CHAR_DELETE_FAILED "\x44" 
     213#define    CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER "\x45" 
     214#define    CHAR_DELETE_FAILED_GUILD_LEADER "\x46" 
     215#define    CHAR_DELETE_FAILED_ARENA_CAPTAIN "\x47" 
     216 
     217#define    CHAR_LOGIN_IN_PROGRESS "\x48" 
     218#define    CHAR_LOGIN_SUCCESS "\x49" 
     219#define    CHAR_LOGIN_NO_WORLD "\x4A" 
     220#define    CHAR_LOGIN_DUPLICATE_CHARACTER "\x4B" 
     221#define    CHAR_LOGIN_NO_INSTANCES "\x4C" 
     222#define    CHAR_LOGIN_FAILED "\x4D" 
     223#define    CHAR_LOGIN_DISABLED "\x4E" 
     224#define    CHAR_LOGIN_NO_CHARACTER "\x4F" 
     225#define    CHAR_LOGIN_LOCKED_FOR_TRANSFER "\x50" 
     226#define    CHAR_LOGIN_LOCKED_BY_BILLING "\x51" 
     227 
     228#define    CHAR_NAME_SUCCESS "\x52" 
     229#define    CHAR_NAME_FAILURE "\x53" 
     230#define    CHAR_NAME_NO_NAME "\x54" 
     231#define    CHAR_NAME_TOO_SHORT "\x55" 
     232#define    CHAR_NAME_TOO_LONG "\x56" 
     233#define    CHAR_NAME_INVALID_CHARACTER "\x57" 
     234#define    CHAR_NAME_MIXED_LANGUAGES "\x58" 
     235#define    CHAR_NAME_PROFANE "\x59" 
     236#define    CHAR_NAME_RESERVED "\x5A" 
     237#define    CHAR_NAME_INVALID_APOSTROPHE "\x5B" 
     238#define    CHAR_NAME_MULTIPLE_APOSTROPHES "\x5C" 
     239#define    CHAR_NAME_THREE_CONSECUTIVE "\x5D" 
     240#define    CHAR_NAME_INVALID_SPACE "\x5E" 
     241#define    CHAR_NAME_CONSECUTIVE_SPACES "\x5F" 
     242#define    CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS "\x60" 
     243#define    CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END "\x61" 
     244#define    CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME "\x62" 
    235245 
    236246#endif 
  • trunk/src/arcemu-shared/Database/DBCStores.cpp

    r2784 r2860  
    172172        "u" // AttributesExE 
    173173        "u" // AttributesExF 
     174        "x" // unk 3.2.0 
    174175        "u" // RequiredShapeShift 
     176        "x" // unk 3.2.0 
    175177        "u" // ShapeshiftExclude 
     178        "x" // unk 3.2.0 
    176179        "u" // Targets 
    177180        "u" // TargetCreatureType 
     
    265268        "ux" 
    266269        "x" //Added in 3.1 
     270        "xxx" // unk 3.2.0, float! 
     271        "x" // unk 3.2.0 
    267272; 
    268273 
    269274 
    270 const char* itemextendedcostFormat = "uuuuuuuuuuuuuux"; 
     275const char* itemextendedcostFormat = "uuuxuuuuuuuuuuux"; 
    271276const char* talententryFormat = "uuuuuuuuuxxxxuxxuxxxxxx"; 
    272277const char* talenttabentryFormat = "uxxxxxxxxxxxxxxxxxxxuuux"; 
     
    286291const char* dbctaxipathnodeFormat = "uuuufffuuxx"; 
    287292const char* creaturespelldataFormat = "uuuuuuuuu"; 
    288 const char* charraceFormat = "uxxxxxxxuxxxxulxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
     293const char* charraceFormat = "uxxxxxxuxxxxulxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
    289294const char* charclassFormat = "uxuxlxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 
    290295const char* creaturefamilyFormat = "ufufuuuuuxlxxxxxxxxxxxxxxxxx"; 
     
    300305        "u"                                     // 56 multimap_id 
    301306        "x"                                     // 57 unk_float (all 1 but arathi 1.25) 
    302         "xxxxxxxxxxxxxxxxx"     // 58-74 normalReqText 
    303         "xxxxxxxxxxxxxxxxx"     // 75-91 heroicReqText 
    304         "xxxxxxxxxxxxxxxxx"     // 92-108 emptyText 
    305         "u"                                     // 109 parent_map 
    306         "u"                                     // 110 start_x 
    307         "u"                                     // 111 start_y 
    308         "u"                                     // 112 resetTimeRaid 
    309         "u"                                     // 113 resetTimeHeroic 
    310         "x"                                     // 114 unk 
    311         "x"                                     // 115 unk 
    312         "u"                                     // 116 addon 
    313         "x";                            // 117 unk 
     307        "u"                                     // 58 parent_map 
     308        "u"                                     // 59 start_x 
     309        "u"                                     // 60 start_y 
     310        "x"                                     // 61 unk 
     311        "u"                                     // 62 addon 
     312        "x"                                     // 63 unk 
     313        "x";                                    // 64 unk, but as it is always one of the following ones, it could be a max. player count: 0, 5, 10, 20, 25, 40 
    314314 
    315315const char* itemrandomsuffixformat = "uxxxxxxxxxxxxxxxxxxuuuxxuuuxx";//19, 20, 21, 24, 25, 26 
     
    322322const char* areatriggerformat = "uuffffffff"; 
    323323const char* scalingstatdistributionformat = "uiiiiiiiiiiuuuuuuuuuuu"; 
    324 const char* scalingstatvaluesformat = "uuuuuuuuuuuuuuuuuuu"; 
     324const char* scalingstatvaluesformat = "uuuuuuuuuuuuuuuuuuxxxxxx"; 
    325325const char* itemlimitcategoryformat = "usxxxxxxxxxxxxxxxxuu"; 
    326326 
  • trunk/src/arcemu-shared/Database/DBCStores.h

    r2830 r2860  
    13011301        float  start_x;      // enter x coordinate (if exist single entry) 
    13021302        float  start_y;      // enter y coordinate (if exist single entry) 
    1303         uint32 resetTimeRaid; 
    1304         uint32 resetTimeHeroic; 
     1303        //uint32 resetTimeRaid;   // REMOVED IN 3.2.0 
     1304        //uint32 resetTimeHeroic; // REMOVED IN 3.2.0 
    13051305        uint32 addon;        // 0-original maps, 1-tbc addon, 2-wotlk addon 
    13061306}; 
     
    14351435        uint32 id; 
    14361436        uint32 level; 
    1437         uint32 multiplier[17]; 
     1437        uint32 multiplier[16]; 
    14381438}; 
    14391439 
  • trunk/src/arcemu-world/ArenaTeam.cpp

    r2808 r2860  
    156156        if(plr) 
    157157        { 
    158                 base_field = (m_type*6) + PLAYER_FIELD_ARENA_TEAM_INFO_1_1; 
     158                base_field = (m_type*7) + PLAYER_FIELD_ARENA_TEAM_INFO_1_1; 
    159159                plr->SetUInt32Value(base_field, m_id); 
    160160                plr->SetUInt32Value(base_field+1,m_leader); 
     
    181181                        if(info->m_loggedInPlayer) 
    182182                        { 
    183                                 info->m_loggedInPlayer->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (m_type*6), 0); 
     183                                info->m_loggedInPlayer->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (m_type*7), 0); 
    184184                                info->m_loggedInPlayer->m_arenaTeams[m_type]=0; 
    185185                        } 
     
    315315                { 
    316316                        if(m_members[i].Info->m_loggedInPlayer) 
    317                                 m_members[i].Info->m_loggedInPlayer->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (m_type*6) + 1, 0); 
     317                                m_members[i].Info->m_loggedInPlayer->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (m_type*7) + 1, 0); 
    318318                } 
    319319                else if(m_members[i].Info->guid == old_leader) 
    320320                { 
    321321                        if(m_members[i].Info->m_loggedInPlayer) 
    322                                 m_members[i].Info->m_loggedInPlayer->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (m_type*6) + 1, 1); 
     322                                m_members[i].Info->m_loggedInPlayer->SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (m_type*7) + 1, 1); 
    323323                } 
    324324        } 
  • trunk/src/arcemu-world/BattlegroundHandler.cpp

    r2790 r2860  
    347347    for( uint8 i = 0; i < 3; i++ ) 
    348348    { 
    349                 id = player->GetUInt32Value( PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + ( i * 6 ) ); 
     349                id = player->GetUInt32Value( PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + ( i * 7 ) ); 
    350350        if( id > 0 ) 
    351351        { 
  • trunk/src/arcemu-world/BattlegroundMgr.cpp

    r2773 r2860  
    2626const static uint32 BGMapIds[ BATTLEGROUND_NUM_TYPES ] = 
    2727{ 
    28         0,              // 0 
    29         30,             // AV 
     28        0,      // 0 
     29        30,     // AV 
    3030        489,    // WSG 
    3131        529,    // AB 
    32         0,              // 2v2 
    33         0,              // 3v3 
    34         0,              // 5v5 
     32        0,      // 2v2 
     33        0,      // 3v3 
     34        0,      // 5v5 
    3535        566,    // EOTS 
    3636        0, 
     
    4141 
    4242const static CreateBattlegroundFunc BGCFuncs[BATTLEGROUND_NUM_TYPES] = { 
    43         NULL,                                                           // 0 
    44         &AlteracValley::Create,                         // AV 
    45         &WarsongGulch::Create,                          // WSG 
    46         &ArathiBasin::Create,                           // AB 
    47         NULL,                                                           // 2v2 
    48         NULL,                                                           // 3v3 
    49         NULL,                                                           // 5v5 
    50         &EyeOfTheStorm::Create,                         // EotS 
     43        NULL,                           // 0 
     44        &AlteracValley::Create,         // AV 
     45        &WarsongGulch::Create,          // WSG 
     46        &ArathiBasin::Create,           // AB 
     47        NULL,                           // 2v2 
     48        NULL,                           // 3v3 
     49        NULL,                           // 5v5 
     50        &EyeOfTheStorm::Create,         // EotS 
    5151        NULL, 
    52         &StrandOfTheAncient::Create,            // SOTA 
     52        &StrandOfTheAncient::Create,    // SOTA 
    5353        NULL, 
    5454        NULL, 
     
    8484                return; 
    8585        } 
     86 
     87        if( BattlegroundType >= BATTLEGROUND_NUM_TYPES ) return; //VLack: Nasty hackers might try to abuse this packet to crash us... 
    8688 
    8789        uint32 Count = 0; 
  • trunk/src/arcemu-world/BattlegroundMgr.h

    r2773 r2860  
    3535enum BattlegroundDbcIndex 
    3636{ 
    37         BGDBC_ALTERAC_VALLEY            = 1, 
     37        BGDBC_ALTERAC_VALLEY                    = 1, 
    3838        BGDBC_WARSONG_GULCH                     = 2, 
    3939        BGDBC_ARATHI_BASIN                      = 3, 
    4040        BGDBC_ARENA_NAGRAND                     = 4, 
    41         BGDBC_ARENA_BLADES_EDGE         = 5, 
     41        BGDBC_ARENA_BLADES_EDGE                 = 5, 
    4242        BGDBC_ARENA_ALLMAPS                     = 6, 
    43         BGDBC_EYE_OF_THE_STORM          = 7, 
    44         BGDBC_RUINS_OF_LORDAERON        = 8, 
    45         BGDBC_STRAND_OF_THE_ANCIENT     = 9, 
    46         BGDBC_DALARAN_SEWERS            = 10, 
     43        BGDBC_EYE_OF_THE_STORM                  = 7, 
     44        BGDBC_RUINS_OF_LORDAERON                = 8, 
     45        BGDBC_STRAND_OF_THE_ANCIENT             = 9, 
     46        BGDBC_DALARAN_SEWERS                    = 10, 
    4747        BGDBC_RING_OF_VALOR                     = 11, 
    48         BGDBC_ROWS                                      = 11, 
     48        BGDBC_ROWS                              = 11, 
    4949}; 
    5050 
    5151enum BattleGroundTypes 
    5252{ 
    53         BATTLEGROUND_ALTERAC_VALLEY                     = 1, 
    54         BATTLEGROUND_WARSONG_GULCH                      = 2, 
    55         BATTLEGROUND_ARATHI_BASIN                       = 3, 
    56         BATTLEGROUND_ARENA_2V2                          = 4, 
    57         BATTLEGROUND_ARENA_3V3                          = 5, 
    58         BATTLEGROUND_ARENA_5V5                          = 6, 
     53        BATTLEGROUND_ALTERAC_VALLEY             = 1, 
     54        BATTLEGROUND_WARSONG_GULCH              = 2, 
     55        BATTLEGROUND_ARATHI_BASIN               = 3, 
     56        BATTLEGROUND_ARENA_2V2                  = 4, 
     57        BATTLEGROUND_ARENA_3V3                  = 5, 
     58        BATTLEGROUND_ARENA_5V5                  = 6, 
    5959        BATTLEGROUND_EYE_OF_THE_STORM           = 7, 
    6060        BATTLEGROUND_STRAND_OF_THE_ANCIENT      = 9, 
    61         BATTLEGROUND_NUM_TYPES                          = 12, 
     61        BATTLEGROUND_NUM_TYPES                  = 33, //Based on BattlemasterList.dbc, make the storage arrays big enough! On 3.1.3 the last one was 11 The Ring of Valor, so 12 was enough here, but on 3.2.0 there is 32 All Battlegrounds! 
    6262}; 
    6363 
     
    8787 
    8888#define SOUND_BATTLEGROUND_BEGIN                        0xD6F 
    89 #define SOUND_HORDE_SCORES                                      8213 
     89#define SOUND_HORDE_SCORES                              8213 
    9090#define SOUND_ALLIANCE_SCORES                           8173 
    9191#define SOUND_ALLIANCE_CAPTURE                          8174 
    92 #define SOUND_HORDE_CAPTURE                                     8212 
     92#define SOUND_HORDE_CAPTURE                             8212 
    9393#define SOUND_ALLIANCE_RETURNED                         8192 
    9494#define SOUND_HORDE_RETURNED                            8192    // huh? 
    95 #define SOUND_HORDEWINS                                         8454 
    96 #define SOUND_ALLIANCEWINS                                      8455 
    97 #define SOUND_HORDE_BGALMOSTEND                  0x2108 
    98 #define SOUND_ALLIANCE_BGALMOSTEND                0x2109 
    99  
    100 #define AB_ALLIANCE_RESOURCES                      0x6F0 
    101 #define AB_HORDE_RESOURCES                                0x6F1 
     95#define SOUND_HORDEWINS                                 8454 
     96#define SOUND_ALLIANCEWINS                              8455 
     97#define SOUND_HORDE_BGALMOSTEND                         0x2108 
     98#define SOUND_ALLIANCE_BGALMOSTEND                      0x2109 
     99 
     100#define AB_ALLIANCE_RESOURCES                           0x6F0 
     101#define AB_HORDE_RESOURCES                              0x6F1 
    102102#define AB_HORDE_CAPTUREBASE                            0x6F2 
    103 #define AB_ALLIANCE_CAPTUREBASE                  0x6F3 
    104 #define AB_MAX_SCORE                                            0x6F4 
    105  
    106 #define BG_PREPARATION 44521 
    107 #define BG_REVIVE_PREPARATION   44535 
    108 #define RESURRECT_SPELL                 21074   // Spirit Healer Res 
    109 #define BG_DESERTER 26013 
     103#define AB_ALLIANCE_CAPTUREBASE                         0x6F3 
     104#define AB_MAX_SCORE                                    0x6F4 
     105 
     106#define BG_PREPARATION                                  44521 
     107#define BG_REVIVE_PREPARATION                           44535 
     108#define RESURRECT_SPELL                                 21074   // Spirit Healer Res 
     109#define BG_DESERTER                                     26013 
    110110 
    111111// WSG define's 
    112 #define WSG_ALLIANCE_FLAG_CAPTURED                0x922 
    113 #define WSG_HORDE_FLAG_CAPTURED                  0x923 
    114 #define WSG_CURRENT_HORDE_SCORE                  0x62E 
    115 #define WSG_CURRENT_ALLIANCE_SCORE                0x62D 
    116 #define WSG_MAX_SCORE                                      0x641 
     112#define WSG_ALLIANCE_FLAG_CAPTURED                      0x922 
     113#define WSG_HORDE_FLAG_CAPTURED                         0x923 
     114#define WSG_CURRENT_HORDE_SCORE                         0x62E 
     115#define WSG_CURRENT_ALLIANCE_SCORE                      0x62D 
     116#define WSG_MAX_SCORE                                   0x641 
    117117 
    118118// AV define's 
    119 #define AV_UNCONTROLED_SNOWFALL_GRAVE      0x7AE //1 -> show uncontrolled 
    120  
    121 #define AV_CONTROLED_ICEBLOOD_TOWER_HORDE   0x569 //1 -> horde controlled 
    122 #define AV_CONTROLED_TOWER_POINT_HORDE    0x568 //1 -> horde controlled 
    123 #define AV_CONTROLED_FROSTWOLF_RELIFHUNT_HORDE 0x532 //1 -> horde controlled 
    124 #define AV_CONTROLED_EAST_FROSTWOLF_TOWER_HORDE 0x567 //1 -> horde controlled 
    125 #define AV_CONTROLED_WEST_FROSTWOLF_TOWER_HORDE 0x566 //1 -> horde controlled 
    126 #define AV_CONTROLED_ICEBLOOD_GRAVE_HORDE   0x543 //1 -> horde controlled 
    127 #define AV_CONTROLED_FROSTWOLF_GRAVE_HORDE   0x53A //1 -> horde controlled 
    128  
    129 #define AV_CONTROLED_IRONDEEP_MINE_TROGG        0x550 //1 -> trogg controlled 
    130 #define AV_CONTROLED_COLDTHOOT_MINE_KOBOLT  0x54D //1 -> kobolt controlled 
    131  
    132 #define AV_CONTROLED_STORMPIKE_GRAVE_ALLIANCE  0x535 //1 -> alliance controlled 
    133 #define AV_CONTROLED_STONEHEART_BUNKER_ALLIANCE  0x554 //1 -> alliance controlled 
    134 #define AV_CONTROLED_ICEWING_BUNKER_ALLIANCE  0x553 //1 -> alliance controlled 
    135 #define AV_CONTROLED_DUBALDER_NORTH_BUNKER_ALLIANCE  0x552 //1 -> alliance controlled 
    136 #define AV_CONTROLED_DUBALDER_SOUTH_BUNKER_ALLIANCE  0x551 //1 -> alliance controlled 
    137 #define AV_CONTROLED_STORMPIKE_AID_STATION_ALLIANCE  0x52D //1 -> alliance controlled 
    138 #define AV_CONTROLED_STONEHEART_GRAVE_ALLIANCE  0x516 //1 -> alliance controlled 
     119#define AV_UNCONTROLED_SNOWFALL_GRAVE                   0x7AE //1 -> show uncontrolled 
     120 
     121#define AV_CONTROLED_ICEBLOOD_TOWER_HORDE               0x569 //1 -> horde controlled 
     122#define AV_CONTROLED_TOWER_POINT_HORDE                  0x568 //1 -> horde controlled 
     123#define AV_CONTROLED_FROSTWOLF_RELIFHUNT_HORDE          0x532 //1 -> horde controlled 
     124#define AV_CONTROLED_EAST_FROSTWOLF_TOWER_HORDE         0x567 //1 -> horde controlled 
     125#define AV_CONTROLED_WEST_FROSTWOLF_TOWER_HORDE         0x566 //1 -> horde controlled 
     126#define AV_CONTROLED_ICEBLOOD_GRAVE_HORDE               0x543 //1 -> horde controlled 
     127#define AV_CONTROLED_FROSTWOLF_GRAVE_HORDE              0x53A //1 -> horde controlled 
     128 
     129#define AV_CONTROLED_IRONDEEP_MINE_TROGG                0x550 //1 -> trogg controlled 
     130#define AV_CONTROLED_COLDTHOOT_MINE_KOBOLT              0x54D //1 -> kobolt controlled 
     131 
     132#define AV_CONTROLED_STORMPIKE_GRAVE_ALLIANCE           0x535 //1 -> alliance controlled 
     133#define AV_CONTROLED_STONEHEART_BUNKER_ALLIANCE         0x554 //1 -> alliance controlled 
     134#define AV_CONTROLED_ICEWING_BUNKER_ALLIANCE            0x553 //1 -> alliance controlled 
     135#define AV_CONTROLED_DUBALDER_NORTH_BUNKER_ALLIANCE     0x552 //1 -> alliance controlled 
     136#define AV_CONTROLED_DUBALDER_SOUTH_BUNKER_ALLIANCE     0x551 //1 -> alliance controlled 
     137#define AV_CONTROLED_STORMPIKE_AID_STATION_ALLIANCE     0x52D //1 -> alliance controlled 
     138#define AV_CONTROLED_STONEHEART_GRAVE_ALLIANCE          0x516 //1 -> alliance controlled 
    139139 
    140140/* get level grouping for player */ 
  • trunk/src/arcemu-world/CharacterHandler.cpp

    r2831 r2860  
    197197                                data << uint32(1);              // alive 
    198198                        } 
    199                                 data << uint32(0); //Added in 3.0.2 
    200                          
     199 
     200                        data << uint32(0); //Added in 3.0.2 - if 1, faction change at logon... 
     201 
    201202                        data << fields[14].GetUInt8();          // Rest State 
     203 
     204                        data << uint8(0); //3.2.0 
    202205 
    203206                        if( Class == WARLOCK || Class == HUNTER ) 
     
    368371                && ( class_ == DEATHKNIGHT ) ) 
    369372        { 
    370                 OutPacket(SMSG_CHAR_CREATE, 1, CHAR_CREATE_ERROR_HERO_CLASS_LIMIT); 
     373                OutPacket(SMSG_CHAR_CREATE, 1, CHAR_CREATE_UNIQUE_CLASS_LIMIT); 
    371374                return; 
    372375        } 
     
    427430                SendPacket( &data ); 
    428431                */ 
    429                 OutPacket( SMSG_CHAR_CREATE, 1, CHAR_CREATE_ERROR_NEED_LVL_55_CHAR); 
     432                OutPacket( SMSG_CHAR_CREATE, 1, CHAR_CREATE_LEVEL_REQUIREMENT); 
    430433                return; 
    431434        } 
  • trunk/src/arcemu-world/Creature.h

    r2850 r2860  
    6565        char * SubName; 
    6666        char * info_str; 
     67        uint32 QuestItems[6]; 
    6768        uint32 Flags1; 
    6869        uint32 Type; 
  • trunk/src/arcemu-world/DynamicObject.cpp

    r2802 r2860  
    7272 
    7373        m_floatValues[DYNAMICOBJECT_RADIUS] = radius; 
    74         m_floatValues[DYNAMICOBJECT_POS_X]  = x; 
    75         m_floatValues[DYNAMICOBJECT_POS_Y]  = y; 
    76         m_floatValues[DYNAMICOBJECT_POS_Z]  = z; 
     74        m_position.x = x; //m_floatValues[DYNAMICOBJECT_POS_X]  = x; 
     75        m_position.y = y; //m_floatValues[DYNAMICOBJECT_POS_Y]  = y; 
     76        m_position.z = z; //m_floatValues[DYNAMICOBJECT_POS_Z]  = z; 
     77         
    7778 
    7879        m_aliveDuration = duration; 
  • trunk/src/arcemu-world/GameObject.cpp

    r2828 r2860  
    6060        m_battleground = NULL; 
    6161        m_rotation = 0; 
     62 
     63        m_overrides = 0; 
    6264} 
    6365 
     
    99101} 
    100102 
    101 bool GameObject::CreateFromProto(uint32 entry,uint32 mapid, float x, float y, float z, float ang, float r0, float r1, float r2, float r3) 
     103bool GameObject::CreateFromProto(uint32 entry,uint32 mapid, float x, float y, float z, float ang, float r0, float r1, float r2, float r3, uint32 overrides) 
    102104{ 
    103105        pInfo= GameObjectNameStorage.LookupEntry(entry); 
     
    107109        SetUInt32Value( OBJECT_FIELD_ENTRY, entry ); 
    108110         
     111        m_overrides=overrides; 
    109112//      SetFloatValue( GAMEOBJECT_POS_X, x ); 
    110113//      SetFloatValue( GAMEOBJECT_POS_Y, y ); 
     
    322325                << GetFloatValue(OBJECT_FIELD_SCALE_X) << "," 
    323326                << "0," 
    324                 << m_phase << ")"; 
     327                << m_phase << "," 
     328                << m_overrides << ")"; 
    325329        WorldDatabase.Execute(ss.str().c_str()); 
    326330 
     
    374378                << GetFloatValue(OBJECT_FIELD_SCALE_X) << "," 
    375379                << "0," 
    376                 << m_phase << ")"; 
     380                << m_phase << "," 
     381                << m_overrides << ")"; 
    377382 
    378383        FILE * OutFile; 
     
    497502bool GameObject::Load(GOSpawn *spawn) 
    498503{ 
    499         if(!CreateFromProto(spawn->entry,0,spawn->x,spawn->y,spawn->z,spawn->facing)) 
     504        if(!CreateFromProto(spawn->entry,0,spawn->x,spawn->y,spawn->z,spawn->facing,spawn->o,spawn->o1,spawn->o2,spawn->o3,spawn->overrides)) 
    500505                return false; 
    501506 
     
    840845        float r2=GetFloatValue(GAMEOBJECT_PARENTROTATION_02); 
    841846        float r3=GetFloatValue(GAMEOBJECT_PARENTROTATION_03); 
    842         if(r2==0.0f && r3==0.0f) 
     847        if(r2==0.0f && r3==0.0f && !(m_overrides & GAMEOBJECT_OVERRIDE_PARENTROT) ) 
    843848        { 
    844849                r2 = (float)f_rot1; 
  • trunk/src/arcemu-world/GameObject.h

    r2788 r2860  
    4444}; 
    4545 
     46enum GAMEOBJECT_OVERRIDES //by VLack 
     47{ 
     48        GAMEOBJECT_INFVIS = 0x01,               //Makes the gameobject forever visible on the map after you saw it at least once - for various transports; actually it just doesn't erase it while you're on the same map. 
     49        GAMEOBJECT_MAPWIDE = 0x02,              //When you enter its map, the gameobject gets pushed to you no matter how far it is (but only for players), especially for Deeprun and Ulduar Trams. 
     50        GAMEOBJECT_AREAWIDE = 0x04,             //UNIMPLEMENTED, but will work like this: the Map will get marked that it contains an object like this, and on player movement these objects will get distance-checked to spawn them from a greater distance than normal if needed - for few objects on smaller maps, like on battlegrounds; maybe they'll get area-triggered, haven't decided yet. 
     51        GAMEOBJECT_ONMOVEWIDE = 0x08,           //When this gameobject moves and sends updates about it's position, do so in the second range - MapMgr::ChangeObjectLocation, +/- 6 units wide instead of +/- 1. 
     52        GAMEOBJECT_OVERRIDE_FLAGS = 0x10,       //UNIMPLEMENTED, Let the core decide about the flags sent in the A9 - example: 252 instead of 352 for Deeprun Tram. 
     53        GAMEOBJECT_OVERRIDE_BYTES1 = 0x20,      //UNIMPLEMENTED, Let the core use the full field instead an uint8 in GAMEOBJECT_BYTES_1, if the database creator knows what to do with it. 
     54        GAMEOBJECT_OVERRIDE_PARENTROT = 0x40,   //Makes it possible for the core to skip calculating these fields and use whatever was specified in the spawn. 
     55        //Later other types might folow, or the upper bytes might get used for the AREAWIDE option in the overrides variable... 
     56}; 
     57 
    4658#if ENABLE_SHITTY_STL_HACKS == 1 
    4759typedef HM_NAMESPACE::hash_map<Quest*, uint32 > GameObjectGOMap; 
     
    8698        char * Unkstr; 
    8799        float Size; 
    88         uint32 QuestItems[4]; 
     100        uint32 QuestItems[6]; 
    89101        uint32 SpellFocus; 
    90102        uint32 sound1; 
     
    188200        //void Create ( uint32 display_id, uint8 state, uint32 obj_field_entry, float scale, uint16 type, uint16 faction, uint32 mapid, float x, float y, float z, float ang ); 
    189201   // void Create ( uint32 mapid, float x, float y, float z, float ang); 
    190         bool CreateFromProto(uint32 entry,uint32 mapid, float x, float y, float z, float ang, float r0=0.0f, float r1=0.0f, float r2=0.0f, float r3=0.0f); 
     202        bool CreateFromProto(uint32 entry,uint32 mapid, float x, float y, float z, float ang, float r0=0.0f, float r1=0.0f, float r2=0.0f, float r3=0.0f, uint32 overrides=0); 
    191203    
    192204        bool Load(GOSpawn *spawn); 
     
    303315        uint8 GetState(); 
    304316 
     317        ARCEMU_INLINE uint32 GetOverrides() { return m_overrides; } 
     318 
    305319protected: 
    306320 
     
    312326        uint32 usage_remaining; //used for mining to mark times it can be mined 
    313327 
     328        uint32 m_overrides; //See enum GAMEOBJECT_OVERRIDES! 
    314329}; 
    315330 
  • trunk/src/arcemu-world/Group.cpp

    r2773 r2860  
    8282        m_isqueued=false; 
    8383        m_difficulty=0; 
     84        m_raiddifficulty=0; 
    8485        m_assistantLeader=m_mainAssist=m_mainTank=NULL; 
    8586#ifdef VOICE_CHAT 
     
    285286                                data.Initialize(SMSG_GROUP_LIST); 
    286287                                data << uint8(m_GroupType);     //0=party,1=raid 
    287                                 data << uint8(0);   // unk 
     288                                data << uint8(0);   // 1 if battleground group 
    288289                                data << uint8(sg1->GetID()); 
    289290                                data << uint8(0);       // unk2 
     
    344345                                data << uint8( m_LootThreshold ); 
    345346                                data << uint8( m_difficulty ); 
     347                                data << uint8( m_raiddifficulty ); 
    346348 
    347349                                if( !(*itr1)->m_loggedInPlayer->IsInWorld() ) 
     
    776778        m_LootThreshold = fields[4].GetUInt8(); 
    777779        m_difficulty = fields[5].GetUInt8(); 
     780        m_raiddifficulty = fields[6].GetUInt8(); 
    778781 
    779782        LOAD_ASSISTANT(6, m_assistantLeader); 
     
    849852                << uint32(m_LootMethod) << "," 
    850853                << uint32(m_LootThreshold) << "," 
    851                 << uint32(m_difficulty) << ","; 
     854                << uint32(m_difficulty) << "," 
     855                << uint32(m_raiddifficulty) << ","; 
    852856 
    853857        if(m_assistantLeader) 
  • trunk/src/arcemu-world/Group.h

    r2773 r2860  
    237237public: 
    238238        uint8 m_difficulty; 
     239        uint8 m_raiddifficulty; 
    239240}; 
    240241 
  • trunk/src/arcemu-world/ItemHandler.cpp

    r2847 r2860  
    429429        int8 error=0; 
    430430 
    431         recv_data >> srcslot >> dstslot; 
     431        recv_data >> dstslot >> srcslot; 
    432432 
    433433        sLog.outDetail("ITEM: swap, src slot: %u dst slot: %u", (uint32)srcslot, (uint32)dstslot); 
     
    943943        data << itemProto->Flags; 
    944944        data << itemProto->BuyPrice; 
     945        data << itemProto->Faction; 
    945946        data << itemProto->SellPrice; 
    946947        data << itemProto->InventoryType; 
  • trunk/src/arcemu-world/ItemInterface.cpp

    r2852 r2860  
    414414                                m_pOwner->ApplyItemMods( pItem, slot, false ); 
    415415                                int VisibleBase = PLAYER_VISIBLE_ITEM_1_ENTRYID + (slot * PLAYER_VISIBLE_ITEM_LENGTH); 
    416                                 for (int i = VisibleBase; i < VisibleBase + 17; ++i) 
     416                                for (int i = VisibleBase; i < VisibleBase + PLAYER_VISIBLE_ITEM_LENGTH; ++i) 
    417417                                { 
    418418                                        m_pOwner->SetUInt32Value(i, 0); 
     
    585585                                m_pOwner->ApplyItemMods(pItem, slot, false ); 
    586586                                int VisibleBase = PLAYER_VISIBLE_ITEM_1_ENTRYID + (slot * PLAYER_VISIBLE_ITEM_LENGTH); 
    587                                 for (int i = VisibleBase; i < VisibleBase + 17; ++i) 
     587                                for (int i = VisibleBase; i < VisibleBase + PLAYER_VISIBLE_ITEM_LENGTH; ++i) 
    588588                                { 
    589589                                        m_pOwner->SetUInt32Value(i, 0); 
  • trunk/src/arcemu-world/ItemPrototype.h

    r2801 r2860  
    319319        ARMOR_PENETRATION_RATING                        = 44, 
    320320        SPELL_POWER                                                     = 45,  
     321        HEALTH_REGEN                                    = 46, 
     322        SPELL_PENETRATION                               = 47, 
     323        BLOCK_VALUE                                     = 48, 
    321324}; 
    322325 
     
    586589        uint32 Quality; 
    587590        uint32 Flags; 
     591        uint32 Faction; 
    588592        uint32 BuyPrice; 
    589593        uint32 SellPrice; 
  • trunk/src/arcemu-world/LfgMgr.h

    r2773 r2860  
    2727        LFG_ZONE = 4, 
    2828        LFG_HEROIC_DUNGEON = 5, // from client 
     29        LFG_ANY_DUNGEON = 6, 
     30        LFG_ANY_HEROIC_DUNGEON = 7, 
     31        LFG_DAILY_DUNGEON = 8, 
     32        LFG_DAILY_HEROIC_DUNGEON = 9, 
    2933}; 
    3034 
    31 #define MAX_DUNGEONS 244+1 // check max entry's +1 on lfgdungeons.dbc 
     35#define MAX_DUNGEONS 250+1 // check max entry's +1 on lfgdungeons.dbc 
    3236#define MAX_LFG_QUEUE_ID 3 
    3337#define LFG_MATCH_TIMEOUT 30            // in seconds 
  • trunk/src/arcemu-world/MailSystem.cpp

    r2808 r2860  
    6363        WorldPacket * data = new WorldPacket(SMSG_MAIL_LIST_RESULT, 500); 
    6464        MessageMap::iterator itr; 
     65        uint32 realcount = 0; 
    6566        uint32 count = 0; 
    6667        uint32 t = (uint32)UNIXTIME; 
     68        *data << uint32(0);      // realcount - this can be used to tell the client we have more mail than that fits into this packet 
    6769        *data << uint8(0);       // size placeholder 
    6870 
     
    7476                if((uint32)UNIXTIME < itr->second.delivery_time) 
    7577                        continue;               // undelivered 
    76                  
     78 
     79                if(count >= 50) //VLack: We could calculate message sizes instead of this, but the original code did a break at 50, so I won't fix this up if no one felt the need to do so before ;-) 
     80                { 
     81                        ++realcount; 
     82                        continue; 
     83                } 
     84 
    7785                if(itr->second.AddMessageDataToPacket(*data)) 
     86                { 
    7887                        ++count; 
    79                  
    80                 if(count == 50) 
    81                         break; 
    82         } 
    83  
    84         const_cast<uint8*>(data->contents())[0] = static_cast<uint8>( count ); 
     88                        ++realcount; 
     89                } 
     90        } 
     91 
     92        data->put<uint32>(0, realcount);  
     93        data->put<uint8>(4, count);  
    8594 
    8695        // do cleanup on request mail 
  • trunk/src/arcemu-world/Map.cpp

    r2828 r2860  
    2626 
    2727#define CREATURESPAWNSFIELDCOUNT 26 
    28 #define GOSPAWNSFIELDCOUNT               17 
     28#define GOSPAWNSFIELDCOUNT               18 
    2929 
    3030Map::Map(uint32 mapid, MapInfo * inf) 
     
    274274                                gspawn->phase = fields[16].GetUInt32(); 
    275275                                if( gspawn->phase == 0 ) gspawn->phase=0xFFFFFFFF; 
     276                                gspawn->overrides = fields[17].GetUInt32(); 
    276277                                staticSpawns.GOSpawns.push_back(gspawn); 
    277278                                ++GameObjectSpawnCount; 
     
    309310                                        gspawn->phase = fields[16].GetUInt32(); 
    310311                                        if( gspawn->phase == 0 ) gspawn->phase=0xFFFFFFFF; 
    311  
    312                                         //uint32 cellx=float2int32(((_maxX-gspawn->x)/_cellSize)); 
    313                                         //uint32 celly=float2int32(((_maxY-gspawn->y)/_cellSize)); 
    314                                         uint32 cellx=CellHandler<MapMgr>::GetPosX(gspawn->x); 
    315                                         uint32 celly=CellHandler<MapMgr>::GetPosY(gspawn->y); 
    316                                         if(spawns[cellx]==NULL) 
     312                                        gspawn->overrides = fields[17].GetUInt32(); 
     313 
     314                                        if( gspawn->overrides & GAMEOBJECT_MAPWIDE ) 
    317315                                        { 
    318                                                 spawns[cellx]=new CellSpawns*[_sizeY]; 
    319                                                 memset(spawns[cellx],0,sizeof(CellSpawns*)*_sizeY); 
     316                                                staticSpawns.GOSpawns.push_back(gspawn); //We already have a staticSpawns in the Map class, and it does just the right thing 
     317                                                ++GameObjectSpawnCount; 
    320318                                        } 
    321  
    322                                         if(!spawns[cellx][celly]) 
    323                                                 spawns[cellx][celly]=new CellSpawns; 
    324  
    325                                         spawns[cellx][celly]->GOSpawns.push_back(gspawn); 
    326                                         ++GameObjectSpawnCount; 
     319                                        else 
     320                                        { 
     321                                                //uint32 cellx=float2int32(((_maxX-gspawn->x)/_cellSize)); 
     322                                                //uint32 celly=float2int32(((_maxY-gspawn->y)/_cellSize)); 
     323                                                uint32 cellx=CellHandler<MapMgr>::GetPosX(gspawn->x); 
     324                                                uint32 celly=CellHandler<MapMgr>::GetPosY(gspawn->y); 
     325                                                if(spawns[cellx]==NULL) 
     326                                                { 
     327                                                        spawns[cellx]=new CellSpawns*[_sizeY]; 
     328                                                        memset(spawns[cellx],0,sizeof(CellSpawns*)*_sizeY); 
     329                                                } 
     330 
     331                                                if(!spawns[cellx][celly]) 
     332                                                        spawns[cellx][celly]=new CellSpawns; 
     333 
     334                                                spawns[cellx][celly]->GOSpawns.push_back(gspawn); 
     335                                                ++GameObjectSpawnCount; 
     336                                        } 
    327337                                }while(result->NextRow()); 
    328338                        } 
  • trunk/src/arcemu-world/Map.h

    r2828 r2860  
    9797        //uint32 stateNpcLink; 
    9898        uint32 phase; 
     99        uint32 overrides; 
    99100} GOSpawn; 
    100101 
  • trunk/src/arcemu-world/MapMgr.cpp

    r2835 r2860  
    434434                if(_mapWideStaticObjects.size()) 
    435435                { 
     436                        uint32 globalcount=0; 
    436437                        if(!buf) 
    437438                                buf = new ByteBuffer(300); 
     
    440441                        { 
    441442                                count = (*itr)->BuildCreateUpdateBlockForPlayer(buf, plObj); 
    442                                 plObj->PushCreationData(buf, count); 
    443                         } 
     443                                globalcount += count; 
     444                        } 
     445                        //VLack: It seems if we use the same buffer then it is a BAD idea to try and push created data one by one, add them at once! 
     446                        //       If you try to add them one by one, then as the buffer already contains data, they'll end up repeating some object. 
     447                        //       Like 6 object updates for Deeprun Tram, but the built package will contain these entries: 2AFD0, 2AFD0, 2AFD1, 2AFD0, 2AFD1, 2AFD2 
     448                        if( globalcount>0 ) plObj->PushCreationData(buf, globalcount); 
    444449                } 
    445450        } 
     
    764769                        else if( curObj->GetTypeFromGUID() == HIGHGUID_TYPE_TRANSPORTER ) 
    765770                                fRange = 0.0f; // unlimited distance for transporters (only up to 2 cells +/- anyway.) 
    766                         //If the object announcing it's position is a transport, then it should announce it to everyone and everything; thus deleting it from visible objects should be avoided. - By: VLack aka. VLsoft 
    767                         else if( obj->GetTypeId() == TYPEID_GAMEOBJECT && static_cast<GameObject*>(obj)->GetInfo()->Type == GAMEOBJECT_TYPE_TRANSPORT ) 
     771                        //If the object announcing its position is a transport, or other special object, then deleting it from visible objects should be avoided. - By: VLack 
     772                        else if( obj->GetTypeId() == TYPEID_GAMEOBJECT && (static_cast<GameObject*>(obj)->GetOverrides() & GAMEOBJECT_INFVIS) && obj->GetMapId() == curObj->GetMapId() ) 
     773                                fRange = 0.0f; 
     774                        //If the object we're checking for possible removal is a transport or other special object, and we are players on the same map, don't remove it... 
     775                        else if( plObj && curObj->GetTypeId() == TYPEID_GAMEOBJECT && (static_cast<GameObject*>(curObj)->GetOverrides() & GAMEOBJECT_INFVIS) && obj->GetMapId() == curObj->GetMapId() ) 
    768776                                fRange = 0.0f; 
    769777                        else if( curObj->IsPlayer() && static_cast< Player* >( curObj )->GetUInt64Value(PLAYER_FARSIGHT) == obj->GetGUID()) 
     
    893901        MapCell *cell; 
    894902 
    895         //If the object announcing it's position is a transport, then it should do so in a much wider area - like the distance between the two transport towers in Orgrimmar, or more. - By: VLack aka. VLsoft 
    896         if( obj->GetTypeId() == TYPEID_GAMEOBJECT && static_cast<GameObject*>(obj)->GetInfo()->Type == GAMEOBJECT_TYPE_TRANSPORT ) { 
     903        //If the object announcing it's position is a special one, then it should do so in a much wider area - like the distance between the two transport towers in Orgrimmar, or more. - By: VLack 
     904        if( obj->GetTypeId() == TYPEID_GAMEOBJECT && (static_cast<GameObject*>(obj)->GetOverrides() & GAMEOBJECT_ONMOVEWIDE) ) { 
    897905                endX = cellX + 5 <= _sizeX ? cellX + 6 : ( _sizeX - 1 ); 
    898906                endY = cellY + 5 <= _sizeY ? cellY + 6 : ( _sizeY - 1 ); 
     
    943951                else if( curObj->GetTypeFromGUID() == HIGHGUID_TYPE_TRANSPORTER ) 
    944952                        fRange = 0.0f; // unlimited distance for transporters (only up to 2 cells +/- anyway.) 
    945                 //If the object announcing it's position is a transport, then it should announce it to everyone and everything as far as possible. - By: VLack aka. VLsoft 
    946                 else if( obj->GetTypeId() == TYPEID_GAMEOBJECT && static_cast<GameObject*>(obj)->GetInfo()->Type == GAMEOBJECT_TYPE_TRANSPORT ) 
     953 
     954                //If the object announcing its position is a transport, or other special object, then deleting it from visible objects should be avoided. - By: VLack 
     955                else if( obj->GetTypeId() == TYPEID_GAMEOBJECT && (static_cast<GameObject*>(obj)->GetOverrides() & GAMEOBJECT_INFVIS) && obj->GetMapId() == curObj->GetMapId() ) 
     956                        fRange = 0.0f; 
     957                //If the object we're checking for possible removal is a transport or other special object, and we are players on the same map, don't remove it, and add it whenever possible... 
     958                else if( plObj && curObj->GetTypeId() == TYPEID_GAMEOBJECT && (static_cast<GameObject*>(curObj)->GetOverrides() & GAMEOBJECT_INFVIS) && obj->GetMapId() == curObj->GetMapId() ) 
    947959                        fRange = 0.0f; 
    948960                else 
     
    22412253} 
    22422254 
    2243 void MapMgr::LoadInstanceScript()  
    2244 {  
    2245         mInstanceScript = sScriptMgr.CreateScriptClassForInstance( _mapId, this );  
    2246 };        
    2247  void MapMgr::CallScriptUpdate()  
    2248 {  
    2249         ASSERT( mInstanceScript );  
    2250                 mInstanceScript->UpdateEvent();  
    2251  }; 
     2255void MapMgr::LoadInstanceScript() 
     2256{ 
     2257        mInstanceScript = sScriptMgr.CreateScriptClassForInstance( _mapId, this ); 
     2258}; 
     2259 
     2260void MapMgr::CallScriptUpdate() 
     2261{ 
     2262        ASSERT( mInstanceScript ); 
     2263        mInstanceScript->UpdateEvent(); 
     2264}; 
  • trunk/src/arcemu-world/Master.h

    r2777 r2860  
    2929 
    3030#ifndef _VERSION 
    31 # define _VERSION "3.1.3" 
     31# define _VERSION "3.2.0" 
    3232#endif 
    3333 
  • trunk/src/arcemu-world/MiscHandler.cpp

    r2808 r2860  
    19241924        } 
    19251925 
     1926//NOTE: VLack: since 3.2.0, the first field of this packet is a _packed_ GUID, so keep this in mind if you plan to read data (just use WoWGuid, it'll read it correctly). 
     1927 
    19261928   /* uint16 opcode = recv_data.GetOpcode(); 
    19271929        std::stringstream ss; 
     
    24622464} 
    24632465 
     2466void WorldSession::HandleRaidDifficultyOpcode(WorldPacket& recv_data) 
     2467{ 
     2468        uint32 data; 
     2469        recv_data >> data; 
     2470 
     2471        Group * m_Group = _player->GetGroup(); 
     2472 
     2473        if(m_Group && _player->IsGroupLeader()) 
     2474        { 
     2475                m_Group->m_raiddifficulty = data; 
     2476                _player->iInstanceType = data; 
     2477                sInstanceMgr.ResetSavedInstances(_player); 
     2478 
     2479                m_Group->Lock(); 
     2480                for(uint32 i = 0; i < m_Group->GetSubGroupCount(); ++i) 
     2481                { 
     2482                        for(GroupMembersSet::iterator itr = m_Group->GetSubGroup(i)->GetGroupMembersBegin(); itr != m_Group->GetSubGroup(i)->GetGroupMembersEnd(); ++itr) 
     2483                        { 
     2484                                if((*itr)->m_loggedInPlayer) 
     2485                                { 
     2486                                        (*itr)->m_loggedInPlayer->iInstanceType = data; 
     2487                                        (*itr)->m_loggedInPlayer->SendRaidDifficulty(); 
     2488                                } 
     2489                        } 
     2490                } 
     2491                m_Group->Unlock(); 
     2492        } 
     2493        else if(!_player->GetGroup()) 
     2494        { 
     2495                _player->iInstanceType = data; 
     2496                sInstanceMgr.ResetSavedInstances(_player); 
     2497        } 
     2498 
     2499#ifdef OPTIMIZED_PLAYER_SAVING 
     2500        _player->save_InstanceType(); 
     2501#endif 
     2502} 
     2503 
    24642504void WorldSession::HandleSummonResponseOpcode(WorldPacket & recv_data) 
    24652505{ 
     
    25232563        _player->SetUInt32Value(PLAYER_FIELD_GLYPHS_1 + glyphNum, 0); 
    25242564        _player->RemoveAllAuras(glyph->SpellID, 0); 
     2565        _player->m_specs[0].glyphs[glyphNum] = 0; //VLack: TempFIX till dual spec... 
     2566        _player->smsg_TalentsInfo(false, 0, 0); 
    25252567} 
    25262568 
     
    25422584        return; 
    25432585} 
     2586 
     2587void WorldSession::HandleWorldStateUITimerUpdate(WorldPacket& recv_data) 
     2588{ 
     2589        WorldPacket data(SMSG_WORLD_STATE_UI_TIMER_UPDATE, 4); 
     2590        data << (uint32)UNIXTIME;; 
     2591        SendPacket(&data); 
     2592} 
  • trunk/src/arcemu-world/MovementHandler.cpp

    r2773 r2860  
    9999void WorldSession::HandleMoveTeleportAckOpcode( WorldPacket & recv_data ) 
    100100{ 
    101         uint64 guid; 
     101        WoWGuid guid; 
    102102        recv_data >> guid; 
    103103        if(guid == _player->GetGUID()) 
     
    272272        /* Read Movement Data Packet                                            */ 
    273273        /************************************************************************/ 
     274        WoWGuid guid; 
     275        recv_data >> guid; 
    274276        movement_info.init(recv_data); 
     277        m_MoverWoWGuid = guid; 
    275278 
    276279        /************************************************************************/ 
     
    427430        { 
    428431                move_time = (movement_info.time - (mstime - m_clientTimeDelay)) + MOVEMENT_PACKET_TIME_DELAY + mstime; 
    429                 memcpy(&movement_packet[pos], recv_data.contents(), recv_data.size()); 
     432//              memcpy(&movement_packet[pos], recv_data.contents(), recv_data.size()); 
     433                memcpy(&movement_packet[0], recv_data.contents(), recv_data.size()); 
    430434                movement_packet[pos+6]=0; 
    431435 
     
    673677void WorldSession::HandleMoveNotActiveMoverOpcode( WorldPacket & recv_data ) 
    674678{ 
    675  
     679        WoWGuid guid; 
     680        recv_data >> guid; 
     681 
     682        if(guid == m_MoverWoWGuid) 
     683                return; 
     684 
     685        movement_info.init(recv_data); 
     686 
     687        if(guid != uint64(0)) 
     688                m_MoverWoWGuid = guid; 
     689        else 
     690                m_MoverWoWGuid.Init(_player->GetGUID()); 
     691 
     692        // set up to the movement packet 
     693        movement_packet[0] = m_MoverWoWGuid.GetNewGuidMask(); 
     694        memcpy(&movement_packet[1], m_MoverWoWGuid.GetNewGuid(), m_MoverWoWGuid.GetNewGuidLen()); 
    676695} 
    677696 
  • trunk/src/arcemu-world/Object.cpp

    r2839 r2860  
    240240        case TYPEID_GAMEOBJECT: 
    241241                flags = 0x0350; 
     242                if( m_uint32Values[GAMEOBJECT_DISPLAYID]==3831 ) flags=0x0252; //Deeprun Tram proper flags as of 3.2.0. 
    242243                break; 
    243244 
    244245        case TYPEID_DYNAMICOBJECT: 
    245                 flags = 0x0050; 
     246                flags = 0x0150; 
    246247                break; 
    247248 
     
    276277                                { 
    277278                                        /* deeprun tram, etc */ 
    278                                         flags = 0x352; 
     279                                        flags = 0x252; 
    279280                                }break; 
    280281 
     
    287288                } 
    288289                //The above 3 checks FAIL to identify transports, thus their flags remain 0x58, and this is BAAAAAAD! Later they don't get position x,y,z,o updates, so they appear randomly by a client-calculated path, they always face north, etc... By: VLack 
    289                 if( flags != 0x0352 && GetTypeId() == TYPEID_GAMEOBJECT && static_cast<GameObject*>(this)->GetInfo()->Type == GAMEOBJECT_TYPE_TRANSPORT ) 
     290                if( flags != 0x0352 && GetTypeId() == TYPEID_GAMEOBJECT && static_cast<GameObject*>(this)->GetInfo()->Type == GAMEOBJECT_TYPE_TRANSPORT && !(static_cast<GameObject*>(this)->GetOverrides() & GAMEOBJECT_OVERRIDE_PARENTROT) ) 
    290291                        flags = 0x0352; 
    291292        } 
     
    307308        _SetCreateBits( &updateMask, target ); 
    308309 
     310        if(GetTypeId() == TYPEID_GAMEOBJECT && (static_cast<GameObject*>(this)->GetOverrides() & GAMEOBJECT_OVERRIDE_PARENTROT) ) 
     311        { 
     312                updateMask.SetBit(GAMEOBJECT_PARENTROTATION_02); 
     313                updateMask.SetBit(GAMEOBJECT_PARENTROTATION_03); 
     314        } 
     315 
    309316        // this will cache automatically if needed 
    310317        _BuildValuesUpdate( data, &updateMask, target ); 
     
    439446        /* ByteBuffer *splinebuf = (m_objectTypeId == TYPEID_UNIT) ? target->GetAndRemoveSplinePacket(GetGUID()) : 0; */ 
    440447        uint16 flag16 = 0;      // some other flag 
     448        /* VLack: idea from Mangos, for future vehicle implementation 
     449        if(GetTypeId() == TYPEID_UNIT) 
     450                if(((Creature*)this)->isVehicle()) 
     451                        flag16 |= 0x20;*/ 
     452 
    441453        *data << (uint16)flags; 
    442454 
     
    458470                uThis = static_cast<Creature*>(this); 
    459471 
    460         if( flags & UPDATEFLAG_UNK1 ) //0x0100 
    461                 *data << uint8( 0 ); //some say it is like parent guid ? 
    462  
    463472        if (flags & UPDATEFLAG_LIVING) //0x20 
    464473        { 
     
    483492                        //               Don't know what this is, but I've only seen it applied to spirit healers. 
    484493                        //               maybe some sort of invisibility flag? :/ 
    485  
    486494                        switch(GetEntry()) 
    487495                        { 
     
    495503 
    496504                        if(uThis->GetAIInterface()->IsFlying()) 
    497 //                              flags2 |= 0x800; //in 2.3 this is some state that i was not able to decode yet 
     505                                //flags2 |= 0x800; //in 2.3 this is some state that i was not able to decode yet 
    498506                                flags2 |= MOVEFLAG_NO_COLLISION; //0x400 Zack : Teribus the Cursed had flag 400 instead of 800 and he is flying all the time  
    499507                        if(uThis->GetProto() && uThis->GetProto()->extra_a9_flags) 
    500508                        { 
    501509//do not send shit we can't honor 
    502 #define UNKNOWN_FLAGS2 ( 0x0200 | 0x00002000 | 0x00001000 | 0x00200000 | 0x04000000 | 0x08000000 ) 
     510#define UNKNOWN_FLAGS2 ( 0x00002000 | 0x04000000 | 0x08000000 ) 
    503511                                uint32 inherit = uThis->GetProto()->extra_a9_flags & UNKNOWN_FLAGS2; 
    504512                                flags2 |= inherit; 
    505513                        } 
    506 /*                      if(GetGUIDHigh() == HIGHGUID_WAYPOINT) 
     514                        /*if(GetGUIDHigh() == HIGHGUID_WAYPOINT) 
    507515                        { 
    508516                                if(GetUInt32Value(UNIT_FIELD_STAT0) == 768)             // flying waypoint 
     
    522530                //   0x10 -> disables movement compensation and causes players to jump around all the place 
    523531                //   0x40 -> disables movement compensation and causes players to jump around all the place 
    524         } 
    525  
    526         if( ( flags & 0x0300 ) ) //0x0300=UPDATEFLAG_UNK1 | UPDATEFLAG_UNK2 
    527         { 
    528                 if( flags & UPDATEFLAG_UNK1 ) //0x0100 
    529                 { 
    530                         *data << (float)m_position.x; 
    531                         *data << (float)m_position.y; 
    532                         *data << (float)m_position.z; 
    533                 } 
    534                 *data << (float)m_position.x; 
    535                 *data << (float)m_position.y; 
    536                 *data << (float)m_position.z; 
    537 //              if( flags & UPDATEFLAG_UNK2 ) //0x0200 
    538 //              { 
    539                         *data << (float)m_position.o; 
    540 //                      *data << (float)0; //well no idea atm 
    541                         if (m_objectTypeId == TYPEID_CORPSE) 
    542                                 *data << (float)m_position.o; //VLack: repeat the orientation! 
    543                         else 
    544                                 *data << (float)0; 
    545 //              } 
    546         } 
    547         else if (flags & UPDATEFLAG_HAS_POSITION) //0x40 
    548         { 
     532 
     533                //Send position data, every living thing has these 
    549534                *data << (float)m_position.x; 
    550535                *data << (float)m_position.y; 
     
    559544                                *data << wowguid; 
    560545                                *data << pThis->m_TransporterX << pThis->m_TransporterY << pThis->m_TransporterZ << pThis->m_TransporterO; 
    561 //                              *data << pThis->m_TransporterTime; 
     546                                //*data << pThis->m_TransporterTime; 
    562547                                *data << pThis->m_TransporterUnk; 
    563548                                *data << (uint8)0; 
     
    574559                        } 
    575560                } 
    576         } 
    577  
    578         if (flags & UPDATEFLAG_LIVING) //0x20 
    579         { 
    580                 if( flags2 & MOVEFLAG_SWIMMING ) //0x0200000 flying/swimming, && unk sth to do with vehicles? 
     561 
     562                if( (flags2 & (MOVEFLAG_SWIMMING | MOVEFLAG_AIR_SWIMMING)) || (flag16 & 0x20) ) // 0x2000000+0x0200000 flying/swimming, && unk sth to do with vehicles? 
    581563                { 
    582564                        if(pThis && moveinfo) 
     
    591573                        *data << (uint32)0; //last fall time 
    592574 
    593                 if( flags2 & MOVEFLAG_FALLING || flags2 & MOVEFLAG_JUMPING ) // 0x00002000 || 0x00001000 
    594                 { 
    595 /*                      if(pThis && moveinfo) 
     575                if( flags2 & MOVEFLAG_JUMPING ) // 0x00001000 
     576                { 
     577                        /*if(pThis && moveinfo) 
    596578                        { 
    597579                                *data << moveinfo->FallTime; 
     
    601583                        } 
    602584                        else 
    603                         { 
    604 */ 
     585                        {*/ 
    605586                                *data << (float)0; 
    606587                                *data << (float)1.0; 
    607588                                *data << (float)0; 
    608589                                *data << (float)0; 
    609 //                      } 
    610                 } 
    611                 if( flags2 & MOVEFLAG_AIR_SWIMMING ) //0x02000000 
    612                         *data << (uint32)0; //? 
    613                 if( flags2 & MOVEFLAG_SWIMMING ) //0x00200000 
    614                         *data << (uint32)0; //? 
    615                 if( flags2 & MOVEFLAG_SPLINE_MOVER ) //0x04000000 
    616                         *data << (uint32)0; //? 
     590                        //} 
     591                } 
     592 
     593                if( flags2 & MOVEFLAG_SPLINE_MOVER ) // 0x4000000 
     594                { 
     595                        int err1, err2; err2=0; err1=10/err2; //FAIL please with divide by zero :) 
     596                } 
    617597 
    618598                if( m_walkSpeed == 0 ) 
    619599                        *data << 8.0f; 
    620600                else 
    621                         *data << m_walkSpeed;    // walk speed 
     601                        *data << m_walkSpeed;   // walk speed 
    622602                if( m_runSpeed == 0 ) 
    623603                        *data << 8.0f; 
    624604                else 
    625                         *data << m_runSpeed;      // run speed 
    626                 *data << m_backWalkSpeed; // backwards walk speed 
    627                 *data << m_swimSpeed;    // swim speed 
    628                 *data << m_backSwimSpeed; // backwards swim speed 
     605                        *data << m_runSpeed;    // run speed 
     606                *data << m_backWalkSpeed;       // backwards walk speed 
     607                *data << m_swimSpeed;           // swim speed 
     608                *data << m_backSwimSpeed;       // backwards swim speed 
    629609                if( m_flySpeed == 0 ) 
    630610                        *data << 8.0f; 
    631611                else 
    632                         *data << m_flySpeed;            // fly speed 
     612                        *data << m_flySpeed;    // fly speed 
    633613                *data << m_backFlySpeed;        // back fly speed 
    634                 *data << m_turnRate;      // turn rate 
    635                 *data << float(7); 
    636                 /*if( flags2 & MOVEFLAG_IMMOBILIZED ) //0x08000000 
    637                         if(splinebuf) 
    638                         { 
    639                                 data->append(*splinebuf); 
    640                                 delete splinebuf; 
    641                         }*/ 
    642         } 
     614                *data << m_turnRate;            // turn rate 
     615                *data << float(7);              // pitch rate, now a constant... 
     616 
     617                if( flags2 & 0x08000000 ) //VLack: On Mangos this is a nice spline movement code, but we never had such... Also, at this point we haven't got this flag, that's for sure, but fail just in case... 
     618                { 
     619                        int err1, err2; err2=0; err1=10/err2; //FAIL please with divide by zero :) 
     620                } 
     621        } 
     622        else //----------------------------------- No UPDATEFLAG_LIVING ----------------------------------- 
     623        { 
     624                if( flags & UPDATEFLAG_POSITION ) //0x0100 
     625                { 
     626                        *data << uint8( 0 ); //some say it is like parent guid ? 
     627                        *data << (float)m_position.x; 
     628                        *data << (float)m_position.y; 
     629                        *data << (float)m_position.z; 
     630                        *data << (float)m_position.x; 
     631                        *data << (float)m_position.y; 
     632                        *data << (float)m_position.z; 
     633                        *data << (float)m_position.o; 
     634 
     635                        if (m_objectTypeId == TYPEID_CORPSE) 
     636                                *data << (float)m_position.o; //VLack: repeat the orientation! 
     637                        else 
     638                                *data << (float)0; 
     639                } 
     640                else if (flags & UPDATEFLAG_HAS_POSITION) //0x40 
     641                { 
     642                        if(flags & UPDATEFLAG_TRANSPORT && m_uint32Values[GAMEOBJECT_BYTES_1]==GAMEOBJECT_TYPE_MO_TRANSPORT) 
     643                        { 
     644                                *data << (float)0; 
     645                                *data << (float)0; 
     646                                *data << (float)0; 
     647                        } 
     648                        else 
     649                        { 
     650                                *data << (float)m_position.x; 
     651                                *data << (float)m_position.y; 
     652                                *data << (float)m_position.z; 
     653                        } 
     654                        *data << (float)m_position.o; 
     655                } 
     656        } 
     657 
    643658 
    644659        if( flags & UPDATEFLAG_LOWGUID ) //0x08 
     
    649664 
    650665        if( flags & UPDATEFLAG_HAS_TARGET ) //0x04 
    651                 *data << (uint8)0;      //some compressed GUID 
    652  
    653         if( flags & UPDATEFLAG_VEHICLE ) //0x80 
    654         { 
    655                 *data << (uint32)0; //? 
    656                 *data << (uint32)0; //? 
    657         } 
    658  
    659         if(flags & UPDATEFLAG_TRANSPORT) //0x2 
     666                FastGUIDPack(*data, GetUInt64Value(UNIT_FIELD_TARGET)); //some compressed GUID 
     667 
     668 
     669        if( flags & UPDATEFLAG_TRANSPORT ) //0x2 
    660670        { 
    661671                if(target) 
     
    668678                        *data << getMSTime(); 
    669679        } 
    670         if( flags & UPDATEFLAG_UNK2 ) //0x0200 
     680        if( flags & UPDATEFLAG_VEHICLE ) //0x80 
     681        { 
     682                *data << (uint32)0; //Vehicle ID 
     683                *data << (uint32)0; //Facing 
     684        } 
     685 
     686        if( flags & UPDATEFLAG_ROTATION ) //0x0200 
    671687        { 
    672688                if( IsGameObject() ) 
  • trunk/src/arcemu-world/ObjectMgr.cpp

    r2848 r2860  
    31333133        if(result) 
    31343134        { 
    3135                 if(result->GetFieldCount() != 51) 
     3135                if(result->GetFieldCount() != 52) 
    31363136                { 
    31373137                        Log.LargeErrorMessage(LARGERRORMESSAGE_WARNING, "groups table format is invalid. Please update your database."); 
  • trunk/src/arcemu-world/ObjectStorage.cpp

    r2840 r2860  
    2323/** Table formats converted to strings 
    2424 */ 
    25 const char * gItemPrototypeFormat                                               = "uuuusuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuffuffuuuuuuuuuufuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusuuuuuuuuuuuuuuuuuuuuuuuuuuuuu"; 
     25const char * gItemPrototypeFormat                                               = "uuuusuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuffuffuuuuuuuuuufuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuusuuuuuuuuuuuuuuuuuuuuuuuuuuuuu"; 
    2626const char * gItemNameFormat                                                    = "usu"; 
    27 const char * gCreatureNameFormat                                                = "usssuuuuuuuuuuffcc"; 
    28 const char * gGameObjectNameFormat                                              = "uuusssssssfuuuuuuuuuuuuuuuuuuuuuuuuuuuu"; 
     27const char * gCreatureNameFormat                                                = "usssuuuuuuuuuuuuuuuuffcc"; 
     28const char * gGameObjectNameFormat                                              = "uuusssssssfuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu"; 
    2929const char * gCreatureProtoFormat                                               = "uuuuuuufuuuffuuffuuuuuuuuffsuuuufffuuuuuuuuu"; 
    3030const char * gVendorRestrictionEntryFormat                              = "uuuuuu"; 
  • trunk/src/arcemu-world/Opcodes.cpp

    r2773 r2860  
    2121#include "StdAfx.h" 
    2222 
    23 // Updated for 3.0.2.9038 
     23// Updated for 3.2.0 
    2424NameTableEntry g_worldOpcodeNames[] = { 
    2525 {MSG_NULL_ACTION,     "MSG_NULL_ACTION"}, 
     
    12151215 {SMSG_EQUIPMENT_SET_LIST,    "SMSG_EQUIPMENT_SET_LIST"}, 
    12161216 {SMSG_TALENTS_INFO,    "SMSG_TALENTS_INFO"}, 
     1217 {MSG_SET_RAID_DIFFICULTY,    "MSG_SET_RAID_DIFFICULTY"}, 
     1218 {CMSG_WORLD_STATE_UI_TIMER_UPDATE,    "CMSG_WORLD_STATE_UI_TIMER_UPDATE"}, 
     1219 {SMSG_WORLD_STATE_UI_TIMER_UPDATE,    "SMSG_WORLD_STATE_UI_TIMER_UPDATE"}, 
    12171220        {0,                     0} 
    12181221}; 
    1219  
    1220  
    1221  
  • trunk/src/arcemu-world/Opcodes.h

    r2845 r2860  
    12231223    SMSG_EQUIPMENT_SET_LIST                         = 0x4BC, // SMSG, equipment manager list? 
    12241224    SMSG_TALENTS_INFO                               = 0x4C0, // SMSG, talents related 
    1225     NUM_MSG_TYPES                                   = 0x4CB, // max msg number 
     1225    MSG_SET_RAID_DIFFICULTY                         = 0x4EB, 
     1226    CMSG_WORLD_STATE_UI_TIMER_UPDATE                = 0x4F6, 
     1227    SMSG_WORLD_STATE_UI_TIMER_UPDATE                = 0x4F7, 
     1228    NUM_MSG_TYPES                                   = 0x4F8, // max msg number 
    12261229}; 
    12271230 
  • trunk/src/arcemu-world/Player.cpp

    r2850 r2860  
    16021602        *p_data << GetUInt32Value(PLAYER_GUILDID);// guild 
    16031603 
    1604         if(rename_pending)  *p_data << uint32(0x00A04342);  // wtf blizz? :P 
     1604        if(rename_pending)  *p_data << uint32(0x00A04342); // wtf blizz? :P 
    16051605        else if(m_banned)   *p_data << (uint32)7;       // Banned (cannot login) 
    1606         else if(IsDead())   *p_data << (uint32)8704; // Dead (displaying as Ghost) 
    1607         else                            *p_data << (uint32)1;   // Alive 
    1608  
     1606        else if(IsDead())   *p_data << (uint32)8704;    // Dead (displaying as Ghost) 
     1607        else                *p_data << (uint32)1;       // Alive 
     1608 
     1609        *p_data << (uint32)0; //VLack: send 1 for faction change at logon 
    16091610        *p_data << (uint8)m_restState;    // rest state 
     1611        *p_data << (uint8)0; //3.2.0 
    16101612 
    16111613        // pet stuff 
     
    27182720        ss << "'"; 
    27192721 
    2720         for(uint32 i = 0; i < 8; ++i) 
     2722        for(uint32 i = 0; i < GLYPHS_COUNT; ++i) 
    27212723                ss << m_uint32Values[PLAYER_FIELD_GLYPHS_1 + i] << ","; 
    27222724 
     
    32553257                if(m_arenaTeams[z] != NULL) 
    32563258                { 
    3257                         SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*6), m_arenaTeams[z]->m_id); 
     3259                        SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*7), m_arenaTeams[z]->m_id); 
    32583260                        if(m_arenaTeams[z]->m_leader == GetLowGUID()) 
    3259                                 SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*6) + 1, 0); 
     3261                                SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*7) + 1, 0); 
    32603262                        else 
    3261                                 SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*6) + 1, 1); 
     3263                                SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (z*7) + 1, 1); 
    32623264                } 
    32633265        } 
     
    34913493 
    34923494        // Load Glyphs and apply their auras 
    3493 //      LoadFieldsFromString(get_next_field.GetString(), PLAYER_FIELD_GLYPHS_1, 8); 
    3494         LoadFieldsFromString(get_next_field.GetString(), PLAYER_FIELD_GLYPHS_1, 6); 
     3495        LoadFieldsFromString(get_next_field.GetString(), PLAYER_FIELD_GLYPHS_1, GLYPHS_COUNT); 
    34953496        GlyphPropertyEntry *glyph; 
    3496 //      for(uint32 i=0; i < 8; i++) 
    3497         for(uint32 i=0; i < 6; i++) 
     3497        for(uint32 i=0; i < GLYPHS_COUNT; i++) 
    34983498        { 
    34993499                uint32 glyphId = GetUInt32Value(PLAYER_FIELD_GLYPHS_1 + i); 
     
    35103510                la.positive = 0; //VLack: check this, as this was uninitialized, 0 is a safe bet, but glyphs should be positive, aren't they? 
    35113511                loginauras.push_back(la); 
     3512                m_specs[0].glyphs[i] = glyphId; //VLack: TempFIX till we properly implement dual specs, make them appear in the first set! 
    35123513        } 
    35133514 
     
    46744675    WorldPacket data(MSG_SET_DUNGEON_DIFFICULTY, 12); 
    46754676        data << (uint32)iInstanceType; 
     4677    data << (uint32)0x1; 
     4678    data << (uint32)InGroup(); 
     4679    GetSession()->SendPacket(&data); 
     4680} 
     4681 
     4682void Player::SendRaidDifficulty() 
     4683{ 
     4684    WorldPacket data(MSG_SET_RAID_DIFFICULTY, 12); 
     4685    data << (uint32)iInstanceType; 
    46764686    data << (uint32)0x1; 
    46774687    data << (uint32)InGroup(); 
  • trunk/src/arcemu-world/Player.h

    r2850 r2860  
    992992        void SendMeetingStoneQueue(uint32 DungeonId, uint8 Status); 
    993993        void SendDungeonDifficulty(); 
     994        void SendRaidDifficulty(); 
    994995 
    995996        void AddToWorld(); 
  • trunk/src/arcemu-world/QueryHandler.cpp

    r2801 r2860  
    136136                data << ci->unkfloat2; 
    137137                data << ci->Leader; 
    138                 data << uint32(0); // VLack: 4 quest items and one movement information 
    139                 data << uint32(0); 
    140                 data << uint32(0); 
    141                 data << uint32(0); 
     138                for(uint32 i = 0; i < 6; ++i) 
     139                { 
     140                        data << uint32(ci->QuestItems[i]); 
     141                } 
    142142                data << uint32(0); 
    143143        } 
     
    216216 
    217217        data << float(goinfo->Size); 
    218         for(uint32 i = 0; i < 4; ++i) 
     218        for(uint32 i = 0; i < 6; ++i) 
    219219        { 
    220220                data << uint32(goinfo->QuestItems[i]); 
  • trunk/src/arcemu-world/QuestMgr.cpp

    r2808 r2860  
    410410                *data << qst->reward_choiceitem[i]; 
    411411                *data << qst->reward_choiceitemcount[i]; 
    412                 ip = ItemPrototypeStorage.LookupEntry(qst->reward_item[i]); 
     412                ip = ItemPrototypeStorage.LookupEntry(qst->reward_choiceitem[i]); 
    413413                *data << ( ip ? ip->DisplayInfoID : uint32(0) ); 
    414414 
  • trunk/src/arcemu-world/Spell.cpp

    r2831 r2860  
    120120void SpellCastTargets::write( WorldPacket& data ) 
    121121{ 
    122         if( m_targetMask & TARGET_FLAG_DEST_LOCATION ){ //VLack: nice Aspire code, might be useful for us too 
    123                 m_targetMask = TARGET_FLAG_SELF;        // hackfix for client crash. TODO fix 
    124         } 
    125  
    126122        data << m_targetMask; 
    127123        data << m_targetMaskExtended; 
  • trunk/src/arcemu-world/SpellAuras.cpp

    r2838 r2860  
    316316                &Aura::SpellAuraNULL,//292 call stabled pet 
    317317                &Aura::SpellAuraNULL,//293 2 test spells 
    318                 &Aura::SpellAuraNULL //294 2 spells, possible prevent mana regen 
     318                &Aura::SpellAuraNULL,//294 2 spells, possible prevent mana regen 
     319                &Aura::SpellAuraNULL,//295 
     320                &Aura::SpellAuraNULL,//296 
     321                &Aura::SpellAuraNULL,//297 
     322                &Aura::SpellAuraNULL,//298 
     323                &Aura::SpellAuraNULL,//299 
     324                &Aura::SpellAuraNULL,//300 
     325                &Aura::SpellAuraNULL,//301 
     326                &Aura::SpellAuraNULL,//302 
     327                &Aura::SpellAuraNULL,//303 
     328                &Aura::SpellAuraNULL,//304 
     329                &Aura::SpellAuraNULL,//305 
     330                &Aura::SpellAuraNULL,//306 
    319331}; 
    320332 
  • trunk/src/arcemu-world/SpellAuras.h

    r2828 r2860  
    319319        SPELL_AURA_293 = 293, 
    320320        SPELL_AURA_294 = 294, 
    321     TOTAL_SPELL_AURAS = 295, 
    322 }; 
     321        SPELL_AURA_295 = 295, 
     322        SPELL_AURA_296 = 296, 
     323        SPELL_AURA_297 = 297, 
     324        SPELL_AURA_298 = 298, 
     325        SPELL_AURA_299 = 299, 
     326        SPELL_AURA_300 = 300, 
     327        SPELL_AURA_301 = 301, 
     328        SPELL_AURA_302 = 302, 
     329        SPELL_AURA_303 = 303, 
     330        SPELL_AURA_304 = 304, 
     331        SPELL_AURA_305 = 305, 
     332        SPELL_AURA_306 = 306, 
     333    TOTAL_SPELL_AURAS = 307, 
     334}; 
     335 
    323336enum AuraTickFlags 
    324337{ 
  • trunk/src/arcemu-world/SpellEffects.cpp

    r2850 r2860  
    50865086                                p_caster->RemoveAura( gp_old->SpellID ); 
    50875087                        p_caster->SetUInt32Value( PLAYER_FIELD_GLYPHS_1 + m_glyphslot, 0 ); 
     5088                        p_caster->m_specs[0].glyphs[m_glyphslot] = 0; //VLack: TempFIX till dual spec... 
     5089                        p_caster->smsg_TalentsInfo(false, 0, 0); 
    50885090                } 
    50895091        } 
     
    50995101                p_caster->SetUInt32Value( PLAYER_FIELD_GLYPHS_1 + m_glyphslot, g_new ); 
    51005102                p_caster->CastSpell( p_caster, gp_new->SpellID, true ); 
     5103                p_caster->m_specs[0].glyphs[m_glyphslot] = g_new; //VLack: TempFIX till dual spec... 
     5104                p_caster->smsg_TalentsInfo(false, 0, 0); 
    51015105        } 
    51025106 
  • trunk/src/arcemu-world/TaxiHandler.cpp

    r2853 r2860  
    108108        } 
    109109 
    110         WorldPacket data(48); 
     110        WorldPacket data(64); 
    111111        data.Initialize( SMSG_SHOWTAXINODES ); 
    112112        data << uint32( 1 ) << guid; 
     
    251251 
    252252        uint64 guid; 
    253         uint32 moocost; 
    254253        uint32 nodecount; 
    255254        vector<uint32> pathes; 
     
    260259        WorldPacket data(SMSG_ACTIVATETAXIREPLY, 4); 
    261260 
    262         recvPacket >> guid >> moocost >> nodecount; 
     261        recvPacket >> guid >> nodecount; 
    263262        if(nodecount < 2) 
    264263                return; 
  • trunk/src/arcemu-world/TaxiMgr.cpp

    r2773 r2860  
    457457                {*/ 
    458458                        field = (uint8)((itr->second->to - 1) / 32); 
     459                        if ( field>=12 ) continue; //The DBC can contain negative TO values??? That'll be 255 here (because we store everything unsigned), skip them! 
    459460                        Mask[field] |= 1 << ( (itr->second->to - 1 ) % 32 ); 
    460461                //} 
  • trunk/src/arcemu-world/TransporterHandler.cpp

    r2773 r2860  
    4141                sLog.outString("Transporter id[%i] name[%s] - can't set GAMEOBJECT_TYPE - it will behave badly!",EntryID,Name); 
    4242 
     43        m_overrides = GAMEOBJECT_INFVIS | GAMEOBJECT_ONMOVEWIDE; //Make it forever visible on the same map 
     44 
    4345        // Set period 
    4446        m_period = Time; 
  • trunk/src/arcemu-world/UpdateFields.h

    r2773 r2860  
    1919 */ 
    2020 
    21 /** 3.1.1 UpdateFields as of whenever i extracted them. 
     21/** 3.2.0 UpdateFields as of whenever i extracted them. 
    2222 */ 
    2323 
     
    7171#define ITEM_FIELD_DURABILITY                     OBJECT_END + 0x0037 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER 
    7272#define ITEM_FIELD_MAXDURABILITY                  OBJECT_END + 0x0038 // Size: 1, Type: INT, Flags: OWNER, ITEM_OWNER 
    73 #define ITEM_FIELD_PAD                            OBJECT_END + 0x0039 // Size: 1, Type: INT, Flags: NONE 
     73#define ITEM_FIELD_CREATE_PLAYED_TIME             OBJECT_END + 0x0039 // Size: 1, Type: INT, Flags: PUBLIC 
    7474#define ITEM_END                                  OBJECT_END + 0x003A 
    7575 
     
    319319#define PLAYER_VISIBLE_ITEM_19_ENCHANTMENT        UNIT_END + 0x0093 // Size: 1, Type: TWO_SHORT, Flags: PUBLIC 
    320320#define PLAYER_CHOSEN_TITLE                       UNIT_END + 0x0094 // Size: 1, Type: INT, Flags: PUBLIC 
    321 #define PLAYER_FIELD_PAD_0                        UNIT_END + 0x0095 // Size: 1, Type: INT, Flags: NONE 
     321#define PLAYER_FAKE_INEBRIATION                   UNIT_END + 0x0095 // Size: 1, Type: INT, Flags: PUBLIC 
    322322#define PLAYER_FIELD_INV_SLOT_HEAD                UNIT_END + 0x0096 // Size: 46, Type: LONG, Flags: PRIVATE 
    323323#define PLAYER_FIELD_PACK_SLOT_1                  UNIT_END + 0x00C4 // Size: 32, Type: LONG, Flags: PRIVATE 
     
    357357#define PLAYER_FIELD_MOD_DAMAGE_DONE_PCT          UNIT_END + 0x03F3 // Size: 7, Type: INT, Flags: PRIVATE 
    358358#define PLAYER_FIELD_MOD_HEALING_DONE_POS         UNIT_END + 0x03FA // Size: 1, Type: INT, Flags: PRIVATE 
    359 #define PLAYER_FIELD_MOD_TARGET_RESISTANCE        UNIT_END + 0x03FB // Size: 1, Type: INT, Flags: PRIVATE 
    360 #define PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE UNIT_END + 0x03FC // Size: 1, Type: INT, Flags: PRIVATE 
    361 #define PLAYER_FIELD_BYTES                        UNIT_END + 0x03FD // Size: 1, Type: BYTES, Flags: PRIVATE 
    362 #define PLAYER_AMMO_ID                            UNIT_END + 0x03FE // Size: 1, Type: INT, Flags: PRIVATE 
    363 #define PLAYER_SELF_RES_SPELL                     UNIT_END + 0x03FF // Size: 1, Type: INT, Flags: PRIVATE 
    364 #define PLAYER_FIELD_PVP_MEDALS                   UNIT_END + 0x0400 // Size: 1, Type: INT, Flags: PRIVATE 
    365 #define PLAYER_FIELD_BUYBACK_PRICE_1              UNIT_END + 0x0401 // Size: 12, Type: INT, Flags: PRIVATE 
    366 #define PLAYER_FIELD_BUYBACK_TIMESTAMP_1          UNIT_END + 0x040D // Size: 12, Type: INT, Flags: PRIVATE 
    367 #define PLAYER_FIELD_KILLS                        UNIT_END + 0x0419 // Size: 1, Type: TWO_SHORT, Flags: PRIVATE 
    368 #define PLAYER_FIELD_TODAY_CONTRIBUTION           UNIT_END + 0x041A // Size: 1, Type: INT, Flags: PRIVATE 
    369 #define PLAYER_FIELD_YESTERDAY_CONTRIBUTION       UNIT_END + 0x041B // Size: 1, Type: INT, Flags: PRIVATE 
    370 #define PLAYER_FIELD_LIFETIME_HONORBALE_KILLS     UNIT_END + 0x041C // Size: 1, Type: INT, Flags: PRIVATE 
    371 #define PLAYER_FIELD_BYTES2                       UNIT_END + 0x041D // Size: 1, Type: BYTES, Flags: PRIVATE 
    372 #define PLAYER_FIELD_WATCHED_FACTION_INDEX        UNIT_END + 0x041E // Size: 1, Type: INT, Flags: PRIVATE 
    373 #define PLAYER_FIELD_COMBAT_RATING_1              UNIT_END + 0x041F // Size: 25, Type: INT, Flags: PRIVATE 
    374 #define PLAYER_FIELD_ARENA_TEAM_INFO_1_1          UNIT_END + 0x0438 // Size: 18, Type: INT, Flags: PRIVATE 
    375 #define PLAYER_FIELD_HONOR_CURRENCY               UNIT_END + 0x044A // Size: 1, Type: INT, Flags: PRIVATE 
    376 #define PLAYER_FIELD_ARENA_CURRENCY               UNIT_END + 0x044B // Size: 1, Type: INT, Flags: PRIVATE 
    377 #define PLAYER_FIELD_MAX_LEVEL                    UNIT_END + 0x044C // Size: 1, Type: INT, Flags: PRIVATE 
    378 #define PLAYER_FIELD_DAILY_QUESTS_1               UNIT_END + 0x044D // Size: 25, Type: INT, Flags: PRIVATE 
    379 #define PLAYER_RUNE_REGEN_1                       UNIT_END + 0x0466 // Size: 4, Type: FLOAT, Flags: PRIVATE 
    380 #define PLAYER_NO_REAGENT_COST_1                  UNIT_END + 0x046A // Size: 3, Type: INT, Flags: PRIVATE 
    381 #define PLAYER_FIELD_GLYPH_SLOTS_1                UNIT_END + 0x046D // Size: 6, Type: INT, Flags: PRIVATE 
    382 #define PLAYER_FIELD_GLYPHS_1                     UNIT_END + 0x0473 // Size: 6, Type: INT, Flags: PRIVATE 
    383 #define PLAYER_GLYPHS_ENABLED                     UNIT_END + 0x0479 // Size: 1, Type: INT, Flags: PRIVATE 
    384 #define PLAYER_END                                UNIT_END + 0x047A 
     359#define PLAYER_FIELD_MOD_HEALING_PCT              UNIT_END + 0x03FB // Size: 1, Type: FLOAT, Flags: PRIVATE 
     360#define PLAYER_FIELD_MOD_HEALING_DONE_PCT         UNIT_END + 0x03FC // Size: 1, Type: FLOAT, Flags: PRIVATE 
     361#define PLAYER_FIELD_MOD_TARGET_RESISTANCE        UNIT_END + 0x03FD // Size: 1, Type: INT, Flags: PRIVATE 
     362#define PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE UNIT_END + 0x03FE // Size: 1, Type: INT, Flags: PRIVATE 
     363#define PLAYER_FIELD_BYTES                        UNIT_END + 0x03FF // Size: 1, Type: BYTES, Flags: PRIVATE 
     364#define PLAYER_AMMO_ID                            UNIT_END + 0x0400 // Size: 1, Type: INT, Flags: PRIVATE 
     365#define PLAYER_SELF_RES_SPELL                     UNIT_END + 0x0401 // Size: 1, Type: INT, Flags: PRIVATE 
     366#define PLAYER_FIELD_PVP_MEDALS                   UNIT_END + 0x0402 // Size: 1, Type: INT, Flags: PRIVATE 
     367#define PLAYER_FIELD_BUYBACK_PRICE_1              UNIT_END + 0x0403 // Size: 12, Type: INT, Flags: PRIVATE 
     368#define PLAYER_FIELD_BUYBACK_TIMESTAMP_1          UNIT_END + 0x040F // Size: 12, Type: INT, Flags: PRIVATE 
     369#define PLAYER_FIELD_KILLS                        UNIT_END + 0x041B // Size: 1, Type: TWO_SHORT, Flags: PRIVATE 
     370#define PLAYER_FIELD_TODAY_CONTRIBUTION           UNIT_END + 0x041C // Size: 1, Type: INT, Flags: PRIVATE 
     371#define PLAYER_FIELD_YESTERDAY_CONTRIBUTION       UNIT_END + 0x041D // Size: 1, Type: INT, Flags: PRIVATE 
     372#define PLAYER_FIELD_LIFETIME_HONORBALE_KILLS     UNIT_END + 0x041E // Size: 1, Type: INT, Flags: PRIVATE 
     373#define PLAYER_FIELD_BYTES2                       UNIT_END + 0x041F // Size: 1, Type: 6, Flags: PRIVATE 
     374#define PLAYER_FIELD_WATCHED_FACTION_INDEX        UNIT_END + 0x0420 // Size: 1, Type: INT, Flags: PRIVATE 
     375#define PLAYER_FIELD_COMBAT_RATING_1              UNIT_END + 0x0421 // Size: 25, Type: INT, Flags: PRIVATE 
     376#define PLAYER_FIELD_ARENA_TEAM_INFO_1_1          UNIT_END + 0x043A // Size: 21, Type: INT, Flags: PRIVATE 
     377#define PLAYER_FIELD_HONOR_CURRENCY               UNIT_END + 0x044F // Size: 1, Type: INT, Flags: PRIVATE 
     378#define PLAYER_FIELD_ARENA_CURRENCY               UNIT_END + 0x0450 // Size: 1, Type: INT, Flags: PRIVATE 
     379#define PLAYER_FIELD_MAX_LEVEL                    UNIT_END + 0x0451 // Size: 1, Type: INT, Flags: PRIVATE 
     380#define PLAYER_FIELD_DAILY_QUESTS_1               UNIT_END + 0x0452 // Size: 25, Type: INT, Flags: PRIVATE 
     381#define PLAYER_RUNE_REGEN_1                       UNIT_END + 0x046B // Size: 4, Type: FLOAT, Flags: PRIVATE 
     382#define PLAYER_NO_REAGENT_COST_1                  UNIT_END + 0x046F // Size: 3, Type: INT, Flags: PRIVATE 
     383#define PLAYER_FIELD_GLYPH_SLOTS_1                UNIT_END + 0x0472 // Size: 6, Type: INT, Flags: PRIVATE 
     384#define PLAYER_FIELD_GLYPHS_1                     UNIT_END + 0x0478 // Size: 6, Type: INT, Flags: PRIVATE 
     385#define PLAYER_GLYPHS_ENABLED                     UNIT_END + 0x047E // Size: 1, Type: INT, Flags: PRIVATE 
     386#define PLAYER_FIELD_PADDING                      UNIT_END + 0x047F // Size: 1, Type: INT, Flags: NONE 
     387#define PLAYER_END                                UNIT_END + 0x0480 
    385388 
    386389//GameObjectFields 
     
    400403#define DYNAMICOBJECT_SPELLID                     OBJECT_END + 0x0003 // Size: 1, Type: INT, Flags: PUBLIC 
    401404#define DYNAMICOBJECT_RADIUS                      OBJECT_END + 0x0004 // Size: 1, Type: FLOAT, Flags: PUBLIC 
    402 #define DYNAMICOBJECT_POS_X                       OBJECT_END + 0x0005 // Size: 1, Type: FLOAT, Flags: PUBLIC 
    403 #define DYNAMICOBJECT_POS_Y                       OBJECT_END + 0x0006 // Size: 1, Type: FLOAT, Flags: PUBLIC 
    404 #define DYNAMICOBJECT_POS_Z                       OBJECT_END + 0x0007 // Size: 1, Type: FLOAT, Flags: PUBLIC 
    405 #define DYNAMICOBJECT_FACING                      OBJECT_END + 0x0008 // Size: 1, Type: FLOAT, Flags: PUBLIC 
    406 #define DYNAMICOBJECT_CASTTIME                    OBJECT_END + 0x0009 // Size: 1, Type: INT, Flags: PUBLIC 
    407 #define DYNAMICOBJECT_END                         OBJECT_END + 0x000A 
     405#define DYNAMICOBJECT_CASTTIME                    OBJECT_END + 0x0005 // Size: 1, Type: INT, Flags: PUBLIC 
     406#define DYNAMICOBJECT_END                         OBJECT_END + 0x0006 
    408407 
    409408//CorpseFields 
  • trunk/src/arcemu-world/WorldSession.cpp

    r2845 r2860  
    896896        WorldPacketHandlers[MSG_RANDOM_ROLL].handler                                                            = &WorldSession::HandleRandomRollOpcode; 
    897897        WorldPacketHandlers[MSG_SET_DUNGEON_DIFFICULTY].handler                        = &WorldSession::HandleDungeonDifficultyOpcode; 
     898        WorldPacketHandlers[MSG_SET_RAID_DIFFICULTY].handler                                                    = &WorldSession::HandleRaidDifficultyOpcode; 
    898899 
    899900        // Misc 
     
    908909 
    909910        WorldPacketHandlers[CMSG_PET_CAST_SPELL].handler                                = &WorldSession::HandlePetCastSpell; 
     911 
     912        WorldPacketHandlers[CMSG_WORLD_STATE_UI_TIMER_UPDATE].handler                           = &WorldSession::HandleWorldStateUITimerUpdate; 
    910913 
    911914 
  • trunk/src/arcemu-world/WorldSession.h

    r2845 r2860  
    111111    UPDATEFLAG_HAS_POSITION = 0x40, 
    112112    UPDATEFLAG_VEHICLE      = 0x80, 
    113     UPDATEFLAG_UNK1       = 0x0100, 
    114     UPDATEFLAG_UNK2       = 0x0200 
     113    UPDATEFLAG_POSITION   = 0x0100, 
     114    UPDATEFLAG_ROTATION   = 0x0200 
    115115}; 
    116116 
     
    680680        //instances 
    681681        void HandleResetInstanceOpcode(WorldPacket& recv_data); 
    682     void HandleDungeonDifficultyOpcode(WorldPacket& recv_data); 
     682        void HandleDungeonDifficultyOpcode(WorldPacket& recv_data); 
     683        void HandleRaidDifficultyOpcode(WorldPacket& recv_data); 
    683684 
    684685        uint8 TrainerGetSpellStatus(TrainerSpell* pSpell); 
     
    718719 
    719720        void HandleSetFactionInactiveOpcode( WorldPacket & recv_data ); 
     721 
     722        //MISC 
     723        void HandleWorldStateUITimerUpdate( WorldPacket & recv_data ); 
    720724 
    721725public: