Я модифицировал эту игру под названием «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 > }
Я вызываю эту функцию здесь (возможно 2 способа):
Method A:
class'OLGFxMoviePlayer'.static.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);
Method B:
Outer.GetOLPC().StartNewGameAtCheckpoint("KillHero", false);
В данный момент у меня есть одна странная проблема: строка «KillHero» по какой-то причине не попадает в эту функцию (оба метода), поэтому оператор if завершится ошибкой, поскольку «CheckpointStr» вообще не является «KillHero» !
Для тех, кто интересуется, откуда берется GetOLPC, он должен получить текущий playercontroller, и эта функция выглядит следующим образом:
function OLPlayerController GetOLPC(){
return OLPlayerController(GetPC());
//return ReturnValue;
}
И с помощью этой функции вы можете получить доступ к классу «OLPlayerController», который содержит «StartNewGameAtCheckpoint»
Я знаю, что это потому что, если я помещаю numbatteries и notifydifficultychange за пределами if, это работает нормально.
Технически это должно работать так же, как в другом месте игры:
Outer.consolecommand("camera freecam");
который также использует строку внутри, но это прекрасно работает.
Кто-нибудь знает в чем дело?
Спасибо
Ну … сейчас я чувствую себя очень глупо, ха-ха! Так как я занимался шестнадцатеричным моддингом игры, мне нужно было использовать 7A, который равен «EqualEqual_StringString», но я использовал FE, который равен «EqualEqual_NameName», это очень обманчиво, так как оба представляют «==» xD
Других решений пока нет …