uox3/source/SEFunctions.h
Xoduz e38be292e3 0.99.6d
Cleaned up an issue with last commit where wrong npclists were used in some spawn regions
Made a few additional adjustments to the new spawn regions in Lost Lands/New Haven
Included more changes related to poison updates that should've been in previous commit (like the complete UOX.INI support for POISONCORROSIONSYSTEM setting)
Adjusted region setup for New Haven to set the individual "building" regions within as a sub-region of the main town (regions.dfn)
Fixed an issue where the displayed HP of an equipped item would not update correctly
Further updates to convert timers 32-bit to 64-bit. This affects and addresses some potential issues with: Character creation/NPC guild-join timestamps, NPC movement, combat timers, idle timeouts, item decay, spellcasting
Added support for new JS Events that can trigger from global script, and can be used to store persistent custom entries in players' paperdoll profiles:
	onProfileRequest( socket, profileOwnerChar ) - Triggers when client requests data for a paperdoll profile
	onProfileUpdate( socket, updatedText ) - Triggers when client sends updated data from paperdoll profile
Added two new helper functions in code that allows faster (but very slightly less accurate) distance checks between two points: 	GetApproxDist( Point3_st a, Point3_st b )
	GetApproxDist( CBaseObject *a, CBaseObject *b )
Improved pathfinding for NPCs attempting to follow another character, by adopting a system of weighted variables to help the NPC determine when to recalculate the path vs when to stick with the old, combined with faster distance checks via GetApproxDist(). The end result of this is faster, smarter and more responsive NPC followers and NPC opponents in combat. The variables influencing this include: how far the target has moved from last pathfind target location, whether NPC is heading in the overall right direction or not, time since last path calculation and some small randomization to avoid edge case jitters.
Updated default command levels in commands.dfn, code and scripts to support the Seer role and make space for some custom roles. These are the new defaults as listed in commands.dfn, which should not be changed as they are linked to specific enums in code. Do take note that this might invalidate command levels for existing GMs/Seers/Counselors, who might need another round of 'make gm/seer/cns from an admin:
	ADMIN - command level 10
	GM - command level 9
	SEER - command level 7
	CNS - command level 4
	PLAYER - command level 0
Updated how UOX3 makes use of the account-level flags 0x2000 (Seer) and 0x4000 (Counselor). If either of these flags are set on an account, all new characters created on the accounts will automatically receive the relevant command privileges.
Fixed an issue with 'wholist command that prevented admin characters from seeing characters with lower privilege levels in the list (js/commands/wholist.js)
Fixed an issue with hiding/GM hide that prevented admin characters from seeing hidden characters with lower privilege levels in the world
UOX3 now includes the cross-platform, header-only utf8cpp library found at https://github.com/nemtrif/utfcpp and freely available under Boost Software License v1.0. The immediate use-case for this is in code right now is to better handle strings related to custom paperdoll profiles, but will also look to make more heavy use of this in future updates
2025-06-28 22:37:42 +08:00

194 lines
6.1 KiB
C

#ifndef __SEFuncs_h__
#define __SEFuncs_h__
// Function prototypes exposed to the Script Engine
// Version History
// 1.0 12th September, 2000
// Initial implementation, not many functions added
// 1.1 14th September, 2000
// Declaration of 90 API functions and implementation of around 20 of them
// 1.2 18th September, 2000
// Addition of more API functions and declarations of them
// 1.3 28th October, 2001
// Addition of File i/o functions.
// 1.4 3rd November, 2001
// Addition of Tag functions.
typedef JSBool ( SEngineFunc )( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval );
// 90 functions so far
// * == prototype
// ** == active function
// Character related functions (9)
SEngineFunc SE_SpawnNPC; // Create NPC *
// Effect related functions (3)
SEngineFunc SE_DoMovingEffect; // Does moving effect ***
SEngineFunc SE_DoTempEffect; // Does a temp effect ***
SEngineFunc SE_DoStaticEffect; // Does a static effect at location ***
// Item related functions (2)
SEngineFunc SE_CreateBlankItem; // Create an item ***
SEngineFunc SE_CreateDFNItem; // Create an item ***
SEngineFunc SE_CreateHouse; // Create a house from houses.dfn ***
SEngineFunc SE_CreateBaseMulti; // Create a raw multi based on multi ID ***
// Speech related functions (7)
SEngineFunc SE_BroadcastMessage; // ***
// Random functions(5)
SEngineFunc SE_RandomNumber; // Calculates a random number ***
SEngineFunc SE_CalcCharFromSer; // ***
SEngineFunc SE_CalcItemFromSer; // ***
SEngineFunc SE_CalcMultiFromSer; // ***
SEngineFunc SE_CheckTimeSinceLastCombat;
SEngineFunc SE_CheckInstaLog;
SEngineFunc SE_MakeItem; // ***
SEngineFunc SE_CommandLevelReq; // *
SEngineFunc SE_CommandExists; // *
SEngineFunc SE_FirstCommand; // *
SEngineFunc SE_NextCommand; // *
SEngineFunc SE_FinishedCommandList; // *
SEngineFunc SE_RegisterCommand; // ***
SEngineFunc SE_EnableCommand; // ***
SEngineFunc SE_DisableCommand; // ***
SEngineFunc SE_RegisterKey; // ***
SEngineFunc SE_EnableKey; // ***
SEngineFunc SE_DisableKey; // ***
SEngineFunc SE_RegisterConsoleFunc; // ***
SEngineFunc SE_EnableConsoleFunc; // ***
SEngineFunc SE_DisableConsoleFunc; // ***
SEngineFunc SE_RegisterSpell; // ***
SEngineFunc SE_EnableSpell; // ***
SEngineFunc SE_DisableSpell; // ***
SEngineFunc SE_RegisterSkill;
SEngineFunc SE_RegisterPacket;
SEngineFunc SE_GetHour; // ***
SEngineFunc SE_GetMinute; // ***
SEngineFunc SE_GetDay; // ***
SEngineFunc SE_SecondsPerUOMinute; // ***
SEngineFunc SE_GetCurrentClock; // ***
SEngineFunc SE_GetStartTime; // ***
SEngineFunc SE_GetMurderThreshold; // ***
SEngineFunc SE_RollDice; // ***
SEngineFunc SE_RaceCompareByRace; // ***
SEngineFunc SE_GetRandomSOSArea; // ***
SEngineFunc SE_FindMulti; // ***
SEngineFunc SE_GetItem; // ***
SEngineFunc SE_FindItem; // ***
SEngineFunc SE_CompareGuildByGuild; // **
SEngineFunc SE_PossessTown; // ***
SEngineFunc SE_IsRaceWeakToWeather; // ***
SEngineFunc SE_GetRaceSkillAdjustment; // ***
SEngineFunc SE_UseItem; // ***
SEngineFunc SE_TriggerTrap; // ***
SEngineFunc SE_TriggerEvent; // *
SEngineFunc SE_DoesEventExist; // *
SEngineFunc SE_GetPackOwner; // ***
SEngineFunc SE_FindRootContainer; // ***
SEngineFunc SE_CalcTargetedItem; // ***
SEngineFunc SE_CalcTargetedChar; // ***
SEngineFunc SE_GetTileIdAtMapCoord; // ***
SEngineFunc SE_StringToNum; // Marked for Deletion
SEngineFunc SE_NumToString; // Marked for Deletion
SEngineFunc SE_NumToHexString; // Marked for Deletion
SEngineFunc SE_EraStringToNum;
SEngineFunc SE_GetCommandLevelVal;
SEngineFunc SE_GetRaceCount;
SEngineFunc SE_AreaCharacterFunction;
SEngineFunc SE_AreaItemFunction;
SEngineFunc SE_Reload;
SEngineFunc SE_GetDictionaryEntry;
SEngineFunc SE_Yell;
SEngineFunc SE_SendStaticStats;
SEngineFunc SE_GetTileHeight;
SEngineFunc SE_IterateOver;
SEngineFunc SE_IterateOverSpawnRegions;
SEngineFunc SE_WorldBrightLevel;
SEngineFunc SE_WorldDarkLevel;
SEngineFunc SE_WorldDungeonLevel;
SEngineFunc SE_GetSpawnRegionFacetStatus;
SEngineFunc SE_SetSpawnRegionFacetStatus;
SEngineFunc SE_GetMoongateFacetStatus;
SEngineFunc SE_SetMoongateFacetStatus;
SEngineFunc SE_GetSocketFromIndex;
SEngineFunc SE_ResourceArea;
SEngineFunc SE_ResourceAmount;
SEngineFunc SE_ResourceTime;
SEngineFunc SE_ResourceRegion;
SEngineFunc SE_Moon;
SEngineFunc SE_GetTownRegion;
SEngineFunc SE_GetTownRegionFromXY;
SEngineFunc SE_GetSpawnRegion;
SEngineFunc SE_GetSpawnRegionCount;
SEngineFunc SE_ReloadJSFile;
SEngineFunc SE_StaticInRange;
SEngineFunc SE_StaticAt;
SEngineFunc SE_GetMapElevation;
SEngineFunc SE_IsInBuilding;
SEngineFunc SE_CheckStaticFlag;
SEngineFunc SE_CheckDynamicFlag;
SEngineFunc SE_CheckTileFlag;
SEngineFunc SE_DoesStaticBlock;
SEngineFunc SE_DoesDynamicBlock;
SEngineFunc SE_DoesMapBlock;
SEngineFunc SE_DoesCharacterBlock;
SEngineFunc SE_DistanceBetween;
SEngineFunc SE_ValidateObject;
SEngineFunc SE_ApplyDamageBonuses;
SEngineFunc SE_ApplyDefenseModifiers;
SEngineFunc SE_WillResultInCriminal;
SEngineFunc SE_CreateParty;
// Server settings
SEngineFunc SE_GetClientFeature;
SEngineFunc SE_GetServerFeature;
SEngineFunc SE_GetServerSetting;
SEngineFunc SE_DeleteFile;
// Account
SEngineFunc SE_GetAccountCount; // ***
SEngineFunc SE_GetPlayerCount; // ***
SEngineFunc SE_GetItemCount; // ***
SEngineFunc SE_GetMultiCount; // ***
SEngineFunc SE_GetCharacterCount; // ***
SEngineFunc SE_GetServerVersionString; // ***
// Server constants
SEngineFunc SE_BASEITEMSERIAL; // ***
SEngineFunc SE_INVALIDSERIAL; // ***
SEngineFunc SE_INVALIDID; // ***
SEngineFunc SE_INVALIDCOLOUR; // ***
#endif