   [longpath]d16352   _fp_freeplayd16352  namespace fp_freeplay { const int PROCESS_ID=353;

#line 1 "Source\Mission\fp_freeplay.script"
namespace Lang{
#line 1 "Source\Library\lang.lib"
char lang[32] = "EN";
bool init = false;
const int length = 255;

void runInit()
{
	snprintf(lang, 32, "%s", System::GetEnvString("s_language"));
	if ((StrCompare(lang, "DE") == 0) || (StrCompare(lang, "de") == 0)|| (StrCompare(lang, "ger") == 0)|| (StrCompare(lang, "GER") == 0))
		snprintf(lang, 32, "DE");
	else 
		snprintf(lang, 32, "EN");
	init = true;
};












void ShowMessageTickerTextForSinglePlayer(GameObject * Caller, char * message, bool printDirect = false)
{
	if (printDirect)
	{
		ScriptInterface::ShowMessageTickerTextForSinglePlayer(Caller, message);
		return;
	}
	if (!init) runInit();
	char text[length];
	char key[length];
	snprintf(key, length, "%s_%s", lang, message);
	Game::GetGameString(key,text, length);
	if (StrCompare(text, key) == 0) 
		Game::GetGameString(message,text, length);
	ScriptInterface::ShowMessageTickerTextForSinglePlayer(Caller, text);
};
void ShowMessageTickerTextForAll(char * message)
{
	if (!init) runInit();
	char text[length];
	char key[length];
	snprintf(key, length, "%s_%s", lang, message);
	Game::GetGameString(key,text, length);
	if (StrCompare(text, key) == 0) 
		Game::GetGameString(message,text, length);
	ScriptInterface::ShowMessageTickerTextForAll(text);

};
void PlayHint(char*message, bool prefixFolder = false, bool printDirect = false)
{
	if (printDirect)
	{
		Mission::PlayHint(message);
		return;
	}
	if (!init) runInit();
	char text[length];
	char key[length];
	if (prefixFolder) snprintf(key, length, "mod:Lang/%s/%s", lang, message);
	else snprintf(key, length, "%s_%s", lang, message);
	Game::GetGameString(key,text, length);
	
	if (StrCompare(text, key) == 0) 
		Game::GetGameString(message,text, length);
	
	Mission::PlayHint(text);
};
void PlayComment(char*comment)
{
	if (!init) runInit();
	char text[length];
	snprintf(text, length, "mod:Lang/%s/%s", lang, comment);
	Mission::PlayComment(text);
};
void GetGameString(char * string, char * paste, int plength, bool prefixFolder = false)
{
	if (!init) runInit();
	char text[length];
	if (prefixFolder) snprintf(text, length, "mod:Lang/%s/%s", lang, string);
	else snprintf(text, length, "%s_%s", lang, string);
	Game::GetGameString(text, paste, plength);
	
	if (StrCompare(paste, text) == 0) 
		Game::GetGameString(string, paste, plength);
	
};
void ShowHelpTextWindow(char*message)
{
	if (!init) runInit();
	char text[length];
	char key[length];
	snprintf(key, length, "%s_%s", lang, message);
	Game::GetGameString(key,text, length);
	
	if (StrCompare(text, key) == 0) 
		Game::GetGameString(message, text, length);
	
	Game::ShowHelpTextWindow(text);
};
void ShowEvent(char * name, Vector position)
{
	if (!init) runInit();
	char text[length];
	snprintf(text, length, "%s_%s", lang, name);
	Game::ShowEvent(text, position);
};
};


#line 1 "Source\Mission\fp_freeplay.script"
char FireResistance[3];
bool debug = false;
bool scriptDebug = true;
bool pressed = false;
bool VecUIHidden = true;
bool CallOverviewShown = false;
int CallTypeShown=-1;
char FireResistance[3];
int frame = 0;
int tramSpeed = 0;
const int length = 255;
const int ExTarValue = 75;
const int BExTarValue = 45;
char text[length];
char descText[1024];
GameDialog Cover;
GameDialog Indicators;
GameDialog Infobox;
GameDialog Restart;
GameObject SyncObject;
int SyncCount=0;
int h,m,s;
bool rain, storm, clouds;
int hc = -1;
int LSTMode = 0;
const int CallLimit = 30; 
Vehicle lstObjects[CallLimit];
bool indicatorsShown = false;
int localPlayerMP = -99;
bool restartWarning = false;



bool OnLoad()
{
	System::Log("Loading Auenburg v 1.0 by OGExperience");
	if (restartWarning)
	{
		
		System::Log("Loading Auenburg : Old Session Detected");
		Restart.Load("mod:UI/CustomMPUI/restart_warning.xml");
		Restart.Show("restart", true);	
		Restart.Show("restart_warning", true);
	}
	else restartWarning = true;
	start();
	
	System::SetEnv("e4_doocclusion", 0);
	System::SetEnv("e4_mptimeout", 1500);
	System::Log("STARTSCRIPT: Status 6 begonnen");
	VehicleList vList(VT_THW_FGRR_BKF, VT_POLICE_GTW);
	for (int i = 0; i < vList.GetNumVehicles(); i++)
	{
		if (vList.GetVehicle(i)->IsCommandable())
		{
			char StatusRaus[64];
			snprintf(StatusRaus, 64, "Florian Auenburg %s --6--", vList.GetVehicle(i)->GetPrototypeName());
			System::Log(StatusRaus);
		}
	}
	System::Log("STARTSCRIPT: Status 6 abgeschlossen");
	
	Game::GetGameString("tramspeed", text, length);
	tramSpeed = Math::atoi(text);
	
	
	
	System::SetEnv("e4_rf_pos", "40");
	
	System::SetEnv("e4_rf_personusecurve", "0");
	

	
	
	

	Cover.Load("mod:UI/CustomMPUI/infobar_cover.xml");
	Indicators.Load("mod:UI/CustomMPUI/indicators.xml");
	Indicators.Show("indicators", false);
	Indicators.Show("leftIndicator", false);
	Indicators.Show("rightIndicator", false);	
	Infobox.Load("mod:UI/CustomMPUI/infobox.xml");
	Infobox.Show("call_information", false);	
	Infobox.Show("infobox", false);
	
	
	return true;
}
void start()
{
	
	
	

	
	ActorList AL = Game::GetActors();
	GameObjectList all = Game::GetGameObjects();
	System::Log("GameStartCount :: Total Number Actors %i Total Number Objects %i", AL.GetNumActors(), all.GetNumObjects());
	




	for(int i = 0; i < all.GetNumObjects(); i++)
	{
		if(all.GetObject(i)->GetType() == ACTOR_OPEN_HOUSE)
		{
			OpenHouse oh(all.GetObject(i));
			if(Math::rand() % 4 < 2 && !oh.HasName("bank") && !oh.HasName("shop") && !oh.HasName("offen") && !oh.HasName("Zug"))
				oh.AssignCommand("DummyIsLocked");
		}
		if (all.GetObject(i)->HasNamePrefix("pgate")) all.GetObject(i)->RemoveFromRouter();
		if (!all.GetObject(i)->HasNamePrefix("traffic") && !all.GetObject(i)->HasNamePrefix("tLight"))
		{
			if (StrCompare(all.GetObject(i)->GetPrototypeName(), "AMP_1A") == 0
				|| StrCompare(all.GetObject(i)->GetPrototypeName(), "AMP_1B") == 0
				|| StrCompare(all.GetObject(i)->GetPrototypeName(), "AMP_2") == 0
				|| StrCompare(all.GetObject(i)->GetPrototypeName(), "AMP_3") == 0
				|| StrCompare(all.GetObject(i)->GetPrototypeName(), "AMP_4") == 0
				)
			{
				all.GetObject(i)->EnableSpecialLights(true);
			}
		}
		if (all.GetObject(i)->HasNamePrefix("Aufzug"))
		{
			all.GetObject(i)->SetAnimation("opened"); 
		}
		if (all.GetObject(i)->HasNamePrefix("Playground"))
		{
			all.GetObject(i)->SetChildEnabled("part", true); 
		}
		if (all.GetObject(i)->GetType() == ACTOR_PERSON)
		{
			Person p(all.GetObject(i));
			if (p.HasName("Unnamed")) 
			{
				
				
				
			}
			if (p.GetRole() == ROLE_GANGSTER)
			{
				System::Log(" ~~ Gangster %s ~~", p.GetPrototypeName());
				p.PushActionDeleteOwner(ACTION_NEWLIST);
			}
		}
		if(all.GetObject(i)->HasNamePrefix("FCM_")){
			all.GetObject(i)->Hide();
		}
		if(all.GetObject(i)->HasNamePrefix("bus")){
			if(Math::rand()%3!=0) all.GetObject(i)->PushActionDeleteOwner(ACTION_NEWLIST);
		}
		if(all.GetObject(i)->HasNamePrefix("water") && !all.GetObject(i)->HasCommand("FOX_Hyd_OF"))  {
			if (Math::rand()%100<2) all.GetObject(i)->AssignCommand("STADTAction");
		}
		
		if (all.GetObject(i)->GetNumFireChilds() > 0)
			all.GetObject(i)->SetFlag(OF_COOLABLE);
		if (all.GetObject(i)->HasNamePrefix("LZA") || all.GetObject(i)->HasNamePrefix("disco"))
			all.GetObject(i)->EnableSpecialLights(true);
		if (all.GetObject(i)->HasNamePrefix("MapBox"))
		{
			if (all.GetObject(i)->HasNamePrefix("MapBox01"))
				all.GetObject(i)->SetUserData(Audio::PlaySample3D("mod:Audio/FX/Ambiente/Ruhestoerung2.wav", all.GetObject(i)->GetPosition(), true));
			else if (all.GetObject(i)->HasNamePrefix("MapBox02"))
					all.GetObject(i)->SetUserData(Audio::PlaySample3D("mod:Audio/FX/Ambiente/biker_song.wav", all.GetObject(i)->GetPosition(), true));
			else if (all.GetObject(i)->HasNamePrefix("MapBox04"))
					all.GetObject(i)->SetUserData(Audio::PlaySample3D("mod:Audio/FX/Ambiente/italian_song.wav", all.GetObject(i)->GetPosition(), true));
			else if (all.GetObject(i)->HasNamePrefix("MapBox05"))
					all.GetObject(i)->SetUserData(Audio::PlaySample3D("mod:Audio/FX/bahnhof.wav", all.GetObject(i)->GetPosition(), true));
		}

	}
	
	GameObjectList gl("spawnobject");
	if (gl.GetNumObjects() > 0)
	{
		GameObject SpawnObject(gl.GetObject(0));
		SpawnObject.PushActionExecuteCommand(ACTION_APPEND, "LSTsync", &SpawnObject, -99, false);
		SpawnObject.PushActionWait(ACTION_APPEND, 5.0f);
		SpawnObject.PushActionExecuteCommand(ACTION_APPEND, "bmaeinsatz_initialisierung", &SpawnObject, 0, false);
		SpawnObject.PushActionExecuteCommand(ACTION_APPEND, "SpawnAll", &SpawnObject, 0, false);
		
		

		

		
	}

	GameObjectList DL("DebugCommands");
	if (DL.GetNumObjects() > 0)
	{
		GameObject DebugObject(DL.GetObject(0));
		DebugObject.SetSelectable(false);
	}
	Game::SetAmbientSoundVolumeByName("rain", 0.f);
	Game::SetAmbientSoundVolumeByName("thunder", 0.f);

	return;
};

const int wCount = 5;
float wT0 = 0.0f;
float wT1 = 0.0f;
float wT2 = 0.0f;
float wT3 = 0.0f;
float wT4 = 0.0f;
float wC0 = 0.0f;
float wC1 = 0.0f;
float wC2 = 0.0f;
float wC3 = 0.0f;
float wC4 = 0.0f;





#line 220 "Source\Mission\fp_freeplay.script"
class CLASS_fp_freeplay : public MissionScript
{
public:
#line 222 "Source\Mission\fp_freeplay.script"

	

	void Update()
	{
		frame++;
		
		bool ShowVecUI = true;
		bool ShowCallOverview = false;
		GameObjectList gl = Game::GetSelectedGameObjects();
		if (gl.GetNumObjects() == 1 && gl.GetObject(0)->GetType() == ACTOR_VEHICLE)
		{
			if (!gl.GetObject(0)->IsCommandable()) ShowVecUI = false;
			ShowCallOverview = gl.GetObject(0)->HasCommand("FOXCMStart") || gl.GetObject(0)->HasCommand("ClearBoard");
			if (ShowCallOverview && gl.GetObject(0)->GetUserData() != CallTypeShown)
			{
				if (CallTypeShown == -1) gl.GetObject(0)->SetUserData(0); 
				CallTypeShown = gl.GetObject(0)->GetUserData();
				if (CallTypeShown <= 0)
				{
					
					
					ShowCallOverview = false;
				}
				else
				{
					int RealCallID = CallTypeShown/1000;
					int ShownCallID = CallTypeShown%1000;
					char staticText[length];
					snprintf(text, length, "cm_event_%i", ShownCallID);
					Game::GetGameString(text, text, length);
					System::Log(" ~~ Searching for call text %s  - %i - %i ~~ ", text, RealCallID, ShownCallID);
					Lang::GetGameString(text, staticText, length, true); 
					System::Log(" ~~ Searching for call text %s ~~ ", staticText);
					Infobox.StaticText_SetText("header", staticText);

					snprintf(text, length, "CI_%i", RealCallID);
					System::Log(" ~~ Searching for call information %s ~~ ", text);
					Lang::GetGameString(text, descText, 1024);
					System::Log(" ~~ Searching for call information %s ~~ ", descText);
					Infobox.StaticText_SetText("call", descText);
				}
			}
			else if (CallTypeShown <= 0) ShowCallOverview = false;
		}

		if (VecUIHidden == ShowVecUI)
		{
			VecUIHidden = !VecUIHidden;
			Cover.Show("infobar", VecUIHidden);
			Cover.Show("passengers", VecUIHidden);			
		}
		if (CallOverviewShown != ShowCallOverview)
		{
			CallOverviewShown = ShowCallOverview;
			if (CallOverviewShown) 	ScriptInterface::HideInfoBar();
			else
			{
				ScriptInterface::ShowInfoBar();
				ScriptInterface::OpenInfoBar();
				CallTypeShown = -1;
			}		
			Infobox.Show("infobox", CallOverviewShown);
			Infobox.Show("call_information", CallOverviewShown);
		}
		
		
		SyncCount++;
		if (SyncCount % 20 == 0) 
		{
			MPSync();
			if (localPlayerMP == -99) 
			{
				GameObjectList gl = Game::GetGameObjects(TYPE_VEHICLE);
				for (int k = 0; k < gl.GetNumObjects(); k++)
				{
					if (gl.GetObject(k)->HasCommand("moveTo") && gl.GetObject(k)->IsCommandEnabled("moveTo") && gl.GetObject(k)->IsCommandable())
					{
						localPlayerMP = gl.GetObject(k)->GetPlayerMP();
						System::Log(" ~~ localPlayerMP found %i ~~", localPlayerMP);
						break;
					}
				}
			}
			else if (LSTMode == 1) {
				LSTSync(); 
			}
			else if (LSTMode == 0 && SyncCount % 200 == 0) 
			{
				GameObjectList gl = Game::GetGameObjects();
				for (int k = 0; k < gl.GetNumObjects(); k++)
				{
					if(gl.GetObject(k)->HasCommand("NOLSTSync"))
					{
						System::Log(" ~~ LST INACTIVE OBJECT FOUND ~~ ");
						LSTMode = -1;
					}
					else if (gl.GetObject(k)->HasCommand("LSTSync"))
					{
						System::Log(" ~~ LST Object Found ~~ ");
						LSTMode = 1;
						break;
					}
				}
			}
		}
		
		if (Input::PriorityKeyPressed() && Input::LCtrlPressed() && Input::LShiftPressed())
		{
			if (!pressed)
			{
				pressed = true;
				debug = !debug;
				System::SetEnv("e4_rf_debug", debug?1:0);
				System::SetEnv("s_debug", debug?1:0);
				System::SetEnv("e4_showcampos", debug?1:0);
				ActorList AL = Game::GetActors();
				GameObjectList all = Game::GetGameObjects();
				System::Log("Debug : Total Number Actors %i, Total Number Objects %i", AL.GetNumActors(), all.GetNumObjects());
				for (int k = 0; k < all.GetNumObjects(); k++)
				{
					System::Log("Debug : Object %i : %s - %s", k, all.GetObject(k)->GetName(), all.GetObject(k)->GetPrototypeName());
				}
			}
		}
		else pressed = false;
	}

	bool OnPreCommand(const char *Cmd, GameObject *Caller, Actor *Target)
	{
		
		GameObject v(Caller);
		System::Log("OnPreCommand : %s %s %i ", Cmd, v.GetName(), ((int) (100*Game::GetRealTime())));
		if (!v.IsValid()) return true;
		return true;
	}
	bool OnPostCommand(const char *Cmd, GameObject *Caller, Actor *Target)
	{
		
		GameObject v(Caller);
		System::Log("OnPostCommand : %s %s %i", Cmd, v.GetName(), ((int) (100*Game::GetRealTime())));
		if (!v.IsValid()) return true;
		return true;
	}
	ActionCallbackResult OnPreAction(const char *Action, ActionCallback *Data)
	{
		GameObject g(Data->Owner);
		if (!g.IsValid())
		{
			System::Log("OnPreAction : %s Invalid", Action);
			return ACTION_SKIP;
		}
		switch (Action)
		{
			case "EActionWait":
				GameObject g(Data->Owner);
				Person p(&g);
				if (p.IsValid() && p.GetEnteredCarID() != -1 && Game::HasNamePrefix(p.GetPrototypeName(), "RC"))
				{
					System::Log(" ~~ Removing Rollcontainer ~~ ");
					Vehicle(& Game::GetActor(p.GetEnteredCarID())).PushActionExecuteCommand(ACTION_APPEND, "LBWSteuerung", &p, 11);
					return ACTION_SKIP;
				}
			break;
			case "EActionCool":
			case "EActionExtinguish":
				if (Game::HasNamePrefix(Action, "EActionExtinguish") && Data->Owner->GetType() == ACTOR_VEHICLE)
				{
					Vehicle v(Data->Owner);
					if (v.GetVehicleType()==VT_FIREFIGHTERS_TLF || v.GetVehicleType()==VT_FIREFIGHTERS_FLB)
					{
						
						System::Log(" ~~ %s Extinguish Force Manipulation %i %i %i~~ ",
							v.GetName(),
							(int)Data->Parameters[0].fValue ,
							(int)Data->Parameters[1].fValue ,
							(int)Data->Parameters[2].fValue );
						Actor tActor = Game::GetActor( Data->Parameters[0].iValue ) ;
						int ExIntValue = (int) Data->Parameters[1].fValue;
						float exValue = v.HasNamePrefix("0_FLB")?BExTarValue:ExTarValue;
						if (tActor.IsValid() && ExIntValue != exValue)
						{
							v.PushActionExtinguish(ACTION_INSERT, &tActor, exValue);
							return ACTION_SKIP;
						}
					}
				}
				if (Data->Owner->GetType() == ACTOR_VEHICLE || Data->Owner->GetType() == ACTOR_PERSON)
				{
					GameObject g(Data->Owner);
					if (Data->Owner->GetType() == ACTOR_PERSON) g.SetFlag(OF_LOCKED);
					GameObjectList gl = Game::GetGameObjectsWithPrefix("Schaumteppich");
					for (int i = 0; i < gl.GetNumObjects(); i++)
					{
						GameObject t(gl.GetObject(i));
						if(t.GetUserData() == g.GetID()) t.SetUserData(-1);
					}
					GameObject t(& Game::GetActor(Data->Parameters[0].iValue));
					if (t.IsValid())
					{
						
						if (g.HasCommand("DUSES") || g.HasCommand("FOXHabeSchaumrohr")) 
						{
							if (t.GetType() == ACTOR_HOUSE || t.GetType() == ACTOR_OPEN_HOUSE) return ACTION_SKIP;
							char name[64];
							snprintf(name, 64, "%s%i", "Schaumteppich", t.GetID());
							GameObjectList gl(name);
							if(gl.GetNumObjects() == 0)
							{
								GameObject schaum = Game::CreateObject("mod:Prototypes/Objects/_EinsatzProtos/Schaumteppich.e4p" , name);
								float x = t.GetPosition().x;
								float y = t.GetPosition().y;
								if (t.GetNumFireChilds() > 0)
								{
									x=0;y=0;
									for (int i = 0; i < t.GetNumFireChilds(); i++)
									{
										x=x+t.GetFireChild(i).GetPosition().x;
										y=y+t.GetFireChild(i).GetPosition().y;
									}
									x=x/t.GetNumFireChilds();
									y=y/t.GetNumFireChilds();
								}
								schaum.SetPosition(Vector(x, y, Game::GetGroundHeight(x, y)));
								schaum.PushActionWait(ACTION_APPEND, 1.0f);
								schaum.PushActionExecuteCommand(ACTION_APPEND, "FoxGenUtils", &t, 24, false);
								schaum.SetUserData(g.GetID());
								System::Log("OnPreAction : schaum created &s %s", g.GetName(), t.GetPrototypeName());
							}
							else 
							{
								GameObject schaum(gl.GetObject(0));
								if (schaum.IsValid() && ( schaum.GetUserData() == -1 || schaum.GetUserData() == g.GetID()))
								{
									schaum.SetUserData(g.GetID());
								} 
								else return ACTION_SKIP;
							}
							t.PushActionWait(ACTION_NEWLIST, 2.0f);
						}
						if (t.HasCommand("DummyIsOelspur") || t.HasName("ebox") || t.HasCommand("gefahrgut") ) 
						{
							t.PushActionWait(ACTION_NEWLIST, 1.5f);
							t.PushActionExecuteCommand(ACTION_APPEND, "FoxGenUtils", &g, 22, false);
						}
					}
				}
				break;
			case "EActionEnterHouse":
				OpenHouse oh(& Game::GetActor(Data->Parameters[0].iValue));
				if (oh.IsValid() && oh.IsBurning())
					g.SetChildEnabled("rau", true);
				if (oh.GetUserData() == -7643)
					oh.SetUserData(0);
			case "EActionLeaveHouse":
			case "EActionFindPath":
			case "EActionWait":
				if (Data->Owner->GetType() == ACTOR_PERSON && g.IsFlagSet(OF_LOCKED))
				{
					Person p(Data->Owner);
					if (p.GetEnteredHouseID() != -1 && p.GetFirehoseID() != -1)
					{
						OpenHouse oh(& Game::GetActor(p.GetEnteredHouseID()));
						if (oh.IsValid() && oh.IsBurning()  && p.IsCommandEnabled("Extinguish"))
						{
							
							
							System::Log(" ~~ FORCE EXTINGUISH CALLED %i %i ~~ ", p.GetID(), oh.GetID());
						}							
						return ACTION_SKIP;
					}					
				}
			case "EActionExecuteCommand":
				if (Data->Owner->GetType() == ACTOR_PERSON && g.IsFlagSet(OF_LOCKED))
					g.ClearFlag(OF_LOCKED);
			break;
			case "EActionRedirectCar":
				if (g.HasNamePrefix("tram_") || g.HasNamePrefix("tram_")) {
					if (g.HasObjectPath(NULL)) System::Log(" ~~ TRAM OBJECT PATH ~~ %s ", g.GetObjectPath().GetName());
					else System::Log(" ~~ TRAM HAS NO OBJECT PATH ~~ ", g.GetObjectPath().GetName());
					
					g.PushActionUsePath(ACTION_INSERT, g.GetObjectPath().GetName(), g.GetCurrentPathSpeed());
					g.PushActionWait(ACTION_INSERT, 5.0f);
					
					return ACTION_SKIP;
				}
			break;
			case "EActionEvade":
				if(!g.HasNamePrefix("tram_") && g.GetType() == ACTOR_VEHICLE)
					return ACTION_SKIP;
				





















			break;

		}
		if (debug || scriptDebug ) {
			
			System::Log("OnPreAction : %s %s %s %i %i", Action, g.GetName(), g.GetPrototypeName(), g.GetID(), ((int) (100*Game::GetRealTime())));

		}
		
		return ACTION_CONTINUE;
	}
	ActionCallbackResult OnAbortAction(const char *Action, ActionCallback* Data)
	{		
		OnPostAction(Action, Data);
		return ACTION_CONTINUE;
	}	
	ActionCallbackResult OnPostAction(const char *Action, ActionCallback *Data)
	{
		OnPostAction(Action, Data, true);
		return ACTION_CONTINUE;
	}
	bool OnStartBurning(GameObject * g)
	{
		GameObject tar(g);
		if (!tar.IsValid()) return false;
		if (tar.GetType() == ACTOR_OPEN_HOUSE)
		{
			OpenHouse oh(&tar);
			if (oh.IsBurningOutside()) tar.SetEffect("LightBurn_Default", "");
		}	
		else {
			bool doEffect = true;
			for (int k = 0; k < tar.GetNumFireChilds(); k++)
			{
				if (tar.GetFireChild(k).HasNamePrefix("NoEffect"))
				{
					doEffect = false;
					break;
				}
			}	
			if (doEffect) tar.SetEffect("LightBurn_Default", "");	
		}
		System::Log("OnStartBurning : %s %s ~~ ", tar.GetName(), tar.GetPrototypeName());
		return true;
	}
	void OnPostAction(const char *Action, ActionCallback *Data, bool post = false)
	{
		GameObject g(Data->Owner);
		if (!g.IsValid())
		{
			System::Log("OnPostAction : %s Invalid", Action);
			return;
		}
		if (debug || scriptDebug) System::Log("OnPostAction : %s %s %s %i %i %i", Action, g.GetName(), g.GetPrototypeName(), g.GetID(), post?1:0, ((int) (100*Game::GetRealTime())));
		






	}









	bool OnExplode(GameObject *Obj)
	{
		Vehicle v(Obj);
		if (v.IsValid())
		{	
			char name[64];
			snprintf(name, 64, "%s%i", "Schaumteppich", v.GetID());
			if (GameObjectList(name).GetNumObjects() > 0 ) return false; 
			v.SetSmoking(false);
			v.SetEnergy(1.0f);
			
			FireObject fl = v.GetFireObject();
			if (Math::rand()%10==0)
			{
				GameObject particle = Game::CreateObject("mod:Prototypes/Objects/Particles/explosioncar02.e4p", "particle");
				Audio::PlaySample3D("mod:Audio/FX/destruction/Explosion02.wav", v.GetPosition(), false);
				GameObjectList GL = v.GetObjectsInRange(200.0f, ACTOR_OBJECT);
				for (int k = 0; k < GL.GetNumObjects(); k++)
				{				
					if (GL.GetObject(k)->HasCommand("DummyIsOelspur") && !GL.GetObject(k)->HasCommand("DummyIsOelspurAbgestreut") )
					{
						if (Math::rand()%2==0)
						{
							System::Log("OelspurFound");
							GameObject OEL(GL.GetObject(k));
							if (OEL.IsValid() && OEL.GetNumActiveFireChilds()>0) 
							{
								OEL.Burn();
								for(int  k = 0; k< OEL.GetNumFireChilds(); k++) OEL.GetFireChild(k).SetTemperature(80.0f);
								break;
							}
						}
					}
					
				}
			}
			else GameObject particle = Game::CreateObject("mod:Prototypes/Objects/Particles/burningtree02b.e4p", "particle");
			particle.SetPosition(v.GetPosition());
			particle.StartParticleEffect();
			particle.PushActionWait(ACTION_APPEND, 1.0f);
			particle.PushActionExecuteCommand(ACTION_APPEND, "FoxGenUtils", &v, 25, false);
			particle.PushActionWait(ACTION_APPEND, 20.0f);
			particle.PushActionDeleteOwner(ACTION_APPEND);
			System::Log(" ~~ EXPLODE %s ~~ ", v.GetPrototypeName());
			return false;
		}
		else return true;
	}
	void OnTrigger(const char *Trigger, Actor *Collider)
	{
		if (Game::HasNamePrefix(Trigger, "gate_"))
		{
			GameObjectList gl(Trigger);
			for (int k = 0; k < gl.GetNumObjects(); k++) {
				if (gl.GetObject(k)->GetUserData() != 1){
					gl.GetObject(k)->SetAnimation("open");
					gl.GetObject(k)->SetUserData(1);
					
					gl.GetObject(k)->PushActionWait(ACTION_APPEND, 10.0f );
					gl.GetObject(k)->PushActionExecuteCommand(ACTION_APPEND, "TimeCloseDoor");
				}
			}
		}
		
		else if (Game::HasNamePrefix(Trigger, "station") && !Game::IsMultiplayer())
		{
			Vehicle tram(Collider);
			if (!tram.IsValid() || !tram.HasNamePrefix("tram_") || tram.HasCommand("FOXCMBLOCK")) return;
			for (int k = 1; k <= 6; k++)
			{
				snprintf(text, length, "station%i", k);
				if (Game::HasNamePrefix(Trigger, text))
				{
				 	snprintf(text, length, "tram%i", k);
				 	if (tram.HasObjectPath(text))
				 	{
				 		ActorList al(Trigger);
				 		if (al.GetNumActors() == 0) break;
			 			if (tram.GetUserData() == al.GetActor(0)->GetID()) break;
			 			tram.SetUserData(al.GetActor(0)->GetID());
			 			
						Game::ExecuteCommand("ZZ_TramManager", &tram, &tram);
						System::Log(" ~~ STATION TRIGGER %s ~~ ", tram.GetName());
						
				 	}
				 	break;
				}
			}
		}
	}
	PathFinishedAction OnPathFinished(const char* Path_, GameObject *Obj_)
	{
		switch(Path_)
		{
			case "oel1":
				{
					System::Log(" ~~ Oel Path finished ~~ ");
					Vehicle v(Obj_);
					if (!v.IsValid()) return PATH_DEFAULT;
					Game::ExecuteCommand("SpawnOel", &v, &v);
				}
				return PATH_DEFAULT;
		}
		return PATH_DEFAULT;
	}
	bool OnUnitSelected(GameObject * Unit)
	{
		System::Log(" ~~ Unit Selected %s ~~ ", Unit->GetPrototypeName());
		return true;
	}
	void MPSync()
	{		
		if (!SyncObject.IsValid())
		{
			GameObjectList gl("ZZ_MPSYNC");
			if (gl.GetNumObjects() > 0)
				GameObject SyncObject(gl.GetObject(0));
		}
		if (!SyncObject.IsValid()) return;
		
		WeatherSync(&SyncObject);
	}
	void LSTSync()
	{
		bool found = false;
		for (int num = 0; num < CallLimit; num++)
		{
			if (!lstObjects[num].IsValid()) 
			{
				System::Log(" ~~ Searching for LST Object %i ~~ ", num);
				VehicleList vl(VT_FIREFIGHTERS_RW, VT_FIREFIGHTERS_RW);
				snprintf(text,length,"FOXCM%i",num);
				for (int k = 0; k < vl.GetNumVehicles();  k++)
				{
					if (vl.GetVehicle(k)->HasCommand("LSTsync") && vl.GetVehicle(k)->HasCommand(text) && vl.GetVehicle(k)->GetPlayerMP() == localPlayerMP)
					{
						lstObjects[num] = *(vl.GetVehicle(k));
						System::Log(" ~~ LST OBJECT FOUND %i ~~ ", num);
						break;
					}					
				}
			}
			if (lstObjects[num].IsValid())
			{
				
				if (lstObjects[num].HasCommand("DUMMY_H1")){
					found = true;
					break;
				}
			}
		}
		if (indicatorsShown != found)
		{
			Indicators.Show("indicators", found);
			Indicators.Show("leftIndicator", found);
			Indicators.Show("rightIndicator", found);	
			indicatorsShown = found;
		}
		
	}
	
	bool fID(float a, float b, float step = 0.05f)
	{
		return (Math::fabs(a - b) < step);
	}
	float lerp(float current, float target, float step = 0.05f)
	{
	    if (fID(target, current, step))
	        return target;
	    return current + (target > current ? step : -step);
	}


	void WeatherSync(GameObject * Caller)
	{
		











		
		Game::GetTime(h,m,s);
		if (Caller->HasCommand("DUMMY_G1") != rain || Caller->HasCommand("DUMMY_G2") != storm || Caller->HasCommand("DUMMY_G3") != clouds || hc != h)
		{
			rain = Caller->HasCommand("DUMMY_G1");
			storm = Caller->HasCommand("DUMMY_G2");
			clouds = Caller->HasCommand("DUMMY_G3");
			










			
			

			if (!rain)
			{	
				
				wT0 = 0.0f;
				
				wT1 = 0.0f;
			}
			else if (!storm)
			{
				
				wT0 = 1.0f;
				
				wT1 = 0.0f;
			}
			else
			{
				
				wT0 = 1.0f;
				
				wT1 = 1.0f;
			}		
			float timeFac = h + (((float)m)/60.0f);
			float night = Math::fabs((timeFac-12)/12.0);
			
			wT2 = rain?1:0;
			
			wT3 = storm?0.15:0;
			
			if (rain)
			{
				if (storm)
					Weather::SetStormSpeed(0.3f);
				else
					Weather::SetStormSpeed(0.1f);
				
				
				
				wT4 = 0.6-night*0.3f;
				
				System::SetEnv("e4_bloom", "0");
			}
			else
			{
				System::SetEnv("e4_bloom", "0"); 
				
				
				Weather::SetStormSpeed(0.0f);
				if (h >= 20 || h < 4)
				{
					
					wT4 = 0.2*night;
					
				}
				else
				{
				 	if (clouds) 
				 		
				 		wT4 = 0.5f-night*0.75f;
					else 
						
						wT4 = 0.0f;
					
				}
				float bias = -1;
				if (h >= 18 || h < 8){
					bias = 1-3*night;
				}  
				else if (h < 16) bias = -0.03 -(1-3*night) * 0.22; 
				else bias = -0.03; 
				if (bias < -1) bias = -1;
				System::SetEnv("fx_bloomBias", bias);
				System::Log(" ~~ bias calculated %i ~~ ", (int)(1000*bias)); 
			}
			Game::SetAmbientSoundVolumeByName("a1", 1.f);
			Game::SetAmbientSoundVolumeByName("a2", 1.f);
			Game::SetAmbientSoundVolumeByName("a3", 1.f);
			Game::SetAmbientSoundVolumeByName("a4", 1.f);
			Game::SetAmbientSoundVolumeByName("a5", 1.f);
			Game::SetAmbientSoundVolumeByName("a6", 1.f);
			Game::SetAmbientSoundVolumeByName("a7", 1.f);
			Game::SetAmbientSoundVolumeByName("a8", 1.f);
			hc = h;
		}
		bool newWeatherSet = false;

		if (!fID(wC0, wT0))
		{
			newWeatherSet = true;
			wC0 = lerp(wC0, wT0);
		}
		if (!fID(wC1, wT1))
		{
			newWeatherSet = true;
			wC1 = lerp(wC1, wT1);
		}
		if (!fID(wC2, wT2))
		{
			newWeatherSet = true;
			wC2 = lerp(wC2, wT2);
		}
		if (!fID(wC3, wT3))
		{
			newWeatherSet = true;
			wC3 = lerp(wC3, wT3);
		}
		if (!fID(wC4, wT4))
		{
			newWeatherSet = true;
			wC4 = lerp(wC4, wT4);
		}

		if (newWeatherSet)
		{
			
			Game::SetAmbientSoundVolumeByName("rain", wC0);
			Game::SetAmbientSoundVolumeByName("thunder", wC1);
			Weather::SetRainIntensity(wC2);
			Weather::SetFlashIntensity(wC3);
			Weather::SetFogIntensity(wC4);
			
			System::Log(" *** WEATHER SET *** ");
			System::Log(" *** TIME %i:%i *** ", h, m);
			
			
















		}


	}
CLASS_fp_freeplay() : MissionScript("CLASS_fp_freeplay", "fp_freeplay"){}
};

CLASS_fp_freeplay fp_freeplay;
#line 958 "Source\Mission\fp_freeplay.script" 
#line 957 "Source\Mission\fp_freeplay.script"
class CLASS_TimeCloseDoor : public CommandScript
{
public:
#line 959 "Source\Mission\fp_freeplay.script"

	bool CheckTarget(GameObject *Caller, Actor *Target, int childID) {return true;}
	void PushActions(GameObject *Caller, Actor *Target, int childID){
		GameObject g(Caller);
		if(g.GetUserData() == 0) return;
		if ( (!Game::IsSquadInTrigger(g.GetName(), ACTOR_PERSON | ACTOR_VEHICLE) && !Game::IsCivilianInTrigger(g.GetName(), ACTOR_PERSON | ACTOR_VEHICLE)))
		{
			g.SetAnimation("close");
			g.SetUserData(0);
		}
		else
		{						
			g.PushActionWait(ACTION_APPEND, 5.0f);
			g.PushActionExecuteCommand(ACTION_APPEND, "TimeCloseDoor");
		}
	}
CLASS_TimeCloseDoor() : CommandScript("CLASS_TimeCloseDoor", "TimeCloseDoor"){}
};

CLASS_TimeCloseDoor TimeCloseDoor;
#line 976 "Source\Mission\fp_freeplay.script" 



#line 978 "Source\Mission\fp_freeplay.script"
class CLASS_CheckObjectCount : public CommandScript
{
public:
#line 980 "Source\Mission\fp_freeplay.script"

	bool CheckTarget(GameObject *Caller, Actor *Target, int childID) {return true;}
	void PushActions(GameObject *Caller, Actor *Target, int childID){
		int limit = 100; 
		if (childID < 4000) limit = 500;
		GameObject g;
		for (int k = 0; k < limit; k++)
		{
			childID++;
			GameObject g = Game::CreateObject("mod:Prototypes/Objects/Equipment/bottle.e4p", "ObjectCounter");
			System::Log(" ~~ creating object %i ~~ ", childID);
		}
		if (g.IsValid())
		{
			g.PushActionWait(ACTION_APPEND, 5.0f);
			g.PushActionExecuteCommand(ACTION_APPEND, "CheckObjectCount", &g, childID, false);
		}	
		
	}
CLASS_CheckObjectCount() : CommandScript("CLASS_CheckObjectCount", "CheckObjectCount"){}
};

CLASS_CheckObjectCount CheckObjectCount;
#line 1000 "Source\Mission\fp_freeplay.script" 

};