gpt4 book ai didi

c++ - 消息格式错误

转载 作者:太空狗 更新时间:2023-10-29 21:23:41 25 4
gpt4 key购买 nike

我有以下代码可将一段文本发送到用户的游戏机(孤岛危机):

        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, "================================================================================================================");

但我得到了这个结果:

Wrong Text

这个问题实际上一直困扰着 Crysis Wars 开发者社区,并且没有真正的解决方案。如果我直接从 C++ 而不是从 Lua 到 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();
}

编辑:

请注意,这与用于居中的文本无关,下面的图像和文本 block 仅作为示例提供;发送的每段代码都会出现此问题。

enter image description here

Msg1

最佳答案

所以你是说这些函数的序列总是导致与函数顺序完全相反的输出。所以...只需按相反 顺序发送数据。因此,这将加倍反转并按预期顺序提交数据。

有很多方法可以做到这一点。您可以创建一个简单的 Lua 函数,它接受一个字符串数组并以相反的顺序广播它们:

function BroadcastToPlayer(player, strings)
for i = #strings, 1, -1 do
CMCCPlayer(player, strings[i]);
end
end

您可以扩充它以将字符串作为数组或可变字符串系列,就地构建数组:

function BroadcastToPlayer(player, ...)
local test = ...
if(type(test) == "string") then return BroadcastToPlayer(player, {...}) end

for i = #strings, 1, -1 do
CMCCPlayer(player, strings[i]);
end
end

您甚至可以创建一个简单的 Lua 对象,给定要发送的字符串,然后调用它发送所有存储的字符串。

function CreateStringMan()
local man = {}
function man:add(str)
self._strings = self._strings or {}
self._strings[#self._strings + 1] = str
end
function man:CMCCPlayer(player)
for i = #self._strings, 1, -1 do
CMCCPlayer(player, self._strings[i]);
end
self._strings = {} --clear the strings
end
return man
end

关于c++ - 消息格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17663849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com