Changeset 3153
- Timestamp:
- 02/06/2010 11:46:09 AM (7 months ago)
- Location:
- trunk
- Files:
-
- 21 modified
-
extras/map_extractor/adt.cpp (modified) (1 diff)
-
src/arcemu-shared/AuthCodes.h (modified) (3 diffs)
-
src/arcemu-world/BattlegroundMgr.cpp (modified) (2 diffs)
-
src/arcemu-world/Chat.h (modified) (1 diff)
-
src/arcemu-world/ChatHandler.cpp (modified) (2 diffs)
-
src/arcemu-world/Group.cpp (modified) (5 diffs)
-
src/arcemu-world/Group.h (modified) (1 diff)
-
src/arcemu-world/GuildHandler.cpp (modified) (4 diffs)
-
src/arcemu-world/Level1.cpp (modified) (2 diffs)
-
src/arcemu-world/LfgMgr.cpp (modified) (1 diff)
-
src/arcemu-world/LootMgr.cpp (modified) (8 diffs)
-
src/arcemu-world/LootMgr.h (modified) (1 diff)
-
src/arcemu-world/MailSystem.cpp (modified) (1 diff)
-
src/arcemu-world/Master.h (modified) (1 diff)
-
src/arcemu-world/ObjectMgr.h (modified) (1 diff)
-
src/arcemu-world/PlayerPacketWrapper.cpp (modified) (1 diff)
-
src/arcemu-world/Quest.cpp (modified) (7 diffs)
-
src/arcemu-world/Quest.h (modified) (2 diffs)
-
src/arcemu-world/QuestHandler.cpp (modified) (1 diff)
-
src/arcemu-world/QuestMgr.cpp (modified) (9 diffs)
-
src/arcemu-world/SpellFixes.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/extras/map_extractor/adt.cpp
r2910 r3153 339 339 340 340 } 341 if(fourcc=0xefb88b70) 342 { 343 nextpos = mf.getPos() + 0x1199; 344 } 345 341 346 else 342 347 /*if(fourcc==0x4d434c51) //MCLQ -
trunk/src/arcemu-shared/AuthCodes.h
r3131 r3153 21 21 #define _AUTHCODES_H 22 22 23 // client 3. 2.2a, 2009/10/0623 // client 3.3.0, 2009/12/20 24 24 enum LoginErrorCode 25 25 { … … 99 99 E_CHAR_CREATE_CHARACTER_RACE_ONLY = 0x43, 100 100 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, 137 138 }; 138 139 … … 213 214 #define CHAR_CREATE_CHARACTER_RACE_ONLY "\x43" 214 215 #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" 251 253 252 254 #endif -
trunk/src/arcemu-world/BattlegroundMgr.cpp
r3151 r3153 1451 1451 data << uint32(6); 1452 1452 data << uint16(0x1F90); 1453 data << uint8(0); // 3.3.0 1454 data << uint8(0); // 3.3.0 1453 1455 data << uint32(11); 1454 1456 data << uint8(RatedMatch); // 1 = rated match … … 1459 1461 data << uint8(0) << uint8(2); 1460 1462 data << Type; 1463 data << uint8(0); // 3.3.0 1464 data << uint8(0); // 3.3.0 1461 1465 data << uint16(0x1F90); 1462 1466 data << InstanceID; -
trunk/src/arcemu-world/Chat.h
r3131 r3153 81 81 CHAT_MSG_ACHIEVEMENT = 48, 82 82 CHAT_MSG_GUILD_ACHIEVEMENT = 49, 83 CHAT_MSG_PARTY_LEADER = 51, 83 84 }; 84 85 -
trunk/src/arcemu-world/ChatHandler.cpp
r3132 r3153 131 131 case CHAT_MSG_EMOTE: 132 132 case CHAT_MSG_PARTY: 133 case CHAT_MSG_PARTY_LEADER: 133 134 case CHAT_MSG_RAID: 134 135 case CHAT_MSG_RAID_LEADER: … … 241 242 } break; 242 243 case CHAT_MSG_PARTY: 244 case CHAT_MSG_PARTY_LEADER: 243 245 case CHAT_MSG_RAID: 244 246 case CHAT_MSG_RAID_LEADER: -
trunk/src/arcemu-world/Group.cpp
r3131 r3153 296 296 //data << uint64(0); // unk3 297 297 data << uint64(0x500000000004BC0CULL); 298 data << uint32(0); // 3.3 - increments every time a group list update is being sent to client 298 299 data << uint32(m_MemberCount-1); // we don't include self 299 300 … … 313 314 continue; 314 315 315 data << (*itr2)->name << (*itr2)->guid << uint32(0); // highguid 316 data << (*itr2)->name; 317 data << (*itr2)->guid << uint32(0); // highguid 316 318 317 319 if( (*itr2)->m_loggedInPlayer != NULL ) … … 332 334 333 335 data << flags; 336 data << uint8(0); // 3.3 - may have some use 334 337 } 335 338 } … … 351 354 data << uint8( m_difficulty ); 352 355 data << uint8( m_raiddifficulty ); 356 data << uint8( 0 ); // 3.3 - unk 353 357 354 358 if( !(*itr1)->m_loggedInPlayer->IsInWorld() ) … … 750 754 void Group::SendNullUpdate( Player *pPlayer ) 751 755 { 752 // this packet is 2 4 bytes long. // AS OF 2.1.0753 uint8 buffer[2 4];754 memset(buffer, 0, 2 4);755 pPlayer->GetSession()->OutPacket( SMSG_GROUP_LIST, 2 4, 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 ); 756 760 } 757 761 -
trunk/src/arcemu-world/Group.h
r3131 r3153 38 38 enum GroupTypes 39 39 { 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, 42 45 }; 43 46 -
trunk/src/arcemu-world/GuildHandler.cpp
r3131 r3153 528 528 // Arena team charters are full of crap 529 529 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; 537 536 uint32 crap11; 537 uint32 crap12, PetitionSignerCount; 538 string PetitionSignerNames[9]; 539 uint32 crap13, arena_index; 538 540 539 541 … … 541 543 recv_data >> crap >> crap2; 542 544 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]; 545 547 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; 548 558 549 559 … … 624 634 c->ItemGuid = i->GetGUID(); 625 635 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); 627 645 i->SoulBind(); 628 646 i->SetEnchantmentId( 0, c->GetID() ); … … 697 715 c->ItemGuid = i->GetGUID(); 698 716 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)); 699 724 700 725 i->SetStackCount( 1); -
trunk/src/arcemu-world/Level1.cpp
r3131 r3153 201 201 obj = (Object*)m_session->GetPlayer(); 202 202 203 char buf[328]; 203 204 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 207 213 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", 208 214 (unsigned int)obj->GetMapId(), at->ZoneId,at->AreaId, obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), obj->GetOrientation(),at->name); … … 950 956 return true; 951 957 } 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; 957 961 Pl->smsg_TalentsInfo(false); 958 962 return true; -
trunk/src/arcemu-world/LfgMgr.cpp
r3131 r3153 87 87 } 88 88 89 void LfgMgr::SetPlayerInLFGqueue(Player *pl, uint32 LfgDungeonId)89 void LfgMgr::SetPlayerInLFGqueue(Player *pl, uint32 LfgDungeonId) 90 90 { 91 91 if( pl == NULL ) -
trunk/src/arcemu-world/LootMgr.cpp
r3131 r3153 651 651 #define GREED 2 652 652 653 LootRoll::LootRoll(uint32 timer, uint32 groupcount, uint64 guid, uint32 slotid, uint32 itemid, uint32 itemunk1, uint32 itemunk2, MapMgr * mgr) : EventableObject()653 LootRoll::LootRoll(uint32 timer, uint32 groupcount, uint64 guid, uint32 slotid, uint32 itemid, uint32 randomsuffixid, uint32 randompropertyid, MapMgr * mgr) : EventableObject() 654 654 { 655 655 _mgr = mgr; … … 659 659 _slotid = slotid; 660 660 _itemid = itemid; 661 _ itemunk1 = itemunk1;662 _ itemunk2 = itemunk2;661 _randomsuffixid = randomsuffixid; 662 _randompropertyid = randompropertyid; 663 663 _remaining = groupcount; 664 664 } … … 711 711 data.Initialize(SMSG_LOOT_ROLL); 712 712 data << _guid << _slotid << itr->first; 713 data << _itemid << _ itemunk1 << _itemunk2;713 data << _itemid << _randomsuffixid << _randompropertyid; 714 714 data << uint8(itr->second) << uint8(NEED); 715 715 if(gplr && gplr->GetGroup()) … … 731 731 data.Initialize(SMSG_LOOT_ROLL); 732 732 data << _guid << _slotid << itr->first; 733 data << _itemid << _ itemunk1 << _itemunk2;733 data << _itemid << _randomsuffixid << _randompropertyid; 734 734 data << uint8(itr->second) << uint8(GREED); 735 735 if(gplr && gplr->GetGroup()) … … 779 779 /* all passed */ 780 780 data.Initialize(SMSG_LOOT_ALL_PASSED); 781 data << _guid << _groupcount << _itemid << _ itemunk1 << _itemunk2;781 data << _guid << _groupcount << _itemid << _randomsuffixid << _randompropertyid; 782 782 set<uint32>::iterator pitr = m_passRolls.begin(); 783 783 while(_player == NULL && pitr != m_passRolls.end()) … … 800 800 pLoot->items.at(_slotid).roll = 0; 801 801 data.Initialize(SMSG_LOOT_ROLL_WON); 802 data << _guid << _slotid << _itemid << _ itemunk1 << _itemunk2;802 data << _guid << _slotid << _itemid << _randomsuffixid << _randompropertyid; 803 803 data << _player->GetGUID() << uint8(highest) << uint8(hightype); 804 804 if(_player->InGroup()) … … 892 892 data.SetOpcode(SMSG_LOOT_ROLL); 893 893 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 { 897 898 m_NeedRolls.insert( std::make_pair(player->GetLowGUID(), roll) ); 898 899 data << uint8(roll) << uint8(NEED); … … 909 910 data << uint8(128) << uint8(128); 910 911 } 912 913 data << uint8( 0 ); // Requires research - possibly related to disenchanting of loot 911 914 912 915 if(player->InGroup()) -
trunk/src/arcemu-world/LootMgr.h
r3131 r3153 50 50 uint32 _slotid; 51 51 uint32 _itemid; 52 uint32 _ itemunk1;53 uint32 _ itemunk2;52 uint32 _randomsuffixid; 53 uint32 _randompropertyid; 54 54 uint32 _remaining; 55 55 uint64 _guid; -
trunk/src/arcemu-world/MailSystem.cpp
r3131 r3153 419 419 message->read_flag = 1; 420 420 421 // mail now has a 3 day expiry time421 // mail now has a 30 day expiry time 422 422 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); 424 424 425 425 // update it in sql -
trunk/src/arcemu-world/Master.h
r3131 r3153 29 29 30 30 #ifndef _VERSION 31 # define _VERSION "3. 2.0"31 # define _VERSION "3.3.0" 32 32 #endif 33 33 -
trunk/src/arcemu-world/ObjectMgr.h
r3131 r3153 315 315 uint32 CharterId; 316 316 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]; 317 328 318 329 Charter(Field * fields); -
trunk/src/arcemu-world/PlayerPacketWrapper.cpp
r3140 r3153 532 532 533 533 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 535 536 } 536 537 -
trunk/src/arcemu-world/Quest.cpp
r3152 r3153 33 33 uint32 i; 34 34 35 *data << uint32(qst->id); // Quest ID36 *data << uint32(2); // Unknown, always seems to be 235 *data << uint32(qst->id); // Quest ID 36 *data << uint32(2); // Unknown, always seems to be 2 37 37 *data << uint32(qst->max_level); // Quest level 38 *data << uint32( 0 ); 39 38 *data << uint32(qst->min_level); // Quest required level 40 39 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 / Type46 *data << qst->suggestedplayers; // suggested players47 *data << uint32(qst->required_rep_faction); // Faction ID48 *data << uint32(qst->required_rep_value); // Faction Amount49 *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) 51 50 *data << uint32(qst->next_quest_id); // Next Quest ID 52 *data << uint32( 0 ); 53 *data << uint32( sQuestMgr.GenerateRewardMoney( _player, qst ) ); // Copper reward54 *data << uint32(qst->reward_money<0 ? -qst->reward_money : 0); // Required Money55 *data << uint32(qst->effect_on_player); // Spell casted on player upon completion56 *data << uint32(qst->reward_spell); // Spell added to spellbook upon completion57 *data << float( 0 ); 58 *data << qst->bonushonor; // 2.3.0 - bonushonor59 *data << uint32(qst->srcitem); // Item given at the start of a quest (srcitem)60 *data << uint32(qst->quest_flags); // Quest Flags61 *data << qst->rewardtitleid; // 2.4.0 unk51 *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 62 61 *data << uint32( 0 ); // playerkillcount 63 62 *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 67 65 for( i = 0; i < 5; ++i ) 68 66 *data << uint32( 0 ); … … 77 75 for(i = 0; i < 4; ++i) 78 76 { 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] 81 79 } 82 80 … … 84 82 for(i = 0; i < 6; ++i) 85 83 { 86 *data << qst->reward_choiceitem[i]; // Choice Reward Item [i]84 *data << qst->reward_choiceitem[i]; // Choice Reward Item [i] 87 85 *data << qst->reward_choiceitemcount[i]; // Choice Reward Item Count [i] 88 86 } 89 87 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 93 107 *data << qst->point_opt; // Unknown 94 108 … … 99 113 *data << lci->Details; 100 114 *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" 108 124 } 109 125 … … 112 128 for(i = 0; i < 4; ++i) 113 129 { 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 117 134 } 118 135 119 136 for(i = 0; i < 6; ++i) 120 137 { 121 *data << qst->required_item[i]; // Collect item [i]138 *data << qst->required_item[i]; // Collect item [i] 122 139 *data << qst->required_itemcount[i]; // Collect item count [i] 123 140 } … … 420 437 421 438 // next field is count (kills, etc) 422 uint 32field1 = 0;439 uint64 field1 = 0; 423 440 424 441 // explored areas … … 496 513 { 497 514 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]; 499 516 } 500 517 } 501 518 502 519 m_plr->SetUInt32Value(base + 1, field0); 503 m_plr->SetUInt 32Value(base + 2, field1);520 m_plr->SetUInt64Value(base + 2, field1); 504 521 m_plr->SetUInt32Value(base + 3, ( m_time_left ? (uint32)(UNIXTIME+m_time_left/1000) : 0 ) ); 505 522 } -
trunk/src/arcemu-world/Quest.h
r3131 r3153 38 38 enum QUEST_STATUS 39 39 { 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. //Unknown40 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 52 52 }; 53 53 … … 285 285 ARCEMU_INLINE uint32 GetBaseField(uint32 slot) 286 286 { 287 return PLAYER_QUEST_LOG_1_1 + (slot * 4);287 return PLAYER_QUEST_LOG_1_1 + (slot * 5); 288 288 } 289 289 -
trunk/src/arcemu-world/QuestHandler.cpp
r3131 r3153 117 117 uint32 quest_id; 118 118 uint32 status = 0; 119 uint8 unk; 119 120 120 121 recv_data >> guid; 121 122 recv_data >> quest_id; 123 recv_data >> unk; 122 124 123 125 Object *qst_giver = NULL; -
trunk/src/arcemu-world/QuestMgr.cpp
r3152 r3153 303 303 uint32 i = 0; 304 304 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); 307 307 308 308 if( lq ) … … 359 359 } 360 360 361 361 *data << uint32(0); 362 362 *data << GenerateRewardMoney( plr, qst ); 363 *data << qst->bonushonor; 363 *data << (qst->bonushonor * 10); 364 *data << float(0); 364 365 *data << float( 0 ); 365 366 *data << uint32(0); … … 368 369 *data << qst->rewardtitleid; 369 370 *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); 381 379 } 382 380 … … 409 407 *data << uint8(0); // Added in 3.0.2, name or text(?) 410 408 *data << uint8(0); //VLack: some 3.1.x thing 411 *data << uint8( 0 ); 412 409 *data << uint8(0); //new 3.3 413 410 ItemPrototype *ip; 414 411 uint32 i; … … 440 437 441 438 *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 444 442 *data << float( 0 ); 445 443 *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 … … 447 445 *data << qst->rewardtitleid; // Title reward (ID) 448 446 *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); 452 455 for( i = 0; i < 5; ++i ) 453 456 *data << uint32( 0 ); … … 501 504 502 505 // (loop for each item) 503 for(uint32 i = 0; i < 4; ++i)506 for(uint32 i = 0; i < 6; ++i) 504 507 { 505 508 if(qst->required_item[i] != 0) 506 509 { 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); 512 527 } 513 528 … … 519 534 else 520 535 { 521 *data << uint32(2); 522 } 523 536 *data << uint32(3); 537 } 538 539 *data << uint32(4); 524 540 *data << uint32(8); 525 541 *data << uint32(10); … … 553 569 data << uint32( xp ); 554 570 data << uint32( GenerateRewardMoney( plr, qst ) ); 555 data << uint32( 0);571 data << uint32(qst->bonushonor * 10); 556 572 data << uint32( rewardtalents ); 557 573 data << uint32( qst->count_reward_item ); //Reward item count -
trunk/src/arcemu-world/SpellFixes.cpp
r3137 r3153 1787 1787 sp->Effect[0] = SPELL_EFFECT_NULL; 1788 1788 //Invincible 1789 /*sp = dbcSpell.LookupEntryForced( 72286 ); not yet handled in ItemSpells_1.cpp1789 sp = dbcSpell.LookupEntryForced( 72286 ); 1790 1790 if( sp != NULL ) 1791 sp->Effect[0] = SPELL_EFFECT_NULL; */1791 sp->Effect[0] = SPELL_EFFECT_NULL; 1792 1792 1793 1793 //////////////////////////////////////////////////////