Штрафбат для бросивших самолет в онлайне (скрипт)
Запрещает вылет на новом самолете для тех кто бросил старый самолет в воздухе, выйдя в меню.
Автор FG28_Kodiak
http://forum.1cpublishing.eu/showpos...66&postcount=7
Код:
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);
}
}
}
Re: Штрафбат для бросивших самолет в онлайне (скрипт)
Т.е. надо будет прыгать, а потом выходить? Просто во время полета может возникнуть срочное дело и нужно будет срочно отойти, - как быть? У меня такое часто бывает, например.:rolleyes:
Re: Штрафбат для бросивших самолет в онлайне (скрипт)
Цитата:
Сообщение от
=FPS=Olega
Т.е. надо будет прыгать, а потом выходить? Просто во время полета может возникнуть срочное дело и нужно будет срочно отойти, - как быть? У меня такое часто бывает, например.:rolleyes:
Например, можно прыгать или не выходить из самолета. Тот, кто по вам стреляет в этот момент ведь не виноват, что у вас дело.
Между сеансами игры штраф видимо сбрасывается.
Re: Штрафбат для бросивших самолет в онлайне (скрипт)
Исправлено с учетом парашютировавшихся
Код:
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 (actor == null) // if player bailed out the actor is null so remove him from prison
{
if (PrisonCamp.Count != 0)
{
foreach (prisonCell pri in PrisonCamp)
{
if (pri.Prisoner == player)
{
pri.Removable = true;
}
}
PrisonCamp.RemoveAll(item => item.Removable == true);
}
}
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} get a {1} sec. penalty for leaving Airplane in flight\n", new object[] { player.Name(), TotalArrestTime });
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())
{
prisonCell NewPrisoner = new prisonCell();
NewPrisoner.Prisoner = player;
NewPrisoner.JailTime = DateTime.Now;
PrisonCamp.Add(NewPrisoner);
}
}
}
Re: Штрафбат для бросивших самолет в онлайне (скрипт)
Цитата:
Сообщение от
-atas-
Запрещает вылет на новом самолете для тех кто бросил старый самолет в воздухе, выйдя в меню.
О, очень хорошая штука!!! Не раз такое наблюдал - не честно и обидно!
А это на сервере прописывают?
Re: Штрафбат для бросивших самолет в онлайне (скрипт)
Цитата:
Сообщение от
Baur
А это на сервере прописывают?
Да.
Re: Штрафбат для бросивших самолет в онлайне (скрипт)
Прекрасный код. Пропишите еще им расстрел, что бы не козлили.
Re: Штрафбат для бросивших самолет в онлайне (скрипт)
Добавлено очередное обновление штрафбата, а также еще один новый скрипт, пишущий в чат, кого на самом деле сбили, а не "Сбит ИИ", как сейчас.
http://forum.1cpublishing.eu/showthr...t=25996&page=3
Re: Штрафбат для бросивших самолет в онлайне (скрипт)
IsAirborne() в бете заработал как надо?
Re: Штрафбат для бросивших самолет в онлайне (скрипт)