Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной

Кто может подскажите пожалуйста,  как можно реализовать простенькую проверку переменной на изменения? Задача у меня такая: Присваиваю переменке количество humanity, потом включаю проверку, которая крутится все время, как только замечено изменение, делаю выполнение куска кода, и опять в начало, крутим крутим до очередного изменения. Чет уже совсем заглох =(

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

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


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

Рекомендованные сообщения

  • 0

Private ["_humanity", "_humanityRenew"];

_humanity        =    player getVariable ["humanity", 0];

while {true} do

    {

        _humanityRenew = player getVariable ["humanity", 0];

        if (_humanity != _humanityRenew) then

            {

                hint format["Изменилось значение хуманити. Было: %1. Стало: %2.", _humanity, _humanityRenew];

                _humanity = _humanityRenew;

            };

        sleep 1;

    };

 

 

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

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


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

создай цикл, в котором человечность равна или больше 10000, то происходит одно условие,а в противном случае другое...

 

if (player getVariable['humanity',0] >=10000) then { что-то происходит }else{что-то происходит если хуманити меньше 10000};
 

 


За работоспособность не отвечаю! (лучше проверьте)

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

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


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

Вот на чем застопорился 

 

PlayerLevel = "Survived";
_humanity_check = {
humanity_custom = (player getVariable['humanity', 0]) -2500;

блаблабла условия бла бла бла....
};
call _humanity_check;  //вызываю тут же функцию. Для того чтоб произошло выполнение условий единожды.

while {true} do {              // а вот теперь не могу заставить крутится проверку, не знаю за что прицепиться...
_humanity_old = количество humanity было;     //не знаю какая переменная отвечает за это. Может как то по другому можно?

_humanity_now = (player getVariable['humanity', 0]);  //Кол-во хумки сейчас.
if ((_humanity_old > _humanity_now) || (_humanity_old < _humanity_now)) then {
call _humanity_check;
};
sleep 1;
};

 



создай цикл, в котором человечность равна или больше 10000, то происходит одно условие,а в противном случае другое...

 

if (player getVariable['humanity',0] >=10000) then { что-то происходит }else{что-то происходит если хуманити меньше 10000};
 

 


За работоспособность не отвечаю! (лучше проверьте)

Мне нужно именно проверять изменения humanity в реальном времени. Тобишь Убил кепку - отняли 2000 хумки и тут же сработал скрипт (кусок кода, который мне нужно 1 раз), потом опять затишье. Вдруг сделал переливание, вот тебе 200 хумки, и снова сработал кусок кода, и опять тишина.

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


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

а нельзя сделать так:

 

if (_humanity<=-2500) then {
 что-то происходит 
}else{
if (_humanity>=2500) then
{

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

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


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

 

а нельзя сделать так:

 

if (_humanity<=-2500) then {
 что-то происходит 
}else{
if (_humanity>=2500) then
{

};
};
 

В данном случае, идет проверка условий на диапазоны humanity. Тоесть насколько больше я укажу диапазонов, настолько точнее будет отлиживаться изменение. Но эт мне тогда придется растянуть код на 9к строк что ли  :surprised:  так как у меня 90к предельный уровень хумки... да и в добавок. Я т хочу отслеживать мельчайшие изменение хумки. чуть ли не 0.5. Просто я думал есть какая то глобальная переменка которая отвечает за изменение или зза предыдущее кол-во хуманити, ну или придумать как высчитать изменение не громоздя большущий кодик.

 

По точнее. Вот у тебя сейчас 7500 хуманити - код не выполняется. Как только 7501 стало, сразу выполниля код - один раз. Вот чего пытаюсь осуществить)

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

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


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

В инфистаре есть откат хумки при превышении указанного значении.
И есть тебе надо 7500 - ничего не делать, а 7501 и более - выполнить, то в коде подправь.
 

  1. if (_humanity > 2500) then

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


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

В данном случае, идет проверка условий на диапазоны humanity. Тоесть насколько больше я укажу диапазонов, настолько точнее будет отлиживаться изменение. Но эт мне тогда придется растянуть код на 9к строк что ли  :surprised:  так как у меня 90к предельный уровень хумки... да и в добавок. Я т хочу отслеживать мельчайшие изменение хумки. чуть ли не 0.5. Просто я думал есть какая то глобальная переменка которая отвечает за изменение или зза предыдущее кол-во хуманити, ну или придумать как высчитать изменение не громоздя большущий кодик.

 

По точнее. Вот у тебя сейчас 7500 хуманити - код не выполняется. Как только 7501 стало, сразу выполниля код - один раз. Вот чего пытаюсь осуществить)

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

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


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

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

ну или так) просто я не настолько прошаренный )

 

 

В инфистаре есть откат хумки при превышении указанного значении.

И есть тебе надо 7500 - ничего не делать, а 7501 и более - выполнить, то в коде подправь.

 

  1. if (_humanity > 2500) then

да, знаю такой код, использую его отдельно от инфи для контроля превышения максимального уровня. Но он работает только при определенном условии, тобишь мы достигли определенного значения - код заработал. а мне надо как то сообразить, чтоб срабатывало при любом изменении хумки в плюс в минус, на любое значение, будь то - 1 или 100 или 322 и тд

 

Возможно есть какая то команда, которая отслеживает значение переменной. Я много чего не знаю, как вы догадались, но пытаюсь разобраться)

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

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


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

Хм... можно попробовать так.

 

if ((_humanity => 0) && (_humanity <=0)) then

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


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

 

Хм... можно попробовать так.

 

 

if ((_humanity => 0) && (_humanity <=0)) then

А разве такое возможно? Просто как я понял, в данном условии говорится если число "меньше либо равно И больше либо равно". Тоесть этим уравнением подойдут все числа. 

Вы не поняли наверное что я пытаюсь узнать.

Смотрите.

берем переменную и кладем в нее значение хумки

_humanity = player getVariable['humanity', 0]);

Теперь у меня есть условия, которые я воткнул в функцию, чтобы проще вызывать было.

_function1 = {Тут идут куча условий, которые никак не влияют на основной код};

теперь я вызываю эту функцию, так как этот скрипт вызывается единожды из init.sqf.

call _function1;  код выполнился. Все откалибровалось...

Теперь я создаю цикл в котором хочу крутить humanity

while {true} do {

if (ЧТо тут придумать???) then {

call _function1; };

sleep 1;

}; 

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


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

Хех. Вроде данный код работает. Пока тестирую. Но думаю врядли нормально будет работать, когда много врагов будет. и humanity будет быстро пополняться.

 

 

while {true} do {
_humanity_old = (player getVariable['humanity', 0]) -2500;
sleep 1;
_humanity_now = (player getVariable['humanity', 0]) -2500;
if ((_humanity_old > _humanity_now) || (_humanity_old < _humanity_now)) then {
call _humanity_check;
    };
};

 

 

 

Есть у кого какие идеи?

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


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

А разве такое возможно? Просто как я понял, в данном условии говорится если число "меньше либо равно И больше либо равно". Тоесть этим уравнением подойдут все числа. 

Вы не поняли наверное что я пытаюсь узнать.

Смотрите.

берем переменную и кладем в нее значение хумки

_humanity = player getVariable['humanity', 0]);

Теперь у меня есть условия, которые я воткнул в функцию, чтобы проще вызывать было.

_function1 = {Тут идут куча условий, которые никак не влияют на основной код};

теперь я вызываю эту функцию, так как этот скрипт вызывается единожды из init.sqf.

call _function1;  код выполнился. Все откалибровалось...

Теперь я создаю цикл в котором хочу крутить humanity

while {true} do {

if (ЧТо тут придумать???) then {

call _function1; };

sleep 1;

}; 

Косяк мой, я спутал И с ИЛИ :)

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


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

А кто-нибудь знает как можно воспользоваться addEventHandler?

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


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

Спасибо, почему то на русскоязычные сайты не натыкался сам. Жаль, что не подходит обработчик

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


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

Воо, намного грамотнее моего. Спасибо большое. А то я со своим (выше написал) боялся при больших нагрузках и лагах, получить сбой.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: 123new
      Такого плана вопрос по моддингу на 1.0.
      В моде есть, например, класс:
      class ExpansionGlobalChat с кучей функций
      создаю свой мод, в котором указываю
      modded class ExpansionGlobalChat { override void GlobalChat(CallType type, ref ParamsReadContext ctx, ref PlayerIdentity sender, ref Object target) { super.GlobalChat(type, ctx, sender, target); Param2< string, string > data; if ( !ctx.Read( data ) ) return; if( type == CallType.Server ) { string name = sender.GetName(); string steamid = sender.GetPlainId(); string bisid = sender.GetId(); string idtable = sender.GetPlayerId().ToString(); string log_date_time = ExpansionGetDateTime(); string format = "[" + log_date_time + "] " + "[Chat]" + " " + name + "(steamid=" + steamid + ", bisid=" + bisid + ") " + data.param2; Print(format); } } } и пакую, запускаю сервер. Пишет как на скрине.

      Если modded убираю - пишет что класс уже используется. Что я не так делаю? Как делать правильно? не допираю.
    • Автор: DrTauren
      Собственно, из названия понятно, что в этом гайде мы научимся отключать уровень стамины игрока, отключать усталость

      Инструкция:
      1) Находим файл dta/scripts.pbo и распаковываем его при помощи PBO Manager и копируем только что распакованную папку scripts в корневую папку сервера
      2) Открываем файл scripts/3_Game/constants.c и изменяем этот код под себя:
      const int STAMINA_DRAIN_STANDING_SPRINT_PER_SEC = 5; //в единицах (сколько единиц выносливости отбавляется при ускорении) const int STAMINA_DRAIN_CROUCHED_SPRINT_PER_SEC = 1; //в единицах (сколько единиц выносливости отбавляется при ускорении на корточках) const int STAMINA_DRAIN_PRONE_SPRINT_PER_SEC = 3; //в единицах (сколько единиц выносливости отбавляется при ускорении лёжа) const float STAMINA_DRAIN_HOLD_BREATH = 0.2; //в единицах (сколько единиц выносливости отбавляется при задержке дыхания) const int STAMINA_DRAIN_JUMP = 20; //в единицах (сколько единиц выносливости отбавляется при прыжке) const int STAMINA_DRAIN_MELEE_LIGHT = 5; //в единицах (сколько единиц выносливости отбавляется при лёгком ударе в ближнем бою) const float STAMINA_DRAIN_MELEE_HEAVY = 20; //в единицах (сколько единиц выносливости отбавляется при сильном ударе в ближнем бою) const int STAMINA_DRAIN_MELEE_EVADE = 8; //в единицах (сколько единиц выносливости отбавляется при уклонении) Таким образом мы можем отключить усталость игрока, стамина всегда будет максимальная. Для этого нужно всего лишь установить все параметры на значение 0
       
    • Автор: DrTauren
      Дорогие друзья, Администрацией форума приняты новые правила касательно слива\распространения античита InfiSTAR 

      Теперь коллектив сайта не несёт ответственности за слив продукта, т.к. будет создана специальная тема, в которой будут выкладываться уже слитые версии, найденные в интернете, на других сайтах. Выкладываться они будут абсолютно без изменений. Кстати, все темы касательно InfiSTAR будут удалены с сайта.
      Обращаю внимание что данное решение было принято не мной лично, а всем коллективом S-Platoon.
      Внимание! На форуме все так же запрещено сливать\продавать\выкладывать InfiSTAR, это будет караться баном без предупреждения. 
      В данной теме вы можете изложить своё мнение по этому вопросу, а также предложить другие пути разрешения ситуации
    • Автор: SpiritWolf
      Ребят, подскажите. К примеру, у меня есть массив.
       
      _blabla = ["TrashTinCan", "PastaTinCan", ............]
       
      Как мне сделать проверку, что хотябы один из элементов массива присутствует и отлавливать конкретно тот, на который пал выбор скрипта (К примеру, идет проверка инвентаря игрока)?
      Надеюсь, я правильно объяснил и вы поймете :)
  • Наш выбор

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.

Поддержка