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

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

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

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

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

Отличие dayz_characterID от playerUID

Привет всем.

Сегодня ковырял файлик fn_selfActions.sqf с одного гайда, чтобы совместить со своим, и вот что заметил:

 

Отличие в файликах идет по dayz_characterID и playerUID

 

ПРиведу как пример кусочки кода:

 

//Allow owners to delete modulars
                if(_isModular && (dayz_characterID == _ownerID)) then {
                        if(_hasToolbox && "ItemCrowbar" in _itemsPlayer) then {

и

 

//Allow owners to delete modulars
                if(_isModular and (_playerUID == _ownerID)) then {
                        if(_hasToolbox and "ItemCrowbar" in _itemsPlayer) then {

Хотелось бы понять в чем различия и какой все же правильне использовать?

 

Таже есть разница между "count" и "forEach".

Пример кодов:

 

if(_cursorTarget isKindOf _x) exitWith {_isFuel = true;};
		} count dayz_fuelsources;
	};

и

 

if(_cursorTarget isKindOf _x) exitWith {_isFuel = true;};
		} forEach dayz_fuelsources;
	};

В остальном файлики практически идентичны. Отличия только в этом, ну и в добавленных функциях типо самозаливки крови.

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


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

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

MagicByte MagicByte MagicByte
  • 0
 

dayz_characterID глобальная переменная

_playerUID локальная переменная.  как они обьявляются ищи в коде и поймеш.

 

 

чем отличаются count от  forEach смотри тут  https://community.bistudio.com/wiki/

 

от forEach уходят к count не знаю по какой причине.. но скорей всего из-за скорости обработки. http://arma3.ru/forums/topic/1678-uroki-po-skriptopisaniiu/#entry14331

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


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

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

К примеру

{

 ........

 _a = _x select 0;

 .......

 {

  ..........

  _b = _x select 0;

  ........

 } forEach xxx;

} forEach yyy;

 

Это первое.

Второе - циклы по сути одинаковые, что forEach, что for. Но

1. По написанию, лучше везде использовать один цикл.

2. Если где то прерывание цикла, и надо запомнить переменную - порядковый номер на которой произошло прерывание, то для фореач придется ее создать. А для ФОР, это сам счетчик (обычно _i ).

3. Цикл фор более правильный.... тут необхожимо пояснение, из php и Си -

Циклы предопределены разработчиками

  • Цикл с предусловием (while);
  • Цикл с постусловием (do-while);
  • Цикл со счетчиком (for);
  • Специальный цикл перебора массивов (foreach).

 

Однако forEach несколько обособлен. Дело в том, что он не работает напрямую с массивом, а создает его копию(из документации) -

Примечание: Обратите также внимание, что foreach работает
с копией специфицированного массива, а не с самим массивом,
следовательно, указатель массива не изменяется, как при работе
конструкции each(), и изменения в возвращаемом элементе массива не
влияют на массив-оригинал.

 

Пример некорректного поведения цикла forEach для ARMA2(вернее - корректного, если учитывать справку!):

 

 

private ["_array"];
_array    =    [];
_array set [count _array, "MASHA"];
_array set [count _array, "VASIA"];
_array set [count _array, "DIMA"];
test    =
    {
        Private    ["_array","_i"];
        _i    =    0;
        _array = _this select 0;
        {
        
            if (_x == "VASIA") exitWith
                {
                    _array set ["VASIA",-1];
                    _array = _array - [-1];
                };
            _i    =    _i + 1;
        } forEach _array;
        diag_log(format["test _array: %1",_array]);
    };
[_array] call test;
diag_log(format["after call _array: %1",_array]);
 

*Элемент массива VASIA не будет удален. Хотя технически, все вроде верно. Так, что - если в цикле необходимо, что то проделывать с массивом - изменяя элементы по индексу, то конечный массив затронут не будет.

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


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

 

dayz_characterID глобальная переменная _playerUID локальная переменная. как они обьявляются ищи в коде и поймеш.

 

Тогда почему они в файлах fn_selfActions.sq с разных гайдов отличаются.

Всмысле в каком то испольщуется dayz_characterID, а вдругом _playerUID - хотя весь остальный код абсолютно идентичен.

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


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

Тогда почему они в файлах fn_selfActions.sq с разных гайдов отличаются.

Всмысле в каком то испольщуется dayz_characterID, а вдругом _playerUID - хотя весь остальный код абсолютно идентичен.

Ну тебе же ответили -

dayz_characterID - переменная глобальная. Она проинициализирована в каком то скрипте, при старте клиента(подключении его к серверу).

dayz_characterID = getPlayerUID player;

 

На сервере она отсутствует, т.к. сервер не телепат, и не пророк))) и не знает, кто и когда вздумает приконнектится, да и вообще, мб это будет новый игрок, но, т.к. сервер хранит массив playableUnits, ты можешь всегда перебором найти нужного тебе игрока.

{

 _playerUID = getPlayerUID _x;

....

}forEach playableUnit;

 

Так что со стороны сервера, тебе необходимо будет объявлять какую то локальную(временную) переменную, типа - _playerUID

И туда пихать UID игрока, что то с ним делать(обычно используют в качестве проверок и т.п.)

 

На клиенте, можешь юзать dayz_characterID. Однако, фиг его знает, мало ли, что, - можно подстраховаться, и получить UID, так же в локальную -

_playerUID = getPlayerUID player;

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: MySQL
      Есть ли способ, который защищает/шифрует файлы которые находиться в MPMissions? Что бы нельзя было просто зайти на сервер затем в папке \...\Local\ArmA 2 OA\MPMissionsCache\ скопировать настройки скрипты сервера? 
    • Автор: kapitoshkarus
      Помогите  !!!!  дело так  когда прописую себя в админку у меня во время игрі появляются  рывки подтормаживания ИТД  самое интересное чт окогда прописую 2рого 3тего  админа у них всё ох у игроков тоже всё в порядке ! причину нашол на 50 % если убрать филтры батлая из папки мисий то всё окк  ! (к серверу подключён локально через роутер ! )
    • Автор: misha123
      Подскажите пожалуйста что делать я устоновил античит но  у меня перестала работать улучшенная торговля подскажите что делать?
      Может надо устоногвить новые версии торговли или античита. (дайте ссылку на новые версии пожалуйста)
    • Автор: ATAMAH
      Всем привет!
      Может у кого-то было такие хаклоги? Что это означает?
      2016-09-03 04:58:19 infiSTAR HackLog | НИК_ИГРОКА (76561198198142678) | FNCbroken: playableUnits - []   |Instance: 24 - ArmA2OA163131129 - 28112014IAHAT339A
      Просто это пишет на тех даже людей что и не подумал-бы
    • Автор: azkora
      Ребят, поставил сборку, запустил сервер altis life но на нем не работает вид от третьего лица, только от первого, в чем может быть дело?
  • Наш выбор

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

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

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

Поддержка