Fulqrum Publishing Home   |   Register   |   Today Posts   |   Members   |   UserCP   |   Calendar   |   Search   |   FAQ

Go Back   Official Fulqrum Publishing forum > Fulqrum Publishing > IL-2 Sturmovik: Cliffs of Dover > FMB, Mission & Campaign builder Discussions

Reply
 
Thread Tools Display Modes
  #1  
Old 06-11-2012, 01:35 PM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

Code:
GamePlay.gpHUDLogCenter(null, "RAF fly CAP between Calais and Dover", new object[] {});
GamePlay.gpLogServer(null, "RAF fly CAP between Calais and Dover", new object[] {});
GamePlay.gpHUDLogCenter(null, "LW meet a flight of Do17s 5000m over Calais in appr. {0} min.! Escort them", new object[] {});
GamePlay.gpLogServer(null, "LW meet a flight of Do17s 5000m over Calais in appr. {0} min.! Escort them", new object[] {});
Ok first problem, you use null as destination, this means the message goes to all players. First parameter is a array of players the message should go to. So you need an array of all blue and a array of all red players.

So we first want all players:
there are two methods
GamePlay.gpPlayer(), on Singleplayer and player hosted Missions this is the player(host), on Dedicated Servers this is the server (it's usefull you like to write messages in the serverlog without showing it to others, for error messages etc.)
For the other players you need
GamePlay.gpRemotePlayers() this will get you a array with all players connected to the server could be null so you should test for null value (no players) before use it.

So if you want all players create a list and add the players to it:
Code:
List<Player> players = new List<Player>();

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

So now we have all, but we need the reds and the blues, the player object has the Army() method red players are member of the army 1 and blues are army 2.

to get the reds:
Code:
Player[] Reds = players.FindAll(item => item.Army() == 1).ToArray();
to get the blues
Code:
Player[] Blues = players.FindAll(item => item.Army() == 2).ToArray();
so now we have the two groups
before using them we must check if there i min one player in the group
so
Code:
if(Reds.Length > 0)
...
if(Blues.Length > 0)
...
so now we can send the message to the different groups:
Code:
if(Reds.Length > 0)
{
GamePlay.gpHUDLogCenter(Reds, "RAF fly CAP between Calais and Dover", new object[] {});
GamePlay.gpLogServer(Reds, "RAF fly CAP between Calais and Dover", new object[] {});
}

if(Blues.Length > 0)
{
GamePlay.gpHUDLogCenter(Blues, "LW meet a flight of Do17s 5000m over Calais in appr. {0} min.! Escort them", new object[] {});
GamePlay.gpLogServer(Blues, "LW meet a flight of Do17s 5000m over Calais in appr. {0} min.! Escort them", new object[] {});
}

Complete:
Code:
List<Player> players = new List<Player>();

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

Player[] Reds = players.FindAll(item => item.Army() == 1).ToArray();
Player[] Blues = players.FindAll(item => item.Army() == 2).ToArray();

if(Reds.Length > 0)
{
GamePlay.gpHUDLogCenter(Reds, "RAF fly CAP between Calais and Dover", new object[] {});
GamePlay.gpLogServer(Reds, "RAF fly CAP between Calais and Dover", new object[] {});
}

if(Blues.Length > 0)
{
GamePlay.gpHUDLogCenter(Blues, "LW meet a flight of Do17s 5000m over Calais in appr. {0} min.! Escort them", new object[] {});
GamePlay.gpLogServer(Blues, "LW meet a flight of Do17s 5000m over Calais in appr. {0} min.! Escort them", new object[] {});
}
So how to make easy to use methods is on you, learning by doing or searching the forum (there is already a thread about this)
Reply With Quote
  #2  
Old 06-12-2012, 09:45 AM
king1hw king1hw is offline
Approved Member
 
Join Date: Jul 2010
Posts: 64
Default

Now it is coming up continuous and not stopping. how do I set a time for the message to then disappear?
Reply With Quote
  #3  
Old 06-12-2012, 11:18 AM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

Code:
GamePlay.gpHUDLogCenter(null, "Only two seconds visible", new object[]{}, 2);
last Argument in example: time in seconds (double)

ups missunderstood the question:

you must place the messages if used in OnTickGame in a if clause example:
Code:
public override void OnTickGame()
    {
        base.OnTickGame();

        if (Time.tickCounter() % 300 == 0) // every 10 sec.
        {
             // your code here
        }
    }
a tick is 1/30 sec.

Last edited by FG28_Kodiak; 06-12-2012 at 11:25 AM.
Reply With Quote
  #4  
Old 06-12-2012, 01:54 PM
king1hw king1hw is offline
Approved Member
 
Join Date: Jul 2010
Posts: 64
Default

public override void OnTickGame()
{
if (Time.tickCounter() % 864000 == 72000) // 864000 = 8 hour repeat, 72000 = 40 min delay.
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/July1940_v10/Missionen/Mission5.mis");
}

/////////////////////////////////////////////Player Hub and Log Info
if (Time.tickCounter() % 300 == 0) // every 10 sec.
{
List<Player> players = new List<Player>();

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

Player[] Reds = players.FindAll(item => item.Army() == 1).ToArray();
Player[] Blues = players.FindAll(item => item.Army() == 2).ToArray();

if (Reds.Length > 0)
{
GamePlay.gpHUDLogCenter(Reds, "Cover our shipping south of Dover (AV22).", new object[] { });
GamePlay.gpLogServer(Reds, "Cover our shipping south of Dover (AV22).", new object[] { });
}

if (Blues.Length > 0)
{
GamePlay.gpHUDLogCenter(Blues, "LW Bombers leave Calais to raid shipping at appr. 4000m! Fly a fighter sweep over AV22!", new object[] { });
GamePlay.gpLogServer(Blues, "LW Bombers leave Calais to raid shipping at appr. 4000m! Fly a fighter sweep over AV22!", new object[] { });
}
}

So does this look right and thanks again for the help and yes I am really trying to learn this stuff.
Reply With Quote
  #5  
Old 06-25-2012, 03:49 PM
king1hw king1hw is offline
Approved Member
 
Join Date: Jul 2010
Posts: 64
Default does this look rt

public override void OnTickGame()
{
if (Time.tickCounter() % 864000 == 72000) // 864000 = 8 hour repeat, 72000 = 40 min delay.
{
GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/July1940_v10/Missionen/Mission2.mis");
{

List<Player> players = new List<Player>();
if (GamePlay.gpPlayer() != null)
players.Add(GamePlay.gpPlayer());
if (GamePlay.gpRemotePlayers() != null)
players.AddRange(GamePlay.gpRemotePlayers());

Player[] Reds = players.FindAll(item => item.Army() == 1).ToArray();
Player[] Blues = players.FindAll(item => item.Army() == 2).ToArray();

if(Reds.Length > 0)
{
GamePlay.gpHUDLogCenter(Reds, "RAF- Fly CAP between Calais and Dover", new object[]{}, 2);
GamePlay.gpLogServer(Reds, "RAF- Fly CAP between Calais and Dover", new object[] { });

if(Blues.Length > 0)
{
GamePlay.gpHUDLogCenter(null, "LW- Meet a flight of HE111's 5000m over Calais.\n In appr. 10 minutes inot mission! Escort them to Dover!", new object[]{}, 2);
GamePlay.gpLogServer(null, "LW- Meet a flight of HE111's 5000m over Calais.\n In appr. 10 minutes inot mission! Escort them to Dover!", new object[] { });
}
}
Reply With Quote
  #6  
Old 06-25-2012, 04:03 PM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

Corrected:

Code:
public override void OnTickGame()
    {
        if (Time.tickCounter()%864000 == 72000) // 864000 = 8 hour repeat, 72000 = 40 min delay.
        {
            GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/July1940_v10/Missionen/Mission2.mis");
           
            List<Player> players = new List<Player>();
            if (GamePlay.gpPlayer() != null)
                players.Add(GamePlay.gpPlayer());
            if (GamePlay.gpRemotePlayers() != null)
                players.AddRange(GamePlay.gpRemotePlayers());

            Player[] Reds = players.FindAll(item => item.Army() == 1).ToArray();
            Player[] Blues = players.FindAll(item => item.Army() == 2).ToArray();

            if (Reds.Length > 0)
            {
                GamePlay.gpHUDLogCenter(Reds, "RAF- Fly CAP between Calais and Dover", new object[] {}, 2);
                GamePlay.gpLogServer(Reds, "RAF- Fly CAP between Calais and Dover", new object[] {});
            }
            if (Blues.Length > 0)
            {
                GamePlay.gpHUDLogCenter(Blues, "LW- Meet a flight of HE111's 5000m over Calais.\n In appr. 10 minutes inot mission! Escort them to Dover!", new object[] { }, 2);
                GamePlay.gpLogServer(Blues, "LW- Meet a flight of HE111's 5000m over Calais.\n In appr. 10 minutes inot mission! Escort them to Dover!", new object[] { });
            }
        }
    }
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 06:49 AM.


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