标签:
原作者: ayase
8-27修正
修复首次使用后的红字
不需要额外进数据库导入计分表,这lua全自动生成
--------------------------------------------------------------
惯例写在前面:
写这玩意其实学习性更大于目的性。。
= =研究了两天晚上写的我人参中滴第一个lua脚本,居然还真给我写出来了,好感动
由于写代码的基础基本是零 所以碰了N+N次壁
什么函数字母大小写还要区分 -- 闹哪样啊喂 因为这个原因我试了半个多钟才发现问题所在
什么函数命名 基本我感觉除了我自己能看得懂之外没别人能看得懂的了 我自己都感觉无法直视了,总之乱七八糟的 ,各种中西合并,英文+拼音混搭,反正跟规范完全不搭边,嘛,对于我这小白来说反正能用就得了。。
对于语句优化。。。 反正没优化过 而且有大量重复或者完全没必要的语句 所以执行效率并不是说很好
嘛 反正自己用也不在意了。。
都是看别人的脚本(item_up.lua)才会了这么点皮毛。。
然后不得不说不知道为啥我手头的item_up.lua 只有这么个文件 配套的sql居然没有
我这是在哪扒的脚本没扒干净啊
最后看一晚上这个脚本终于算是还原出来数据库的表了 在这么纠结的情况下唯一庆幸的是因为这个lua是我基本上是看懂了。。
然后对应lua的执行过程有了点了解了算是
但是还有好多不懂的说。。
= = 废话这么多 进正题吧。。
解压后放到服务端 lua_Scripts 文件夹下即可
使用之前首先用文本(最好是nptepad++之类的高级文本编辑工具,否则可能会导致游戏乱码)打开该lua
修改这几个参数
local ItemEntry=70008 --积分宝石
local jf_entry=70002 --要领取的物品id
local jf_mins=10 --每多少分钟领取
依次分别是 积分宝石(即点击后打开下面的面板),在线时间可以领取的物品id,每多少分钟可以领取一个
1 print (">> loading online_jf.lua") 2 3 4 local ItemEntry=70008 --用于使用后查看积分并兑换的物品entry。 ps 其实可以整合到什么超级炉石那里的,所选用的物品必须带技能的能使用的。 5 local jf_entry=70002 --代表积分的物品可以叫某某货币之类的,本来想直接加在数据库值然后读取的 不过兑换东西的时候太麻烦,所以还是做成了物品容易用于兑换。 6 local jf_mins=10 --设置每多少分钟得到1点积分。 7 8 local mins=nil 9 local jf=nil 10 local jf_count=nil 11 local inGameTime=nil 12 local playergid=nil 13 local jf_DBtime=nil 14 local jf_ingametime=nil 15 16 local function online_jf(event, player, item, target) 17 player:MoveTo(0,player:GetX(),player:GetY(),player:GetZ()+0.01) 18 --player:GossipComplete() 19 player:GossipClearMenu() 20 playergid=item:GetOwnerGUID() 21 jf_DBtime=CharDBQuery("SELECT * FROM characters_jf WHERE guid="..playergid..";") 22 if (jf_DBtime==nil) then 23 CharDBExecute("insert into characters_jf (guid,jf_time,jf) VALUES ("..playergid..",0,0);") 24 player:SendBroadcastMessage("首次领取,初始化数据,请再次点击使用。") 25 else 26 inGameTime=player:GetTotalPlayedTime() 27 jf_ingametime=math.modf(inGameTime-jf_DBtime:GetUInt32(1)) 28 jf=math.modf(jf_ingametime/60/jf_mins) 29 mins=math.modf(jf_ingametime/60) 30 jf_count=player:GetItemCount(jf_entry) 31 if(jf_count==nil) then 32 jf_count=0 33 end 34 player:GossipComplete() 35 player:GossipMenuAddItem(0,"您当前拥有"..GetItemLink(jf_entry).." x "..jf_count.."。\n\n累计共领取"..GetItemLink(jf_entry).." x "..jf_DBtime:GetUInt32(2).."\n\n累计未兑换的在线时间: "..mins.."分钟\n\n每在线"..jf_mins.."分钟可以兑换"..GetItemLink(jf_entry).." x 1 \n\n你当前一共可以兑换"..GetItemLink(jf_entry).." x "..jf.." ",1,1) 36 player:GossipMenuAddItem(1,"点击确定兑换",1,1) 37 player:GossipSendMenu(1, item) 38 --player:GossipClearMenu() 39 --player:GossipComplete() 40 end 41 end 42 43 local function timetojf(event, player, item, target) 44 if (jf==0) then 45 player:SendBroadcastMessage("兑换失败,累计在线时间少于"..jf_mins.."分钟。") 46 else 47 jf=math.modf(jf_ingametime/60/jf_mins) 48 player:AddItem(jf_entry, jf) 49 playergid=item:GetOwnerGUID() 50 CharDBExecute("update characters_jf set jf_time=jf_time+"..jf_ingametime..",jf=jf+"..jf.." where guid="..playergid..";") 51 player:SendBroadcastMessage("成功兑换"..GetItemLink(jf_entry).." x " ..jf) 52 player:GossipComplete() 53 player:GossipClearMenu() 54 end 55 56 end 57 58 59 CharDBExecute([[ 60 CREATE TABLE IF NOT EXISTS `characters_jf` ( 61 `guid` int(10) NOT NULL, 62 `jf_time` int(10) NOT NULL DEFAULT ‘0‘, 63 `jf` int(10) NOT NULL DEFAULT ‘0‘, 64 PRIMARY KEY (`guid`) 65 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 66 ]]) 67 68 69 RegisterItemEvent(ItemEntry, 2, online_jf) 70 RegisterItemGossipEvent(ItemEntry, 2, timetojf)
online_jf.lua --累计在线时间领取物品(积分)的lua脚本
标签:
原文地址:http://www.cnblogs.com/CE-Z/p/4847464.html