Yes i can, but i must it 'translate' it somewhere.
Code:
using System;
using System.Collections;
using System.Collections.Generic;
using maddox.game;
using maddox.game.world;
using maddox.GP;
public class Mission : AMission
{
#region class Menu
internal class Menu
{
internal class MenuEntry
{
internal string MenuName { get; set; }
internal bool active { get; set; }
}
internal List<MenuEntry> menuEntries = new List<MenuEntry>();
public void AddMenuEntry(string description, bool active)
{
MenuEntry NewMenuEntry = new MenuEntry();
NewMenuEntry.MenuName = description;
NewMenuEntry.active = active;
menuEntries.Add(NewMenuEntry);
}
public string[] GetMenuDescriptions()
{
List<string> Descriptions = new List<string>();
menuEntries.ForEach(item =>
{
Descriptions.Add(item.MenuName);
});
return Descriptions.ToArray();
}
public bool[] GetActives()
{
List<bool> Actives = new List<bool>();
menuEntries.ForEach(item =>
{
Actives.Add(item.active);
});
return Actives.ToArray();
}
public bool IsValid()
{
if (menuEntries == null || menuEntries.Count < 1)
return false;
else
return true;
}
}
#endregion
internal class Pilot
{
public Player player { get; set; }
public LocalHeadquarters connectedHeadquarter;
public Pilot(Player player)
{
this.player = player;
}
}
internal List<Pilot> PilotsInGame = new List<Pilot>();
internal class LocalHeadquarters
{
public string Name { get; set; }
public Point2d LocationCoords { get; set; }
public string Callsign { get; set; }
public List<string> AttachedSectors = new List<string>();
public LocalHeadquarters(string name, string callsign, double x, double y)
{
this.Name = name;
this.Callsign = callsign;
this.LocationCoords = new Point2d(x, y);
}
}
List<LocalHeadquarters> Headquarters = new List<LocalHeadquarters>{
{new LocalHeadquarters("Luton", "CallSign24", 100.0, 100.0)},
{new LocalHeadquarters("RadPoe", "CallSign32", 200.0, 200.0)},
{new LocalHeadquarters("Forest", "CallSign15", 300.0, 300.0)},
{new LocalHeadquarters("Bearskin", "CallSign5", 400.0, 400.0)}};
public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);
if (!PilotsInGame.Exists(item => item.player == player))
{
PilotsInGame.Add(new Pilot(player));
}
GamePlay.gpLogServer(null, "Callsign: {0}", new[] { (actor as AiAircraft).CallSign() });
SetMainMenu(player);
}
private void connectToHeadquarterSpeech(AiAircraft aircraft, LocalHeadquarters localHQ)
{
double initTime = 0.0;
aircraft.SayToGroup(aircraft.AirGroup(), "Hello_guys");
Timeout(initTime += 2, () =>
{
aircraft.SayToGroup(aircraft.AirGroup(), "This_is");
});
Timeout(initTime += 2, () =>
{
aircraft.SayToGroup(aircraft.AirGroup(), localHQ.Callsign);
});
// to is missing as ogg
Timeout(initTime += 2, () =>
{
aircraft.SayToGroup(aircraft.AirGroup(), aircraft.CallSign());
});
Timeout(initTime += 2, () =>
{
aircraft.SayToGroup(aircraft.AirGroup(), "leader__");
});
}
public void SetMainMenu(Player player)
{
if (player.Army() == 1) // red Side
GamePlay.gpSetOrderMissionMenu(player, false, 0, new string[] { "Radaroperations" }, new bool[] { true });
else
GamePlay.gpSetOrderMissionMenu(player, false, 0, new string[] { "Not Available" }, new bool[] { true });
}
public void SetRadarMenu(Player player)
{
string headQuarter = "Select Headquarter";
string connectedTo = "";
if (PilotsInGame.Exists(item => item.player == player))
{
int i = PilotsInGame.FindIndex(item => item.player == player);
if (PilotsInGame[i].connectedHeadquarter != null)
connectedTo = string.Format(" (connected: {0})", PilotsInGame[i].connectedHeadquarter.Name);
}
headQuarter += connectedTo;
GamePlay.gpSetOrderMissionMenu(player, true, 100, new string[] { headQuarter, "Get Radar Information" }, new bool[] { true, true });
}
public void SetConnectToHeadquarterMenu(Player player)
{
Menu NewMenu = new Menu();
LocalHeadquarters headQuarter = null;
if (PilotsInGame.Exists(item => item.player == player))
{
int i = PilotsInGame.FindIndex(item => item.player == player);
headQuarter = PilotsInGame[i].connectedHeadquarter;
}
Headquarters.ForEach(item =>
{
if (headQuarter != null && item == headQuarter)
{
NewMenu.AddMenuEntry(item.Name + " *", true);
}
else
NewMenu.AddMenuEntry(item.Name, true);
});
if (NewMenu.IsValid())
GamePlay.gpSetOrderMissionMenu(player, true, 101, NewMenu.GetMenuDescriptions() , NewMenu.GetActives());
else
GamePlay.gpSetOrderMissionMenu(player, true, 101, new string[]{ "Not available" }, new bool[]{true});
}
public void SetHeadQuarter(Player player, int menuItemIndex)
{
if (PilotsInGame.Exists(item => item.player == player))
{
int i = PilotsInGame.FindIndex(item => item.player == player);
PilotsInGame[i].connectedHeadquarter = Headquarters[menuItemIndex-1];
if (player.Place() != null)
connectToHeadquarterSpeech((player.Place() as AiAircraft), PilotsInGame[i].connectedHeadquarter);
}
}
public override void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex)
{
if (ID == 0)
{ // main menu
if (menuItemIndex == 1)
{
SetRadarMenu(player);
}
//if (menuItemIndex == 2)
//{
//}
//if (menuItemIndex == 3)
//{
//}
}
if (ID == 100)
{
//Radar Menu
if (menuItemIndex == 1)
{
SetConnectToHeadquarterMenu(player);
}
if (menuItemIndex == 2)
{
SetMainMenu(player);
}
if (menuItemIndex == 0)
SetMainMenu(player);
}
if (ID == 101)
{
//Radar Menu
if (menuItemIndex == 0)
SetRadarMenu(player);
else
{
SetHeadQuarter(player, menuItemIndex);
SetRadarMenu(player);
}
}
}
}