This new coop script doesn't use the mission menu, instead the commands are typed into the chat console. Thus the dummy aircraft are no longer needed.
Steps:
1) You must add the following line to your conf.ini or confs.ini (if you want to use the dedicated server):
Code:
[rts]
scriptAppDomain = 0
2) Create a new mission or use a existing single player mission
3) Add the following script to the mission:
Code:
using System;
using System.Collections.Generic;
using System.Text;
using maddox.game;
using maddox.game.world;
//$reference parts/core/gamePlay.dll
public class Mission : AMission
{
public override void OnBattleInit()
{
base.OnBattleInit();
if (GamePlay is GameDef)
{
(GamePlay as GameDef).EventChat += new GameDef.Chat(Mission_EventChat);
}
}
void Mission_EventChat(IPlayer from, string msg)
{
if (msg.StartsWith("!help"))
{
Chat("Commands: !aircraft, !select#", from);
}
if (msg.StartsWith("!aircraft") || msg.StartsWith("!select"))
{
List<Tuple<AiAircraft, int>> aircraftPlaces = new List<Tuple<AiAircraft, int>>();
if (GamePlay.gpArmies() != null && GamePlay.gpArmies().Length > 0)
{
foreach (int army in GamePlay.gpArmies())
{
if (GamePlay.gpAirGroups(army) != null && GamePlay.gpAirGroups(army).Length > 0)
{
foreach (AiAirGroup airGroup in GamePlay.gpAirGroups(army))
{
if (airGroup.GetItems() != null && airGroup.GetItems().Length > 0)
{
foreach (AiActor actor in airGroup.GetItems())
{
if (actor is AiAircraft)
{
AiAircraft Aircraft = actor as AiAircraft;
for (int place = 0; place < Aircraft.Places(); place++)
{
aircraftPlaces.Add(new Tuple<AiAircraft, int>(Aircraft, place));
}
}
}
}
}
}
}
}
if (msg.StartsWith("!aircraft"))
{
int i = 0;
foreach (Tuple<AiAircraft, int> aircraftPlace in aircraftPlaces)
{
string playerName = "";
Player player = aircraftPlace.Item1.Player(aircraftPlace.Item2);
if (player != null)
{
playerName = " " + player.Name();
}
Chat("#" + i + ": " + aircraftPlace.Item1.Name() + " " + aircraftPlace.Item1.TypedName() + " " + aircraftPlace.Item1.CrewFunctionPlace(aircraftPlace.Item2) + " " + playerName, from);
i++;
}
}
else if (msg.StartsWith("!select"))
{
msg = msg.Replace("!select", "");
int i = -1;
if (int.TryParse(msg, out i) && i < aircraftPlaces.Count)
{
Tuple<AiAircraft, int> aircraftPlace = aircraftPlaces[i];
if (aircraftPlace.Item1.Player(aircraftPlace.Item2) == null)
{
from.PlaceEnter(aircraftPlace.Item1, aircraftPlace.Item2);
}
else
{
Chat("Place occupied.", from);
}
}
else
{
Chat("Please enter a valid aircraft number, e.g. !select0, !select1, !select2, ...", from);
}
}
}
}
public void Chat(string line, IPlayer to)
{
if (GamePlay is GameDef)
{
(GamePlay as GameDef).gameInterface.CmdExec("chat " + line + " TO " + to.Name());
}
}
}
4) Host the mission. Clients have access to several commands by typing the command into the chat:
!help - this will show the available commands
!aircraft - this will show a list of all available aircraft starting with the id of the aircraft
!select# - this will place the player into the aircraft, replace # with the id of the aircraft, e.g. !select0 will place you into the first aircraft and so on.