代码之家  ›  专栏  ›  技术社区  ›  Trevn Jones

GetPlayerFromCharacter返回Nil-Roblox/Lua

  •  0
  • Trevn Jones  · 技术社区  · 3 年前

    我有一个剑术脚本,只允许npc受到伤害,而不允许玩家受到伤害。它会在任何受到伤害的npc上创建一个创建者标签。如果npc被杀,它会奖励玩家金钱(或者至少应该是这样)。我做了一些调试,发现当试图实际检索播放器时,它返回的是零。我一辈子都想不出为什么。我在谷歌上做了一些挖掘,但对我的处境没有任何帮助。

    剑的脚本:

    创建者标记在中创建 if humanoid.Parent ~= tool.Parent and canDamage and not game.Players:GetPlayerFromCharacter(humanoid.Parent) then 线播放器变量返回零

    local tool = script.Parent
    local player = game.Players:GetPlayerFromCharacter(tool.parent)
    
    local canDamage = false
    local canSwing = true
    
    local dmg = 50
    local cooldown = 1.5
    
    local function onTouch(otherPart)
    
        local humanoid = otherPart.Parent:FindFirstChild("Humanoid")
    
        if not humanoid then 
            return 
        end
    
        if humanoid.Parent ~= tool.Parent and canDamage and not game.Players:GetPlayerFromCharacter(humanoid.Parent) then
            local tag = Instance.new("ObjectValue",humanoid)
            tag.Name = "creator"
            tag.Value = player
            game.Debris:AddItem(tag,0.5)
            humanoid:TakeDamage(dmg)
        else
            return
        end
    
        canDamage = false
    end
    
    local function slash()
        if canSwing then
            canSwing = false
            local str = Instance.new("StringValue")
            str.Name = "toolanim"
            str.Value = "Slash" 
            str.Parent = tool
            canDamage = true
            wait(cooldown) --cooldown time
            canSwing = true
        end
    end
    
    tool.Activated:Connect(slash)
    tool.Handle.Touched:Connect(onTouch)
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Darrian Penman    3 年前

    不确定这是否是问题的根本原因,但对我来说最突出的是 Players 使用 game.Players 。你应该试着使用服务播放器,因为据我所知,它有更好的功能,被认为是使用的最佳实践方法 玩家

    当我要访问 玩家 我通常在代码的顶部写这样的内容:

    local players = game:GetService("Players")

    你应该试试这个,看看它是否能解决问题。

    如果它不发表评论,我会看看我是否能找出问题所在。

    如果你确实尝试过,请确保这样做:

    players:GetPlayerFromCharacter(humanoid.Parent)

    而不是:

    game.Players:GetPlayerFromCharacter(humanoid.Parent)