Official Fulqrum Publishing forum

Official Fulqrum Publishing forum (http://forum.fulqrumpublishing.com/index.php)
-   FMB, Mission & Campaign builder Discussions (http://forum.fulqrumpublishing.com/forumdisplay.php?f=203)
-   -   Request for scripters: Death/ESC-Ban (http://forum.fulqrumpublishing.com/showthread.php?t=25996)

SNAFU 09-09-2011 08:05 AM

Request for scripters: Death/ESC-Ban
 
May I ask any talented c# expert to give me a hint how to install a kind of "death ban" script of online-players for

-leaving their plane via ESC without beeing on safely on the ground
-after X number of deaths

to have a ban for Y minutes.

To draft our server-concept:
We run an dedicated online server and our approach is orientated on historically circumstances and based on daily reports of missions during July 1940. Every ingame hour one mission is launched to simulate certain events of these days as far as possible with the given tools. The nature of these missions demand teamplay and organization, the player will have little chance flying alone or in small numbers and should stick to the tasks given. 95% of the online players just jump into a plane and go straight the shortest way to where they expect to find the fast action, that`s utterly ok (I myself do this also, when I am in the mood), but to have some diversity in servers, we choosed to keep this kind of gameplay out of our server as far as possible. (There are other and better servers for the fast fun&action).
That`s why I am looking for a tool to "punish" players, who just press ESC to choose another and give killed pilots a few minutes to think about what they did wrong.

Any help would be greatly appreciated. ;)
Brgds
SNAFU

Ataros 09-09-2011 09:01 AM

I can not script it but as you ask for a hint it is possible to remember player's name as adonys describes here http://forum.1cpublishing.eu/showthread.php?t=25817 then check if he left (not bailed out) the plane on the ground or in the air and if the latest break engine of his next aircraft onPlaceEnter and write a message on screen for him like "Sorry, it is prohibited to exit your plane while you are still in the air... etc. Try selecting a new plane in 1 minute."

I would be also interested to have this script running on Repka servers if someone can write it properly.

ZaltysZ 09-09-2011 09:30 AM

Quote:

Originally Posted by SNAFU (Post 333674)
-leaving their plane via ESC without beeing on safely on the ground

It was impossible to do nicely some time ago, because means to check if plane was on ground did not work. I don't know if it is fixed now.

Ataros 09-09-2011 09:38 AM

Quote:

Originally Posted by ZaltysZ (Post 333701)
It was impossible to do nicely some time ago, because means to check if plane was on ground did not work. I don't know if it is fixed now.

I believe it is fixed. The problem was in too early take-off by humans.

Quote:

Originally Posted by luthier (Post 331837)
* Airborne status is now checked correctly even if the aircraft in question departed prematurely;


SNAFU 09-09-2011 09:43 AM

Quote:

Originally Posted by Ataros (Post 333686)
...the plane on the ground or in the air and if the latest break engine of his next aircraft onPlaceEnter and write a message on screen for him like "Sorry, it is prohibited to exit your plane while you are still in the air... etc. Try selecting a new plane in 1 minute."

Thx for the hint, Ataros.
Also possible, but I assume the casual player will spawn, curse, ESC, Spawn, curse, repaeat... and get loud, which would lead to a lot of planes spawing and therefore lags, but if it`s only feasible this route, would be ok also. ;)

I like designing missions, but I don´t have time and the nerves to get myself into C# beyond just taking what I find and copy it together... ;)

Quote:

Originally Posted by ZaltysZ (Post 333701)
It was impossible to do nicely some time ago, because means to check if plane was on ground did not work. I don't know if it is fixed now.

If the "airborne" status is fixed, their should be an easy way to implement a penalty for abandoming planes airborne, without using the parachute. I will try an "message when airborne" trigger, which didn´t work last patch, when I ve got time.

But anyhow, if someone of the scripters would get his hands on a such lines, I`ll buy him a beer. ;)

SNAFU 09-09-2011 10:41 AM

Thinking about it, I would even consider Ataros suggestion with blocking the players fuel pump as penalty as the best solution.

FG28_Kodiak 09-09-2011 11:49 AM

My quick and dirty solution ;) (for Beta Patch)

Code:

using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;


public class Mission : AMission
{

    const int TotalArrestTime = 30;  // Time in seconds

    public class prisonCell
    {
        public Player Prisoner { get; set; }
        public DateTime JailTime { get; set; }
        public bool Removable { get; set; }
    }

    public List<prisonCell> PrisonCamp = new List<prisonCell>();


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

        if (PrisonCamp.Count != 0)
        {
            foreach (prisonCell pri in PrisonCamp)
            {
                if (pri.Prisoner == player)
                {
                    TimeSpan ArrestTime = DateTime.Now.Subtract(pri.JailTime);

                    if (ArrestTime.TotalSeconds < TotalArrestTime)
                    {
                        GamePlay.gpLogServer(null, "Player: {0} is under Arrest\n", new object[] { player.Name() });
                        GamePlay.gpHUDLogCenter(new Player[] { player }, "{0} you are under Arrest!", new object[] { player.Name() });
                        (actor as AiAircraft).hitNamed(part.NamedDamageTypes.FuelPumpFailure);
                   
                    }
                    else
                    {
                        pri.Removable = true;
                    }
                   
                }
            }

            PrisonCamp.RemoveAll(item => item.Removable == true);
        }
    }



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

        if ((actor as AiAircraft).IsAirborne())
        {

            GamePlay.gpLogServer(null, "Player: {0} get a {1} sec. penalty for leaving Airplane in flight\n", new object[] { player.Name(), TotalArrestTime });

            prisonCell NewPrisoner = new prisonCell();
            NewPrisoner.Prisoner = player;
            NewPrisoner.JailTime = DateTime.Now;

            PrisonCamp.Add(NewPrisoner);
        }
    }

}


Ataros 09-09-2011 12:21 PM

PrisonCamp! :grin: LOL
Great idea! Thank you! Programming can be very creative :)
Will do my best to enforce it on Repka servers.

Since the script builds a list of prisoners anyway may I ask to add a message "player ... is killed by ..." instead of "AI was killed by..." as described by adonys here when you have some time? http://forum.1cpublishing.eu/showthread.php?t=25817

ps. Does the script excludes pilots who bailed-out from list of prisoners?

Ze-Jamz 09-09-2011 01:17 PM

Yes please someone try and work with this..

Nothing more annoying than everyone you shoot creating another plane and you've shot down 'AI' again.....really!?

I've done this myself and its just annoying so I at least try an bail..

Any aircraft destroyed should be a kill and any aircraft your in that is destroyed or you bail from should be a death counted against you..

The stats have no meaning at all...As you know that everyone on the list has been shot down numerous times but has just created another plane when they've got themselves in trouble..

Everyone likes to know who they have shot down..come on

Its also adds to the enjoyment of the game as your finishing them off or trying to evade to stay alive...instead of taking lote of hit, giving up and respawning

Ze-Jamz 09-09-2011 01:17 PM

Quote:

Originally Posted by FG28_Kodiak (Post 333766)
My quick and dirty solution ;) (for Beta Patch)

Code:

using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;


public class Mission : AMission
{

    const int TotalArrestTime = 30;  // Time in seconds

    public class prisonCell
    {
        public Player Prisoner { get; set; }
        public DateTime JailTime { get; set; }
        public bool Removable { get; set; }
    }

    public List<prisonCell> PrisonCamp = new List<prisonCell>();


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

        if (PrisonCamp.Count != 0)
        {
            foreach (prisonCell pri in PrisonCamp)
            {
                if (pri.Prisoner == player)
                {
                    TimeSpan ArrestTime = DateTime.Now.Subtract(pri.JailTime);

                    if (ArrestTime.TotalSeconds < TotalArrestTime)
                    {
                        GamePlay.gpLogServer(null, "Player: {0} is under Arrest\n", new object[] { player.Name() });
                        GamePlay.gpHUDLogCenter(new Player[] { player }, "{0} you are under Arrest!", new object[] { player.Name() });
                        (actor as AiAircraft).hitNamed(part.NamedDamageTypes.FuelPumpFailure);
                   
                    }
                    else
                    {
                        pri.Removable = true;
                    }
                   
                }
            }

            PrisonCamp.RemoveAll(item => item.Removable == true);
        }
    }



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

        if ((actor as AiAircraft).IsAirborne())
        {

            GamePlay.gpLogServer(null, "Player: {0} get a {1} sec. penalty for leaving Airplane in flight\n", new object[] { player.Name(), TotalArrestTime });

            prisonCell NewPrisoner = new prisonCell();
            NewPrisoner.Prisoner = player;
            NewPrisoner.JailTime = DateTime.Now;

            PrisonCamp.Add(NewPrisoner);
        }
    }

}


Thanks mate..that will do for now :)


All times are GMT. The time now is 10:23 PM.

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