我刚刚开始了名为 InfinityX 的 Crysis Wars 服务器端修改的新版本。为了更好地管理,我将函数放在表格中,因为它看起来更整洁,并且可以将函数组合在一起(如 Core.PlayerHandle:GetIp(player)),但我遇到了问题。问题在于,获取玩家姓名的指定方法player:GetName()
被视为无效方法,而实际上该方法完全有效。
我想知道使用以下结构是否会导致问题,如果是,如何解决。这是我第一次将这种结构用于函数,但事实证明它比我使用的旧方法更容易。
编码:
Event =
{
PlayerConnect = function(player)
Msg.All:CenteredConsole("$4Event$8 (Connect)$9: $3"..player:GetName().." on channel "..player.actor:GetChannel());
System.LogAlways(Default.Tag.."Incoming Connect on Channel "..player.actor:GetChannel());
Event:Log("Connect", player);
end;
};
当我绕过该函数并将代码直接放在需要的地方时,下面的代码可以工作:
Msg.All:CenteredConsole("$4Event$8 (Connect)$9: $3"..player:GetName().." on channel "..player.actor:GetChannel());
System.LogAlways(Default.Tag.."Incoming Connect on Channel "..player.actor:GetChannel());
错误:
[警告] [Lua 错误] infinityx/main/core.events.lua:23: 尝试调用方法“GetName”(一个 nil 值)
PlayerConnect, (infinityx/main/core.events.lua: 23) ConnectScript, (infinityx/main/core.main.lua: 52) OnClientEnteredGame, (scripts/gamerules/instantaction.lua: 511) (null) (scripts/gamerules /teaminstantaction.lua: 520)
任何澄清将不胜感激。谢谢 :)