很多人反馈需要增加一个游戏里面使用以后增加剩余时间的道具,很简单,以下是lua的具体代码:
- -- 配置表:物品ID与增加的游戏时间(以秒为单位)的映射
- local ItemTimeConfig = {
- [2454] = 3600, -- 物品ID 2454 增加 1 小时
- [2455] = 7200, -- 物品ID 2455 增加 2 小时
- [2456] = 1800, -- 物品ID 2456 增加 30 分钟
- -- 你可以在这里添加更多的物品ID和对应的时间
- }
-
- -- 辅助函数:将秒数转换为“xx天xx小时xx分钟xx秒”格式
- local function FormatTime(seconds)
- local days = math.floor(seconds / 86400)
- seconds = seconds % 86400
- local hours = math.floor(seconds / 3600)
- seconds = seconds % 3600
- local minutes = math.floor(seconds / 60)
- seconds = seconds % 60
-
- local timeString = ""
- if days > 0 then
- timeString = timeString .. days .. "天"
- end
- if hours > 0 then
- timeString = timeString .. hours .. "小时"
- end
- if minutes > 0 then
- timeString = timeString .. minutes .. "分钟"
- end
- timeString = timeString .. seconds .. "秒"
-
- return timeString
- end
-
- -- 玩家使用指定物品的事件处理函数
- local function OnItemUse(event, player, item, target)
- local usedItemId = item:GetEntry()
-
- -- 检查使用的物品是否在配置表中
- if ItemTimeConfig[usedItemId] then
- local additionalTime = ItemTimeConfig[usedItemId]
- local accountId = player:GetAccountId()
-
- -- 查询数据库,获取玩家的剩余游戏时间
- local result = CharDBQuery("SELECT remainingTime FROM WYtime WHERE id = " .. accountId)
-
- if result then
- -- 获取当前剩余时间
- local remainingTime = result:GetUInt32(0)
-
- -- 增加额外时间
- remainingTime = remainingTime + additionalTime
-
- -- 更新数据库中的剩余时间
- CharDBExecute("UPDATE WYtime SET remainingTime = " .. remainingTime .. " WHERE id = " .. accountId)
-
- -- 格式化新剩余时间
- local formattedTime = FormatTime(remainingTime)
-
- -- 向玩家发送消息,通知剩余游戏时间已增加
- player:SendBroadcastMessage("你使用了时间点卡,游戏时间增加了 " .. FormatTime(additionalTime) .. "。你现在有 " .. formattedTime .. " 的游戏时间。")
- else
- -- 如果没有玩家数据,插入初始数据并增加时间
- local currentTime = os.time()
- local initialTime = additionalTime -- 新增时间作为初始时间
- local accountName = player:GetAccountName()
- CharDBExecute("INSERT INTO WYtime (id, accountName, inTime, remainingTime) VALUES (" .. accountId .. ", '" .. accountName .. "', " .. currentTime .. ", " .. initialTime .. ")")
-
- -- 格式化初始时间
- local formattedInitialTime = FormatTime(initialTime)
-
- -- 向玩家发送消息,通知新增的游戏时间
- player:SendBroadcastMessage("你是新玩家,已获得 " .. formattedInitialTime .. " 的初始游戏时间。")
- end
- end
- end
-
- -- 注册物品使用事件
- for itemId, _ in pairs(ItemTimeConfig) do
- RegisterItemEvent(itemId, 2, OnItemUse) -- 玩家使用物品事件,参数2表示物品使用时触发
- end
复制代码
|