package functions import ( "fmt" "eq2emu/internal/events" ) // RegisterAllEQ2Functions registers all EQ2 event functions with a handler func RegisterAllEQ2Functions(handler *events.EventHandler) error { functions := map[string]events.EventFunction{ // Health Functions "SetCurrentHP": SetCurrentHP, "SetMaxHP": SetMaxHP, "SetMaxHPBase": SetMaxHPBase, "SetCurrentPower": SetCurrentPower, "SetMaxPower": SetMaxPower, "SetMaxPowerBase": SetMaxPowerBase, "ModifyMaxHP": ModifyMaxHP, "ModifyMaxPower": ModifyMaxPower, "ModifyPower": ModifyPower, "ModifyHP": ModifyHP, "ModifyTotalHP": ModifyTotalHP, "ModifyTotalPower": ModifyTotalPower, "GetCurrentHP": GetCurrentHP, "GetMaxHP": GetMaxHP, "GetMaxHPBase": GetMaxHPBase, "GetCurrentPower": GetCurrentPower, "GetMaxPower": GetMaxPower, "GetMaxPowerBase": GetMaxPowerBase, "GetPCTOfHP": GetPCTOfHP, "GetPCTOfPower": GetPCTOfPower, "SpellHeal": SpellHeal, "SpellHealPct": SpellHealPct, "IsAlive": IsAlive, // Attributes Functions "SetInt": SetInt, "SetWis": SetWis, "SetSta": SetSta, "SetStr": SetStr, "SetAgi": SetAgi, "SetIntBase": SetIntBase, "SetWisBase": SetWisBase, "SetStaBase": SetStaBase, "SetStrBase": SetStrBase, "SetAgiBase": SetAgiBase, "GetInt": GetInt, "GetWis": GetWis, "GetSta": GetSta, "GetStr": GetStr, "GetAgi": GetAgi, "GetIntBase": GetIntBase, "GetWisBase": GetWisBase, "GetStaBase": GetStaBase, "GetStrBase": GetStrBase, "GetAgiBase": GetAgiBase, "GetLevel": GetLevel, "SetLevel": SetLevel, "SetPlayerLevel": SetPlayerLevel, "GetDifficulty": GetDifficulty, "AddSpellBonus": AddSpellBonus, "RemoveSpellBonus": RemoveSpellBonus, "AddSkillBonus": AddSkillBonus, "RemoveSkillBonus": RemoveSkillBonus, "GetClass": GetClass, "SetClass": SetClass, "SetAdventureClass": SetAdventureClass, "GetTradeskillClass": GetTradeskillClass, "SetTradeskillClass": SetTradeskillClass, "GetTradeskillLevel": GetTradeskillLevel, "SetTradeskillLevel": SetTradeskillLevel, "GetRace": GetRace, "GetGender": GetGender, "GetModelType": GetModelType, "SetModelType": SetModelType, "GetDeity": GetDeity, "SetDeity": SetDeity, "GetAlignment": GetAlignment, "SetAlignment": SetAlignment, // Movement Functions "SetPosition": SetPosition, "GetPosition": GetPosition, "GetX": GetX, "GetY": GetY, "GetZ": GetZ, "GetHeading": GetHeading, "SetHeading": SetHeading, "GetOrigX": GetOrigX, "GetOrigY": GetOrigY, "GetOrigZ": GetOrigZ, "GetDistance": GetDistance, "FaceTarget": FaceTarget, "GetSpeed": GetSpeed, "SetSpeed": SetSpeed, "SetSpeedMultiplier": SetSpeedMultiplier, "HasMoved": HasMoved, "IsRunning": IsRunning, "MoveToLocation": MoveToLocation, "ClearRunningLocations": ClearRunningLocations, "SpawnMove": SpawnMove, "MovementLoopAdd": MovementLoopAdd, "PauseMovement": PauseMovement, "StopMovement": StopMovement, "SetMount": SetMount, "GetMount": GetMount, "SetMountColor": SetMountColor, "StartAutoMount": StartAutoMount, "EndAutoMount": EndAutoMount, "IsOnAutoMount": IsOnAutoMount, "AddWaypoint": AddWaypoint, "RemoveWaypoint": RemoveWaypoint, "SendWaypoints": SendWaypoints, "Evac": Evac, "Bind": Bind, "Gate": Gate, // Combat Functions "Attack": Attack, "AddHate": AddHate, "ClearHate": ClearHate, "GetMostHated": GetMostHated, "SetTarget": SetTarget, "GetTarget": GetTarget, "IsInCombat": IsInCombat, "SetInCombat": SetInCombat, "SpellDamage": SpellDamage, "SpellDamageExt": SpellDamageExt, "DamageSpawn": DamageSpawn, "ProcDamage": ProcDamage, "ProcHate": ProcHate, "Knockback": Knockback, "Interrupt": Interrupt, "IsCasting": IsCasting, "HasRecovered": HasRecovered, "ProcessMelee": ProcessMelee, "ProcessSpell": ProcessSpell, "LastSpellAttackHit": LastSpellAttackHit, "IsBehind": IsBehind, "IsFlanking": IsFlanking, "InFront": InFront, "GetEncounterSize": GetEncounterSize, "GetEncounter": GetEncounter, "GetHateList": GetHateList, "ClearEncounter": ClearEncounter, "ClearRunback": ClearRunback, "Runback": Runback, "GetRunbackDistance": GetRunbackDistance, "CompareSpawns": CompareSpawns, "KillSpawn": KillSpawn, "KillSpawnByDistance": KillSpawnByDistance, "Resurrect": Resurrect, "IsInvulnerable": IsInvulnerable, "SetInvulnerable": SetInvulnerable, "SetAttackable": SetAttackable, // Miscellaneous Functions "SendMessage": SendMessage, "LogMessage": LogMessage, "MakeRandomInt": MakeRandomInt, "MakeRandomFloat": MakeRandomFloat, "ParseInt": ParseInt, "GetName": GetName, "GetID": GetID, "GetSpawnID": GetSpawnID, "IsPlayer": IsPlayer, "IsNPC": IsNPC, "IsEntity": IsEntity, "IsDead": IsDead, "GetCharacterID": GetCharacterID, "Despawn": Despawn, "Spawn": Spawn, "SpawnByLocationID": SpawnByLocationID, "SpawnGroupByID": SpawnGroupByID, "DespawnByLocationID": DespawnByLocationID, "GetSpawnByLocationID": GetSpawnByLocationID, "GetSpawnByGroupID": GetSpawnByGroupID, "GetSpawnGroupID": GetSpawnGroupID, "SetSpawnGroupID": SetSpawnGroupID, "GetSpawnLocationID": GetSpawnLocationID, "GetSpawnLocationPlacementID": GetSpawnLocationPlacementID, "SetGridID": SetGridID, "SpawnSet": SpawnSet, "SpawnSetByDistance": SpawnSetByDistance, "IsSpawnGroupAlive": IsSpawnGroupAlive, "AddSpawnToGroup": AddSpawnToGroup, "GetVariableValue": GetVariableValue, "SetServerVariable": SetServerVariable, "GetServerVariable": GetServerVariable, "SetTempVariable": SetTempVariable, "GetTempVariable": GetTempVariable, "CheckLOS": CheckLOS, "CheckLOSByCoordinates": CheckLOSByCoordinates, } for name, fn := range functions { if err := handler.Register(name, fn); err != nil { return fmt.Errorf("failed to register event %s: %w", name, err) } } return nil } // GetFunctionsByDomain returns functions organized by domain func GetFunctionsByDomain() map[string][]string { return map[string][]string{ "health": { "SetCurrentHP", "SetMaxHP", "SetMaxHPBase", "SetCurrentPower", "SetMaxPower", "SetMaxPowerBase", "ModifyMaxHP", "ModifyMaxPower", "ModifyPower", "ModifyHP", "ModifyTotalHP", "ModifyTotalPower", "GetCurrentHP", "GetMaxHP", "GetMaxHPBase", "GetCurrentPower", "GetMaxPower", "GetMaxPowerBase", "GetPCTOfHP", "GetPCTOfPower", "SpellHeal", "SpellHealPct", "IsAlive", }, "attributes": { "SetInt", "SetWis", "SetSta", "SetStr", "SetAgi", "SetIntBase", "SetWisBase", "SetStaBase", "SetStrBase", "SetAgiBase", "GetInt", "GetWis", "GetSta", "GetStr", "GetAgi", "GetIntBase", "GetWisBase", "GetStaBase", "GetStrBase", "GetAgiBase", "GetLevel", "SetLevel", "SetPlayerLevel", "GetDifficulty", "AddSpellBonus", "RemoveSpellBonus", "AddSkillBonus", "RemoveSkillBonus", "GetClass", "SetClass", "SetAdventureClass", "GetTradeskillClass", "SetTradeskillClass", "GetTradeskillLevel", "SetTradeskillLevel", "GetRace", "GetGender", "GetModelType", "SetModelType", "GetDeity", "SetDeity", "GetAlignment", "SetAlignment", }, "movement": { "SetPosition", "GetPosition", "GetX", "GetY", "GetZ", "GetHeading", "SetHeading", "GetOrigX", "GetOrigY", "GetOrigZ", "GetDistance", "FaceTarget", "GetSpeed", "SetSpeed", "SetSpeedMultiplier", "HasMoved", "IsRunning", "MoveToLocation", "ClearRunningLocations", "SpawnMove", "MovementLoopAdd", "PauseMovement", "StopMovement", "SetMount", "GetMount", "SetMountColor", "StartAutoMount", "EndAutoMount", "IsOnAutoMount", "AddWaypoint", "RemoveWaypoint", "SendWaypoints", "Evac", "Bind", "Gate", }, "combat": { "Attack", "AddHate", "ClearHate", "GetMostHated", "SetTarget", "GetTarget", "IsInCombat", "SetInCombat", "SpellDamage", "SpellDamageExt", "DamageSpawn", "ProcDamage", "ProcHate", "Knockback", "Interrupt", "IsCasting", "HasRecovered", "ProcessMelee", "ProcessSpell", "LastSpellAttackHit", "IsBehind", "IsFlanking", "InFront", "GetEncounterSize", "GetEncounter", "GetHateList", "ClearEncounter", "ClearRunback", "Runback", "GetRunbackDistance", "CompareSpawns", "KillSpawn", "KillSpawnByDistance", "Resurrect", "IsInvulnerable", "SetInvulnerable", "SetAttackable", }, "misc": { "SendMessage", "LogMessage", "MakeRandomInt", "MakeRandomFloat", "ParseInt", "GetName", "GetID", "GetSpawnID", "IsPlayer", "IsNPC", "IsEntity", "IsDead", "GetCharacterID", "Despawn", "Spawn", "SpawnByLocationID", "SpawnGroupByID", "DespawnByLocationID", "GetSpawnByLocationID", "GetSpawnByGroupID", "GetSpawnGroupID", "SetSpawnGroupID", "GetSpawnLocationID", "GetSpawnLocationPlacementID", "SetGridID", "SpawnSet", "SpawnSetByDistance", "IsSpawnGroupAlive", "AddSpawnToGroup", "GetVariableValue", "SetServerVariable", "GetServerVariable", "SetTempVariable", "GetTempVariable", "CheckLOS", "CheckLOSByCoordinates", }, } }