![]() |
#11
|
|||
|
|||
![]() Quote:
__________________
When one engine fails on a two engine bomber, you will always have enough power left to get to the scene of the crash. Get the latest COD Team Fusion patch info HERE |
#12
|
|||
|
|||
![]() Quote:
In this post http://forum.1cpublishing.eu/showthr...338#post342338 is a code example that shows how to read parameters from an aircraft using the "getParameter()" function. However IIRC there is no "setParameter()" function to write a value. Last edited by 41Sqn_Banks; 02-17-2012 at 06:48 AM. |
#13
|
|||
|
|||
![]()
Atag my modifierd version is pretty much as main despawner, just altered when things are triggered by timers.
It will be best to post in separate thread, as there are other stuff I have learned I'd like to share. |
#14
|
|||
|
|||
![]()
As 41Sqn_Banks says there is no way to set parameters for a plane via script. So the only way to simulate RRR is to create a new plane and place the player in it.
I've made a example, it's not complete (i will never finished it, no fan of "RRR" ![]() Code:
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Text.RegularExpressions; using maddox.game; using maddox.game.world; using maddox.GP; public class Mission : AMission { bool RRRinProgress = false; private AiAirport getCurrentAirfield(AiActor actor, double maxdistance) { AiAirport NearestAirfield = null; AiAirport[] airports = GamePlay.gpAirports(); Point3d actorPos = actor.Pos(); if (airports != null) { foreach (AiAirport airport in airports) { if (NearestAirfield != null) { if (NearestAirfield != null) if (NearestAirfield.Pos().distance(ref actorPos) > airport.Pos().distance(ref actorPos)) NearestAirfield = airport; } else NearestAirfield = airport; } } if (NearestAirfield.Pos().distance(ref actorPos) < maxdistance) return NearestAirfield; else return null; } private bool IsGrounded(AiActor actor) { if ((actor as AiAircraft).getParameter(part.ParameterTypes.Z_VelocityTAS, -1) <= 1.0) return true; else return false; } internal bool checkAirfield(AiActor actor, AiAirport airport, double maxdistance) { Point3d ActorPos = actor.Pos(); if (airport.Pos().distance(ref ActorPos) < maxdistance) return true; else return false; } private void CountDown(string Message, string EndMessage, double seconds) { string tmpMessage = Message + " {0}"; double count = 0.0; while (count < seconds) { Timeout(count++, () => { GamePlay.gpHUDLogCenter(null, tmpMessage, new object[] { seconds-- }); }); } Timeout(count, () => { GamePlay.gpHUDLogCenter(null, EndMessage, null); }); } public void SetMainMenu(Player player) { GamePlay.gpSetOrderMissionMenu(player, false, 0, new string[] { "RRR" }, new bool[] { true }); } public void SetRRRMenu(Player player) { if (IsGrounded(player.Place()) && !RRRinProgress ) GamePlay.gpSetOrderMissionMenu(player, false, 10, new string[] { "Refuel, Rearm, Repair current Plane"}, new bool[] { true }); else GamePlay.gpSetOrderMissionMenu(player, false, 11, new string[] { "Not possible" }, new bool[] { false }); } public override void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex) { if (ID == 0) { if (menuItemIndex == 1) { SetRRRMenu(player); } } if (ID == 10) { if (menuItemIndex == 1) { changePlayerPlane(player, 10); SetMainMenu(player); } } if (ID == 11) { //return to main menu SetMainMenu(player); } } //not finished yet - a lot of work to do at the moment only Airgroup, AircraftType and Location is handled internal ISectionFile CreateNewPlaneAtAirfield(AiAirport airport, AiActor actor) { if (actor == null) return null; if (!(actor is AiAircraft)) return null; ISectionFile f = GamePlay.gpCreateSectionFile(); string sect; string key; string value; string[] splittet = (actor as AiAircraft).AirGroup().Name().Split(':'); string airgroupname = splittet[1]; sect = "AirGroups"; key = airgroupname; value = ""; f.add(sect, key, value); sect = airgroupname; f.add(sect, "Flight0", "1"); key = "Class"; value = (actor as AiAircraft).InternalTypeName().Replace("bob:", ""); f.add(sect, key, value); f.add(sect, "Formation", "LINEABREAST"); f.add(sect, "CallSign", "26"); f.add(sect, "Fuel", "100"); f.add(sect, "Weapons", "1 1"); f.add(sect, "SetOnPark", "1"); f.add(sect, "Idle", "1"); f.add(sect, "Skill", "0.3 0.3 0.3 0.3 0.3 0.3 0.3 0.3"); sect = airgroupname + "_Way"; key = "TAKEOFF"; value = airport.Pos().x.ToString(System.Globalization.CultureInfo.InvariantCulture.NumberFormat) + " " + airport.Pos().y.ToString(System.Globalization.CultureInfo.InvariantCulture.NumberFormat) + " 0 0"; f.add(sect, key, value); return f; } public override void OnBattleStarted() { base.OnBattleStarted(); MissionNumberListener = -1; } private void changePlayerPlane(Player player, double seconds) { RRRinProgress = true; CountDown("Rearming/Refueling finished in:", "Finished", seconds); int newMissionNumber = GamePlay.gpNextMissionNumber(); Timeout(seconds, () => { GamePlay.gpPostMissionLoad(CreateNewPlaneAtAirfield(getCurrentAirfield(player.Place(), 700), GamePlay.gpPlayer().Place())); }); string CurrentName = player.Place().Name(); string[] tmpString = CurrentName.Split(':'); string NewActorName = newMissionNumber + ":" + tmpString[1]; Timeout(seconds+1, () => { AiActor NewActor = GamePlay.gpActorByName(NewActorName); if (NewActor != null) player.PlaceEnter(NewActor, 0); AiActor OldActor = GamePlay.gpActorByName(CurrentName); if (OldActor != null) (OldActor as AiAircraft).Destroy(); RRRinProgress = false; }); } public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex) { base.OnPlaceEnter(player, actor, placeIndex); SetMainMenu(player); } } You can start the "RRR-Simulation" with the Mission-Menu TAB->4 Last edited by FG28_Kodiak; 02-21-2012 at 09:20 AM. |
![]() |
|
|