#ifndef LUA_IHM_RYZOM_H #define LUA_IHM_RYZOM_H #include "nel/gui/lua_ihm.h" class CLuaIHMRyzom { public: static void RegisterRyzomFunctions( NLGUI::CLuaState &ls ); private: static void createLuaEnumTable(CLuaState &ls, const std::string &str); static int luaClientCfgIndex(CLuaState &ls); static int luaClientCfgNewIndex(CLuaState &ls); // Functions for the ui metatable static class CInterfaceElement *getUIRelative(class CInterfaceElement *pIE, const std::string &propName); static int luaUIIndex(CLuaState &ls); static int luaUINewIndex(CLuaState &ls); static int luaUIEq(CLuaState &ls); static int luaUINext(CLuaState &ls); static int luaUIDtor(CLuaState &ls); // CInterfaceElement management on stack, stored by a CRefPtr. public: static void pushUIOnStack(CLuaState &ls, class CInterfaceElement *pIE); static bool isUIOnStack(CLuaState &ls, sint index); static CInterfaceElement *getUIOnStack(CLuaState &ls, sint index); static void checkArgTypeUIElement(CLuaState &ls, const char *funcName, uint index); private: static int getUI(CLuaState &ls); // params: "ui:interface:...". return: CInterfaceElement* (nil if error), an additionnal boolean parameter // LUA exported Functions with standard lua (because use ui object, use variable param number, or return dynamic-typed object) static int setCaptureKeyboard(CLuaState &ls); static int resetCaptureKeyboard(CLuaState &ls); static int setOnDraw(CLuaState &ls); // params: CInterfaceGroup*, "script". return: none static int addOnDbChange(CLuaState &ls); // params: CInterfaceGroup*, "dblist", "script". return: none static int removeOnDbChange(CLuaState &ls);// params: CInterfaceGroup*. return: none static int getUICaller(CLuaState &ls); // params: none. return: CInterfaceElement* (nil if error) static int getCurrentWindowUnder(CLuaState &ls); // params: none. return: CInterfaceElement* (nil if none) // can specify verbose display when the element is note found (default is true) static int createGroupInstance(CLuaState &ls); // params : param 1 = template name, // param 2 = id of parent where the instance will be inserted // param 3 = table with ("template_param", "template_param_value") key/value pairs // such as { id="foo", x="10" } etc. -> returns a new instance of the template, or nil on fail static int createRootGroupInstance(CLuaState &ls); // params : param 1 = template name, // param 2 = id of parent where the instance will be inserted // param 3 = table with ("template_param", "template_param_value") key/value pairs // such as { id="foo", x="10" } etc. -> returns a new instance of the template, or nil on fail static int createUIElement(CLuaState &ls); // params : param 1 = template name, // param 2 = id of parent where the instance will be inserted // param 3 = table with ("template_param", "template_param_value") key/value pairs // such as { id="foo", x="10" } etc. -> returns a new instance of the template, or nil on fail static int displayBubble(CLuaState &ls); // params : param 1 = bot id // param 2 = text // param 3 = table with all strings and urls // {"main text"="http:///", "text option 1"="http:///", "text option 2"="http:///") etc... static int getIndexInDB(CLuaState &ls); // params: CDBCtrlSheet*.... return: index, or 0 if error static int getUIId(CLuaState &ls); // params: CInterfaceElement*. return: ui id (empty if error) static int runAH(CLuaState &ls); // params: CInterfaceElement *, "ah", "params". return: none static int runExpr(CLuaState &ls); // params: "expr". return: any of: nil,bool,string,number, RGBA, UCString static int runFct(CLuaState &ls); // params: "expr", param1, param2.... return: any of: nil,bool,string,number, RGBA, UCString static int runCommand(CLuaState &ls); // params: "command name", param1, param2 ... return true or false static int formatUI(CLuaState &ls); // params: "expr", param1, param2.... return: string with # and % parsed static int formatDB(CLuaState &ls); // params: param1, param2.... return: string with @ and , added static int launchContextMenuInGame(CLuaState &ls); // params : menu name static int parseInterfaceFromString(CLuaState &ls); // params : intreface script static int updateAllLocalisedElements(CLuaState &ls); static int breakPoint(CLuaState &ls); static int getWindowSize(CLuaState &ls); static int i18n(CLuaState &ls); // retrieve an unicode string from CI18N static int setTextFormatTaged(CLuaState &ls); // set a text that may contains Tag Format infos static int validMessageBox(CLuaState &ls); // ok/cancel type message box (can't get it to work through luabind) static int concatUCString(CLuaState &ls); // workaround for + operator that don't work in luabind for ucstrings ... static int concatString(CLuaState &ls); // speedup concatenation of several strings static int tableToString(CLuaState &ls); // concat element of a table to build a string static int setTopWindow(CLuaState &ls); // set the top window static int initEmotesMenu(CLuaState &ls); static int isUCString(CLuaState &ls); static int hideAllWindows(CLuaState &ls); static int hideAllNonSavableWindows(CLuaState &ls); static int getDesktopIndex(CLuaState &ls); static int setLuaBreakPoint(CLuaState &ls); // set a breakpoint in lua external debugger (file, line) static int getMainPageURL(CLuaState &ls); static int getCharSlot(CLuaState &ls); static int displaySystemInfo(CLuaState &ls); static int setWeatherValue(CLuaState &ls); // first value is a boolean to say automatic, second value ranges from of to 1 and gives the weather static int getWeatherValue(CLuaState &ls); // get current real weather value (blend between server driven value & predicted value). Manual weather value is ignored static int disableContextHelpForControl(CLuaState &ls); // params: CCtrlBase*. return: none static int disableContextHelp(CLuaState &ls); static int getPathContent(CLuaState &ls); static int getServerSeason(CLuaState &ls); // get the last season sent by the server // 0->auto, computed locally from the current day (or not received from server yet) // 1->server force spring // 2->' ' ' summer // 3->' ' ' autumn // 4->' ' ' winter static int computeCurrSeason(CLuaState &ls); // compute current displayed season (1->spring, etc .) static int getAutoSeason(CLuaState &ls); // compute automatic season that would be at this time (1->spring, etc .) static int getTextureSize(CLuaState &ls); static int enableModalWindow(CLuaState &ls); static int disableModalWindow(CLuaState &ls); static int getPlayerPos(CLuaState &ls); static int getPlayerFront(CLuaState &ls); static int getPlayerDirection(CLuaState &ls); static int getPlayerGender(CLuaState &ls); static int getPlayerName(CLuaState &ls); static int getPlayerTitleRaw(CLuaState &ls); static int getPlayerTitle(CLuaState &ls); static int getTargetPos(CLuaState &ls); static int getTargetFront(CLuaState &ls); static int getTargetDirection(CLuaState &ls); static int getTargetGender(CLuaState &ls); static int getTargetName(CLuaState &ls); static int getTargetTitleRaw(CLuaState &ls); static int getTargetTitle(CLuaState &ls); static int addSearchPathUser(CLuaState &ls); static int getClientCfgVar(CLuaState &ls); static int isPlayerFreeTrial(CLuaState &ls); static int isPlayerNewbie(CLuaState &ls); static int isInRingMode(CLuaState &ls); static int getUserRace(CLuaState &ls); static int getSheet2idx(CLuaState &ls); static int getTargetSlot(CLuaState &ls); static int getSlotDataSetId(CLuaState &ls); // LUA functions exported for Dev only (debug) static int deleteUI(CLuaState &ls); // params: CInterfaceElement*.... return: none static int deleteReflectable(CLuaState &ls); // params: CInterfaceElement*.... return: none static int dumpUI(CLuaState &ls); // params: CInterfaceElement*.... return: none static int setKeyboardContext(CLuaState &ls); static int getCompleteIslands(CLuaState &ls); static int getIslandId(CLuaState &ls);//TEMP ///////////////////////////// Standard Lua stuff ends here ////////////////////////////////////////////// static sint32 getDbProp(const std::string &dbProp); // return 0 if not found. static void setDbProp(const std::string &dbProp, sint32 value); // Nb: the db prop is not created if not present. static void addDbProp(const std::string &dbProp, sint32 value); // Nb: the db prop is created if not present. static void delDbProp(const std::string &dbProp); public: // Print a message in the log. // Lua messages must be enabled (with ClientCfg.DisplayLuaDebugInfo = 1) // Additionnally, if ClientCfg.LuaDebugInfoGotoButtonEnabled is set, then // a button will be created near the line to allow to goto the lua line that issued the message // by using an external editor static void debugInfo(const std::string &dbg); // Print a message in the log // No 'goto file' button is created // Lua messages must be enabled (with ClientCfg.DisplayLuaDebugInfo = 1) static void dumpCallStack(int startStackLevel = 0); /** execute function that is currently on the stack, possibly outputing error messages to the log * \return true if execution succeeded */ static bool executeFunctionOnStack(CLuaState &ls, int numArgs, int numRet); private: static void rawDebugInfo(const std::string &dbg); // Dump callstack in the console // Additionnally, if ClientCfg.LuaDebugInfoGotoButtonEnabled is set, then // buttons will be created in fonr of eahc line to allow to goto the lua line that issued the message // by using an external editor static void getCallStackAsString(int startStackLevel, std::string &result); static std::string getDefine(const std::string &def); static void setContextHelpText(const ucstring &text); static void messageBox(const ucstring &text); static void messageBox(const ucstring &text, const std::string &masterGroup); static void messageBox(const ucstring &text, const std::string &masterGroup, int caseMode); static void messageBox(const std::string &text); static void messageBoxWithHelp(const ucstring &text); static void messageBoxWithHelp(const ucstring &text, const std::string &masterGroup); static void messageBoxWithHelp(const ucstring &text, const std::string &masterGroup, int caseMode); static void messageBoxWithHelp(const std::string &text); static ucstring replacePvpEffectParam(const ucstring &str, sint32 parameter); static sint32 secondsSince1970ToHour(sint32 seconds); static void pauseBGDownloader(); static void unpauseBGDownloader(); static void requestBGDownloaderPriority(uint priority); static sint getBGDownloaderPriority(); static ucstring getPatchLastErrorMessage(); static bool isInGame(); static uint32 getPlayerSelectedSlot(); static bool isPlayerSlotNewbieLand(uint32 slot); // test if one of the player slot is a newbieland one, if not so, client must be patched in order to continue // GameInfo static sint32 getSkillIdFromName(const std::string &def); static ucstring getSkillLocalizedName(sint32 skillId); static sint32 getMaxSkillValue(sint32 skillId); static sint32 getBaseSkillValueMaxChildren(sint32 skillId); static sint32 getMagicResistChance(bool elementalSpell, sint32 casterSpellLvl, sint32 victimResistLvl); static sint32 getDodgeParryChance(sint32 attLvl, sint32 defLvl); static void browseNpcWebPage(const std::string &htmlId, const std::string &url, bool addParameters, double timeout); static void clearHtmlUndoRedo(const std::string &htmlId); static ucstring getDynString(sint32 dynStringId); static bool isDynStringAvailable(sint32 dynStringId); static bool isFullyPatched(); static std::string getSheetType(const std::string &sheet); static std::string getSheetName(uint32 sheetId); static sint32 getFameIndex(const std::string &factionName); static std::string getFameName(sint32 fameIndex); static sint32 getFameDBIndex(sint32 fameIndex); // convert from the fame index static sint32 getFirstTribeFameIndex(); // fame index of the 1st tribe static sint32 getNbTribeFameIndex(); // number of tribe fame index (which are contiguous) static std::string getClientCfg(const std::string &varName); static bool fileExists(const std::string &fileName); static void sendMsgToServer(const std::string &msgName); static void sendMsgToServerPvpTag(bool pvpTag); static bool isGuildQuitAvailable(); static void sortGuildMembers(); static sint32 getNbGuildMembers(); static std::string getGuildMemberName(sint32 nMemberId); static std::string getGuildMemberGrade(sint32 nMemberId); static bool isR2Player(const std::string &sheet); static std::string getR2PlayerRace(const std::string &sheet); static bool isR2PlayerMale(const std::string &sheet); // sheet access // TODO nico : using the reflection system on sheets would allow to export them to lua without these functions ... static std::string getCharacterSheetSkel(const std::string &sheet, bool isMale); static sint32 getSheetId(const std::string &itemName); static sint getCharacterSheetRegionForce(const std::string &sheet); static sint getCharacterSheetRegionLevel(const std::string &sheet); static std::string getRegionByAlias(uint32 alias); // open the window to do a tell to 'player', if 'msg' is not empty, then the message will be sent immediatly // else, current command of the chat window will be replaced with tell 'player' static void tell(const ucstring &player, const ucstring &msg); static bool isRingAccessPointInReach(); static void updateTooltipCoords(); // test if the ctrl key is down (NB nico : I didn't add other key, // because it would be too easy to write a key recorder ...) static bool isCtrlKeyDown(); static std::string encodeURLUnicodeParam(const ucstring &text); static sint32 getPlayerLevel(); // get max level among player skills (magi, combat, crafting ,foraging) static sint64 getPlayerVpa(); static sint64 getPlayerVpb(); static sint64 getPlayerVpc(); static sint32 getTargetLevel(); // get current, precise level of the selected target, or -1 if there's no such selected target static sint32 getTargetForceRegion(); // get 'force region' for current target, or -1 if there's no selected target static sint32 getTargetLevelForce(); // get 'level force' for current target, or -1 if there's no selected target static ucstring getTargetSheet(); // get the name of the target sheet (like 'zoha2old.creature') static sint64 getTargetVpa(); static sint64 getTargetVpb(); static sint64 getTargetVpc(); static bool isTargetNPC(); // return 'true' if the target is an npc static bool isTargetPlayer(); // return 'true' if the target is a player static bool isTargetUser(); // return 'true' if the target is the user static bool isPlayerInPVPMode(); static bool isTargetInPVPMode(); public: // Create a special tag that will add a 'goto' button for the given file and line // The tag should be appended in front of a string to use with 'rawDebugInfo'. // when the final string will be printed, a button will be created in front of it // Requires that 'ClientCfg.LuaDebugInfoGotoButtonEnabled' is set to 1, else // a, empty tag is returned static std::string createGotoFileButtonTag(const char *fileName, uint line); static int runExprAndPushResult(CLuaState &ls, const std::string &expr); // Used by runExpr and runFct }; #endif