1

コードを使用して特定のテキストを中央に配置し、新しい文字列を解析して Lua に戻して、新しいメッセージを宛先 (プレーヤーのゲーム コンソールまたはプレーヤー) に送信できるようにします。このコードを使用すると、コンソールの右側に表示される奇妙な文字のフォーマット エラーが常に発生します。これは文字列メモリ エラーであると言われましたが、これを教えてくれた人はこれを修正する方法を知りません。

文字列は、新しいメッセージを入れる前にクリアされます。コンソールの色記号 ($ の後に 0 ~ 9 の整数が続く) を使用して、または使用せずに試してみましたが、同じ問題が続きます。通常の中央以外のコンソール メッセージでは、この問題は発生しません。例については、画像を参照してください。 問題: 奇妙な 'Xc' 記号を見てください

コード:

int CScriptBind_GameRules::CentreTextForConsole(IFunctionHandler *pH, const char *msg)
{
if (msg)
{
    const int linelength=113;
    char newmsg[linelength+1];
    for(int i=0;i<linelength;i++)
        newmsg[i]=0;
    for(int i=0;i<linelength;i++)
        newmsg[i]=' ';
    int msglen=strlen(msg);
    int startpos=linelength/2-msglen/2;
    for(int i=msglen-1;i>=0;i--)
        newmsg[startpos+i]=msg[i];
    return pH->EndFunction(newmsg); 
}
else
{
    CryLog("[System] Error in CScriptBind_GameRules::CentreTextForConsole: Failed to align");
    return pH->EndFunction();
}
return pH->EndFunction();
}

送信するには:

CMCCPlayer(player, "================================================================================================================");
        CMCCPlayer(player, "$4####     ###      ###     ######     ####");
        CMCCPlayer(player, "$4##        ###    ###     ##    ##      ##");
        CMCCPlayer(player, "$4##         ### ###       ##            ##");
        CMCCPlayer(player, "$4## ###      #####         ######   ### ##");
        CMCCPlayer(player, "$4##         ### ###             ##      ##");
        CMCCPlayer(player, "$4##        ###   ###     ##     ##      ## ");
        CMCCPlayer(player, "$4####     ###     ###     ######      ####");
        CMCCPlayer(player, "================================================================================================================");
        CMCCPlayer(player, "$4");
        CMCCPlayer(player, "$4Your Name: "..player:GetName());
        CMCCPlayer(player, "$4Your Country: "..Omega.GetCountry(player));
        CMCCPlayer(player, "$4Your Domain:"..player.actor:GetHostname());
        CMCCPlayer(player, "$4Your Profile ID: "..ProfId(player));
        if not player.exp then player.exp = 0 end
        CMCCPlayer(player, "$4Your EXP: "..player.exp);
        CMCCPlayer(player, "$4");
        CMCCPlayer(player, "$4o0o");

そして機能:

function CMCCPlayer(player, msg)
    g_gameRules.game:SendConsoleMessage(player.id,  g_gameRules.game:CentreTextForConsole(msg));
end
4

1 に答える 1