diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 56 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 36 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 | ||||
-rw-r--r-- | src/server/game/Handlers/ArenaTeamHandler.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/GroupHandler.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.h | 1 |
9 files changed, 62 insertions, 55 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index d0dd91e5796..050f01c6b9a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16674,14 +16674,17 @@ void Player::SendQuestReward(Quest const* quest, uint32 XP) const { uint32 questId = quest->GetQuestId(); sGameEventMgr->HandleQuestComplete(questId); - WorldPacket data(SMSG_QUESTGIVER_QUEST_COMPLETE, (4+4+4+4+4)); - data << uint32(questId); + + uint32 xp; if (!IsMaxLevel()) - data << uint32(XP); + xp = XP; else - data << uint32(0); + xp = 0; + WorldPacket data(SMSG_QUESTGIVER_QUEST_COMPLETE, (4+4+4+4+4)); + data << uint32(questId); + data << uint32(xp); data << uint32(quest->GetRewOrReqMoney(this)); data << uint32(10 * quest->CalculateHonorGain(GetQuestLevel(quest))); data << uint32(quest->GetBonusTalents()); // bonus talents @@ -20365,7 +20368,7 @@ void Player::SendResetInstanceFailed(uint32 reason, uint32 MapId) const // 1: There are players offline in your party. // 2>: There are players in your party attempting to zone into an instance. */ - WorldPacket data(SMSG_INSTANCE_RESET_FAILED, 4); + WorldPacket data(SMSG_INSTANCE_RESET_FAILED, 8); data << uint32(reason); data << uint32(MapId); SendDirectMessage(&data); @@ -26215,6 +26218,26 @@ PetStable& Player::GetOrInitPetStable() return *m_petStable; } +void Player::SendItemRefundResult(Item* item, ItemExtendedCostEntry const* iece, uint8 error) const +{ + WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8 + 4 + 4 + 4 + 4 + 4 * 4 + 4 * 4); + data << uint64(item->GetGUID()); // item guid + data << uint32(error); // 0, or error code + if (!error) + { + data << uint32(item->GetPaidMoney()); // money cost + data << uint32(iece->HonorPoints); // honor point cost + data << uint32(iece->ArenaPoints); // arena point cost + for (uint8 i = 0; i < MAX_ITEM_EXTENDED_COST_REQUIREMENTS; ++i) // item cost data + { + data << uint32(iece->ItemID[i]); + data << uint32(iece->ItemCount[i]); + } + } + + SendDirectMessage(&data); +} + void Player::RefundItem(Item* item) { if (!item->IsRefundable()) @@ -26226,10 +26249,7 @@ void Player::RefundItem(Item* item) if (item->IsRefundExpired()) // item refund has expired { item->SetNotRefundable(this); - WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8+4); - data << uint64(item->GetGUID()); // Guid - data << uint32(10); // Error! - SendDirectMessage(&data); + SendItemRefundResult(item, nullptr, 10); return; } @@ -26267,25 +26287,11 @@ void Player::RefundItem(Item* item) if (store_error) { - WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8+4); - data << uint64(item->GetGUID()); // Guid - data << uint32(10); // Error! - SendDirectMessage(&data); + SendItemRefundResult(item, iece, 10); return; } - WorldPacket data(SMSG_ITEM_REFUND_RESULT, 8+4+4+4+4+4*4+4*4); - data << uint64(item->GetGUID()); // item guid - data << uint32(0); // 0, or error code - data << uint32(item->GetPaidMoney()); // money cost - data << uint32(iece->HonorPoints); // honor point cost - data << uint32(iece->ArenaPoints); // arena point cost - for (uint8 i = 0; i < MAX_ITEM_EXTENDED_COST_REQUIREMENTS; ++i) // item cost data - { - data << uint32(iece->ItemID[i]); - data << uint32(iece->ItemCount[i]); - } - SendDirectMessage(&data); + SendItemRefundResult(item, iece, 0); uint32 moneyRefund = item->GetPaidMoney(); // item-> will be invalidated in DestroyItem diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c2d05d43d87..511338c91f6 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -44,6 +44,7 @@ struct CharTitlesEntry; struct ChatChannelsEntry; struct CreatureTemplate; struct FactionEntry; +struct ItemExtendedCostEntry; struct ItemSetEffect; struct ItemTemplate; struct Loot; @@ -2496,6 +2497,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> GuidSet m_refundableItems; void SendRefundInfo(Item* item); void RefundItem(Item* item); + void SendItemRefundResult(Item* item, ItemExtendedCostEntry const* iece, uint8 error) const; // know currencies are not removed at any point (0 displayed) void AddKnownCurrency(uint32 itemId); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index cc67ca2da60..2f781409cac 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11100,8 +11100,9 @@ bool Unit::InitTamedPet(Pet* pet, uint8 level, uint32 spell_id) // only if not player and not controlled by player pet. And not at BG if ((durabilityLoss && !player && !victim->ToPlayer()->InBattleground()) || (player && sWorld->getBoolConfig(CONFIG_DURABILITY_LOSS_IN_PVP))) { - TC_LOG_DEBUG("entities.unit", "We are dead, losing {} percent durability", sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH)); - plrVictim->DurabilityLossAll(sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH), false); + double baseLoss = sWorld->getRate(RATE_DURABILITY_LOSS_ON_DEATH); + TC_LOG_DEBUG("entities.unit", "We are dead, losing {} percent durability", baseLoss); + plrVictim->DurabilityLossAll(baseLoss, false); // durability lost message plrVictim->SendDurabilityLoss(); } @@ -12210,6 +12211,17 @@ void Unit::UpdateObjectVisibility(bool forced) } } +void Unit::SendMoveKnockBack(Player* player, float speedXY, float speedZ, float vcos, float vsin) +{ + WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8 + 4 + 4 + 4 + 4 + 4)); + data << GetPackGUID(); + data << uint32(0); // counter + data << TaggedPosition<Position::XY>(vcos, vsin); + data << float(speedXY); // Horizontal speed + data << float(speedZ); // Z Movement speed (vertical) + player->SendDirectMessage(&data); +} + void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) { if (IsMovedByServer()) @@ -12220,15 +12232,7 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) { float vcos, vsin; GetSinCos(x, y, vsin, vcos); - - WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8 + 4 + 4 + 4 + 4 + 4)); - data << GetPackGUID(); - data << uint32(0); // counter - data << TaggedPosition<Position::XY>(vcos, vsin); - data << float(speedXY); // Horizontal speed - data << float(-speedZ); // Z Movement speed (vertical) - - GetGameClientMovingMe()->SendDirectMessage(&data); + SendMoveKnockBack(GetGameClientMovingMe()->GetBasePlayer(), speedXY, -speedZ, vcos, vsin); if (HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) || HasAuraType(SPELL_AURA_FLY)) SetCanFly(true, true); @@ -12474,15 +12478,7 @@ void Unit::JumpTo(float speedXY, float speedZ, bool forward, Optional<Position> { float vcos = std::cos(angle+GetOrientation()); float vsin = std::sin(angle+GetOrientation()); - - WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8+4+4+4+4+4)); - data << GetPackGUID(); - data << uint32(0); // Sequence - data << TaggedPosition<Position::XY>(vcos, vsin); - data << float(speedXY); // Horizontal speed - data << float(-speedZ); // Z Movement speed (vertical) - - ToPlayer()->SendDirectMessage(&data); + SendMoveKnockBack(ToPlayer(), speedXY, -speedZ, vcos, vsin); } } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 42e94a53e28..5e71f3f3ed8 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1204,6 +1204,7 @@ class TC_GAME_API Unit : public WorldObject void UpdateOrientation(float orientation); void UpdateHeight(float newZ); + void SendMoveKnockBack(Player* player, float speedXY, float speedZ, float vcos, float vsin); void KnockbackFrom(float x, float y, float speedXY, float speedZ); void JumpTo(float speedXY, float speedZ, bool forward = true, Optional<Position> dest = {}); void JumpTo(WorldObject* obj, float speedZ, bool withOrientation = false); diff --git a/src/server/game/Handlers/ArenaTeamHandler.cpp b/src/server/game/Handlers/ArenaTeamHandler.cpp index 6a04bcce3f0..58d7b4c692d 100644 --- a/src/server/game/Handlers/ArenaTeamHandler.cpp +++ b/src/server/game/Handlers/ArenaTeamHandler.cpp @@ -403,7 +403,7 @@ void WorldSession::HandleArenaTeamLeaderOpcode(WorldPacket& recvData) void WorldSession::SendArenaTeamCommandResult(uint32 teamAction, const std::string& team, const std::string& player, uint32 errorId) { - WorldPacket data(SMSG_ARENA_TEAM_COMMAND_RESULT, 4+team.length()+1+player.length()+1+4); + WorldPacket data(SMSG_ARENA_TEAM_COMMAND_RESULT, 4 + team.length() + 1 + player.length() + 1 + 4); data << uint32(teamAction); data << team; data << player; @@ -413,10 +413,10 @@ void WorldSession::SendArenaTeamCommandResult(uint32 teamAction, const std::stri void WorldSession::SendNotInArenaTeamPacket(uint8 type) { - WorldPacket data(SMSG_ARENA_ERROR, 4+1); // 886 - You are not in a %uv%u arena team - uint32 unk = 0; - data << uint32(unk); // unk(0) - if (!unk) + WorldPacket data(SMSG_ARENA_ERROR, 4+1); + uint32 error = 0; + data << uint32(error); // 0 = ERR_ARENA_NO_TEAM_II, 1 = ERR_ARENA_EXPIRED_CAIS, 2 = ERR_LFG_CANT_USE_BATTLEGROUND + if (!error) data << uint8(type); // team type (2=2v2, 3=3v3, 5=5v5), can be used for custom types... SendPacket(&data); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 97cd53e6c22..bd916a61f86 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1305,7 +1305,7 @@ void WorldSession::HandleAlterAppearance(WorldPacket& recvData) // 0 - ok // 1, 3 - not enough money - // 2 - you have to seat on barber chair + // 2 - you have to sit on barber chair if (!_player->HasEnoughMoney(cost)) { SendBarberShopResult(BARBER_SHOP_RESULT_NO_MONEY); diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index 1cff1a545a4..5554b959763 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -525,7 +525,7 @@ void WorldSession::HandleRaidTargetUpdateOpcode(WorldPacket& recvData) if (!group) return; - uint8 x; + uint8 x; recvData >> x; /** error handling **/ @@ -533,9 +533,7 @@ void WorldSession::HandleRaidTargetUpdateOpcode(WorldPacket& recvData) // everything's fine, do it if (x == 0xFF) // target icon request - { group->SendTargetIconList(this); - } else // target icon update { if (group->isRaidGroup() && !group->IsLeader(GetPlayer()->GetGUID()) && !group->IsAssistant(GetPlayer()->GetGUID())) diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 931b6ebd1d0..d09ce2c2e4e 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -266,6 +266,11 @@ namespace Movement args.path[1] = transform(dest); } + void MoveSplineInit::SetFall() + { + args.flags.EnableFalling(); + } + Vector3 TransportPathTransform::operator()(Vector3 input) { if (_transformForTransport) diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index acf57a89fb4..6fcd3258443 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -151,7 +151,6 @@ namespace Movement inline void MoveSplineInit::SetWalk(bool enable) { args.walk = enable; } inline void MoveSplineInit::SetSmooth() { args.flags.EnableCatmullRom(); } inline void MoveSplineInit::SetCyclic() { args.flags.cyclic = true; } - inline void MoveSplineInit::SetFall() { args.flags.EnableFalling(); } inline void MoveSplineInit::SetVelocity(float vel) { args.velocity = vel; args.HasVelocity = true; } inline void MoveSplineInit::SetBackward() { args.flags.backward = true; } inline void MoveSplineInit::SetTransportEnter() { args.flags.EnableTransportEnter(); } |