PDA

View Full Version : [Script] Changing Air


FG28_Kodiak
09-28-2011, 09:45 AM
At the moment i playing around with the new communication menu system.
Maingoal is making a dynamic menu depending on the current situation.
So i created this script for myself. With it the player can choose his plane via
4.Mission -> 1. Change Airplane
after this the player gets a list of the available Airgroups and then the planes for the selected Airgroup.
At the moment its on a early stage, so there a things i will add in future.
like:
- Menu only available on ground.
- Menu only showing the free planes (at the moment it shows all, Ki only planes also)
- Menu only showing planes available on Airfield.
etc.

So here it is

using System;
using System.Text;
using System.Collections.Generic;
using maddox.game;
using maddox.game.world;


public class Mission : AMission
{

private Dictionary<Player, int> PlayerAirgroupIndex = new Dictionary<Player, int>();

internal string ParseAirgroupName(string AirgroupName)
{
string[] tempString = null;
string parsedName="";
tempString = AirgroupName.Split(':','.');

if (tempString[1].StartsWith("BoB_LW_"))
{
StringBuilder b = new StringBuilder(tempString[1]);
parsedName = b.Replace("BoB_LW_", "").ToString();

if(parsedName.EndsWith("_I"))
parsedName = "I./" + b.Replace("_I", "").ToString();
else if (parsedName.EndsWith("_II"))
parsedName = "II./" + b.Replace("_II", "").ToString();
else if (parsedName.EndsWith("_III"))
parsedName = "III./" + b.Replace("_III", "").ToString();
else if (parsedName.EndsWith("_IV"))
parsedName = "IV./" + b.Replace("_IV", "").ToString();
else if (parsedName.EndsWith("_V"))
parsedName = "V./" + b.Replace("_V", "").ToString();
else if (parsedName.EndsWith("_Stab"))
parsedName = "Stab./" + b.Replace("_Stab", "").ToString();

if (tempString[2].StartsWith("0"))
{
if (!parsedName.StartsWith("Stab"))
parsedName += ": Stabstaffel";
}
else if (tempString[2].StartsWith("1"))
parsedName += ": 1.Staffel";
else if (tempString[2].StartsWith("2"))
parsedName += ": 2.Staffel";
else if (tempString[2].StartsWith("3"))
parsedName += ": 3.Staffel";
else if (tempString[2].StartsWith("4"))
parsedName += ": 4.Staffel";
else parsedName += ": Unknown";
}
else if (tempString[1].StartsWith("BoB_RAF_"))
{
StringBuilder b = new StringBuilder(tempString[1]);

if (tempString[1].StartsWith("BoB_RAF_F_FatCat"))
parsedName = b.Replace("BoB_RAF_F_", "(F) ").ToString();
else if (tempString[1].StartsWith("BoB_RAF_F_"))
parsedName = b.Replace("BoB_RAF_F_", "(F) No. ").ToString();
else if (tempString[1].StartsWith("BoB_RAF_B_"))
parsedName = b.Replace("BoB_RAF_B_", "(B) No. ").ToString();
if (parsedName.EndsWith("_Early"))
parsedName = b.Replace("_Early", "").ToString();
else if (parsedName.EndsWith("_Late"))
parsedName = b.Replace("_Late", "").ToString();
if (parsedName.EndsWith("Sqn"))
parsedName = b.Replace("Sqn", ".Sqn").ToString();
else if (parsedName.EndsWith("_PL"))
parsedName = b.Replace("_PL", ".Sqn (PL)").ToString();
else if (parsedName.EndsWith("_CZ"))
parsedName = b.Replace("_CZ", ".Sqn (CZ)").ToString();
else if (parsedName.EndsWith("_RCAF"))
parsedName = b.Replace("_RCAF", ".Sqn RCAF").ToString();

if (tempString[2].StartsWith("0"))
parsedName += ": 1";
else if (tempString[2].StartsWith("1"))
parsedName += ": 2";
else if (tempString[2].StartsWith("2"))
parsedName += ": 3";
else if (tempString[2].StartsWith("3"))
parsedName += ": 4";
else parsedName += ": Unknown";
}

return parsedName;
}


public string[] GetAvailableAirgroups(Player player)
{
AiAirGroup[] ownAG = GamePlay.gpAirGroups(player.Army());
List<string> tempAG = new List<string>();

if (ownAG != null)
{
foreach (AiAirGroup ag in ownAG)
{
tempAG.Add(ParseAirgroupName(ag.Name()));
}

}
return tempAG.ToArray();
}


public string[] GetAvailablePlanes(Player player, AiAirGroup airgroup)
{
AiActor[] result = null;

List<string> Planes = new List<string>();

if (airgroup != null)
{
result = airgroup.GetItems();
if (result != null)
{
foreach (AiActor actor in result)
{
//Planes.Add(actor.Name());
StringBuilder b = new StringBuilder((actor as AiAircraft).InternalTypeName());

b.Replace("bob:Aircraft.", "");
Planes.Add(b + " --> " + (actor as AiAircraft).TypedName());

}
}
}
return Planes.ToArray();
}

public void setAirGroupSubMenu(Player player)
{
List<bool> active = new List<bool>();

foreach (string st in GetAvailableAirgroups(player))
{
active.Add(true);
}

GamePlay.gpSetOrderMissionMenu(player, true, 1, GetAvailableAirgroups(player), active.ToArray());
}


public void setPlaneSubMenu(Player player, AiAirGroup airgroup)
{
List<bool> active = new List<bool>();

foreach (string st in GetAvailablePlanes(player, airgroup))
{
active.Add(true);
}
GamePlay.gpSetOrderMissionMenu(player, true, 2, GetAvailablePlanes(player, airgroup), active.ToArray());
}


public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);

}


private void setMainMenu(Player player)
{
GamePlay.gpSetOrderMissionMenu(player, false, 0, new string[] { "Change Aircraft"}, new bool[] { true});
}

public override void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex)
{
base.OnOrderMissionMenuSelected(player, ID, menuItemIndex);

if (ID == 0) // main menu
{
switch (menuItemIndex)
{
case 1:
setAirGroupSubMenu(player);
break;
case 0:
setMainMenu(player);
break;
}
}
else if (ID == 1)
{ // sub menu

List<AiAirGroup> Groups = new List<AiAirGroup>();

foreach (AiAirGroup ag in GamePlay.gpAirGroups(player.Army()))
{
Groups.Add(ag);
}
if (menuItemIndex == 0) setMainMenu(player);
else
{
PlayerAirgroupIndex.Add(player, menuItemIndex - 1);
setPlaneSubMenu(player, Groups[menuItemIndex - 1]);
}
}
else if (ID == 2)
{ // sub sub menu

List<AiAirGroup> Groups = new List<AiAirGroup>();
List<AiActor> AvailableActor = new List<AiActor>();

int index;

if (menuItemIndex == 0) setMainMenu(player);
else
{
foreach (AiAirGroup ag in GamePlay.gpAirGroups(player.Army()))
{
Groups.Add(ag);
}

if (PlayerAirgroupIndex.TryGetValue(player, out index))
{
foreach (AiActor ac in Groups[PlayerAirgroupIndex[player]].GetItems())
{
AvailableActor.Add(ac);
}
}
player.PlaceEnter(AvailableActor[menuItemIndex-1], 0);
PlayerAirgroupIndex.Remove(player);
setMainMenu(player);
}
}
}

public override void OnPlayerConnected(Player player)
{
setMainMenu(player);
}


public override void Inited()
{
setMainMenu(GamePlay.gpPlayer());
}
}


Critics and suggestions are welcome.


@Mods: can you correct the thread-title please, i am not able to do it by myself (Reason for wrong title was nervous finger near Return Key ;))

Lookaloft
09-29-2011, 06:40 AM
Hi Kodiak,

How can I combine this script with fearlessfrog's Mission Menu and Ambulance script?

Lookaloft.

FG28_Kodiak
09-29-2011, 07:26 AM
you must change the

gpSetOrderMissionMenu(player, true, 1, GetAvailableAirgroups(player), active.ToArray());

GamePlay.gpSetOrderMissionMenu(player, true, 2, GetAvailablePlanes(player, airgroup), active.ToArray());

the values are IDs and must be unique.

then add an Entry
to
private void setMainMenu(Player player)
{
GamePlay.gpSetOrderMissionMenu(player, false, 0, new string[] { "Change Aircraft", "Your entry"}, new bool[] { true, true});
}

and in public override void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex)
you must integrate the new IDs in the if clauses and copy them to the other script.

Lookaloft
09-29-2011, 01:29 PM
Thanks Kodiak. will try