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);

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

19 ответов на этот вопрос

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 секунд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Забронировать это рекламное место


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 еще параметров передать....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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);

 

Изменено пользователем 123new (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

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

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

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

 

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

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

 

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

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

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

но не сразу

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

 

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем buka (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: 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 без параметров
       
      Но хотелось бы разобраться именно с таким вариантом
       
      Спасибо!
    • Автор: exploadead
      Мод Эпоч 0.3.7.0, но я думаю разницы не должно быть особой в том, как же убрать этот злосчастный Trade Request на ctrl+t. Подскажите пожалуйста, кто знает, как отключить эту функцию? Заранее спасибо!
    • Автор: exploadead
      Почему-то не работают кики и баны из админки инфистара... в логах пишет "Не удалось выполнить команду #kick сервером" и тд.
      Что может быть не так? Все обновы с++ стоят, логи пишутся нормально. При попытке забанить - инфи даже записывает в файл ban.txt тот самый UID забаненого... но сам игрок при этом спокойно бегает на сервере... Помогает только дополнительное вписывание его UID в файлы банов BEC и Battleye... и команда Force Disconnect из админки инфи (она вот работает)... тогда он отсоединяется и баны в балтАе его уже не пускают.