|
|
Модератор форума: Slon |
Форум РЕДАКТОР - ArmA 2 Operation Arrowhead Вопрос - ответ Нубам типа меня не заходить |
Нубам типа меня не заходить |
› Воскресенье
› 07.04.2013
› 00:10
› Сообщение #
Задавая наводящие ни фига не выходит так что решил выложить проблему целиком
текст 3 файлов и папки аддона: publicEH.sqf Код if(isServer){ "dayzSetFuel" addPublicVariableEventHandler {(_this select 1) spawn local_setFuel}; } refuel.sqf Код private["_vehicle","_curFuel","_newFuel","_timeLeft"]; _vehicle = cursorTarget; _canSize = getNumber(configFile >> "cfgMagazines" >> "ItemJerrycan" >> "fuelQuantity"); _configVeh = configFile >> "cfgVehicles" >> TypeOf(_vehicle); _capacity = getNumber(_configVeh >> "fuelCapacity"); _nameType = getText(_configVeh >> "displayName"); _curFuel = ((fuel _vehicle) * _capacity); _newFuel = (_curFuel + _canSize); if (_newFuel > _capacity) then {_newFuel = _capacity}; _newFuel = (_newFuel / _capacity); player removeMagazine "ItemJerrycan"; player addMagazine "ItemJerrycanEmpty"; player playActionNow "Medic"; _dis=10; _sfx = "refuel"; [player,_sfx,0,false,_dis] call dayz_zombieSpeak; [player,_dis,true,(getPosATL player)] spawn player_alertZombies; sleep 6; dayzSetFuel = [_vehicle,_newFuel]; dayzSetFuel spawn local_setFuel; publicVariable "dayzSetFuel"; cutText [format[localize "str_player_05",_nameType,_canSize], "PLAIN DOWN"]; sleep 1; call fnc_usec_medic_removeActions; r_action = false; local_setFuel.sqf Код private["_qty","_vehicle"]; _vehicle = _this select 0; _qty = _this select 1; _vehicle setFuel _qty; скорее всего я не прав но мне казалось всё происходит следующим образом: 1 файл publicEH добавляет паблик хендлер к паблик переменной dayzSetFuel 2 на клиенте я начинаю заправлять машину вызвав запуск refuel где производятся расчёты, затем определяется dayzSetFuel переменная с записью в неё значений, вызывается local_setFuel который на клиенте вызвавшем refuel устанавливает для текущей машины текущее значение бензина локально и изменяет publicVariable dayzSetFuel для активации хендлера из publicEH 3 хендлер выполняет тот же local_setFuel не понимаю зачем ??? есть предположение что (isServer) заставляет изменить данные бензина в машине именно на сервере , то есть без второго выполнения local_setFuel бензин в машине прибавится только для клиента но не глобально на сервере, я прав? Первый вопрос как это работает? Как это может блокировать выполнение setFuel 1 на сервере? Я добавляю Код 1 addEventHandler("fuel",{(_this select 0) setFuel 1;}") 2 addEventHandler("fired",{(_this select 0) setVehicleAmmo 1;}") 3 addEventHandler("fuel",{(_this select 0) setDamage 1;}") 4 addEventHandler("fired",{(_this select 0) setDamage 1;}") Вопрос второй почему не работают стандартные сетты как обойти эти запреты ? Ну и хотелось бы всё таки решить хотя бы с бензином проблему , она наиболее острая. Заранее благодарен за помощь. |
› Воскресенье
› 07.04.2013
› 13:55
› Сообщение #
(_this select 1) spawn local_setFuel - это вызов функции а не файла,
описания функции local_setFuel невижу Цитата 1 addEventHandler("fuel",{(_this select 0) setFuel 1;}") написалбы S1 хотябы, или чернила экономиШ? |
› Воскресенье
› 07.04.2013
› 14:11
› Сообщение #
Как? Описание local_setFuel в 3 блоке кода, а 1 2 3 4 это не имена это варианты чтобы было понятно какой addEvent работает а какой нет, я ниже по вариантам пояснял, в реале там запись типа
_unit addEventHandler("fuel",{(_this select 0) setFuel 1;}") но сами команды каким то образом блокируются, ни setFuel ни setVehicleAmmo не работают, даже при попытке их применения к машине в момент её создания после получения данных из базы. не могли бы вы пояснить по принципу работы связки этих скриптов и что нужно поменять чтобы выполнение этих функций было возможно с сервера, на данный момент они работают только с клиента. Сообщение отредактировал smcrim - Воскресенье, 07.04.2013, 14:15
|
› Воскресенье
› 07.04.2013
› 14:18
› Сообщение #
в третьем блоке текст файла, функции описываются так
local_setFuel = { текст функции }; _unit addEventHandler("fuel",{(_this select 0) setFuel 1;}") - а в остальных строках что? надо показывать текст который неработает, как тут разобраться почему? если это все назначается одному юниту то записать надо так _unit addEventHandler("fuel",{(_this select 0) setFuel 1; (_this select 0) setDamage 1;}") _unit addEventHandler("fired",{(_this select 0) setVehicleAmmo 1; (_this select 0) setDamage 1;}") обработчик одного события назначается один раз, второе назначение сотрёт предидущее. |
› Воскресенье
› 07.04.2013
› 15:32
› Сообщение #
если запись будет _unit addEventHandler("fuel",{(_this select 0) setFuel 1; (_this select 0) setDamage 1;}") , то при срабатывании хендлера машина взорвётся но не дозаправится, действия setFuel и setVehicleAmmo не работают, то что сотрёт это ясно, я меняю либо либо, либо заправка либо взпыв, просто когда я пытался установить торливо в 1 при его расходе, код не работал и чтобы убедится работает ли сам хендлер я заменил сет фуел на дамаг и машина взорвалась, что дало понять что выполнение setFuel блокируется в отличии от сет дамаг, так же как и сет вехикл аммо.
код файла local_setFuel полный, больше в этом файле нет ни чего |
| |||
| |||
Чат сайта |