![]() |
|
|
|
#1
|
|||
|
|||
|
Won't that leave the AI in control for 60 seconds, rather than having it glide into the ground? Really, the code should be ran instantly, and it should disable AI control instead of simply removing the aircraft--assuming that's currently possible.
|
|
#2
|
|||
|
|||
|
This sample script made for fun disables player controls. Maybe someone can use it to disable AI controls for say 10 minutes before destroying AI
Code:
using System;
using maddox.game;
using maddox.game.world;
public class Mission: maddox.game.AMission
{
/ / Override the method that is invoked when some of the planes will take off ...
public override void OnAircraftTookOff (int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftTookOff (missionNumber, shortName, aircraft); / / call the base method (you never know ...)
if (GamePlay.gpPlayer ()! = null) / / check if we have a player.
{
if (GamePlay.gpPlayer (). Place ()! = null) / / check that the player is sitting somewhere and not hanging out on the rag.
{
if (aircraft.Name (). Equals (GamePlay.gpPlayer (). Place (). Name ())) / / if the plane took off - a player, then ...
{
aircraft.hitNamed (part.NamedDamageTypes.ControlsElevatorDisabled); / / ... disables elevators ...
aircraft.hitNamed (part.NamedDamageTypes.ControlsAileronsDisabled); / / ... aileron ...
aircraft.hitNamed (part.NamedDamageTypes.ControlsRudderDisabled); / / ... rudder.
/ / Have a nice flight!
}
}
}
}
}
Last edited by Ataros; 04-26-2011 at 08:16 AM. |
|
#3
|
||||
|
||||
|
Quote:
//SEND MESSAGE TO PLAYER WHEN THEY HAVE TAKEN OFF public override void OnAircraftTookOff(int missionNumber, string shortName, AiAircraft aircraft) { base.OnAircraftTookOff(missionNumber, shortName, aircraft); GamePlay.gpHUDLogCenter("Takeoff messages start."); //Test/debug Message if (aircraft.Name() == GamePlay.gpPlayer().Place().Name()) // if the plane took off - a player, then ... { GamePlay.gpHUDLogCenter("Switch section reached"); //Test/debug Message switch (aircraft.Army()) { case 1: if ((aircraft.Type() == AircraftType.Bomber) || (aircraft.Type() == AircraftType.DiveBomber)) // if Bomber or Divebomber { GamePlay.gpHUDLogCenter(new Player[] { GamePlay.gpPlayer() }, "Remember, Get Organised! Attack briefed targets!"); } else { GamePlay.gpHUDLogCenter(new Player[] { GamePlay.gpPlayer() }, "Organise Escorts and protect Convoy moving from Beachy Head to the Thames Estuary!"); } break; case 2: if ((aircraft.Type() == AircraftType.Bomber) || (aircraft.Type() == AircraftType.DiveBomber)) // if Bomber or Divebomber { GamePlay.gpHUDLogCenter(new Player[] { GamePlay.gpPlayer() }, "Remember, Get Organised and attack briefed Targets!"); } else { GamePlay.gpHUDLogCenter(new Player[] { GamePlay.gpPlayer() }, "Remember, Get Organised and protect our bombers by Escort or Frei Jagd!"); } break; } } } //end public override void OnAircraftTookOff
__________________
klem 56 Squadron RAF "Firebirds" http://firebirds.2ndtaf.org.uk/ ASUS Sabertooth X58 /i7 950 @ 4GHz / 6Gb DDR3 1600 CAS8 / EVGA GTX570 GPU 1.28Gb superclocked / Crucial 128Gb SSD SATA III 6Gb/s, 355Mb-215Mb Read-Write / 850W PSU Windows 7 64 bit Home Premium / Samsung 22" 226BW @ 1680 x 1050 / TrackIR4 with TrackIR5 software / Saitek X52 Pro & Rudders |
|
#4
|
|||
|
|||
|
Hi,
I have never tried scripting for Clod, but as a C# programer, I'm going to make an educated guess: Try changing this line: if (aircraft.Name() == GamePlay.gpPlayer().Place().Name() ) for this one: if ( aircraft.Name().Equals(GamePlay.gpPlayer().Place().Name()) ) I'm not sure of this because I don't know the types of the objects involved in the comparison (strings?), but try it anyway. (Check this for more info about why: C# Value Type vs Reference Type) Also you should check that aircraft is not null, and that GamePlay.gpPlayer().Place() is not null, for security reasons in order to avoid NullReference exceptions. Last edited by Iku_es; 05-24-2011 at 02:18 PM. |
|
#5
|
||||
|
||||
|
klem,
OnAircraftTookOff(() does not currently work for planes spawned at BirthPlaces. It should work for FMB planes with waypoints. I guess, you get first message showed because you have AI taking off. |
|
#6
|
||||
|
||||
|
Instead of;
Code:
if (aircraft.Name() == GamePlay.gpPlayer().Place().Name()) Code:
if (aircraft == GamePlay.gpPlayer().Place()) |
|
#7
|
||||
|
||||
|
Quote:
It was for MP and for a BirthPlace so a double fail btw I had it report aircraft.Name() and GamePlay.gpPlayer().Place().Name() and they were the same string so 'If == ' should have worked ok.
__________________
klem 56 Squadron RAF "Firebirds" http://firebirds.2ndtaf.org.uk/ ASUS Sabertooth X58 /i7 950 @ 4GHz / 6Gb DDR3 1600 CAS8 / EVGA GTX570 GPU 1.28Gb superclocked / Crucial 128Gb SSD SATA III 6Gb/s, 355Mb-215Mb Read-Write / 850W PSU Windows 7 64 bit Home Premium / Samsung 22" 226BW @ 1680 x 1050 / TrackIR4 with TrackIR5 software / Saitek X52 Pro & Rudders |
|
#8
|
||||
|
||||
|
Quote:
Yes, you can disable the controls, but trimmed plane can happily fly even without working controls. What I want to say: disabling the controls does not guarantee a quick crash. Extending despawn timeout can lead to great clutter, i.e. when player presses "Create" multiple times. |
|
#9
|
||||
|
||||
|
The aim should be, imho, when a player bails from a working plane and he tries to create a new plane, he find himself in that "abandoned" plane, as long as it is still flying
And from a realism point of view, it is realistic that planes with dead crews were hunted and so live planes could escape. I dont think that happens so often to have a felt influence on playability.
__________________
Win 7/64 Ult.; Phenom II X6 1100T; ASUS Crosshair IV; 16 GB DDR3/1600 Corsair; ASUS EAH6950/2GB; Logitech G940 & the usual suspects ![]() |
|
#10
|
||||
|
||||
|
Quote:
Quote:
|
![]() |
| Thread Tools | |
| Display Modes | |
|
|