テキスト ブロックをユーザーのゲーム コンソール (Crysis Wars) に送信する次のコードがあります。
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, "================================================================================================================");
しかし、私はこの結果を得ます:
この問題は Crysis Wars の開発者コミュニティを実質的に悩ませており、これに対する実際の解決策はありませんでした。Lua から C++ へではなく、C++ から直接実行した場合、コードの形式は問題ないため、これは Lua 側の問題に違いありません。
メッセージの間隔を 1 ミリ秒に設定しようとしましたが、その結果、いくつかのメッセージが失われました (おそらく、最近のメッセージが古いメッセージを上書きするためです)。この問題に対する提案や解決策はありますか? 実用的なソリューションを提供すれば、Crysis Wars 開発者コミュニティ内でかなり有名になるでしょう。かなり厄介なバグを解決したことになるからです :)。私の評判の一部を提供したいと思いますが、残念ながら今朝、別の問題を解決した人に報奨金を授与しました。
メッセージを送信するための関数コード:
function CMCCPlayer(player, msg)
g_gameRules.game:SendConsoleMessage(player.id, g_gameRules.game:CentreTextForConsole(msg));
end
これが何かに役立つ場合は、C++ SendConsoleMessage コードを次に示します。
int CScriptBind_GameRules::SendConsoleMessage(IFunctionHandler *pH, ScriptHandle playerId, const char *msg)
{
CGameRules *pGameRules=GetGameRules(pH);
if (!pGameRules)
return pH->EndFunction();
int channelId=pGameRules->GetChannelId((EntityId)playerId.n);
pGameRules->SendTextMessage(eTextMessageConsole, msg, eRMI_ToClientChannel, channelId);
msg=0; //Null the message.
return pH->EndFunction();
}
編集:
これは、中央揃えに使用されるテキストとは関係がないこと、および以下の画像とテキスト ブロックは例としてのみ提供されていることに注意してください。この問題は、送信されるすべてのコードで発生します。