Changeset 3153

Show
Ignore:
Timestamp:
02/06/2010 11:46:09 AM (7 months ago)
Author:
Hoffa
Message:

Applied 3.3.2 misc fixes by Terrorblade -> http://arcemu.org/forums/index.php?showtopic=20707

Location:
trunk
Files:
21 modified

Legend:

Unmodified
Added
Removed
  • trunk/extras/map_extractor/adt.cpp

    r2910 r3153  
    339339 
    340340                        } 
     341            if(fourcc=0xefb88b70) 
     342            { 
     343             nextpos = mf.getPos() + 0x1199; 
     344            } 
     345 
    341346                else 
    342347                        /*if(fourcc==0x4d434c51) //MCLQ 
  • trunk/src/arcemu-shared/AuthCodes.h

    r3131 r3153  
    2121#define _AUTHCODES_H 
    2222 
    23 // client 3.2.2a, 2009/10/06 
     23// client 3.3.0, 2009/12/20 
    2424enum LoginErrorCode 
    2525{ 
     
    9999        E_CHAR_CREATE_CHARACTER_RACE_ONLY                           = 0x43, 
    100100        E_CHAR_CREATE_CHARACTER_GOLD_LIMIT                          = 0x44, 
    101  
    102         E_CHAR_DELETE_IN_PROGRESS                                                                       = 0x45, 
    103         E_CHAR_DELETE_SUCCESS                                                                           = 0x46, 
    104         E_CHAR_DELETE_FAILED                                                                            = 0x47, 
    105         E_CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER                                        = 0x48, 
    106         E_CHAR_DELETE_FAILED_GUILD_LEADER                                                       = 0x49, 
    107         E_CHAR_DELETE_FAILED_ARENA_CAPTAIN                                                      = 0x4A, 
    108  
    109         E_CHAR_LOGIN_IN_PROGRESS                                                                        = 0x4B, 
    110         E_CHAR_LOGIN_SUCCESS                                                                            = 0x4C, 
    111         E_CHAR_LOGIN_NO_WORLD                                                                           = 0x4D, 
    112         E_CHAR_LOGIN_DUPLICATE_CHARACTER                                                        = 0x4E, 
    113         E_CHAR_LOGIN_NO_INSTANCES                                                                       = 0x4F, 
    114         E_CHAR_LOGIN_FAILED                                                                                     = 0x50, 
    115         E_CHAR_LOGIN_DISABLED                                                                           = 0x51, 
    116         E_CHAR_LOGIN_NO_CHARACTER                                                                       = 0x52, 
    117         E_CHAR_LOGIN_LOCKED_FOR_TRANSFER                                                        = 0x53, 
    118         E_CHAR_LOGIN_LOCKED_BY_BILLING                                                          = 0x54, 
    119  
    120         E_CHAR_NAME_SUCCESS                                                                                     = 0x55, 
    121         E_CHAR_NAME_FAILURE                                                                                     = 0x56, 
    122         E_CHAR_NAME_NO_NAME                                                                                     = 0x57, 
    123         E_CHAR_NAME_TOO_SHORT                                                                           = 0x58, 
    124         E_CHAR_NAME_TOO_LONG                                                                            = 0x59, 
    125         E_CHAR_NAME_INVALID_CHARACTER                                                           = 0x5A, 
    126         E_CHAR_NAME_MIXED_LANGUAGES                                                                     = 0x5B, 
    127         E_CHAR_NAME_PROFANE                                                                                     = 0x5C, 
    128         E_CHAR_NAME_RESERVED                                                                            = 0x5D, 
    129         E_CHAR_NAME_INVALID_APOSTROPHE                                                          = 0x5E, 
    130         E_CHAR_NAME_MULTIPLE_APOSTROPHES                                                        = 0x5F, 
    131         E_CHAR_NAME_THREE_CONSECUTIVE                                                           = 0x60, 
    132         E_CHAR_NAME_INVALID_SPACE                                                                       = 0x61, 
    133         E_CHAR_NAME_CONSECUTIVE_SPACES                                                          = 0x62, 
    134         E_CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS                       = 0x63, 
    135         E_CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END        = 0x64, 
    136         E_CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME                           = 0x65, 
     101        E_CHAR_CREATE_FORCE_LOGIN                                                                       = 0x45, 
     102 
     103        E_CHAR_DELETE_IN_PROGRESS                                                                       = 0x46, 
     104        E_CHAR_DELETE_SUCCESS                                                                           = 0x47, 
     105        E_CHAR_DELETE_FAILED                                                                            = 0x48, 
     106        E_CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER                                        = 0x49, 
     107        E_CHAR_DELETE_FAILED_GUILD_LEADER                                                       = 0x4A, 
     108        E_CHAR_DELETE_FAILED_ARENA_CAPTAIN                                                      = 0x4B, 
     109 
     110        E_CHAR_LOGIN_IN_PROGRESS                                                                        = 0x4C, 
     111        E_CHAR_LOGIN_SUCCESS                                                                            = 0x4D, 
     112        E_CHAR_LOGIN_NO_WORLD                                                                           = 0x4E, 
     113        E_CHAR_LOGIN_DUPLICATE_CHARACTER                                                        = 0x4F, 
     114        E_CHAR_LOGIN_NO_INSTANCES                                                                       = 0x50, 
     115        E_CHAR_LOGIN_FAILED                                                                                     = 0x51, 
     116        E_CHAR_LOGIN_DISABLED                                                                           = 0x52, 
     117        E_CHAR_LOGIN_NO_CHARACTER                                                                       = 0x53, 
     118        E_CHAR_LOGIN_LOCKED_FOR_TRANSFER                                                        = 0x54, 
     119        E_CHAR_LOGIN_LOCKED_BY_BILLING                                                          = 0x55, 
     120 
     121        E_CHAR_NAME_SUCCESS                                                                                     = 0x56, 
     122        E_CHAR_NAME_FAILURE                                                                                     = 0x57, 
     123        E_CHAR_NAME_NO_NAME                                                                                     = 0x58, 
     124        E_CHAR_NAME_TOO_SHORT                                                                           = 0x59, 
     125        E_CHAR_NAME_TOO_LONG                                                                            = 0x5A, 
     126        E_CHAR_NAME_INVALID_CHARACTER                                                           = 0x5B, 
     127        E_CHAR_NAME_MIXED_LANGUAGES                                                                     = 0x5C, 
     128        E_CHAR_NAME_PROFANE                                                                                     = 0x5D, 
     129        E_CHAR_NAME_RESERVED                                                                            = 0x5E, 
     130        E_CHAR_NAME_INVALID_APOSTROPHE                                                          = 0x5F, 
     131        E_CHAR_NAME_MULTIPLE_APOSTROPHES                                                        = 0x60, 
     132        E_CHAR_NAME_THREE_CONSECUTIVE                                                           = 0x61, 
     133        E_CHAR_NAME_INVALID_SPACE                                                                       = 0x62, 
     134        E_CHAR_NAME_CONSECUTIVE_SPACES                                                          = 0x63, 
     135        E_CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS                       = 0x64, 
     136        E_CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END        = 0x65, 
     137        E_CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME                           = 0x66, 
    137138}; 
    138139 
     
    213214#define    CHAR_CREATE_CHARACTER_RACE_ONLY "\x43" 
    214215#define    CHAR_CREATE_CHARACTER_GOLD_LIMIT "\x44" 
    215  
    216 #define    CHAR_DELETE_IN_PROGRESS "\x45" 
    217 #define    CHAR_DELETE_SUCCESS "\x46" 
    218 #define    CHAR_DELETE_FAILED "\x47" 
    219 #define    CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER "\x48" 
    220 #define    CHAR_DELETE_FAILED_GUILD_LEADER "\x49" 
    221 #define    CHAR_DELETE_FAILED_ARENA_CAPTAIN "\x4A" 
    222  
    223 #define    CHAR_LOGIN_IN_PROGRESS "\x4B" 
    224 #define    CHAR_LOGIN_SUCCESS "\x4C" 
    225 #define    CHAR_LOGIN_NO_WORLD "\x4D" 
    226 #define    CHAR_LOGIN_DUPLICATE_CHARACTER "\x4E" 
    227 #define    CHAR_LOGIN_NO_INSTANCES "\x4F" 
    228 #define    CHAR_LOGIN_FAILED "\x50" 
    229 #define    CHAR_LOGIN_DISABLED "\x51" 
    230 #define    CHAR_LOGIN_NO_CHARACTER "\x52" 
    231 #define    CHAR_LOGIN_LOCKED_FOR_TRANSFER "\x53" 
    232 #define    CHAR_LOGIN_LOCKED_BY_BILLING "\x54" 
    233  
    234 #define    CHAR_NAME_SUCCESS "\x55" 
    235 #define    CHAR_NAME_FAILURE "\x56" 
    236 #define    CHAR_NAME_NO_NAME "\x57" 
    237 #define    CHAR_NAME_TOO_SHORT "\x58" 
    238 #define    CHAR_NAME_TOO_LONG "\x59" 
    239 #define    CHAR_NAME_INVALID_CHARACTER "\x5A" 
    240 #define    CHAR_NAME_MIXED_LANGUAGES "\x5B" 
    241 #define    CHAR_NAME_PROFANE "\x5C" 
    242 #define    CHAR_NAME_RESERVED "\x5D" 
    243 #define    CHAR_NAME_INVALID_APOSTROPHE "\x5E" 
    244 #define    CHAR_NAME_MULTIPLE_APOSTROPHES "\x5F" 
    245 #define    CHAR_NAME_THREE_CONSECUTIVE "\x60" 
    246 #define    CHAR_NAME_INVALID_SPACE "\x61" 
    247 #define    CHAR_NAME_CONSECUTIVE_SPACES "\x62" 
    248 #define    CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS "\x63" 
    249 #define    CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END "\x64" 
    250 #define    CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME "\x65" 
     216#define    CHAR_CREATE_FORCE_LOGIN "\x45" 
     217 
     218#define    CHAR_DELETE_IN_PROGRESS "\x46" 
     219#define    CHAR_DELETE_SUCCESS "\x47" 
     220#define    CHAR_DELETE_FAILED "\x48" 
     221#define    CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER "\x49" 
     222#define    CHAR_DELETE_FAILED_GUILD_LEADER "\x4A" 
     223#define    CHAR_DELETE_FAILED_ARENA_CAPTAIN "\x4B" 
     224 
     225#define    CHAR_LOGIN_IN_PROGRESS "\x4C" 
     226#define    CHAR_LOGIN_SUCCESS "\x4D" 
     227#define    CHAR_LOGIN_NO_WORLD "\x4E" 
     228#define    CHAR_LOGIN_DUPLICATE_CHARACTER "\x4F" 
     229#define    CHAR_LOGIN_NO_INSTANCES "\x50" 
     230#define    CHAR_LOGIN_FAILED "\x51" 
     231#define    CHAR_LOGIN_DISABLED "\x52" 
     232#define    CHAR_LOGIN_NO_CHARACTER "\x53" 
     233#define    CHAR_LOGIN_LOCKED_FOR_TRANSFER "\x54" 
     234#define    CHAR_LOGIN_LOCKED_BY_BILLING "\x55" 
     235 
     236#define    CHAR_NAME_SUCCESS "\x56" 
     237#define    CHAR_NAME_FAILURE "\x57" 
     238#define    CHAR_NAME_NO_NAME "\x58" 
     239#define    CHAR_NAME_TOO_SHORT "\x59" 
     240#define    CHAR_NAME_TOO_LONG "\x5A" 
     241#define    CHAR_NAME_INVALID_CHARACTER "\x5B" 
     242#define    CHAR_NAME_MIXED_LANGUAGES "\x5C" 
     243#define    CHAR_NAME_PROFANE "\x5D" 
     244#define    CHAR_NAME_RESERVED "\x5E" 
     245#define    CHAR_NAME_INVALID_APOSTROPHE "\x5F" 
     246#define    CHAR_NAME_MULTIPLE_APOSTROPHES "\x60" 
     247#define    CHAR_NAME_THREE_CONSECUTIVE "\x61" 
     248#define    CHAR_NAME_INVALID_SPACE "\x62" 
     249#define    CHAR_NAME_CONSECUTIVE_SPACES "\x63" 
     250#define    CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS "\x64" 
     251#define    CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END "\x65" 
     252#define    CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME "\x66" 
    251253 
    252254#endif 
  • trunk/src/arcemu-world/BattlegroundMgr.cpp

    r3151 r3153  
    14511451                        data << uint32(6); 
    14521452                        data << uint16(0x1F90); 
     1453                        data << uint8(0);                // 3.3.0 
     1454                        data << uint8(0);                // 3.3.0 
    14531455                        data << uint32(11); 
    14541456                        data << uint8(RatedMatch);      // 1 = rated match 
     
    14591461                        data << uint8(0) << uint8(2); 
    14601462                        data << Type; 
     1463                        data << uint8(0);                // 3.3.0 
     1464                        data << uint8(0);                // 3.3.0 
    14611465                        data << uint16(0x1F90); 
    14621466                        data << InstanceID; 
  • trunk/src/arcemu-world/Chat.h

    r3131 r3153  
    8181        CHAT_MSG_ACHIEVEMENT                                                    = 48, 
    8282    CHAT_MSG_GUILD_ACHIEVEMENT                                          = 49, 
     83        CHAT_MSG_PARTY_LEADER                                                   = 51, 
    8384}; 
    8485 
  • trunk/src/arcemu-world/ChatHandler.cpp

    r3132 r3153  
    131131                case CHAT_MSG_EMOTE: 
    132132                case CHAT_MSG_PARTY: 
     133                case CHAT_MSG_PARTY_LEADER: 
    133134                case CHAT_MSG_RAID: 
    134135                case CHAT_MSG_RAID_LEADER: 
     
    241242                } break; 
    242243        case CHAT_MSG_PARTY: 
     244        case CHAT_MSG_PARTY_LEADER: 
    243245        case CHAT_MSG_RAID: 
    244246        case CHAT_MSG_RAID_LEADER: 
  • trunk/src/arcemu-world/Group.cpp

    r3131 r3153  
    296296                                //data << uint64(0);    // unk3 
    297297                                data << uint64(0x500000000004BC0CULL); 
     298                                data << uint32(0);              // 3.3 - increments every time a group list update is being sent to client 
    298299                                data << uint32(m_MemberCount-1);        // we don't include self 
    299300 
     
    313314                                                                continue; 
    314315 
    315                                                         data << (*itr2)->name << (*itr2)->guid << uint32(0);    // highguid 
     316                                                        data << (*itr2)->name; 
     317                                                        data << (*itr2)->guid << uint32(0);     // highguid 
    316318                                                         
    317319                                                        if( (*itr2)->m_loggedInPlayer != NULL ) 
     
    332334 
    333335                                                        data << flags; 
     336                                                        data << uint8(0); // 3.3 - may have some use 
    334337                                                } 
    335338                                        } 
     
    351354                                data << uint8( m_difficulty ); 
    352355                                data << uint8( m_raiddifficulty ); 
     356                                data << uint8( 0 ); // 3.3 - unk 
    353357 
    354358                                if( !(*itr1)->m_loggedInPlayer->IsInWorld() ) 
     
    750754void Group::SendNullUpdate( Player *pPlayer ) 
    751755{ 
    752         // this packet is 24 bytes long.                // AS OF 2.1.0 
    753         uint8 buffer[24]; 
    754         memset(buffer, 0, 24); 
    755         pPlayer->GetSession()->OutPacket( SMSG_GROUP_LIST, 24, buffer ); 
     756        // this packet is 28 bytes long.                // AS OF 3.3 
     757        uint8 buffer[28]; 
     758        memset(buffer, 0, 28); 
     759        pPlayer->GetSession()->OutPacket( SMSG_GROUP_LIST, 28, buffer ); 
    756760} 
    757761 
  • trunk/src/arcemu-world/Group.h

    r3131 r3153  
    3838enum GroupTypes 
    3939{ 
    40         GROUP_TYPE_PARTY                                        = 0, 
    41         GROUP_TYPE_RAID                                         = 1, 
     40        GROUP_TYPE_PARTY                                        = 0x0, 
     41        GROUP_TYPE_BG                                           = 0x1, 
     42        GROUP_TYPE_RAID                                         = 0x2, 
     43        GROUP_TYPE_BGRAID                                       = GROUP_TYPE_BG | GROUP_TYPE_RAID, 
     44        GROUP_TYPE_LFD                                          = 0x8, 
    4245}; 
    4346 
  • trunk/src/arcemu-world/GuildHandler.cpp

    r3131 r3153  
    528528        // Arena team charters are full of crap 
    529529        uint64 creature_guid; 
    530         uint64 crap; 
    531         uint32 crap2; 
    532         string name; 
    533         uint64 crap3, crap4, crap5, crap6, crap7, crap8; 
    534         uint32 crap9; 
    535         uint8 crap10; 
    536         uint32 arena_index; 
     530        uint32 crap; 
     531        uint64 crap2; 
     532        string name, UnkString; 
     533        //uint32 crap3, crap4, crap5, crap6, crap7, crap8, crap9; 
     534        uint32 Data[7]; 
     535        uint16 crap10; 
    537536        uint32 crap11; 
     537        uint32 crap12, PetitionSignerCount; 
     538        string PetitionSignerNames[9]; 
     539        uint32 crap13, arena_index; 
    538540 
    539541                 
     
    541543        recv_data >> crap >> crap2; 
    542544        recv_data >> name; 
    543         recv_data >> crap3 >> crap4 >> crap5 >> crap6 >> crap7 >> crap8; 
    544         recv_data >> crap9; 
     545        recv_data >> UnkString; 
     546        recv_data >> Data[0] >> Data[1] >> Data[2] >> Data[3] >> Data[4] >> Data[5] >> Data[6]; 
    545547        recv_data >> crap10; 
    546         recv_data >> arena_index; 
    547         recv_data >> crap11; 
     548        recv_data >> crap11 >> crap12 >> PetitionSignerCount; 
     549        if(PetitionSignerCount > 0) 
     550        { 
     551                for (uint32 s = 0; s < PetitionSignerCount; ++s) 
     552                { 
     553                        if(s < 9) 
     554                                recv_data >> PetitionSignerNames[s]; 
     555                } 
     556        } 
     557        recv_data >> crap13 >> arena_index; 
    548558 
    549559 
     
    624634                        c->ItemGuid = i->GetGUID(); 
    625635 
    626                         i->SetStackCount(  1); 
     636                        c->UnkString = UnkString; 
     637                        c->Unk1 = crap10; 
     638                        c->Unk2 = crap11; 
     639                        c->Unk3 = crap12; 
     640                        c->PetitionSignerCount = PetitionSignerCount; 
     641                        memcpy(&Data, c->Data, sizeof(Data)); 
     642                        memcpy(&PetitionSignerNames, c->PetitionSignerNames, sizeof(PetitionSignerNames)); 
     643 
     644                        i->SetUInt32Value(ITEM_FIELD_STACK_COUNT, 1); 
    627645            i->SoulBind(); 
    628646            i->SetEnchantmentId( 0,  c->GetID() ); 
     
    697715                        c->ItemGuid = i->GetGUID(); 
    698716 
     717                        c->UnkString = UnkString; 
     718                        c->Unk1 = crap10; 
     719                        c->Unk2 = crap11; 
     720                        c->Unk3 = crap12; 
     721                        c->PetitionSignerCount = PetitionSignerCount; 
     722                        memcpy(&Data, c->Data, sizeof(Data)); 
     723                        memcpy(&PetitionSignerNames, c->PetitionSignerNames, sizeof(PetitionSignerNames)); 
    699724 
    700725                        i->SetStackCount(  1); 
  • trunk/src/arcemu-world/Level1.cpp

    r3131 r3153  
    201201                obj = (Object*)m_session->GetPlayer(); 
    202202 
     203        char buf[328]; 
    203204        AreaTable * at = dbcArea.LookupEntryForced(obj->GetMapMgr()->GetAreaID(obj->GetPositionX(), obj->GetPositionY())); 
    204         if(!at) return true; 
    205  
    206         char buf[328]; 
     205        if(!at) 
     206        { 
     207                snprintf((char*)buf, 328, "|cff00ff00Current Position: |cffffffffMap: |cff00ff00%d |cffffffffX: |cff00ff00%f |cffffffffY: |cff00ff00%f |cffffffffZ: |cff00ff00%f |cffffffffOrientation: |cff00ff00%f|r", 
     208                        (unsigned int)obj->GetMapId(), obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ()); 
     209                SystemMessage(m_session, buf); 
     210                return true; 
     211        } 
     212 
    207213        snprintf((char*)buf, 328, "|cff00ff00Current Position: |cffffffffMap: |cff00ff00%d |cffffffffZone: |cff00ff00%u |cffffffffArea: |cff00ff00%u  |cffffffffX: |cff00ff00%f |cffffffffY: |cff00ff00%f |cffffffffZ: |cff00ff00%f |cffffffffOrientation: |cff00ff00%f |cffffffffArea Name: |cff00ff00%s |r", 
    208214                (unsigned int)obj->GetMapId(), at->ZoneId,at->AreaId, obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj->GetOrientation(),at->name); 
     
    950956                return true; 
    951957        } 
    952  
    953         if(TP1) 
    954                 Pl->m_specs[SPEC_PRIMARY].m_customTalentPointOverride = TP1; 
    955         if(TP2) 
    956                 Pl->m_specs[SPEC_SECONDARY].m_customTalentPointOverride = TP2; 
     958         
     959        Pl->m_specs[SPEC_PRIMARY].m_customTalentPointOverride = TP1; 
     960        Pl->m_specs[SPEC_SECONDARY].m_customTalentPointOverride = TP2; 
    957961        Pl->smsg_TalentsInfo(false); 
    958962        return true; 
  • trunk/src/arcemu-world/LfgMgr.cpp

    r3131 r3153  
    8787} 
    8888 
    89 void LfgMgr::SetPlayerInLFGqueue(Player *pl,uint32 LfgDungeonId) 
     89void LfgMgr::SetPlayerInLFGqueue(Player *pl, uint32 LfgDungeonId) 
    9090{ 
    9191        if( pl == NULL ) 
  • trunk/src/arcemu-world/LootMgr.cpp

    r3131 r3153  
    651651#define GREED 2 
    652652 
    653 LootRoll::LootRoll(uint32 timer, uint32 groupcount, uint64 guid, uint32 slotid, uint32 itemid, uint32 itemunk1, uint32 itemunk2, MapMgr * mgr) : EventableObject() 
     653LootRoll::LootRoll(uint32 timer, uint32 groupcount, uint64 guid, uint32 slotid, uint32 itemid, uint32 randomsuffixid, uint32 randompropertyid, MapMgr * mgr) : EventableObject() 
    654654{ 
    655655        _mgr = mgr; 
     
    659659        _slotid = slotid; 
    660660        _itemid = itemid; 
    661         _itemunk1 = itemunk1; 
    662         _itemunk2 = itemunk2; 
     661        _randomsuffixid = randomsuffixid; 
     662        _randompropertyid = randompropertyid; 
    663663        _remaining = groupcount; 
    664664} 
     
    711711                data.Initialize(SMSG_LOOT_ROLL); 
    712712                data << _guid << _slotid << itr->first; 
    713                 data << _itemid << _itemunk1 << _itemunk2; 
     713                data << _itemid << _randomsuffixid << _randompropertyid; 
    714714                data << uint8(itr->second) << uint8(NEED); 
    715715                if(gplr && gplr->GetGroup()) 
     
    731731                data.Initialize(SMSG_LOOT_ROLL); 
    732732                data << _guid << _slotid << itr->first; 
    733                 data << _itemid << _itemunk1 << _itemunk2; 
     733                data << _itemid << _randomsuffixid << _randompropertyid; 
    734734                data << uint8(itr->second) << uint8(GREED); 
    735735                if(gplr && gplr->GetGroup()) 
     
    779779                /* all passed */ 
    780780                data.Initialize(SMSG_LOOT_ALL_PASSED); 
    781                 data << _guid << _groupcount << _itemid << _itemunk1 << _itemunk2; 
     781                data << _guid << _groupcount << _itemid << _randomsuffixid << _randompropertyid; 
    782782                set<uint32>::iterator pitr = m_passRolls.begin(); 
    783783                while(_player == NULL && pitr != m_passRolls.end()) 
     
    800800    pLoot->items.at(_slotid).roll = 0; 
    801801        data.Initialize(SMSG_LOOT_ROLL_WON); 
    802         data << _guid << _slotid << _itemid << _itemunk1 << _itemunk2; 
     802        data << _guid << _slotid << _itemid << _randomsuffixid << _randompropertyid; 
    803803        data << _player->GetGUID() << uint8(highest) << uint8(hightype); 
    804804        if(_player->InGroup()) 
     
    892892        data.SetOpcode(SMSG_LOOT_ROLL); 
    893893        data << _guid << _slotid << player->GetGUID(); 
    894         data << _itemid << _itemunk1 << _itemunk2; 
    895  
    896         if(choice == NEED) { 
     894        data << _itemid << _randomsuffixid << _randompropertyid; 
     895 
     896        if(choice == NEED) 
     897        { 
    897898                m_NeedRolls.insert( std::make_pair(player->GetLowGUID(), roll) ); 
    898899                data << uint8(roll) << uint8(NEED); 
     
    909910                data << uint8(128) << uint8(128); 
    910911        } 
     912 
     913        data << uint8( 0 );     // Requires research - possibly related to disenchanting of loot 
    911914         
    912915        if(player->InGroup()) 
  • trunk/src/arcemu-world/LootMgr.h

    r3131 r3153  
    5050        uint32 _slotid; 
    5151        uint32 _itemid; 
    52         uint32 _itemunk1; 
    53         uint32 _itemunk2; 
     52        uint32 _randomsuffixid; 
     53        uint32 _randompropertyid; 
    5454        uint32 _remaining; 
    5555        uint64 _guid; 
  • trunk/src/arcemu-world/MailSystem.cpp

    r3131 r3153  
    419419        message->read_flag = 1; 
    420420 
    421         // mail now has a 3 day expiry time 
     421        // mail now has a 30 day expiry time 
    422422        if(!sMailSystem.MailOption(MAIL_FLAG_NO_EXPIRY)) 
    423                 message->expire_time = (uint32)UNIXTIME + (TIME_DAY * 3); 
     423                message->expire_time = (uint32)UNIXTIME + (TIME_DAY * 30); 
    424424 
    425425        // update it in sql 
  • trunk/src/arcemu-world/Master.h

    r3131 r3153  
    2929 
    3030#ifndef _VERSION 
    31 # define _VERSION "3.2.0" 
     31# define _VERSION "3.3.0" 
    3232#endif 
    3333 
  • trunk/src/arcemu-world/ObjectMgr.h

    r3131 r3153  
    315315        uint32 CharterId; 
    316316        string GuildName; 
     317 
     318        /************************************************************************/ 
     319        /* Developer Fields                                                     */ 
     320        /************************************************************************/ 
     321        string UnkString; 
     322        uint32 Data[7]; 
     323        uint16 Unk1; 
     324        uint32 Unk2; 
     325        uint32 Unk3; 
     326        uint32 PetitionSignerCount; 
     327        string PetitionSignerNames[9]; 
    317328 
    318329        Charter(Field * fields); 
  • trunk/src/arcemu-world/PlayerPacketWrapper.cpp

    r3140 r3153  
    532532 
    533533                                        data2 << uint32( iter->iItemsCount ); 
    534                                         data2 << uint32( 60000 ); // countdown 
     534                                        data2 << uint32( 60000 );       // countdown 
     535                                        data2 << uint8( 7 );            // some sort of flags that require research 
    535536                                } 
    536537 
  • trunk/src/arcemu-world/Quest.cpp

    r3152 r3153  
    3333        uint32 i; 
    3434    
    35         *data << uint32(qst->id);                                          // Quest ID 
    36         *data << uint32(2);                                                      // Unknown, always seems to be 2 
     35        *data << uint32(qst->id);                                               // Quest ID 
     36        *data << uint32(2);                                                             // Unknown, always seems to be 2 
    3737        *data << uint32(qst->max_level);                                // Quest level 
    38     *data << uint32( 0 ); 
    39  
     38        *data << uint32(qst->min_level);                                // Quest required level 
    4039        if(qst->quest_sort > 0) 
    41                 *data << int32(-(int32)qst->quest_sort);          // Negative if pointing to a sort. 
    42         else 
    43                 *data << uint32(qst->zone_id);                    // Positive if pointing to a zone. 
    44  
    45         *data << uint32(qst->type);                                      // Info ID / Type 
    46         *data << qst->suggestedplayers;                                                         // suggested players 
    47         *data << uint32(qst->required_rep_faction);      // Faction ID 
    48         *data << uint32(qst->required_rep_value);          // Faction Amount 
    49         *data << uint32(0);                                                      // Unknown (always 0) 
    50         *data << uint32(0);                                                      // Unknown (always 0) 
     40                *data << int32(-(int32)qst->quest_sort);        // Negative if pointing to a sort. 
     41        else 
     42                *data << uint32(qst->zone_id);                          // Positive if pointing to a zone. 
     43 
     44        *data << uint32(qst->type);                                             // Info ID / Type 
     45        *data << qst->suggestedplayers;                                 // suggested players 
     46        *data << uint32(qst->required_rep_faction);             // Faction ID 
     47        *data << uint32(qst->required_rep_value);               // Faction Amount 
     48        *data << uint32(0);                                                             // Unknown (always 0) 
     49        *data << uint32(0);                                                             // Unknown (always 0) 
    5150        *data << uint32(qst->next_quest_id);                    // Next Quest ID 
    52     *data << uint32( 0 ); 
    53         *data << uint32( sQuestMgr.GenerateRewardMoney( _player, qst ) );                        // Copper reward 
    54         *data << uint32(qst->reward_money<0 ? -qst->reward_money : 0);             // Required Money 
    55         *data << uint32(qst->effect_on_player);          // Spell casted on player upon completion 
    56         *data << uint32(qst->reward_spell);                      // Spell added to spellbook upon completion 
    57     *data << float( 0 ); 
    58         *data << qst->bonushonor;                                                               // 2.3.0 - bonus honor 
    59         *data << uint32(qst->srcitem);                            // Item given at the start of a quest (srcitem) 
    60         *data << uint32(qst->quest_flags);                        // Quest Flags 
    61         *data << qst->rewardtitleid;                                                            // 2.4.0 unk 
     51        *data << uint32(0);                                                             // Column id +1 from QuestXp.dbc, entry is quest level 
     52        *data << uint32( sQuestMgr.GenerateRewardMoney( _player, qst ) );       // Copper reward 
     53        *data << uint32(qst->reward_money<0 ? -qst->reward_money : 0);          // Required Money 
     54        *data << uint32(qst->effect_on_player);                 // Spell casted on player upon completion 
     55        *data << uint32(qst->reward_spell);                             // Spell added to spellbook upon completion 
     56        *data << uint32(qst->bonushonor);                               // 2.3.0 - bonus honor 
     57        *data << float(0);                                                              // 3.3.0 - some multiplier for honor 
     58        *data << uint32(qst->srcitem);                                  // Item given at the start of a quest (srcitem) 
     59        *data << uint32(qst->quest_flags);                              // Quest Flags 
     60        *data << qst->rewardtitleid;                                    // 2.4.0 unk 
    6261        *data << uint32( 0 );                                                           // playerkillcount 
    6362        *data << qst->rewardtalents; 
    64     *data << uint32( 0 ); 
    65     *data << uint32( 0 ); 
    66  
     63        *data << uint32(0);                                                             // 3.3.0 Unknown 
     64        *data << uint32(0);                                                             // 3.3.0 Unknown 
    6765    for( i = 0; i < 5; ++i ) 
    6866        *data << uint32( 0 ); 
     
    7775        for(i = 0; i < 4; ++i) 
    7876        { 
    79                 *data << qst->reward_item[i];                      // Forced Reward Item [i] 
    80                 *data << qst->reward_itemcount[i];                // Forced Reward Item Count [i] 
     77                *data << qst->reward_item[i];                           // Forced Reward Item [i] 
     78                *data << qst->reward_itemcount[i];                      // Forced Reward Item Count [i] 
    8179        } 
    8280 
     
    8482        for(i = 0; i < 6; ++i) 
    8583        { 
    86                 *data << qst->reward_choiceitem[i];              // Choice Reward Item [i] 
     84                *data << qst->reward_choiceitem[i];                     // Choice Reward Item [i] 
    8785                *data << qst->reward_choiceitemcount[i];        // Choice Reward Item Count [i] 
    8886        } 
    8987 
    90         *data << qst->point_mapid;                                        // Unknown 
    91         *data << qst->point_x;                                            // Unknown 
    92         *data << qst->point_y;                                            // Unknown 
     88        // (loop 5 times) - these 3 loops are here to allow displaying rep rewards in client (not handled in core yet) 
     89        for(uint32 i = 0; i < 5; ++i) 
     90        { 
     91                *data << uint32(qst->reward_repfaction[i]);     // reward factions ids 
     92        } 
     93 
     94        for(uint32 i = 0; i < 5; ++i) 
     95        { 
     96                *data << uint32(0);                                                     // column index in QuestFactionReward.dbc but use unknown 
     97        } 
     98 
     99        for(uint32 i = 0; i < 5; ++i)                                   // Unknown 
     100        { 
     101                *data << uint32(0); 
     102        } 
     103 
     104        *data << qst->point_mapid;                                              // Unknown 
     105        *data << qst->point_x;                                                  // Unknown 
     106        *data << qst->point_y;                                                  // Unknown 
    93107        *data << qst->point_opt;                                                // Unknown 
    94108         
     
    99113                *data << lci->Details; 
    100114                *data << lci->EndText; 
    101         } 
    102         else 
    103         { 
    104                 *data << qst->title;                                                    // Title / name of quest 
    105                 *data << qst->objectives;                                          // Objectives / description 
    106                 *data << qst->details;                                            // Details 
    107                 *data << qst->endtext;                                            // Subdescription 
     115                *data << uint8(0); 
     116        } 
     117        else 
     118        { 
     119                *data << qst->title;                                            // Title / name of quest 
     120                *data << qst->objectives;                                       // Objectives / description 
     121                *data << qst->details;                                          // Details 
     122                *data << qst->endtext;                                          // Subdescription 
     123                *data << uint8(0);                                                      // most 3.3.0 quests i seen have something like "Return to NPCNAME" 
    108124        } 
    109125 
     
    112128        for(i = 0; i < 4; ++i) 
    113129        { 
    114                 *data << qst->required_mob[i];                    // Kill mob entry ID [i] 
    115                 *data << qst->required_mobcount[i];              // Kill mob count [i] 
    116                 *data << uint32( 0 ); // Unknown 
     130                *data << qst->required_mob[i];                          // Kill mob entry ID [i] 
     131                *data << qst->required_mobcount[i];                     // Kill mob count [i] 
     132                *data << uint32(0);                                                     // Unknown 
     133                *data << uint32(0);                                                     // 3.3.0 Unknown 
    117134        } 
    118135 
    119136        for(i = 0; i < 6; ++i) 
    120137        { 
    121                 *data << qst->required_item[i];                  // Collect item [i] 
     138                *data << qst->required_item[i];                         // Collect item [i] 
    122139                *data << qst->required_itemcount[i];            // Collect item count [i] 
    123140        } 
     
    420437 
    421438        // next field is count (kills, etc) 
    422         uint32 field1 = 0; 
     439        uint64 field1 = 0; 
    423440 
    424441        // explored areas 
     
    496513                { 
    497514                        if( m_quest->required_mob[i] && m_mobcount[i] > 0 ) 
    498                                 p[i] |= (uint8)m_mobcount[i]; 
     515                                p[2*i] |= (uint8)m_mobcount[i]; 
    499516                } 
    500517        } 
    501518 
    502519        m_plr->SetUInt32Value(base + 1, field0); 
    503         m_plr->SetUInt32Value(base + 2, field1); 
     520        m_plr->SetUInt64Value(base + 2, field1); 
    504521        m_plr->SetUInt32Value(base + 3, ( m_time_left ? (uint32)(UNIXTIME+m_time_left/1000) : 0 ) ); 
    505522} 
  • trunk/src/arcemu-world/Quest.h

    r3131 r3153  
    3838enum QUEST_STATUS 
    3939{ 
    40         QMGR_QUEST_NOT_AVAILABLE                = 0x00, // There aren't any quests available.           | "No Mark" 
    41         QMGR_QUEST_AVAILABLELOW_LEVEL           = 0x01, // Quest available, and your level isn't enough.| "Gray Quotation Mark !" 
    42         QMGR_QUEST_CHAT                         = 0x02, // Quest available it shows a talk balloon.     | "No Mark" 
    43                 // On 3.1.2 0x03 and 0x04 is some new status, so the old ones are now shifted by 2 (0x03->0x05 and so on).  
    44         QMGR_QUEST_REPEATABLE_FINISHED_LOWLEVEL = 0x03,  
    45         QMGR_QUEST_REPEATABLE_LOWLEVEL          = 0x04,  
    46         QMGR_QUEST_NOT_FINISHED                 = 0x05, // Quest isn't finished yet.                    | "Gray Question ? Mark" 
    47         QMGR_QUEST_REPEATABLE_FINISHED          = 0x06, 
    48         QMGR_QUEST_REPEATABLE                   = 0x07, // Quest repeatable                             | "Blue Question ? Mark"  
    49         QMGR_QUEST_AVAILABLE                    = 0x08, // Quest available, and your level is enough    | "Yellow Quotation ! Mark"  
    50         QMGR_QUEST_FINISHED                     = 0x0A, // Quest has been finished.                     | "Yellow Question  ? Mark" (7 has no minimap icon) 
    51         //QUEST_ITEM_UPDATE                     = 0x06  // Yellow Question "?" Mark. //Unknown 
     40        QMGR_QUEST_NOT_AVAILABLE                                        = 0x00, // There aren't any quests available.           | "No Mark" 
     41        QMGR_QUEST_AVAILABLELOW_LEVEL                           = 0x01, // Quest available, and your level isn't enough.| "Gray Quotation Mark !" 
     42        QMGR_QUEST_CHAT                                                         = 0x02, // Quest available it shows a talk balloon.     | "No Mark" 
     43        // On 3.1.2 0x03 and 0x04 is some new status, so the old ones are now shifted by 2 (0x03->0x05 and so on).  
     44        QMGR_QUEST_REPEATABLE_FINISHED_LOWLEVEL         = 0x03,  
     45        QMGR_QUEST_REPEATABLE_LOWLEVEL                          = 0x04,  
     46        QMGR_QUEST_NOT_FINISHED                                         = 0x05, // Quest isn't finished yet.                    | "Gray Question ? Mark" 
     47        QMGR_QUEST_REPEATABLE_FINISHED                          = 0x06, 
     48        QMGR_QUEST_REPEATABLE                                           = 0x07, // Quest repeatable                             | "Blue Question ? Mark"  
     49        QMGR_QUEST_AVAILABLE                                            = 0x08, // Quest available, and your level is enough    | "Yellow Quotation ! Mark"  
     50        QMGR_QUEST_FINISHED                                                     = 0x0A, // Quest has been finished.                     | "Yellow Question  ? Mark" (7 has no minimap icon) 
     51        //QUEST_ITEM_UPDATE                                                     = 0x06  // Yellow Question "?" Mark. //Unknown 
    5252}; 
    5353 
     
    285285        ARCEMU_INLINE uint32 GetBaseField(uint32 slot) 
    286286        { 
    287                 return PLAYER_QUEST_LOG_1_1 + (slot * 4); 
     287                return PLAYER_QUEST_LOG_1_1 + (slot * 5); 
    288288        } 
    289289 
  • trunk/src/arcemu-world/QuestHandler.cpp

    r3131 r3153  
    117117        uint32 quest_id; 
    118118        uint32 status = 0; 
     119        uint8 unk; 
    119120 
    120121        recv_data >> guid; 
    121122        recv_data >> quest_id; 
     123        recv_data >> unk; 
    122124 
    123125        Object *qst_giver = NULL; 
  • trunk/src/arcemu-world/QuestMgr.cpp

    r3152 r3153  
    303303        uint32 i = 0; 
    304304        data->SetOpcode(SMSG_QUESTGIVER_OFFER_REWARD); 
    305         *data << qst_giver->GetGUID(); 
    306         *data << qst->id; 
     305        *data << uint64(qst_giver->GetGUID()); 
     306        *data << uint32(qst->id); 
    307307 
    308308        if( lq ) 
     
    359359        } 
    360360         
    361  
     361        *data << uint32(0); 
    362362        *data << GenerateRewardMoney( plr, qst ); 
    363         *data << qst->bonushonor; 
     363        *data << (qst->bonushonor * 10); 
     364        *data << float(0); 
    364365    *data << float( 0 ); 
    365366        *data << uint32(0); 
     
    368369        *data << qst->rewardtitleid; 
    369370        *data << qst->rewardtalents; 
    370     *data << uint32( 0 ); 
    371     *data << uint32( 0 ); 
    372  
    373     for( i = 0; i < 5; ++i ) 
    374         *data << uint32( 0 ); 
    375  
    376     for( i = 0; i < 5; ++i ) 
    377         *data << uint32( 0 ); 
    378  
    379     for( i = 0; i < 5; ++i ) 
    380         *data << uint32( 0 ); 
     371        *data << uint32(0);  
     372        *data << uint32(0);  
     373        for(int i = 0; i < 5; ++i)              // reward factions ids  
     374        *data << uint32(0);  
     375        for(int i = 0; i < 5; ++i)              // columnid in QuestFactionReward.dbc (zero based)?  
     376        *data << uint32(0);  
     377        for(int i = 0; i < 5; ++i)              // reward reputation override?  
     378        *data << uint32(0);  
    381379} 
    382380 
     
    409407        *data << uint8(0);                                              // Added in 3.0.2, name or text(?) 
    410408        *data << uint8(0); //VLack: some 3.1.x thing 
    411     *data << uint8( 0 ); 
    412  
     409        *data << uint8(0); //new 3.3 
    413410        ItemPrototype *ip; 
    414411        uint32 i; 
     
    440437 
    441438        *data << GenerateRewardMoney( plr, qst );       // Money reward 
    442     *data << uint32( 0 ); 
    443         *data << qst->bonushonor;                                       // Honor reward 
     439        *data << uint32(0); //New 3.3 
     440        *data << (qst->bonushonor * 10);                                        // Honor reward 
     441        *data << float(0); //New 3.3 
    444442    *data << float( 0 ); 
    445443        *data << qst->reward_spell;                                     // this is the spell (id) the quest finisher teaches you, or the icon of the spell if effect_on_player is not 0 
     
    447445        *data << qst->rewardtitleid;                            // Title reward (ID) 
    448446        *data << qst->rewardtalents;                            // Talent reward 
    449     *data << uint32( 0 ); 
    450     *data << uint32( 0 ); 
    451  
     447        *data << uint32(0);                                                     // new 3.3.0  
     448        *data << uint32(0);                                                     // new 3.3.0  
     449        for(int i = 0; i < 5; ++i)  
     450        *data << uint32(0);  
     451        for(int i = 0; i < 5; ++i)  
     452        *data << uint32(0);  
     453        for(int i = 0; i < 5; ++i)  
     454        *data << uint32(0);  
    452455    for( i = 0; i < 5; ++i ) 
    453456        *data << uint32( 0 ); 
     
    501504 
    502505        // (loop for each item) 
    503         for(uint32 i = 0; i < 4; ++i) 
     506        for(uint32 i = 0; i < 6; ++i) 
    504507        { 
    505508                if(qst->required_item[i] != 0) 
    506509                { 
    507                         *data << qst->required_item[i]; 
    508                         *data << qst->required_itemcount[i]; 
    509                         it = ItemPrototypeStorage.LookupEntry(qst->required_item[i]); 
    510                         *data << (it ? it->DisplayInfoID : uint32(0)); 
    511                 } 
     510                        *data << qst->required_item[i];  
     511                        *data << qst->required_itemcount[i];  
     512                        it = ItemPrototypeStorage.LookupEntry(qst->required_item[i]);  
     513                        *data << (it ? it->DisplayInfoID : uint32(0));  
     514                } 
     515                else  
     516                {  
     517                        *data << uint32(0);  
     518                        *data << uint32(0);  
     519                        *data << uint32(0);  
     520                }  
     521                        *data << uint32(0);  
     522                        *data << uint32(0);  
     523                        *data << uint32(0);  
     524                        *data << uint32(0);  
     525                        *data << uint32(0);  
     526                        *data << uint32(0);  
    512527        } 
    513528 
     
    519534        else 
    520535        { 
    521                 *data << uint32(2); 
    522         } 
    523  
     536                *data << uint32(3); 
     537        } 
     538 
     539        *data << uint32(4); 
    524540        *data << uint32(8); 
    525541        *data << uint32(10); 
     
    553569        data << uint32( xp ); 
    554570        data << uint32( GenerateRewardMoney( plr, qst ) ); 
    555         data << uint32( 0 ); 
     571        data << uint32(qst->bonushonor * 10); 
    556572        data << uint32( rewardtalents ); 
    557573        data << uint32( qst->count_reward_item ); //Reward item count 
  • trunk/src/arcemu-world/SpellFixes.cpp

    r3137 r3153  
    17871787                sp->Effect[0] = SPELL_EFFECT_NULL;  
    17881788        //Invincible 
    1789         /*sp = dbcSpell.LookupEntryForced( 72286 ); not yet handled in ItemSpells_1.cpp 
     1789        sp = dbcSpell.LookupEntryForced( 72286 );  
    17901790        if( sp != NULL ) 
    1791                 sp->Effect[0] = SPELL_EFFECT_NULL; */ 
     1791                sp->Effect[0] = SPELL_EFFECT_NULL;  
    17921792 
    17931793        //////////////////////////////////////////////////////