Official 1C Company forum

Official 1C Company forum (http://forum.1cpublishing.eu/index.php)
-   CoD Multiplayer (http://forum.1cpublishing.eu/forumdisplay.php?f=192)
-   -   New coop script (http://forum.1cpublishing.eu/showthread.php?t=34939)

41Sqn_Banks 10-13-2012 09:05 PM

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.

41Sqn_Banks 10-13-2012 09:34 PM

1 Attachment(s)
I created an example mission, see attachment of this post.

SirAthlon 10-14-2012 02:27 AM

Nice Banks,i test it :grin:

Osprey 10-14-2012 08:21 AM

This looks excellent, thank you Banks. I don't understand all those whining saying there 'is no co-op' - they don't see the bigger picture from coding like this.

@Farber, you are sure to read this, do you think this would be useful for the multisquad campaign or aren't we quite there yet?

5./JG27.Farber 10-14-2012 09:11 AM

I would have to know how many people were turning up and set out all the aircraft. Would be more viable with a smaller group.

This looks like the best coop so far though. ;)

Skoshi Tiger 10-14-2012 12:11 PM

Downloaded the mission and played around with it this arvo. Although I've never played in a il2 Co-op I can see how it would work to let pilots join their flights and get into the action.

I guess the mission designer needs to put a lot of work into the briefings for the mission to get everyone up to full speed on their individual task and the overall objective(s) for the mission sorted out. Can they display waypoints for individual flight on the mission map?

Just one question. Would there be anyway for pilots to alter their loadout (or is this against the essence of being in a co-op)?

Cheers

41Sqn_Banks 10-15-2012 06:22 AM

Quote:

Originally Posted by Skoshi Tiger (Post 469392)
I guess the mission designer needs to put a lot of work into the briefings for the mission to get everyone up to full speed on their individual task and the overall objective(s) for the mission sorted out. Can they display waypoints for individual flight on the mission map?

Depending on your realism settings you can see the waypoints of the flight on the map, unfortunatly this setting also shows your own aircarft on the map.

There is hope that in the future it will be possible to create user labels within script. But this feature is still bugged in the latest RC.

Quote:

Just one question. Would there be anyway for pilots to alter their loadout (or is this against the essence of being in a co-op)?
There is no way. The loadouts can only be defined for the whole flight, not for individual aircraft. However that is not a big problem, typically the coop mission is designed for a specific loadout.

Ataros 10-15-2012 08:46 AM

Excellent news, many thanks Banks!

Is it possible to make an html(java?) file which when launched on a client PC would provide a GUI for this script? Hopefully data on already occupied seats can be transfered from server/other clients in real time (or on demand at least)?

bw_wolverine 10-25-2012 04:44 AM

This is great! Thank you, Banks.

Is there a way to set some aircraft so that they don't show up on the list of aircraft at start?

I suppose I could set the other aircraft to spawn on trigger so they aren't active in the game at the outset until someone triggers the spawn.

Palex 10-26-2012 02:57 AM

Thx for the script Banks....one question:

can i change the list of available planes when use !aircraft command?? e.g only red side.

Salute!


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

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Copyright © 2007 1C Company. All rights reserved.