Prevent error in GetPrevSourcePos
This commit is contained in:
parent
fcfedf0917
commit
b7d36cfed9
@ -12,7 +12,6 @@
|
|||||||
#include "Modules/Changelog.hpp"
|
#include "Modules/Changelog.hpp"
|
||||||
#include "Modules/Chat.hpp"
|
#include "Modules/Chat.hpp"
|
||||||
#include "Modules/ClanTags.hpp"
|
#include "Modules/ClanTags.hpp"
|
||||||
#include "Modules/Weapon.hpp" // Load before for G_ModelIndex
|
|
||||||
#include "Modules/ClientCommand.hpp"
|
#include "Modules/ClientCommand.hpp"
|
||||||
#include "Modules/ConnectProtocol.hpp"
|
#include "Modules/ConnectProtocol.hpp"
|
||||||
#include "Modules/Console.hpp"
|
#include "Modules/Console.hpp"
|
||||||
@ -63,6 +62,7 @@
|
|||||||
#include "Modules/VisionFile.hpp"
|
#include "Modules/VisionFile.hpp"
|
||||||
#include "Modules/Voice.hpp"
|
#include "Modules/Voice.hpp"
|
||||||
#include "Modules/Vote.hpp"
|
#include "Modules/Vote.hpp"
|
||||||
|
#include "Modules/Weapon.hpp"
|
||||||
#include "Modules/Window.hpp"
|
#include "Modules/Window.hpp"
|
||||||
|
|
||||||
#include "Modules/BotLib/lPrecomp.hpp"
|
#include "Modules/BotLib/lPrecomp.hpp"
|
||||||
|
@ -194,7 +194,16 @@ namespace Components::GSC
|
|||||||
|
|
||||||
unsigned int ScriptError::Scr_GetPrevSourcePos(const char* codePos, unsigned int index)
|
unsigned int ScriptError::Scr_GetPrevSourcePos(const char* codePos, unsigned int index)
|
||||||
{
|
{
|
||||||
return ScrParserGlob.sourcePosLookup[index + Scr_GetPrevSourcePosOpcodeLookup(codePos)->sourcePosIndex].sourcePos;
|
const auto prevIndex = Scr_GetPrevSourcePosOpcodeLookup(codePos)->sourcePosIndex;
|
||||||
|
const auto sPos = ScrParserGlob.sourcePosLookup[index + prevIndex].sourcePos;
|
||||||
|
|
||||||
|
// I'm not sure why this is necessary - when given a valid codePos, sometimes
|
||||||
|
// the sourcePos ends up being a negative number (got a case where it was -2)
|
||||||
|
// which will output a giantic unsigned number and crash
|
||||||
|
// So we make sure it's not gonna happen here by clamping the number
|
||||||
|
const auto uPos = static_cast<unsigned int>(std::max(0, static_cast<int>(sPos)));
|
||||||
|
|
||||||
|
return uPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
Game::OpcodeLookup* ScriptError::Scr_GetPrevSourcePosOpcodeLookup(const char* codePos)
|
Game::OpcodeLookup* ScriptError::Scr_GetPrevSourcePosOpcodeLookup(const char* codePos)
|
||||||
@ -326,7 +335,9 @@ namespace Components::GSC
|
|||||||
if (Game::scrVarPub->programBuffer && Scr_IsInOpcodeMemory(codePos))
|
if (Game::scrVarPub->programBuffer && Scr_IsInOpcodeMemory(codePos))
|
||||||
{
|
{
|
||||||
auto bufferIndex = Scr_GetSourceBuffer(codePos - 1);
|
auto bufferIndex = Scr_GetSourceBuffer(codePos - 1);
|
||||||
Scr_PrintSourcePos(channel, ScrParserPub.sourceBufferLookup[bufferIndex].buf, ScrParserPub.sourceBufferLookup[bufferIndex].sourceBuf, Scr_GetPrevSourcePos(codePos - 1, index));
|
const auto prevSourcePos = Scr_GetPrevSourcePos(codePos - 1, index);
|
||||||
|
|
||||||
|
Scr_PrintSourcePos(channel, ScrParserPub.sourceBufferLookup[bufferIndex].buf, ScrParserPub.sourceBufferLookup[bufferIndex].sourceBuf, prevSourcePos);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user