Fixed GAMESTATE:GetCurrentStage to use correct logic for determining if all human players are on final stage.
THEME:GetPath lua functions can now pass true for the third arg if the element is optional. Fixes to various StageDisplay things in default. thify_number and thified_curstage_index lua functions added to default/Scripts/04 Other.lua.
This commit is contained in:
@@ -7,26 +7,6 @@ if playMode ~= 'PlayMode_Regular' and playMode ~= 'PlayMode_Rave' and playMode ~
|
|||||||
sStage = playMode;
|
sStage = playMode;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if not (GAMESTATE:IsCourseMode() or GAMESTATE:IsExtraStage() or GAMESTATE:IsExtraStage2()) then
|
|
||||||
local tRemap = {
|
|
||||||
Stage_Event = 0,
|
|
||||||
Stage_1st = 1,
|
|
||||||
Stage_2nd = 2,
|
|
||||||
Stage_3rd = 3,
|
|
||||||
Stage_4th = 4,
|
|
||||||
Stage_5th = 5,
|
|
||||||
Stage_6th = 6,
|
|
||||||
};
|
|
||||||
|
|
||||||
local nSongCount = tRemap[sStage] + (GAMESTATE:GetCurrentSong():GetStageCost()-1);
|
|
||||||
|
|
||||||
if nSongCount >= PREFSMAN:GetPreference("SongsPerPlay") then
|
|
||||||
sStage = "Stage_Final";
|
|
||||||
else
|
|
||||||
sStage = sStage;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
local t = Def.ActorFrame {};
|
local t = Def.ActorFrame {};
|
||||||
t[#t+1] = Def.Quad {
|
t[#t+1] = Def.Quad {
|
||||||
InitCommand=cmd(Center;zoomto,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,Color("Black"));
|
InitCommand=cmd(Center;zoomto,SCREEN_WIDTH,SCREEN_HEIGHT;diffuse,Color("Black"));
|
||||||
@@ -47,11 +27,28 @@ else
|
|||||||
};
|
};
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local stage_num_actor= THEME:GetPathG("ScreenStageInformation", "Stage " .. ToEnumShortString(sStage), true)
|
||||||
|
if stage_num_actor ~= "" and FILEMAN:DoesFileExist(stage_num_actor) then
|
||||||
|
stage_num_actor= LoadActor(stage_num_actor)
|
||||||
|
else
|
||||||
|
-- Midiman: We need a "Stage Next" actor or something for stages after
|
||||||
|
-- the 6th. -Kyz
|
||||||
|
local curStage = GAMESTATE:GetCurrentStage();
|
||||||
|
stage_num_actor= Def.BitmapText{
|
||||||
|
Font= "Common Normal", Text= thified_curstage_index(false) .. " Stage",
|
||||||
|
InitCommand= function(self)
|
||||||
|
self:zoom(1.5)
|
||||||
|
self:strokecolor(Color.Black)
|
||||||
|
self:diffuse(StageToColor(curStage));
|
||||||
|
self:diffusetopedge(ColorLightTone(StageToColor(curStage)));
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
t[#t+1] = Def.ActorFrame {
|
t[#t+1] = Def.ActorFrame {
|
||||||
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y);
|
InitCommand=cmd(x,SCREEN_CENTER_X;y,SCREEN_CENTER_Y);
|
||||||
OnCommand=cmd(stoptweening;zoom,1.25;decelerate,3;zoom,1);
|
OnCommand=cmd(stoptweening;zoom,1.25;decelerate,3;zoom,1);
|
||||||
|
stage_num_actor .. {
|
||||||
LoadActor( THEME:GetPathG("ScreenStageInformation", "Stage " .. ToEnumShortString(sStage) ) ) .. {
|
|
||||||
OnCommand=cmd(diffusealpha,0;linear,0.25;diffusealpha,1;sleep,1.75;linear,0.5;zoomy,0;zoomx,2;diffusealpha,0);
|
OnCommand=cmd(diffusealpha,0;linear,0.25;diffusealpha,1;sleep,1.75;linear,0.5;zoomy,0;zoomx,2;diffusealpha,0);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ for i=1,#statList do
|
|||||||
as[#as+1] = Def.ActorFrame {
|
as[#as+1] = Def.ActorFrame {
|
||||||
Def.Sprite {
|
Def.Sprite {
|
||||||
InitCommand=cmd(scaletoclipped,256,80);
|
InitCommand=cmd(scaletoclipped,256,80);
|
||||||
BeginCommand=function(self)
|
OnCommand=function(self)
|
||||||
local path = statList[j]:GetPlayedSongs()[1]:GetBannerPath() or THEME:GetPathG("Common","fallback banner");
|
local path = statList[j]:GetPlayedSongs()[1]:GetBannerPath() or THEME:GetPathG("Common","fallback banner");
|
||||||
self:LoadBanner(path);
|
self:LoadBanner(path);
|
||||||
end;
|
end;
|
||||||
@@ -43,7 +43,7 @@ for i=1,#statList do
|
|||||||
OnCommand=cmd(zoomto,80,18;diffuse,Color.Black;diffusealpha,0.5;fadeleft,0.5);
|
OnCommand=cmd(zoomto,80,18;diffuse,Color.Black;diffusealpha,0.5;fadeleft,0.5);
|
||||||
};
|
};
|
||||||
LoadFont("Common Normal") .. {
|
LoadFont("Common Normal") .. {
|
||||||
Text=StageToLocalizedString( statList[j]:GetStage() );
|
Text=thify_number(statList[j]:GetStageIndex()+1);
|
||||||
InitCommand=cmd(x,128-4;y,40-4;horizalign,right;vertalign,bottom);
|
InitCommand=cmd(x,128-4;y,40-4;horizalign,right;vertalign,bottom);
|
||||||
OnCommand=cmd(diffuse,StageToColor(statList[j]:GetStage());zoom,0.675;shadowlength,1);
|
OnCommand=cmd(diffuse,StageToColor(statList[j]:GetStage());zoom,0.675;shadowlength,1);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,20 +1,8 @@
|
|||||||
local curScreen = Var "LoadingScreen";
|
local curScreen = Var "LoadingScreen";
|
||||||
local curStage = GAMESTATE:GetCurrentStage();
|
local curStage = GAMESTATE:GetCurrentStage();
|
||||||
local curStageIndex = GAMESTATE:GetCurrentStageIndex();
|
local curStageIndex = GAMESTATE:GetCurrentStageIndex() + 1;
|
||||||
local playMode = GAMESTATE:GetPlayMode();
|
local playMode = GAMESTATE:GetPlayMode();
|
||||||
|
|
||||||
local tRemap = {
|
|
||||||
Stage_1st = 1,
|
|
||||||
Stage_2nd = 2,
|
|
||||||
Stage_3rd = 3,
|
|
||||||
Stage_4th = 4,
|
|
||||||
Stage_5th = 5,
|
|
||||||
Stage_6th = 6,
|
|
||||||
};
|
|
||||||
if tRemap[curStage] == PREFSMAN:GetPreference("SongsPerPlay") then
|
|
||||||
curStage = "Stage_Final";
|
|
||||||
end
|
|
||||||
|
|
||||||
local t = Def.ActorFrame {
|
local t = Def.ActorFrame {
|
||||||
LoadActor(THEME:GetPathB("_frame","3x3"),"rounded black",64,16);
|
LoadActor(THEME:GetPathB("_frame","3x3"),"rounded black",64,16);
|
||||||
LoadFont("Common Normal") .. {
|
LoadFont("Common Normal") .. {
|
||||||
@@ -36,12 +24,13 @@ local t = Def.ActorFrame {
|
|||||||
self:settextf("%i / %i", songsPlayed, GAMESTATE:GetCurrentCourse():GetEstimatedNumStages());
|
self:settextf("%i / %i", songsPlayed, GAMESTATE:GetCurrentCourse():GetEstimatedNumStages());
|
||||||
else
|
else
|
||||||
if GAMESTATE:IsEventMode() then
|
if GAMESTATE:IsEventMode() then
|
||||||
self:settextf("Stage %s", curStageIndex+1);
|
self:settextf("Stage %s", curStageIndex);
|
||||||
else
|
else
|
||||||
|
local thed_stage= thified_curstage_index(false)
|
||||||
if THEME:GetMetric(curScreen,"StageDisplayUseShortString") then
|
if THEME:GetMetric(curScreen,"StageDisplayUseShortString") then
|
||||||
self:settextf("%s", ToEnumShortString(curStage));
|
self:settextf(thed_stage)
|
||||||
else
|
else
|
||||||
self:settextf("%s Stage", ToEnumShortString(curStage));
|
self:settextf("%s Stage", thed_stage)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
|
|||||||
@@ -21,18 +21,12 @@ t[#t+1] = Def.ActorFrame {
|
|||||||
elseif GAMESTATE:IsEventMode() then
|
elseif GAMESTATE:IsEventMode() then
|
||||||
self:settextf("Stage %s", curStageIndex);
|
self:settextf("Stage %s", curStageIndex);
|
||||||
else
|
else
|
||||||
-- hack: ScreenEvaluation shows the current stage, but it needs to
|
local thed_stage= thified_curstage_index(curScreen:find("Evaluation"))
|
||||||
-- show the last stage instead. PlayedStageStats has the right one.
|
|
||||||
if string.find(curScreen,"Evaluation") then
|
|
||||||
local stageStats = STATSMAN:GetPlayedStageStats(1)
|
|
||||||
curStage = stageStats:GetStage()
|
|
||||||
end
|
|
||||||
|
|
||||||
if THEME:GetMetric(curScreen,"StageDisplayUseShortString") then
|
if THEME:GetMetric(curScreen,"StageDisplayUseShortString") then
|
||||||
self:settextf("%s", ToEnumShortString(curStage));
|
self:settext(thed_stage)
|
||||||
self:zoom(0.75);
|
self:zoom(0.75);
|
||||||
else
|
else
|
||||||
self:settextf("%s Stage", ToEnumShortString(curStage));
|
self:settextf("%s Stage", thed_stage);
|
||||||
self:zoom(1);
|
self:zoom(1);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|||||||
@@ -18,3 +18,46 @@ function SongMeterDisplayCommand(pn)
|
|||||||
return cmd(draworder,5;rotationz,-90;zoom,0;addx,xAdd;sleep,1.5;decelerate,0.5;zoom,1;addx,xAdd*-1)
|
return cmd(draworder,5;rotationz,-90;zoom,0;addx,xAdd;sleep,1.5;decelerate,0.5;zoom,1;addx,xAdd*-1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function thify_number(n)
|
||||||
|
if n >= 10 and n < 20 then return n .. "th" end
|
||||||
|
local th_suffixes= {"st", "nd", "rd"}
|
||||||
|
local end_digit= n % 10
|
||||||
|
return n .. (th_suffixes[end_digit] or "th")
|
||||||
|
end
|
||||||
|
|
||||||
|
local numbered_stages= {
|
||||||
|
Stage_1st= true,
|
||||||
|
Stage_2nd= true,
|
||||||
|
Stage_3rd= true,
|
||||||
|
Stage_4th= true,
|
||||||
|
Stage_5th= true,
|
||||||
|
Stage_6th= true,
|
||||||
|
Stage_Next= true,
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_stage_final()
|
||||||
|
-- The correct way to determine whether the player has reached Final Stage
|
||||||
|
-- is to check the number of stages left.
|
||||||
|
-- If you use the SongsPerPlay preference, you become incorrect after a
|
||||||
|
-- continue occurs.
|
||||||
|
local master_player= GAMESTATE:GetMasterPlayerNumber()
|
||||||
|
local stages_left= GAMESTATE:GetNumStagesLeft(master_player)
|
||||||
|
local stage_cost= GAMESTATE:GetCurrentSong():GetStageCost()
|
||||||
|
return (stages_left - stage_cost) < 1
|
||||||
|
end
|
||||||
|
|
||||||
|
function thified_curstage_index(on_eval)
|
||||||
|
local cur_stage= GAMESTATE:GetCurrentStage()
|
||||||
|
local adjust= 1
|
||||||
|
-- hack: ScreenEvaluation shows the current stage, but it needs to show
|
||||||
|
-- the last stage instead. Adjust the amount.
|
||||||
|
if on_eval then
|
||||||
|
adjust= 0
|
||||||
|
end
|
||||||
|
if numbered_stages[cur_stage] then
|
||||||
|
return thify_number(GAMESTATE:GetCurrentStageIndex() + adjust)
|
||||||
|
else
|
||||||
|
return ToEnumShortString(cur_stage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|||||||
@@ -2023,7 +2023,7 @@ SmallBanner4OffCommand=
|
|||||||
|
|
||||||
SmallBanner5X=SCREEN_CENTER_X+48
|
SmallBanner5X=SCREEN_CENTER_X+48
|
||||||
SmallBanner5Y=SCREEN_TOP+100+16
|
SmallBanner5Y=SCREEN_TOP+100+16
|
||||||
SmallBanner5OnCommand=zoom,0.5
|
SmallBanner5OnCommand=visible,false
|
||||||
SmallBanner5OfCommand=
|
SmallBanner5OfCommand=
|
||||||
|
|
||||||
SmallBanner6X=SCREEN_CENTER_X+72
|
SmallBanner6X=SCREEN_CENTER_X+72
|
||||||
|
|||||||
+37
-4
@@ -314,6 +314,8 @@ void GameState::Reset()
|
|||||||
m_iGameSeed = rand();
|
m_iGameSeed = rand();
|
||||||
m_iStageSeed = rand();
|
m_iStageSeed = rand();
|
||||||
|
|
||||||
|
m_AdjustTokensBySongCostForFinalStageCheck= true;
|
||||||
|
|
||||||
m_pCurSong.Set( GetDefaultSong() );
|
m_pCurSong.Set( GetDefaultSong() );
|
||||||
m_pPreferredSong = NULL;
|
m_pPreferredSong = NULL;
|
||||||
m_pCurCourse.Set( NULL );
|
m_pCurCourse.Set( NULL );
|
||||||
@@ -1061,6 +1063,36 @@ bool GameState::IsFinalStageForAnyHumanPlayer() const
|
|||||||
return GetSmallestNumStagesLeftForAnyHumanPlayer() == 1;
|
return GetSmallestNumStagesLeftForAnyHumanPlayer() == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GameState::IsFinalStageForEveryHumanPlayer() const
|
||||||
|
{
|
||||||
|
int song_cost= 1;
|
||||||
|
if(m_pCurSong != NULL)
|
||||||
|
{
|
||||||
|
if(m_pCurSong->IsLong())
|
||||||
|
{
|
||||||
|
song_cost= 2;
|
||||||
|
}
|
||||||
|
else if(m_pCurSong->IsMarathon())
|
||||||
|
{
|
||||||
|
song_cost= 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// If we're on gameplay or evaluation, they set this to false because those
|
||||||
|
// screens have already had the stage tokens subtracted.
|
||||||
|
song_cost*= m_AdjustTokensBySongCostForFinalStageCheck;
|
||||||
|
int num_on_final= 0;
|
||||||
|
int num_humans= 0;
|
||||||
|
FOREACH_HumanPlayer(p)
|
||||||
|
{
|
||||||
|
if(m_iPlayerStageTokens[p] - song_cost <= 0)
|
||||||
|
{
|
||||||
|
++num_on_final;
|
||||||
|
}
|
||||||
|
++num_humans;
|
||||||
|
}
|
||||||
|
return num_on_final >= num_humans;
|
||||||
|
}
|
||||||
|
|
||||||
bool GameState::IsAnExtraStage() const
|
bool GameState::IsAnExtraStage() const
|
||||||
{
|
{
|
||||||
if( this->GetMasterPlayerNumber() == PlayerNumber_Invalid )
|
if( this->GetMasterPlayerNumber() == PlayerNumber_Invalid )
|
||||||
@@ -1098,10 +1130,11 @@ Stage GameState::GetCurrentStage() const
|
|||||||
else if( m_PlayMode == PLAY_MODE_ENDLESS ) return Stage_Endless;
|
else if( m_PlayMode == PLAY_MODE_ENDLESS ) return Stage_Endless;
|
||||||
else if( IsExtraStage() ) return Stage_Extra1;
|
else if( IsExtraStage() ) return Stage_Extra1;
|
||||||
else if( IsExtraStage2() ) return Stage_Extra2;
|
else if( IsExtraStage2() ) return Stage_Extra2;
|
||||||
//else if( IsFinalStageForAnyHumanPlayer() ) return Stage_Final;
|
// Previous logic did not factor in current song length, or the fact that
|
||||||
// above function behaves weirdly, it will always return final stage if any player is
|
// players aren't allowed to start a song with 0 tokens. This new
|
||||||
// on final stage, rather than the last remaining player. The below method seems to make a bit more sense.
|
// function also has logic for handling the Gameplay and Evaluation cases
|
||||||
else if(m_iPlayerStageTokens[PLAYER_1] == 0 && m_iPlayerStageTokens[PLAYER_2] == 0) return Stage_Final;
|
// which used to require workarounds on the theme side. -Kyz
|
||||||
|
else if(IsFinalStageForEveryHumanPlayer()) return Stage_Final;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch( this->m_iCurrentStageIndex )
|
switch( this->m_iCurrentStageIndex )
|
||||||
|
|||||||
@@ -202,6 +202,9 @@ public:
|
|||||||
*
|
*
|
||||||
* This resets whenever a player joins or continues. */
|
* This resets whenever a player joins or continues. */
|
||||||
int m_iPlayerStageTokens[NUM_PLAYERS];
|
int m_iPlayerStageTokens[NUM_PLAYERS];
|
||||||
|
// This is necessary so that IsFinalStageForEveryHumanPlayer knows to
|
||||||
|
// adjust for the current song cost.
|
||||||
|
bool m_AdjustTokensBySongCostForFinalStageCheck;
|
||||||
|
|
||||||
RString sExpandedSectionName;
|
RString sExpandedSectionName;
|
||||||
|
|
||||||
@@ -216,6 +219,7 @@ public:
|
|||||||
int GetNumStagesLeft( PlayerNumber pn ) const;
|
int GetNumStagesLeft( PlayerNumber pn ) const;
|
||||||
int GetSmallestNumStagesLeftForAnyHumanPlayer() const;
|
int GetSmallestNumStagesLeftForAnyHumanPlayer() const;
|
||||||
bool IsFinalStageForAnyHumanPlayer() const;
|
bool IsFinalStageForAnyHumanPlayer() const;
|
||||||
|
bool IsFinalStageForEveryHumanPlayer() const;
|
||||||
bool IsAnExtraStage() const;
|
bool IsAnExtraStage() const;
|
||||||
bool IsAnExtraStageAndSelectionLocked() const;
|
bool IsAnExtraStageAndSelectionLocked() const;
|
||||||
bool IsExtraStage() const;
|
bool IsExtraStage() const;
|
||||||
|
|||||||
@@ -75,6 +75,17 @@ static const int NUM_SHOWN_RADAR_CATEGORIES = 5;
|
|||||||
AutoScreenMessage( SM_PlayCheer );
|
AutoScreenMessage( SM_PlayCheer );
|
||||||
|
|
||||||
REGISTER_SCREEN_CLASS( ScreenEvaluation );
|
REGISTER_SCREEN_CLASS( ScreenEvaluation );
|
||||||
|
|
||||||
|
ScreenEvaluation::ScreenEvaluation()
|
||||||
|
{
|
||||||
|
GAMESTATE->m_AdjustTokensBySongCostForFinalStageCheck= false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScreenEvaluation::~ScreenEvaluation()
|
||||||
|
{
|
||||||
|
GAMESTATE->m_AdjustTokensBySongCostForFinalStageCheck= true;
|
||||||
|
}
|
||||||
|
|
||||||
void ScreenEvaluation::Init()
|
void ScreenEvaluation::Init()
|
||||||
{
|
{
|
||||||
LOG->Trace( "ScreenEvaluation::Init()" );
|
LOG->Trace( "ScreenEvaluation::Init()" );
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ enum DetailLine
|
|||||||
class ScreenEvaluation : public ScreenWithMenuElements
|
class ScreenEvaluation : public ScreenWithMenuElements
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
ScreenEvaluation();
|
||||||
|
virtual ~ScreenEvaluation();
|
||||||
virtual void Init();
|
virtual void Init();
|
||||||
virtual bool Input( const InputEventPlus &input );
|
virtual bool Input( const InputEventPlus &input );
|
||||||
virtual void HandleScreenMessage( const ScreenMessage SM );
|
virtual void HandleScreenMessage( const ScreenMessage SM );
|
||||||
|
|||||||
@@ -325,6 +325,7 @@ ScreenGameplay::ScreenGameplay()
|
|||||||
m_pSongBackground = NULL;
|
m_pSongBackground = NULL;
|
||||||
m_pSongForeground = NULL;
|
m_pSongForeground = NULL;
|
||||||
m_bForceNoNetwork = false;
|
m_bForceNoNetwork = false;
|
||||||
|
GAMESTATE->m_AdjustTokensBySongCostForFinalStageCheck= false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenGameplay::Init()
|
void ScreenGameplay::Init()
|
||||||
@@ -928,6 +929,7 @@ void ScreenGameplay::InitSongQueues()
|
|||||||
|
|
||||||
ScreenGameplay::~ScreenGameplay()
|
ScreenGameplay::~ScreenGameplay()
|
||||||
{
|
{
|
||||||
|
GAMESTATE->m_AdjustTokensBySongCostForFinalStageCheck= true;
|
||||||
if( this->IsFirstUpdate() )
|
if( this->IsFirstUpdate() )
|
||||||
{
|
{
|
||||||
/* We never received any updates. That means we were deleted without being
|
/* We never received any updates. That means we were deleted without being
|
||||||
|
|||||||
+15
-5
@@ -1317,11 +1317,21 @@ public:
|
|||||||
lua_pushstring(L, pi.sMatchingElement);
|
lua_pushstring(L, pi.sMatchingElement);
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
static int GetPathF( T* p, lua_State *L ) { lua_pushstring(L, p->GetPathF(SArg(1),SArg(2)) ); return 1; }
|
// GENERAL_GET_PATH uses lua_toboolean instead of BArg because that makes
|
||||||
static int GetPathG( T* p, lua_State *L ) { lua_pushstring(L, p->GetPathG(SArg(1),SArg(2)) ); return 1; }
|
// it optional. -Kyz
|
||||||
static int GetPathB( T* p, lua_State *L ) { lua_pushstring(L, p->GetPathB(SArg(1),SArg(2)) ); return 1; }
|
#define GENERAL_GET_PATH(get_path_name) \
|
||||||
static int GetPathS( T* p, lua_State *L ) { lua_pushstring(L, p->GetPathS(SArg(1),SArg(2)) ); return 1; }
|
static int get_path_name(T* p, lua_State* L) \
|
||||||
static int GetPathO( T* p, lua_State *L ) { lua_pushstring(L, p->GetPathO(SArg(1),SArg(2)) ); return 1; }
|
{ \
|
||||||
|
lua_pushstring(L, p->get_path_name( \
|
||||||
|
SArg(1), SArg(2), lua_toboolean(L, 3))); \
|
||||||
|
return 1; \
|
||||||
|
}
|
||||||
|
GENERAL_GET_PATH(GetPathF);
|
||||||
|
GENERAL_GET_PATH(GetPathG);
|
||||||
|
GENERAL_GET_PATH(GetPathB);
|
||||||
|
GENERAL_GET_PATH(GetPathS);
|
||||||
|
GENERAL_GET_PATH(GetPathO);
|
||||||
|
#undef GENERAL_GET_PATH
|
||||||
|
|
||||||
static int RunLuaScripts( T* p, lua_State *L ) { p->RunLuaScripts(SArg(1)); return 1; }
|
static int RunLuaScripts( T* p, lua_State *L ) { p->RunLuaScripts(SArg(1)); return 1; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user