Index: sql/mangos.sql =================================================================== --- sql/mangos.sql (revision 3628) +++ sql/mangos.sql (working copy) @@ -1372,6 +1372,20 @@ `sound7` int(11) unsigned NOT NULL default '0', `sound8` int(11) unsigned NOT NULL default '0', `sound9` int(11) unsigned NOT NULL default '0', + `sound10` int(11) unsigned NOT NULL default '0', + `sound11` int(11) unsigned NOT NULL default '0', + `sound12` int(11) unsigned NOT NULL default '0', + `sound13` int(11) unsigned NOT NULL default '0', + `sound14` int(11) unsigned NOT NULL default '0', + `sound15` int(11) unsigned NOT NULL default '0', + `sound16` int(11) unsigned NOT NULL default '0', + `sound17` int(11) unsigned NOT NULL default '0', + `sound18` int(11) unsigned NOT NULL default '0', + `sound19` int(11) unsigned NOT NULL default '0', + `sound20` int(11) unsigned NOT NULL default '0', + `sound21` int(11) unsigned NOT NULL default '0', + `sound22` int(11) unsigned NOT NULL default '0', + `sound23` int(11) unsigned NOT NULL default '0', `ScriptName` varchar(100) NOT NULL default '', PRIMARY KEY (`entry`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Gameobject System'; Index: sql/updates/3629_gameobject_template.sql =================================================================== --- sql/updates/3629_gameobject_template.sql (revision 0) +++ sql/updates/3629_gameobject_template.sql (revision 0) @@ -0,0 +1,15 @@ +ALTER TABLE `gameobject_template` +ADD COLUMN `sound10` int(11) unsigned NOT NULL default '0' AFTER `sound9`, +ADD COLUMN `sound11` int(11) unsigned NOT NULL default '0' AFTER `sound10`, +ADD COLUMN `sound12` int(11) unsigned NOT NULL default '0' AFTER `sound11`, +ADD COLUMN `sound13` int(11) unsigned NOT NULL default '0' AFTER `sound12`, +ADD COLUMN `sound14` int(11) unsigned NOT NULL default '0' AFTER `sound13`, +ADD COLUMN `sound15` int(11) unsigned NOT NULL default '0' AFTER `sound14`, +ADD COLUMN `sound16` int(11) unsigned NOT NULL default '0' AFTER `sound15`, +ADD COLUMN `sound17` int(11) unsigned NOT NULL default '0' AFTER `sound16`, +ADD COLUMN `sound18` int(11) unsigned NOT NULL default '0' AFTER `sound17`, +ADD COLUMN `sound19` int(11) unsigned NOT NULL default '0' AFTER `sound18`, +ADD COLUMN `sound20` int(11) unsigned NOT NULL default '0' AFTER `sound19`, +ADD COLUMN `sound21` int(11) unsigned NOT NULL default '0' AFTER `sound20`, +ADD COLUMN `sound22` int(11) unsigned NOT NULL default '0' AFTER `sound21`, +ADD COLUMN `sound23` int(11) unsigned NOT NULL default '0' AFTER `sound22`; Index: src/game/BattleGround.cpp =================================================================== --- src/game/BattleGround.cpp (revision 3628) +++ src/game/BattleGround.cpp (working copy) @@ -709,10 +709,10 @@ bool BattleGround::CanStartBattleGround() { - if(GetStatus() >= STATUS_WAIT_JOIN) // already started or ended + if(GetStatus() >= STATUS_WAIT_JOIN) // already started or ended return false; - if(GetQueuedPlayersSize() < GetMaxPlayers()) + if(GetQueuedPlayersSize() < GetMinPlayers()) // queue is not ready yet return false; uint8 hordes = 0; Index: src/game/BattleGroundMgr.cpp =================================================================== --- src/game/BattleGroundMgr.cpp (revision 3628) +++ src/game/BattleGroundMgr.cpp (working copy) @@ -206,15 +206,17 @@ (*data) << plr->GetGUID(); } -uint32 BattleGroundMgr::CreateBattleGround(uint32 bg_ID, uint32 MinPlayersPerTeam, uint32 MaxPlayersPerTeam, uint32 LevelMin, uint32 LevelMax, char* BattleGroundName, uint32 MapID, float Team1StartLocX, float Team1StartLocY, float Team1StartLocZ, float Team1StartLocO, float Team2StartLocX, float Team2StartLocY, float Team2StartLocZ, float Team2StartLocO) +uint32 BattleGroundMgr::CreateBattleGround(uint32 bg_ID, uint32 MaxPlayersPerTeam, uint32 LevelMin, uint32 LevelMax, char* BattleGroundName, uint32 MapID, float Team1StartLocX, float Team1StartLocY, float Team1StartLocZ, float Team1StartLocO, float Team2StartLocX, float Team2StartLocY, float Team2StartLocZ, float Team2StartLocO) { // Create the BG BattleGround *bg = new BattleGround; - bg->SetInstanceID(bg_ID); // temporary + bg->SetID(bg_ID); + bg->SetInstanceID(bg_ID); // temporary bg->SetMapId(MapID); - bg->SetMinPlayersPerTeam(MinPlayersPerTeam); + bg->SetMinPlayersPerTeam(MaxPlayersPerTeam/2); bg->SetMaxPlayersPerTeam(MaxPlayersPerTeam); + bg->SetMinPlayers(MaxPlayersPerTeam); bg->SetMaxPlayers(MaxPlayersPerTeam*2); bg->SetName(BattleGroundName); bg->SetTeamStartLoc(ALLIANCE, Team1StartLocX, Team1StartLocY, Team1StartLocZ, Team1StartLocO); @@ -251,8 +253,6 @@ bg->BerserkBonus2 = BerserkBonus2; } - bg->SetID(bg_ID); - AddBattleGround(bg_ID, bg); sLog.outDetail("BattleGroundMgr: Created new battleground: %u %s (Map %u, %u players per team, Levels %u-%u)", bg_ID, bg->m_Name, bg->m_MapId, bg->m_MaxPlayersPerTeam, bg->m_LevelMin, bg->m_LevelMax); return bg_ID; @@ -279,7 +279,7 @@ HStartLoc[3] = 2.27452f; // todo: find correct coords sLog.outDetail("Creating battleground %s, %u-%u", bl->name, bl->minlvl, bl->maxlvl); - CreateBattleGround(bg_ID, bl->minplayers, bl->maxplayers, bl->minlvl, bl->maxlvl, bl->name, bl->mapid1, AStartLoc[0], AStartLoc[1], AStartLoc[2], AStartLoc[3], HStartLoc[0], HStartLoc[1], HStartLoc[2], HStartLoc[3]); + CreateBattleGround(bg_ID, bl->maxplayersperteam, bl->minlvl, bl->maxlvl, bl->name, bl->mapid1, AStartLoc[0], AStartLoc[1], AStartLoc[2], AStartLoc[3], HStartLoc[0], HStartLoc[1], HStartLoc[2], HStartLoc[3]); // Create BG, WSG bg_ID = 2; @@ -295,7 +295,7 @@ HStartLoc[3] = 3.141593f; sLog.outDetail("Creating battleground %s, %u-%u", bl->name, bl->minlvl, bl->maxlvl); - CreateBattleGround(bg_ID, bl->minplayers, bl->maxplayers, bl->minlvl, bl->maxlvl, bl->name, bl->mapid1, AStartLoc[0], AStartLoc[1], AStartLoc[2], AStartLoc[3], HStartLoc[0], HStartLoc[1], HStartLoc[2], HStartLoc[3]); + CreateBattleGround(bg_ID, bl->maxplayersperteam, bl->minlvl, bl->maxlvl, bl->name, bl->mapid1, AStartLoc[0], AStartLoc[1], AStartLoc[2], AStartLoc[3], HStartLoc[0], HStartLoc[1], HStartLoc[2], HStartLoc[3]); // Create BG, AB bg_ID = 3; @@ -311,7 +311,7 @@ HStartLoc[3] = 0.263892f; // todo: find correct coords sLog.outDetail("Creating battleground %s, %u-%u", bl->name, bl->minlvl, bl->maxlvl); - CreateBattleGround(bg_ID, bl->minplayers, bl->maxplayers, bl->minlvl, bl->maxlvl, bl->name, bl->mapid1, AStartLoc[0], AStartLoc[1], AStartLoc[2], AStartLoc[3], HStartLoc[0], HStartLoc[1], HStartLoc[2], HStartLoc[3]); + CreateBattleGround(bg_ID, bl->maxplayersperteam, bl->minlvl, bl->maxlvl, bl->name, bl->mapid1, AStartLoc[0], AStartLoc[1], AStartLoc[2], AStartLoc[3], HStartLoc[0], HStartLoc[1], HStartLoc[2], HStartLoc[3]); // Create BG, EotS bg_ID = 7; @@ -327,7 +327,7 @@ HStartLoc[3] = 0.263892f; // todo: find coords sLog.outDetail("Creating battleground %s, %u-%u", bl->name, bl->minlvl, bl->maxlvl); - CreateBattleGround(bg_ID, bl->minplayers, bl->maxplayers, bl->minlvl, bl->maxlvl, bl->name, bl->mapid1, AStartLoc[0], AStartLoc[1], AStartLoc[2], AStartLoc[3], HStartLoc[0], HStartLoc[1], HStartLoc[2], HStartLoc[3]); + CreateBattleGround(bg_ID, bl->maxplayersperteam, bl->minlvl, bl->maxlvl, bl->name, bl->mapid1, AStartLoc[0], AStartLoc[1], AStartLoc[2], AStartLoc[3], HStartLoc[0], HStartLoc[1], HStartLoc[2], HStartLoc[3]); sLog.outDetail("Created initial battlegrounds."); } Index: src/game/BattleGroundMgr.h =================================================================== --- src/game/BattleGroundMgr.h (revision 3628) +++ src/game/BattleGroundMgr.h (working copy) @@ -53,7 +53,7 @@ return NULL; }; - uint32 CreateBattleGround(uint32 bg_ID, uint32 MinPlayersPerTeam, uint32 MaxPlayersPerTeam, uint32 LevelMin, uint32 LevelMax, char* BattleGroundName, uint32 MapID, float Team1StartLocX, float Team1StartLocY, float Team1StartLocZ, float Team1StartLocO, float Team2StartLocX, float Team2StartLocY, float Team2StartLocZ, float Team2StartLocO); + uint32 CreateBattleGround(uint32 bg_ID, uint32 MaxPlayersPerTeam, uint32 LevelMin, uint32 LevelMax, char* BattleGroundName, uint32 MapID, float Team1StartLocX, float Team1StartLocY, float Team1StartLocZ, float Team1StartLocO, float Team2StartLocX, float Team2StartLocY, float Team2StartLocZ, float Team2StartLocO); inline void AddBattleGround(uint32 ID, BattleGround* BG) { m_BattleGrounds[ID] = BG; }; Index: src/game/GameObject.h =================================================================== --- src/game/GameObject.h (revision 3628) +++ src/game/GameObject.h (working copy) @@ -51,6 +51,20 @@ uint32 sound7; uint32 sound8; uint32 sound9; + uint32 sound10; + uint32 sound11; + uint32 sound12; + uint32 sound13; + uint32 sound14; + uint32 sound15; + uint32 sound16; + uint32 sound17; + uint32 sound18; + uint32 sound19; + uint32 sound20; + uint32 sound21; + uint32 sound22; + uint32 sound23; char *ScriptName; }; Index: src/game/Level3.cpp =================================================================== --- src/game/Level3.cpp (revision 3628) +++ src/game/Level3.cpp (working copy) @@ -3104,7 +3104,7 @@ player->SetUInt32Value(UNIT_FIELD_BYTES_1, player->m_form<<16 | unitfield ); player->SetUInt32Value(UNIT_FIELD_BYTES_2, 0x2800 ); // 0x2800, 0x2801 2.0.8... - player->SetUInt32Value(UNIT_FIELD_FLAGS , UNIT_FLAG_NONE | UNIT_FLAG_UNKNOWN1 ); + player->SetUInt32Value(UNIT_FIELD_FLAGS , UNIT_FLAG_UNKNOWN1 ); //-1 is default value player->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1)); Index: src/game/Opcodes.h =================================================================== --- src/game/Opcodes.h (revision 3628) +++ src/game/Opcodes.h (working copy) @@ -854,7 +854,7 @@ // 807 SMSG_GM_SURVEY_REQUEST = 808, // uint32, 1 - causes client get ticket request, 2 - hide, 3 - show MSG_SET_DUNGEON_DIFFICULTY = 809, // uint32+uint32+uint32 - CMSG_GM_SURVEY_RESULTS = 810, + CMSG_GM_SURVEY_RESULTS = 810, // script function named GMSurveySubmit() SMSG_UNKNOWN_811 = 811, // uint32, 0x0, SMSG_INSTANCE_RESET_ACTIVATE ? // 812 // 813 Index: src/game/Player.h =================================================================== --- src/game/Player.h (revision 3628) +++ src/game/Player.h (working copy) @@ -290,15 +290,15 @@ PLAYER_FLAGS_GHOST = 0x00000010, PLAYER_FLAGS_RESTING = 0x00000020, PLAYER_FLAGS_FFA_PVP = 0x00000080, - PLAYER_FLAGS_UNK = 0x00000100, // 2.0.8, bg related? + PLAYER_FLAGS_UNK = 0x00000100, // show PvP in tooltip PLAYER_FLAGS_IN_PVP = 0x00000200, PLAYER_FLAGS_HIDE_HELM = 0x00000400, PLAYER_FLAGS_HIDE_CLOAK = 0x00000800, - PLAYER_FLAGS_UNK1 = 0x00001000, //played long time - PLAYER_FLAGS_UNK2 = 0x00002000, //played too long time - PLAYER_FLAGS_UNK3 = 0x00008000, //strange visual effect (2.0.1) - PLAYER_FLAGS_UNK4 = 0x00020000, //taxi benchmark mode (on/off) (2.0.1) - PLAYER_UNK = 0x00040000, //2.0.8... + PLAYER_FLAGS_UNK1 = 0x00001000, // played long time + PLAYER_FLAGS_UNK2 = 0x00002000, // played too long time + PLAYER_FLAGS_UNK3 = 0x00008000, // strange visual effect (2.0.1), looks like PLAYER_FLAGS_GHOST flag + PLAYER_FLAGS_UNK4 = 0x00020000, // taxi benchmark mode (on/off) (2.0.1) + PLAYER_UNK = 0x00040000, // 2.0.8... }; enum PlayerKnownTitles Index: src/game/QueryHandler.cpp =================================================================== --- src/game/QueryHandler.cpp (revision 3628) +++ src/game/QueryHandler.cpp (working copy) @@ -131,24 +131,24 @@ data << (uint32)entry; // creature entry data << (unit ? unit->GetName() : ci->Name); // creature name - data << uint8(0) << uint8(0) << uint8(0); // unk 3 x uint8 + data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4, always empty if (unit) data << ((unit->isPet()) ? "Pet" : ci->SubName); // subname else - data << ci->Name; + data << ci->Name; // may be it's typo? must be subname I think... - data << ci->flag1; //flags wdbFeild7=wad flags1 + data << ci->flag1; // flags wdbFeild7=wad flags1 if (unit) - data << (uint32)((unit->isPet()) ? 0 : ci->type); //creatureType wdbFeild8 + data << (uint32)((unit->isPet()) ? 0 : ci->type); // creatureType wdbFeild8 else data << (uint32) ci->type; - data << (uint32)ci->family; //family wdbFeild9 - data << (uint32)(unit && unit->isPet() ? 0 : ci->rank); //rank wdbFeild10 - data << uint32(0); //unknow wdbFeild11 - data << uint32(0); //unknow wdbFeild12 + data << (uint32)ci->family; // family wdbFeild9 + data << (uint32)(unit && unit->isPet() ? 0 : ci->rank); // rank wdbFeild10 + data << uint32(0); // unknown wdbFeild11 + data << uint32(0); // unknown wdbFeild12 if (unit) data << unit->GetUInt32Value(UNIT_FIELD_DISPLAYID); //DisplayID wdbFeild13 @@ -175,60 +175,47 @@ const GameObjectInfo *info = objmgr.GetGameObjectInfo(entryID); // guess size WorldPacket data ( SMSG_GAMEOBJECT_QUERY_RESPONSE, 150 ); - data << entryID; - - if( !info ) + if(!info) { sLog.outDebug( "WORLD: CMSG_GAMEOBJECT_QUERY - Missing game object info for entry %u", entryID); - - data << uint64(0); - data << uint64(0); - data << uint64(0); - data << uint64(0); - data << uint64(0); - data << uint64(0); - data << uint64(0); - data << uint64(0); - data << uint64(0); - data << uint32(0); - data << uint16(0); - data << uint8(0); - - data << uint64(0); // Added in 1.12.x client branch - data << uint64(0); // Added in 1.12.x client branch - data << uint64(0); // Added in 1.12.x client branch - data << uint64(0); // Added in 1.12.x client branch - data << uint8(0); // Added in 1.12.x client branch - SendPacket( &data ); - return; + data << uint32(entryID | 0x80000000); } - - sLog.outDetail("WORLD: CMSG_GAMEOBJECT_QUERY '%s' - Entry: %u - GUID: %u.", info->name, entryID, guid); - - data << (uint32)info->type; - data << (uint32)info->displayId; - data << info->name; - data << uint32(0); // 2.0.3 - data << uint16(0); // 2.0.3 - data << uint32(info->sound0); - data << uint32(info->sound1); - data << uint32(info->sound2); - data << uint32(info->sound3); - data << uint32(info->sound4); - data << uint32(info->sound5); - data << uint32(info->sound6); - data << uint32(info->sound7); - data << uint32(info->sound8); - data << uint32(info->sound9); - - data << uint64(0); - data << uint64(0); - data << uint64(0); - - data << uint64(0); // Added in 1.12.x client branch - data << uint64(0); // Added in 1.12.x client branch - data << uint64(0); // Added in 1.12.x client branch - data << uint64(0); // Added in 1.12.x client branch + else + { + sLog.outDetail("WORLD: CMSG_GAMEOBJECT_QUERY '%s' - Entry: %u - GUID: %u.", info->name, entryID, guid); + data << entryID; + data << (uint32)info->type; + data << (uint32)info->displayId; + data << info->name; + data << uint8(0) << uint8(0) << uint8(0); // name2, name3, name4 + data << uint8(0); // 2.0.3, string + data << uint8(0); // 2.0.3, string + data << uint8(0); // 2.0.3, probably string + data << uint32(info->sound0); + data << uint32(info->sound1); + data << uint32(info->sound2); + data << uint32(info->sound3); + data << uint32(info->sound4); + data << uint32(info->sound5); + data << uint32(info->sound6); + data << uint32(info->sound7); + data << uint32(info->sound8); + data << uint32(info->sound9); + data << uint32(info->sound10); + data << uint32(info->sound11); + data << uint32(info->sound12); + data << uint32(info->sound13); + data << uint32(info->sound14); + data << uint32(info->sound15); + data << uint32(info->sound16); + data << uint32(info->sound17); + data << uint32(info->sound18); + data << uint32(info->sound19); + data << uint32(info->sound20); + data << uint32(info->sound21); + data << uint32(info->sound22); + data << uint32(info->sound23); + } SendPacket( &data ); } @@ -255,16 +242,15 @@ CHECK_PACKET_SIZE(recv_data,4+4+4); uint32 textID; - uint32 uField0, uField1; + uint64 guid; GossipText *pGossip; std::string GossipStr; recv_data >> textID; - sLog.outDetail("WORLD: CMSG_NPC_TEXT_QUERY ID '%u'", textID ); + sLog.outDetail("WORLD: CMSG_NPC_TEXT_QUERY ID '%u'", textID); - recv_data >> uField0 >> uField1; - GetPlayer()->SetUInt32Value(UNIT_FIELD_TARGET, uField0); - GetPlayer()->SetUInt32Value(UNIT_FIELD_TARGET + 1, uField1); + recv_data >> guid; + GetPlayer()->SetUInt64Value(UNIT_FIELD_TARGET, guid); pGossip = objmgr.GetGossipText(textID); Index: src/game/SharedDefines.h =================================================================== --- src/game/SharedDefines.h (revision 3628) +++ src/game/SharedDefines.h (working copy) @@ -395,9 +395,7 @@ GAMEOBJECT_TYPE_LOTTERY_KIOSK = 28, GAMEOBJECT_TYPE_CAPTURE_POINT = 29, GAMEOBJECT_TYPE_AURA_GENERATOR = 30, - GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31, - // Custom gametypes, can create problems at sending to client, - GAMEOBJECT_TYPE_CUSTOM_TELEPORTER = 32, + GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31 }; enum TextEmote Index: src/game/SpellHandler.cpp =================================================================== --- src/game/SpellHandler.cpp (revision 3628) +++ src/game/SpellHandler.cpp (working copy) @@ -449,23 +449,6 @@ obj->Delete(); } break; - case GAMEOBJECT_TYPE_CUSTOM_TELEPORTER: - info = obj->GetGOInfo(); - if(info) - { - AreaTrigger const *at = objmgr.GetAreaTrigger( info->sound0 ); - if(at && at->IsTeleport()) - { - sLog.outDebug( "Teleporting player %u with coordinates X: %f Y: %f Z: %f Orientation: %f Map: %u\n", - _player->GetGUIDLow(), at->target_X,at->target_Y,at->target_Z,at->target_Orientation,at->target_mapId); - _player->TeleportTo(at->target_mapId, at->target_X,at->target_Y,at->target_Z,at->target_Orientation); - sLog.outDebug( "Player %u teleported by %u\n", _player->GetGUIDLow(), info->sound0); - } - else - sLog.outDebug( "Gameobject template %u (type: GAMEOBJECT_TYPE_CUSTOM_TELEPORTER(27)) have wrong areatrigger_template id %u (sound0 field) for teleportation", info->id,info->sound0); - return; - } - break; default: sLog.outDebug( "Unknown Object Type %u\n", obj->GetUInt32Value(GAMEOBJECT_TYPE_ID)); break; Index: src/game/Unit.h =================================================================== --- src/game/Unit.h (revision 3628) +++ src/game/Unit.h (working copy) @@ -239,25 +239,35 @@ // Value masks for UNIT_FIELD_FLAGS enum UnitFlags { - UNIT_FLAG_NONE = 0x00000000, + UNIT_FLAG_UNKNOWN7 = 0x00000001, + UNIT_FLAG_UNKNOWN8 = 0x00000002, // not attackable UNIT_FLAG_DISABLE_MOVE = 0x00000004, - UNIT_FLAG_UNKNOWN1 = 0x00000008, // essential for all units.. - UNIT_FLAG_RENAME = 0x00000010, // rename creature, not working in 2.0.8 + UNIT_FLAG_UNKNOWN1 = 0x00000008, // for all units, make unit attackable even it's friendly in some cases... + UNIT_FLAG_RENAME = 0x00000010, UNIT_FLAG_RESTING = 0x00000020, + UNIT_FLAG_UNKNOWN9 = 0x00000040, + UNIT_FLAG_UNKNOWN10 = 0x00000080, UNIT_FLAG_UNKNOWN2 = 0x00000100, // 2.0.8 - UNIT_FLAG_UNKNOWN3 = 0x00000800, // in combat ?2.0.8 - UNIT_FLAG_PVP = 0x00001000, - UNIT_FLAG_MOUNT = 0x00002000, + UNIT_FLAG_UNKNOWN11 = 0x00000200, + UNIT_FLAG_UNKNOWN12 = 0x00000400, // loot animation + UNIT_FLAG_UNKNOWN3 = 0x00000800, // in combat?, 2.0.8 + UNIT_FLAG_PVP = 0x00001000, // ok + UNIT_FLAG_MOUNT = 0x00002000, // silenced, 2.0.12 UNIT_FLAG_UNKNOWN4 = 0x00004000, // 2.0.8 + UNIT_FLAG_UNKNOWN13 = 0x00008000, + UNIT_FLAG_UNKNOWN14 = 0x00010000, UNIT_FLAG_PACIFIED = 0x00020000, UNIT_FLAG_DISABLE_ROTATE = 0x00040000, // may be it's stunned flag? UNIT_FLAG_IN_COMBAT = 0x00080000, + UNIT_FLAG_UNKNOWN15 = 0x00100000, UNIT_FLAG_DISARMED = 0x00200000, // disable melee spells casting..., "Required melee weapon" added to melee spells tooltip. UNIT_FLAG_CONFUSED = 0x00400000, UNIT_FLAG_FLEEING = 0x00800000, UNIT_FLAG_UNKNOWN5 = 0x01000000, // used in spell Eyes of the Beast for pet... - UNIT_FLAG_NOT_SELECTABLE = 0x02000000, + UNIT_FLAG_NOT_SELECTABLE = 0x02000000, // ok UNIT_FLAG_SKINNABLE = 0x04000000, + UNIT_FLAG_UNKNOWN16 = 0x08000000, + UNIT_FLAG_UNKNOWN17 = 0x10000000, UNIT_FLAG_UNKNOWN6 = 0x20000000, // used in Feing Death spell UNIT_FLAG_SHEATHE = 0x40000000 }; Index: src/shared/Database/DBCfmt.cpp =================================================================== --- src/shared/Database/DBCfmt.cpp (revision 3628) +++ src/shared/Database/DBCfmt.cpp (working copy) @@ -18,7 +18,7 @@ const char AreaTableEntryfmt[]="iiinixxxxxixxxxxxxxxixxxxxx"; const char BankBagSlotPricesEntryfmt[]="ni"; -const char BattlemasterListEntryfmt[]="niixxxxxxiiiiixsxxxxxxxx"; +const char BattlemasterListEntryfmt[]="niixxxxxxiiiixxsxxxxxxxx"; const char ChatChannelsEntryfmt[]="iixsxxxxxxxxsxxxxxxxx"; // data not sorted (more compact store) const char ChrClassesEntryfmt[]="nxxixsxxxxxxxxxxxx"; const char ChrRacesEntryfmt[]="nxixiixxixxxxisxxxxxxxxxxxx"; Index: src/shared/Database/DBCStructure.h =================================================================== --- src/shared/Database/DBCStructure.h (revision 3628) +++ src/shared/Database/DBCStructure.h (working copy) @@ -57,8 +57,7 @@ uint32 type; // 3 - BG, 4 - arena uint32 minlvl; uint32 maxlvl; - uint32 maxplayers; - uint32 minplayers; // ??? + uint32 maxplayersperteam; char* name; }; Index: src/shared/Database/SQLStorage.cpp =================================================================== --- src/shared/Database/SQLStorage.cpp (revision 3628) +++ src/shared/Database/SQLStorage.cpp (working copy) @@ -25,7 +25,7 @@ const char CreatureInfofmt[]="iiissiiiiiiiiififfiiiiififiiiiffifiiiiiiiiiiiiiiiiiiiiiiiiiiisiis"; const char CreatureDataAddonInfofmt[]="iiiiiiiiiiii"; -const char GameObjectInfofmt[]="iiisiifiiiiiiiiiis"; +const char GameObjectInfofmt[]="iiisiifiiiiiiiiiiiiiiiiiiiiiiiis"; const char ItemPrototypefmt[]="iiiissssiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiffiffiffiiiiiiiiiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisiiiiiiiiiiiiiiiiiiiiiiiiiisi"; const char PageTextfmt[]="isi"; const char SpellProcEventfmt[]="iiiiiif";