原作者: 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,每多少分钟可以领取一个

  print (">> loading online_jf.lua")

 local ItemEntry= --用于使用后查看积分并兑换的物品entry。 ps 其实可以整合到什么超级炉石那里的,所选用的物品必须带技能的能使用的。
local jf_entry= --代表积分的物品可以叫某某货币之类的,本来想直接加在数据库值然后读取的 不过兑换东西的时候太麻烦,所以还是做成了物品容易用于兑换。
local jf_mins= --设置每多少分钟得到1点积分。 local mins=nil
local jf=nil
local jf_count=nil
local inGameTime=nil
local playergid=nil
local jf_DBtime=nil
local jf_ingametime=nil local function online_jf(event, player, item, target)
player:MoveTo(,player:GetX(),player:GetY(),player:GetZ()+0.01)
--player:GossipComplete()
player:GossipClearMenu()
playergid=item:GetOwnerGUID()
jf_DBtime=CharDBQuery("SELECT * FROM characters_jf WHERE guid="..playergid..";")
if (jf_DBtime==nil) then
CharDBExecute("insert into characters_jf (guid,jf_time,jf) VALUES ("..playergid..",0,0);")
player:SendBroadcastMessage("首次领取,初始化数据,请再次点击使用。")
else
inGameTime=player:GetTotalPlayedTime()
jf_ingametime=math.modf(inGameTime-jf_DBtime:GetUInt32())
jf=math.modf(jf_ingametime//jf_mins)
mins=math.modf(jf_ingametime/)
jf_count=player:GetItemCount(jf_entry)
if(jf_count==nil) then
jf_count=
end
player:GossipComplete()
player:GossipMenuAddItem(,"您当前拥有"..GetItemLink(jf_entry).." x "..jf_count.."。\n\n累计共领取"..GetItemLink(jf_entry).." x "..jf_DBtime:GetUInt32().."\n\n累计未兑换的在线时间: "..mins.."分钟\n\n每在线"..jf_mins.."分钟可以兑换"..GetItemLink(jf_entry).." x 1 \n\n你当前一共可以兑换"..GetItemLink(jf_entry).." x "..jf.." ",,)
player:GossipMenuAddItem(,"点击确定兑换",,)
player:GossipSendMenu(, item)
--player:GossipClearMenu()
--player:GossipComplete()
end
end local function timetojf(event, player, item, target)
if (jf==) then
player:SendBroadcastMessage("兑换失败,累计在线时间少于"..jf_mins.."分钟。")
else
jf=math.modf(jf_ingametime//jf_mins)
player:AddItem(jf_entry, jf)
playergid=item:GetOwnerGUID()
CharDBExecute("update characters_jf set jf_time=jf_time+"..jf_ingametime..",jf=jf+"..jf.." where guid="..playergid..";")
player:SendBroadcastMessage("成功兑换"..GetItemLink(jf_entry).." x " ..jf)
player:GossipComplete()
player:GossipClearMenu()
end end CharDBExecute([[
CREATE TABLE IF NOT EXISTS `characters_jf` (
`guid` int(10) NOT NULL,
`jf_time` int(10) NOT NULL DEFAULT '0',
`jf` int(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
]]) RegisterItemEvent(ItemEntry, , online_jf)
RegisterItemGossipEvent(ItemEntry, , timetojf)

查看代码

online_jf.lua --累计在线时间领取物品(积分)的lua脚本的更多相关文章

  1. Lua库之时间和日期操作

    Lua库之时间和日期操作 (2010-02-07 18:41:20) 转载▼ os.time() <== 返回当前系统的日历时间os.date() <== 返回本地化的时间字符串,这里是& ...

  2. Lua获取网络时间

    作者:ani_di  版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di Lua获取网络时间 网络授时服务是一些网络上的时间服务器提供的时间,一般用于本地时钟同步. ...

  3. Lua与C++交互初探之C++调用Lua

    Lua与C++交互初探之C++调用Lua 自从学习了lua这个脚本语言之后,无时不想着将他与c/c++联系起来,看看他真正的威力.奈何水平有限,网上找的代码无论怎样都无法运行成功.我知道是我少了某一步 ...

  4. Lua学习笔记(一)-----C#和lua的交互

    一直以来对Lua热更新技术很感兴趣,在上周开始了对Lua的学习,主要学的是uLua. 直接上干货 准备工作: LuaInterface包括两个核心库一个是LuaInterface.dll,一个是Lua ...

  5. Win32下 Qt与Lua交互使用(三):在Lua脚本中connect Qt 对象

    话接上文.笔者为了方便使用Lua,自己编写了一个Lua的类.主要代码如下: QLua.h #ifndef QLUA_H #define QLUA_H // own #include "inc ...

  6. Win32下 Qt与Lua交互使用(二):在Lua脚本中使用Qt类

    话接上篇.成功配置好Qt+Lua+toLua后,我们可以实现在Lua脚本中使用各个Qt的类.直接看代码吧. #include "include/lua.hpp" #include ...

  7. 深入探究Lua的GC算法(下)-《Lua设计与实现》

    紧接着上一篇文章zblade:深入探究Lua的GC算法(上)-<Lua设计与实现> 这篇文章让我们收尾GC的具体后续操作.转载请标明出处:http://www.cnblogs.com/zb ...

  8. lua入门之二:c/c++ 调用lua及多个函数返回值的获取

    当 Lua 调用 C 函数的时候,使用和 C 调用 Lua 同样类型的栈来交互. C 函数从栈中获取她的參数.调用结束后将返回结果放到栈中.为了区分返回结果和栈中的其它的值,每一个 C 函数还会返回结 ...

  9. 【lua学习笔记】——在sublime中配置Lua运行环境

    一.让Sublime可以运行lua脚本 打开sublime 选择tools-->Build System-->New Build System   在新出现的文件中输入如下内容: { &q ...

随机推荐

  1. scala学习----柯里化

    1.鸭子类型,走起来像鸭子,叫起来像鸭子,就是鸭子.函数中使用{ def close(): Unit }作为参数类型,因此任何含有此函数的类都可以作为参数传递.好处是不必使用继承特性. def wit ...

  2. what we do and how we behave

    It comes after a report last week revealed the "brutal" treatment of terror suspects by th ...

  3. shell 指定范围随机数抽取

  4. class can not be find with platformType:1 step 1

    使用第三方库的时候 (配合cocopods)混合使用一定要注意 为什么会出现这样的问题... 苦苦难为我半天时间 都有想打人的冲动 前天一切正常今天出来个这 原因很简单当使用cocopods的时候默认 ...

  5. SIT_服务器系统整合测试总结

    从2012年到2015年我的3年服务器测试,感觉一下子时间就已经飞逝而过,一直希望做个前三年的工作总结,现在用我那笨拙的笔触记录下自己的三年服务器测试生活! ***2012-2013 SE 这一年基本 ...

  6. Highcharts指南

    摘要 Highcharts图表控件是目前使用最为广泛的图表控件.本文将从零开始逐步为你介绍Highcharts图表控件.通过本文,你将学会如何配置Highcharts以及动态生成Highchart图表 ...

  7. 安装mysql sever 向导失败,最后一步无响应

    在配置apache+php+mysql环境的时候,apache和php都可以运行,这里提供两个安装教程(window环境) http://apps.hi.baidu.com/share/detail/ ...

  8. .NET微信模拟登录及{base_resp:{ret:-4,err_msg:nvalid referrer}}的解决办法

    12年的时候写了些关于微信开发的内容,当时看好这个东西,可惜当时腾讯开放的权限太少,之后的一年多时间没有太关注了. 现在又要重新开始微信开发的阵容了,微信只是个入口,微网站才是趋势. 我是个水货,所以 ...

  9. Eclipse/JavaWeb (一)三大框架之struts框架 持续更新中...

    最近主要把javaweb的三大框架过一遍. (一)发展历史 传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使得程序分为几层,有 ...

  10. NSOperation实现线程间通信

    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //1.创建队列 NSOperat ...