View Full Version : sayMessageTo script help
salmo
03-07-2012, 06:26 AM
Trying to send radio voice (saygroup) messages to each person in a given army. Code has no compile errors but doesn't voice to players? Any help appreciated.
private void sayMessageTo(int army, string msg)
{ // send a speech message to all players in specified army (1=red; 2=blue)
foreach (AiAirGroup g in GamePlay.gpAirGroups(army))
{
bool SaidToGroup = false;
foreach (AiAircraft a in g.candidates())
{
if (SaidToGroup == true) return; // speech already said to group
SaidToGroup = true;
a.SayToGroup(a.AirGroup(), "Received_and_understood_Villa_Leader"); // for testing only
//a.SayToGroup(a.AirGroup(), msg);
}
}
}
FG28_Kodiak
03-07-2012, 06:58 AM
Your error:
if (SaidToGroup == true) return;
you leaving the method, but i think you will only leave the foreach, so you must use:
if (SaidToGroup == true) break;
and g.candidates() returns AiAirGroup[] so you should use GetItems() to get the Actors.
Corrected code:
private void sayMessageTo(int army, string msg)
{ // send a speech message to all players in specified army (1=red; 2=blue)
foreach (AiAirGroup g in GamePlay.gpAirGroups(army))
{
bool SaidToGroup = false;
foreach (AiActor a in g.GetItems())
{
if (SaidToGroup == true) break; // speech already said to group
SaidToGroup = true;
(a as AiAircraft).SayToGroup((a as AiAircraft).AirGroup(), "Ready_for_takeoff"); // for testing only
//a.SayToGroup(a.AirGroup(), msg);
}
}
}
salmo
03-07-2012, 07:06 AM
Thanks Kodiak. I altered the script (below x 2) to eliminate if/break issues. Still doesn't work though :( It's as though the GamePlay.gpAirGroups(army) call is not returning any valid aircraft?
private void sayMessageTo(int army, string msg)
{ // send a speech message to all players in specified army (1=red; 2=blue)
foreach (AiAircraft a in GamePlay.gpAirGroups(army))
{
a.SayToGroup(a.AirGroup(), "Nice_shot"); // for testing
}
}
private void sayMessageTo(int army, string msg)
{ // send a speech message to all players in specified army (1=red; 2=blue)
sendScreenMessageTo(1, "saymessage", null); // testing
foreach (AiAircraft a in GamePlay.gpAirGroups(1))
{
a.SayToGroup(a.AirGroup(), "Nice_shot");
}
foreach (AiAircraft a in GamePlay.gpAirGroups(2))
{
a.SayToGroup(a.AirGroup(), "Nice_shot");
}
}
FG28_Kodiak
03-07-2012, 07:11 AM
try my correction above, it should work.
GamePlay.gpAirGroups(army) returns AiAirGroup[]
AiAirGroup.Candidates returns AiAirGroup[]
You need an Actor (AiAircraft) for saytogroup
so you should use
AiAirGroup.GetItems() returns AiActor[]
you get no error because AiAirGroup is also an Actor, but in these case the wrong one.
salmo
03-07-2012, 07:39 AM
Yes, above example works. Thankyou again Kodiak :)
vBulletin® v3.8.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.