lua腳本實例
⑴ 游戲的LUA任務腳本要怎麼寫
1.在主城放置一個NPC介紹任務,NPC負責出售12個生肖布偶。周一到周五玩家每天上線都可以花費5個金幣在NPC處購買到一個布偶(可自行選擇)。
2.玩家購買到的布偶的持續時間只能到當周日的晚上23:59分
3.玩家每購買一個布偶就在彩池處累計5個金幣,每賣出5個娃娃系統抽取5個金幣,抽取的5個金幣不累計入彩池。系統要記錄每種布偶出售的數量。
4.周六和周日開出當周幸運生肖布偶,隨機從12個生肖中抽取1個作為中獎生肖,玩家可以直接點擊背包中的布偶查詢當周的幸運生肖,猜中得獎勵,猜錯返回經驗。
5.周末的時候將所有彩池中的70%金幣的量平分給中獎的玩家,剩餘的30%金幣則累計到下一個星期的彩池中。
6.每個月的最後一個周六下午15:00-16:59分進行回饋活動,將當周累計的30%金幣中的10%部分系統扣除,10%部分返還給玩家。返還方式如下
7.活動時間內在主城刷新很小的生肖NPC,放在角落,玩家點擊到NPC直接獲得1點金幣
8.全部返還後給提示活動結束,XXX個金幣已經全部送出。如果金幣沒有送完則一直送到送完為止。
⑵ 請問自己的軟體如何運行Lua腳本
programming in lua 有相關的例子,一般腳本語言和c/c++之類的互相調用分兩類,一類是擴展,就是將c/c++模塊封裝起來給腳本語言用,用swig做封裝很方便的,一類是嵌入,就是在c/c++等應用中嵌入lua引擎,一般是用來分離經常變化的邏輯部分,比如WOW就是用lua語言作為擴展,用戶可以編寫lua腳本來完成一些特定功能的機器人。你要做的就是使用lua c api來在你的程序中執行lua。類似這種:
int iErr = 0;
lua_State *lua = lua_open (); // Open Lua
luaopen_io (lua); // Load io library
if ((iErr = luaL_loadfile (lua, "test.lua")) == 0)
{
// Call main...
if ((iErr = lua_pcall (lua, 0, LUA_MULTRET, 0)) == 0)
{
// Push the function name onto the stack
lua_pushstring (lua, "helloWorld");
// Function is located in the Global Table
lua_gettable (lua, LUA_GLOBALSINDEX);
lua_pcall (lua, 0, 0, 0);
}
}
lua_close (lua);
⑶ lua賬號密碼讀取腳本實現教程
lua游戲腳本中,有許多是需要登錄許多小號,這些小號一般存放在一個文檔里,腳本運行時需要讀取這些數據。
下面有個txt文檔,記錄這賬號與密碼的數據,如下
其中,左邊為賬號,右邊為密碼,中間用空格隔開(空格數不確定)。賬號允許使用中英文、數字、符號(但不允許有空格),密碼允許使用中英文、數字、符號(允許有空格,但不允許出現在最前或最後),忽略每行的首尾空格。
下面在電腦上進行測試,由於我的電腦的操作系統是Windows簡體中文版,也就是系統的字元編碼為GBK。而手機採用的字元編碼一版是UTF-8(特別要注意這點!)
為了避免亂碼,將txt文檔與lua文件均採用和系統的字元編碼相同的編碼(很重要!)
對於GBK編碼的系統,保存時,選擇ANSI(記事本默認保存的就是這個格式)
如果用於手機上運行,則選擇UTF-8
lua實現:
運行結果:
稍作修改即可應用於手機端,這里以iOS作為演示:
日誌:
本程序的主要難點在於,逐行讀取的迭代器lines()函數、trim()函數實現、賬號密碼的匹配、table的操作。
其中用到的自定義函數string.trim()大家可以記一下,方便在自己的程序里調用,還是挺實用的。
⑷ lua腳本怎麼取出自己想要的的部分字元
你好,以前沒接觸過lua,剛自己試了一下,就按照你問題中的"23^Hello^你好^2000^world.txt"這個字元串為例,以^為分隔符來說吧:
---------------start---------------
str = "23^Hello^你好^2000^world.txt"
list = table.pack()
for w in string.gmatch(str, "[^^]+") do
print(w)
table.insert(list, w)
end
---------------start---------------
解釋:代碼共6行,
第1行:定義一個變數str,內容為"23^Hello^你好^2000^world.txt",這也是我們要處理的字元串.
第二行: 定義一個空列表,它是用在下面的for循環中,存放以"^"作為分隔符的每一部分
第三行:簡單來看是個for循環,深入一點來看,也就是string.gmatch(str,"[^^]+")這部分需要解釋一下,它表示調用的是string庫的gmatch()函數,這個函數有兩個參數,第1個參數為要處理的字元串,咱們這里就是上面定義的str,第二個參數就是我們要在這個字元串中匹配什麼樣的內容,這里的匹配內容寫的是"[^^]+",學過正則的很好理解,單純的[abc]表示匹配任意單個字元a或b或c,有一點特殊的是一旦[]中的字元是以^打頭的,則表示匹配任意非[]中列出的字元,如[^abc]表示匹配任意除abc外的其它任一字元,所以[^^]解釋為匹配除^外的任一字元,舉例來說,如果我們有字元串"23^Hello",如果用[^^]匹配的話,最終得到的是7個單個字元,即"2","3","H","e","l","l","o",顯示這不符合我們的題意,所以在這基礎上改進了一下,即在其後又加了個+號,[^^]+,這里的+號表示盡可能多地匹配它前面內容,這里也就是盡可能多地匹配[^^],所以[^^]+在處理"23^Hello"的時候,結果得到的就是"23","Hello".這里關於用到的這個正則說的不是太清楚,多練練就明白了。最後,第3行把函數部分給替換掉後,可以理解為:for w in [23,Hello,你好,2000,world.txt],每次從[]中取一個值賦給w,然後執行for下面的語句,接著往下看
第4行,接第3行尾,就是把每次賦給w的值都列印出來
第5行,將每次賦給w的值都追加到列表list中
第6行,for循環語法上的閉合關鍵字,這個沒啥說的
到此,我們得到了一個列表值為[23,Hello,你好,2000,world.txt]的list,此時我們就可以使用list[n]來取我們想要的值了 。
*.如果你要問上面最3條最後不都有[23,Hello,你好,2000,world.txt]了嘛,為啥還要那麼麻煩,直接使用string.gmatch()函數不就行了嘛,其實第3條結尾我那麼寫只是為了讓你好理解,實際上gmatch()函數的返回值並不是列表,而是一個可迭代的函數,而for循環的作用就是把gmatch()函數返回的這個可迭代的函數中的每個元素都取出來並賦給列表list
*.說的有點啰嗦了,希望對你有幫助吧,另外,我從沒用過lua,也是剛查了查,自己實踐了一下,希望不會形成誤導
⑸ lua編寫腳本在wireshark中實現,現有偏移是offset按位偏移,在某些欄位需按bit解析,應該怎麼做
比如說第一個bit代表的標志為flag1,後7個bit代表的標志為flag2。那麼flag1和flag2作為要加入tree的field,可以表示為:
flag1=ProtoField.uint8("your_protol_flag1", "flag1", base.DEC, null, 0x80)
flag2=ProtoField.uint8("your_protol_flag2", "flag2", base.DEC, null, 0x7F)
其中0x80,0x7F為按位操作的掩碼,作用分別是取uint8的第一位和後七位。
然後將field加入子樹中即可:
subtree:add(flag1, buffer(offset+2, 1))
subtree:add(flag2, buffer(offset+2, 1))
-------------------------------------------
wireshark官方API地址為:網頁鏈接