Сообщение отредактировал lopster102: 13 December 2016 - 22:09

if (_CheckPlayer) then {

Лучший Ответ Schatten , 29 December 2016 - 20:43
спавн работает только один раз для одного маркера по завершению условий и выходит что в момент когда один игрок внутри города то в другом городе игрок будет ждать реса машин пока первый игрок не завершит код внутри spawn в своем городе...
Это из-за
waitUntil {({isPlayer _x && _x distance _this < 100} count playableUnits) == 0};
внутри кода, запущенного с помощью spawn, что "мешает" ему завершиться, и из-за
waitUntil {scriptdone _script};
что "мешает" дальше работать программе. Всё работает так, как ты запрограммировал.
как сделать это все независимым чтобы каждый игрок зайдя в город получил рес машины внутри круга и не ждал пока другой игрок выйдет из круга чтобы код начал ресать ему тачки в его городе...
Я же написал:
"Пихаешь" с помощью spawn в поток бесконечную проверку: не находится ли какой-нибудь игрок в пределах маркера. Если находится, то создаёшь тачку и делаешь с ней всё что захочешь (например, "вешаешь" обработчик события).
А что у тебя? Бесконечный цикл, в котором на месте маркеров citymarkerN, N = 1..10, добавляются (бесконечное число раз!) с помощью BIS_fnc_addRespawnPosition позиции возрождения; запускается с помощью spawn код, в котором, если игрок рядом, создаётся тачка, а потом зачем-то идёт ожидание, нет ли никого рядом... Т. е. у тебя на протяжении работы программы создаётся ОДИН поток, а тебе нужно столько, сколько маркеров, в каждом из которых будет независимая от других потоков проверка.
Перейти к сообщению
#1
OFFLINE
Отправлено 13 December 2016 - 18:24
#2
OFFLINE
Отправлено 14 December 2016 - 17:23
Вам, Сударь, для начала, не плохо было бы научиться выкладывать код, более читаемым способом.
#3
OFFLINE
Отправлено 14 December 2016 - 17:59
+ опубликовать отчёт из RPT-файла.
#4
OFFLINE
Отправлено 14 December 2016 - 19:25
Вам, Сударь, для начала, не плохо было бы научиться выкладывать код, более читаемым способом.
да мне кусочек сам посебе нужен весь код не обязательно читать
вот этот
waitUntil {({isPlayer _x && _x distance _pos < 100}count playableUnits) == 0} ; вот тут не робит !точнее я хочу сделать чтобы пацаны ( _x setVariable ["_playerInside", true, true] которые превратились в переменную _playerInside после выхода из моего круга там маркер такой на карте ("pavlolvo") тип город карч код шел дальше но на строчке waitUntil {({isPlayer _x && _x distance _pos < 100}count playableUnits) == 0} ; он не идет дальше даже когда челы (_playerInside) вышли за круг за 100 метров
#5
OFFLINE
Отправлено 19 December 2016 - 13:25
это сейчас на каком языке было?
не робит
тип город карч код шел
_playerInside у тебя где задается?
#6
OFFLINE
Отправлено 19 December 2016 - 23:19
это сейчас на каком языке было?
не робит
тип город карч код шел
_playerInside у тебя где задается?
Да крч пцаны я все уже сделал только Научите пжлст как мне вот этот скрипт применить для всех маркеров которые я в редакторе по карте раставлю ! чтобы не зависимо зайдя в любой тригер(маркер) срабатывал этот код ТУТ крч говоря если в кольцо зашел ресаеца машинка и если ее не завели и игрок покинул кольцо она удаляется и поновой все зацикленно
_respawnVehicleOn = true; while {_respawnVehicleOn } do { if (_respawnVehicleOn ) then { _respawnVehicleOn = false; _pos = getMarkerPos "pavlovo"; waitUntil {({isPlayer _x && _x distance _pos < 100} count playableUnits) > 0}; _CheckPlayer = true; {if (isPlayer _x && _x distance _pos < 100) then { _x setVariable ["_playerInside", true, true]; [_x, false] remoteExec ["allowDamage", _x]; ["Respawn Vhicle in Pavlovo","hint",true,true] call BIS_fnc_MP; }}forEach allplayers; _cars = []; for "_i" from 0 to 1 step 1 do { _car = createVehicle ["CUP_B_HMMWV_Unarmed_USMC",[ _pos select 0,(_pos select 1) + 5], [], 5, "None"]; _car addEventHandler ["Engine", {(_this select 0) setVariable ["_cars_player", true, true]; (_this select 0) removeEventHandler ["Engine", _thisEventHandler]}]; _cars pushBack _car; }; if (_CheckPlayer) then { _CheckPlayer = false ; waitUntil {({isPlayer _x && _x distance _pos < 100}count playableUnits) == 0 }; ["Player leave Pavlovo","hint",true,true] call BIS_fnc_MP; _respawnVehicleOn = true; }; {if !(_x getVariable ["_cars_player", false]) then {deleteVehicle _x;}}forEach _cars; }; };
Сообщение отредактировал lopster102: 20 December 2016 - 01:34
#7
OFFLINE
Отправлено 21 December 2016 - 00:05
"проходишь" по всем маркерам, а проверку "пихаешь" в потоки с помощью .
#8
OFFLINE
Отправлено 21 December 2016 - 00:46
"проходишь" по всем маркерам, а проверку "пихаешь" в потоки с помощью .
так чтоли ?
while {_respawnVehicleOn } do { if (_respawnVehicleOn ) then { _markers = [здесь название всех маркеров]; _respawnVehicleOn = false; { _pos = getMarkerPos _x;}foreach _markers; ---- так будет робить? 0 spawn { waitUntil {({isPlayer _x && _x distance _pos < 100} count playableUnits) > 0}; _CheckPlayer = true; {if (isPlayer _x && _x distance _pos < 100) then { _x setVariable ["_playerInside", true, true]; [_x, false] remoteExec ["allowDamage", _x]; ["Respawn Vhicle in Pavlovo","hint",true,true] call BIS_fnc_MP; }; }}forEach allplayers;
Сообщение отредактировал lopster102: 21 December 2016 - 00:49
#9
OFFLINE
Отправлено 21 December 2016 - 01:14
P. S.
А если серьёзно, то тебе надо "Учиться, учиться и ещё раз учиться." ©
P. P. S.
Почитай (касательно spawn) и (касательно forEach).
Сообщение отредактировал Schatten: 21 December 2016 - 01:16
#10
OFFLINE
Отправлено 21 December 2016 - 02:01
P. S.
А если серьёзно, то тебе надо "Учиться, учиться и ещё раз учиться." ©
P. P. S.
Почитай (касательно spawn) и (касательно forEach).
приведи пожалуйста простой пример чтобы работало не завсимо для всех игроков .....на примере если игрок респавнится появляется хинт игрок родился .... только чтобы работало независимо у каждого игрока лучше хинт если игрок убит..
Сообщение отредактировал lopster102: 21 December 2016 - 02:48
#11
OFFLINE
Отправлено 21 December 2016 - 03:16
_markers = [getmarkerpos"маркер1",getmarkerpos"маркер1",getmarkerpos"маркер1",.....и так далее]; if (isServer) then { 0 = _markers spawn { waitUntil {player == player}; { _script = [_x] spawn { здесь мой код вставляю??? _respawnVehicleOn = true; while {_respawnVehicleOn } do { if (_respawnVehicleOn ) then { _respawnVehicleOn = false; waitUntil {({isPlayer _x && _x distance _markers < 100} count playableUnits) > 0} ["Respawn Vhicle in Pavlovo","hint",true,true] call BIS_fnc_MP; _cars = []; for "_i" from 0 to 1 step 1 do { _car = createVehicle ["CUP_B_HMMWV_Unarmed_USMC",[_markers select 0,ВОТ тут как бытЬ?(_markers select 1) + 5], [], 5, "None"]; _car addEventHandler ["Engine", {(_this select 0) setVariable ["_cars_player", true, true]; (_this select 0) removeEventHandler ["Engine", _thisEventHandler]}];//////_markers[] как он поймет что именно тот в который игрок зашел у меня там более 10 маркеров в массиве будет? _cars pushBack _car; }; это цикл for закрываю sleep 3650; {if !(_x getVariable ["_cars_player", false]) then {deleteVehicle _x;}}forEach _cars; _respawnVehicleOn = true; }; это then закрываю }; это цикл while }; это spawn }forEach playableunits; так? и все это вставляю в initserver.sqf
КАРОЧ суть пацаны такая чтобы на карте каждый маркер готов был рожать тачки внутри круга когда в него попадает игрок Кто шарит подскажите пжлст как реализовать это .....(на примере)
Сообщение отредактировал lopster102: 21 December 2016 - 03:44
#12
OFFLINE
Отправлено 21 December 2016 - 15:14
приведи пожалуйста простой пример чтобы работало не завсимо для всех игроков .....на примере если игрок респавнится появляется хинт игрок родился .... только чтобы работало независимо у каждого игрока лучше хинт если игрок убит..
Пожалуйста, со стороны игрока запускаешь этот код:
player addEventHandler [ "Killed", { _killer = _this select 1; (format ["О ужас, случилась катастрофа, игрока %1 убил говнюк %2!", name player, name _killer]) remoteExec ["hint", [0, -2] select isDedicated]; true } ];
Только твой запрос никак не связан с твоей задачей.
КАРОЧ суть пацаны такая чтобы на карте каждый маркер готов был рожать тачки внутри круга когда в него попадает игрок Кто шарит подскажите пжлст как реализовать это .....(на примере)
Алгоритм:
1 "Проходишь" по всем маркерам в цикле forEach.
2 "Пихаешь" с помощью spawn в поток бесконечную проверку: не находится ли какой-нибудь игрок в пределах маркера. Если находится, то создаёшь тачку и делаешь с ней всё что захочешь (например, "вешаешь" обработчик события).
Я приводил ссылки с примерами, осталось разобраться и "соединить" эти кусочки вместе.
P. S.
Вот ещё ссылка. Может, поможет.
Сообщение отредактировал Schatten: 21 December 2016 - 15:19
#13
OFFLINE
Отправлено 29 December 2016 - 18:03
while {true} do { for "_i" from 1 to 10 do { _pos = getMarkerPos ("citymarker" + (str _i)); [west, [_pos select 0,_pos select 1,(_pos select 2)+150] ] call BIS_fnc_addRespawnPosition; [east, _pos ] call BIS_fnc_addRespawnPosition; _script = _pos spawn { if (({_x distance _this < 100}count playableUnits) > 0) then { _cars = []; _car = createVehicle ["CUP_B_HMMWV_Unarmed_USMC",[ _this select 0,(_this select 1) + 5], [], 5, "None"]; _car setDir (floor (random 360)); _car addEventHandler ["Engine", {(_this select 0) setVariable ["_cars_player", true, true]; (_this select 0) removeEventHandler ["Engine", _thisEventHandler]}]; _cars pushBack _car; ["Respawn Vehicle in City","hint",true,true] call BIS_fnc_MP; waitUntil {({isPlayer _x && _x distance _this < 100}count playableUnits) == 0 }; ["Player leave City","hint",true,true] call BIS_fnc_MP; {if !(_x getVariable ["_cars_player", false]) then {deleteVehicle _x;}}forEach _cars; }; }; waitUntil {scriptdone _script}; }; };
ЗДРОВ Пацаны!спавн работает только один раз для одного маркера по завершению условий и выходит что в момент когда один игрок внутри города то в другом городе игрок будет ждать реса машин пока первый игрок не завершит код внутри spawn в своем городе...как сделать это все независимым чтобы каждый игрок зайдя в город получил рес машины внутри круга и не ждал пока другой игрок выйдет из круга чтобы код начал ресать ему тачки в его городе...
Сообщение отредактировал lopster102: 29 December 2016 - 18:23
#14
OFFLINE
Отправлено 29 December 2016 - 20:43 Лучший Ответ
спавн работает только один раз для одного маркера по завершению условий и выходит что в момент когда один игрок внутри города то в другом городе игрок будет ждать реса машин пока первый игрок не завершит код внутри spawn в своем городе...
Это из-за
waitUntil {({isPlayer _x && _x distance _this < 100} count playableUnits) == 0};
внутри кода, запущенного с помощью spawn, что "мешает" ему завершиться, и из-за
waitUntil {scriptdone _script};
что "мешает" дальше работать программе. Всё работает так, как ты запрограммировал.
как сделать это все независимым чтобы каждый игрок зайдя в город получил рес машины внутри круга и не ждал пока другой игрок выйдет из круга чтобы код начал ресать ему тачки в его городе...
Я же написал:
"Пихаешь" с помощью spawn в поток бесконечную проверку: не находится ли какой-нибудь игрок в пределах маркера. Если находится, то создаёшь тачку и делаешь с ней всё что захочешь (например, "вешаешь" обработчик события).
А что у тебя? Бесконечный цикл, в котором на месте маркеров citymarkerN, N = 1..10, добавляются (бесконечное число раз!) с помощью BIS_fnc_addRespawnPosition позиции возрождения; запускается с помощью spawn код, в котором, если игрок рядом, создаётся тачка, а потом зачем-то идёт ожидание, нет ли никого рядом... Т. е. у тебя на протяжении работы программы создаётся ОДИН поток, а тебе нужно столько, сколько маркеров, в каждом из которых будет независимая от других потоков проверка.
Сообщение отредактировал Schatten: 29 December 2016 - 20:47
#15
OFFLINE
Отправлено 29 December 2016 - 21:00
СПС все работает теперь!!
Сообщение отредактировал lopster102: 30 December 2016 - 15:11
#16
OFFLINE
Отправлено 30 December 2016 - 15:09
спавн работает только один раз для одного маркера по завершению условий и выходит что в момент когда один игрок внутри города то в другом городе игрок будет ждать реса машин пока первый игрок не завершит код внутри spawn в своем городе...
Это из-за
waitUntil {({isPlayer _x && _x distance _this < 100} count playableUnits) == 0};внутри кода, запущенного с помощью spawn, что "мешает" ему завершиться, и из-за
waitUntil {scriptdone _script};что "мешает" дальше работать программе. Всё работает так, как ты запрограммировал.
как сделать это все независимым чтобы каждый игрок зайдя в город получил рес машины внутри круга и не ждал пока другой игрок выйдет из круга чтобы код начал ресать ему тачки в его городе...
Я же написал:
"Пихаешь" с помощью spawn в поток бесконечную проверку: не находится ли какой-нибудь игрок в пределах маркера. Если находится, то создаёшь тачку и делаешь с ней всё что захочешь (например, "вешаешь" обработчик события).
А что у тебя? Бесконечный цикл, в котором на месте маркеров citymarkerN, N = 1..10, добавляются (бесконечное число раз!) с помощью BIS_fnc_addRespawnPosition позиции возрождения; запускается с помощью spawn код, в котором, если игрок рядом, создаётся тачка, а потом зачем-то идёт ожидание, нет ли никого рядом... Т. е. у тебя на протяжении работы программы создаётся ОДИН поток, а тебе нужно столько, сколько маркеров, в каждом из которых будет независимая от других потоков проверка.
СПС все работает теперь!
Сообщение отредактировал lopster102: 30 December 2016 - 15:10