Jump to content

MIssion Scripting Tools (Mist)- enhancing mission scripting Lua


Recommended Posts

I'm trying us dynAdd to add an Mi-24P to escort a convoy. The helo spawns with unit name Escort-2-1 as expected, but the group name is RUSSIA hel 1. The pylons are also empty. When I try to get it's route using mist.getGroupRoute("Escort-2") I get an error.

Can you tell me what's wrong with this code?

		if heloAdded == false then
		
			BASE:E("#####  Helo Info  #####")
			BASE:E("##  Truck Group Data ##")
			local TruckData = mist.getGroupData("Truck")
			BASE:E(TruckData)
			BASE:E("## Helo Info ##")
			local HeloData = mist.getGroupTable("Escort")
			BASE:E(HeloData)
	
			--###### Spawn Escort #####--
			BASE:E("##### Spawn Escort #####")
			local GroupData = mist.getGroupData("Escort", true)
			BASE:E(GroupData)
			
			BASE:E("##### Following Group #####")
			BASE:E(GroupID)		

			--##### Helo Unit Info #####--
			
			local HeloGroupID = mist.getNextGroupId()
			local HeloUnitID  = mist.getNextUnitId()

			local EscortUnits = {
						[1]= {
							['alt']=361.97297275484,
							['alt_type']='BARO',
							['livery_id']='af 440 ovp',
							['skill']='High',
							['ropeLength']=15,
							['speed']=11.669422301483,
							['AddPropAircraft']= {
								['TrackAirTargets']=true,
								['SimplifiedAI']=false,
								['ExhaustScreen']=true,
								['PilotNVG']=true,
								['GunnersAISkill']=90,
								['R60equipment']=true,
								['OperatorNVG']=true,
							},
							['type']='Mi-24P',
							['unitId']=HeloUnitID,
							['psi']=-0.4111427285092,
							['x']=8926.4008762495,
							['y']=74360.971148126,
							['unitName']='Escort-2-1',
							['groupName']='Escort-2',
							['payload']={
								['pylons']={
									[1]={['CLSID']={'2x9M220_Ataka_V'}},
									[2]={['CLSID']={'APU-60-1_R_60M'}},
									[5]={['CLSID']={'APU-60-1_R_60M'}},
									[6]={['CLSID']={'2x9M220_Ataka_V'}},
								},
								['fuel']=1701,
								['flare']=192,
								['ammo_type']=1,
								['chaff']=0,
								['gun']=100,
								['restricted']={},
							},	
							['onboard_num']='016',
							['callsign']='107',
							['heading']=5.1035771188166,
							['point']= {
								['y']=74360.971148126,
								['x']=8926.4008762495,
							},
							['category']='helicopter',
							['country']='russia',
							['groupId']= HeloGroupID,
							['coalition']='red',
							['countryId']=0,
						},
					}


			
			local EscortRoute = {
						[1] = {
							["alt"] = 500,
							["type"] = "TakeOffGroundHot",
							["action"] = "From Ground Area Hot",
							["alt_type"] = "BARO",
							["form"] = "From Ground Area Hot",
							["y"] = 74367.382190126,
							["x"] = 8872.6877408358,
							["speed"] = 41.666666666667,
							["task"] = {
								["id"] = "ComboTask",
								["params"] = {
									["tasks"] = {
										[1] = {	
											["enabled"] = true,
											["key"] = "CAS",
											["id"] = "EngageTargets",
											["number"] = 1,
											["auto"] = true,
											["params"] = {
												["targetTypes"] = {
													[1] = "Helicopters",
													[2] = "Ground Units",
													[3] = "Light armed ships",
												},
												["priority"] = 0,
											},
										},
										[2] = {
											["enabled"] = true,
											["auto"] = false,
											["id"] = "Follow",
											["number"] = 2,
											["params"]= {
												["lastWptIndexFlagChangedManually"] = true,
												["groupId"] = GroupID,
												["lastWptIndex"] = 2,
												["lastWptIndexFlag"] = true,
												["pos"]= {	
													["y"] = 457.2,
													["x"] = -76.2,
													["z"] = 200,
												},
											},
										},	
									}, -- end of ["tasks"]
								}, -- end of ["params"]
							}, -- end of ["task"]
						}, -- end of [1]
					}

			vars = 
			{
			units 		= EscortUnits,
			country 	= 0,
			category 	= 'helicopter',
			route 		= EscortRoute,
			}
			
			mist.dynAdd(vars)
			
			Route = mist.getGroupRoute("Escort-2", true)
			BASE:E("##### Escort-2 Route #####")
			BASE:E(Route)
			heloAdded = true
			BASE:E(heloAdded)
		end
		
	end

I'm using this code after spawning a random convoy, with a random start and destination.

The group ID to follow is the group ID of the last unit in the convoy.


Edited by Death Merchant

[PC] ASUS X570E - Ryzen 9  5950X - RX 6900 XT - 32GB 3600Mhz

Hornet, A-4E-C, Huey, Ka-50, Mi-8, F-15E, F-14

Join us on Death Dealers PvE server.

Link to comment
Share on other sites

12 hours ago, Death Merchant said:

I'm trying us dynAdd to add an Mi-24P to escort a convoy. The helo spawns with unit name Escort-2-1 as expected, but the group name is RUSSIA hel 1. The pylons are also empty. When I try to get it's route using mist.getGroupRoute("Escort-2") I get an error.

Can you tell me what's wrong with this code?

The table passed to mist.dynAdd does not have a groupName or name value. Since that value is required to spawn a group mist will generate a name in that format. The unit's correctly have a name, thus it uses the passed value. 

As for getting the route, that function is setup to only work on groups from the mission editor. Mist doesn't save any route info and there is no scripting function to get a group's active route. What you can do is save it yourself to a table if you want to access it later. 

myRoutes = {} -- declare to access it later. 


--- When you spawn the group do something like this. 
local newGroup = mist.dynAdd(vars)
myRoutes[newGroup.name] = EscortRoute

 

The right man in the wrong place makes all the difference in the world.

Current Projects:  Grayflag ServerScripting Wiki

Useful Links: Mission Scripting Tools MIST-(GitHub) MIST-(Thread)

 SLMOD, Wiki wishlist, Mission Editing Wiki!, Mission Building Forum

Link to comment
Share on other sites

Thanks for the clarification on the dynAdd function. Perhaps you can offer a suggestion on how to accomplish the following:

This part works:
The mission has a list of start and stop zones (CS-*, and CE-*). 
The mission spawns a random number of convoys that start at a random zone and drive to a random zone using coalition.addGroup and mist.groupToRandomZone.

What I'd like to do is spawn a helo tasked with escorting the group along it's route.

Any thoughts?
coalition.addGroup?

Thanks for the help.
DM

[PC] ASUS X570E - Ryzen 9  5950X - RX 6900 XT - 32GB 3600Mhz

Hornet, A-4E-C, Huey, Ka-50, Mi-8, F-15E, F-14

Join us on Death Dealers PvE server.

Link to comment
Share on other sites

Spawn the helo however you want and either embed or push a ground escort task to that group. Probably best to give it a route to go somewhere near the group it needs to escort and then be given the task. 

https://wiki.hoggitworld.com/view/DCS_task_groundEscort

The right man in the wrong place makes all the difference in the world.

Current Projects:  Grayflag ServerScripting Wiki

Useful Links: Mission Scripting Tools MIST-(GitHub) MIST-(Thread)

 SLMOD, Wiki wishlist, Mission Editing Wiki!, Mission Building Forum

Link to comment
Share on other sites

22 hours ago, Grimes said:

Spawn the helo however you want and either embed or push a ground escort task to that group. Probably best to give it a route to go somewhere near the group it needs to escort and then be given the task. 

https://wiki.hoggitworld.com/view/DCS_task_groundEscort

That works beautifully, thanks for the suggestion, but I'm having one problem.

When I spawn using coalition.addGroup() the Mi-24P spawns with empty pylons, even though I have them in the unit table. I'm having trouble finding an example of the format for the table, except for the one here: https://wiki.hoggitworld.com/view/DCS_exam_group_heli

Is there a collection of sample missions/scripts somewhere I can look at?

Thanks for all the help, I really appreciate your time.
DM

[PC] ASUS X570E - Ryzen 9  5950X - RX 6900 XT - 32GB 3600Mhz

Hornet, A-4E-C, Huey, Ka-50, Mi-8, F-15E, F-14

Join us on Death Dealers PvE server.

Link to comment
Share on other sites

  • 3 weeks later...

Have an ability I am looking to implement a feature. I have used lua within DCS but only for export scripts. I am try to re-slot a player in a multiplayer server (I am server owner) during certain triggers. Similar to `lshift + R` in a single player mission (mission restart). Is this a capability MIST or DCS can do natively? If not, any related tools that could help with this?

Link to comment
Share on other sites

17 hours ago, prestonflying said:

Have an ability I am looking to implement a feature. I have used lua within DCS but only for export scripts. I am try to re-slot a player in a multiplayer server (I am server owner) during certain triggers. Similar to `lshift + R` in a single player mission (mission restart). Is this a capability MIST or DCS can do natively? If not, any related tools that could help with this?

https://wiki.hoggitworld.com/view/DCS_func_force_player_slot is the function that can do this. Works in both mission and server lua environments. 

The right man in the wrong place makes all the difference in the world.

Current Projects:  Grayflag ServerScripting Wiki

Useful Links: Mission Scripting Tools MIST-(GitHub) MIST-(Thread)

 SLMOD, Wiki wishlist, Mission Editing Wiki!, Mission Building Forum

Link to comment
Share on other sites

I need some help with  mist.flagFunc.units_in_moving_zones

I am trying to create a simple policing script, which looks like this:

 mist.flagFunc.units_in_moving_zones{ 
   units = {'[blue][planes]'}, 
   zone_units = {'Police-1'}, 
   flag = 3001, 
   radius = 1000, 
   stopflag = 9999, 
   req_num = 4, 
   zone_type = 'sphere', 
   interval = 5, 
 } 



local function main() 
    timer.scheduleFunction(main, {}, timer.getTime() + 2)

if trigger.misc.getUserFlag( '3001' ) == 1 then  
   mist.respawnGroup('Police-2', true)
   trigger.action.outTextForCoalition(coalition.side.BLUE , 'Police 1 success, Police 2 Active' , 10 , false)
end

end 
main()

my issue is, that the Flag (3001) is not triggered.
The Setup is as simple as it gets, an airplane Group and Unit Name is Police-1.
If this works, i want to spawn the next plane within the IF called Police-2.
 

i played around with the ME abilities, and the trigger "unit inside moving zone" works great, but i do not want a unit, but player, or as above blue planes, thats why i switchet to MIST.

Link to comment
Share on other sites

Flag 3000 isn't the same as flag "3001". One is a number and the other is a string. MIST and the scripting engine don't care which you pass, so make sure they are the same. 

The right man in the wrong place makes all the difference in the world.

Current Projects:  Grayflag ServerScripting Wiki

Useful Links: Mission Scripting Tools MIST-(GitHub) MIST-(Thread)

 SLMOD, Wiki wishlist, Mission Editing Wiki!, Mission Building Forum

Link to comment
Share on other sites

5 hours ago, Grimes said:

Flag 3000 isn't the same as flag "3001". One is a number and the other is a string. MIST and the scripting engine don't care which you pass, so make sure they are the same. 

3001 was on purpose 🙂

nvmd

found another post from you, where it is a litte different

function unitinzone1() 
	if trigger.misc.getUserFlag("3101") == 0 then
		if trigger.misc.getUserFlag("3001") > 0 then
		 mist.respawnGroup('Police-2', true)         -- Group Active
		 trigger.action.outTextForCoalition(coalition.side.BLUE , 'Police 1 success, Police 2 Active' , 10 , false)
		 trigger.action.setUserFlag('3101',true)
		end
	end
	
	
	
	
    timer.scheduleFunction(unitinzone1, {}, timer.getTime() + 1) 
end

mist.flagFunc.units_in_moving_zones({  -- create flag func
    units = {'[blue][planes]'}, 
    zone_units = {'Police-1'}, 
    flag = "3001", 
    radius = 1000,
    toggle = true,
}) 

unitinzone1()

as i am Stupid, my spawned unit spawns every cycle of that script again, which i don't want to. So i check 3101 and set it to true at the end, which prevents to run the spawn again.
Now i can stagger the script (which i already did) to spawn more and more which will be triggered by flying within the moving zone.

THX anyway 🙂


Edited by GrafRotz
solution found
Link to comment
Share on other sites

  • 2 months later...

I'm a scripting newb, but I was wondering if there is a way to disable the on screen text displayed for the JTAC Autolaze feature? I'm trying to hide the text message that confirms jtac is targeting and all of the information following it. Would it coincide with?

ctld.JTAC_jtacStatusF10

 


Edited by rwbishUP

 

And I will execute vengeance in anger and fury upon the heathen, such as they have not heard.

                                                                                                                 Micah 5:15

Link to comment
Share on other sites

  • 3 weeks later...

Hi Grimes.

I have been using a mission called CASCAP for years (created by Jinx) and trying to keep it up to date and add some events. But since patch 2.9 I have a problem with the air-to-ground taskings that I can't solve (not a lua expert at all, learning with tries).

That is one example of the spawning script :

function MA_createTask12(zoneName)  -- easy tasking

	
		local unitType
		local NpointH
		local zone = trigger.misc.getZone(zoneName)

		repeat --Find a random spot of LAND within the large AO zone
			unitSpawnZone1 = mist.getRandPointInCircle(zone.point, zone.radius)
			NpointH = land.getHeight(unitSpawnZone1)
			unitSpawnZone = mist.utils.makeVec3(unitSpawnZone1, NpointH)
		until land.getSurfaceType(unitSpawnZone1) == land.SurfaceType.LAND
		
		
		local units = {}
		groupSize = 3 + mist.random(3)
		local i
		for i = 1, groupSize do --Insert a random number (min 1, max 5)of random (selection 14 possible) vehicles into table units{}
					
				local randomNumber = mist.random(14)
			
				if randomNumber == 1 then
					unitType = 'Ural-375 ZU-23'
				elseif randomNumber == 2 then
					unitType = 'ZSU-23-4 Shilka'
				elseif randomNumber == 3 then
					unitType = 'Strela-1 9P31'
				elseif randomNumber == 4 then
					unitType = 'Strela-10M3'
				elseif randomNumber == 5 then
					unitType = 'BTR-80'
				elseif randomNumber == 6 then
					unitType = 'BMD-1'
				elseif randomNumber == 7 then
					unitType = 'BMP-1'
				elseif randomNumber == 8 then
					unitType = 'BMP-2'
				elseif randomNumber == 9 then
					unitType = 'BMP-3'
				elseif randomNumber == 10 then
					unitType = 'BRDM-2'
				elseif randomNumber == 11 then
					unitType = 'T-55'
				elseif randomNumber == 12 then
					unitType = 'T-72B'
				elseif randomNumber == 13 then
					unitType = 'T-80UD'
				elseif randomNumber == 14 then
					unitType = 'T-90'
				end
							
					
				repeat --Place every unit within a 100m radius circle from the spot previously randomly chosen
						unitPosition = mist.getRandPointInCircle(unitSpawnZone, 100)
				until land.getSurfaceType(unitPosition) == land.SurfaceType.LAND
						

				table.insert(units,
				{
					["x"] = unitPosition.x,
					["y"] = unitPosition.y,
					["type"] = unitType,
					["name"] = 'Red Target Group Unit ' .. i,
					["heading"] = 0,
					["playerCanDrive"] = true,
					["skill"] = "Random"					
				})
							
		end
					
		for i = 1, groupSize*3 do --Insert three times as many infantry soldiers as there are vehicles in the group into the table units{}
		
				unitType = 'Soldier AK'
			
				repeat --Place every unit within a 100m radius circle from the spot previously randomly chosen
					unitPosition = mist.getRandPointInCircle(unitSpawnZone, 100)
				until land.getSurfaceType(unitPosition) == land.SurfaceType.LAND
			
				table.insert(units,
					{
						["x"] = unitPosition.x,
						["y"] = unitPosition.y,
						["type"] = unitType,
						["name"] = 'Red Target Group Unit ' .. groupSize+i,
						["heading"] = 0,
						["skill"] = "Random"
					})
		
		end
				
		mist.dynAdd({country = 'RUSSIA', category = 'GROUND_UNIT', name = 'Red Target Group', hidden = false, units = units }) --Create and spawn the group
		
		--Code to notify the clients of the new objective MGRS grid location. A message is displayed, and also added to F10 menu for continuous review
		mgrs = coord.LLtoMGRS(coord.LOtoLL(unitSpawnZone))
		mgrsString = mist.tostringMGRS(mgrs, 3)
		
		lat, lon = coord.LOtoLL(unitSpawnZone)
		llString = mist.tostringLL(lat, lon, 2)
		ll2String = mist.tostringLL(lat, lon, 0, true)
		brString = MA_getBearingRange()
		
		QFE = mist.utils.round((env.mission.weather.qnh * 1.33322) - ((land.getHeight(unitSpawnZone1)/0.3048)/30),2)
		elev = mist.utils.round(land.getHeight(unitSpawnZone1) * 3.28084)
				
		_targetInfoPath = missionCommands.addSubMenu('Target information', _taskingsGroundPath)
		
		missionCommands.addCommand('TARGET: Group of ' .. groupSize .. ' vehicles and infantry.', _targetInfoPath, MA_emptyFunction)
		missionCommands.addCommand('LAT LON: ' .. llString .. '.', _targetInfoPath, MA_emptyFunction)
		missionCommands.addCommand('LAT LON: ' .. ll2String .. '.', _targetInfoPath, MA_emptyFunction)
		missionCommands.addCommand('MGRS/UTM: ' .. mgrsString .. '.', _targetInfoPath, MA_emptyFunction)
		missionCommands.addCommand(brString, _targetInfoPath, MA_emptyFunction)
		missionCommands.addCommand('QFE: '.. QFE .. ' mbar / ' .. elev .. ' feet.', _targetInfoPath, MA_emptyFunction)
		
		_targetMarkersPath = missionCommands.addSubMenu('Target markers', _taskingsGroundPath)
		missionCommands.addCommand('Request smoke on target area', _targetMarkersPath, MA_smokeRequested)
		missionCommands.addCommand('Request illumination flare over target area', _targetMarkersPath, MA_illBombRequested)


		missionCommands.addCommand('Skip current objective', _taskingsGroundPath, MA_skipTask)
		
		MA_out('An enemy group of ' .. groupSize .. ' vehicles and infantry has been located. Consult your F10 radio commands for more information.', 5)
		
		groupAliveCheckTaskID = mist.scheduleFunction(MA_groundGroupAliveCheck,{},timer.getTime()+5)

		local con = Group.getByName('Red Target Group'):getController()
		-- con:setOption(0, 0) --fire at will
		con:setOption(9, 2) --radar on
		
		mist.respawnGroup('JTAC1')
		
		local jtac = Group.getByName('JTAC1')
		local target = Group.getByName('Red Target Group'):getID()
		local Orbit = {
		id = 'Orbit',
		params = {
		pattern = 'Circle',
		point = unitSpawnZone1,
		altitude = 5000
		}    
		}
		jtac:getController():pushTask(Orbit)
	
		local task = { 
		id = 'FAC_EngageGroup', 
		params = { 
		groupId = target,
		weaponType = 2956984318,
		frequency = 252,
		designation = 'Laser',
		datalink = true, 
		}, 
		}
		jtac:getController():pushTask(task)
		
		local SetInvisible = { 
		id = 'SetInvisible', 
		params = { 
		value = true 
		} 
		}
		jtac:getController():setCommand(SetInvisible)
		
		local SetImmortal = { 
		id = 'SetImmortal', 
		params = { 
		value = true 
		} 
		}
		jtac:getController():setCommand(SetImmortal)	
		
		Script = { 
			id = 'CTLD.lua', 
			params = { 
			command = ctld.JTACAutoLase('JTAC1', 1674)
					} 
			}		


end

 

If I skip it using a destroy() function, I can ask a new group just fine.

But if I kill the group and ask a new one, the group spawn but the script ends and the new radio menu with the coordinates isn't generated and the JTAC doesn't spawn. (MA_taskCompleted just rebuilds the F10 radio menu to be able to ask a new tasking) :

function MA_groundGroupAliveCheck()

	local groupName = 'Red Target Group'
	if Group.getByName(groupName) and Group.getByName(groupName):isExist() == true and #Group.getByName(groupName):getUnits() > 0 then
		groupAliveCheckTaskID = mist.scheduleFunction(MA_groundGroupAliveCheck,{},timer.getTime()+5)
	else
		MA_taskCompleted()
	end
	

end

In the DCS log, the error is  "attempt to index local 'avgPosT' (a nil value)".  The line number gives the reference to this part :

function MA_getBearingRange()

		local avgPos = MA_getAvgPos('Red Target Group')
		local ref = mist.utils.makeVec3(mist.DBs.missionData.bullseye.blue, 0)
		
		local vec = {x = avgPos.x - ref.x, y = avgPos.y - ref.y, z = avgPos.z - ref.z}
		local dir = mist.utils.round(mist.utils.toDegree(mist.utils.getDir(vec, ref)), 0)
		local dist = mist.utils.get2DDist(avgPos, ref)
		local distMetric = mist.utils.round(dist/1000, 0)
		local distImperial = mist.utils.round(mist.utils.metersToNM(dist), 0)
		
		dir = string.format('%03d', dir)
		return 'Target area: Bulls ' .. dir .. ' for ' .. distMetric .. 'km/' .. distImperial .. 'nm'


end

This value isn't nil at first spawn, but each time at second spawn when the group is destroyed by a player (and not skipped).

Tried to simply delete the BullsEye reference part but then the JTAC doesn't fly to the group to orbit.

This turns me crazy and I don't know what did change in DCS 2.9 to create this bug.

Sorry for the long post but any help would be appreciated.

 

PS : whole script is attached.

 

 

CASCAP Infinity Georgia West.lua


Edited by Zarma

i9 9900k, 64 Go RAM, RTX 4090, Warthog HOTAS Throttle & Stick, Saitek Combat Rudder, MFD Cougar, Trackir 5 Pro, Multipurpose UFC and Oculus Rift S (when I want some VR),

http://www.twitch.tv/zarma4074 /  https://www.youtube.com/user/Zarma4074 

 

Copy-of-DCS-A-10C-User-Bar-CMR-ConvertImage.jpg

Link to comment
Share on other sites

1. I'm trying to do a basic Respawn of a ground unit and everything works perfectly, except I can't figure out how to 'delay' the respawn by x seconds.

Could anyone please provide me a quick example?

2. Is there a way of de-spawning a unit? i.e. air unit returns to airfield, shuts down engines then de-spawns.

TIA to any MIST geniuses out there.

Toad, Shark, Huey and Mi-8 driver.

 

27" iMac 3.4Ghz i7, 16GB DDR3, 2GB 680MX . Logitech G940 (modded), 2 x crappy Dell 1024x768 monitors for ShKval, ABRIS etc. TrackIR 3, Trackclip Pro.

Link to comment
Share on other sites

7 hours ago, GR00VYJERRY said:

Does anyone know what the latest MIST version is? Some of my scripts stopped working and I am tryng to see if I have the current version.

 

 

3 hours ago, Zyll said:

https://github.com/mrSkortch/MissionScriptingTools/blob/development/mist.lua will always have the most up to date version of the file. Right now the master branch is at the same version. I'm pretty about only updating the development branch. 

  • Like 1

The right man in the wrong place makes all the difference in the world.

Current Projects:  Grayflag ServerScripting Wiki

Useful Links: Mission Scripting Tools MIST-(GitHub) MIST-(Thread)

 SLMOD, Wiki wishlist, Mission Editing Wiki!, Mission Building Forum

Link to comment
Share on other sites

So, i m quite new to DCS scripting.

When i use mist.message.add to create a new message on the top right corner, the message box keeps flickering.

However when i create a message via trigger.action.outText it doesnt flicker.

The thing is, i need to be able to delete the message and replace it every X amounts of time, its for keeping track of stats.

Is the flickering a known issue and is there a solution for it? And if so, is there a way to replace the messages using a trigger action?

Link to comment
Share on other sites

2 hours ago, Zyll said:

If you use trigger.action.outText, set the Clearview boolean to true and it should overwrite your previous message per your needs.

Zyll @ TAW
 

could you elaborate on this a bit more?
I m looking at the DCS Lua docs for trigger.action.outText, and appearently it only takes the text and the delay as parameters
https://www.digitalcombatsimulator.com/en/support/faq/1257/#3307664

Link to comment
Share on other sites

Will the most recent MIST update deal with the broken script of ZoneCommander for Foothold pertaining to the credits that stopped working with the 2.9 update?

 

***Tried the new MIST (4_5_122) and it did not fix it, it is a ZoneCommander lua file issue it looks like.

***Nevermind, I have fixed the ZoneCommander lua myself.


Edited by [Raiders] Archer
Link to comment
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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...