Jump to content

Autonomous CAP and GCI AI fighter script


SNAFU

Recommended Posts

Hi Eno,

 

I just had time for brief look at the parameters you changed.

 

Line 14:

local redCAPzone = 'redcapzone1','redcapzone2'

 

Must be

 

local redCAPzone = 'redcapzone'

 

The scipt adds the number to the string, by defining the number of CAP zones you have, so if you set

 

local numberofredCAPgroups = 2

 

it will automatically add 1 and 2 to the strings. In your version the script looks for triggerzones with the names:

 

'redcapzone11','redcapzone12','redcapzone21','redcapzone22',

 

and cannot find this triggerzones.

 

Same with line 15, just add in the name of the CAP triggerzone without the number 1. In the ME you still have to name the zones 'redcapzone1','redcapzone2', 'bluecapzone1'

but not in the script here just the 'redcapzone' and then define the number of zones you want to use.

 

Should have described this more clearly. And I will make a new example mission, when I get the chance.

 

Deleting the SU-30 in the CAP spawn should be ok, as you edited the randomnumber range too. Don´t know now, if this causes some error in another function, but you will see... ;)

 

You might want to edit the GCI spawn the same way.

  • Like 1

[sIGPIC][/sIGPIC]

 

Unsere Facebook-Seite

Link to comment
Share on other sites

  • Replies 1.1k
  • Created
  • Last Reply

Top Posters In This Topic

Been working on trying to convert this over to P51s and Fw190s but run into some trouble. Possibly I've just been looking at it too long and can't see the wood for the trees. Anyway symptoms I see are all three allied caps spawn and seemingly most of the time either 1 or 3 axis caps spawn. About 50% of the time only the allied groups spawn in. When I add a test P51 flight that starts in enemy territory or crosses the border a cap group will eventually head after it but seem to be very sloppy about vectoring in to the target for a GCI intercept. I've begun adding the flak script to parts of the map as well but don't think this should cause an issue. I'm hoping that SNAFU could have a look at what I've done but if someone else wants to that would be good too. Mission is still very wip and I'm pretty much an lua newbie so please be kind.

 

<edit> some more info. Last test run generated a single FW190 cap group and 3 P51 groups. The debug message was:

 

CAPStatusCheck script hung A-X02t counter 1 red

 

This is in the cap spawn routine so it looks like even though I've defined the number of red cap groups as 3 the loop that spawns a cap group on each iteration is stopping without actually reaching the number of cap groups. The only thing I can think of is that where I've modified the aircraft group "templates" (ie type, skin, payload) I've stuffed one or more of them up and so the script fails when one of the dodgy groups is asked to spawn. Problem is I can't see any difference between templates so don't understand why it doesn't work.

 

Thanks,

Stonehouse

457 dynamic war on the border.miz


Edited by Stonehouse
debug
Link to comment
Share on other sites

Ok I am completely at a loss. It seems no matter what I do that:

 


  • Blue cap spawns correctly according the number of cap groups I specific in the script
  • Red cap only spawns 1 or 2 groups at most no matter what max I give

I've tried a few different things after I could not see a script problem (noting my limited lua experience) like:

 


  • Reducing the number and size of the red cap zones
  • ensuring one of the designated red airfields is in each cap zone in case it made a difference
  • making a test mission and adding fw190s with different skins, opening the mission and checking what was there back to the script to ensure the fw190 template setups for the spawning units are correct - they seem to be.

Any other thoughts?

 

Thanks,

Stonehouse

Link to comment
Share on other sites

Testing version B6. (Im running 1.2.8 Open Beta)

Let me know if you have any new version you want tested.

 

And as always! Keep up the good work!

 

ISSUE 1:

The AI seems to have some problem cruising at 30000 ft. They are going full AB. Maybe 25000 ft would be better.

 

ISSUE 2:

I noticed you changed from BARO to RADAR altitude. Could this be a problem? Flights are going up and down. Not looking very good.

CAPScript.jpg

EDIT: I found the values in the script and changed them from RADIO to BARO.

 

ISSUE 3:

Another issue is that i set CAP flights to 1. But after 30 minutes i got 3 enemy CAP flights in the air. They dont seem aggressive, but still.

 

ISSUE 4:

Flights will not take-off from runway even if following is set:

local spawnmode = "takeoff" 						--must be["parking"/"takeoff"/"air"]	and defines the way the fighters spawn

They spawn in the center of the airfield, already airborne. Must be that the "take off from runway" is not set.


Edited by Rivvern

[sIGPIC][/sIGPIC]

 

We are looking for Swedish members!

http://www.masterarms.se

Link to comment
Share on other sites

@Stonehouse: Sorry, from your description your assumption concerning the breaking CAP script looks reasonable. I cannot help you at the moment. I recommend to switch on the debugging messages and copy the debuggingline with distinctive messages between the syntax lines, where you assume the error, to see in which line the script stops. Then you see the last text message and pinpoint the error, which might be just a missing dot somewhere.

 

@Rivvern: Thanks for the feedback.

 

1. So the ME editor given speed is IAS? But I don´t know if that is related, the AI fuel/Speed management was always beyond my understanding.

 

2. With BARO altitude the AI was reported to go directly into the mountains in some cases, so I switched it to RADIO. I didn´t consider the side effect.

 

3. Line 2457 checks if the CAP is still in its zone after the arrival. Maybe the flight left the zone and was detected as "not on station" and a new flight was spawned. The 1.2 in this line defines the radios of the circle around the triggerzone center as "On station". Maybe this value requires some tuning... but this is only my first thought.

 

4. Ok, I only tested the runway start before I implemented the airborne start. Maybe that broke the runway takeoff. This would need a closer looking. Is the "ramp start" still working?

 

 

Anyhow, I am sorry that I have to discontinue the progress on this script for a while and that I cannot help out at the moment.

 

Please note that I will only be irregularly online for the next 6 months (depending on where I will be) but will be back in autumn/winter.

 

I am taking a break from the life I used to live. :pilotfly:


Edited by SNAFU

[sIGPIC][/sIGPIC]

 

Unsere Facebook-Seite

Link to comment
Share on other sites

4. Ok, I only tested the runway start before I implemented the airborne start. Maybe that broke the runway takeoff. This would need a closer looking. Is the "ramp start" still working?

Nope. Ramp start is bugged also.

 

Anyhow, I am sorry that I have to discontinue the progress on this script for a while and that I cannot help out at the moment.

 

Please note that I will only be irregularly online for the next 6 months (depending on where I will be) but will be back in autumn/winter.

 

I am taking a break from the life I used to live. :pilotfly:

 

Thanks for all work! I think this script is very important for making dynamic and interesting missions. It would be awesome if someone with good scripting knowledge would like to take over the project and continue to polish it.

If someone is willing to continue develop this script. Would that be ok with you SNAFU?

 

I'll continue to spam this thread with issues and ideas. Dont hesitate to ignore me. ;)

[sIGPIC][/sIGPIC]

 

We are looking for Swedish members!

http://www.masterarms.se

Link to comment
Share on other sites

SNAFU,

 

I have a new "request" and I hope you see it and chose to add it, even though you said you wouldn't :)

 

One issue we keep running into is that the CAPs the scripts generates hinders us while using the script in our Very Complete Training Mission.

This wouldn't have been a problem if the (dagn) game would in fact do as it's supposed to and have the "Search Then Engage" function work against human players too (it doesn't) *)

 

So the question is there's any way you could add a Flag Switch?

The way I see this working is that you define a Flag in the Script, example userGCICAPFlag = 666

Then whenever the flag is "true" the script would start generating CAPs, but as soon as it's Off, the script would stop creating new flights.

 

I can see this being done by letting the flag changing the script's taskingintervall to something ridiculous, like 100000 :)

 

*) This is a broken function, but I have already added it in the script myself by changing all occurances of "TargetTypes" to "Fighters". It doesn't work on human players, but it stops the CAPs from chasing helos and the AWACS and tankers.

 

 

Please?

/Quip

Link to comment
Share on other sites

  • 2 weeks later...

Ok I seem to have got my WW2 version working. I found what might be a bug around line 158-159 (of my edited version) where there were two lines identical numberofspawnedandactiveinterceptorgroups['red'] = {} so I changed the second one to be numberofspawnedandactiveinterceptorgroups['blue'] = {}

 

Additionally I found that it seems essential to be careful with the names of your cap zones as it only started to reliably work when I changed the zone names from something like redcapzone1 to redCAPzone1 and also made it match in the script where it must be redCAPzone and blueCAPzone without a number. I think the script may do some string matching somewhere and so the names are important.

 

The above two comments would probably be relevant to the vanilla version of the script and cause it not to work.

 

If the WW2 version tests out ok within the group I fly with I'll post it up. Probably a week or two depending how much chance we get to fly.

 

Cheers,

Stonehouse


Edited by Stonehouse
  • Like 1
Link to comment
Share on other sites

I made some changes and created a new version.

 

DOWNLOAD HERE: MIST3_2_GCI-CAP_b6_1.lua

 

Changelog b6_1:

-changed back from RADIO to BARO due to flights flying silly over mountain areas

-fixed duplicate lines - "numberofspawnedandactiveinterceptorgroups['blue'] = {}" (thanks to stonehouse)

[sIGPIC][/sIGPIC]

 

We are looking for Swedish members!

http://www.masterarms.se

Link to comment
Share on other sites

Not sure - the issue I was seeing was intermittently the red cap forces were not fully spawning and the script would seem to hang at spawnCAP(CAPside) line in CAPStatusCheck with the error:

 

Debug("debuggingmessage CAPStatusCheck: script hung A-Xt02: counter:"..string.format(counter)..CAPside, CAPside)

 

CAPside was red and counter was normally 2 where I was trying to get 4 cap groups to spawn. I think the "t" is a typo as it's different from the other msgs but it's in a message so doesn't matter

 

You would think it would cause issues with the blue side thinking logically as those table entries wouldn't have been initialised as I understand the syntax and unfortunately I've seen my problem happen again late this afternoon when I was testing a flak zone out by adding a blue aircraft to overfly it. I'll try out converting your version from scratch using my existing one as a guide as the seesaw flight path looks really strange with slower more agile WW2 fighters and probably will post mine up in the next couple of days for your interest in case you can spot the cause of my issue and others may want a WW2 version. I don't think I've introduced a problem as I was really just changing the aircraft set and stopping the main plane table build looking for non fixed wing aircraft but you never know.

 

Cheers,

Stonehouse

Link to comment
Share on other sites

Awesome. I have no knowledge what so ever in lua scripting so all i do is reverse engineering.

Main goal is just to keep this project alive since SNAFU havent got time to develop it at the moment.

Feel free to contribute to the list.

 

CURRENT ISSUES VERSION B6_1

 

ISSUE 1:

The AI seems to have some problem cruising at 30000 ft. They are going full AB with high alpha. Maybe 25000 ft would be better.

 

ISSUE 2: (FIXED)

I noticed you changed from BARO to RADAR altitude. Could this be a problem? Flights are going up and down. Not looking very good.

I found the values in the script and changed them from RADIO to BARO.

 

ISSUE 3: (MAYBE FIXED)

Another issue is that i set CAP flights to 1. But after 30 minutes i got 3 enemy CAP flights in the air. They dont seem aggressive, but still.

Maybe fixed with version b6_1, duplicate lines at around line 160. Needs testing

 

 

ISSUE 4:

Flights will not take-off from runway even if following is set:

local spawnmode = "takeoff" 						--must be["parking"/"takeoff"/"air"]	and defines the way the fighters spawn

They spawn in the center of the airfield, already airborne. Must be that the "take off from runway" is not set.

[sIGPIC][/sIGPIC]

 

We are looking for Swedish members!

http://www.masterarms.se

Link to comment
Share on other sites

Sorry I meant to upload the WW2 version days ago but have been caught up with other things. It's based on your version Rivvern and additionally I've randomised the CAP spawn altitude as I noticed that at times several groups spawn at the same place and collide. I've changed things from a constant altitude to be 6500 plus a random amount between 1 and 1000m.

 

I haven't worked on this script since I last posted so it still only works properly about 1 in 3 goes. Usually hangs in the for loop in CAPStatusCheck at the CAPStatusCheck: script hung A-X02t: counter line. I'm debugging the red side as blue always seems to work. No idea why at present. Anyone who wants to use it as is will need to change the skins used for the Blue P51s as they are 3rd party ones and in fact one is unpublished as it's for the squadron I fly with.

 

Cheers,

Stonehouse

GCICAPWW2 (2).lua

Link to comment
Share on other sites

I've been doing analysis & tinkering with the code for this script over the last few weeks on and off and come up with a very basic process flow chart that seems to be right.

I'm starting to think I've maybe found the cause or part of the cause for some of your reported issues Rivvern. For the take off issue I think I remember you reporting that you saw the aircraft spawn in at 300 ft instead of on the ramp or runway. I think this maybe because the altitude is being hardcoded to 300 for waypoint 1 around line 2500 in function spawnCAP and it's possible this was overriding the later altitude setting around line 2670 where the individual aircraft are defined. Not sure but am making some changes anyway to try this idea out.

Likewise the number of cap groups might be getting bypassed in function CAPCheckStatus around line 2200ish where there is a piece of logic that seems to say that if a cap group is on station or intercepting and a variable "waytogo" is greater than 1.2 times the cap zone radius go and spawn another cap group. So it sounds a bit like if you where picking up border violations and your cap zones where small or located a long way from the border it might trigger additional groups to be spawned without regard to the number of groups you specify.

Not sure if I'm understanding the code in this bit however or why it's been done this way so haven't attempted to change things.

 

 

On a different note, can anyone tell me for sure what will happen if a unit attempts to spawn with a unit id that already exists in game?

I have a memory that it will cause the spawning unit to not actually spawn due to a duplicate id but can't remember definitely. It's just that this script assigns unit id's using (mostly) math.random(9999, 99999) so it's possible that some of my problems are that I'm not getting a really random unit id and this is causing me to not get the number of cap groups I expect every time.

 

I can't believe I'm just so unlucky to get a duplicate random number so often so figure that perhaps the random number generator isn't always working properly due to some quirk of the script. If my memory is right it sounds like a possible source of error anyway.

 

Will let you know how it goes.

 

Cheers,

Stonehouse

 

PS the takeoff thing - if I'm right I believe the intercept flights will have the same issue for the same reasons.


Edited by Stonehouse
Link to comment
Share on other sites

Hey Snafu,

 

Nice little script you put together. Quick question for you though, wondering if you are able to set a carrier as a airbase trigger and what do I need to change in the aircraft aspect to have f-14 tomcats used instead of the FA-18 Hornets.

Did see all the info as to the aircraft in the scripts, but haven't the foggiest as to where the info on the pylons used and default weapons used can be found. Also is it played out from right to left in addressing pylon and weapons selection?

Link to comment
Share on other sites

The way I did it for switching it to a ww2 version was to build a little test mission with the aircraft, skins and loadouts I wanted and outside of DCS open the .miz file with 7zip and then open the mission file within it using notepad++ and there you should see the pylons etc and you can update the script using the info.

 

Snafu posted up earlier in the thread that he's going on an extended break so probably won't respond to your question at the moment

Link to comment
Share on other sites

Has anyone found a possible fix for the fps bug yet. When I run the script, my frame rates plunge to 1 or 2 per second after about 2 and a half hours.

I know snafu said this was something that he was experiencing 4 hours in on his tests, but it has made it in usable with any multiplayer missions I put together. Mine are averaging 4 to 5 hours

Link to comment
Share on other sites

Ok I seem to have got somewhere with my code changes. At least the last three or four times in a row that I've started my test mission I've ended up with the correct number of cap groups. They also seem to engage enemies when a border violation takes place. The issue seems to have been that a variable "numberofCAPgroups" was used globally and locally and I think that the value was getting corrupted as a result. Basically I created new vars and substituted these new ones so there should be no scope issues. Mind you for lua scripts I am green as grass so a more experienced scripter probably would have done something much better. I've also added some new stuff so that cap flights spawn at a random altitude taking into account terrain height at the point of spawning and tried to fix a couple of things around spawn locations that I think had logic issues. Also took a stab at fixing the take off from runway issue although my test runs haven't run long enough to give any verdict on whether I've done anything useful or not. I have also used a version of Mist that has been corrected by Ajax to fix an issue reported by ENO with Mist 3.3 and 1.2.8. Please note the attached script is the WW2 version so if you don't want that you'll need to retrofit my changes back into the original although if I get time I will try to do that too soon. I've tagged my changes with a comment line prefixed with XX eg --XX blah blah. Note also that in the attached I've turned on all debugging including the messages that Snafu had commented out so if that causes you issues you will need to turn it off up in the front of the script. No idea if it has done anything towards FPS issues.

 

Anyway give it a test and see how things go.

 

Cheers,

Stonehouse

Mistv3_3a.lua

GCICAPWW2300514 .lua

Link to comment
Share on other sites

  • 4 weeks later...

----------------------------------------------function to spawn CAP
function spawnCAP(color)
   
   local CAPside = color
 [b]  local _definealt = 0[/b]  --XX new variable to hold altitude
 

   if Spawnmode == "parking"
   then
       RNW_type = "TakeOffParking"
       RNW_action = "From Parking Area"
       [b]_definealt = 0[/b] [b]-- ADD THIS SO ITS SET TO 0 IF TAKING OFF[/b]
   elseif spawnmode == "takeoff"
   then
       RNW_type = "TakeOff"
       RNW_action = "From Runway"
       [b]_definealt = 0[/b] [b]-- ADD THIS SO ITS SET TO 0 IF TAKING OFF[/b]

   elseif spawnmode == "air"
   then
       RNW_type = "Turning Point"
       RNW_action = "Turning Point"
[b]        _definealt = 3000[/b] [b]-- SET TO DESIRED AIRBORNE SPAWNHEIGHT[/b]
   end

       CAPPatrolunitstable =    {
                                               [1] = 
                                               {
                                                   ["alt"] = [b]_definealt, -- CHANGE HERE TO NEW VARIABLE[/b]
                                                   ["heading"] = 0,
                                                   ["livery_id"] = CAPplaneskin,
                                                   ["type"] = CAPplanetype,
                                                   ["psi"] = 0,
                                                   ["onboard_num"] = "10",
                                                   ["parking"] = 1,
                                                   ["y"] = actualCAPairfieldposz,
                                                   ["x"] = actualCAPairfieldposx,
                                                   ["name"] =  CAPgroupname.." #1",
                                                   ["payload"] = CAPpayload,
                                                   ["speed"] = 200,
                                                   ["unitId"] =  math.random(9999,99999),
                                                   ["alt_type"] = "RADIO",
                                                   ["skill"] = "Random",
                                               }, -- end of [1]
                                                [2] = 
                                               {
                                                   ["alt"] = [b]_definealt, -- CHANGE HERE TO NEW VARIABLE[/b]
                                                   ["heading"] = 0,
                                                   ["livery_id"] = CAPplaneskin,
                                                   ["type"] = CAPplanetype,
                                                   ["psi"] = 0,
                                                   ["onboard_num"] = "10",
                                                   ["parking"] = 2,
                                                   ["y"] = actualCAPairfieldposz,
                                                   ["x"] = actualCAPairfieldposx+50,
                                                   ["name"] =  CAPgroupname.." #2",
                                                   ["payload"] = CAPpayload,
                                                   ["speed"] = 200,
                                                   ["unitId"] =  math.random(9999,99999),
                                                   ["alt_type"] = "RADIO",
                                                   ["skill"] = "Random",
                                                   },
                               }
   elseif strengthrandomizer == 2
   then
       CAPPatrolunitstable =    {
                                               [1] = 
                                               {
                                                   ["alt"] = [b]_definealt, -- CHANGE HERE TO NEW VARIABLE[/b]
                                                   ["heading"] = 0,
                                                   ["livery_id"] = CAPplaneskin,
                                                   ["type"] = CAPplanetype,
                                                   ["psi"] = 0,
                                                   ["onboard_num"] = "10",
                                                   ["parking"] = 1,
                                                   ["y"] = actualCAPairfieldposz,
                                                   ["x"] = actualCAPairfieldposx,
                                                   ["name"] =  CAPgroupname.." #1",
                                                   ["payload"] = CAPpayload,
                                                   ["speed"] = 200,
                                                   ["unitId"] =  math.random(9999,99999),
                                                   ["alt_type"] = "RADIO",
                                                   ["skill"] = "Random",
                                               }, -- end of [1]
                                                [2] = 
                                               {
                                                   ["alt"] = [b]_definealt, -- CHANGE HERE TO NEW VARIABLE[/b]
                                                   ["heading"] = 0,
                                                   ["livery_id"] = CAPplaneskin,
                                                   ["type"] = CAPplanetype,
                                                   ["psi"] = 0,
                                                   ["onboard_num"] = "10",
                                                   ["parking"] = 2,
                                                   ["y"] = actualCAPairfieldposz,
                                                   ["x"] = actualCAPairfieldposx+50,
                                                   ["name"] =  CAPgroupname.." #2",
                                                   ["payload"] = CAPpayload,
                                                   ["speed"] = 200,
                                                   ["unitId"] =  math.random(9999,99999),
                                                   ["alt_type"] = "RADIO",
                                                   ["skill"] = "Random",
                                                   },
                                               [3] = 
                                               {
                                                   ["alt"] = [b]_definealt, -- CHANGE HERE TO NEW VARIABLE[/b]
                                                   ["heading"] = 0,
                                                   ["livery_id"] = CAPplaneskin,
                                                   ["type"] = CAPplanetype,
                                                   ["psi"] = 0,
                                                   ["onboard_num"] = "10",
                                                   ["parking"] = 3,
                                                   ["y"] = actualCAPairfieldposz+50,
                                                   ["x"] = actualCAPairfieldposx,
                                                   ["name"] =  CAPgroupname.." #3",
                                                   ["payload"] = CAPpayload,
                                                   ["speed"] = 200,
                                                   ["unitId"] =  math.random(9999,99999),
                                                   ["alt_type"] = "RADIO",
                                                   ["skill"] = "Random",
                                               }, -- end of [1]
                                                [4] = 
                                               {
                                                   ["alt"] = [b]_definealt, -- CHANGE HERE TO NEW VARIABLE[/b]
                                                   ["heading"] = 0,
                                                   ["livery_id"] = CAPplaneskin,
                                                   ["type"] = CAPplanetype,
                                                   ["psi"] = 0,
                                                   ["onboard_num"] = "10",
                                                   ["parking"] = 4,
                                                   ["y"] = actualCAPairfieldposz+50,
                                                   ["x"] = actualCAPairfieldposx+50,
                                                   ["name"] =  CAPgroupname.." #4",
                                                   ["payload"] = CAPpayload,
                                                   ["speed"] = 200,
                                                   ["unitId"] =  math.random(9999,99999),
                                                   ["alt_type"] = "RADIO",
                                                   ["skill"] = "Random",
                                                   },
                               }
   end
   
   --Debug("debuggingmessage stuck at spawnCAP point 3: counter:"..string.format(counter).."/ side: "..CAPside, CAPside)
   local CAPdata =     {
                                           ["modulation"] = 0,
                                           ["tasks"] = 
                                           {
                                           }, -- end of ["tasks"]
                                           ["task"] = "CAP",
                                           ["uncontrolled"] = false,
                                           ["route"] = 
                                                   {
                                                   ["points"] = CAPPatrolpointstable,
                                                   }, -- end of ["route"]
                                           ["groupId"] = math.random(10000,99999),
                                           ["hidden"] = false,
                                           ["units"] = CAPPatrolunitstable, 
                                           ["y"] = actualCAPairfieldposz,
                                           ["x"] = actualCAPairfieldposx,
                                           ["name"] =  CAPgroupname,
                                           ["communication"] = true,
                                           ["start_time"] = 0,
                                           ["frequency"] = 124,
                                           }
   coalition.addGroup(CAPcountry, Group.Category.AIRPLANE, CAPdata)
   

   actualCAPtable[CAPside][#actualCAPtable[CAPside]+1] =
                           {
                           groupname = CAPgroupname,
                           group = Group.getByName(CAPgroupname),
                           unit1 = Unit.getByName(CAPgroupname.." #1"),
                           unit1name = CAPgroupname.." #1",
                           unit2 = Unit.getByName(CAPgroupname.." #2"),
                           unit2name = CAPgroupname.." #2",
                           CAPzone = actualCAPzone,
                           status = "enroute to station"
                           }
   actualCAPtableTable = mist.utils.tableShow(actualCAPtable[CAPside])
   Debug(CAPside.." actualCAPtable: " ..actualCAPtableTable, CAPside)

return actualCAPtable[CAPside]         
end

Keep in mind i have an interest in modifying and working on this script further since i need it for my missionfile (which is currently up and running great with some new improvements) I may build a much more sophisticated plane selector so that it can be used to spawn *ANY* kind of plane or to set it into a WW2 mode etc.

 

time will tell... but i think you will find my edit quite helpful.

 

also: I'm a novice too but this is one of the best ways to learn (off of someone elses script) so keep plugging away at it guys.


Edited by =LFC=Chameleon_Silk
Link to comment
Share on other sites

  • Recently Browsing   0 members

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