0

我一直在修改这个名为“Outlast”的游戏,它基于虚幻引擎 3.5 有一段时间了,我遇到了一个与 C++ 相关的问题,因为虚幻脚本是基于 C++ 的:

我在游戏中调用一个需要字符串和布尔值的现有函数,这就是那个函数:

event StartNewGameAtCheckpoint(string CheckpointStr, bool bSaveToDisk){
local OLCheckpoint CheckCP, startCP;
local OLHero Hero;
local OLGame CurrentGame;
local OLEngine Engine;


// End:0x33
if(CheckpointStr == "KillHero") >>> this if is new code that I added myself
{
     NumBatteries = 86;
     NotifyDifficultyChanged();
     return;
} ... more irrelevant code comes after this > }

我在这里调用该函数(可能有两种方式):

Method A:
class'OLGFxMoviePlayer'.static.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);
Method B:
Outer.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);

此时我遇到了一个奇怪的问题,“KillHero”字符串由于某种原因(两种方法)没有进入该函数,所以 if 语句将失败,因为“CheckpointStr”根本不是“KillHero” !

对于任何想知道 GetOLPC 来自哪里的人来说,它是获取当前的播放器控制器,该函数如下所示:

function OLPlayerController GetOLPC(){
return OLPlayerController(GetPC());
//return ReturnValue;   
} 

通过此函数,您可以访问包含“StartNewGameAtCheckpoint”的类“OLPlayerController”

我知道这是 if,因为如果我将 numbatteries 和 notifydifficultychanged 放在 if 之外,它可以正常工作。

从技术上讲,它应该像游戏正在执行的其他地方一样工作:

Outer.consolecommand("camera freecam");

它也在里面使用了一个字符串,但这很好用。

有谁知道出了什么问题?

谢谢

4

1 回答 1

0

嗯……我现在真的很笨哈哈!因为我是对游戏进行十六进制修改,所以我需要使用 7A,即“EqualEqual_StringString”,但我使用了 FE,即“EqualEqual_NameName”,这非常具有欺骗性,因为它们都代表“==”xD

于 2016-03-31T18:48:50.277 回答