コードを使用して特定のテキストを中央に配置し、新しい文字列を解析して Lua に戻して、新しいメッセージを宛先 (プレーヤーのゲーム コンソールまたはプレーヤー) に送信できるようにします。このコードを使用すると、コンソールの右側に表示される奇妙な文字のフォーマット エラーが常に発生します。これは文字列メモリ エラーであると言われましたが、これを教えてくれた人はこれを修正する方法を知りません。
文字列は、新しいメッセージを入れる前にクリアされます。コンソールの色記号 ($ の後に 0 ~ 9 の整数が続く) を使用して、または使用せずに試してみましたが、同じ問題が続きます。通常の中央以外のコンソール メッセージでは、この問題は発生しません。例については、画像を参照してください。
コード:
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