Code: Select all
class episodic : eventhandler
{
static const string final_level[] =
{
"", "E1M8", "E2M8", "E3M8", "E4M8", "MAP30", "NV_MAP08", "ML_MAP21", "TN_MAP30"
};
static const string start_level[] =
{
"", "E2M1", "E3M1", "E4M1", "E5M1", "MAP01", "NV_MAP01", "ML_MAP01", "TN_MAP01", "PL_MAP01"
};
private int CheckLevelExists(int pos)
{
int max = start_level.Size();
for(int i = pos; i < max; i++)
{
if(Wads.FindLump(start_level[i]) != -1)
{ return i; }
}
return 0;
}
private int GetFinalLevel(string mapname)
{
int max = final_level.Size();
for(int i; i < max; i++)
{
if(mapname ~== final_level[i])
{ return i; }
}
return 0;
}
private int GetStartLevel(string mapname)
{
int max = start_level.Size();
for(int i; i < max; i++)
{
if(mapname ~== start_level[i])
{ return i; }
}
return 0;
}
Override void WorldLoaded(WorldEvent e)
{
cvar sequence = CVar.FindCVar("sv_sequentialepisodes");
cvar restorehp = CVar.FindCVar("sv_sequentialhealing");
string curlevel = Level.MapName;
if(sequence && sequence.GetInt())
{
int lev0 = GetFinalLevel(curlevel);
int lev1 = CheckLevelExists(lev0);
if(lev0 && lev1)
{
Level.NextMap = start_level[lev1];
}
if(restorehp && restorehp.GetInt() && GetStartLevel(curlevel))
{
for (int i = 0; i < MAXPLAYERS; i++)
{
PlayerInfo p = players[i];
if (p != NULL)
{
playerpawn plr = p.mo;
if(plr)
{
p.mo.A_GiveInventory("Health",restorehp.GetInt());
}
}
}
}
}
}
}