22 KiB
22 KiB
File: Spawn.h
Classes
Spell
ZoneServer
Quest
LUAHistory
Cell
CellInfo
MovementData
BasicInfoStruct
MovementLocation
SpawnUpdate
SpawnData
TimedGridData
Spawn
SpawnProximity
Functions
void AddChangedZoneSpawn();
void AddPrimaryEntityCommand(const char* name, float distance, const char* command, const char* error_text, int16 cast_time, int32 spell_visual, bool defaultDenyList = false, Player* player = NULL);
void RemovePrimaryEntityCommand(const char* command);
bool SetPermissionToEntityCommand(EntityCommand* command, Player* player, bool permissionValue);
bool SetPermissionToEntityCommandByCharID(EntityCommand* command, int32 charID, bool permissionValue);
void RemoveSpawnFromPlayer(Player* player);
void AddSecondaryEntityCommand(const char* name, float distance, const char* command, const char* error_text, int16 cast_time, int32 spell_visual){
int8 GetLockedNoLoot(){
int16 GetEmoteState(){
int8 GetHideHood(){
void SetLockedNoLoot(int8 new_val, bool updateFlags = true){
void SetHandFlag(int8 new_val, bool updateFlags = true){
void SetHideHood(int8 new_val, bool updateFlags = true){
void SetEmoteState(int8 new_val, bool updateFlags = true){
void SetName(const char* new_name, bool updateFlags = true){
void SetPrefixTitle(const char* new_prefix_title, bool updateFlags = true) {
void SetSuffixTitle(const char* new_suffix_title, bool updateFlags = true) {
void SetSubTitle(const char* new_sub_title, bool updateFlags = true) {
void SetLastName(const char* new_last_name, bool updateFlags = true) {
void SetAdventureClass(int8 new_class, bool updateFlags = true) {
void SetTradeskillClass(int8 new_class, bool updateFlags = true) {
void SetSize(int16 new_size, bool updateFlags = true) {
void SetSpeedX(float speed_x, bool updateFlags = true) {
void SetSpeedY(float speed_y, bool updateFlags = true) {
void SetSpeedZ(float speed_z, bool updateFlags = true) {
void SetX(float x, bool updateFlags = true){
void SetY(float y, bool updateFlags = true, bool disableYMapFix = false);
void SetZ(float z, bool updateFlags = true){
void SetHeading(sint16 dir1, sint16 dir2, bool updateFlags = true){
void SetHeading(float heading, bool updateFlags = true){
void SetPitch(sint16 pitch1, sint16 pitch2, bool updateFlags = true){
void SetPitch(float pitch, bool updateFlags = true){
void SetRoll(float roll, bool updateFlags = true){
else if (roll != 180)
void SetVisualState(int16 state, bool updateFlags = true){
void SetActionState(int16 state, bool updateFlags = true){
void SetMoodState(int16 state, bool updateFlags = true){
void SetInitialState(int16 state, bool updateFlags = true){
void SetActivityStatus(int16 state, bool updateFlags = true){
void SetCollisionRadius(int32 radius, bool updateFlags = true){
int16 GetCollisionRadius(){
int16 GetVisualState(){
int16 GetActionState(){
int16 GetMoodState(){
int16 GetInitialState(){
int16 GetActivityStatus(){
int32 GetPrimaryCommandListID(){
int32 GetSecondaryCommandListID(){
void SetID(int32 in_id){
void SetDifficulty(int8 difficulty, bool setUpdateFlags = true){
void SetTSLevel(int16 tradeskill_level, bool setUpdateFlags = true){
void SetGender(int8 gender, bool setUpdateFlags = true){
void SetShowName(int8 new_val, bool setUpdateFlags = true){
void SetShowLevel(int8 new_val, bool setUpdateFlags = true){
void SetHeroic(int8 new_val, bool setUpdateFlags = true){
void SetTargetable(int8 new_val, bool setUpdateFlags = true){
void SetShowCommandIcon(int8 new_val, bool setUpdateFlags = true){
void SetShowHandIcon(int8 new_val, bool setUpdateFlags = true){
void SetAttackable(int8 new_val, bool setUpdateFlags = true){
void SetLocation(int32 id, bool setUpdateFlags = true);
void SetRace(int8 race, bool setUpdateFlags = true){
void SetIcon(int8 icon, bool setUpdateFlags = true){
void AddIconValue(int8 val){
void RemoveIconValue(int8 val){
int8 GetIconValue(){
void SetSpawnType(int8 new_type){
int8 GetSpawnType(){
void SetDatabaseID(int32 new_id){
int32 GetDatabaseID(){
int8 GetShowHandIcon(){
int32 GetLocation(){
int8 GetAttackable(){
int8 GetShowName(){
int8 GetShowLevel(){
int8 GetHeroic(){
int8 GetTargetable(){
int8 GetShowCommandIcon(){
int8 GetAdventureClass() {
int8 GetTradeskillClass() {
float GetDestinationX(){
float GetX() {
float GetSpeedX() {
float GetSpeedY() {
float GetSpeedZ() {
float GetDestinationY(){
float GetY(){
float GetDestinationZ(){
float GetZ(){
float GetHeading(){
float GetPitch(){
float GetRoll(){
int32 GetID(){
float GetDistance(float x1, float y1, float z1, float x2, float y2, float z2);
float GetDistance(float x, float y, float z, float radius, bool ignore_y = false);
float GetDistance(float x, float y, float z, bool ignore_y = false);
float GetDistance(Spawn* spawn, bool ignore_y = false, bool includeRadius=true);
float GetDistance(Spawn* spawn, float x1, float y1, float z1, bool includeRadius=true);
float CalculateRadius(Spawn* target);
int8 GetDifficulty(){
sint32 GetTotalPower();
sint32 GetPower();
sint32 GetTotalHP();
sint32 GetHP();
sint32 GetTotalHPBase();
sint32 GetTotalHPBaseInstance();
sint32 GetTotalPowerBase();
sint32 GetTotalPowerBaseInstance();
float GetHPRatio() { return GetHP() == 0 || GetTotalHP() == 0 ? 0 : ((float) GetHP() / GetTotalHP() * 100); }
int GetIntHPRatio() { return GetTotalHP() == 0 ? 0 : static_cast<int>(GetHPRatio()); }
sint32 GetTotalSavagery();
sint32 GetSavagery();
sint32 GetTotalDissonance();
sint32 GetDissonance();
sint32 GetTotalSavageryBase();
sint32 GetTotalDissonanceBase();
sint16 GetAssignedAA();
sint16 GetUnassignedAA();
sint16 GetTradeskillAA();
sint16 GetUnassignedTradeskillAA();
sint16 GetPrestigeAA();
sint16 GetUnassignedPretigeAA();
sint16 GetTradeskillPrestigeAA();
sint16 GetUnassignedTradeskillPrestigeAA();
int32 GetAAXPRewards();
void SetTotalPower(sint32 new_val);
void SetTotalHP(sint32 new_val);
void SetTotalSavagery(sint32 new_val);
void SetTotalDissonance(sint32 new_val);
void SetTotalPowerBase(sint32 new_val);
void SetTotalPowerBaseInstance(sint32 new_val);
void SetTotalHPBase(sint32 new_val);
void SetTotalHPBaseInstance(sint32 new_val);
void SetTotalSavageryBase(sint32 new_val);
void SetTotalDissonanceBase(sint32 new_val);
void SetPower(sint32 power, bool setUpdateFlags = true);
void SetHP(sint32 new_val, bool setUpdateFlags = true);
void SetSavagery(sint32 savagery, bool setUpdateFlags = true);
void SetDissonance(sint32 dissonance, bool setUpdateFlags = true);
void SetAssignedAA(sint16 new_val);
void SetUnassignedAA(sint16 new_val);
void SetTradeskillAA(sint16 new_val);
void SetUnassignedTradeskillAA(sint16 new_val);
void SetPrestigeAA(sint16 new_val);
void SetUnassignedPrestigeAA(sint16 new_val);
void SetTradeskillPrestigeAA(sint16 new_val);
void SetUnassignedTradeskillPrestigeAA(sint16 new_val);
void SetAAXPRewards(int32 amount);
void SetPrivateQuestSpawn(bool val) {req_quests_private = val;}
void SetQuestsRequiredOverride(int16 val) {req_quests_override = val;}
void SetQuestsRequiredContinuedAccess(bool val) {req_quests_continued_access = val;}
bool GetPrivateQuestSpawn() {return req_quests_private;}
int16 GetQuestsRequiredOverride() {return req_quests_override;}
bool GetQuestsRequiredContinuedAccess() {return req_quests_continued_access;}
bool Alive(){ return is_alive; }
void SetAlive(bool val) { is_alive = val; }
int16 GetLevel(){
int16 GetTSLevel(){
int8 GetGender(){
int8 GetRace(){
int32 GetSize(){
int32 GetDeviation(){
void SetDeviation(int32 in_dev){
float GetSpawnOrigHeading(){
void SetSpawnOrigHeading(float val){
float GetSpawnOrigX(){
float GetSpawnOrigY(){
float GetSpawnOrigZ(){
float GetSpawnOrigPitch(){
float GetSpawnOrigRoll(){
void SetSpawnOrigX(float val){
void SetSpawnOrigY(float val){
void SetSpawnOrigZ(float val){
void SetSpawnOrigRoll(float val){
void SetSpawnOrigPitch(float val){
void SetSogaModelType(int16 new_val, bool setUpdateFlags = true){
void SetModelType(int16 model_type, bool setUpdateFlags = true){
int16 GetSogaModelType(){
int16 GetModelType(){
bool IsFlyingCreature();
bool IsWaterCreature();
bool InWater();
bool InLava();
void SetFlyingCreature();
void SetWaterCreature();
void SetPrimaryCommand(const char* name, const char* command, float distance = 10);
void SetPrimaryCommands(vector<EntityCommand*>* commands);
void SetSecondaryCommands(vector<EntityCommand*>* commands);
bool HasInfoChanged(){ return info_changed; }
bool HasPositionChanged(){ return position_changed; }
bool HasTarget(){ return target ? true : false; }
int32 GetRespawnTime();
void SetRespawnTime(int32 time);
sint32 GetRespawnOffsetLow();
void SetRespawnOffsetLow(sint32 time);
sint32 GetRespawnOffsetHigh();
void SetRespawnOffsetHigh(sint32 time);
bool DuplicatedSpawn() { return duplicated_spawn; }
void SetDuplicateSpawn(bool val) { duplicated_spawn = val; }
int32 GetExpireTime() { return expire_time; }
void SetExpireTime(int32 new_expire_time) { expire_time = new_expire_time; }
int32 GetExpireOffsetTime();
void SetExpireOffsetTime(int32 time);
int32 GetSpawnLocationID();
void SetSpawnLocationID(int32 id);
int32 GetSpawnEntryID();
void SetSpawnEntryID(int32 id);
int32 GetSpawnLocationPlacementID();
void SetSpawnLocationPlacementID(int32 id);
float GetXOffset() { return x_offset; }
void SetXOffset(float new_x_offset) { x_offset = new_x_offset; }
float GetYOffset() { return y_offset; }
void SetYOffset(float new_y_offset) { y_offset = new_y_offset; }
float GetZOffset() { return z_offset; }
void SetZOffset(float new_z_offset) { z_offset = new_z_offset; }
bool HasTrapTriggered() {
int32 GetTrapState() {
void SetChestDropTime() {
void SetTrapTriggered(bool triggered, int32 state) {
int32 GetChestDropTime() {
int32 GetTrapOpenedTime() {
void AddLootItem(int32 id, int16 charges = 1) {
void AddLootItem(Item* item) {
bool HasLoot() {
void TransferLoot(Spawn* spawn);
bool HasLootItemID(int32 id);
int32 GetLootItemID();
void LockLoot() {
void UnlockLoot() {
void ClearLoot() {
int32 GetLootCount() {
void ClearNonBodyLoot() {
int32 GetLootCoins() {
void SetLootCoins(int32 val, bool lockloot = true) {
void AddLootCoins(int32 coins) {
void SetTarget(Spawn* spawn);
void SetLastAttacker(Spawn* spawn);
bool TakeDamage(int32 damage);
int32 GetZoneID();
void SetFactionID(int32 val) { faction_id = val; }
int32 GetFactionID(){
else if ((next_id - 255) % 256 == 0) { //we dont want it to end in 255, it will confuse/crash the client
return NextID();
void AddProvidedQuest(int32 val){
bool HasProvidedQuests(){
void SetSpawnScript(string name);
bool HasSpawnGroup();
bool IsInSpawnGroup(Spawn* spawn);
void UpdateEncounterState(int8 new_state);
void CheckEncounterState(Entity* victim, bool test_auto_lock = false);
void AddTargetToEncounter(Entity* entity);
void SendSpawnChanges(bool val){ send_spawn_changes = val; }
void SetSpawnGroupID(int32 id);
int32 GetSpawnGroupID();
void AddSpawnToGroup(Spawn* spawn);
void SetSpawnGroupList(vector<Spawn*>* list, Mutex* mutex);
void RemoveSpawnFromGroup(bool erase_all = false, bool ignore_death = false);
void SetRunningTo(Spawn* spawn){ running_to = spawn->GetID(); }
void SetTempVisualState(int val, bool update = true) { SetInfo(&tmp_visual_state, val, update); }
int GetTempVisualState(){ return tmp_visual_state; }
void SetTempActionState(int val, bool update = true) { SetInfo(&tmp_action_state, val, update); }
int GetTempActionState(){ return tmp_action_state; }
void AddAllowAccessSpawn(Spawn* spawn){ allowed_access[spawn->GetID()] = 1; }
void RemoveSpawnAccess(Spawn* spawn);
bool IsPrivateSpawn(){ return allowed_access.size() > 0 ;}
bool AllowedAccess(Spawn* spawn){ return allowed_access.count(spawn->GetID()) > 0; }
void MakeSpawnPublic() { allowed_access.clear(); }
void SetSizeOffset(int8 offset);
int8 GetSizeOffset();
void SetMerchantID(int32 val);
int32 GetMerchantID();
void SetMerchantType(int8 val);
int8 GetMerchantType();
void SetCollector(bool is_it) { is_collector = is_it; }
bool IsCollector() { return is_collector; }
void SetMerchantLevelRange(int32 minLvl = 0, int32 maxLvl = 0);
bool IsClientInMerchantLevelRange(Client* ent, bool sendMessageIfDenied = true);
int32 GetMerchantMinLevel();
int32 GetMerchantMaxLevel();
void SetQuestsRequired(Spawn* new_spawn);
void SetQuestsRequired(int32 quest_id, int16 quest_step);
bool HasQuestsRequired();
bool HasHistoryRequired();
void SetRequiredHistory(int32 event_id, int32 value1, int32 value2);
void SetTransporterID(int32 id);
int32 GetTransporterID();
bool MeetsSpawnAccessRequirements(Player* player);
void RemovePrimaryCommands();
void InitializePosPacketData(Player* player, PacketStruct* packet, bool bSpawnUpdate = false);
void InitializeInfoPacketData(Player* player, PacketStruct* packet);
void InitializeVisPacketData(Player* player, PacketStruct* packet);
void InitializeHeaderPacketData(Player* player, PacketStruct* packet, int16 index);
void InitializeFooterPacketData(Player* player, PacketStruct* packet);
void MoveToLocation(Spawn* spawn, float distance, bool immediate = true, bool isMappedLocation = false);
void AddMovementLocation(float x, float y, float z, float speed, int16 delay, const char* lua_function, float heading, bool include_heading = false, bool use_nav_path = false);
void ProcessMovement(bool isSpawnListLocked=false);
void ResetMovement();
bool ValidateRunning(bool lockMovementLocation, bool lockMovementLoop);
bool IsRunning();
void CalculateRunningLocation(bool stop = false);
void RunToLocation(float x, float y, float z, float following_x = 0, float following_y = 0, float following_z = 0);
void NewWaypointChange(MovementLocation* data);
bool CalculateChange();
void AddRunningLocation(float x, float y, float z, float speed, float distance_away = 0, bool attackable = true, bool finished_adding_locations = true, string lua_function = "", bool isMapped=false, bool useNavPath=false);
bool RemoveRunningLocation();
void ClearRunningLocations();
void CopySpawnAppearance(Spawn* spawn);
bool MovementInterrupted(){ return movement_interrupted; }
void MovementInterrupted(bool val) { movement_interrupted = val; }
bool NeedsToResumeMovement(){ return attack_resume_needed; }
void NeedsToResumeMovement(bool val) { attack_resume_needed = val; }
bool HasMovementLoop(){ return movement_loop.size() > 0; }
bool HasMovementLocations() {
float GetFaceTarget(float x, float z);
void FaceTarget(float x, float z);
void FaceTarget(Spawn* target, bool disable_action_state = true);
void SetInvulnerable(bool val);
bool GetInvulnerable();
void SetScaredByStrongPlayers(bool val) { scared_by_strong_players = val; }
bool IsScaredByStrongPlayers() { return scared_by_strong_players; }
bool IsPet() { return is_pet; }
void SetPet(bool val) { is_pet = val; }
void SetFollowTarget(Spawn* spawn, int32 followDistance=0);
void AddTempVariable(string var, string val);
void AddTempVariable(string var, Spawn* val);
void AddTempVariable(string var, ZoneServer* val);
void AddTempVariable(string var, Quest* val);
void AddTempVariable(string var, Item* val);
string GetTempVariable(string var);
int8 GetTempVariableType(string var);
void DeleteTempVariable(string var);
void SetIllusionModel(int16 val, bool setUpdateFlags = true) {
int16 GetIllusionModel() { return m_illusionModel; }
int32 GetSpawnAnim() { return m_spawnAnim; }
void SetSpawnAnim(int32 value) { m_spawnAnim = value; }
int32 GetAddedToWorldTimestamp() { return m_addedToWorldTimestamp; }
void SetAddedToWorldTimestamp(int32 value) { m_addedToWorldTimestamp = value; }
int16 GetSpawnAnimLeeway() { return m_spawnAnimLeeway; }
void SetSpawnAnimLeeway(int16 value) { m_spawnAnimLeeway = value; }
float FindDestGroundZ(glm::vec3 dest, float z_offset);
float FindBestZ(glm::vec3 loc, glm::vec3* result=nullptr, int32* new_grid_id=nullptr, int32* new_widget_id=nullptr);
float GetFixedZ(const glm::vec3& destination, int32 z_find_offset = 1);
void FixZ(bool forceUpdate=false);
bool CheckLoS(Spawn* target);
bool CheckLoS(glm::vec3 myloc, glm::vec3 oloc);
void CalculateNewFearpoint();
void AddSpawnToProximity(int32 spawnValue, SpawnProximityType type);
void RemoveSpawnFromProximity(int32 spawnValue, SpawnProximityType type);
void RemoveSpawnProximities() {
void SetPickupItemID(int32 itemid)
void SetPickupUniqueItemID(int32 uniqueid)
int32 GetPickupItemID() { return pickup_item_id; }
int32 GetPickupUniqueItemID() { return pickup_unique_item_id; }
bool IsSoundsDisabled() { return disable_sounds; }
void SetSoundsDisabled(bool val) { disable_sounds = val; }
void DeleteRegion(Region_Node* inNode, ZBSP_Node* rootNode);
bool InRegion(Region_Node* inNode, ZBSP_Node* rootNode);
int32 GetRegionType(Region_Node* inNode, ZBSP_Node* rootNode);
float SpawnAngle(Spawn* target, float selfx, float selfz);
bool BehindSpawn(Spawn *target, float selfx, float selfz)
bool InFrontSpawn(Spawn *target, float selfx, float selfz)
bool IsFlankingSpawn(Spawn *target, float selfx, float selfz)
bool IsTransportSpawn() { return is_transport_spawn; }
void SetTransportSpawn(bool val) { is_transport_spawn = val; }
sint64 GetRailID() { return rail_id; }
void SetRailID(sint64 val) { rail_id = val; }
void AddRailPassenger(int32 char_id);
void RemoveRailPassenger(int32 char_id);
void SetAppearancePosition(float x, float y, float z);
void SetOmittedByDBFlag(bool val) { is_omitted_by_db_flag = val; }
bool IsOmittedByDBFlag() { return is_omitted_by_db_flag; }
int32 GetLootTier() { return loot_tier; }
void SetLootTier(int32 tier) { loot_tier = tier; }
int32 GetLootDropType() { return loot_drop_type; }
void SetLootDropType(int32 type) { loot_drop_type = type; }
void SetDeletedSpawn(bool val) { deleted_spawn = val; }
bool IsDeletedSpawn() { return deleted_spawn; }
int32 InsertRegionToSpawn(Region_Node* node, ZBSP_Node* bsp_root, WaterRegionType regionType, bool in_region = true);
bool HasRegionTracked(Region_Node* node, ZBSP_Node* bsp_root, bool in_region);
int8 GetArrowColor(int8 spawn_level);
void AddIgnoredWidget(int32 id);
void SendGroupUpdate();
void OverrideLootMethod(GroupLootMethod newMethod) { loot_method = newMethod; }
void SetLootMethod(GroupLootMethod method, int8 item_rarity = 0, int32 group_id = 0);
int32 GetLootGroupID() { return loot_group_id; }
GroupLootMethod GetLootMethod() { return loot_method; }
int8 GetLootRarity() { return loot_rarity; }
int32 GetLootTimeRemaining() { return loot_timer.GetRemainingTime(); }
bool IsLootTimerRunning() { return loot_timer.Enabled(); }
bool CheckLootTimer() { return loot_timer.Check(); }
void DisableLootTimer() { return loot_timer.Disable(); }
int32 GetLooterSpawnID() { return looter_spawn_id; }
void SetLooterSpawnID(int32 id) { looter_spawn_id = id; }
bool AddNeedGreedItemRequest(int32 item_id, int32 spawn_id, bool need_item);
bool AddLottoItemRequest(int32 item_id, int32 spawn_id);
void AddSpawnLootWindowCompleted(int32 spawn_id, bool status_);
bool SetSpawnLootWindowCompleted(int32 spawn_id);
bool HasSpawnLootWindowCompleted(int32 spawn_id);
bool HasSpawnNeedGreedEntry(int32 item_id, int32 spawn_id);
bool HasSpawnLottoEntry(int32 item_id, int32 spawn_id);
void GetSpawnLottoEntries(int32 item_id, std::map<int32, int32>* out_entries);
void GetLootItemsList(std::vector<int32>* out_entries);
void GetSpawnNeedGreedEntries(int32 item_id, bool need_item, std::map<int32, int32>* out_entries);
bool HasLootWindowCompleted();
bool IsLootWindowComplete() { return is_loot_complete; }
void SetLootDispensed() { is_loot_dispensed = true; }
bool IsLootDispensed() { return is_loot_dispensed; }
void StartLootTimer(Spawn* looter);
void CloseLoot(Spawn* sender);
void SetLootName(char* name) {
bool IsItemInLootTier(Item* item);
void DistributeGroupLoot_RoundRobin(std::vector<int32>* item_list, bool roundRobinTrashLoot = false); // trash loot is what falls under the item tier requirement by group options
void CalculateInitialVelocity(float heading, float distanceHorizontal, float distanceVertical, float distanceDepth, float duration);
glm::vec3 CalculateProjectilePosition(glm::vec3 initialVelocity, float time);
bool CalculateSpawnProjectilePosition(float x, float y, float z);
void SetKnockback(Spawn* target, int32 duration, float vertical, float horizontal);
void ResetKnockedBack();
void CheckProximities();
bool IsKnockedBack() { return knocked_back; }
Notable Comments
- /*
- */
- // WE ARE UNSURE OF THESE OLD CLIENT VALUES USED AS TEMP PLACEHOLDERS FOR NEWER CLIENTS
- //int32 start_time;
- //int32 end_time;
- *field = value;
- ///
Sets a user defined variable - /// Variable we are setting
- /// Value to set the variable to
- ///
Gets the value for the given variable