Thread: New coop script
View Single Post
  #1  
Old 10-13-2012, 09:05 PM
41Sqn_Banks 41Sqn_Banks is offline
Approved Member
 
Join Date: Oct 2007
Posts: 644
Default New coop script

This new coop script doesn't use the mission menu, instead the commands are typed into the chat console. Thus the dummy aircraft are no longer needed.

Steps:
1) You must add the following line to your conf.ini or confs.ini (if you want to use the dedicated server):
Code:
[rts]
scriptAppDomain = 0
2) Create a new mission or use a existing single player mission
3) Add the following script to the mission:
Code:
using System;
using System.Collections.Generic;
using System.Text;

using maddox.game;
using maddox.game.world;

//$reference parts/core/gamePlay.dll

public class Mission : AMission
{
    public override void OnBattleInit()
    {
        base.OnBattleInit();

        if (GamePlay is GameDef)
        {
            (GamePlay as GameDef).EventChat += new GameDef.Chat(Mission_EventChat);
        }
    }

    void Mission_EventChat(IPlayer from, string msg)
    {
        if (msg.StartsWith("!help"))
        {
            Chat("Commands: !aircraft, !select#", from);
        }
        if (msg.StartsWith("!aircraft") || msg.StartsWith("!select"))
        {
            List<Tuple<AiAircraft, int>> aircraftPlaces = new List<Tuple<AiAircraft, int>>();
            if (GamePlay.gpArmies() != null && GamePlay.gpArmies().Length > 0)
            {
                foreach (int army in GamePlay.gpArmies())
                {
                    if (GamePlay.gpAirGroups(army) != null && GamePlay.gpAirGroups(army).Length > 0)
                    {
                        foreach (AiAirGroup airGroup in GamePlay.gpAirGroups(army))
                        {
                            if (airGroup.GetItems() != null && airGroup.GetItems().Length > 0)
                            {
                                foreach (AiActor actor in airGroup.GetItems())
                                {
                                    if (actor is AiAircraft)
                                    {
                                        AiAircraft Aircraft = actor as AiAircraft;
                                        for (int place = 0; place < Aircraft.Places(); place++)
                                        {
                                            aircraftPlaces.Add(new Tuple<AiAircraft, int>(Aircraft, place));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            if (msg.StartsWith("!aircraft"))
            {
                int i = 0;
                foreach (Tuple<AiAircraft, int> aircraftPlace in aircraftPlaces)
                {
                    string playerName = "";
                    Player player = aircraftPlace.Item1.Player(aircraftPlace.Item2);
                    if (player != null)
                    {
                        playerName = " " + player.Name();
                    }
                    Chat("#" + i + ": " + aircraftPlace.Item1.Name() + " " + aircraftPlace.Item1.TypedName() + " " + aircraftPlace.Item1.CrewFunctionPlace(aircraftPlace.Item2) + " " + playerName, from);
                    i++;
                }
            }
            else if (msg.StartsWith("!select"))
            {
                msg = msg.Replace("!select", "");

                int i = -1;
                if (int.TryParse(msg, out i) && i < aircraftPlaces.Count)
                {
                    Tuple<AiAircraft, int> aircraftPlace = aircraftPlaces[i];
                    if (aircraftPlace.Item1.Player(aircraftPlace.Item2) == null)
                    {
                        from.PlaceEnter(aircraftPlace.Item1, aircraftPlace.Item2);
                    }
                    else
                    {
                        Chat("Place occupied.", from);
                    }
                }
                else
                {
                    Chat("Please enter a valid aircraft number, e.g. !select0, !select1, !select2, ...", from);
                }
            }
        }
    }

    public void Chat(string line, IPlayer to)
    {
        if (GamePlay is GameDef)
        {
            (GamePlay as GameDef).gameInterface.CmdExec("chat " + line + " TO " + to.Name());
        }
    }
}
4) Host the mission. Clients have access to several commands by typing the command into the chat:

!help - this will show the available commands
!aircraft - this will show a list of all available aircraft starting with the id of the aircraft
!select# - this will place the player into the aircraft, replace # with the id of the aircraft, e.g. !select0 will place you into the first aircraft and so on.

Last edited by 41Sqn_Banks; 10-13-2012 at 09:31 PM.
Reply With Quote