Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
BorizzK

Выполнить функцию с параметрами, не сразу, а с задержкой

В проверке где убит игрок

Если игрок убит в сейфзоне

Телепортим убивца на лобное место

Убираем ему весь лут

Публично казним!

 

ну это потом

 

пока просто p_Killer.SetHealth(0);

 

Все как бы почти хорошо, кроме одного момента

Функцию нужно вызвать не сразу, а с задержкой секунд 10

 

что-то типа

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(p_Killer.KaznFunction, 10000, true);

 

но это будет вызывать KaznFunction каждые 10 сек, а мне надо 1 раз

 

Вопрос - как?

 

Всем спасибо!))

 

P.S.

понятно что в своей функции я теоретически могу

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(p_Killer.KaznFunction);

 

 

Share this post


Link to post
Share on other sites

19 answers to this question

Recommended Posts

  • 0

BorizzK 

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(p_Killer.KaznFunction, 10000, true); 

через 10 секунд вызывать по циклу

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(p_Killer.KaznFunction, 10000, false); 

вызвать 1 раз через 10 секунд

Share this post


Link to post
Share on other sites









  • 0

123new 

Вот такое не срабатывает

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(p_Killer.SetHealth(0), 10000, false);

 

Ошибка

Cannot convert 'void' to 'func' for argument '0' to method 'CallLater'

 

А вот так прокатывает

 

	void KaznFunction()
	{
		this.SetHealth(0);
	}
GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(p_Killer.KaznFunction, 10000, false);

Но мне надо в KaznFunction еще параметров передать....

Share this post


Link to post
Share on other sites
  • 0

BorizzK а такое и не сработает. Там, если не ошибаюсь, должно быть что-то вроде

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(p_Killer.SetHealth, 10000, false,0); 

но это не точно. Где-то видел хороший пример на эту тему, но найти что-то не могу под рукой.

А вот второе что ты назвал и должно работать. Можно даже так по идее, если выше названное верно:

void KaznFunction(int num)
	{
		this.SetHealth(num);
	}
GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(p_Killer.KaznFunction, 10000, false,0);

 

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 0

123new Кроме num мне надо передать еще неск разных параметров...

координаты лобного места в конкретной зоне

режим его казни (пусть да же цифрой)

 

например хочу реализовать казнь через шмяк об стену

в цикле ему полет замутить и ап стену его и ап стену

вобщем как-то поизвращаться на эту тему

 

еще бы понять как перса звфризить/рукиноги связать, что бы не убежал

ну эт для расстрела надо

 

ну и как бы опять же динамически изменяемые зараженные зоны и объекты

те заспавнил машину

все кто к ней подошел или в нее сел - резко заболели

но не сразу

а с задержкой например

 

алгоритмов в виде блоксхем накатал

осталось реализовать

 

Share this post


Link to post
Share on other sites
  • 0

BorizzK так сделай несколько параметров, и через запятую также их перекидывай. ну или массивчик сделай, загони все параметры туда, и массивом передай значения в функцию.

Share this post


Link to post
Share on other sites
  • 0

123new 

Ты имеешь ввиду CallLater(p_Killer.KaznFunction, 10000, false, параметр, параметр, параметр);

?

Share this post


Link to post
Share on other sites
  • 0

BorizzK угу, я прям вот точ такой пример где-то видел, тока вспомнить не могу где, иначе б прям заскринил

Share this post


Link to post
Share on other sites
  • 0

BorizzK А возможно ли прервать отчёт если p_Killer в данном случае, помрёт раньше?

Share this post


Link to post
Share on other sites
  • 0

buka Не, ну можно написать и такое, но смысл, просто в функции проверим жив киллер или нет, и если мертв, просто ничего не делаем...

Share this post


Link to post
Share on other sites
  • 0

BorizzK хочу в пвп зоне захват здания сделать.. если захватывающего убивают то собственно ничего не делаем.. если нет то все в зоне дохнут присваевается победа захватившему, отсюда другой вопрос, для счётчика килов создана сохраняющаяся переменная, как сделать ещё одну такую?((хотелось бы победы тоже сохранять...

Share this post


Link to post
Share on other sites
  • 0

BorizzK а примерчик на проверку можно? раньше alive было или как-то так..

Share this post


Link to post
Share on other sites
  • 0

BorizzK хотя так не получится(( нужно именно прервать работу функции..  или наверное исправит ситуацию проверка типа убивали ли игрока за прошедшие 5 минут.. но ка кэто сделать(

Edited by buka (see edit history)

Share this post


Link to post
Share on other sites
  • 0

buka 

 

If (player)

{

if (player.IsAlive())

{

  //Игрок есть и он живой

 //Мочим

}

}

Share this post


Link to post
Share on other sites
  • 0

BorizzK не сработает, он может помереть и уже появиться, и даже прибежать в тоже место...( но за примерчик спасибо.

Share this post


Link to post
Share on other sites
  • 0

buka если даже он прибежит в то же место и живой, у него player будет с другим id в базе, как другой объект будет считаться

Share this post


Link to post
Share on other sites
  • 0

buka player будет другой

player не NULL пока он как обьект есть в мире

если он умрет IsAlive() вернет false

как пропадет станет NULL

 

 

 

Share this post


Link to post
Share on other sites
  • 0

BorizzK а как появится он не станет опять темже объектом?

Share this post


Link to post
Share on other sites
  • 0

buka нет, спавнится всегда уникальный объект с уникальным id

Share this post


Link to post
Share on other sites
  • 0

123new И повториться в текущей сессии он не может вообще никак - дижок сечет за этим

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By BorizzK
      Ситуация такая
      В функцию надо передать 27 разнашерстных параметров
      если указывать больше 19 при запуске сервер крашит без крашлога и тп
      Передавать через массивы? вариант, но хотелось бы сделать красиво-красиво
       
      Взялся за класс Param
      прикинул - Param'сы бывают от 1 до 5 параметровые
      Значит можно передать 5 шт Param5 и 1 Param2
       
      Взялся тестить
      void FormingAreas() { private ref Param5<string, int, vector, float, int> MainParams; MainParams = new Param5<string, int, vector, float, int>("", 0, vector.Zero, 0.0, 0); MainParams.param1 = "AREA 1"; MainParams.param2 = 1; MainParams.param3 = vector.Zero; MainParams.param4 = 1.1; MainParams.param5 = 2; AddAreaParams(MainParams); }  
      Собственно ошибка возникает тут
       
      void AddAreaParams(Param p) { ref Areas Area = new ref Areas; //AreaMainParams Param AreaMainParams = Param.Cast(p); Area.name = AreaMainParams.param1; //318 строка Area.id = AreaMainParams.param2; Area.center = AreaMainParams.param3; Area.center[1] = GetGame().SurfaceY(Area.center[0], Area.center[2]); Area.radius = AreaMainParams.param4; Area.maxplayers = AreaMainParams.param5; Тут про компиляции ошибочка
      $CurrentDir://mpmissions//dayzOffline.chernarusplus//_MOD//StrikeAreas//StrikeAreasClass.c(318): Can't find variable 'param1'
       
      Можно конечно определить MainParams в классе и передавать через него вызывая AddAreaParams без параметров
       
      Но хотелось бы разобраться именно с таким вариантом
       
      Спасибо!
    • By exploadead
      Мод Эпоч 0.3.7.0, но я думаю разницы не должно быть особой в том, как же убрать этот злосчастный Trade Request на ctrl+t. Подскажите пожалуйста, кто знает, как отключить эту функцию? Заранее спасибо!
    • By exploadead
      Почему-то не работают кики и баны из админки инфистара... в логах пишет "Не удалось выполнить команду #kick сервером" и тд.
      Что может быть не так? Все обновы с++ стоят, логи пишутся нормально. При попытке забанить - инфи даже записывает в файл ban.txt тот самый UID забаненого... но сам игрок при этом спокойно бегает на сервере... Помогает только дополнительное вписывание его UID в файлы банов BEC и Battleye... и команда Force Disconnect из админки инфи (она вот работает)... тогда он отсоединяется и баны в балтАе его уже не пускают.
  • Our picks

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.