Content: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Background: Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Pattern: Blank Waves Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Welcome to International Emergency & 911: First Responders Fan Forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

  • Announcements

    • Stan

      Maintenance update   02/07/2016

      Dear community,   After three weeks of issues we moved our site to a new dedicated root server. We fixed a lot of bugs with this release. All downloads up to 1Gb filesize should be downloadable for everyone.   Encountering any kind of issues? Make a post in the website/forum support.   Regards, Stan
    • Stan

      Paid Referral Links   02/11/2016

      Hello,     From now on we will be disallowing any referral links on our site. This is not the place to earn money directly or indirectly. Anyone found sharing paid shortened links or referral links to earn money might lose his account.     Reason for this:     We are providing this service free of charge, putting our own free time in this and paying monthly fees on our own costs to keep this free service running. So why should anyone else make money from something they don’t pay to use?     So in short from now on we will be warning and banning users abusing or misusing referal links.     Regards,     Stan          
    • randomperson139

      Signatures   03/04/2016

      Hi everyone. It appears that the update to the new forum has affected the format of the majority of signatures (adding extra spaces, changing sizes etc.). Due to this, could everyone please check their own signature, ensuring that it complies with the site rules. See the http://www.emergency-planet.com/tos.html/ or http://www.emergency-planet.com/topic/16848-acceptable-signature-sizes/ for more information.  We'll give it a few weeks to give enough time to edit signatures, after that the unnecessarily large signatures will simply be removed. Thanks for your cooperation. Regards, EMP Staff.
Hoppah

[Released] Limited Water Supply Logic

304 posts in this topic

Dear forumbuddy's,

As some of you may have read in the US Army Mod topic, I have made a script that limits water supply for fire engine's. A functionality that's been widely requested on the forums here to make the game more realistic. Due to the popularity of this functionality, I decided to make a demo using the logic from the US Army Mod and two FDNY Engine's taken from the New York City Mod made by Mikey_PI and associates.

 

 

post-4-0-43790300-1376500677_thumb.jpgpost-4-0-43790300-1376500677_thumb.jpg

 

The first screenshot shows the functionality in the demo mission. The second screenshot shows the functionality in a freeplay mode.

 

 

Can I use this logic in my mod?

Yes, the entire idea of this demo is to distribute it, so you may copy the entire script and interface objects to your mod and release it for public. I'd appreciate if you'd credit me (Hoppah) for the logic though. Consult the attached file 'Limited Water Supply Logic - Mod Implementation Guide.pdf' for further instructions or take some time to read the topic for further details regarding implementation.

 

 

Bugs

 

- The fire fighter who spawns outside to control the pump of a fire engine may not be recognized by the vehicle sometimes, resulting in connected firehoses not working. To fix this, simply select the fire fighter and click on the fire engine to activate the pump again.

- In a rare occasion, the water tanker may not be recognized by the script, resulting in a water tanker with fire engine traits (1000 gallon tank for example) and not being able to supply other vehicles. Especially after playing freeplay directly after the demo mission may cause this problem.

 

 

Credits

Mikey_PI: FNDY Fire Engine models and FDNY Fire Fighter textures

Freakinmusket: Water Tanker model

Hoppah: All Interface changes and limited water supply logic/scripts

 

Note: I am aware other mod-creators have made a similar logic before. No interface elements nor script codes in this modification were taken from other modifications. The entire logic is made by myself, so I could alter it to my own wishes and make a public release without any problematic copyright claims.

 

Feedback would be appreciated!

Limited_Water_Supply_Test_Mod-v1-2-by_Hoppah.rar

Limited Water Supply Logic - Mod Implementation Guide v1.2.pdf

Hoppah

Em4Deluxe 2013-09-03 22-41-06-51.jpg

1

Share this post


Link to post
Share on other sites

Hey Hoppah,

I tried your demo mission and was impressed. It all seems to work perfectly :)

Would it work for gated wyes?

I do hope someone can work out how to transfer this into a script that can be added into freeplays, it'd be amazing.

0

Share this post


Link to post
Share on other sites

No, this script is not compatible with gated wye's yet, but I'm sure it's possible to get that to work. Glad someone likes the demo. :)

1

Share this post


Link to post
Share on other sites

Finally :D

 

thanks Hoppah for this! 

Freelancer

0

Share this post


Link to post
Share on other sites

So to put this into lets say montana  mod i just drag and drop? (Im dumb when it comes to modding)

0

Share this post


Link to post
Share on other sites

So to put this into lets say montana  mod i just drag and drop? (Im dumb when it comes to modding)

 

Absolutely not. The first post already mentioned that the entire logic is specifically set up for 2 fire engine's (as shown in the demo) in a missionscript. Unless you have plenty of scripting experience, it's nearly impossible to implement this into another mod. The logic is not compatible with freeplay either, while the majority of the mods are built for the freeplay modes.

 

The reason why I released this demo is to show people the functionality and give others an opportunity to play with the code. I do believe there is a workaround to get this logic to work in freeplay too (without the interface elements obviously) and people are free to give it a shot. The biggest concern to get this code to work in freeplay would be the way the tank volumes for each vehicle are kept and saved ánd how often the volumes are monitored realtime to check if hoses or deck guns are active so the volumes can be changed almost realtime (there's IMO a risk of lag when 20 fire trucks are being monitored twice a second in the background). 

 

In the missionscript that comes with this demo, the watertank volumes are stored as simple integers (like: "int MAX_WATER_ENGINE01 = 2000;" for the tank volume of one of the engine's). As soon hoses or the deck gun are being used, the missionscript simply changes the integer almost realtime by subtracting/adding the calculated water out-/intake. For freeplay, you're unfortunately stuck to commandscripts and it would be more complex to get the same logic to work. It's definately not possible to add interface elements to freeplay, since only missionscripts can load the xml dialogs. A workaround for that would be using commandicons to inform players what the relative tank volume is (like 10, 20, 30 percent etc..), but like I said, that's not the biggest concern. Hopefully, a workaround will be found. :)

 

Hoppah

0

Share this post


Link to post
Share on other sites

Absolutely not. The first post already mentioned that the entire logic is specifically set up for 2 fire engine's (as shown in the demo) in a missionscript. Unless you have plenty of scripting experience, it's nearly impossible to implement this into another mod. The logic is not compatible with freeplay either, while the majority of the mods are built for the freeplay modes.

 

The reason why I released this demo is to show people the functionality and give others an opportunity to play with the code. I do believe there is a workaround to get this logic to work in freeplay too (without the interface elements obviously) and people are free to give it a shot. The biggest concern to get this code to work in freeplay would be the way the tank volumes for each vehicle are kept and saved ánd how often the volumes are monitored realtime to check if hoses or deck guns are active so the volumes can be changed almost realtime (there's IMO a risk of lag when 20 fire trucks are being monitored twice a second in the background). 

 

In the missionscript that comes with this demo, the watertank volumes are stored as simple integers (like: "int MAX_WATER_ENGINE01 = 2000;" for the tank volume of one of the engine's). As soon hoses or the deck gun are being used, the missionscript simply changes the integer almost realtime by subtracting/adding the calculated water out-/intake. For freeplay, you're unfortunately stuck to commandscripts and it would be more complex to get the same logic to work. It's definately not possible to add interface elements to freeplay, since only missionscripts can load the xml dialogs. A workaround for that would be using commandicons to inform players what the relative tank volume is (like 10, 20, 30 percent etc..), but like I said, that's not the biggest concern. Hopefully, a workaround will be found. :)

 

Hoppah

 

From what I've seen in it it's relatively simple to follow, but mission scripts are so alien to me I'm struggling to extract a command script to work from, this has well and truly stumped me. I need to learn more about missionscripts before even approaching this I think :)

 

x

0

Share this post


Link to post
Share on other sites

very nice.   There got be a way to do this is freeplay.  Reason begin it been done.  Winterberg has limit water supply for several years now.  However I seem to recall that they went to studio at one point and got help from the game designers.  

0

Share this post


Link to post
Share on other sites

Hoppah,

 

Very good. Been waiting for this for a while! Any chance you could set up engine to engine supplies to where the water from the hydrant will supply both units simultaneously? Also I would really like to see this put into other mods. could the mod creator build a patch for mods with it?

0

Share this post


Link to post
Share on other sites

Hoppah,

 

Very good. Been waiting for this for a while! Any chance you could set up engine to engine supplies to where the water from the hydrant will supply both units simultaneously? Also I would really like to see this put into other mods. could the mod creator build a patch for mods with it?

 

Well, there's plenty of improvement options left. One them would be your idea. Another one would be an improved 'rapid deployment' command, so a 5th fire fighter automatically installs a water supply line (hydrant to engine). That one would be great for American mods, because most American fire engine's do not have a water tank at all (right?  :blush: ), so you will HAVE TO to install a water supply line before you can use any hoses or the deck gun to maintain this level of realism.

 

A third idea would be gated wye compatibility.

 

We'll see what I can achieve in the future to further improve this demo mod. At least the base is there, but I first want to focus on the US Army Mody again.

0

Share this post


Link to post
Share on other sites

the only problem for me would be that if you used that rapid deployment feature as such, the application in rural areas would not work as the ff would try to go to the closest hydrant unless you set up the gated wye so that you have a layout feature instead of rapid deployment and you can have rural layout where the ff grabs the wye and sets it out for supply or urban layout where he finds the hydrant closest

0

Share this post


Link to post
Share on other sites

Looks good Hoppah!

If we weren't so close to release for the Welfordshire mod, I would look into it for version one. Our mod uses freeplay so I'd have to look into possibly using the commandicon percentage idea. Maybe an idea for version two haha!

Great work though, well done!

0

Share this post


Link to post
Share on other sites

Hmmm... would it be possible to set up a dump tank? That could solve the issue with rural departments, and could even be useful in the US Army mod

0

Share this post


Link to post
Share on other sites

This is so very frustrating as a moder, and EM4 player this in freeplay would be so great, However it acts to escape  every one!

 

Here has what i came up with, and maybe will give some with more knowledge and skill a way to look!

 

1. The best way would be to assign a tank level to one class of units, ( Possibly even a different script for each truck would be necessary to keep track of its water level better )

2. Then have preset way of adding and subtraction between 0 ( tank empty ) and the tank full level ( W/E Its set at )

3. To update on tank level you could do a text at the top of the screen or as hoppah suggested icons ( However i think this is the lest import aspect of the script)

4.  Lag would be a potential problem due to the fact that each truck is constantly updating its water level

5. A code idea ( i am fully aware that this is not actually right it is just a brain storm! )

 

const char ETL[]				=  "1000";const char OUTTAKE_HOSE 			= 6;const char OUTTAKE_CANNON 			= 10;const char INTAKE_SUPPLYLINE 		= 24;object VcmdWaterLVL : CommandScript{	VcmdWaterLVL()	{				SetGroupID(DummyGroup); 		SetGroupLeader(true);			}Vehicle v(Caller);		if (v.GetVehicleType() == VT_FIREFIGHTERS_GTF)			// Some how set Water level ( ETL )		if (v.HasCommand(DUMMY_HOSESON))		// some how set OUTTAKE_HOSE		if (v.HasCommand(WaterOn))		// some how set OUTTAKE_CANNON 

 

Please any suggestions or ideas off this would be welcomed 

between all of us we can make it work, Even with a little lag! 

 

Ideas ??

0

Share this post


Link to post
Share on other sites

would be possible to connect the hose from a truck to the other? would be interesting!

0

Share this post


Link to post
Share on other sites

This is so very frustrating as a moder, and EM4 player this in freeplay would be so great, However it acts to escape  every one!

 

Here has what i came up with, and maybe will give some with more knowledge and skill a way to look!

 

1. The best way would be to assign a tank level to one class of units, ( Possibly even a different script for each truck would be necessary to keep track of its water level better )

2. Then have preset way of adding and subtraction between 0 ( tank empty ) and the tank full level ( W/E Its set at )

3. To update on tank level you could do a text at the top of the screen or as hoppah suggested icons ( However i think this is the lest import aspect of the script)

4.  Lag would be a potential problem due to the fact that each truck is constantly updating its water level

5. A code idea ( i am fully aware that this is not actually right it is just a brain storm! )

Please any suggestions or ideas off this would be welcomed 

between all of us we can make it work, Even with a little lag! 

 

Ideas ??

 

I like it. If I still had Winterberg installed I'd try to look at the method they found, though theirs is way too restrictive considering an American-style engine usually has a tank capable of holding a few hundred gallons at the least.

0

Share this post


Link to post
Share on other sites

This is so very frustrating as a moder, and EM4 player this in freeplay would be so great, However it acts to escape  every one!

 

Here has what i came up with, and maybe will give some with more knowledge and skill a way to look!

 

1. The best way would be to assign a tank level to one class of units, ( Possibly even a different script for each truck would be necessary to keep track of its water level better )

2. Then have preset way of adding and subtraction between 0 ( tank empty ) and the tank full level ( W/E Its set at )

3. To update on tank level you could do a text at the top of the screen or as hoppah suggested icons ( However i think this is the lest import aspect of the script)

4.  Lag would be a potential problem due to the fact that each truck is constantly updating its water level

5. A code idea ( i am fully aware that this is not actually right it is just a brain storm! )

 

const char ETL[]				=  "1000";const char OUTTAKE_HOSE 			= 6;const char OUTTAKE_CANNON 			= 10;const char INTAKE_SUPPLYLINE 		= 24;object VcmdWaterLVL : CommandScript{	VcmdWaterLVL()	{				SetGroupID(DummyGroup); 		SetGroupLeader(true);			}Vehicle v(Caller);		if (v.GetVehicleType() == VT_FIREFIGHTERS_GTF)			// Some how set Water level ( ETL )		if (v.HasCommand(DUMMY_HOSESON))		// some how set OUTTAKE_HOSE		if (v.HasCommand(WaterOn))		// some how set OUTTAKE_CANNON 

 

Please any suggestions or ideas off this would be welcomed 

between all of us we can make it work, Even with a little lag! 

 

Ideas ??

 

Appreciate the input, but even with classes of units the game still has to check each individual vehicle because each vehicle must have an individual unique water tank. The problem is not how the game shows the update to the player, but how updating the water tanks is done in the background and how the water levels of EACH tank/vehicle are stored and saved. The way of adding and subtraction can be copied from the demo I made which is not really a problem.. :)

 

I do have a couple of ideas though, which I will look into later.

0

Share this post


Link to post
Share on other sites

Appreciate the input, but even with classes of units the game still has to check each individual vehicle because each vehicle must have an individual unique water tank. The problem is not how the game shows the update to the player, but how updating the water tanks is done in the background and how the water levels of EACH tank/vehicle are stored and saved. The way of adding and subtraction can be copied from the demo I made which is not really a problem.. :)

 

I do have a couple of ideas though, which I will look into later.

 

 

As i said next to number one  "Possibly even a different script for each truck would be necessary to keep track of its water level better"

Thinking about it further i would about say that is with out a doubt the best option, Each truck with its own script would make for a simplistic start to finding a solution!

 

Hoppah could you break down the part of the code that dose adding and subtracting? I don't really know the mission scripting stuff but if i had the basics to put in to a command script i might be able to play around with it a bit better!

0

Share this post


Link to post
Share on other sites

I like it. If I still had Winterberg installed I'd try to look at the method they found, though theirs is way too restrictive considering an American-style engine usually has a tank capable of holding a few hundred gallons at the least.

I looked at trying to find it in the winterberg mods ones and quickly realized i don't read German very well!

0

Share this post


Link to post
Share on other sites

As i said next to number one  "Possibly even a different script for each truck would be necessary to keep track of its water level better"

Thinking about it further i would about say that is with out a doubt the best option, Each truck with its own script would make for a simplistic start to finding a solution!

 

Hoppah could you break down the part of the code that dose adding and subtracting? I don't really know the mission scripting stuff but if i had the basics to put in to a command script i might be able to play around with it a bit better!

 

Sure,

 

The following part gets all the GTF type vehicle in a vehiclelist, then checks per found vehicle if there are any active hoses, deck guns or suppy lines. Then changes the water level, and -when required- disables (or re-enables) the hose connections or deck gun(s) when the tank is empty.

 

VehicleList fflist(VT_FIREFIGHTERS_GTF, VT_FIREFIGHTERS_GTF);for(int i = 0; i < fflist.GetNumVehicles(); i++){		if (fflist.GetVehicle(i)->HasCommand("DummyLimitedWater"))	{		int numActiveHoses = 0;		int numActiveCannons = 0;		int numSupplyLines = 0;		int Outtake = 0;		int Intake = 0;		Vehicle veh(fflist.GetVehicle(i));		if (veh.HasCommand("DummyWaterSupplyOn"))			numSupplyLines++;		if (veh.GetVehicleType() == VT_FIREFIGHTERS_GTF && veh.IsInstalled())		{			PersonList Pconnected(ROLE_SQUAD);			for(int k = 0; k < Pconnected.GetNumPersons(); k++)			{				if (Pconnected.GetPerson(k)->GetEquipment() == EQUIP_FIREHOSE && Pconnected.GetPerson(k)->GetType() == ACTOR_PERSON && Pconnected.GetPerson(k)->GetFirehoseID() != 0 && !Pconnected.GetPerson(k)->IsFlagSet(OF_HIDDEN))				{					Vector TargetPos;					GameObject Phydrant = Pconnected.GetPerson(k)->GetHydrant();					if (Phydrant.GetID() == veh.GetID())					{						Person p(Pconnected.GetPerson(k));						if (p.IsCurrentAction("EActionExtinguish") || p.IsCurrentAction("EActionCool"))							numActiveHoses++;					}				}			}		}		if (veh.HasCommand("VcmdWaterSwitch") && veh.IsCurrentAnimation("activate"))		{			GameObjectList cannonlist = Game::GetGameObjectsWithPrefix("engine_water_cannon");			for(int j = 0; j < cannonlist.GetNumObjects(); j++)			{				Vehicle cannon = cannonlist.GetObject(j);				if (cannon.GetUserData() == veh.GetID() && (cannon.IsCurrentAction("EActionExtinguish") || cannon.IsCurrentAction("EActionCool")))					numActiveCannons++;			}		}		Intake = numSupplyLines*INTAKE_SUPPLYLINE;		Outtake = numActiveHoses*OUTTAKE_HOSE+numActiveCannons*OUTTAKE_CANNON;		if (veh.GetID() == mEngine01.GetID())		{			Engine01Level = Engine01Level+Intake-Outtake;			if (Engine01Level < 20)				veh.AssignCommand("DummyEmptyTank");			if (Engine01Level > MAX_WATER_ENGINE01)				Engine01Level = MAX_WATER_ENGINE01;			else if (Engine01Level < 0)				Engine01Level = 0;		}		if (veh.GetID() == mEngine02.GetID())		{			Engine02Level = Engine02Level+Intake-Outtake;			if (Engine02Level < 20)				veh.AssignCommand("DummyEmptyTank");			if (Engine02Level > MAX_WATER_ENGINE02)				Engine02Level = MAX_WATER_ENGINE02;			else if (Engine02Level < 0)				Engine02Level = 0;		}		if (veh.HasCommand("DummyEmptyTank"))		{			PersonList Pconnected(ROLE_SQUAD);			for(int k = 0; k < Pconnected.GetNumPersons(); k++)			{				if (Pconnected.GetPerson(k)->GetEquipment() == EQUIP_FIREHOSE && Pconnected.GetPerson(k)->GetType() == ACTOR_PERSON && Pconnected.GetPerson(k)->GetFirehoseID() != 0 && !Pconnected.GetPerson(k)->IsFlagSet(OF_HIDDEN))				{					Vector TargetPos;					GameObject Phydrant = Pconnected.GetPerson(k)->GetHydrant();					if (Phydrant.GetID() == veh.GetID())					{						Person p(Pconnected.GetPerson(k));						if ((veh.GetID() == mEngine01.GetID() && Engine01Level < 20) || (veh.GetID() == mEngine02.GetID() && Engine02Level < 20))						{								if (p.IsCommandEnabled("Extinguish"))							{								p.EnableCommand("Extinguish", false);								p.EnableCommand("Cool", false);								p.EnableAutoTarget(false);								p.ClearActions();								p.PushActionWait(ACTION_NEWLIST, 2.f);							}						} else						{							p.EnableCommand("Extinguish", true);							p.EnableCommand("Cool", true);							p.EnableAutoTarget(true);						}					}				}			}			if (veh.HasCommand("VcmdWaterSwitch") && veh.IsCurrentAnimation("activate"))			{				GameObjectList canlist = Game::GetGameObjectsWithPrefix("engine_water_cannon");				for(int j = 0; j < canlist.GetNumObjects(); j++)				{					Vehicle can = canlist.GetObject(j);					if (can.GetUserData() == veh.GetID() && ((veh.GetID() == mEngine01.GetID() && Engine01Level > 20) || (veh.GetID() == mEngine02.GetID() && Engine02Level > 20)))					{						can.EnableAutoTarget(true);					} else					{						can.EnableAutoTarget(false);						can.ClearActions();						can.PushActionWait(ACTION_NEWLIST, 2.f);						System::Log("Disable cannon");					}				}			}			if (veh.GetID() == mEngine01.GetID() && !Engine01Empty)			{				Engine01Empty = true;				Game::ShowHelpTextWindow("Water tank of Local Fire Truck is empty!");			}			if (veh.GetID() == mEngine02.GetID() && !Engine02Empty)			{				Engine02Empty = true;				Game::ShowHelpTextWindow("Water tank of Local Fire Truck is empty!");			}			if ((veh.GetID() == mEngine01.GetID() && Engine01Level > 20) || (veh.GetID() == mEngine02.GetID() && Engine02Level > 20))			{				veh.RemoveCommand("DummyEmptyTank");				if (veh.HasCommand("Extinguish"))					veh.EnableCommand("Extinguish", true);				if (veh.HasCommand("Cool"))					veh.EnableCommand("Cool", true);				if (veh.GetID() == mEngine01.GetID() && Engine01Empty)					Engine01Empty = false;				if (veh.GetID() == mEngine02.GetID() && Engine02Empty)					Engine02Empty = false;			} else			{				if (veh.HasCommand("Extinguish"))					veh.EnableCommand("Extinguish", false);				if (veh.HasCommand("Cool"))					veh.EnableCommand("Cool", false);			}		}	}}

 

The part below this code in the missionscript is only dedicated to the visual aspect, the information panel.

0

Share this post


Link to post
Share on other sites

Well, there's plenty of improvement options left. One them would be your idea. Another one would be an improved 'rapid deployment' command, so a 5th fire fighter automatically installs a water supply line (hydrant to engine). That one would be great for American mods, because most American fire engine's do not have a water tank at all (right?  :blush: ), so you will HAVE TO to install a water supply line before you can use any hoses or the deck gun to maintain this level of realism.

 

 

Not quite right Hoppah.  American fire engines have a LIMITED tank.  Usually somewhere between 500 and 1000 gallons.  Many times the tank is equal or smaller than the pump capacity (i.e. 1250 gpm (gallons per minute)).  This allows for a truck to fast attack a small fire (garbage / car) without having to first connect to a hydrant, and give the crew a little time to get the hydrant line connected.

0

Share this post


Link to post
Share on other sites

Not quite right Hoppah.  American fire engines have a LIMITED tank.  Usually somewhere between 500 and 1000 gallons.  Many times the tank is equal or smaller than the pump capacity (i.e. 1250 gpm (gallons per minute)).  This allows for a truck to fast attack a small fire (garbage / car) without having to first connect to a hydrant, and give the crew a little time to get the hydrant line connected.

 

Thanks. :)

 

 

Almost got the 'rapid deployment' command to also automatically install and deinstall the supply line. I will release this minor addition soon.

 

Edit 1:

You can find the 'rapid deployment' compatibility files in the attachment. Simply unrar the package and move the files to your "\Mods\Limited Water Supply Test Mod\Scripts\Game\Command\" folder and overwrite the older files. This addition does need some extra testing (I got a ton of CTD's before I got it to work), but it should work fine in general. When clicking the 'rapid deployment' command, one of the fire fighters should install the supply line first now, before he attaches his own hose. Same thing for the reversed command basically.

 

Edit 2:

Also managed to get the gated wye to work with the limited water functionality. Seems to work fine. I'll re-release the entire demo mod with the new additions in a few days again.

 

Hoppah

RapidDeployment.rar

Edited by Hoppah
0

Share this post


Link to post
Share on other sites

Hoppah Hello, congratulations for the script, I have a serving for freeplay so that the water turns into a truck TLF and asks for a hydrant to testing it with the water supply.

0

Share this post


Link to post
Share on other sites

Sure,

 

The following part gets all the GTF type vehicle in a vehiclelist, then checks per found vehicle if there are any active hoses, deck guns or suppy lines. Then changes the water level, and -when required- disables (or re-enables) the hose connections or deck gun(s) when the tank is empty.

The part below this code in the missionscript is only dedicated to the visual aspect, the information panel.

 

 

Okay so here is what i got, when  loading i get limitation statement to long as an error ( Around line 60 )

 

This is playing for about an hour with the code any thoughts?

int ETL[]				=  1000;const char OBJ_E04[]			= "mod:Prototypes/Vehicles/02 Fire Department/engine01.e4p";int OUTTAKE_HOSE 			= 6;int OUTTAKE_CANNON 			= 10;int INTAKE_SUPPLYLINE 		= 24;int WaterLevel;int Engine01Level;object VcmdWaterLVL : CommandScript{	VcmdWaterLVL()	{		SetCursor("");		SetIcon("");		SetGroupID(DummyGroup); 		SetGroupLeader(true);		SetRestrictions(RESTRICT_SELFEXECUTE);	}	Vehicle veh(StrCompare(v.GetPrototypeFileName(), OBJ_E04);			{							if (veh)->HasCommand("DummyLimitedWater"))						{							int numActiveHoses = 0;							int numActiveCannons = 0;							int numSupplyLines = 0;							int Outtake = 0;							int Intake = 0;							if (veh.HasCommand("DummyWaterSupplyOn"))								numSupplyLines++;							if (veh.GetVehicleType() == VT_FIREFIGHTERS_GTF && veh.IsInstalled())						}		{			PersonList Pconnected(ROLE_SQUAD);			for(int k = 0; k < Pconnected.GetNumPersons(); k++)			{				if (Pconnected.GetPerson(k)->GetEquipment() == EQUIP_FIREHOSE && Pconnected.GetPerson(k)->GetType() == ACTOR_PERSON && Pconnected.GetPerson(k)->GetFirehoseID() != 0 && !Pconnected.GetPerson(k)->IsFlagSet(OF_HIDDEN))				{					Vector TargetPos;					GameObject Phydrant = Pconnected.GetPerson(k)->GetHydrant();					if (Phydrant.GetID() == veh.GetID())					{						Person p(Pconnected.GetPerson(k));						if (p.IsCurrentAction("EActionExtinguish") || p.IsCurrentAction("EActionCool"))							numActiveHoses++;					}				}			}		}		if (veh.HasCommand("VcmdWaterSwitch") && veh.IsCurrentAnimation("activate"))		{			GameObjectList cannonlist = Game::GetGameObjectsWithPrefix("engine_water_cannon");			for(int j = 0; j < cannonlist.GetNumObjects(); j++)			{				Vehicle cannon = cannonlist.GetObject(j);				if (cannon.GetUserData() == veh.GetID() && (cannon.IsCurrentAction("EActionExtinguish") || cannon.IsCurrentAction("EActionCool")))					numActiveCannons++;			}		}		Intake = numSupplyLines*INTAKE_SUPPLYLINE;		Outtake = numActiveHoses*OUTTAKE_HOSE+numActiveCannons*OUTTAKE_CANNON;		if (veh.GetID() == v.GetID())		{			Engine01Level = Engine01Level+Intake-Outtake;			if (Engine01Level < 20)				veh.AssignCommand("DummyEmptyTank");			if (Engine01Level > ELT)				Engine01Level = ELT;			else if (Engine01Level < 0)				Engine01Level = 0;		}		if (veh.HasCommand("DummyEmptyTank"))		{			PersonList Pconnected(ROLE_SQUAD);			for(int k = 0; k < Pconnected.GetNumPersons(); k++)			{				if (Pconnected.GetPerson(k)->GetEquipment() == EQUIP_FIREHOSE && Pconnected.GetPerson(k)->GetType() == ACTOR_PERSON && Pconnected.GetPerson(k)->GetFirehoseID() != 0 && !Pconnected.GetPerson(k)->IsFlagSet(OF_HIDDEN))				{					Vector TargetPos;					GameObject Phydrant = Pconnected.GetPerson(k)->GetHydrant();					if (Phydrant.GetID() == veh.GetID())					{						Person p(Pconnected.GetPerson(k));						if ((veh.GetID() && Engine01Level < 20))						{								if (p.IsCommandEnabled("Extinguish"))							{								p.EnableCommand("Extinguish", false);								p.EnableCommand("Cool", false);								p.EnableAutoTarget(false);								p.ClearActions();								p.PushActionWait(ACTION_NEWLIST, 2.f);							}						} else						{							p.EnableCommand("Extinguish", true);							p.EnableCommand("Cool", true);							p.EnableAutoTarget(true);						}					}				}			}			if (veh.HasCommand("VcmdWaterSwitch") && veh.IsCurrentAnimation("activate"))			{				GameObjectList canlist = Game::GetGameObjectsWithPrefix("engine_water_cannon");				for(int j = 0; j < canlist.GetNumObjects(); j++)				{					Vehicle can = canlist.GetObject(j);					if (can.GetUserData() == veh.GetID() && ((veh.GetID() && Engine01Level > 20)))					{						can.EnableAutoTarget(true);					} else					{						can.EnableAutoTarget(false);						can.ClearActions();						can.PushActionWait(ACTION_NEWLIST, 2.f);						System::Log("Disable cannon");					}				}			}			if (veh.GetID() && !Engine01Empty)			{				Engine01Empty = true;				Game::ShowHelpTextWindow("Water tank of Local Fire Truck is empty!");			}			if ((veh.GetID() && Engine01Level > 20))			{				veh.RemoveCommand("DummyEmptyTank");				if (veh.HasCommand("Extinguish"))					veh.EnableCommand("Extinguish", true);				if (veh.HasCommand("Cool"))					veh.EnableCommand("Cool", true);				if (veh.GetID() && Engine01Empty)					Engine01Empty = false;			} else			{				if (veh.HasCommand("Extinguish"))					veh.EnableCommand("Extinguish", false);				if (veh.HasCommand("Cool"))					veh.EnableCommand("Cool", false);			}		}	}};
Edited by NathanDollinger
0

Share this post


Link to post
Share on other sites

Surely you could rename the mission script to 'fp_freeplay' and it would hopefully work in freeplay right?

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now