Обезвреживание бомбы
|
|
Fess | Дата: Вторник, 26.11.2013, 19:24 | Сообщение # 1 |
Добрый админ
Сообщений: 2339
Статус:
| Перенесено из другой темы.
|
|
| |
Daminant | Дата: Вторник, 26.11.2013, 19:25 | Сообщение # 2 |
Группа: Удаленные
| Fess привет, помоги если нетрудно написать скрипт на разминирование, т.е. используемтвой скрипт на спавн авиа бомбы, но необходимо чтоб он прекращался при выполнении друго скрипта с анимацией(грубо говоря, идет отсчет), боец подходит к взрывчатке из меню выбирает разминировать, перед ним на 5 сек появляется картинка с изображением бомбы, после чего он выбирает из нескольких вариантов что перерезать, и если он прав скрипт со взрывам прекращаеться)
|
|
| |
Fess | Дата: Вторник, 26.11.2013, 19:25 | Сообщение # 3 |
Добрый админ
Сообщений: 2339
Статус:
| Цитата Daminant ( ) боец подходит к взрывчатке из меню выбирает разминировать, перед ним на 5 сек появляется картинка с изображением бомбы, после чего он выбирает из нескольких вариантов что перерезать, и если он прав скрипт со взрывам прекращаеться) Обойдетесь, сударь! Слишком уж толсто будет. Кроме того, я не знаю, как реализовать клик мышкой по проводу.
|
|
| |
Daminant | Дата: Вторник, 26.11.2013, 19:25 | Сообщение # 4 |
Группа: Удаленные
| Спасибо и на этом, я не про картинку говорил, просто анимашка появляеться на 5 сек, чел ее запоминает, и потом из меню выбирает какой из проводов резать, режет правильный все ок, неправильный бумммм, вообщем сам скрипт я нашел, но вот проблема, я в этом понимаю от силы на 10% ((( Добавлено (24.11.2013, 19:00) --------------------------------------------- поможешь разобраться??? Код _hours = _this select 0; _minutes = _this select 1; _seconds = _this select 2; minedObject = _this select 3;
ISMINED = true; //Добавляет игроку действие на разминирование
_ac1 = player addaction ["Снять заряд","disarm.sqf", [], 6,true, true, "", "player distance minedObject < 1"];
//
while {ISMINED} do {
hintsilent composeText [parsetext format["<t size='1.5' align='left' color='#ff0000'>Timer = %1 : %2 : %3</t>",_hours, _minutes,_seconds]]; _seconds = _seconds -1; if (_hours > 0 and _minutes > 0 and _seconds == 0)then {_minutes = _minutes - 1;_seconds =_seconds + 60}; if (_hours == 0 and _minutes > 0 and _seconds == 0)then {_minutes = _minutes - 1;_seconds =_seconds + 60}; if (_minutes == 0 and _hours > 0 and _seconds == 0)then {_hours = _hours - 1;_minutes = _minutes + 59}; if (_minutes == 1 and _seconds == 0) then {_minutes = _minutes - 1;_seconds =_seconds + 60}; if (_hours == 1 and _minutes == 0) then {_hours = _hours - 1;_minutes = _minutes + 59};
sleep 1;
if (_hours <= 0 and _minutes <= 0 and _seconds < 11)then { hint composeText [parsetext format["<t size='1.5' align='left' color='#ff0000'>Time= %1 : %2 : %3</t>",_hours, _minutes,_seconds]];}; if (_hours == 0 and _minutes == 0 and _seconds == 0)exitWith { hintsilent composeText [parsetext format["<t size='2' align='center' color='#ff0000'>TIME OUT!</t>"]]; sleep 1; _bomb="bo_gbu12_lgb" createvehicle position minedObject; _bomb1="bo_gbu12_lgb" createvehicle position minedObject; _bomb2="bo_gbu12_lgb" createvehicle position minedObject; _bomb3="bo_gbu12_lgb" createvehicle position minedObject; _bomb4="bo_gbu12_lgb" createvehicle position minedObject; };
}; Код player removeaction (_this select 2);
ISMINED = false;
hintsilent composeText [parsetext format["<t size='2' align='center' color='#00ff00'>Bomb disarmed</t>"]];
|
|
| |
Fess | Дата: Вторник, 26.11.2013, 19:25 | Сообщение # 5 |
Добрый админ
Сообщений: 2339
Статус:
| Уважаемый Daminant, здесь ведется обратный отсчет до взрыва, если игрок не нажмет в меню "Обезвредить бомбу" до истечения срока, то на месте бомбы спавнится пять авиабомб.
|
|
| |
Daminant | Дата: Вторник, 26.11.2013, 19:25 | Сообщение # 6 |
Группа: Удаленные
| Fees, благодарю, с этим разобрался, теперь буду искать скрипт на появление картинки на экране на 5 сек, а потом связать их все вместе. Если можете что посоветовать, буду благодарен.
|
|
| |
Fess | Дата: Вторник, 26.11.2013, 19:25 | Сообщение # 7 |
Добрый админ
Сообщений: 2339
Статус:
| Цитата Daminant ( ) буду искать скрипт на появление картинки на экране на 5 сек, а потом связать их все вместе. Если можете что посоветовать, буду благодарен. Я бы вообще сделал список в меню действий
Перекусить красный Перекусить синий Перекусить желтый Перекусить зеленый!
Игрок должен последовательно в правильном порядке обрезать провода. В случае, если обезврежен лишний или неправильный провод, или перекусывание было в неверном порядке, происходит взрыв. А еще предварительно надо где-то заставить игрока прослушать лекцию о том, как обезвреживать такие бомбы. Или в брифинге миссии написать.
Можно упростить задачу и сделать обезвреживание всего за один перекус, но это слишком упростит задачу, я бы так делать не стал в своей миссии, люблю заставлять игрока страдать x))))
|
|
| |
Daminant | Дата: Вторник, 26.11.2013, 19:26 | Сообщение # 8 |
Группа: Удаленные
| да была и такая идея, правда немного в другом исполнении(обрезал не тот провод, таймер уменьшился, еще не тот и бумммм), правда не селен я в скриптах, вот ищу в нете что нить похожее, правда пока без вариантов(((
|
|
| |
Fess | Дата: Вторник, 26.11.2013, 19:26 | Сообщение # 9 |
Добрый админ
Сообщений: 2339
Статус:
| Цитата Daminant ( ) да была и такая идея, правда немного в другом исполнении(обрезал не тот провод, таймер уменьшился, еще не тот и бумммм), правда не селен я в скриптах, вот ищу в нете что нить похожее, правда пока без вариантов((( Вот, смотри, что сделал. В папку с миссией распакуй, затем создай какую-нибудь машину и пропиши у нее в инит
Код as = [obj, 60, 'RED', 'BLUE'] spawn FESS_fnc_bomb_disposal; // тут надо 2 провода перерезать или
Код as = [obj, 60, 'RED'] spawn FESS_fnc_bomb_disposal; // а тут один
|
|
| |
Daminant | Дата: Вторник, 26.11.2013, 19:26 | Сообщение # 10 |
Группа: Удаленные
| хз, не получается, возможно я что-то не правильно сделал или понял, пробовал дистанцию на приблежение к технике изменять, ничего не получилось, если нетрудно скинь по возможности миску с машиной как ты это видишь, попробую разобратся в чем проблема у меня
|
|
| |
Fess | Дата: Вторник, 26.11.2013, 19:26 | Сообщение # 11 |
Добрый админ
Сообщений: 2339
Статус:
| Уважаемый Daminant, он ругается на очень удобную процедуру removeAllActions , которая, к сожалению, добавлена была только в А3. Так что придется удалять действия по-старинке. Замени везде в коде строчку
Код removeAllActions minedObj; на
Код minedObj removeAction disp1; minedObj removeAction disp2; minedObj removeAction disp3; minedObj removeAction disp4;
|
|
| |
Fess | Дата: Вторник, 26.11.2013, 19:28 | Сообщение # 12 |
Добрый админ
Сообщений: 2339
Статус:
| Уважаемый Daminant, в функции выше бомба тикает бесконечно, цифра 60 просто для красоты передается. А вот вариант функции с обратным отсчетом, количество секунд задаешь сам
Код FESS_fnc_bomb_disposal = {
/* [_obj, _time, _trueWire] spawn FESS_fnc_bomb_disposal [object, 60, 'RED/YELLOW/BLUE/GREEN','RED/YELLOW/BLUE/GREEN'] spawn FESS_fnc_bomb_disposal */ minedObj = _this select 0; _time = if(count _this > 0) then {_this select 1} else {60}; _TrueWire1 = if(count _this > 2) then {_this select 2} else {'RED'}; _TrueWire2 = ''; if(count _this > 3) then {_TrueWire2 = _this select 3}; //Validate parameters if (((typeName minedObj) != (typeName player)) or ((typeName _time) != (typeName 2))) exitWith {["FESS_fnc_Bomber ERROR, check input data"] call BIS_fnc_error;}; if (_TrueWire2 != '' && _TrueWire1 == _TrueWire2) exitWith {["FESS_fnc_Bomber ERROR, check your wires color"] call BIS_fnc_error;}; CuttedWire = ''; disp1 = minedObj addaction ["Перекусить <t color='#FF0000'>красный</t> провод","FESS_fnc_bomb_disposal\cutted_red.sqs", [], 10, false, true, "", "player distance _target < 3"]; disp2 = minedObj addaction ["Перекусить <t color='#00FF00'>зеленый</t> провод","FESS_fnc_bomb_disposal\cutted_green.sqs", [], 9, false, true, "", "player distance _target < 3"]; disp3 = minedObj addaction ["Перекусить <t color='#FFFF00'>желтый</t> провод","FESS_fnc_bomb_disposal\cutted_yellow.sqs", [], 8, false, true, "", "player distance _target < 3"]; disp4 = minedObj addaction ["Перекусить <t color='#2973CE'>синий</t> провод","FESS_fnc_bomb_disposal\cutted_blue.sqs", [], 7, false, true, "", "player distance _target < 3"]; while {CuttedWire == ''} do { minedObj say ["TikTak",5]; sleep 2; _time = _time - 1; hintsilent composeText [parsetext format["<t size='1.5' align='center' color='#ff0000'>До взрыва <br/>%1</t>",_time]]; if (_time == 0) exitWith { sleep 1; /* ВЗРЫВ */ if(minedObj distance player < 20) then {titleCut ["","BLACK IN",2];}; removeAllActions minedObj; _bomb = "bo_gbu12_lgb" createvehicle getPos minedObj; _bomb setVelocity [0,0,-200]; }; }; // если первый перекушенный провод был НЕправильным if(CuttedWire != _TrueWire1) exitWith { /* ВЗРЫВ */ if(minedObj distance player < 20) then {titleCut ["","BLACK IN",2];}; removeAllActions minedObj; _bomb = "bo_gbu12_lgb" createvehicle position minedObj; }; // если первый перекушенный провод был правильным if(CuttedWire == _TrueWire1) then { // если задан второй провод if(_TrueWire2 != '') then { CuttedWire = ''; while {CuttedWire == ''} do { minedObj say "TikTak"; sleep 2; _time = _time - 1; hintsilent composeText [parsetext format["<t size='1.5' align='center' color='#ff0000'>До взрыва <br/>%1</t>",_time]]; if (_time == 0) exitWith { sleep 1; /* ВЗРЫВ */ if(minedObj distance player < 20) then {titleCut ["","BLACK IN",2];}; removeAllActions minedObj; _bomb = "bo_gbu12_lgb" createvehicle getPos minedObj; _bomb setVelocity [0,0,-200]; }; }; if(CuttedWire != _TrueWire2) exitWith { /* ВЗРЫВ */ if(minedObj distance player < 20) then {titleCut ["","BLACK IN",2];}; removeAllActions minedObj; _bomb = "bo_gbu12_lgb" createvehicle getPos minedObj; _bomb setVelocity [0,0,-200]; }; if(CuttedWire == _TrueWire2) exitWith { /* ОБЕЗВРЕЖЕНО */ removeAllActions minedObj; hint composeText [parsetext format["<t size='1.5' align='center'>Бомба обезврежена</t>",_time]]; }; }; if (_TrueWire2 == '') exitWith {
/* ОБЕЗВРЕЖЕНО */ removeAllActions minedObj; hint composeText [parsetext format["<t size='1.5' align='center'>Бомба обезврежена</t>",_time]]; }; }; }; Если у тебя A2, а не A3, то замени removeAllActions minedObj; на четыре другие строчки, как я писал выше.
|
|
| |
Daminant | Дата: Вторник, 26.11.2013, 20:33 | Сообщение # 13 |
Группа: Удаленные
| Fess, я понял что я нуб, у меня не работает не во 2 не в 3 арме данный скрипт, будет возможность скинь миской, а то я непонимаю некоторые вещи. для 2 армы нужно заменить 4 строки, а в скрипте их 6. для 3 армы вроде бомбы авиа"bo_gbu12_lgb" нет, или я ошибаюсь.
|
|
| |
Fess | Дата: Вторник, 26.11.2013, 23:25 | Сообщение # 14 |
Добрый админ
Сообщений: 2339
Статус:
| Цитата Daminant ( ) для 2 армы нужно заменить 4 строки, а в скрипте их 6. Ты невнимательно прочитал, я же сказал заменить каждую строчку на эти четыре строчки.
Цитата Daminant ( ) для 3 армы вроде бомбы авиа"bo_gbu12_lgb" нет, или я ошибаюсь. Существует^^
Держи для А3 миссию http://www.mediafire.com/downloa....sal.rar
|
|
| |
Daminant | Дата: Среда, 27.11.2013, 04:52 | Сообщение # 15 |
Группа: Удаленные
| ссыль приватная, нет возможности скачать (
|
|
| |
Fess | Дата: Среда, 27.11.2013, 13:39 | Сообщение # 16 |
Добрый админ
Сообщений: 2339
Статус:
| Цитата Daminant ( ) ссыль приватная, нет возможности скачать ( Поправил
|
|
| |
Daminant | Дата: Среда, 27.11.2013, 22:17 | Сообщение # 17 |
Группа: Удаленные
| есть маленький нюанс, в оригинальном скрипте время идет со скоростью 1 сек на таймере 2 сек в игре, при изменении показателей 1=1 сек, накладываеться звук тиканья и получаеться какафония звука, по истечении таймера иконка времени остается висеть в углу с надписью до взрыва осталось 0 секунд. Можно ли как нить изменить это? а так все очень хорошо и красиво, мне нравится тебе огромное спасибо за идею и разработку. Можешь показать где в скрипте написано какие провода за что отвечают, в оригинале синий а потом желтый для обезвреживания, где их можно изменить для разнообразия?
|
|
| |
Fess | Дата: Четверг, 28.11.2013, 16:59 | Сообщение # 18 |
Добрый админ
Сообщений: 2339
Статус:
| Цитата Daminant ( ) есть маленький нюанс, в оригинальном скрипте время идет со скоростью 1 сек на таймере 2 сек в игре, при изменении показателей 1=1 сек, накладываеться звук тиканья и получаеться какафония звука... Можно ли как нить изменить это? Потому что я записывал двухсекундный сэмпл. Можешь вообще звук тиканья убрать.
Если хочешь, в строке 29 и 65 поменяй с _time = _time - 1; на _time = _time - 2; тогда 1 секунда в игре будет равна 1-ой секунде на таймере (на самом деле она не будет в точности равна, а лишь примерно, ибо сам скрипт тоже съедает некоторую долю миллисекунд на выполнение). Но тогда в игре от счетчика будет отниматься по 2 секунды за раз, это немножко некрасиво.
Цитата Daminant ( ) по истечении таймера иконка времени остается висеть в углу с надписью до взрыва осталось 0 секунд Везде после /* ВЗРЫВ */ и /* ОБЕЗВРЕЖЕНО */ поставь hintsilent "";
Цитата Daminant ( ) Можешь показать где в скрипте написано какие провода за что отвечают, в оригинале синий а потом желтый для обезвреживания, где их можно изменить для разнообразия? Правильная комбинация проводов задается в строчке 109
Код as = [obj, 60, 'BLUE','YELLOW'] spawn FESS_fnc_bomb_disposal; Цвета проводов могут быть следующие : BLUE, RED, YELLOW, GREEN Цвета проводов не должны повторяться (в скрипте я вроде предусмотрел эту ситуацию, должно вылететь с ошибкой) Можно указывать только один цвет, тогда бомба будет обезврежена после перекуса первого провода
|
|
| |