Fixed/updated some enums/packets.

This commit is contained in:
tomrus88 2009-12-22 05:12:40 +03:00
parent d69abfcae1
commit af9318ffa1
9 changed files with 153 additions and 134 deletions

View file

@ -45,10 +45,7 @@ void WorldSession::SendGMTicketGetTicket(uint32 status, char const* text)
void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/ ) void WorldSession::HandleGMTicketGetTicketOpcode( WorldPacket & /*recv_data*/ )
{ {
WorldPacket data( SMSG_QUERY_TIME_RESPONSE, 4+4 ); SendQueryTimeResponse();
data << (uint32)time(NULL);
data << (uint32)0;
SendPacket( &data );
GMTicket* ticket = sTicketMgr.GetGMTicket(GetPlayer()->GetGUIDLow()); GMTicket* ticket = sTicketMgr.GetGMTicket(GetPlayer()->GetGUIDLow());
if(ticket) if(ticket)
@ -105,12 +102,9 @@ void WorldSession::HandleGMTicketCreateOpcode( WorldPacket & recv_data )
sTicketMgr.Create(_player->GetGUIDLow(), ticketText.c_str()); sTicketMgr.Create(_player->GetGUIDLow(), ticketText.c_str());
WorldPacket data( SMSG_QUERY_TIME_RESPONSE, 4+4 ); SendQueryTimeResponse();
data << (uint32)time(NULL);
data << (uint32)0;
SendPacket( &data );
data.Initialize( SMSG_GMTICKET_CREATE, 4 ); WorldPacket data( SMSG_GMTICKET_CREATE, 4 );
data << uint32(2); // 2 - nothing appears (3-error creating, 5-error updating) data << uint32(2); // 2 - nothing appears (3-error creating, 5-error updating)
SendPacket( &data ); SendPacket( &data );
DEBUG_LOG("update the ticket"); DEBUG_LOG("update the ticket");

View file

@ -39,89 +39,95 @@ struct ItemSetEffect
enum InventoryChangeFailure enum InventoryChangeFailure
{ {
EQUIP_ERR_OK = 0, EQUIP_ERR_OK = 0,
EQUIP_ERR_CANT_EQUIP_LEVEL_I = 1, EQUIP_ERR_CANT_EQUIP_LEVEL_I = 1, // ERR_CANT_EQUIP_LEVEL_I
EQUIP_ERR_ERR_CANT_EQUIP_SKILL = 2, EQUIP_ERR_CANT_EQUIP_SKILL = 2, // ERR_CANT_EQUIP_SKILL
EQUIP_ERR_ITEM_DOESNT_GO_TO_SLOT = 3, EQUIP_ERR_ITEM_DOESNT_GO_TO_SLOT = 3, // ERR_WRONG_SLOT
EQUIP_ERR_BAG_FULL = 4, EQUIP_ERR_BAG_FULL = 4, // ERR_BAG_FULL
EQUIP_ERR_NONEMPTY_BAG_OVER_OTHER_BAG = 5, EQUIP_ERR_NONEMPTY_BAG_OVER_OTHER_BAG = 5, // ERR_BAG_IN_BAG
EQUIP_ERR_CANT_TRADE_EQUIP_BAGS = 6, EQUIP_ERR_CANT_TRADE_EQUIP_BAGS = 6, // ERR_TRADE_EQUIPPED_BAG
EQUIP_ERR_ONLY_AMMO_CAN_GO_HERE = 7, EQUIP_ERR_ONLY_AMMO_CAN_GO_HERE = 7, // ERR_AMMO_ONLY
EQUIP_ERR_NO_REQUIRED_PROFICIENCY = 8, EQUIP_ERR_NO_REQUIRED_PROFICIENCY = 8, // ERR_PROFICIENCY_NEEDED
EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE = 9, EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE = 9, // ERR_NO_SLOT_AVAILABLE
EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM = 10, EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM = 10, // ERR_CANT_EQUIP_EVER
EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM2 = 11, EQUIP_ERR_YOU_CAN_NEVER_USE_THAT_ITEM2 = 11, // ERR_CANT_EQUIP_EVER
EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE2 = 12, EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE2 = 12, // ERR_NO_SLOT_AVAILABLE
EQUIP_ERR_CANT_EQUIP_WITH_TWOHANDED = 13, EQUIP_ERR_CANT_EQUIP_WITH_TWOHANDED = 13, // ERR_2HANDED_EQUIPPED
EQUIP_ERR_CANT_DUAL_WIELD = 14, EQUIP_ERR_CANT_DUAL_WIELD = 14, // ERR_2HSKILLNOTFOUND
EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG = 15, EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG = 15, // ERR_WRONG_BAG_TYPE
EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG2 = 16, EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG2 = 16, // ERR_WRONG_BAG_TYPE
EQUIP_ERR_CANT_CARRY_MORE_OF_THIS = 17, EQUIP_ERR_CANT_CARRY_MORE_OF_THIS = 17, // ERR_ITEM_MAX_COUNT
EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE3 = 18, EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE3 = 18, // ERR_NO_SLOT_AVAILABLE
EQUIP_ERR_ITEM_CANT_STACK = 19, EQUIP_ERR_ITEM_CANT_STACK = 19, // ERR_CANT_STACK
EQUIP_ERR_ITEM_CANT_BE_EQUIPPED = 20, EQUIP_ERR_ITEM_CANT_BE_EQUIPPED = 20, // ERR_NOT_EQUIPPABLE
EQUIP_ERR_ITEMS_CANT_BE_SWAPPED = 21, EQUIP_ERR_ITEMS_CANT_BE_SWAPPED = 21, // ERR_CANT_SWAP
EQUIP_ERR_SLOT_IS_EMPTY = 22, EQUIP_ERR_SLOT_IS_EMPTY = 22, // ERR_SLOT_EMPTY
EQUIP_ERR_ITEM_NOT_FOUND = 23, EQUIP_ERR_ITEM_NOT_FOUND = 23, // ERR_ITEM_NOT_FOUND
EQUIP_ERR_CANT_DROP_SOULBOUND = 24, EQUIP_ERR_CANT_DROP_SOULBOUND = 24, // ERR_DROP_BOUND_ITEM
EQUIP_ERR_OUT_OF_RANGE = 25, EQUIP_ERR_OUT_OF_RANGE = 25, // ERR_OUT_OF_RANGE
EQUIP_ERR_TRIED_TO_SPLIT_MORE_THAN_COUNT = 26, EQUIP_ERR_TRIED_TO_SPLIT_MORE_THAN_COUNT = 26, // ERR_TOO_FEW_TO_SPLIT
EQUIP_ERR_COULDNT_SPLIT_ITEMS = 27, EQUIP_ERR_COULDNT_SPLIT_ITEMS = 27, // ERR_SPLIT_FAILED
EQUIP_ERR_MISSING_REAGENT = 28, EQUIP_ERR_MISSING_REAGENT = 28, // ERR_SPELL_FAILED_REAGENTS_GENERIC
EQUIP_ERR_NOT_ENOUGH_MONEY = 29, EQUIP_ERR_NOT_ENOUGH_MONEY = 29, // ERR_NOT_ENOUGH_MONEY
EQUIP_ERR_NOT_A_BAG = 30, EQUIP_ERR_NOT_A_BAG = 30, // ERR_NOT_A_BAG
EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS = 31, EQUIP_ERR_CAN_ONLY_DO_WITH_EMPTY_BAGS = 31, // ERR_DESTROY_NONEMPTY_BAG
EQUIP_ERR_DONT_OWN_THAT_ITEM = 32, EQUIP_ERR_DONT_OWN_THAT_ITEM = 32, // ERR_NOT_OWNER
EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER = 33, EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER = 33, // ERR_ONLY_ONE_QUIVER
EQUIP_ERR_MUST_PURCHASE_THAT_BAG_SLOT = 34, EQUIP_ERR_MUST_PURCHASE_THAT_BAG_SLOT = 34, // ERR_NO_BANK_SLOT
EQUIP_ERR_TOO_FAR_AWAY_FROM_BANK = 35, EQUIP_ERR_TOO_FAR_AWAY_FROM_BANK = 35, // ERR_NO_BANK_HERE
EQUIP_ERR_ITEM_LOCKED = 36, EQUIP_ERR_ITEM_LOCKED = 36, // ERR_ITEM_LOCKED
EQUIP_ERR_YOU_ARE_STUNNED = 37, EQUIP_ERR_YOU_ARE_STUNNED = 37, // ERR_GENERIC_STUNNED
EQUIP_ERR_YOU_ARE_DEAD = 38, EQUIP_ERR_YOU_ARE_DEAD = 38, // ERR_PLAYER_DEAD
EQUIP_ERR_CANT_DO_RIGHT_NOW = 39, EQUIP_ERR_CANT_DO_RIGHT_NOW = 39, // ERR_CLIENT_LOCKED_OUT
EQUIP_ERR_INT_BAG_ERROR = 40, EQUIP_ERR_INT_BAG_ERROR = 40, // ERR_INTERNAL_BAG_ERROR
EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER2 = 41, EQUIP_ERR_CAN_EQUIP_ONLY1_QUIVER2 = 41, // ERR_ONLY_ONE_BOLT
EQUIP_ERR_CAN_EQUIP_ONLY1_AMMOPOUCH = 42, EQUIP_ERR_CAN_EQUIP_ONLY1_AMMOPOUCH = 42, // ERR_ONLY_ONE_AMMO
EQUIP_ERR_STACKABLE_CANT_BE_WRAPPED = 43, EQUIP_ERR_STACKABLE_CANT_BE_WRAPPED = 43, // ERR_CANT_WRAP_STACKABLE
EQUIP_ERR_EQUIPPED_CANT_BE_WRAPPED = 44, EQUIP_ERR_EQUIPPED_CANT_BE_WRAPPED = 44, // ERR_CANT_WRAP_EQUIPPED
EQUIP_ERR_WRAPPED_CANT_BE_WRAPPED = 45, EQUIP_ERR_WRAPPED_CANT_BE_WRAPPED = 45, // ERR_CANT_WRAP_WRAPPED
EQUIP_ERR_BOUND_CANT_BE_WRAPPED = 46, EQUIP_ERR_BOUND_CANT_BE_WRAPPED = 46, // ERR_CANT_WRAP_BOUND
EQUIP_ERR_UNIQUE_CANT_BE_WRAPPED = 47, EQUIP_ERR_UNIQUE_CANT_BE_WRAPPED = 47, // ERR_CANT_WRAP_UNIQUE
EQUIP_ERR_BAGS_CANT_BE_WRAPPED = 48, EQUIP_ERR_BAGS_CANT_BE_WRAPPED = 48, // ERR_CANT_WRAP_BAGS
EQUIP_ERR_ALREADY_LOOTED = 49, EQUIP_ERR_ALREADY_LOOTED = 49, // ERR_LOOT_GONE
EQUIP_ERR_INVENTORY_FULL = 50, EQUIP_ERR_INVENTORY_FULL = 50, // ERR_INV_FULL
EQUIP_ERR_BANK_FULL = 51, EQUIP_ERR_BANK_FULL = 51, // ERR_BAG_FULL
EQUIP_ERR_ITEM_IS_CURRENTLY_SOLD_OUT = 52, EQUIP_ERR_ITEM_IS_CURRENTLY_SOLD_OUT = 52, // ERR_VENDOR_SOLD_OUT
EQUIP_ERR_BAG_FULL3 = 53, EQUIP_ERR_BAG_FULL3 = 53, // ERR_BAG_FULL
EQUIP_ERR_ITEM_NOT_FOUND2 = 54, EQUIP_ERR_ITEM_NOT_FOUND2 = 54, // ERR_ITEM_NOT_FOUND
EQUIP_ERR_ITEM_CANT_STACK2 = 55, EQUIP_ERR_ITEM_CANT_STACK2 = 55, // ERR_CANT_STACK
EQUIP_ERR_BAG_FULL4 = 56, EQUIP_ERR_BAG_FULL4 = 56, // ERR_BAG_FULL
EQUIP_ERR_ITEM_SOLD_OUT = 57, EQUIP_ERR_ITEM_SOLD_OUT = 57, // ERR_VENDOR_SOLD_OUT
EQUIP_ERR_OBJECT_IS_BUSY = 58, EQUIP_ERR_OBJECT_IS_BUSY = 58, // ERR_OBJECT_IS_BUSY
EQUIP_ERR_NONE = 59, EQUIP_ERR_NONE = 59, // ERR_CANT_BE_DISENCHANTED
EQUIP_ERR_NOT_IN_COMBAT = 60, EQUIP_ERR_NOT_IN_COMBAT = 60, // ERR_NOT_IN_COMBAT
EQUIP_ERR_NOT_WHILE_DISARMED = 61, EQUIP_ERR_NOT_WHILE_DISARMED = 61, // ERR_NOT_WHILE_DISARMED
EQUIP_ERR_BAG_FULL6 = 62, EQUIP_ERR_BAG_FULL6 = 62, // ERR_BAG_FULL
EQUIP_ERR_CANT_EQUIP_RANK = 63, EQUIP_ERR_CANT_EQUIP_RANK = 63, // ERR_CANT_EQUIP_RANK
EQUIP_ERR_CANT_EQUIP_REPUTATION = 64, EQUIP_ERR_CANT_EQUIP_REPUTATION = 64, // ERR_CANT_EQUIP_REPUTATION
EQUIP_ERR_TOO_MANY_SPECIAL_BAGS = 65, EQUIP_ERR_TOO_MANY_SPECIAL_BAGS = 65, // ERR_TOO_MANY_SPECIAL_BAGS
EQUIP_ERR_LOOT_CANT_LOOT_THAT_NOW = 66, EQUIP_ERR_LOOT_CANT_LOOT_THAT_NOW = 66, // ERR_LOOT_CANT_LOOT_THAT_NOW
EQUIP_ERR_ITEM_UNIQUE_EQUIPABLE = 67, EQUIP_ERR_ITEM_UNIQUE_EQUIPABLE = 67, // ERR_ITEM_UNIQUE_EQUIPPABLE
EQUIP_ERR_VENDOR_MISSING_TURNINS = 68, EQUIP_ERR_VENDOR_MISSING_TURNINS = 68, // ERR_VENDOR_MISSING_TURNINS
EQUIP_ERR_NOT_ENOUGH_HONOR_POINTS = 69, EQUIP_ERR_NOT_ENOUGH_HONOR_POINTS = 69, // ERR_NOT_ENOUGH_HONOR_POINTS
EQUIP_ERR_NOT_ENOUGH_ARENA_POINTS = 70, EQUIP_ERR_NOT_ENOUGH_ARENA_POINTS = 70, // ERR_NOT_ENOUGH_ARENA_POINTS
EQUIP_ERR_ITEM_MAX_COUNT_SOCKETED = 71, EQUIP_ERR_ITEM_MAX_COUNT_SOCKETED = 71, // ERR_ITEM_MAX_COUNT_SOCKETED
EQUIP_ERR_MAIL_BOUND_ITEM = 72, EQUIP_ERR_MAIL_BOUND_ITEM = 72, // ERR_MAIL_BOUND_ITEM
EQUIP_ERR_NO_SPLIT_WHILE_PROSPECTING = 73, EQUIP_ERR_NO_SPLIT_WHILE_PROSPECTING = 73, // ERR_INTERNAL_BAG_ERROR
EQUIP_ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 75, EQUIP_ERR_BAG_FULL7 = 74, // ERR_BAG_FULL
EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 76, EQUIP_ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 75, // ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED
EQUIP_ERR_TOO_MUCH_GOLD = 77, EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 76, // ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED
EQUIP_ERR_NOT_DURING_ARENA_MATCH = 78, EQUIP_ERR_TOO_MUCH_GOLD = 77, // ERR_TOO_MUCH_GOLD
EQUIP_ERR_CANNOT_TRADE_THAT = 79, EQUIP_ERR_NOT_DURING_ARENA_MATCH = 78, // ERR_NOT_DURING_ARENA_MATCH
EQUIP_ERR_PERSONAL_ARENA_RATING_TOO_LOW = 80, EQUIP_ERR_CANNOT_TRADE_THAT = 79, // ERR_TRADE_BOUND_ITEM
// no output = 81, EQUIP_ERR_PERSONAL_ARENA_RATING_TOO_LOW = 80, // ERR_CANT_EQUIP_RATING
EQUIP_ERR_ARTEFACTS_ONLY_FOR_OWN_CHARACTERS = 82, EQUIP_ERR_EVENT_AUTOEQUIP_BIND_CONFIRM = 81, // EQUIP_ERR_OK, EVENT_AUTOEQUIP_BIND_CONFIRM
// no output = 83, EQUIP_ERR_ARTEFACTS_ONLY_FOR_OWN_CHARACTERS = 82, // ERR_NOT_SAME_ACCOUNT
// crash client = 84, EQUIP_ERR_OK2 = 83, // EQUIP_ERR_OK
EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 84,
EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 85,
EQUIP_ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 86,
EQUIP_ERR_PURCHASE_LEVEL_TOO_LOW = 87,
EQUIP_ERR_CANT_EQUIP_NEED_TALENT = 88,
EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 89
}; };
enum BuyFailure enum BuyFailure

View file

@ -40,8 +40,6 @@
#include "InstanceSaveMgr.h" #include "InstanceSaveMgr.h"
#include "VMapFactory.h" #include "VMapFactory.h"
#define DEFAULT_GRID_EXPIRY 300
#define MAX_GRID_LOAD_TIME 50
#define MAX_CREATURE_ATTACK_RADIUS (45.0f * sWorld.getRate(RATE_CREATURE_AGGRO)) #define MAX_CREATURE_ATTACK_RADIUS (45.0f * sWorld.getRate(RATE_CREATURE_AGGRO))
GridState* si_GridStates[MAX_GRID_STATE]; GridState* si_GridStates[MAX_GRID_STATE];
@ -381,7 +379,6 @@ Map::EnsureGridLoadedAtEnter(const Cell &cell, Player *player)
if (player) if (player)
{ {
player->SendDelayResponse(MAX_GRID_LOAD_TIME);
DEBUG_LOG("Player %s enter cell[%u,%u] triggers of loading grid[%u,%u] on map %u", player->GetName(), cell.CellX(), cell.CellY(), cell.GridX(), cell.GridY(), i_id); DEBUG_LOG("Player %s enter cell[%u,%u] triggers of loading grid[%u,%u] on map %u", player->GetName(), cell.CellX(), cell.CellY(), cell.GridX(), cell.GridY(), i_id);
} }
else else

View file

@ -4174,15 +4174,6 @@ void Player::BuildPlayerRepop()
SetByteValue(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND); SetByteValue(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
} }
void Player::SendDelayResponse(const uint32 ml_seconds)
{
//FIXME: is this delay time arg really need? 50msec by default in code
WorldPacket data( SMSG_QUERY_TIME_RESPONSE, 4+4 );
data << (uint32)time(NULL);
data << (uint32)0;
GetSession()->SendPacket( &data );
}
void Player::ResurrectPlayer(float restore_percent, bool applySickness) void Player::ResurrectPlayer(float restore_percent, bool applySickness)
{ {
WorldPacket data(SMSG_DEATH_RELEASE_LOC, 4*4); // remove spirit healer position WorldPacket data(SMSG_DEATH_RELEASE_LOC, 4*4); // remove spirit healer position
@ -10261,7 +10252,7 @@ uint8 Player::CanUseItem( Item *pItem, bool not_loading ) const
return EQUIP_ERR_NO_REQUIRED_PROFICIENCY; return EQUIP_ERR_NO_REQUIRED_PROFICIENCY;
if (GetSkillValue( pProto->RequiredSkill ) < pProto->RequiredSkillRank) if (GetSkillValue( pProto->RequiredSkill ) < pProto->RequiredSkillRank)
return EQUIP_ERR_ERR_CANT_EQUIP_SKILL; return EQUIP_ERR_CANT_EQUIP_SKILL;
} }
if (pProto->RequiredSpell != 0 && !HasSpell(pProto->RequiredSpell)) if (pProto->RequiredSpell != 0 && !HasSpell(pProto->RequiredSpell))
@ -10322,7 +10313,7 @@ uint8 Player::CanUseAmmo( uint32 item ) const
if( GetSkillValue( pProto->RequiredSkill ) == 0 ) if( GetSkillValue( pProto->RequiredSkill ) == 0 )
return EQUIP_ERR_NO_REQUIRED_PROFICIENCY; return EQUIP_ERR_NO_REQUIRED_PROFICIENCY;
else if( GetSkillValue( pProto->RequiredSkill ) < pProto->RequiredSkillRank ) else if( GetSkillValue( pProto->RequiredSkill ) < pProto->RequiredSkillRank )
return EQUIP_ERR_ERR_CANT_EQUIP_SKILL; return EQUIP_ERR_CANT_EQUIP_SKILL;
} }
if( pProto->RequiredSpell != 0 && !HasSpell( pProto->RequiredSpell ) ) if( pProto->RequiredSpell != 0 && !HasSpell( pProto->RequiredSpell ) )
return EQUIP_ERR_NO_REQUIRED_PROFICIENCY; return EQUIP_ERR_NO_REQUIRED_PROFICIENCY;
@ -11601,24 +11592,38 @@ void Player::RemoveItemFromBuyBackSlot( uint32 slot, bool del )
void Player::SendEquipError( uint8 msg, Item* pItem, Item *pItem2 ) void Player::SendEquipError( uint8 msg, Item* pItem, Item *pItem2 )
{ {
sLog.outDebug( "WORLD: Sent SMSG_INVENTORY_CHANGE_FAILURE (%u)", msg); sLog.outDebug( "WORLD: Sent SMSG_INVENTORY_CHANGE_FAILURE (%u)", msg);
WorldPacket data(SMSG_INVENTORY_CHANGE_FAILURE, (msg == EQUIP_ERR_CANT_EQUIP_LEVEL_I ? 22 : (msg == EQUIP_ERR_OK ? 1 : 18))); WorldPacket data(SMSG_INVENTORY_CHANGE_FAILURE, 1+8+8+1);
data << uint8(msg); data << uint8(msg);
if (msg != EQUIP_ERR_OK) if (msg != EQUIP_ERR_OK)
{ {
data << uint64(pItem ? pItem->GetGUID() : 0); data << uint64(pItem ? pItem->GetGUID() : 0);
data << uint64(pItem2 ? pItem2->GetGUID() : 0); data << uint64(pItem2 ? pItem2->GetGUID() : 0);
data << uint8(0); // not 0 there... data << uint8(0); // bag type subclass, used with EQUIP_ERR_EVENT_AUTOEQUIP_BIND_CONFIRM and EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG2
if (msg == EQUIP_ERR_CANT_EQUIP_LEVEL_I) switch(msg)
{ {
uint32 level = 0; case EQUIP_ERR_CANT_EQUIP_LEVEL_I:
case EQUIP_ERR_PURCHASE_LEVEL_TOO_LOW:
if (pItem) {
if (ItemPrototype const* proto = pItem->GetProto()) ItemPrototype const* proto = pItem ? pItem->GetProto() : NULL;
level = proto->RequiredLevel; data << uint32(proto ? proto->RequiredLevel : 0);
} break;
data << uint32(level); // new 2.4.0 case EQUIP_ERR_EVENT_AUTOEQUIP_BIND_CONFIRM: // no idea about this one...
{
data << uint64(0);
data << uint32(0);
data << uint64(0);
} break;
case EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS:
case EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS:
case EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS:
{
ItemPrototype const* proto = pItem ? pItem->GetProto() : NULL;
data << uint32(proto ? proto->ItemLimitCategory : 0);
} break;
default:
break;
} }
} }
GetSession()->SendPacket(&data); GetSession()->SendPacket(&data);
@ -18013,7 +18018,7 @@ void Player::UpdateHomebindTime(uint32 time)
// hide reminder // hide reminder
WorldPacket data(SMSG_RAID_GROUP_ONLY, 4+4); WorldPacket data(SMSG_RAID_GROUP_ONLY, 4+4);
data << uint32(0); data << uint32(0);
data << uint32(0); data << uint32(ERR_RAID_GROUP_NONE); // error used only when timer = 0
GetSession()->SendPacket(&data); GetSession()->SendPacket(&data);
} }
// instance is valid, reset homebind timer // instance is valid, reset homebind timer
@ -18036,7 +18041,7 @@ void Player::UpdateHomebindTime(uint32 time)
// send message to player // send message to player
WorldPacket data(SMSG_RAID_GROUP_ONLY, 4+4); WorldPacket data(SMSG_RAID_GROUP_ONLY, 4+4);
data << uint32(m_HomebindTimer); data << uint32(m_HomebindTimer);
data << uint32(1); data << uint32(ERR_RAID_GROUP_NONE); // error used only when timer = 0
GetSession()->SendPacket(&data); GetSession()->SendPacket(&data);
sLog.outDebug("PLAYER: Player '%s' (GUID: %u) will be teleported to homebind in 60 seconds", GetName(),GetGUIDLow()); sLog.outDebug("PLAYER: Player '%s' (GUID: %u) will be teleported to homebind in 60 seconds", GetName(),GetGUIDLow());
} }

View file

@ -394,6 +394,15 @@ struct LookingForGroup
uint8 roles; uint8 roles;
}; };
enum RaidGroupError
{
ERR_RAID_GROUP_NONE = 0,
ERR_RAID_GROUP_LOWLEVEL = 1,
ERR_RAID_GROUP_ONLY = 2,
ERR_RAID_GROUP_FULL = 3,
ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 4
};
enum PlayerMovementType enum PlayerMovementType
{ {
MOVE_ROOT = 1, MOVE_ROOT = 1,
@ -1805,7 +1814,6 @@ class MANGOS_DLL_SPEC Player : public Unit
void BuildCreateUpdateBlockForPlayer( UpdateData *data, Player *target ) const; void BuildCreateUpdateBlockForPlayer( UpdateData *data, Player *target ) const;
void DestroyForPlayer( Player *target, bool anim = false ) const; void DestroyForPlayer( Player *target, bool anim = false ) const;
void SendDelayResponse(const uint32);
void SendLogXPGain(uint32 GivenXP,Unit* victim,uint32 RestXP); void SendLogXPGain(uint32 GivenXP,Unit* victim,uint32 RestXP);
// notifiers // notifiers

View file

@ -140,10 +140,7 @@ void WorldSession::HandleNameQueryOpcode( WorldPacket & recv_data )
void WorldSession::HandleQueryTimeOpcode( WorldPacket & /*recv_data*/ ) void WorldSession::HandleQueryTimeOpcode( WorldPacket & /*recv_data*/ )
{ {
WorldPacket data( SMSG_QUERY_TIME_RESPONSE, 4+4 ); SendQueryTimeResponse();
data << (uint32)time(NULL);
data << (uint32)0;
SendPacket( &data );
} }
/// Only _static_ data send in this packet !!! /// Only _static_ data send in this packet !!!
@ -556,3 +553,11 @@ void WorldSession::HandleQuestPOIQuery(WorldPacket& recv_data)
data.hexlike(); data.hexlike();
SendPacket(&data); SendPacket(&data);
} }
void WorldSession::SendQueryTimeResponse()
{
WorldPacket data(SMSG_QUERY_TIME_RESPONSE, 4+4);
data << uint32(time(NULL));
data << uint32(sWorld.GetNextDailyQuestsResetTime() - time(NULL));
SendPacket(&data);
}

View file

@ -59,17 +59,18 @@ enum QuestFailedReasons
enum QuestShareMessages enum QuestShareMessages
{ {
QUEST_PARTY_MSG_SHARING_QUEST = 0, QUEST_PARTY_MSG_SHARING_QUEST = 0, // ERR_QUEST_PUSH_SUCCESS_S
QUEST_PARTY_MSG_CANT_TAKE_QUEST = 1, QUEST_PARTY_MSG_CANT_TAKE_QUEST = 1, // ERR_QUEST_PUSH_INVALID_S
QUEST_PARTY_MSG_ACCEPT_QUEST = 2, QUEST_PARTY_MSG_ACCEPT_QUEST = 2, // ERR_QUEST_PUSH_ACCEPTED_S
QUEST_PARTY_MSG_DECLINE_QUEST = 3, QUEST_PARTY_MSG_DECLINE_QUEST = 3, // ERR_QUEST_PUSH_DECLINED_S
QUEST_PARTY_MSG_BUSY = 4, QUEST_PARTY_MSG_BUSY = 4, // ERR_QUEST_PUSH_BUSY_S
QUEST_PARTY_MSG_LOG_FULL = 5, QUEST_PARTY_MSG_LOG_FULL = 5, // ERR_QUEST_PUSH_LOG_FULL_S
QUEST_PARTY_MSG_HAVE_QUEST = 6, QUEST_PARTY_MSG_HAVE_QUEST = 6, // ERR_QUEST_PUSH_ONQUEST_S
QUEST_PARTY_MSG_FINISH_QUEST = 7, QUEST_PARTY_MSG_FINISH_QUEST = 7, // ERR_QUEST_PUSH_ALREADY_DONE_S
QUEST_PARTY_MSG_CANT_BE_SHARED_TODAY = 8, QUEST_PARTY_MSG_CANT_BE_SHARED_TODAY = 8, // ERR_QUEST_PUSH_NOT_DAILY_S
QUEST_PARTY_MSG_SHARING_TIMER_EXPIRED = 9, QUEST_PARTY_MSG_SHARING_TIMER_EXPIRED = 9, // ERR_QUEST_PUSH_TIMER_EXPIRED_S
QUEST_PARTY_MSG_NOT_IN_PARTY = 10 QUEST_PARTY_MSG_NOT_IN_PARTY = 10, // ERR_QUEST_PUSH_NOT_IN_PARTY_S
QUESY_PARTY_MSG_DIFFERENT_SERVER_DAILY = 11 // ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S
}; };
enum __QuestTradeSkill enum __QuestTradeSkill

View file

@ -434,6 +434,8 @@ class World
time_t const& GetGameTime() const { return m_gameTime; } time_t const& GetGameTime() const { return m_gameTime; }
/// Uptime (in secs) /// Uptime (in secs)
uint32 GetUptime() const { return uint32(m_gameTime - m_startTime); } uint32 GetUptime() const { return uint32(m_gameTime - m_startTime); }
/// Next daily quests reset time
time_t GetNextDailyQuestsResetTime() const { return m_NextDailyQuestReset; }
/// Get the maximum skill level a player can reach /// Get the maximum skill level a player can reach
uint16 GetConfigMaxSkillValue() const uint16 GetConfigMaxSkillValue() const

View file

@ -133,6 +133,7 @@ class MANGOS_DLL_SPEC WorldSession
void SendPartyResult(PartyOperation operation, const std::string& member, PartyResult res); void SendPartyResult(PartyOperation operation, const std::string& member, PartyResult res);
void SendAreaTriggerMessage(const char* Text, ...) ATTR_PRINTF(2,3); void SendAreaTriggerMessage(const char* Text, ...) ATTR_PRINTF(2,3);
void SendSetPhaseShift(uint32 phaseShift); void SendSetPhaseShift(uint32 phaseShift);
void SendQueryTimeResponse();
AccountTypes GetSecurity() const { return _security; } AccountTypes GetSecurity() const { return _security; }
uint32 GetAccountId() const { return _accountId; } uint32 GetAccountId() const { return _accountId; }