Mudlet tables6/3/2023 ![]() In the more modern front we’ll be leveraging Mudlet as the game client, the cloud service LogStream Cloud as our data collection pipeline, and ElasticSearch/ Kibana as the database and analysis tools. In the old-school corner we’ve got the game itself with a C code base originating from the 90’s that is played through the Telnet protocol. To accomplish this we’ll be bridging some old school technologies with some more modern applications and services. We’ll be covering a specific game, BlackMUD, an online based Multi-User Dungeon/Dimension (MUD) and establishing the capability to analyze the outcome quality of the game’s random number generators. From the video game perspective the player puts their faith that the random element is intentional and fair. ![]() If you're working on coding Mudlet itself, use this function to tell where the actual definition of a function is.A key aspect to many games is the element of chance where the outcome, good or bad, is dependent upon a random fact outside the player’s control. You can also use it to get more information on the Alias# / Trigger# objects you see in the error console: Lua brings a helpful debug.getinfo(function) function, which gets you some information about where a function comes from: whenever it's your own, or one defined by Mudlet (in C++ or Lua). Newer ones that do support them are completely fine, however!Ĭoroutines have many uses: finite state machines, running intensive tasks (yielding every once in a while so Mudlet isn't frozen), and so on. Older Mudlets that don't support coroutines might crash, which sucks. Note that if you'll be using coroutines as part of a package you'll give to others, remember about the if mudlet.supportscoroutines then return end bit. You can also install the demo as a package - paste this into Mudlet: You'll see that the send()'s are being sent one at a time, instead of all at once as they would have been without the yields. create a coroutine that'll be running our ritual function - or re-use the one we're already using if there is one ritualcoroutine = ritualcoroutine or coroutine.create ( ritual ) - run the coroutine until a coroutine.yield() and see - if there's any more code to run local moretocome = coroutine.resume ( ritualcoroutine ) - if there's no more code to run - remove the coroutine, - so next time you call the alias - a new one gets made if not moretocome then ritualcoroutine = nil end This is stored in multimatches as the value of key=1 in the sub-table matches which, in turn, is the value of key=1 of the table multimatches. The first trigger condition (=regex 1) got as the first full match "You have not completed any quests". ![]() You can now see what the table multimatches contains in this case. The function showMultimatches() prints out the content of the table multimatches. The table multimatches contains : - regex 1 captured : ( multimatches ) key = 1 value = You have not completed any quests key = 2 value = not key = 3 value = completed key = 4 value = any key = 5 value = quests regex 2 captured : ( multimatches ) key = 1 value = You are refreshed, hungry, very young and brave key = 2 value = refreshed key = 3 value = young key = 4 value = and key = 5 value = brave. You are refreshed, hungry, very young and brave. You have an almost non-existent ability for avoiding hits. The command "score" generates the following output on batMUD: In the case of a multiline trigger with these 2 Perl regex as conditions: The following example can be tested on the game : multimatches stores its matches by lines, inside each line are the relevant matches to it. Multimatches is the complement of matches when matching multi-line triggers. ![]() Nick Gammon has also written a nice overview on how to deal with Lua tables. A good overview of tables is available on Lua's wiki in the TablesTutorial. ![]()
0 Comments
Leave a Reply. |