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
  #11  
Old 05-22-2012, 10:42 AM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

Add the references to the Clodo Assemblies (DLLs) to the project, described here:
http://forum.1cpublishing.eu/showthread.php?t=28997
Reply With Quote
  #12  
Old 05-22-2012, 08:58 PM
Smokeynz Smokeynz is offline
Approved Member
 
Join Date: Apr 2011
Posts: 106
Default

Yes I did that, infact I repeated the process of reloading the assemblies several times.

Doing so removes the errors(red lines under your code above), but when I click "build" nothing happens.

Think I am missing a step somewhere.
Reply With Quote
  #13  
Old 05-23-2012, 10:18 AM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

look at the bottom left corner of the Visual Studio Window, after you start the build.
Reply With Quote
  #14  
Old 05-23-2012, 12:21 PM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

@podvoxx

btw. ive created a translation system, also:

I use a nested Dictionary to store the translation strings and fill it from a XML - File.
In the DLL (threadsafe Singleton Pattern):
Code:
using System;
using System.Collections.Generic;
using System.Xml;

namespace CoD
{
    public sealed class Configuration
    {

        private static volatile Configuration _theOneAndOnly = null;  
        private readonly Dictionary<string, Dictionary<string, Dictionary<string, string>>> _stringPool = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();

        private static object syncRoot = new object(); //nessesary for threadsave Singleton
        const string XmlLanguagenode = "CloDo/LanguageSection";
        private const string DefaultLanguage = "en";


        public static Configuration GetInstance(string filename)
        {
            if (_theOneAndOnly == null)
            {
                lock (syncRoot)
                {
                    if (_theOneAndOnly == null)
                    {
                        _theOneAndOnly = new Configuration(filename);
                    }
                }
            }
            return _theOneAndOnly;
        }


        private Configuration(string filename)
        {
            LoadSettings(filename);
        }


        private XmlDocument LoadXMLFile(string file)
        {
            // Load the xml-file in a xml-document
            XmlDocument xDoc = new XmlDocument();

            try
            {
                xDoc.Load(file);
            }
            catch (System.IO.FileNotFoundException)
            {
                throw new Exception("Xml-File " + file + " not found");
            }
            catch (Exception ex)
            {
                throw new Exception("Error loading " + file + ": " + ex.Message);
            }

            return xDoc;
        }


        private void LoadSettings(string languageFile)
        {
            XmlDocument xDoc = LoadXMLFile(languageFile);

            var xmlNodeList = xDoc.SelectNodes(XmlLanguagenode);
            if (xmlNodeList != null)
                foreach (XmlNode sectionNode in xmlNodeList)
                {

                    var strs = new Dictionary<string, Dictionary<string, string>>();

                    foreach (XmlNode textNode in sectionNode.ChildNodes)
                    {

                        var texts = new Dictionary<string, string>();

                        foreach (XmlNode txt in textNode.ChildNodes)
                        {
                            texts.Add(txt.Name, txt.InnerText);
                        }

                        if (textNode.Attributes != null) strs.Add(textNode.Attributes["key"].Value, texts);
                    }

                    if (sectionNode.Attributes != null) _stringPool.Add(sectionNode.Attributes["name"].Value, strs);
                }

        }

        public string GetString(string section, string key, string language)
        {
            if (_stringPool.Count > 0)
            {
                Dictionary<string, Dictionary<string, string>> strs;

                if (_stringPool.TryGetValue(section, out strs))
                {
                    Dictionary<string, string> texts;

                    if (strs.TryGetValue(key, out texts))
                    {
                        string text;
                        if (texts.TryGetValue(language, out text))
                            return text;
                        if (texts.TryGetValue(DefaultLanguage, out text))
                            return text;
                    }
                }
            }
            return ""; // if nothing is found return a empty string -> modify if a error message is needed. 
        }

        public string GetString(string section, string key)
        {
            return GetString(section, key, DefaultLanguage);
        }
    }
}
in the mis (example
Code:
//$reference parts/core/CoD.dll
using System;
using System.Collections.Generic;
using maddox.game;
using maddox.game.world;
using CoD;

public class Mission : AMission
{

    private static string userdocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    private static string FILE_PATH = userdocpath + @"\1C SoftClub\il-2 sturmovik cliffs of dover\";
    private static string CONFIG_FILE = FILE_PATH + @"missions\tests\Language.xml";


    private Configuration Config = Configuration.GetInstance(CONFIG_FILE);

    enum toTarget
    {
        ChatAndScreen,
        Chat,
        Screen
    }


    private void send(IEnumerable<Player> players, string msgKey, toTarget target, params object[] args)
    {
        if (players == null) return;

        foreach (Player pl in players)
        {
            switch (target)
            {
                case toTarget.ChatAndScreen:
                    GamePlay.gpLogServer(new[] { pl }, Config.GetString("Messages", msgKey, pl.LanguageName()), args);
                    GamePlay.gpHUDLogCenter(new[] { pl }, Config.GetString("Messages", msgKey, pl.LanguageName()), args);
                    break;
                case toTarget.Chat:
                    GamePlay.gpLogServer(new[] { pl }, Config.GetString("Messages", msgKey, pl.LanguageName()), args);
                    break;
                case toTarget.Screen:
                    GamePlay.gpHUDLogCenter(new[] { pl }, Config.GetString("Messages", msgKey, pl.LanguageName()), args);
                    break;
            }
        }
    }


    public void SetMainMenu(Player player)
    {

        if (GamePlay.gpPlayer() != null && player == GamePlay.gpPlayer())
            GamePlay.gpSetOrderMissionMenu(player, false, 0, new string[] { Config.GetString("InGameMenu", "MainMenuItem1", player.LanguageName()), Config.GetString("InGameMenu", "MainMenuItem2", player.LanguageName()), Config.GetString("InGameMenu", "MainMenuItem3", player.LanguageName()) }, new bool[] { true, true, true });
        else
            GamePlay.gpSetOrderMissionMenu(player, false, 0, new string[] { Config.GetString("InGameMenu", "MainMenuItem1", player.LanguageName()), Config.GetString("InGameMenu", "MainMenuItem2", player.LanguageName()) }, new bool[] { true, true });
    }


    public override void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex)
    {


        if (ID == 0)
        { // main menu
            if (menuItemIndex == 1)
            {

            }
            if (menuItemIndex == 2)
            {


            }
            if (menuItemIndex == 3)
            {


            }
        }
        if (ID == 105)
        {
            if (menuItemIndex == 1)
            {

            }
        }
    }


    public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
    {
        base.OnPlaceEnter(player, actor, placeIndex);

        send(new Player[] { player }, "successMission01_1", toTarget.ChatAndScreen);
        send(new Player[] { player }, "successMission01_2", toTarget.Chat);
        send(new Player[] { player }, "successMission02", toTarget.Chat);
        send(new Player[] { player }, "successMission03", toTarget.Chat);
        send(new Player[] { player }, "successMission04", toTarget.Chat);
        send(new Player[] { player }, "successMission05_1", toTarget.Chat);
        send(new Player[] { player }, "successMission05_2", toTarget.Chat);
        send(new Player[] { player }, "successMission05_3", toTarget.Chat);
        send(new Player[] { player }, "successMission06", toTarget.Chat);

        SetMainMenu(player);
    }
}
A example XML-File:
Code:
<?xml version="1.0" encoding="utf-8"?>
<!-- Sample XML - File for Translation -->
<CloDo>
  <LanguageSection name="Messages">
    <Text key="successMission01_1">
      <en>Red side has destroyed blue artillery</en>
      <ru>Команда красных уничтожила артиллерию синих</ru>
      <de>Die rote Seite hat die blaue Artillerie zerstört</de>
    </Text>
    <Text key="successMission01_2">
      <en>Red side has destroyed blue artillery supply</en>
      <ru>Команда красных уничтожила снабжение артиллерии синих</ru>
      <de>Die rote Seite hat den blauen Artillerie Nachschub zerstört</de>
    </Text>
    <Text key="successMission02">
      <en>Red side has destroyed blue column</en>
      <ru>Команда красных уничтожила автоколонну синих</ru>
      <de>Die rote Seite hat blaue Kolonne zerstört</de>
    </Text>
    <Text key="successMission03">
      <en>Red side has destroyed blue reconnaissance aircraft</en>
      <ru>Команда красных уничтожила самолет-разведчик синих</ru>
      <de>Die rote Seite hat blaues Aufklärungsflugzeug abgeschossen</de>
    </Text>
    <Text key="successMission04">
      <en>Blue side has destroyed red column</en>
      <ru>Команда синих уничтожила автоколонну красных</ru>
      <de>Die blaue Seite hat rote Kolonne zerstört</de>
    </Text>
    <Text key="successMission05_1">
      <en>Blue side has destroyed 30% of the convoy of red</en>
      <ru>Команда синих уничтожила 30% конвоя красных</ru>
      <de>Die blaue Seite hat 30% der roten Kolonne zerstört</de>
    </Text>
    <Text key="successMission05_2">
      <en>Blue side has destroyed 60% of the convoy of red</en>
      <ru>Команда синих уничтожила 60% конвоя красных</ru>
      <de>Die blaue Seite hat 60% der roten Kolonne zerstört</de>
    </Text>
    <Text key="successMission05_3">
      <en>Blue side has destroyed 100% of the convoy of red</en>
      <ru>Команда синих уничтожила 100% конвоя красных</ru>
      <de>Die blaue Seite hat 100% der roten Kolonne zerstört</de>
    </Text>
    <Text key="successMission06">
      <en>Blue side has destroyed red tanks</en>
      <ru>Команда синих уничтожила танковую дивизию красных</ru>
      <de>Die blaue Seite hat die roten Panzer zerstört</de>
    </Text>
  </LanguageSection>
  <LanguageSection name="InGameMenu">
    <Text key="MainMenuItem1">
      <de>Flugzeug auswählen</de>
      <en>Plane selection</en>
    </Text>
    <Text key="MainMenuItem2">
      <de>Gruppen Befehle</de>
      <en>Group Orders</en>
    </Text>
    <Text key="MainMenuItem3">
      <de>Hoster Befehle</de>
      <en>Host Orders</en>
    </Text>
  </LanguageSection>
</CloDo>
Advantages you can add new languages simply, if the language is not found a default language is used, in my example the english one (specifie in DLL).

Last edited by FG28_Kodiak; 05-23-2012 at 12:25 PM.
Reply With Quote
  #15  
Old 05-23-2012, 02:58 PM
podvoxx podvoxx is offline
Approved Member
 
Join Date: Feb 2010
Posts: 190
Default

Quote:
Originally Posted by FG28_Kodiak View Post
@podvoxx

btw. ive created a translation system, also:
Big thanks, Kodiak! Now I use Small_bee loc. system
http://www.sukhoi.ru/forum/showthrea...=1#post1765804
Maybe this system will be use in repka comander - http://www.sukhoi.ru/forum/showthread.php?t=75862

About my DLL, it not work
My script:
Code:
//$reference "parts\core\SMP\SMPlocalization.dll"
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
using maddox.GP;
using locfiledll;


public class Mission : AMission
{


    public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
    {
        base.OnPlaceEnter(player, actor, placeIndex);

        localization.ToChatbar(player, "Welcome {0}", player);


    }
}
Path to dll-file: parts\core\SMP\SMPlocalization.dll
My dll-file:
Code:
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Diagnostics;
using maddox.game;
using maddox.game.world;
using maddox.GP;
using part;

namespace locfiledll
{
    
        public static class localization 
        {
            static readonly IGamePlay GamePlay = Strategy.THIS.GamePlay;


            public static void ToChatbar(string msg, params object[] args)
            {
                GamePlay.gpLogServer(null, msg, args);
            }


            public static void ToChatbar(Player player, string msg, params object[] args)
            {
                if (player != null)
                    GamePlay.gpLogServer(new[] { player }, msg, args);
            }


            public static void ToChatbar(int army, string msg, params object[] args)
            {
                var 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);
            }


            public static void ToScreen(string msg, params object[] args)
            {
                GamePlay.gpHUDLogCenter(null, msg, args);
            }


            public static void ToScreen(Player player, string msg, params object[] args)
            {
                if (player != null)
                    GamePlay.gpHUDLogCenter(new[] { player }, msg, args);
            }     

        }
}
After calling OnPlaceEnter method I have this error:
Code:
[18:42:32]	=================================================
[18:42:32]	System.IO.FileNotFoundException: Could not load file or assembly 'SMPlocalization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Не удается найти указанный файл.
[18:42:32]	File name: 'SMPlocalization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
[18:42:32]	
[18:42:32]	Server stack trace: 
[18:42:32]	   at Mission.OnPlaceEnter(Player player, AiActor actor, Int32 placeIndex)
[18:42:32]	   at maddox.game.ABattle.OnPlaceEnter(Player player, AiActor actor, Int32 placeIndex)
[18:42:32]	   at maddox.game.ABattle.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[18:42:32]	   at maddox.game.world.Strategy.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[18:42:32]	   at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
[18:42:32]	   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)
[18:42:32]	
[18:42:32]	Exception rethrown at [0]: 
[18:42:32]	   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
[18:42:32]	   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
[18:42:32]	   at maddox.game.IBattle.OnEventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[18:42:32]	   at maddox.game.GameDef.eventGame(GameEventId eventId, Object eventArg0, Object eventArg1, Int32 eventArgInt)
[18:42:32]	   at QS9s5gXYpyXIbWqUeH5.NEqYCeXQeE9aADb49yZ.LNESqn0gobx(GameEventId , Object , Object , Int32 )
[18:42:32]	
[18:42:32]	WRN: Assembly binding logging is turned OFF.
[18:42:32]	To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
[18:42:32]	Note: There is some performance penalty associated with assembly bind failure logging.
[18:42:32]	To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
[18:42:32]	
[18:42:32]	=================================================

Last edited by podvoxx; 05-23-2012 at 03:09 PM.
Reply With Quote
  #16  
Old 05-23-2012, 03:03 PM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

place your DLL in ..parts\core
and use this:
//$reference parts\core\SMPlocalization.dll

then it should work.
Reply With Quote
  #17  
Old 05-23-2012, 03:11 PM
podvoxx podvoxx is offline
Approved Member
 
Join Date: Feb 2010
Posts: 190
Default

Quote:
Originally Posted by FG28_Kodiak View Post
place your DLL in ..parts\core
and use this:
//$reference parts\core\SMPlocalization.dll

then it should work.
Yes, I have already corrected. It works!
Thank you!
Reply With Quote
  #18  
Old 05-24-2012, 09:31 PM
Smokeynz Smokeynz is offline
Approved Member
 
Join Date: Apr 2011
Posts: 106
Default

I've been using txt files, but the problem is you have to streamread and relist and index internally, it works but is kinda resource hungry.

I really like the dll and xml combination, "find it and use it when needed".
Also means you could just about centralise repeat type messaging used across multi mission packs.
Also arguably a bit more user friendly in that more ppl are used to xml editing for simple configs.
Reply With Quote
  #19  
Old 07-05-2012, 08:37 AM
podvoxx podvoxx is offline
Approved Member
 
Join Date: Feb 2010
Posts: 190
Default

Quote:
Originally Posted by FG28_Kodiak View Post
@podvoxx

btw. ive created a translation system, also:

I use a nested Dictionary to store the translation strings and fill it from a XML - File.
I create new message system whith translate function, but I have some problem.
In your script:
Code:
private Configuration Config = Configuration.GetInstance(CONFIG_FILE);
...

Config.GetString("Messages", msgKey, pl.LanguageName());
In my script:
Code:
private SendTranslate initTranslate = SendTranslate.GetInstance(localizationFilePath);
I can't use:
Code:
initTranslate.GetString("Messages", msgKey, pl.LanguageName())
I can use only:
Code:
SendTranslate.GetString("Messages", msgKey, pl.LanguageName(), "Chat")
It's ptoblem whith static methods in dll-file:
Code:
public static string GetString(string section, string key, string language)
If I change to none-static field, I have error on this method:
Code:
private static void Send(Player[] playerList, string section, string key, string target, params object[] args)
What I need to do for fix this trouble? I need use code in my mission scripts as on you script type:
Code:
initTranslate.GetString("Messages", msgKey, pl.LanguageName())
My dll.file:
Code:
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using maddox.game;
using maddox.game.world;
using System.Xml;

namespace smpmessage
{
    // ====================================================
    // (based on Small_Bee and FG_Kodiak code)
    // ====================================================
    
    public sealed class SendTranslate
    {
        #region Parameters
        private static volatile SendTranslate _theOneAndOnly = null;
        private static readonly Dictionary<string, Dictionary<string, Dictionary<string, string>>> _stringPool = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
        static readonly IGamePlay GamePlay = Strategy.THIS.GamePlay;

        private static object syncRoot = new object(); //nessesary for threadsave Singleton
        const string XmlLanguagenode = "SMP/LanguageSection";
        private const string DefaultLanguage = "en";
        public static string setupServerLanguage = "en";
        public static string hudON = "on";
        #endregion

        #region Read File
        public static SendTranslate GetInstance(string filename)
        {
            if (_theOneAndOnly == null)
            {
                lock (syncRoot)
                {
                    if (_theOneAndOnly == null)
                    {
                        _theOneAndOnly = new SendTranslate(filename);
                    }
                }
            }
            return _theOneAndOnly;
        }

        private SendTranslate(string filename)
        {
            LoadSettings(filename);
        }

        private XmlDocument LoadXMLFile(string file)
        {
            // Load the xml-file in a xml-document
            XmlDocument xDoc = new XmlDocument();

            try
            {
                xDoc.Load(file);
            }
            catch (System.IO.FileNotFoundException)
            {
                throw new Exception("Xml-File " + file + " not found");
            }
            catch (Exception ex)
            {
                throw new Exception("Error loading " + file + ": " + ex.Message);
            }

            return xDoc;
        }

        private void LoadSettings(string languageFile)
        {
            XmlDocument xDoc = LoadXMLFile(languageFile);

            var xmlNodeList = xDoc.SelectNodes(XmlLanguagenode);

            if (xmlNodeList != null)
                foreach (XmlNode sectionNode in xmlNodeList)
                {

                    var strs = new Dictionary<string, Dictionary<string, string>>();

                    foreach (XmlNode textNode in sectionNode.ChildNodes)
                    {

                        var texts = new Dictionary<string, string>();

                        foreach (XmlNode txt in textNode.ChildNodes)
                        {
                            texts.Add(txt.Name, txt.InnerText);
                        }

                        if (textNode.Attributes != null) strs.Add(textNode.Attributes["key"].Value, texts);
                    }

                    if (sectionNode.Attributes != null) _stringPool.Add(sectionNode.Attributes["name"].Value, strs);
                }

        }

        public static string GetString(string section, string key, string language)
        {
            if (_stringPool.Count > 0)
            {
                Dictionary<string, Dictionary<string, string>> strs;

                if (_stringPool.TryGetValue(section, out strs))
                {
                    Dictionary<string, string> texts;

                    if (strs.TryGetValue(key, out texts))
                    {
                        string text;
                        if (texts.TryGetValue(language, out text))
                            return text;
                        if (texts.TryGetValue(DefaultLanguage, out text))
                            return text;
                    }
                }
            }
            return key; // if nothing is found return a empty string -> modify if a error message is needed. 
        }

        public string GetString(string section, string key)
        {
            return GetString(section, key, DefaultLanguage);
        }

        #endregion

        #region Send Translate Message to List
        public static void ToAll(string section, string key, string target, params object[] args)
        {
            Send(SendMessage.GetPlayerList(1), section, key, target, args);
            Send(SendMessage.GetPlayerList(2), section, key, target, args);
        }

        public static void ToArmy(string section, string key, int army, string target, params object[] args)
        {
            Send(SendMessage.GetPlayerList(army), section, key, target, args);
        }

        public static void ToPlayers(string section, string key, Player[] players, string target, params object[] args)
        {
            Send(players, section, key, target, args);
        }
        #endregion

        #region Send
        private static void Send(Player[] playerList, string section, string key, string target, params object[] args)
        {
            Dictionary<string, List<Player>> playerLanguageDict = new Dictionary<string, List<Player>>();
            List<Player> serverList = new List<Player>();
            string serverLanguageName = "en";

            if (GamePlay.gpPlayer() != null)
            {
                serverList.Add(GamePlay.gpPlayer());
            }

            foreach (Player player in playerList)
            {
                string languageName = player.LanguageName();
                if (!playerLanguageDict.ContainsKey(languageName))
                {
                    playerLanguageDict.Add(languageName, new List<Player>());
                }
                playerLanguageDict[languageName].Add(player);
            }

            if (serverList.Count > 0)
            {
                foreach (Player serverPlayer in serverList)
                {
                    serverLanguageName = serverPlayer.LanguageName();
                    if (setupServerLanguage != "off")
                    {
                        serverLanguageName = setupServerLanguage;
                    }
                }
                if (target == "Screen" && hudON == "on")
                {
                    GamePlay.gpLogServer(serverList.ToArray(), "[HUD]:" + GetString(section, key, serverLanguageName), args);
                }
                else
                {
                    GamePlay.gpLogServer(serverList.ToArray(), GetString(section, key, serverLanguageName), args);
                }
            }

            if (playerList.Length > 0)
            {
                foreach (KeyValuePair<string, List<Player>> kvp in playerLanguageDict)
                {
                    switch (target)
                    {
                        case "ChatAndScreen":
                        {
                            GamePlay.gpLogServer(kvp.Value.ToArray(), GetString(section, key, kvp.Key.ToString()), args);
                            GamePlay.gpHUDLogCenter(kvp.Value.ToArray(), GetString(section, key, kvp.Key.ToString()), args);
                        } break;
                        case "Chat": GamePlay.gpLogServer(kvp.Value.ToArray(), GetString(section, key, kvp.Key.ToString()), args); break;
                        case "Screen": GamePlay.gpHUDLogCenter(kvp.Value.ToArray(), GetString(section, key, kvp.Key.ToString()), args); break;
                    }
                }
            }
        }
        #endregion
    }

    public static class SendMessage
    {
        #region Parameters
        static readonly IGamePlay GamePlay = Strategy.THIS.GamePlay;
        public static string hudON = "on";
        #endregion      

        #region Send Message to List
        public static void ToAll(string message, string target, params object[] args)
        {
            Send(GetPlayerList(1), message, target, args);
            Send(GetPlayerList(2), message, target, args);
        }

        public static void ToArmy(string message, int army, string target, params object[] args)
        {
            Send(GetPlayerList(army), message, target, args);
        }

        public static void ToPlayers(string message, Player[] players, string target, params object[] args)
        {
            Send(players, message, target, args);
        }
        #endregion

        #region Send
        private static void Send(Player[] playerList, string message, string target, params object[] args)
        {
            List<Player> serverList = new List<Player>();
            if (GamePlay.gpPlayer() != null)
            {
                serverList.Add(GamePlay.gpPlayer());
            }

            if (serverList.Count > 0)
            {
                if (target == "Screen" && hudON == "on")
                {
                    GamePlay.gpLogServer(serverList.ToArray(), "[HUD]:" + message, args);
                }
                else
                {
                    GamePlay.gpLogServer(serverList.ToArray(), message, args);
                }
            }
            if (playerList.Length > 0)
            {
                switch (target)
                {
                    case "ChatAndScreen":
                    {
                        GamePlay.gpLogServer(playerList, message, args);
                        GamePlay.gpHUDLogCenter(playerList, message, args);
                    } break;
                    case "Chat":
                    {
                        GamePlay.gpLogServer(playerList, message, args);
                        break;
                    }
                    case "Screen": GamePlay.gpHUDLogCenter(playerList, message, args); break;
                }
            }

        }
        #endregion

        #region GetPlayerList
        public static Player[] GetPlayerList(int army)
        {
            List<Player> playerList = new List<Player>();
            List<Player> playerArmyList = new List<Player>();

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

            if (playerList != null)
            {
                foreach (Player player in playerList)
                {
                    if (player.Army() == army && player != null)
                        playerArmyList.Add(player);
                }
            }
            return playerArmyList.ToArray();
        }
        #endregion
    }
}
And example .cs:
Code:
//$reference "smpMessage.dll"
using System;
using maddox.game;
using maddox.game.world;
using smpmessage;

/* Available methods:
 * -- Translate and send message 
 * public static void ToAll(string section, string key, string target, params object[] args)
 * public static void ToArmy(string section, string key, int army, string target, params object[] args)
 * public static void ToPlayers(string section, string key, Player[] players, string target, params object[] args)
 * 
 * -- No translate, only send message
 * public static void ToAll(string message, string target, params object[] args)
 * public static void ToArmy(string message, int army, string target, params object[] args)
 * public static void ToPlayers(string message, Player[] players, string target, params object[] args)
 * 
 * -- Only translate, no send message
 * public string GetString(string section, string key, string language)
 *
 * Available languages in game:  en  ru  de  fr  es  cs  it  pl
*/

public class Mission : AMission
{
    // Path to localization xml-file, if you want to use localization on your script
    private static string localizationFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "\\1C SoftClub\\il-2 sturmovik cliffs of dover\\missions\\Single\\LocalizationExample\\localization.xml";

    // Create dictionary for translate and send messages
    private SendTranslate initTranslate = SendTranslate.GetInstance(localizationFilePath);

    public override void OnBattleStarted()
    {
        base.OnBattleStarted();
        MissionNumberListener = -1;
    }

    public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
    {
        base.OnPlaceEnter(player, actor, placeIndex);

        initTranslate.GetString("SendMessageSection", "GetTranslateText", "en");

        // TEST Messages
        // Translate and send message 
        /*
        initTranslate.ToAll("SendMessageSection", "SendToChatToALLtranslate", "Chat");
        initTranslate.ToPlayers("SendMessageSection", "SendToChatToPlayertranslate", new Player[] { player }, "Chat");
        initTranslate.ToArmy("SendMessageSection", "SendToChatToArmytranslate", 1, "Chat");

        initTranslate.ToAll("SendMessageSection", "SendToScreenToALLtranslate", "Screen");
        initTranslate.ToPlayers("SendMessageSection", "SendToScreenToPlayertranslate", new Player[] { player }, "Screen");
        initTranslate.ToArmy("SendMessageSection", "SendToScreenToArmytranslate", 1, "Screen");

        initTranslate.ToAll("SendMessageSection", "SendToChatAndScreenToALLtranslate", "ChatAndScreen");
        initTranslate.ToPlayers("SendMessageSection", "SendToChatAndScreenToPlayertranslate", new Player[] { player }, "ChatAndScreen");
        initTranslate.ToArmy("SendMessageSection", "SendToChatAndScreenToArmytranslate", 1, "ChatAndScreen");
        */
        // No translate, only send message
        SendMessage.ToAll("Message to ALL - ENGLISH or ДРУГОЙ ЯЗЫК", "Chat");
        SendMessage.ToPlayers("Message to Players - ENGLISH or ДРУГОЙ ЯЗЫК", new Player[] { player }, "Chat");
        SendMessage.ToArmy("Message to Army - ENGLISH or ДРУГОЙ ЯЗЫК", 1, "Chat");

        SendMessage.ToAll("Message to ALL - ENGLISH or ДРУГОЙ ЯЗЫК", "Screen");
        SendMessage.ToPlayers("Message to Players - ENGLISH or ДРУГОЙ ЯЗЫК", new Player[] { player }, "Screen");
        SendMessage.ToArmy("Message to Army - ENGLISH or ДРУГОЙ ЯЗЫК", 1, "Screen");

        SendMessage.ToAll("Message to ALL - ENGLISH or ДРУГОЙ ЯЗЫК", "ChatAndScreen");
        SendMessage.ToPlayers("Message to Players - ENGLISH or ДРУГОЙ ЯЗЫК", new Player[] { player }, "ChatAndScreen");
        SendMessage.ToArmy("Message to Army - ENGLISH or ДРУГОЙ ЯЗЫК", 1, "ChatAndScreen");

        // Only translate, no send message
        //initTranslate.GetString("SendMessageSection", "GetTranslateText", "en");
        //initTranslate.GetString("SendMessageSection", "GetTranslateText", "ru");
        //initTranslate.GetString("SendMessageSection", "GetTranslateText", player.LanguageName());
        // Examples for using translated text:
        /*
        SendMessage.ToAll(initTranslate.GetString("SendMessageSection", "GetTranslateText", "en"), "Chat");
        SendMessage.ToAll(initTranslate.GetString("SendMessageSection", "GetTranslateText", player.LanguageName()), "Chat");
        SendMessage.ToAll(initTranslate.GetString("SendMessageSection", "GetTranslateText", "de"), "Chat");
        */
        // Using parameters in messages
        int number1 = 1000;
        int number2 = 500;
        SendMessage.ToAll("SendMessageSection", "============NO TRANSLATE LINE whith xml-file===========", "Chat");

        SendMessage.ToAll("Parameters", "useParametersLabel", "Chat", number1, number2);
        SendMessage.ToAll("Parameters", "useParametersLabel", "Screen", number1, number2);
        SendMessage.ToAll("Parameters", "useParametersLabel", "ChatAndScreen", number1, number2);

        SendMessage.ToAll("Number1 = {0}, Number2 = {1}", "Chat", number1, number2);
        SendMessage.ToAll("Number1 = {0}, Number2 = {1}", "Screen", number1, number2);
        SendMessage.ToAll("Number1 = {0}, Number2 = {1}", "ChatAndScreen", number1, number2);

        SendMessage.ToAll("============NO TRANSLATE LINE whithout xml-file===========", "Chat");
    }
}
xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<!-- Language dictionary-->
<SMP>	
	<LanguageSection name="SendMessageSection">		
		<Text key="SendToChatToALLtranslate">
			<en>Send To Chat To ALL translate ENGLISH</en>
			<ru>Send To Chat To ALL translate РУССКИЙ</ru>
		</Text>
		<Text key="SendToChatToPlayertranslate">
			<en>Send To Chat To Player translate ENGLISH</en>
			<ru>Send To Chat To Player translate РУССКИЙ</ru>
		</Text>
		<Text key="SendToChatToArmytranslate">
			<en>Send To Chat To Army translate ENGLISH</en>
			<ru>Send To Chat To Army translate РУССКИЙ</ru>
		</Text>
		<Text key="SendToScreenToALLtranslate">
			<en>Send To Screen To ALL translate ENGLISH</en>
			<ru>Send To Screen To ALL translate РУССКИЙ</ru>
		</Text>
		<Text key="SendToScreenToPlayertranslate">
			<en>Send To Screen To Player translate ENGLISH</en>
			<ru>Send To Screen To Player translate РУССКИЙ</ru>
		</Text>
		<Text key="SendToScreenToArmytranslate">
			<en>Send To Screen To Army translate ENGLISH</en>
			<ru>Send To Screen To Army translate РУССКИЙ</ru>
		</Text>		
		<Text key="SendToChatAndScreenToALLtranslate">
			<en>Send To Chat And Screen To ALL translate ENGLISH</en>
			<ru>Send To Chat And Screen To ALL translate РУССКИЙ</ru>
		</Text>
		<Text key="SendToChatAndScreenToPlayertranslate">
			<en>Send To Chat And Screen To Player translate ENGLISH</en>
			<ru>Send To Chat And Screen To Player translate РУССКИЙ</ru>
		</Text>
		<Text key="SendToChatAndScreenToArmytranslate">
			<en>Send To Chat And Screen To Army translate ENGLISH</en>
			<ru>Send To Chat And Screen To Army translate РУССКИЙ</ru>
		</Text>
		<Text key="GetTranslateText">
			<en>Get Translate Text ENGLISH</en>
			<ru>Get Translate Text РУССКИЙ</ru>
		</Text>
		<Text key="useParametersLabel">
			<en>Number1: {0}, Number2: {1}</en>
			<ru>Число 1: {0}, Число 2: {1}</ru>
		</Text>
	</LanguageSection>
	<LanguageSection name="Parameters">				
		<Text key="useParametersLabel">
			<en>Number1: {0}, Number2: {1}</en>
			<ru>Число 1: {0}, Число 2: {1}</ru>
		</Text>
	</LanguageSection>
</SMP>

Last edited by podvoxx; 07-06-2012 at 06:15 AM.
Reply With Quote
  #20  
Old 07-06-2012, 05:28 AM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

Will take a look at ir.
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 12:10 PM.


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