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-26-2012 11:42 AM

Both answers are yes, however I need to enhance the script. I hope I have time to do this next week.

bw_wolverine 10-26-2012 08:05 PM

Quote:

Originally Posted by 41Sqn_Banks (Post 473267)
Both answers are yes, however I need to enhance the script. I hope I have time to do this next week.

Awesome!

This is really a great piece of work and has totally revitalized No.401 Squadron in a big way.

We hope to use this script to help bring a CO-OP campaign to fruition. We're testing with the current version and signs are really good.

Punch_145 10-27-2012 01:33 PM

Very nice..Tried this and looks very promising only problem for me is if I use your script, Triggers and Actions seem to stop working? or am I doing something wrong?

dcheeze 10-28-2012 05:33 AM

I am unable to get the script to work, I've downloaded the example mission and loaded on my host machine (not dedicated server), started the mission as multiplayer (coop) and then have a client try and join the mission. The host is able to select an aircraft but the client, typing any of the three commands sees nothing. An following error is shown on the client machine: *WPF.Unavailable puppet place error. I'm not sure if I am doing this correctly so any help would be appreciated.

41Sqn_Banks 10-28-2012 06:58 AM

Quote:

Originally Posted by dcheeze (Post 473890)
I am unable to get the script to work, I've downloaded the example mission and loaded on my host machine (not dedicated server), started the mission as multiplayer (coop) and then have a client try and join the mission. The host is able to select an aircraft but the client, typing any of the three commands sees nothing. An following error is shown on the client machine: *WPF.Unavailable puppet place error. I'm not sure if I am doing this correctly so any help would be appreciated.

Did you add:
Code:

[rts]
scriptAppDomain = 0

to your conf.ini and confs.ini?
Is there any entry in the log file?

FG28_Kodiak 10-28-2012 08:02 AM

Quote:

Originally Posted by Punch_145 (Post 473629)
Very nice..Tried this and looks very promising only problem for me is if I use your script, Triggers and Actions seem to stop working? or am I doing something wrong?

You should add these lines to the script (insert it before the last bracket):
Code:

    public override void OnTrigger(int missionNumber, string shortName, bool active)
    {
        base.OnTrigger(missionNumber, shortName, active);

        AiAction action = GamePlay.gpGetAction(ActorName.Full(missionNumber, shortName));
        if (action != null)
        {
            action.Do();
        }
       
    }

So the triggers and actions works like expected ;)

dcheeze 10-28-2012 10:02 AM

That was it, added the RTS scriptAppDomain and it worked like a charm. Thanks

Punch_145 10-28-2012 10:32 AM

Thank you Kodiak, Much appreciated :grin:

Punch_145 10-28-2012 11:06 AM

Sorry, when You say "before last bracket" do you mean like so?

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());
        }
    }
 public override void OnTrigger(int missionNumber, string shortName, bool active)
    {
        base.OnTrigger(missionNumber, shortName, active);

        AiAction action = GamePlay.gpGetAction(ActorName.Full(missionNumber, shortName));
        if (action != null)
        {
            action.Do();
        }
       
    }}


Nephris 10-28-2012 12:53 PM

Thx again for your work Banks.
Is there a way to limit the player spawn?
Means as soon as a player got shot, he is out.
Or better , can I seperate playable flights from non playable?

Would that only be possible by adding AI flights by loading submissions?


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

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