Quote:
Originally Posted by FG28_Kodiak
Can i have the complete code, please.
What i see will not work correctly, without some improvements 
|
As you wish!

This is main mission script:
Code:
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission
{
////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////// Abschnitt: Lade zufaellige Reihenfolge eine Submission
int LastMissionLoaded = 0;
double initTime;
public override void OnTickGame()
{
if (Time.tickCounter() % 216000 == 1800) // 1800 = 1min Beginn, wiederholt sich alle 120min
{ // randomly selects 1 of several submissions excluding the recent one
Random RandomIncident = new Random();
int CurrentMissionSelected;
do
CurrentMissionSelected = RandomIncident.Next(1, 4); // Hier ist die zweite Zahl in der Klammer die Anzahl Optionen + 1, du hast 3 Submissionen, also (1, 4)
while (LastMissionLoaded == CurrentMissionSelected);
LastMissionLoaded = CurrentMissionSelected;
switch (CurrentMissionSelected)
{
case 1:
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/July1940/Mid-July1940Submissionen/Mission1.mis"); // hier der Submission A den Pfad korrekt eingeben
GamePlay.gpHUDLogCenter("12th July - Mission No1 tasks set"); // hier Nachricht welche nach laden der Mission kommen soll
initTime = 0.0;
Timeout(initTime += 1800, () => // Hier Zeit (30) in Sekunden eingeben nach welcher die 1te Nachricht kommen soll, nach laden der Mission A
{
GamePlay.gpHUDLogCenter("30minutes into mission"); // Hier Text der 1ten Nachricht
});
Timeout(initTime += 3600, () => // Hier Zeit (60) in Sekunden eingeben nach welcher die 2te Nachricht kommen soll
{
GamePlay.gpHUDLogCenter("60 minutes into mission"); // Hier Text der 2ten Nachricht
});
break;
case 2:
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/July1940/Mid-July1940Submissionen/Mission1.mis"); // hier der Submission B den Pfad korrekt eingeben
GamePlay.gpHUDLogCenter("12th July - Mission No1 tasks set"); // hier Nachricht welche nach laden der Mission kommen soll
initTime = 0.0;
Timeout(initTime += 1800, () => // Hier Zeit (30) in Sekunden eingeben nach welcher die 1te Nachricht kommen soll, nach laden der Mission A
{
GamePlay.gpHUDLogCenter("30minutes into mission"); // Hier Text der 1ten Nachricht
});
Timeout(initTime += 3600, () => // Hier Zeit (60) in Sekunden eingeben nach welcher die 2te Nachricht kommen soll
{
GamePlay.gpHUDLogCenter("60 minutes into mission"); // Hier Text der 2ten Nachricht
});
break;
case 3:
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/July1940/Mid-July1940Submissionen/Mission1.mis"); // hier der Submission C den Pfad korrekt eingeben
GamePlay.gpHUDLogCenter("12th July - Mission No1 tasks set"); // hier Nachricht welche nach laden der Mission kommen soll
initTime = 0.0;
Timeout(initTime += 1800, () => // Hier Zeit (30) in Sekunden eingeben nach welcher die 1te Nachricht kommen soll, nach laden der Mission A
{
GamePlay.gpHUDLogCenter("30minutes into mission"); // Hier Text der 1ten Nachricht
});
Timeout(initTime += 3600, () => // Hier Zeit (60) in Sekunden eingeben nach welcher die 2te Nachricht kommen soll
{
GamePlay.gpHUDLogCenter("60 minutes into mission"); // Hier Text der 2ten Nachricht
});
break;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////Abschnitt: Lade regelmaeßig eine Submission ohne Nachricht
//
if (Time.tickCounter() % 162000 == 36000) // Start nach 20min, Wiederholung nach 1,5h
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/July1940Mid-July1940Submissionen/Intercept1.mis"); // hier der Submission Wiederholung den Pfad korrekt eingeben
}
if (Time.tickCounter() % 216000 == 18000) // Start nach 10min=18000, Wied3erholung nach 2 Stundem 216000=120min
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/July1940/Mid-July1940Submissionen/Intercept2.mis"); // hier der Submission Wiederholung den Pfad korrekt eingeben
}
if (Time.tickCounter() % 129600 == 1800) // Start nach 1min, Wiederholung nach 12h
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/July1940/Mid-July1940Submissionen/Vesseltraffic1.mis"); // hier der Submission Wiederholung den Pfad korrekt eingeben
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
////////////Abschnitt: Events aus Submission werden beruecksichtigt aktiviert
public override void Init(maddox.game.ABattle battle, int missionNumber)
{
base.Init(battle, missionNumber);
MissionNumberListener = -1;
}
//andere Version für Redudanz
public override void OnBattleStarted()
{
base.OnBattleStarted();
//listen to events from all missions.
MissionNumberListener = -1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
////Abschnitt: Verlassene Flieger werden zerstoert/entfernt (Syndicate Server Version)
// destroys aircraft abandoned by a player.
private bool isAiControlledPlane (AiAircraft aircraft)
{
if (aircraft == null)
{
return false;
}
Player [] players = GamePlay.gpRemotePlayers ();
foreach (Player p in players)
{
if (p != null && (p.Place () is AiAircraft) && (p.Place () as AiAircraft) == aircraft)
{
return false;
}
}
return true;
}
private void destroyPlane (AiAircraft aircraft) {
if (aircraft != null) {
aircraft.Destroy ();
}
}
private void explodeFuelTank (AiAircraft aircraft)
{
if (aircraft != null)
{
aircraft.hitNamed (part.NamedDamageTypes.FuelTank0Exploded);
}
}
private void destroyAiControlledPlane (AiAircraft aircraft) {
if (isAiControlledPlane (aircraft)) {
destroyPlane (aircraft);
}
}
private void damageAiControlledPlane (AiActor actor)
{
if (actor == null || !(actor is AiAircraft))
{
return;
}
AiAircraft aircraft = (actor as AiAircraft);
if (!isAiControlledPlane (aircraft)) {
return;
}
if (aircraft == null) {
return;
}
aircraft.hitNamed (part.NamedDamageTypes.ControlsElevatorDisabled);
aircraft.hitNamed (part.NamedDamageTypes.ControlsAileronsDisabled);
aircraft.hitNamed (part.NamedDamageTypes.ControlsRudderDisabled);
aircraft.hitNamed (part.NamedDamageTypes.FuelPumpFailure);
int iNumOfEngines = (aircraft.Group() as AiAirGroup).aircraftEnginesNum();
for (int i = 0; i < iNumOfEngines; i++)
{
aircraft.hitNamed((part.NamedDamageTypes)Enum.Parse(typeof(part.NamedDamageTypes), "Eng" + i.ToString() + "TotalFailure"));
}
/***Timeout (240, () =>
{explodeFuelTank (aircraft);}
);
* ***/
Timeout (150, () =>
{destroyPlane (aircraft);}
);
}
//////////////////////////////////////////
public override void OnPlaceLeave (Player player, AiActor actor, int placeIndex)
{
base.OnPlaceLeave (player, actor, placeIndex);
Timeout (1, () =>
{damageAiControlledPlane (actor);}
);
}
public override void OnAircraftCrashLanded (int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftCrashLanded (missionNumber, shortName, aircraft);
Timeout (150, () =>
{ destroyPlane(aircraft); }
);
}
public override void OnAircraftLanded (int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftLanded(missionNumber, shortName, aircraft);
Timeout(150, () =>
{ destroyPlane(aircraft); }
);
}
}
This is main submission Script:
Code:
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission
{
//-----------------------------------------------------------------------------------------------
//Section 1: Trigger Nachrichten
public override void OnTrigger(int missionNumber, string shortName, bool active)
{
if ("Trigger1R".Equals(shortName) && active) //Trigger 1 Nachricht
{
GamePlay.gpHUDLogCenter("Blue succeeded and sunk 3 red tanker");
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("Trigger2R".Equals(shortName) && active) //Trigger 1 Nachricht
{
GamePlay.gpHUDLogCenter("Red successfully reconnoitered LeHavre");
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("Trigger1B".Equals(shortName) && active) //Trigger 2 Nachricht
{
GamePlay.gpHUDLogCenter("Red succeeded and shot down 20% blue bomber");
GamePlay.gpGetTrigger(shortName).Enable = false;
}
// Trigger Aktionen
base.OnTrigger(missionNumber, shortName, active);
if ("SpawnIntercept1".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("SpawnIntercept1");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("SpawnIntercept2".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("SpawnIntercept2");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("SpawnEscort1".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("SpawnEscort1");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("SpawnEscort2".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("SpawnEscort2");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("SpawnStuka1".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("SpawnStuka1");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("SpawnStuka2".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("SpawnStuka2");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
}
//-----------------------------------------------------------------------------------------------
//Section 3: Briefing
public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);
AiAircraft aircraft = actor as AiAircraft;
if (aircraft != null)
switch (aircraft.Army())
{
case 1:
if (aircraft.Type() == AircraftType.Bomber) //Nachricht fuer rote Spieler beim spawnen
{ GamePlay.gpHUDLogCenter(new Player[] {player},"Fly a recon from Manston -AW25 to LeHavre -AN4"); }
else { GamePlay.gpHUDLogCenter(new Player[] { player }, "Cover our shipping south of Isle of White - AD17"); }
break;
case 2:
if (aircraft.Type() == AircraftType.Bomber) //Nachricht fuer blaue Spieler beim spawnen
{ GamePlay.gpHUDLogCenter(new Player[] { player }, "Attack britisch shipping south of Isle of White - AD17"); }
else { GamePlay.gpHUDLogCenter(new Player[] { player }, "Escort Ju87 from Theville - AC6 to AE15"); }
break;
}
}
public override void OnAircraftTookOff(int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftTookOff(missionNumber, shortName, aircraft);
if (GamePlay.gpPlayer().Place() != aircraft)
return;
switch (aircraft.Army())
{
case 1:
if (aircraft.Type() == AircraftType.Bomber) //Nachricht fuer rote Spieler nach Start
{ GamePlay.gpHUDLogCenter(new Player[] { GamePlay.gpPlayer() }, "Fly a recon from Manston -AW25 to LeHavre -AN4"); }
else { GamePlay.gpHUDLogCenter(new Player[] { GamePlay.gpPlayer() }, "Cover our shipping south of Isle of White - AD17"); }
break;
case 2:
if ((aircraft.Type() == AircraftType.Bomber) || (aircraft.Type() == AircraftType.DiveBomber)) //Nachricht fuer blaue Spieler nach Start
{ GamePlay.gpHUDLogCenter(new Player[] { GamePlay.gpPlayer() }, "Attack britisch shipping south of Isle of White - AD17"); }
else { GamePlay.gpHUDLogCenter(new Player[] { GamePlay.gpPlayer() }, "Escort Ju87 from Theville - AC6 to AE15"); }
break;
}
}
//Section 4 : AI entfernen
public override void OnTickGame()
{
double initTime;
if (Time.tickCounter() % 324000 == 323999) // Nach 180 Minuten werden die AI wieder entfernt
{
foreach (int army in GamePlay.gpArmies())
{
foreach (AiAirGroup group in GamePlay.gpAirGroups(army))
{
if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber)) // Zeile L schen wenn auch AAA entfernt werden soll
{
AiActor[] members = group.GetItems();
for (int i = members.Length - 1; i > -1; i--)
{
(members[i] as AiAircraft).Destroy();
}
}
}
foreach (AiGroundGroup group in GamePlay.gpGroundGroups(army))
{
if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber)) // Zeile L schen wenn auch AAA entfernt werden soll
{
AiActor[] members = group.GetItems();
for (int i = members.Length - 1; i > -1; i--)
{
(members[i] as AiGroundActor).Destroy();
}
}
}
}
}
}
public override void OnActorCreated(int missionNumber, string shortName, AiActor actor)
{
base.OnActorCreated(missionNumber, shortName, actor);
if (actor is AiGroundActor)
{
Timeout(324000, () => { // nach 180minuten werden AI entfernt
if (actor != null)
{
(actor as AiGroundActor).Destroy();
}
});
}
}
}
This is intercept script:
Code:
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission
{
public override void OnTrigger(int missionNumber, string shortName, bool active)
{
base.OnTrigger(missionNumber, shortName, active);
if ("RedIntercept1".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("RedIntercept1");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("RedIntercept2".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("RedIntercept2");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("RedIntercept3".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("RedIntercept3");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("RedIntercept4".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("RedIntercept4");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("RedIntercept5".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("RedIntercept5");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("BlueIntercept1".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("BlueIntercept1");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("BlueIntercept2".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("BlueIntercept2");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("BlueIntercept3a".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("BlueIntercept3a");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("BlueIntercept3b".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("BlueIntercept3b");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("BlueIntercept4a".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("BlueIntercept4a");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("BlueIntercept4b".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("BlueIntercept4b");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("BlueIntercept5a".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("BlueIntercept5a");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
if ("BlueIntercept5b".Equals(shortName) && active)
{
AiAction action = GamePlay.gpGetAction("BlueIntercept5b");
if (action != null)
{
action.Do();
}
GamePlay.gpGetTrigger(shortName).Enable = false;
}
}
public override void OnTickGame()
{
double initTime;
if (Time.tickCounter() % 160200 == 160199) // Nach 89 Minuten werden die AI wieder entfernt, wiederholt sich jede 2h
{
foreach (int army in GamePlay.gpArmies())
{
foreach (AiAirGroup group in GamePlay.gpAirGroups(army))
{
if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber)) // Zeile L schen wenn auch AAA entfernt werden soll
{
AiActor[] members = group.GetItems();
for (int i = members.Length - 1; i > -1; i--)
{
(members[i] as AiAircraft).Destroy();
}
}
}
foreach (AiGroundGroup group in GamePlay.gpGroundGroups(army))
{
if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber)) // Zeile L schen wenn auch AAA entfernt werden soll
{
AiActor[] members = group.GetItems();
for (int i = members.Length - 1; i > -1; i--)
{
(members[i] as AiGroundActor).Destroy();
}
}
}
}
}
}
}
This is patrol script:
Code:
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission
{
public override void OnTickGame()
{
double initTime;
if (Time.tickCounter() % 214200 == 214199) // Nach 119 Minuten werden die AI wieder entfernt, wiederholt sich jede 2h
{
foreach (int army in GamePlay.gpArmies())
{
foreach (AiAirGroup group in GamePlay.gpAirGroups(army))
{
if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber)) // Zeile Löschen wenn auch AAA entfernt werden soll
{
AiActor[] members = group.GetItems();
for (int i = members.Length - 1; i > -1; i--)
{
(members[i] as AiAircraft).Destroy();
}
}
}
foreach (AiGroundGroup group in GamePlay.gpGroundGroups(army))
{
if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber)) // Zeile Löschen wenn auch AAA entfernt werden soll
{
AiActor[] members = group.GetItems();
for (int i = members.Length - 1; i > -1; i--)
{
(members[i] as AiGroundActor).Destroy();
}
}
}
}
}
}
}
And this is script for vesseltraffic:
Code:
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
public class Mission : AMission
{ public override void OnTickGame()
{
double initTime;
if (Time.tickCounter() % 1294800 == 1294799) // Nach 11h59min Minuten werden die AI wieder entfernt, wiederholt sich jede 2h
{
foreach (int army in GamePlay.gpArmies())
{
foreach (AiAirGroup group in GamePlay.gpAirGroups(army))
{
if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber)) // Zeile Löschen wenn auch AAA entfernt werden soll
{
AiActor[] members = group.GetItems();
for (int i = members.Length - 1; i > -1; i--)
{
(members[i] as AiAircraft).Destroy();
}
}
}
foreach (AiGroundGroup group in GamePlay.gpGroundGroups(army))
{
if (ActorName.MissionNumber(group.Name()).Equals(MissionNumber)) // Zeile Löschen wenn auch AAA entfernt werden soll
{
AiActor[] members = group.GetItems();
for (int i = members.Length - 1; i > -1; i--)
{
(members[i] as AiGroundActor).Destroy();
}
}
}
}
}
}
public override void OnActorCreated(int missionNumber, string shortName, AiActor actor)
{
base.OnActorCreated(missionNumber, shortName, actor);
if (actor is AiGroundActor)
{
Timeout(43140, () => { // nach 11h59minuten werden AI entfernt
if (actor != null)
{
(actor as AiGroundActor).Destroy();
}
});
}
}
}
That is not the latest version, in but basically more or less.