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
Sign in to follow this  
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;
	};

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

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts








  • 0
 

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

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

 

 

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

 

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

Share this post


Link to post
Share on other sites
  • 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 не будет удален. Хотя технически, все вроде верно. Так, что - если в цикле необходимо, что то проделывать с массивом - изменяя элементы по индексу, то конечный массив затронут не будет.

Share this post


Link to post
Share on other sites
  • 0

 

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

 

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

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

Share this post


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

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
Sign in to follow this  

  • Similar Content

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