Перейти к содержимому

DustBlue IPB Skin by CodeGame Networks

Вопрос по коду


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 Gromillla

Gromillla

    Пользователь

  • Проверенные
  • PipPip
  • 27 сообщений
  • ГородТаганрог

Отправлено 12 июля 2016 - 19:46

Доброго времени суток господа.
Вопрос в следующем:

есть скрипт логирования передачи денег в сейф, но в нём не отображается id сейфа в который кладут или из которого берут валюту (валюта sc 3.0)
вот код отвечающий за изъятие денег
BankDialogWithdrawAmount = {
private ["_amount","_bank","_wealth"];
_amount = parseNumber (_this select 0);
_bank = ZSC_CurrentStorage getVariable ["bankMoney", 0];
_wealth = player getVariable["cashMoney",0];
_vehicleType = typeOf ZSC_CurrentStorage;
_displayName = getText  (configFile >> "CfgVehicles" >> _vehicleType >> "displayName");

if (!isNull ZSC_CurrentStorage) then {

if (_amount < 1 or _amount > _bank) exitWith {
  cutText [format["Вы не можете снять больше, чем %1.",_displayName], "PLAIN DOWN"];
};
player setVariable["cashMoney",(_wealth + _amount),true];
ZSC_CurrentStorage setVariable["bankMoney",(_bank - _amount),true];

// логи передачи
PVDZE_atp = format["[Лог передачи денег]:%1 забрал %2 %3 в %4(Тип:%5 ID:%9) Координаты объекта:[%6,%7] GPS:(%8)", name player, [_amount] call BIS_fnc_numberText, CurrencyName, _displayName, _vehicleType, getDir ZSC_CurrentStorage, getPosATL ZSC_CurrentStorage, mapGridPosition (getPosATL ZSC_CurrentStorage)];
publicVariableServer 'PVDZE_atp';
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";

PVDZE_veh_Update = [ZSC_CurrentStorage,"gear"];
publicVariableServer "PVDZE_veh_Update";
cutText [format["Вы взяли %1 %2 из %3", [_amount] call BIS_fnc_numberText, CurrencyName,_displayName], "PLAIN DOWN"];
}else{
cutText ["Не удается получить доступ к храненилищу денег. Пожалуйста, попробуйте еще раз.", "PLAIN DOWN"];
};
};
пытался добавить _objectID
private ["_objectID","_amount","_bank","_wealth"];

PVDZE_atp = format["[Лог передачи денег]:%1 забрал %2 %3 в %4(Тип:%5 ID:%9) Координаты объекта:[%6,%7] GPS:(%8)", name player, [_amount] call BIS_fnc_numberText, CurrencyName, _displayName, _vehicleType, getDir ZSC_CurrentStorage, getPosATL ZSC_CurrentStorage, mapGridPosition (getPosATL ZSC_CurrentStorage), _objectID];
но выдаёт ID:any в rpt

что не так?

И сразу второй вопрос
Что значит  _obj = _this select 1; в коде что ниже.
Как я понимаю _obj = "это выбор 1" из private, т.е. выбрать _player
а при условии _obj нулевое, тогда _player выбрать значение 0 из private, т.е. выбрать _obj, что означает выбрать этот же _player (в чём логика?)
и соответственно у меня возник вопрос по данному выражению  
_objectID =  _obj getVariable['ObjectID', '0'];
я не могу понять его значение.

server_logUnlockLockEvent =
  {
   private['_obj','_player','_objectID','_objectUID','_pos','_worldspace','_log','_codeEntered','_doorCode','_status','_statusText'];
   _obj = _this select 1;
   if (!isNull _obj) then
   {
	_player =   _this select 0;
	_objectID =  _obj getVariable['ObjectID', '0'];
	_objectUID =  _obj getVariable['ObjectUID', '0'];
   
	_log = '';
	if (count _this > 3) then
	{
	 _codeEntered = _this select 3;
	 if (_codeEntered == 'NOTHING ENTERED') then {_player setDamage 5;_codeEntered = '-HACKER KILLED-';};
	 if (_codeEntered == '') then {_codeEntered = '000';};
	 _doorCode = _this select 4;
	 if (_codeEntered==_doorCode) then
	 {
	  _log = format['ДВЕРЬ ОТКРЫТА: ID:%1 UID:%2 ИГРОК: %3(%4) @%5 Код введен: %6',_objectID,_objectUID,(name _player),(getPlayerUID _player),(mapGridPosition _obj),_codeEntered];
	 }
	 else
	 {
	  _log = format['ПОПЫТКА ОТКРЫТЬ ДВЕРЬ: ID:%1 UID:%2 ИГРОК: %3(%4) @%5 Код введен: %6 | Правильный код: %7',_objectID,_objectUID,(name _player),(getPlayerUID _player),(mapGridPosition _obj),_codeEntered,_doorCode];
	 };
	}
	else
	{
	 _status =   _this select 2;
	 _statusText =  'ОТКРЫТ';
	 if (_status) then
	 {
	  [_obj, 'gear'] call server_updateObject;
	  _statusText = 'ЗАКРЫТ';
	 };
	 _log = format['СЕЙФ %6: ID:%1 UID:%2 ИГРОК: %3(%4) @%5', _objectID, _objectUID, (name _player), (getPlayerUID _player), (mapGridPosition _obj), _statusText];
	};
	diag_log ('[АнтиХак] - [Открытие/Закрытие]: '+_log);
	'logUnlockLock' callExtension (format['%1%2',_log,DAYZ_INSTANCE_LOGGING]);
   };
  };

Спасибо за хорошие ответы, если таковы будут.

#2 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 13 июля 2016 - 19:48

1. Вопросы глупые, и чтобы понять - надо хотя бы почитать, о переменной _this, да и вообще о переменных.
2. По переменной _this -
Когда вызывается функция, или процедура, в нее передаются аргументы(обычно передают внутри массив, чтобы была возможность передать несколько аргументов - []).
["аргумент1", 10] call MyFunction;
В MyFunction, эти аргументы принимаются, для дальнейшей работы
_arg0 = _this select 0; // Будет содержать строку "аргумент1"
_arg1 = _this select 1; // Будет содержать число 10

3. По ID
Для начала надо объявить переменную _id в секции привате
Private ["_id",..........];
затем в нее надо положить, какое то значение - то которое необходимо.
Объект который является хранилищем, тут указан как -  ZSC_CurrentStorage, соответственно, если у него есть какие то publicVariable - можно получить их, или вывести сам объект, если на сейфе который в данном скрипте - ZSC_CurrentStorage, "висит" переменная ObjectID, установленая через setVariable, то ее можно получить так:
_id = ZSC_CurrentStorage getVariable["ObjectID", "0"];
В _id будет либо установленная переменная, либо "0" - по умолчанию, если ее нет, или она реально равна нулю.

#3 Gromillla

Gromillla

    Пользователь

  • Проверенные
  • PipPip
  • 27 сообщений
  • ГородТаганрог

Отправлено 14 июля 2016 - 18:48

Просмотр сообщенияNoNameUltima (13 июля 2016 - 19:48) писал:

1. Вопросы глупые, и чтобы понять - надо хотя бы почитать, о переменной _this, да и вообще о переменных.
Читал по этой переменной на вики, с английским плохо, а переводчик переводит не особо. Одним словом не догнал, но ты объяснил доходчиво (как говорится для чайников :) ). Спасибо, теперь буду на капельку грамотней.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных