如何使IntValue的更改是永久的?
我正在制作一个游戏通行证(通过Robux获取金钱的开发者服务),并在测试几次后,它有效,直到我达到约400,000-500,000香蕉(我的货币)的某个值时停止工作。而且,在制作游戏时,当我购买某些成本超过100万香蕉的物品时,它似乎会减少,但是当我获得一些香蕉种子(可出售的物品)并出售它时,它会重新设置回购买100万香蕉物品之前的值(例如:从130万然后我购买它,然后它变成30万,但当值被修改时(例如:通过出售种子),它会改回购买之前的值(130万)),我还在制作一个管理GUI,并想要制作一个GUI以给钱,显然我知道一开始它不会工作。
Leaderstats脚本: 脚本名称:leaderstats 脚本类型:服务器端 脚本代码:
game.Players.PlayerAdded:连接(function()
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
local coins = Instance.new("IntValue", leaderstats)
coins.Name = "Bananas"
local resets = Instance.new("IntValue", leaderstats)
resets.Name = "Rebirths"
local bananaseeds = Instance.new("IntValue", leaderstats)
bananaseeds.Name = "BananaSeeds"
end)
我的游戏通行证处理程序脚本(ServerScriptService): 类型:服务器端 名称:DevPrdctHndlr 代码:
local mps = game:GetService("MarketplaceService")
mps.ProcessReceipt = function(reciptInfo)
if reciptInfo.ProductId = 1146099164 then
--[捐赠给我!]
local player = game.Players:GetPlayerByUserId(reciptInfo.PlayerId)
player.leaderstats.BananaSeeds.Value =
player.leaderstats.BananaSeeds.Value + 10000
player.leaderstats.Bananas.Value =
player.leaderstats.Bananas.Value + 50000
return Enum.ProductPurchaseDecision.PurchaseGranted
end
end
购买SmoothPlasticWand脚本(它是一个购物GUI文本按钮): 类型:本地脚本 名称:BuyScript 位置:game.StarterGui.ShopGui.ShopFrame.SmoothPlasticWand.BuyScript 代码:
local Button = script.Parent
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local currency =
game.Players.LocalPlayer.leaderstats:WaitForChild("Bananas")
Button.MouseButton1Up:连接(function()
如果货币价值(currency.Value)大于等于1000000 then
ReplicatedStorage.ReplicatedWands.SmoothPlasticWand:Clone().Parent = game.Players.LocalPlayer:WaitForChild("Backpack")
game.Workspace.Musounds.Buy:Play
currency.Value = currency.Value - 1000000
end)
如果这个问题是重复的,我很抱歉,我还是StackOverflow的新手,如果这个问题不够详细,我会提供更多信息,如果你想要。
也许为了安全起见,可以像这样重置它到它应该的值。基本上创建一个变量来捕捉货币的价值,然后将货币设置为相同的值作为故障安全保护。
--在购买物品后立即执行此操作 StoredBananas.Value = coins.Value
--当购买货币变化时,执行此操作,以便在它发生故障时将其设置为正确的价格。
coins.Value = StoredBananas.Value
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

将下面翻译成中文并且保留原本的 markdown 格式
回答你的问题的简短回答是:在服务器上进行操作。
服务器是所有值的真相来源。当服务器脚本改变了世界时,该改变会被复制到所有玩家中。但当LocalScript更改世界时,该更改仅出现在特定玩家的世界中。
因此,在LocalScript中使用MouseButton1Up处理程序对按钮进行更改时,您只会更改玩家对该值的本地视图,而不会更改真相来源。其中一个解决方法是在LocalScript中使用RemoteEvent向服务器发出需要进行更改的信号。
因此在ReplicatedStorage中创建一个名为“BuyItem”的RemoteEvent
在您的LocalScript中:
local ReplicatedStorage = game:GetService("ReplicatedStorage") local BuyItem = ReplicatedStorage.BuyItem local Button = script.Parent Button.MouseButton1Up:Connect(function() -- 告诉服务器玩家想要购买该物品 BuyItem:FireServer("SmoothPlasticWand") end)然后,在某个地方的脚本中,处理客户端发来的信号:
local ReplicatedStorage = game:GetService("ReplicatedStorage") local BuyItem = ReplicatedStorage.BuyItem -- 为物品设置价格表 local prices = { SmoothPlasticWand = 1000000, -- 在此添加更多物品 -- SomeOtherWand = 10, } -- 监听玩家购买物品 BuyItem.OnServerEvent:Connect(function(player, itemName) -- 检查它是否为真实物品 assert(type(itemName) == "string", "Expected itemName to be a string") assert(prices[itemName], "Could not find a price for " .. itemName) -- 检查玩家是否有足够的钱 local itemPrice = prices[itemName] local currency = player.leaderstats.Bananas if currency.Value >= itemPrice then -- 给玩家他们的魔杖 local wand = ReplicatedStorage.ReplicatedWands[itemName]:Clone() wand.Parent = player.Backpack -- 减去魔杖的价格 currency.Value = currency.Value - itemPrice end end)现在,因为服务器脚本正在处理对“currency.Value”的更改,所以该更改将正确地显示给每个人,使更改变得永久。