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


Фотография

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 код, в котором, если игрок рядом, создаётся тачка, а потом зачем-то идёт ожидание, нет ли никого рядом... Т. е. у тебя на протяжении работы программы создаётся ОДИН поток, а тебе нужно столько, сколько маркеров, в каждом из которых будет независимая от других потоков проверка.

Перейти к сообщению


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

#1 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 сообщений
  • Откуда:mscw

Отправлено 13 December 2016 - 18:24

Здров Пцаны! где накосячил скажите пожалуйста..
 
 
 
_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];
 
                        _players = [];
               _players     pushback   _playerInside ;
[_x, false] remoteExec ["allowDamage", _x];
 
 
["Respawn Vhicle in Pavlovo","hint",true,true] call BIS_fnc_MP;}}forEach playableUnits;
 
 
 
 
 
 
 
 
 
 
 
           {if (_CheckPlayer) then {
 
                      _CheckPlayer = false;
count = _players;
waitUntil {({isPlayer _x && _x  distance _pos < 100}count playableUnits)  == 0} ;
 
             ["Player leave Pavlovo","hint",true,true] call BIS_fnc_MP;
 
                     _respawnVehicleOn = true;     все что красным не работает уже ......в чем проблемка объясните ПжлСт Пцны..
};}forEach _players;
 
              
         };
 };

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

  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 14 December 2016 - 17:23

Вам, Сударь, для начала, не плохо было бы научиться выкладывать код, более читаемым способом.


  • 0

#3 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1792 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 14 December 2016 - 17:59

+ опубликовать отчёт из RPT-файла.


  • 0

#4 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 сообщений
  • Откуда:mscw

Отправлено 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 метров


  • 0

#5 OFFLINE   dos622

dos622

    Ст. Прапорщик

  • Пользователи
  • 702 сообщений

Отправлено 19 December 2016 - 13:25

это сейчас на каком языке было? :)

не робит

тип город карч код шел

:)

 

_playerInside у тебя где задается?


  • 0

#6 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 сообщений
  • Откуда:mscw

Отправлено 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

  • 0

#7 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1792 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 21 December 2016 - 00:05

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

"проходишь" по всем маркерам, а проверку "пихаешь" в потоки с помощью

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.


  • 0

#8 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 сообщений
  • Откуда:mscw

Отправлено 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

  • 0

#9 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1792 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 21 December 2016 - 01:14

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


 
P. S.
А если серьёзно, то тебе надо "Учиться, учиться и ещё раз учиться." ©
 
P. P. S.
Почитай

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

(касательно spawn) и

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

(касательно forEach).


Сообщение отредактировал Schatten: 21 December 2016 - 01:16

  • 0

#10 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 сообщений
  • Откуда:mscw

Отправлено 21 December 2016 - 02:01

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


 
P. S.
А если серьёзно, то тебе надо "Учиться, учиться и ещё раз учиться." ©
 
P. P. S.
Почитай

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

(касательно spawn) и

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

(касательно forEach).

приведи пожалуйста простой пример чтобы работало не завсимо для всех игроков .....на примере если игрок респавнится появляется хинт игрок родился .... только чтобы работало независимо у каждого игрока лучше хинт если игрок убит..


Сообщение отредактировал lopster102: 21 December 2016 - 02:48

  • 0

#11 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 сообщений
  • Откуда:mscw

Отправлено 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

  • 0

#12 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1792 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 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

  • 0

#13 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 сообщений
  • Откуда:mscw

Отправлено 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

  • 0

#14 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1792 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 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

  • 1

#15 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 сообщений
  • Откуда:mscw

Отправлено 29 December 2016 - 21:00

СПС все работает теперь!!


Сообщение отредактировал lopster102: 30 December 2016 - 15:11

  • 0

#16 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 сообщений
  • Откуда:mscw

Отправлено 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

  • 0




Яндекс.Метрика