Official Fulqrum Publishing forum

Official Fulqrum Publishing forum (http://forum.fulqrumpublishing.com/index.php)
-   FMB, Mission & Campaign builder Discussions (http://forum.fulqrumpublishing.com/forumdisplay.php?f=203)
-   -   sayMessageTo script help (http://forum.fulqrumpublishing.com/showthread.php?t=30236)

salmo 03-07-2012 06:26 AM

sayMessageTo script help
 
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.

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 (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:
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?

Code:

        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

        }
    }

Code:

        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 :)


All times are GMT. The time now is 02:35 AM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 2007 Fulqrum Publishing. All rights reserved.