uox3/source/cScript.h
Charles Kerr 01b46f26db STRINGLIST modernization
NOte, many method calls are passing copies of collections. Did not change, as that could change functionality (unlikely), but this is a syntax only exerersize.

Just changing value (copes) to reference (and provide a const/nonconst method) would see a  noticeable speed difference.
2022-06-06 11:27:53 -04:00

288 lines
10 KiB
C++

#ifndef __CSCRIPT_H__
#define __CSCRIPT_H__
class CPIGumpMenuSelect;
class CPIGumpInput;
enum ScriptEvent
{
seOnCreateDFN = 0, // * Done for PCs on global script
seOnCreateTile,
seOnCommand,
seOnDelete, // **
seOnSpeech, // * Missing item response at the moment
seInRange, // * Missing character in range
seOnCollide, // ** Items only
seOnMoveDetect, // ***
seOnSteal, // **
seOnDispel, // **
seOnSkill,
seOnStat,
seOnTooltip,
seOnNameRequest,
seOnAttack,
seOnDefense,
seOnSkillGain, // **
seOnSkillLoss, // **
seOnSkillChange, // **
seOnStatGained, // **
seOnStatGain, // **
seOnStatLoss, // **
seOnStatChange, // **
seOnDrop,
seOnPickup,
seOnContRemoveItem,
seOnSwing,
seOnDecay,
seOnTransfer,
seOnLeaving, // **
seOnEntrance, // **
seOnEquipAttempt, // **
seOnEquip, // **
seOnUnequipAttempt, // **
seOnUnequip, // **
seOnUseChecked, // ** the event that replaces hardcoded use-stuff
seOnUseUnChecked,
seOutOfRange, // * Missing character out of range
seOnLogin, // **
seOnLogout,
seOnClick,
seOnFall,
seOnSell,
seOnSellToVendor,
seOnBuy,
seOnBuyFromVendor,
seOnSoldToVendor,
seOnBoughtFromVendor,
seOnAISliver, // **
seOnSystemSlice,
seOnUnknownTrigger,
seOnLightChange,
seOnWeatherChange,
seOnTempChange,
seOnTimer, // **
seOnDeath, // **
seOnResurrect, // **
seOnFlagChange, // **
seOnLoyaltyChange, // **
seOnHungerChange, // **
seOnThirstChange, // **
seOnStolenFrom, // **
seOnSnooped, // **
seOnSnoopAttempt, // **
seOnEnterRegion, // **
seOnLeaveRegion, // **
seOnSpellTarget,
seOnSpellCast,
seOnSpellSuccess,
seOnTalk,
seOnScrollCast,
seOnSpeechInput,
seOnSpellGain,
seOnSpellLoss,
seOnSkillCheck,
seOnDropItemOnNpc,
seOnStart,
seOnStop,
seOnIterate,
seOnIterateSpawnRegions,
seOnPacketReceive,
seOnCharDoubleClick, // ** the event that replaces hardcoded character doubleclick-stuff
seOnSkillGump, // ** allows overriding client's request to open default skill gump
seOnCombatStart, // ** allows overriding what happens when combat is initiated
seOnAICombatTarget, // ** allows overriding target selection taking place for regular AI behaviours
seOnCombatEnd, // ** allows overriding what happens when combat ends
seOnDeathBlow,
seOnCombatDamageCalc,
seOnDamage,
seOnGumpPress,
seOnGumpInput,
seOnScrollingGumpPress,
seOnDropItemOnItem,
seOnVirtueGumpPress,
seOnUseBandageMacro, // ** allows overriding what happens when client uses bandage macros
seOnHouseCommand, // ** allows overriding what happens when player speaks house commands
seOnMakeItem,
seOnPathfindEnd,
seOnEnterEvadeState,
seOnQuestGump,
seOnHelpButton,
seOnWarModeToggle,
seOnSpecialMove
};
struct SEGump
{
std::vector< std::string > *one, *two;
UI32 TextID;
};
struct SEGumpData
{
std::vector< std::string > sEdits;
std::vector<SI32> nButtons;
std::vector<SI16> nIDs;
};
class cScript
{
private:
JSScript * targScript;
JSContext * targContext;
JSObject * targObject;
UI08 runTime;
bool isFiring;
std::bitset< 64 > eventPresence[3];
std::bitset< 64 > needsChecking[3];
bool EventExists( ScriptEvent eventNum ) const;
bool NeedsChecking( ScriptEvent eventNum ) const;
void SetEventExists( ScriptEvent eventNum, bool status );
void SetNeedsChecking( ScriptEvent eventNum, bool status );
bool ExistAndVerify( ScriptEvent eventNum, std::string functionName );
std::vector< SEGump * > gumpDisplays;
void Cleanup( void );
public:
void CollectGarbage( void );
size_t NewGumpList( void );
SEGump * GetGumpList( SI32 index );
void RemoveGumpList( SI32 index );
void SendGumpList( SI32 index, CSocket *toSendTo );
void HandleGumpPress( CPIGumpMenuSelect *packet );
void HandleGumpInput( CPIGumpInput *pressing );
cScript( std::string targFile, UI08 runTime );
~cScript();
JSObject * Object( void ) const; // returns object pointer
//| Modification - 08162003 - Added these event to handle any script initialization and clean up as the server starts, and is shut down
bool OnStart( void );
bool OnStop( void );
//
bool OnPacketReceive( CSocket *mSock, UI16 packetNum );
bool OnIterate( CBaseObject *a, UI32 &b );
bool OnIterateSpawnRegions( CSpawnRegion *a, UI32 &b );
bool OnCreate( CBaseObject *thingCreated, bool dfnCreated );
SI08 OnCommand( CSocket *mSock, std::string command );
bool OnDelete( CBaseObject *thingDestroyed );
SI08 OnSpeech( const char *speech, CChar *personTalking, CBaseObject *talkingTo );
bool InRange( CBaseObject *srcObj, CBaseObject *objInRange );
SI08 OnCollide( CSocket *targSock, CChar *objColliding, CBaseObject *objCollideWith );
SI08 OnMoveDetect( CBaseObject *sourceObj, CChar *charInRange, UI08 rangeToChar, UI16 oldCharX, UI16 oldCharY );
SI08 OnSteal( CChar *thief, CItem *theft, CChar *victim );
SI08 OnPathfindEnd( CChar *npc, SI08 pathfindResult );
SI08 OnEnterEvadeState( CChar *npc, CChar *enemy );
SI08 OnDispel( CBaseObject *dispelled );
bool OnSkill( CBaseObject *skillUse, SI08 skillUsed );
bool OnStat( void );
std::string OnTooltip( CBaseObject *myObj );
std::string OnNameRequest( CBaseObject *myObj, CChar *nameRequester );
bool OnAttack( CChar *attacker, CChar *defender );
bool OnDefense( CChar *attacker, CChar *defender );
SI08 OnSkillGain( CChar *player, SI08 skill, UI32 skillAmtGained );
SI08 OnSkillLoss( CChar *player, SI08 skill, UI32 skillAmtLost );
bool OnSkillChange( CChar *player, SI08 skill, SI32 skillAmtChanged );
SI08 OnStatGained( CChar *player, UI32 stat, SI08 skill, UI32 statGainedAmount );
bool OnStatGain( CChar *player, UI32 stat, SI08 skill, UI32 statGainAmount );
SI08 OnStatLoss( CChar *player, UI32 stat, UI32 statLossAmount );
bool OnStatChange( CChar *player, UI32 stat, SI32 statChangeAmount );
SI08 OnDrop( CItem *item, CChar *dropper );
SI08 OnPickup( CItem *item, CChar *pickerUpper );
bool OnContRemoveItem( CItem *contItem, CItem *item, CChar *pickerUpper );
SI08 OnSwing( CItem *swinging, CChar *swinger, CChar *swingTarg );
SI08 OnDecay( CItem *decaying );
SI08 OnLeaving( CMultiObj *left, CBaseObject *leaving );
SI08 OnEntrance( CMultiObj *left, CBaseObject *leaving );
SI08 OnEquipAttempt( CChar *equipper, CItem *equipping );
SI08 OnEquip( CChar *equipper, CItem *equipping );
SI08 OnUnequipAttempt( CChar *equipper, CItem *equipping );
SI08 OnUnequip( CChar *equipper, CItem *equipping );
SI08 OnUseChecked( CChar *user, CItem *iUsing );
SI08 OnUseUnChecked( CChar *user, CItem *iUsing );
bool OutOfRange( CBaseObject *srcObj, CBaseObject *objVanish );
bool OnLogin( CSocket *sockPlayer, CChar *pPlayer );
bool OnLogout( CSocket *sockPlayer, CChar *pPlayer );
SI08 OnClick( CSocket *sockPlayer, CBaseObject *objClicked );
bool OnFall( CChar *pFall, SI08 fallDistance );
SI08 OnAISliver( CChar *pSliver );
bool OnSystemSlice( void );
SI08 OnLightChange( CBaseObject *tObject, UI08 lightLevel );
bool OnWeatherChange( CBaseObject *tObject, WeatherType element );
bool OnTempChange( CBaseObject *tObject, SI08 temp );
bool OnTimer( CBaseObject *tObject, UI08 timerID );
SI08 OnDeath( CChar *pDead, CItem *iCorpse );
SI08 OnResurrect( CChar *pAlive );
SI08 OnFlagChange( CChar *pChanging, UI08 newStatus, UI08 oldStatus );
SI08 OnLoyaltyChange( CChar *pChanging, SI08 newStatus );
SI08 OnHungerChange( CChar *pChanging, SI08 newStatus );
bool OnThirstChange( CChar* pChanging, SI08 newStatus );
SI08 OnStolenFrom( CChar *stealing, CChar *stolenFrom, CItem *stolen );
SI08 OnSnooped( CChar *snooped, CChar *snooper, bool success );
SI08 OnSnoopAttempt( CChar *snooped, CChar *snooper );
bool OnEnterRegion( CChar *entering, UI16 region );
bool OnLeaveRegion( CChar *entering, UI16 region );
SI08 OnSpellTarget( CBaseObject *target, CChar *caster, UI08 spellNum );
bool DoCallback( CSocket *tSock, SERIAL targeted, UI08 callNum );
SI16 OnSpellCast( CChar *tChar, UI08 SpellID );
SI16 OnScrollCast( CChar *tChar, UI08 SpellID );
SI08 OnSpellSuccess( CChar *tChar, UI08 SpellID );
SI08 OnTalk( CChar *myChar, const char *mySpeech );
bool OnSpeechInput( CChar *myChar, CItem *myItem, const char *mySpeech );
SI08 OnSpellGain( CItem *book, const UI08 spellNum );
SI08 OnSpellLoss( CItem *book, const UI08 spellNum );
SI08 OnSkillCheck( CChar *myChar, const UI08 skill, const UI16 lowSkill, const UI16 highSkill, bool isCraftSkill );
SI08 OnDropItemOnNpc( CChar *srcChar, CChar *targChar, CItem *i );
SI08 OnDropItemOnItem( CItem *item, CChar *dropper, CItem *dest );
SI08 OnVirtueGumpPress( CChar *mChar, CChar *tChar, UI16 buttonID );
SI08 OnScrollingGumpPress( CSocket *tSock, UI16 gumpID, UI16 buttonID );
SI08 OnQuestGump( CChar *mChar );
SI08 OnHelpButton( CChar *mChar );
SI08 OnWarModeToggle( CChar *mChar );
SI08 OnSpecialMove( CChar *mChar, UI08 abilityID );
bool AreaObjFunc( char *funcName, CBaseObject *srcObject, CBaseObject *tmpObject, CSocket *s );
bool CallParticularEvent( const char *eventToCall, jsval *params, SI32 numParams, jsval *eventRetVal );
bool ScriptRegistration( std::string scriptType );
bool executeCommand( CSocket *s, std::string funcName, std::string executedString );
bool MagicSpellCast( CSocket *mSock, CChar *tChar, bool directCast, SI32 spellNum );
SI08 OnCharDoubleClick( CChar *currChar, CChar *targChar );
SI08 OnSkillGump( CChar *mChar );
SI08 OnUseBandageMacro( CSocket *mSock, CChar *targChar, CItem *bandageItem );
SI08 OnAICombatTarget( CChar *attacker, CChar *target );
SI08 OnCombatStart( CChar *attacker, CChar *defender );
SI08 OnCombatEnd( CChar *attacker, CChar *defender );
SI08 OnDeathBlow( CChar *mKilled, CChar *mKiller );
SI16 OnCombatDamageCalc( CChar *attacker, CChar *defender, UI08 getFightSkill, UI08 hitLoc );
SI08 OnDamage( CChar *damaged, CChar *attacker, SI16 damageValue, WeatherType damageType );
SI08 OnBuy( CSocket *targSock, CChar *objVendor );
SI08 OnBuyFromVendor( CSocket *targSock, CChar *objVendor, CBaseObject *objItemBought );
SI08 OnSellToVendor( CSocket *targSock, CChar *objVendor, CBaseObject *objItemSold );
SI08 OnSell( CSocket *targSock, CChar *objVendor );
SI08 OnBoughtFromVendor( CSocket *targSock, CChar *objVendor, CBaseObject *objItemBought );
SI08 OnSoldToVendor( CSocket *targSock, CChar *objVendor, CBaseObject *objItemSold );
SI08 OnHouseCommand( CSocket *targSock, CMultiObj *multiObj, UI08 targID );
SI08 OnMakeItem( CSocket *mSock, CChar *objChar, CItem *objItem, UI16 createEntryID );
// Critical handler type stuff
bool IsFiring( void );
void Firing( void );
void Stop( void );
};
#endif