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)
-   -   Hud output depending on side choosen (http://forum.fulqrumpublishing.com/showthread.php?t=26623)

FG28_Kodiak 12-07-2011 02:47 PM

It's not possible.
GamePlay.gpHUDLogCenter(..) doesn't support it, i've tried it too ;).

You can use the timeout command to show one message after another.

Code:

SendScreenMessageTo(1, "Note");

Timeout(5, () =>    // Time in Seconds
{
    SendScreenMessageTo(1, "Press TAB and 4 at ANY time");
});
Timeout(10, () =>   
{
SendScreenMessageTo(1, "Load any submission available in the list");
});

etc.

KDN 12-07-2011 02:57 PM

Thaaaaaaank you!!
I will do just that :)

podvoxx 01-12-2012 10:30 AM

to Kodiak
Hi! I use your script to send messages:

Code:

sendChatMessageTo(-1, "blablabla", new object[] { }); //TEST
sendScreenMessageTo(-1, "blablabla", new object[] { }); //TEST

Code:

private void sendScreenMessageTo(int army, string msg, object[] parms)
    {
        List<Player> Players = new List<Player>();

        //Singleplayer or Dedi Server
        if (GamePlay.gpPlayer() != null)
        {
                if (GamePlay.gpPlayer().Army() == army || army == -1)
                    Players.Add(GamePlay.gpPlayer());
        } // Multiplayer
        if (GamePlay.gpRemotePlayers() != null || GamePlay.gpRemotePlayers().Length > 0)
        {
            foreach (Player p in GamePlay.gpRemotePlayers())
            {
                if (p.Army() == army || army == -1)
                    Players.Add(p);
            }
        }
        if (Players != null && Players.Count > 0)
            GamePlay.gpHUDLogCenter(Players.ToArray(), msg, parms);
    }


    private void sendChatMessageTo(int army, string msg, object[] parms)
    {
        List<Player> Players = new List<Player>();

        //Singleplayer or Dedi Server
        if (GamePlay.gpPlayer() != null)
        {
            if (GamePlay.gpPlayer().Army() == army || army == -1)
                Players.Add(GamePlay.gpPlayer());
        } // Multiplayer
        if (GamePlay.gpRemotePlayers() != null || GamePlay.gpRemotePlayers().Length > 0)
        {
            foreach (Player p in GamePlay.gpRemotePlayers())
            {
                if (p.Army() == army || army == -1)
                    Players.Add(p);
            }
        }
        if (Players != null && Players.Count > 0)
            GamePlay.gpLogServer(Players.ToArray(), msg, parms);
    }

Code:

[21:56:12]        =================================================
[21:56:12]        System.NullReferenceException: Object reference not set to an instance of an object.
[21:56:12]       
[21:56:12]        Server stack trace:
[21:56:12]          at 6UZP66dp5dKAdD5LMYr.F9pJL9dGtcbAt8r8Umh.JwjWWYN9w9(xnKDxkk8wATA33F3hpA , G7xPRi2e9fpuLtHG23a )
[21:56:12]          at 5iyST5gABhh0WhImZtw.4W7PgSgvHpySuqonJno.sp1UnA9jmwb(Player[] , String , Object[] , Double )
[21:56:12]          at 5iyST5gABhh0WhImZtw.4W7PgSgvHpySuqonJno.yEy1eAe2YPQxskLBZIku(Object , Object , Object , Double )
[21:56:12]          at 5iyST5gABhh0WhImZtw.4W7PgSgvHpySuqonJno.d87UnNOmgnm(Player[] , String , Object[] )
[21:56:12]          at pqlnUTF7gnMAoU4L9MP.lm1GgkFoiOOBGu1gmwf.ZnhKPrKgxsgJUIGtmgOK(Object , Object , Object )
[21:56:12]          at pqlnUTF7gnMAoU4L9MP.lm1GgkFoiOOBGu1gmwf.HUDLogCenter(Player[] , String , Object[] )
[21:56:12]          at maddox.game.GameDef.gpHUDLogCenter(Player[] to, String msg, Object[] parms)
[21:56:12]          at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
[21:56:12]          at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
[21:56:12]       
[21:56:12]        Exception rethrown at [0]:
[21:56:12]          at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
[21:56:12]          at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
[21:56:12]          at maddox.game.IGamePlay.gpHUDLogCenter(Player[] to, String msg, Object[] parms)
[21:56:12]          at Mission.sendScreenMessageTo(Int32 army, String msg, Object[] parms)
[21:56:12]          at Mission.OnActorDead(Int32 missionNumber, String shortName, AiActor actor, List`1 damages)
[21:56:12]          at maddox.game.world.Strategy.OnActorDead(Int32 missionNumber, String shortName, AiActor actor, AiDamageInitiator initiator)
[21:56:12]          at maddox.game.ABattle.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[21:56:12]          at maddox.game.world.Strategy.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[21:56:12]          at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
[21:56:12]          at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
[21:56:12]       
[21:56:12]        Exception rethrown at [1]:
[21:56:12]          at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
[21:56:12]          at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
[21:56:12]          at maddox.game.IBattle.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[21:56:12]          at maddox.game.GameDef.eventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[21:56:12]          at RoFTf9069W6jWRmA8PN.U2RoVL0OVdWjVQJ7319.eventGame(GameEventId , Object , Object , Int32 )
[21:56:12]          at NTlYp6NdtgpnKt7wGgO.VvFELvNie2My3mOTesk.WPGBQuHHKI8(GameEventId , Object , Object , Int32 )
[21:56:12]        =================================================

It occurs in the method OnActorDead()
Code:

public void messageTaskComplite(int numberDeadUnit, int taskPrice, int armyTask, string msg)
    {
        sendChatMessageTo(-1, getLocalizedMessage(msg) + "[ {0} ]", new object[] { numberDeadUnit });
        sendScreenMessageTo(-1, getLocalizedMessage(msg), new object[] { });
        if (armyTask == 1)
        {
            sendChatMessageTo(-1, getLocalizedMessage("getPointsRED") + "[ {0} ]", new object[] { taskPrice });
        }
        else if (armyTask == 2)
        {
            sendChatMessageTo(-1, getLocalizedMessage("getPointsBLUE") + "[ {0} ]", new object[] { taskPrice });
        }
    }

Code:

public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages)
        {
                base.OnActorDead(missionNumber, shortName, actor, damages);
        //sendChatMessageTo(-1, actor.ToString(), new object[] { }); //TEST       
        if (actor != null)
        {
            //AiGroundActor STATISTIC
            if (actor is AiGroundActor)
            {
                sendChatMessageTo(-1, "***Plane KILL - AiAircraft:....." + shortName, new object[] { });  //TEST
                    AiGroundActor groundActor = actor as AiGroundActor;
                if (groundActor != null)
                {
                    //sendChatMessageTo(-1, groundActor.ToString(), new object[] { }); //TEST
                    //tasks AiGroundActor DEAD stat
                    switch (missionNumber)
                    {
                        case 1:
                            if (actor.Army() == 2)
                            {                               
                                if (groundActor.Type() == AiGroundActorType.Artillery)
                                {
                                    numberDeadUnit01_1++;
                                    if (numberDeadUnit01_1 == numberCompliteTask01_1)
                                    {
                                        messageTaskComplite(numberDeadUnit01_1, taskPrice01_1, 1, "successMission01_1");                                       
                                        redScore = redScore + taskPrice01_1;
                                        taskStatusArray.SetValue(true, 0);
                                    }
                                }
                                else
                                {
                                    numberDeadUnit01_2++;
                                    if (numberDeadUnit01_2 == numberCompliteTask01_2)
                                    {
                                        messageTaskComplite(numberDeadUnit01_2, taskPrice01_2, 1, "successMission01_2");                                       
                                        redScore = redScore + taskPrice01_2;
                                        taskStatusArray.SetValue(true, 1);
                                    }
                                }
                            }         
                            break;                                     
                    } //switch
                   
            //AiAircraft STATISTIC
            if (actor is AiAircraft)
            {
                sendChatMessageTo(-1, "***Plane KILL - AiAircraft:....." + shortName, new object[] { });  //TEST
                    AiAircraft aircraft = (actor as AiAircraft);
                if (aircraft != null)
                {
                    // Main AiAircraft plane stat
                    if (aircraft.Army() == 1)
                    {
                        numberDeadRedPlanes++;
                        blueScore = blueScore + unitPlanePrice;
                    }
                    else if (aircraft.Army() == 2 && aircraft != null)
                    {
                        numberDeadBluePlanes++;
                        redScore = redScore + unitPlanePrice;
                    }     
                }               
            }           
        }//null
        }

But i have problem on dedi server. On multiplayer and single all works fine. On dedi - HUD message don`t work...
What method do I need to use on the dedi server?

getLocalizedMessage("getPointsRED") turn off(always "en")

FG28_Kodiak 01-12-2012 01:11 PM

Can you test these please, i ve made some rework meanwhile:

Code:

    private void sendScreenMessageTo(int army, string msg, params object[] args)
    {
        List<Player> Consignees = new List<Player>();

        if (GamePlay.gpPlayer() != null)
            Consignees.Add(GamePlay.gpPlayer());
        if (GamePlay.gpRemotePlayers() != null)
            Consignees.AddRange(GamePlay.gpRemotePlayers());

        if (army == -1)
            GamePlay.gpHUDLogCenter(null, msg, args);
        else if (Consignees.Exists(item => item.Army() == army))
            GamePlay.gpHUDLogCenter(Consignees.FindAll(item => item.Army() == army).ToArray(), msg, args);
    }


    private void sendChatMessageTo(int army, string msg, params object[] args)
    {
        List<Player> Consignees = new List<Player>();

        if (GamePlay.gpPlayer() != null)
            Consignees.Add(GamePlay.gpPlayer());
        if (GamePlay.gpRemotePlayers() != null)
            Consignees.AddRange(GamePlay.gpRemotePlayers());

        if (army == -1)
            GamePlay.gpLogServer(null, msg, args);
        else if (Consignees.Exists(item => item.Army() == army))
            GamePlay.gpLogServer(Consignees.FindAll(item => item.Army() == army).ToArray(), msg, args);
    }

you can use it now without "new object[]{...}", simply use your variables.

example
int redpoints =10;
int bluepoints =20;

sendScreenMessageTo(-1, "Red have {0} Points / Blue: {1} Points", redpoints, bluepoints);
or use it without
sendScreenMessageTo(-1, "Welcome to our Server");

podvoxx 01-12-2012 06:09 PM

Quote:

Originally Posted by FG28_Kodiak (Post 378652)
Can you test these please, i ve made some rework meanwhile:

you can use it now without "new object[]{...}", simply use your variables.

Thank you very much for your help! Msg system work fine.


All times are GMT. The time now is 11:43 AM.

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