#include "ScriptMgr.h" #include "Config.h" #include "Player.h" #include "Unit.h" #include "Item.h" #include "SharedDefines.h" namespace { bool sEnabled = true; uint32 sRequiredItemId = 0; uint32 sRequiredEquipId = 0; uint32 sRequiredSpellId = 0; uint32 sMinLevel = 60; bool HasEquippedItem(Player* player, uint32 entry) { if (!player) return false; if (!entry) return true; for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot) { if (Item* it = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot)) if (it->GetEntry() == entry) return true; } return false; } bool RequirementsMet(Player* player) { if (!player) return false; if (!sEnabled) return false; if (player->GetLevel() < sMinLevel) return false; if (sRequiredItemId && !player->HasItemCount(sRequiredItemId, 1, false)) return false; if (sRequiredEquipId && !HasEquippedItem(player, sRequiredEquipId)) return false; if (sRequiredSpellId && !player->HasSpell(sRequiredSpellId)) return false; return true; } } class SwiftTravelForm_WorldScript : public WorldScript { public: SwiftTravelForm_WorldScript() : WorldScript("SwiftTravelForm_WorldScript") {} void OnAfterConfigLoad(bool) override { sEnabled = sConfigMgr->GetOption("SwiftTravelForm.Enable", true); sRequiredItemId = sConfigMgr->GetOption("SwiftTravelForm.RequiredItem", 0u); sRequiredEquipId = sConfigMgr->GetOption("SwiftTravelForm.RequiredEquipment", 0u); sRequiredSpellId = sConfigMgr->GetOption("SwiftTravelForm.RequiredSpell", 0u); sMinLevel = sConfigMgr->GetOption("SwiftTravelForm.MinLevel", 60u); } }; class SwiftTravelForm_UnitScript : public UnitScript { public: SwiftTravelForm_UnitScript() : UnitScript("SwiftTravelForm_UnitScript") {} void OnUnitSetShapeshiftForm(Unit* unit, ShapeshiftForm form) override { if (!sEnabled) return; if (!unit || unit->GetTypeId() != TYPEID_PLAYER) return; Player* player = unit->ToPlayer(); if (!RequirementsMet(player)) return; if (form == FORM_TRAVEL) player->SetSpeed(MOVE_RUN, 2.0f, true); } }; void AddSC_swift_travel_form() { new SwiftTravelForm_WorldScript(); new SwiftTravelForm_UnitScript(); }