online_jf.lua --累计在线时间领取物品(积分)的lua脚本

2023-10-29 02:30

本文主要是介绍online_jf.lua --累计在线时间领取物品(积分)的lua脚本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

4

 1

 2

 3

 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)
查看代码

 

转载于:https://www.cnblogs.com/CE-Z/p/4847464.html

这篇关于online_jf.lua --累计在线时间领取物品(积分)的lua脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/297661

相关文章

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现