@ FG28_Kodiak
I am making a simple mission on Steppe map and trying to modify a script by
TheEnlightenedFlorist which sends messages to a particular player in MP onPlaceEnter.
I want to define a new method to do this in 3 languages, but I do not know how to do it correctly. Also I included a multi-engine aircraft into limited list and wonder if the script would kill its engines correctly.
I included my questions into remarks. Would be grateful for any advice. Thank you for all your great help!
Code:
using System;
using System.Collections;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;
using System.Diagnostics;
/**
* Parts of the script were taken from:
*
* Operation Dynamo v2.0
* A multiplayer mission for IL-2 Sturmovik: Cliffs of Dover
* @author TheEnlightenedFlorist
* http://forum.1cpublishing.eu/showthread.php?t=23579&highlight=operation+dynamo
* */
public class Mission : AMission
{
//allowed and currently flying aircraft
int allowed109s = 12;
int current109s = 0;
int allowedSpit2s = 7;
int currentSpit2s = 0;
int allowed110s = 4;
int current110s = 0;
public override void OnBattleStarted()
{
base.OnBattleStarted();
//listen to events from all missions.
MissionNumberListener = -1;
}
// Makes any FMB trigger/action pair work if they have the same name.
//public override void OnTrigger(int missionNumber, string shortName, bool active)
//{
// base.OnTrigger(missionNumber, shortName, active);
// AiAction action = GamePlay.gpGetAction(ActorName.Full(missionNumber, shortName));
// if (action != null)
// action.Do();
//}
public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceEnter(player, actor, placeIndex);
// test
// notAvailableMsg();
if (actor != null && actor is AiAircraft)
{
//check limited aircraft
switch ((actor as AiAircraft).InternalTypeName())
{
case "bob:Aircraft.Bf-109E-4":
{
current109s++;
if (current109s > allowed109s)
{
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.Eng0TotalFailure);
notAvailableMsg(new Player[] { player });
//GamePlay.gpHUDLogCenter(new Player[] { player }, "Aircraft not available! Choose another aircraft.");
}
break;
}
case "bob:Aircraft.SpitfireMkIIa":
{
currentSpit2s++;
if (currentSpit2s > allowedSpit2s)
{
(actor as AiAircraft).hitNamed(part.NamedDamageTypes.Eng0TotalFailure);
notAvailableMsg(new Player[] { player });
//GamePlay.gpHUDLogCenter(new Player[] { player }, "Aircraft not available! Choose another aircraft.");
}
break;
}
case "bob:Aircraft.Bf-110C-7":
{
current110s++;
if (current110s > allowed110s)
{
//(actor as AiAircraft).hitNamed(part.NamedDamageTypes.Eng0TotalFailure); // Is this line for single-engined only? только для одномоторных?
// Will this do for multi-engine?
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"));
}
notAvailableMsg(new Player[] { player });
//GamePlay.gpHUDLogCenter(new Player[] { player }, "Aircraft not available! Choose another aircraft.");
}
break;
}
}
}
}
// Trying to make a new method... Does it look correct?
public void notAvailableMsg(Player player)
{
switch (player.LanguageName())
{
case "de":
GamePlay.gpHUDLogCenter(new Player[] { player }, "Too many aircrafts of this type! Choose another aircraft.");
break; //need translation please
case "ru":
GamePlay.gpHUDLogCenter(new Player[] { player }, "Слишком много самолетов данного типа! Выберите другой самолет.");
break;
default:
GamePlay.gpHUDLogCenter(new Player[] { player }, "Too many aircrafts of this type! Choose another aircraft.");
break;
}
}
public override void OnPlaceLeave(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceLeave(player, actor, placeIndex);
if (actor != null && actor is AiAircraft)
{
//check limited aircraft
switch ((actor as AiAircraft).InternalTypeName())
{
case "bob:Aircraft.Bf-109E-4":
current109s--;
break;
case "bob:Aircraft.SpitfireMkIIa":
currentSpit2s--;
break;
case "bob:Aircraft.Bf-110C-7":
current110s--;
break;
}
}
}