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
Тоха

Проверка на изменение переменной

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

Edited by Тоха (see edit history)

Share this post


Link to post
Share on other sites

16 answers to this question

Recommended Posts

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

    };

 

 

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites



  • 0

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

 

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

 


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

Edited by Lesnik (see edit history)

Share this post


Link to post
Share on other sites
  • 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 хумки, и снова сработал кусок кода, и опять тишина.

Share this post


Link to post
Share on other sites
  • 0

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

 

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

};
};
 
Edited by Lesnik (see edit history)

Share this post


Link to post
Share on other sites
  • 0

 

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

 

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

};
};
 

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

 

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

Edited by Тоха (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

  1. if (_humanity > 2500) then

Share this post


Link to post
Share on other sites
  • 0

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

 

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

 

 

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

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

 

  1. if (_humanity > 2500) then

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

 

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

Edited by Тоха (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

 

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

Share this post


Link to post
Share on other sites
  • 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;

}; 

Share this post


Link to post
Share on other sites
  • 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;
    };
};

 

 

 

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

Share this post


Link to post
Share on other sites
  • 0

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

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

Смотрите.

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

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

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

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

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

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

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

while {true} do {

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

call _function1; };

sleep 1;

}; 

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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 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 убираю - пишет что класс уже используется. Что я не так делаю? Как делать правильно? не допираю.
    • By 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
       
    • By DrTauren
      Дорогие друзья, Администрацией форума приняты новые правила касательно слива\распространения античита InfiSTAR 

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