Edited by lopster102, 13 December 2016 - 22:09.
if (_CheckPlayer) then {
Best Answer 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 код, в котором, если игрок рядом, создаётся тачка, а потом зачем-то идёт ожидание, нет ли никого рядом... Т. е. у тебя на протяжении работы программы создаётся ОДИН поток, а тебе нужно столько, сколько маркеров, в каждом из которых будет независимая от других потоков проверка.
Go to the full post
#1
OFFLINE
Posted 13 December 2016 - 18:24
#2
OFFLINE
Posted 14 December 2016 - 17:23
Вам, Сударь, для начала, не плохо было бы научиться выкладывать код, более читаемым способом.
#3
OFFLINE
Posted 14 December 2016 - 17:59
+ опубликовать отчёт из RPT-файла.
#4
OFFLINE
Posted 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
Posted 19 December 2016 - 13:25
это сейчас на каком языке было? ![]()
не робит
тип город карч код шел
![]()
_playerInside у тебя где задается?
#6
OFFLINE
Posted 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;
};
};
Edited by lopster102, 20 December 2016 - 01:34.
#7
OFFLINE
Posted 21 December 2016 - 00:05
"проходишь" по всем маркерам, а проверку "пихаешь" в потоки с помощью .
#8
OFFLINE
Posted 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;
Edited by lopster102, 21 December 2016 - 00:49.
#9
OFFLINE
Posted 21 December 2016 - 01:14
P. S.
А если серьёзно, то тебе надо "Учиться, учиться и ещё раз учиться." ©
P. P. S.
Почитай (касательно spawn) и (касательно forEach).
Edited by Schatten, 21 December 2016 - 01:16.
#10
OFFLINE
Posted 21 December 2016 - 02:01
P. S.
А если серьёзно, то тебе надо "Учиться, учиться и ещё раз учиться." ©
P. P. S.
Почитай (касательно spawn) и (касательно forEach).
приведи пожалуйста простой пример чтобы работало не завсимо для всех игроков .....на примере если игрок респавнится появляется хинт игрок родился .... только чтобы работало независимо у каждого игрока лучше хинт если игрок убит..
Edited by lopster102, 21 December 2016 - 02:48.
#11
OFFLINE
Posted 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
КАРОЧ суть пацаны такая чтобы на карте каждый маркер готов был рожать тачки внутри круга когда в него попадает игрок Кто шарит подскажите пжлст как реализовать это .....(на примере)
Edited by lopster102, 21 December 2016 - 03:44.
#12
OFFLINE
Posted 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.
Вот ещё ссылка. Может, поможет.
Edited by Schatten, 21 December 2016 - 15:19.
#13
OFFLINE
Posted 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 в своем городе...как сделать это все независимым чтобы каждый игрок зайдя в город получил рес машины внутри круга и не ждал пока другой игрок выйдет из круга чтобы код начал ресать ему тачки в его городе...
Edited by lopster102, 29 December 2016 - 18:23.
#14
OFFLINE
Posted 29 December 2016 - 20:43 Best Answer
спавн работает только один раз для одного маркера по завершению условий и выходит что в момент когда один игрок внутри города то в другом городе игрок будет ждать реса машин пока первый игрок не завершит код внутри spawn в своем городе...
Это из-за
waitUntil {({isPlayer _x && _x distance _this < 100} count playableUnits) == 0};
внутри кода, запущенного с помощью spawn, что "мешает" ему завершиться, и из-за
waitUntil {scriptdone _script};
что "мешает" дальше работать программе. Всё работает так, как ты запрограммировал.
как сделать это все независимым чтобы каждый игрок зайдя в город получил рес машины внутри круга и не ждал пока другой игрок выйдет из круга чтобы код начал ресать ему тачки в его городе...
Я же написал:
"Пихаешь" с помощью spawn в поток бесконечную проверку: не находится ли какой-нибудь игрок в пределах маркера. Если находится, то создаёшь тачку и делаешь с ней всё что захочешь (например, "вешаешь" обработчик события).
А что у тебя? Бесконечный цикл, в котором на месте маркеров citymarkerN, N = 1..10, добавляются (бесконечное число раз!) с помощью BIS_fnc_addRespawnPosition позиции возрождения; запускается с помощью spawn код, в котором, если игрок рядом, создаётся тачка, а потом зачем-то идёт ожидание, нет ли никого рядом... Т. е. у тебя на протяжении работы программы создаётся ОДИН поток, а тебе нужно столько, сколько маркеров, в каждом из которых будет независимая от других потоков проверка.
Edited by Schatten, 29 December 2016 - 20:47.
#15
OFFLINE
Posted 29 December 2016 - 21:00
СПС все работает теперь!!
Edited by lopster102, 30 December 2016 - 15:11.
#16
OFFLINE
Posted 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 код, в котором, если игрок рядом, создаётся тачка, а потом зачем-то идёт ожидание, нет ли никого рядом... Т. е. у тебя на протяжении работы программы создаётся ОДИН поток, а тебе нужно столько, сколько маркеров, в каждом из которых будет независимая от других потоков проверка.
СПС все работает теперь!
Edited by lopster102, 30 December 2016 - 15:10.











