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


Фотография

Как сделать проверку на новых юнитов


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

#1 OFFLINE   slight64

slight64

    Рядовой

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

Отправлено 01 April 2015 - 00:45

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

И так моя цель - сделать так чтобы на всех юнитов, будь, то боты или игроки этот скрипт работал не зависимо от того были они в начале миссии или появились по ходу. Использовать планирую в мультиплеере. 

 

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

killcount_hunt = 0; 

hint format ["%1", killcount_hunt];
kill_count_fnc = {
killcount_hunt = killcount_hunt + 1;
hint format ["%1", killcount_hunt];
if (killcount_hunt > 5 ) then {
[] execVM "hunt\huntkiller.sqf";
killcount_hunt = 0;
};
};

Kill_happend = {
_victim = _this select 0;
_killer = _this select 1;
_victim_n = name _victim;
_killer_n = name _killer;
hint format ["%1 killd by %2", _victim_n, _killer_n];
if (_killer == player) then {
call kill_count_fnc;
};
};

{
if (_x isKindOf "man" ) then {_x addMPEventHandler ["MPKilled",{_this call Kill_happend}]};
} forEach allUnits;
 

  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 01 April 2015 - 15:38

if (_x isKindOf "man" ) then {_x addMPEventHandler ["MPKilled",{_this call Kill_happend}]};
} forEach allUnits;

Вы понимаете, что применяя это

_x addMPEventHandler ["MPKilled",{_this call Kill_happend}]

будет вызван такой эффект?

 

При кончине некого юнита, всем ботам и не ботам будет добавляться очередной EventHandler. И так при каждой смерти.

И таким образом вы навешаете на каждого юнита штук этак по 20 одного и того же  события, каждое из которых начнёт плодить себе подобных, цепная реакция, вы делаете атомную бомбу?

 

ЗЫ

Чёт я не о том)

{
    if (_x isKindOf "man" ) then {
       _x addMPEventHandler ["MPKilled",{_this call Kill_happend}]};
       _x addEventHandler ["Respawn",{_this execVM "имяЭтогоСкрипта.sqf"}]};
    };
} forEach allUnits;

Сообщение отредактировал SteelRat: 01 April 2015 - 15:56

  • 0

#3 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 02 April 2015 - 18:16

ЗЫ_2

И всё таки цепная реакция.


  • 0

#4 OFFLINE   slight64

slight64

    Рядовой

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

Отправлено 02 April 2015 - 23:37

ЗЫ_2
И всё таки цепная реакция.

А как лучше все это дело правильно организовать? Не делая атомной бомбы:)
  • 0

#5 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 03 April 2015 - 14:27

{
    if (_x isKindOf "man" ) then {
       _x addMPEventHandler ["MPKilled",{_this call Kill_happend}];
       _x addEventHandler ["Respawn",{
	     (_this select 0) addMPEventHandler ["MPKilled",{_this call Kill_happend}];
	}];
    };
} forEach allUnits;

  • 0

#6 OFFLINE   slight64

slight64

    Рядовой

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

Отправлено 07 April 2015 - 00:19

Изменил я свой скрипт и он не работает на дедикатед сервере. В эдиторе пока не пробовал. Спавню бота, убиваю, ничего не случается, счетчик не считает. 

 

killcount_hunt = 0;


kill_count_fnc = {
hint format ["%1",killcount_hunt];
killcount_hunt = killcount_hunt + 1;
hint format ["%1", killcount_hunt];
if (killcount_hunt > 5 ) then {


[] execVM "hunt\huntkiller.sqf";
killcount_hunt = 0;
    };
};


Kill_happend = {
_victim = _this select 0;
_killer = _this select 1;
_victim_n = name _victim;
_killer_n = name _killer;
//hint format ["%1 killd by %2", _victim_n, _killer_n];
if (_killer == player) then {
call kill_count_fnc;
        };
};




{
    if (_x isKindOf "man" ) then {
       _x addMPEventHandler ["MPKilled",{_this call Kill_happend}];
       _x addEventHandler ["Respawn",{
    (_this select 0) addMPEventHandler ["MPKilled",{_this call Kill_happend}];
}];
    };
} forEach allUnits;

 


Сообщение отредактировал slight64: 07 April 2015 - 00:37

  • 0

#7 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 07 April 2015 - 18:24

Вообще, я хотел обратить ваше внимание раньше, но не стал делать это в виду мне не ведомых ваших идей).

Нужен счётчик в МР? Этим должен заниматься сервер, и сервер же должен отправлять клиентам требуемую информацию.


  • 0

#8 OFFLINE   slight64

slight64

    Рядовой

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

Отправлено 07 April 2015 - 21:53

Вообще на сколько я понял MP это глобальный эвент, поэтому думаю, что он не нужен, я все еще на самом начале скриптописания и прочитав тему посвященную введению во все это дело, я на основе скриптов других людей сделал вот такой счетчик (который все правильно считает и запускает другой скрипт, если я убил 6 ботов, но только которых поставил при запуске миссии, а не заспавнил в процессе) и тут я встал с вопросом, а как же сделать так, чтобы это работало на новых юнитов(появившихся ботов или приконнектившихсчя игроков). И у меня есть мысль, что мой скрипт не совсем годится или что этот скрипт можно доработать. Поэтому я решил попросить помощь у более опытных :) Конечно идеально сделать скрипт который на серверной части будет детектить и далее работать с этим клиентом, но я опять же в силу неопытности не могу понять как это все сделать. 


Сообщение отредактировал slight64: 07 April 2015 - 22:04

  • 0

#9 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 07 April 2015 - 23:33

Ботов, которых вы создаёте через миссию, спавнит сервер, и если это выделенный(dedicated) сервер, то ваш евент респавна должен прикручиваться на серверной стороне, то есть там кто является владельцем объекта. А владельцем бота будет сервер, до тех пор пока не подключится какой ни будь игрок на управление этим ботом.


 

И у меня есть мысль, что мой скрипт не совсем годится

Если вас это не оскорбит), то да, не годится.

Инициализировать юнитов в одном файле, оптом, не очень хорошая идея.

Но это не страшно), все проблемы решает практика, но это если не лень, и есть на это время.


  • 0




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