#pragma once

class ISLavishScriptInterface
{
public:
	// paths
	virtual char *GetCWD(char *buffer, size_t buflen)=0;
	virtual char *SetRoot(const char *Filename, char *Dest)=0;

	virtual bool AddCommand(const char *Command, fLSCommand Function, bool Parse=true, bool Hidden=false)=0;
	virtual bool RemoveCommand(const char *Command)=0;
	virtual bool AddAlias(const char *Replace, const char *With)=0;
	virtual bool RemoveAlias(const char *Replace)=0;
	virtual char *GetArgs(int BeginInclusive, int EndExclusive, char *argv[], char *buf, size_t buflen)=0;
	virtual char *GetArgsQuoted(int BeginInclusive, int EndExclusive, char *argv[], char *buf, size_t buflen)=0;
	virtual char *GetArgsQuotedNF(int BeginInclusive, int EndExclusive, char *argv[], char *buf, size_t buflen)=0;
	virtual void ExecuteTimedCommand(unsigned int DelayMS, const char *Command)=0;
	virtual int ExecuteCommand(const char *Text)=0;
	virtual int DataParse(const char *ToParse, char *buf, size_t buflen)=0;
	virtual bool DataParse(const char *Text, LSOBJECT &Object)=0;
	virtual bool RunScript(const char *Filename)=0;
	virtual bool EndScript(const char *Filename)=0;
	virtual bool RunCommandFile(const char *Filename)=0;
	virtual bool AddTopLevelObject(const char *Name, fLSTopLevelObject Function)=0;
	virtual bool RemoveTopLevelObject(const char *Name)=0;
	virtual bool AddLSTypeDefinition(class LSTypeDefinition &Type)=0;
	virtual bool RemoveLSTypeDefinition(class LSTypeDefinition &Type)=0;
	virtual LSTypeDefinition *FindLSTypeDefinition(const char *Name, char *subtypebuf=nullptr, size_t subtypebuflen=0)=0;
	virtual fLSCommand IsCommand(const char *Name)=0;
	virtual bool IsAlias(const char *Name)=0;
	virtual fLSTopLevelObject IsTopLevelObject(const char *Name)=0;
	virtual bool IsLSTypeDefinition(const char *Name)=0;
	virtual bool ResolveCommand(const char *Text, char *buf,size_t buflen)=0;
	virtual void *GetTempBuffer(unsigned int Size, void *CopyFrom=nullptr)=0;
	virtual void AddTempObject(CTempObject *pObject)=0;
	virtual bool RunScriptFromBuffer(const char *Name, const char *Buffer, size_t buflen, int argc=0, char *argv[]=nullptr, const char *CWD=nullptr)=0;

	// pre-compiled scripts

	// compiled text and data sequences (improve performance of reused text)
	virtual unsigned int PreParseText(const char *Text, bool bDataSequence=false)=0;
	virtual bool RetrieveOriginalText(unsigned int ID, char *buf, size_t buflen)=0;
	virtual bool RetrieveProcessedText(unsigned int ID, char *buf, size_t buflen)=0;
	virtual bool RetrieveProcessedResult(unsigned int ID, LSOBJECT &Result)=0; // data sequence only
	virtual bool FreePreParsed(unsigned int ID)=0;

	// object persistence
	virtual unsigned int RegisterPersistentClass(const char *Name)=0;
	virtual void InvalidatePersistentClass(unsigned int Class)=0;
	virtual void InvalidatePersistentObject(unsigned int Class, unsigned __int64 Value)=0;
	virtual void SetPersistentClass(LSTypeDefinition *pType,unsigned int Class)=0;

	// object queries
	virtual unsigned int CreateQuery(const char *Text)=0;
	virtual bool RetrieveQueryExpression(unsigned int ID,char *buf, size_t buflen)=0;
	virtual bool QueryEvaluate(unsigned int ID,LSOBJECT &Object, bool &bResult)=0;
	virtual bool FreeQuery(unsigned int ID)=0;


	virtual unsigned int PersistObject(LSOBJECT &object)=0;
	virtual bool GetPersistedObject(unsigned int key, LSOBJECT &out_object)=0;

	virtual void ISLavishScriptInterface_06_Reserved() {}
	virtual void ISLavishScriptInterface_07_Reserved() {}
	virtual void ISLavishScriptInterface_08_Reserved() {}
	virtual void ISLavishScriptInterface_09_Reserved() {}
	virtual void ISLavishScriptInterface_10_Reserved() {}
	virtual void ISLavishScriptInterface_11_Reserved() {}
	virtual void ISLavishScriptInterface_12_Reserved() {}
	virtual void ISLavishScriptInterface_13_Reserved() {}
	virtual void ISLavishScriptInterface_14_Reserved() {}
	virtual void ISLavishScriptInterface_15_Reserved() {}



	virtual unsigned int AddGlobalAtom(const char *Buffer, size_t buflen)=0;
	virtual bool RemoveAtom(unsigned int AtomID)=0;
	virtual int ExecuteAtom(unsigned int AtomID,int argc=0, char *argv[]=nullptr, PLSOBJECT pThisLSObject=nullptr, PLSOBJECT pContext=nullptr, char *ReturnBuffer=nullptr, size_t buflen=0)=0;
	virtual int ExecuteAtom(const char *Name,int argc=0, char *argv[]=nullptr, PLSOBJECT pContext=nullptr, char *ReturnBuffer=nullptr, size_t buflen=0)=0;
	virtual int ExecuteAtom(const char *ScriptName, const char *Name,int argc=0, char *argv[]=nullptr, PLSOBJECT pContext=nullptr, char *ReturnBuffer=nullptr, size_t buflen=0)=0;
	virtual unsigned int ResolveAtom(const char *Name)=0;

	// enumerations
	virtual unsigned int EnumAliases(fLSGenericEnumCallback Callback, void *pData)=0;
	virtual unsigned int EnumCommands(fLSGenericEnumCallback Callback, void *pData)=0;
	virtual unsigned int EnumLSTypeDefinitions(fLSGenericEnumCallback Callback, void *pData)=0;
	virtual unsigned int EnumTopLevelObjects(fLSGenericEnumCallback Callback, void *pData)=0;
	virtual unsigned int EnumScripts(fLSGenericEnumCallback Callback, void *pData)=0;

	// scripts
	virtual bool GetCurrentScript(char *buffer, size_t buflen)=0;
	virtual bool GetScriptCWD(const char *ScriptName, char *buffer, size_t buflen)=0;
	virtual bool QueueCommand(const char *ScriptName, const char *Command)=0;
	virtual unsigned int GetScriptRuntime(const char *ScriptName)=0;
	virtual unsigned int PauseScripts()=0;
	virtual unsigned int ResumeScripts()=0;
	virtual unsigned int AddAtom(const char *ScriptName, const char *Buffer, size_t buflen)=0;
	virtual bool ScriptEngineActive()=0;
	virtual void LavishScriptPulse()=0;

	// events
	virtual unsigned int RegisterEvent(const char *Name)=0;
	virtual void UnregisterEvent(unsigned int EventID)=0;
	virtual bool ExecuteEvent(unsigned int EventID,int BeginInclusive=0, int EndExclusive=0, char *argv[]=nullptr, PLSOBJECT pThisLSObject=nullptr)=0;
	virtual bool AttachEventTarget(unsigned int EventID,unsigned int AtomID)=0;
	virtual bool AttachEventTarget(unsigned int EventID,fLSEventTarget fCallback)=0;
	virtual bool DetachEventTarget(unsigned int EventID,unsigned int AtomID)=0;
	virtual bool DetachEventTarget(unsigned int EventID,fLSEventTarget fCallback)=0;

	// misc
	virtual unsigned int GetRuntime()=0;
	virtual char *Escape(const char *text, char *buf, size_t buflen)=0;
	virtual char *EscapeQuotes(const char *text, char *buf, size_t buflen) = 0;
	virtual bool CalculateResult(const char *Formula, double &Result)=0;
	virtual bool CalculateResult(const char *Formula, __int64 &Result)=0;

	virtual void Printf(const char *Format, ...)=0;
	virtual void Print(const char *Text)=0;
	virtual unsigned int GetTerminalWidth()=0;

// inline functions
	inline bool AddLSType(class LSTypeDefinition &Type) { return AddLSTypeDefinition(Type); }
	inline bool RemoveLSType(class LSTypeDefinition &Type) { return RemoveLSTypeDefinition(Type); }
	inline LSTypeDefinition *FindLSType(char *Name) { return FindLSTypeDefinition(Name); }

	inline bool IsLSType(char *Name) {	return IsLSTypeDefinition(Name); }
};

class ISServiceMasterInterface
{
public:
	// service master
	virtual HISXSERVICE RegisterService(ISXInterface *pMaster, const char *Name, fISServiceRequest RequestCallback=nullptr)=0;
	virtual bool ServiceBroadcast(ISXInterface *pMaster, HISXSERVICE hService, unsigned int MSG, void *lpData)=0;
	virtual bool ServiceNotify(ISXInterface *pMaster, HISXSERVICE hService, ISXInterface *pTarget, unsigned int MSG, void *lpData)=0;
	virtual bool ShutdownService(ISXInterface *pMaster, HISXSERVICE hService)=0;
};

class ISServiceClientInterface
{
public:
	// service client
	virtual HISXSERVICE ConnectService(ISXInterface *pClient, const char *ServiceName, fISService NotifyCallback)=0;
	virtual bool ServiceRequest(ISXInterface *pClient, HISXSERVICE hService, unsigned int MSG, void *lpData)=0;
	virtual void DisconnectService(ISXInterface *pClient, HISXSERVICE hService)=0;
};

class ISInputInterface
{
public:
	// input
	virtual bool AddHotkey(const char *Name, const char *Combo, const char *Command, bool Press=false)=0;
	virtual bool IsHotkey(const char *Name)=0;
	virtual bool RemoveHotkey(const char *Name)=0;
	virtual bool MouseTo(int X, int Y)=0;
	virtual bool GetMousePos(int &X, int &Y)=0;

	virtual bool EmulateKeyPress(const char *Combo, bool Hold)=0;
	virtual bool EmulateKeyRelease(const char *Combo)=0;
	virtual bool EmulateTyping(const char *Text)=0;
	virtual bool EmulateMousePress(unsigned int Button, bool Hold)=0;
	virtual bool EmulateMouseRelease(unsigned int Button)=0;

	// disable binds
	virtual unsigned int SetPrintableBindsAllowed(bool bEnable)=0;
	virtual unsigned int GetPrintableBindsAllowedCount()=0;


	virtual void ISInputInterface_00_Reserved() {}
	virtual void ISInputInterface_01_Reserved() {}
	virtual void ISInputInterface_02_Reserved() {}
	virtual void ISInputInterface_03_Reserved() {}
	virtual void ISInputInterface_04_Reserved() {}
	virtual void ISInputInterface_05_Reserved() {}

};

class ISLavishSettingsInterface
{
public:

	/* DEPRECATED, TO BE REMOVED IN NEAR FUTURE ISXDK */
	virtual __declspec(deprecated) bool GetSetting(char *Filename, char *Set, char *Setting, char *buf, size_t buflen)=0;
	virtual __declspec(deprecated) bool SetSetting(char *Filename, char *Set, char *Setting, char *Value)=0;
	virtual __declspec(deprecated) bool GetSettingb(char *Filename, char *Set, char *Setting, bool &bValue)=0;
	virtual __declspec(deprecated) bool GetSettingi(char *Filename, char *Set, char *Setting, int &iValue)=0;
	virtual __declspec(deprecated) bool SetSettingi(char *Filename, char *Set, char *Setting, int iValue)=0;
	virtual __declspec(deprecated) bool GetSettingf(char *Filename, char *Set, char *Setting, float &fValue)=0;
	virtual __declspec(deprecated) bool SetSettingf(char *Filename, char *Set, char *Setting, float fValue)=0;
	virtual __declspec(deprecated) bool IsSet(char *Filename, char *Set)=0;
	virtual __declspec(deprecated) bool CreateSet(char *Filename, char *Set)=0;
	virtual __declspec(deprecated) bool RemoveSet(char *Filename, char *Set)=0;
	virtual __declspec(deprecated) bool RemoveSetting(char *Filename, char *Set, char *Setting)=0;
	virtual __declspec(deprecated) unsigned int EnumSets(char *Filename, fSetEnumCallback Callback, void *pData)=0;
	virtual __declspec(deprecated) unsigned int EnumSettings(char *Filename, char *Set, fSettingEnumCallback Callback, void *pData)=0;

	virtual __declspec(deprecated) bool UnloadSettings(char *Filename)=0; // Use UnloadSet
	virtual __declspec(deprecated) bool SaveSettings(char *Filename)=0; // Use ExportSet

	/* NEW AND IMPROVED! */
	virtual unsigned int OpenSettings(const char *Filename)=0;
	
	virtual unsigned int FindFileSet(const char *Filename)=0;
	virtual unsigned int FindSet(unsigned int &ParentSetGUID, const char *Name)=0;
	virtual bool SaveFileSet(const char *Filename)=0;

	virtual bool ExportSet(unsigned int &SetGUID, const char *Filename)=0;
	virtual bool ImportToSet(unsigned int &SetGUID, const char *Filename)=0;
	virtual bool CopySet(unsigned int &ToSetGUID, unsigned int FromSetGUID)=0;
	virtual bool UnloadSet(unsigned int &SetGUID)=0;
	virtual bool ClearSet(unsigned int &SetGUID)=0;
	virtual bool SortSet(unsigned int &SetGUID)=0;
	virtual unsigned int CreateSet(unsigned int &SetGUID, const char *Name)=0;
	virtual bool GetSetName(unsigned int &SetGUID, char *buf, size_t buflen)=0;
	virtual bool GetSetParent(unsigned int &SetGUID, unsigned int &ParentSetGUID)=0;

	virtual bool RenameSetting(unsigned int &SetGUID, const char *Setting, const char *NewName)=0;
	virtual bool RemoveSetting(unsigned int &SetGUID, const char *Setting)=0;

	virtual bool AssertSetting(unsigned int &SetGUID, const char *Setting, const char *Value)=0;
	virtual bool AssertSetting(unsigned int &SetGUID, const char *Setting, bool &bValue)=0;
	virtual bool AssertSetting(unsigned int &SetGUID, const char *Setting, int iValue)=0;
	virtual bool AssertSetting(unsigned int &SetGUID, const char *Setting, float &fValue)=0;
	virtual bool AssertSetting(unsigned int &SetGUID, const char *Setting, unsigned int &ulValue)=0;
	virtual bool AssertSetting(unsigned int &SetGUID, const char *Setting, __int64 &Value)=0;

	virtual bool GetSetting(unsigned int &SetGUID, const char *Setting, char *buf, size_t buflen)=0;
	virtual bool GetSetting(unsigned int &SetGUID, const char *Setting, bool &bValue)=0;
	virtual bool GetSetting(unsigned int &SetGUID, const char *Setting, int &iValue)=0;
	virtual bool GetSetting(unsigned int &SetGUID, const char *Setting, float &fValue)=0;
	virtual bool GetSetting(unsigned int &SetGUID, const char *Setting, unsigned int &ulValue)=0;
	virtual bool GetSetting(unsigned int &SetGUID, const char *Setting, __int64 &Value)=0;

	virtual bool SetSetting(unsigned int &SetGUID, const char *Setting, const char *Value)=0;
	virtual bool SetSetting(unsigned int &SetGUID, const char *Setting, int iValue)=0;
	virtual bool SetSetting(unsigned int &SetGUID, const char *Setting, unsigned int &ulValue)=0;
	virtual bool SetSetting(unsigned int &SetGUID, const char *Setting, float &fValue)=0;
	virtual bool SetSetting(unsigned int &SetGUID, const char *Setting, __int64 &Value)=0;

	virtual bool CreateComment(unsigned int &SetGUID, const char *Text)=0;

	virtual unsigned int EnumSets(unsigned int &SetGUID, fSetEnumCallback Callback, void *pData)=0;
	virtual unsigned int EnumSettings(unsigned int &SetGUID, fSettingEnumCallback Callback, void *pData)=0;

	virtual void ISLavishSettingsInterface_00_Reserved() {}
	virtual void ISLavishSettingsInterface_01_Reserved() {}
	virtual void ISLavishSettingsInterface_02_Reserved() {}
	virtual void ISLavishSettingsInterface_03_Reserved() {}
	virtual void ISLavishSettingsInterface_04_Reserved() {}
	virtual void ISLavishSettingsInterface_05_Reserved() {}
	virtual void ISLavishSettingsInterface_06_Reserved() {}
	virtual void ISLavishSettingsInterface_07_Reserved() {}
	virtual void ISLavishSettingsInterface_08_Reserved() {}
	virtual void ISLavishSettingsInterface_09_Reserved() {}
	virtual void ISLavishSettingsInterface_10_Reserved() {}
	virtual void ISLavishSettingsInterface_11_Reserved() {}
	virtual void ISLavishSettingsInterface_12_Reserved() {}
	virtual void ISLavishSettingsInterface_13_Reserved() {}
	virtual void ISLavishSettingsInterface_14_Reserved() {}
	virtual void ISLavishSettingsInterface_15_Reserved() {}
	virtual void ISLavishSettingsInterface_16_Reserved() {}
	virtual void ISLavishSettingsInterface_17_Reserved() {}
	virtual void ISLavishSettingsInterface_18_Reserved() {}
	virtual void ISLavishSettingsInterface_19_Reserved() {}
	virtual void ISLavishSettingsInterface_20_Reserved() {}

};

class ISIPCInterface
{
public:
	// inter-process
	virtual void Relay(const char *Session, const char *Command)=0;
	virtual unsigned int GetSessionCount()=0;
	virtual bool GetSessionName(unsigned int nSession, char *buf, size_t buflen) = 0;

	virtual void ISIPCInterface_00_Reserved() {}
	virtual void ISIPCInterface_01_Reserved() {}
	virtual void ISIPCInterface_02_Reserved() {}
	virtual void ISIPCInterface_03_Reserved() {}
	virtual void ISIPCInterface_04_Reserved() {}
	virtual void ISIPCInterface_05_Reserved() {}

};

class ISNavigationInterface
{
public:
	virtual unsigned int LNavAddRegion(unsigned int ParentGUID, const char *Type, const char *Name, int BeginInclusive, int EndExclusive, char *argv[])=0;
	virtual bool LNavRemoveRegion(unsigned int RegionGUID)=0;

	virtual unsigned int LNavAddConnection(unsigned int FromGUID, unsigned int ToGUID, int BeginInclusive, int EndExclusive, char *argv[])=0;
	virtual bool LNavRemoveConnection(unsigned int ConnectionGUID)=0;

	virtual unsigned int LNavResolveFQN(const char *FQN, unsigned int FromGUID=0)=0;

	virtual bool LNavImportXML(unsigned int ParentGUID, const char *Filename)=0;
	virtual bool LNavExportXML(unsigned int RegionGUID, const char *Filename, bool OnlyChildren)=0;

	virtual void ISNavigationInterface_00_Reserved() {}
	virtual void ISNavigationInterface_01_Reserved() {}
	virtual void ISNavigationInterface_02_Reserved() {}
	virtual void ISNavigationInterface_03_Reserved() {}
	virtual void ISNavigationInterface_04_Reserved() {}
	virtual void ISNavigationInterface_05_Reserved() {}
	virtual void ISNavigationInterface_06_Reserved() {}
	virtual void ISNavigationInterface_07_Reserved() {}
	virtual void ISNavigationInterface_08_Reserved() {}
	virtual void ISNavigationInterface_09_Reserved() {}
	virtual void ISNavigationInterface_10_Reserved() {}
	virtual void ISNavigationInterface_11_Reserved() {}
	virtual void ISNavigationInterface_12_Reserved() {}
	virtual void ISNavigationInterface_13_Reserved() {}
	virtual void ISNavigationInterface_14_Reserved() {}
	virtual void ISNavigationInterface_15_Reserved() {}
	virtual void ISNavigationInterface_16_Reserved() {}
	virtual void ISNavigationInterface_17_Reserved() {}
	virtual void ISNavigationInterface_18_Reserved() {}
	virtual void ISNavigationInterface_19_Reserved() {}
	virtual void ISNavigationInterface_20_Reserved() {}

};

class ISDisplayInterface
{
public:
	// display
	virtual bool GetDisplaySize(unsigned int &Height, unsigned int &Width)=0;
	virtual bool GetPixel(int X, int Y, RGBCOLOR &Color)=0;
	virtual bool GetPixels(int X, int Y, unsigned int nRows, unsigned int nColumns, RGBCOLOR **Rows)=0;
	virtual bool GetDisplayRect(enum _D3DXIMAGE_FILEFORMAT format, bool front_buffer, RECT *optional_area, struct ID3DXBuffer **ppScreenshot)=0;

	virtual void ISDisplayInterface_01_Reserved() {}
	virtual void ISDisplayInterface_02_Reserved() {}
	virtual void ISDisplayInterface_03_Reserved() {}
	virtual void ISDisplayInterface_04_Reserved() {}
	virtual void ISDisplayInterface_05_Reserved() {}
	virtual void ISDisplayInterface_06_Reserved() {}
	virtual void ISDisplayInterface_07_Reserved() {}
	virtual void ISDisplayInterface_08_Reserved() {}
	virtual void ISDisplayInterface_09_Reserved() {}
	virtual void ISDisplayInterface_10_Reserved() {}
	virtual void ISDisplayInterface_11_Reserved() {}
	virtual void ISDisplayInterface_12_Reserved() {}
	virtual void ISDisplayInterface_13_Reserved() {}
	virtual void ISDisplayInterface_14_Reserved() {}
	virtual void ISDisplayInterface_15_Reserved() {}
	virtual void ISDisplayInterface_16_Reserved() {}
	virtual void ISDisplayInterface_17_Reserved() {}
	virtual void ISDisplayInterface_18_Reserved() {}
	virtual void ISDisplayInterface_19_Reserved() {}
	virtual void ISDisplayInterface_20_Reserved() {}

};

class ISLavishVMInterface
{
public:
	/* LavishVM */
	virtual bool IsAvailable()=0;
	virtual bool TryInitialize()=0;
	virtual bool RegisterLibrary(const char *Name,fGetAPI)=0;
	virtual bool UnregisterLibrary(const char *Name)=0;
	virtual bool Execute(const char *Domain, const char *AssemblyName, int argc=0, const char *argv[]=nullptr)=0;
	virtual bool UnloadDomain(const char *Name)=0;

	virtual unsigned int EnumDomains(fDomainEnumCallback, void *pData)=0;
	virtual bool IsDomainActive(const char *Name)=0;

	/* Threading (including LavishVM) */
	virtual void FrameLock()=0;
	virtual void FrameUnlock()=0;
	virtual bool FrameTryLock()=0;
	virtual void FrameWait(bool bLock)=0;
};

class ISInterface : public ISLavishScriptInterface, 
	public ISServiceMasterInterface, 
	public ISServiceClientInterface, 
	public ISInputInterface,
	public ISLavishSettingsInterface,
	public ISIPCInterface,
	public ISNavigationInterface,
	public ISDisplayInterface,
	public ISLavishVMInterface
{
public:
	virtual unsigned int GetVersion()=0;
	virtual unsigned int GetBuildNumber()=0;

	virtual unsigned int GetExtensionSetGUID(const char *Extension)=0;
	virtual unsigned int GetScriptSetGUID(const char *Script)=0;
	virtual unsigned int CreateExtensionSet(const char *Extension)=0;
	virtual unsigned int CreateScriptSet(const char *Script)=0;

	virtual unsigned int GetGameSetGUID()=0;
	virtual unsigned int GetProfileSetGUID()=0;

	virtual bool LoadExtension(const char *Filename)=0;
	virtual bool UnloadExtension(const char *Filename, bool &denied_by_extension)=0;
	virtual bool IsExtensionLoaded(const char *Filename)=0;

	// High Stealth is intended for temporarily increasing stealth while an application
	// performs scanning and detection methods
	virtual bool HighStealthEnabled()=0;
	virtual void EnableHighStealth()=0;
	virtual void DisableHighStealth()=0;

	// paths
	virtual char *GetInnerSpacePath(char *buffer, size_t buflen)=0;
	virtual char *GetLogsPath(const char *extension_subdir, char *buffer, size_t buflen) = 0;

	virtual char *GetSettingsPath(char *buffer, size_t buflen) = 0;
	virtual char *GetNETProgramsPath(char *buffer, size_t buflen) = 0;
	virtual char *GetExtensionsPath(char *buffer, size_t buflen) = 0;
	virtual char *GetInterfacePath(char *buffer, size_t buflen) = 0;
	virtual char *GetLavishScriptModulesPath(char *buffer, size_t buflen) = 0;
	virtual char *GetScreenshotsPath(char *buffer, size_t buflen) = 0;
	virtual char *GetScriptsPath(char *buffer, size_t buflen) = 0;

	// hud
	virtual bool AddElement(const char *Name, const char *Data, int X, int Y, unsigned int Color, const char *Group="Default")=0;
	virtual bool RemoveElement(const char *Name)=0;

	// console
	virtual void ClearConsole()=0;

	virtual void EnableStealth()=0;
	virtual bool StealthEnabled()=0;

	virtual void StoreInnerSpaceSettings() {};



	virtual bool GetLavishScript2Environment_(unsigned int LS2MODULE_SDK_VERSION, void **ppEnvironment)=0;
	bool GetLavishScript2Environment(unsigned int LS2MODULE_SDK_VERSION, void **ppEnvironment)
	{
		if (GetBuildNumber()>=5671)
			return GetLavishScript2Environment_(LS2MODULE_SDK_VERSION,ppEnvironment);
		return false;
	}

	virtual void ISInterface_01_Reserved() {}
	virtual void ISInterface_02_Reserved() {}
	virtual void ISInterface_03_Reserved() {}
	virtual void ISInterface_04_Reserved() {}
	virtual void ISInterface_05_Reserved() {}
	virtual void ISInterface_06_Reserved() {}
	virtual void ISInterface_07_Reserved() {}
	virtual void ISInterface_08_Reserved() {}
	virtual void ISInterface_09_Reserved() {}
	virtual void ISInterface_10_Reserved() {}
	virtual void ISInterface_11_Reserved() {}
	virtual void ISInterface_12_Reserved() {}
	virtual void ISInterface_13_Reserved() {}
	virtual void ISInterface_14_Reserved() {}
	virtual void ISInterface_15_Reserved() {}
	virtual void ISInterface_16_Reserved() {}
	virtual void ISInterface_17_Reserved() {}
	virtual void ISInterface_18_Reserved() {}
	virtual void ISInterface_19_Reserved() {}
	virtual void ISInterface_20_Reserved() {}
};

