moggel
06-15-2012, 09:03 AM
Hi again,
I'm currently fiddling with the mission menu and most if what I need works fine but I have a couple of questions:
1. Is there a way to "persist" a player's menu state?
2. How do I close the menu (from code)?
Guess the first question needs some explaining: If I call the gpSetOrderMissionMenu() method the whole menu seems to be replaced. I assume I'd need to make sure any state related to the pilot needs to be tracked by my own script but, before I spend time writing that code, is there any support for this built in?
The seconds question is hopefully a bit clearer: When the pilot selects one of the options I've presented to him/her the menu should disappear. I've tried sending in empty arrays and null values to the gpSetOrderMissionMenu() method but that actually makes the whole sim take a dive.
Thanks,
Mog
moggel
06-16-2012, 02:40 PM
Hm. No replies in two days? Guess I need to try and figure this out myself then ... ;)
hc_wolf
06-16-2012, 11:59 PM
Some of us just busy. Many have decided not to read this forum till the patch comes.
salmo
06-17-2012, 12:13 AM
Construct a pilot-specific mission menu using SetMainMenu & OnOrderMissionMenuSelected calls. Here's an example:
public override void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex)
#region custom menu actions
{
if (ID == 0) // main menu
{
}
if (ID == 2) // blue army mission menu
{
switch (menuItemIndex)
{
case 0:
SetMainMenu(player);
break;
case 1: // Spawn Ju87 flight to Dover
BlueMissionTimer.Restart();
NextBlueMission = m_random.Next(20, 25 + 1);
// blue missions
switch (m_random.Next(1, 2 + 1))
{
case 1: // stuka staffel
#region stuka staffel
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/blue/Ju87_a.mis");
sendScreenMessageTo(2, "Stuka staffel activated", null);
break;
#endregion
case 2: //stuka staffel
#region Stuka staffel
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/blue/Ju87_c.mis");
sendScreenMessageTo(2, "Stuka staffel activated", null);
break;
#endregion
default: // stuka staffel
#region Stuka staffel
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/blue/Ju87_c.mis");
sendScreenMessageTo(2, "Stuka staffel activated", null);
break;
#endregion
}
sayMessageTo(2, "Stukas");
sayMessageTo(2, "Takeoff");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(player.Name() + " ordered 'Spawn Ju87 flight to Dover' flight (OnOrderMissionMenuSelected)" + "\r\n");
Console.ResetColor();
Timeout(15 * 60, () => // reset menu in 15 minutes
{
SetMainMenu(player);
}
);
break;
case 2:
#region Heinkel staffel
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/blue/Heinkels_c.mis");
sendScreenMessageTo(2, "Heinkel staffel activated", null);
sayMessageTo(2, "Heinkel");
sayMessageTo(2, "Takeoff");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(player.Name() + " ordered 'Heinkel staffel' flight (OnOrderMissionMenuSelected)" + "\r\n");
Console.ResetColor();
Timeout(15 * 60, () => // reset menu in 15 minutes
{
SetMainMenu(player);
}
);
break;
#endregion
case 3: // Spawn Ju87 flight to Hawkinge
#region Stuka staffel
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/blue/Ju87_hawkinge.mis");
sendScreenMessageTo(2, "Stuka staffel activated", null);
sayMessageTo(2, "Stukas");
sayMessageTo(2, "Takeoff");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(player.Name() + " ordered 'Spawn Ju87 flight to Hawkinge' flight (OnOrderMissionMenuSelected)" + "\r\n");
Console.ResetColor();
Timeout(15 * 60, () => // reset menu in 15 minutes
{
SetMainMenu(player);
}
);
break;
#endregion
case 4: // FW200 recon Dover & Ramsgate
#region FW200 recon
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/blue/FW200_recon.mis");
sendScreenMessageTo(2, "FW200 Condor reconnaissance flight activated", null);
sayMessageTo(2, "Condor");
sayMessageTo(2, "Takeoff");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(player.Name() + " ordered 'FW200 recon Dover & Ramsgate' flight (OnOrderMissionMenuSelected)" + "\r\n");
Console.ResetColor();
Timeout(15 * 60, () => // reset menu in 15 minutes
{
SetMainMenu(player);
}
);
break;
#endregion
case 5: // Dorniers bomb Manston airfield
#region Dorniers bomb Manston airfield
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/blue/Do17_Manston.mis");
sendScreenMessageTo(2, "Dornier staffel activated", null);
sayMessageTo(2, "Dornier");
sayMessageTo(2, "Takeoff");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(player.Name() + " ordered 'Dorniers bomb Manston airfield' flight (OnOrderMissionMenuSelected)" + "\r\n");
Console.ResetColor();
Timeout(15 * 60, () => // reset menu in 15 minutes
{
SetMainMenu(player);
}
);
break;
#endregion
case 6:
PrintIndexAndKeysAndValues(KilledAircraft);
break;
default:
break;
}
}
if (ID == 1) // red army mission menu
{
switch (menuItemIndex)
{
case 1: // spawn hurricane squadron
RedMissionTimer.Restart();
NextRedMission = m_random.Next(20, 25 + 1);
switch (m_random.Next(1, 2 + 1))
{
case 1: // hurricane squadron
#region hurricane squadron
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/red/hurricane_a.mis");
sendScreenMessageTo(1, "Hurricane squadron activated", null);
// sayMessageTo(1, "Prepare_For_Takeoff");
// //sayMessageTo(1, "Dover_Control_this_is_Villa_Leader_We_are_taking_o ff_to_intercept_now");
// Timeout(5, () => // wait 5 seconds
// {
// sayMessageTo(1, "Prepare_For_Takeoff");
// //sayMessageTo(1, "Understood_Villa_Leader_Hostiles_continue_approach ing_your_sector");
// }
// );
break;
#endregion
case 2: // hurricane squadron
#region hurricane squadron
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/red/hurricane_b.mis");
sendScreenMessageTo(1, "Hurricane squadron activated", null);
break;
#endregion
default: // hurricane squadron
#region hurricane squadron
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/red/hurricane_b.mis");
sendScreenMessageTo(1, "Hurricane squadron activated", null);
break;
}
#endregion
//GamePlay.gpPostMissionLoad(CreateAIHurricaneFlight (player));
sayMessageTo(1, "Hurricane");
sayMessageTo(1, "Takeoff");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(player.Name() + " ordered 'hurricane squadron' flight (OnOrderMissionMenuSelected)" + "\r\n");
Console.ResetColor();
Timeout(15 * 60, () => // reset menu in 15 minutes
{
SetMainMenu(player);
}
);
break;
case 2: // send bombers to Calais France
#region Blenheim squadron
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/aus3/red/Blenheim_Mk1.mis");
sendScreenMessageTo(1, "Blenheim squadron activated at Canterbury", null);
sayMessageTo(1, "Blenheims");
sayMessageTo(1, "Takeoff");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(player.Name() + " ordered 'send bombers to Calais France' flight (OnOrderMissionMenuSelected)" + "\r\n");
Console.ResetColor();
Timeout(15 * 60, () => // reset menu in 15 minutes
{
SetMainMenu(player);
}
);
break;
#endregion
case 3:
PrintIndexAndKeysAndValues(KilledAircraft);
break;
case 4:
PrintIndexAndKeysAndValues(KilledAircraft);
break;
case 5: // number of red AI planes in battle
{
AiAircraft a = player as AiAircraft;
if (a != null)
{
sendScreenMessageToPilot(a, " red aircraft in the battle", null);
}
break;
}
case 0:
SetMainMenu(player);
break;
default:
SetMainMenu(player);
break;
}
}
}
#endregion
public void SetMainMenu(Player player)
#region create custom menu for player
{
if (player.Army() == 2) // blue side
GamePlay.gpSetOrderMissionMenu(player, true, 2, new string[]
{
"Order Ju87 staffel to bomb Dover",
"Order Heinkel staffel to bomb Dover",
"Order Ju87 staffel to bomb Hawkinge airfield",
"Order FW200 to recon Dover & Ramsgate",
"Order Dorniers to bomb Marston airfield",
"."
}, new bool[] { true, true, true, true, true, true });
else // red side
GamePlay.gpSetOrderMissionMenu(player, true, 1, new string[]
{
"Order hurricane sqdn to patrol Dover",
"Order blenheim sqdn to bomb Calais",
"."
//"Show number of allied planes in battle"
},
new bool[] { true, true, true });
}
#endregion
FG28_Kodiak
06-17-2012, 03:48 AM
to 2: seems not possible, i am found no trick to do that, also. But feel free to correct me. ;)
vBulletin® v3.8.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.