1

San Andreas Multiplayer (GTA) 使用 PAWN 作为其编程语言。我是 SA-MP 上服务器的所有者,但我不是专业人士,所以如果可能的话,我想获得一些帮助。基本上,我有一个命令可以在他/她在线时检查玩家的统计信息,但我想有一个命令在他们离线时检查他们。这是当玩家在线时检查玩家统计数据的命令代码。

CMD:check(playerid, var[])
{
    new user;
    if(!Logged(playerid)) return NoLogin(playerid);
    if(Player[playerid][pAdmin] >= 2 || Player[playerid][pStaffObserver])
    {
        if(sscanf(var,"us[32]", user, var))
        {
            SendClientMessage(playerid, COLOR_WHITE, "{00BFFF}Usage:{FFFFFF} /check [playerid] [checks]");
            SendClientMessage(playerid, COLOR_GRAD2, "** [CHECKS]: stats");
            return 1;
        }
        if(!strcmp(var, "stats", true))
        {
            if(!Logged(user)) return NoLoginB(playerid);
            ShowStats(playerid, user);
        }
    }
    else
    {
        NoAuth(playerid);
    }
    return 1;
}

我使用 ZCMD 命令处理器和 Dini 保存系统。所以我想做 CMD:ocheck 来显示股票 ShowStats,它会像 /ocheck [Firstname_Lastname] 一样工作。

有什么帮助吗?如果可能,请提供帮助。

谢谢

〜凯文

4

2 回答 2

1

对于您需要的命令,您必须从播放器的用户文件中加载数据。

你显然会从

if(!Logged(playerid)) return NoLogin(playerid);
if(Player[playerid][pAdmin] >= 2 || Player[playerid][pStaffObserver]) 
{

检查使用此命令的玩家是否有权使用此命令。按照此,

if(str, "s[32]", name))

您不能在这里使用“u”作为格式化程序,仅仅因为您正在检查离线玩家的统计信息。在此之后,您需要检查用户是否实际注册如果他没有,则将错误返回此命令的用户如果他是,则检查他是否已经在线。如果他在线,向管理员返回错误以使用此命令而不是 'ocheck' 如果他离线,那么您可以安全地继续加载他的统计数据(您可以使用用于在玩家登录时加载数据的代码,除了这次它应该只打印

例如,

format(str, sizeof(str), 
"Score: %s, Money: %d", 
dini_Int(file, "score"), dini_Int(file, "score") );
于 2016-04-09T09:58:52.210 回答
0

是的,基本上,您必须从文件中获取所有信息,因此 ShowStats 将不起作用,因为我想它从枚举中获取所有信息等,您必须编写一个全新的函数来获取所有离线信息。

于 2017-06-26T08:09:29.427 回答