首页 > 解决方案 > Gmod lua 尝试用错误的键索引字符串值('addMoney' 不是字符串库的一部分)

问题描述

尝试运行我的脚本时,我不断收到此错误:

[ERROR] addons/moneymanagement/lua/autorun/derma.init.lua:7: attempt to index a string value with bad 
 key ('addMoney' is not part of the string library)
  1. error - [C]:-1
   2. __index - lua/includes/extensions/string.lua:297
    3. func - addons/moneymanagement/lua/autorun/derma.init.lua:7
     4. unknown - lua/includes/extensions/net.lua:32

服务器端:

util.AddNetworkString("add_money")
net.Receive("add_money", function()
local currentplayer = net.ReadString()
local moneyamount = net.ReadUInt(24)
currentplayer:addMoney(moneyamount)

end)

客户端:

--add_money
addbutton = vgui.Create("DButton", f)
addbutton:Center()
addbutton:SetText("Add Money")
addbutton:SetSize(220, 80)
addbutton:SetPos(450, 65)
function addbutton:DoClick()
--Include net function here
--https://maurits.tv/data/garrysmod/wiki/wiki.garrysmod.com/index1b73.html
print("Sent playername " .. SelectedPlayer .. " and amount " .. input:GetValue() .. " to server") --debug
print(SelectedPlayer) --debug
net.Start("add_money")
net.WriteString(SelectedPlayer)
net.WriteUInt(input:GetValue(), 24)
net.SendToServer()
-- Still need to add server side net
-- Remember to define
    end

如果您对某些整数的来源感到困惑,那么它来自脚本的其他部分。虽然我已经测试过它们是否有效。只是需要一些网络帮助。

提前致谢!

标签: luagarrys-mod

解决方案


我通过绕过整个 currentplayer 概念来解决这个问题。相反,我决定对玩家进行数学计算,如下所示。

服务器端:

util.AddNetworkString("add_money")


net.Receive("add_money", function()
--local currentplayer = net.ReadEntity()
local moneyamount = net.ReadUInt(24)
local currentplayersteamid = net.ReadString()
print("This is how much to give: " .. moneyamount)
print("current steamid " .. currentplayersteamid)

for k, v in pairs( player.GetAll()) do
--  print(v) --debug
    gather = v:SteamID()
if tostring(gather) == currentplayersteamid then

    v:addMoney(moneyamount)

return end
end

客户端:

--add_money
addbutton = vgui.Create("DButton", f)
addbutton:Center()
addbutton:SetText("Add Money")
addbutton:SetSize(220, 80)
addbutton:SetPos(450, 65)
function addbutton:DoClick()
--Include net function here
--https://maurits.tv/String/garrysmod/wiki/wiki.garrysmod.com/index1b73.html
print("Sent playername " .. SelectedPlayer .. " and amount " .. input:GetValue() .. " to server") --debug
print(SelectedPlayer) --debug
net.Start("add_money")
--net.WriteString(SelectedPlayer)
net.WriteUInt(input:GetValue(), 24)
net.WriteString(PlayerSteamID)
net.SendToServer()
-- Still need to add server side net
-- Remember to define
    end

推荐阅读