Gmod lua попытка индексировать строковое значение с неверным ключом (addMoney не является частью строковой библиотеки) - PullRequest
1 голос
/ 20 февраля 2020

При попытке запустить мой скрипт я получаю эту ошибку:

[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

Если вы Вы не понимаете, откуда берутся целые числа из других частей скрипта. Хотя я уже проверил, работают ли они. Просто нужна помощь с сетью.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Я исправил это, обойдя всю концепцию текущего игрока. Вместо этого я решил сделать математику steamid игроков, как показано ниже.

Сторона сервера:

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
0 голосов
/ 20 февраля 2020
local currentplayer = net.ReadString()

- это строка, вам нужно что-то вроде:

local currentplayer = getPlayer(net.ReadString())
currentplayer:addMoney(moneyamount)
...