» TeamX (Архив Форума)«


Форум TeamX » Тех. поддержка » Установка ловушек (Возможно ли?)

Переход по темам
<< Пред. След. >>
Единственная страница этой темы

 
Lancelot
Пользователь

Регистрация: Окт. 2004

Всего: 8 сообщений

Я тут подумал, а нельзя ли изменить навык "Ловушки" или он прошит в движок? Есть ли возможность изменить его так - что когда используешь его на себя, под игроком появляется ловушка. Которую гипотетически можно будет использовать для минирования врагов бегущих на чузена.

Отправлено: 16:34 - 6 Апр., 2005
Perceptron
Модератор

Откуда: Ivanovo
Регистрация: Май 2003

Всего: 502 сообщения

Предполагаю, что скриптом можно. ИМХО.

-----
Into The New Year - With A New Vision!
Документация по скриптам, туториал по скриптам, вопросы по скриптам, FAQ по моддингу, "Утилиты", fallmods-tutor.

Отправлено: 20:58 - 6 Апр., 2005
Tehnokrat
Модератор

Откуда: Новосибирск
Регистрация: Окт. 2003

Всего: 489 сообщений

Вообще-то ловушки наступательного (ногой наступательного ) действия ставятся в редакторе карт и во время игры поставлены быть не могут. Но с помощью скриптов можно сделать нечто подобное, однако гиммор ещё тот... хотя лично я не пробовал.

-----
Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.

Отправлено: 23:59 - 6 Апр., 2005
Perceptron
Модератор

Откуда: Ivanovo
Регистрация: Май 2003

Всего: 502 сообщения

Да, точно, ловушки спатиал-скриптом реализуются. Динамически его вроде не привяжешь. Так что нельзя.

-----
Into The New Year - With A New Vision!
Документация по скриптам, туториал по скриптам, вопросы по скриптам, FAQ по моддингу, "Утилиты", fallmods-tutor.

Отправлено: 3:42 - 7 Апр., 2005
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Можно. Достаточно немного включить воображение. Я просто когда-то об этом думал, да руки не дошли. Может потом возьмусь. А идея довольно проста. Что нам мешает создавать не spatial script, а обычный предмет. Сделать его вид на земле под вид ловушки. Обозначить спец. действия (при попадании перс. в радиус уничтожать объект и производить взрыв). В инвентарь не класть, можно придумать что-нибудь. Как устанавливать тоже можно придумать.

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 11:48 - 7 Апр., 2005
Tehnokrat
Модератор

Откуда: Новосибирск
Регистрация: Окт. 2003

Всего: 489 сообщений

А ещё предупреждать чузена при приближении к ловушке, проверять навык "Ловушки" при попытке разминирования и соответственно реагировать на это действие. Теоретически выглядит неплохо, осталось только придумать наилучший способ установки и маскировки.

-----
Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.

Отправлено: 23:33 - 7 Апр., 2005
Dar
Пользователь

Откуда: Воронеж
Регистрация: Дек. 2004

Всего: 289 сообщений

Цитата:

Можно. Достаточно немного включить воображение. Я просто когда-то об этом думал, да руки не дошли. Может потом возьмусь. А идея довольно проста. Что нам мешает создавать не spatial script, а обычный предмет. Сделать его вид на земле под вид ловушки. Обозначить спец. действия -при попадании перс. в радиус уничтожать объект и производить взрыв). В инвентарь не класть, можно придумать что-нибудь. Как устанавливать тоже можно придумать.




Интересует как вычислить этот "радиус" и нанести любому критеру в его пределах повреждения, если ловушка радиоуправляемая, а тогда ведь
critter_dmg(source_obj, random(10, 40), 0 bwor 256 bwor 512);
не прокатит.

Отправлено: 8:39 - 20 Янв., 2006 | ИСПРАВЛЕНО: Dar - 8:41 - 20 Янв., 2006
Wasteland Ghost
Маленькое Злое Привидение

Откуда: Россия, Самара
Регистрация: Дек. 2002

Всего: 2251 сообщение

Да, главной проблемой станет вычисление всех объектов, которым надо наносить дамаг. В принципе, функции перебора в Фоле есть. Но десять раз в секунду... Это будет слайдшоу .

Отправлено: 13:12 - 20 Янв., 2006
Dar
Пользователь

Откуда: Воронеж
Регистрация: Дек. 2004

Всего: 289 сообщений

Так все таки можно подробнее?

Я попытался так:

variable pid_Critter := 16777216;
variable N := 0;
................
................
while (N < 473) do begin
pid_Critter :=  pid_Critter +1;
IF (tile_distance_objs(self_obj, tile_contains_pid_obj(tile_num(self_obj), dude_obj, pid_Critter)) <= 6 )   then begin
critter_dmg(tile_contains_pid_obj(self_obj, dude_obj, pid_Critter), random(80, 200), 0 bwor 256 bwor 512);
end
IF (tile_distance_objs(self_obj, tile_contains_pid_obj(tile_num_in_direction(tile_num(self_obj), 0, 1), dude_obj, pid_Critter)) <= 6 )   then begin
critter_dmg(tile_contains_pid_obj(self_obj, dude_obj, pid_Critter), random(80, 200), 0 bwor 256 bwor 512);
end
IF (tile_distance_objs(self_obj, tile_contains_pid_obj(tile_num_in_direction(tile_num(self_obj), 1, 1), dude_obj, pid_Critter)) <= 6 )   then begin
critter_dmg(tile_contains_pid_obj(self_obj, dude_obj, pid_Critter), random(80, 200), 0 bwor 256 bwor 512);
end
IF (tile_distance_objs(self_obj, tile_contains_pid_obj(tile_num_in_direction(tile_num(self_obj), 2, 1), dude_obj, pid_Critter)) <= 6 )   then begin
critter_dmg(tile_contains_pid_obj(self_obj, dude_obj, pid_Critter), random(80, 200), 0 bwor 256 bwor 512);
end
IF (tile_distance_objs(self_obj, tile_contains_pid_obj(tile_num_in_direction(tile_num(self_obj), 3, 1), dude_obj, pid_Critter)) <= 6 )   then begin
critter_dmg(tile_contains_pid_obj(self_obj, dude_obj, pid_Critter), random(80, 200), 0 bwor 256 bwor 512);
end
IF (tile_distance_objs(self_obj, tile_contains_pid_obj(tile_num_in_direction(tile_num(self_obj), 4, 1), dude_obj, pid_Critter)) <= 6 )   then begin
critter_dmg(tile_contains_pid_obj(self_obj, dude_obj, pid_Critter), random(80, 200), 0 bwor 256 bwor 512);
end
IF (tile_distance_objs(self_obj, tile_contains_pid_obj(tile_num_in_direction(tile_num(self_obj), 5, 1), dude_obj, pid_Critter)) <= 6 )   then begin
critter_dmg(tile_contains_pid_obj(self_obj, dude_obj, pid_Critter), random(80, 200), 0 bwor 256 bwor 512);
end
N := N + 1;
end
...........
Но эффекта ни какого в смысле  урона критерам.
Где я затупил?

PS Взрывчатка - это анимированный  сценари обьект.

Отправлено: 23:40 - 20 Янв., 2006 | ИСПРАВЛЕНО: Dar - 23:41 - 20 Янв., 2006
Wasteland Ghost
Маленькое Злое Привидение

Откуда: Россия, Самара
Регистрация: Дек. 2002

Всего: 2251 сообщение

Название темы изменено на более подходящее.

Отправлено: 10:05 - 21 Янв., 2006
Dar
Пользователь

Откуда: Воронеж
Регистрация: Дек. 2004

Всего: 289 сообщений

Радиоуправляемая взрывчатка: нанесение повреждений.:)
Самые интересные моменты.

Первое никаких +199, -199 -1,+1 -200, +200 и других при вычислении тайла.
только (tile_num_in_direction((tile_num(self_obj)), X, Y))!!!
Пример:
if ( tile_contains_obj_pid((tile_num_in_direction((tile_num(self_obj)), 0, 1)),  elevation(self_obj), pid_Critter_2) == true ) then begin
critter_dmg(tile_contains_pid_obj(tile_num_in_direction((tile_num(self_obj)), 0, 1), elevation(self_obj), pid_Critter_2), random(1000, 5000), 6 bwor 256 bwor 6);
give_exp_points(500);
display_msg("Yes, +500 exp");
end
и так на все направления от 0 до 5 включительно и потребный радиус.


Второе нужно что перебор вариантов(Pid критеров ) шел быстро.
Примечание:( у меня с радиус в три гекса)
Можно конечно critter_p_proc - хотя она слабовата заметно для 800 разных пидов на с обсчетом только одного гекса,
но при этом вы можете Сделать разную по времени проигрыша анимацию. Взрываться кролики будут немного не одновременно - но на мину пойдет.
+++ -сы вы эту мину сможете растреливать(сам не пробывал, но критер-мина кажется мне реальной).
procedure timed_event_p_proc - не наш выбор жутко медленно
максимальная скорость один тик:
add_timer_event(self_obj, 1, 1);
при
add_timer_event(self_obj, 0, 1); или add_timer_event(self_obj,1/X, 1)
мапер вешает систему почти намертво ( ну диспечер я могу вызвать(в WIN2000про)но бестолку его вызов) и остается и тогда "Cемь бед один ответ - Reset".

Что ж пойдем другим путем.
Пример.
procedure tile_damage_1
begin
/*
if ( tile_contains_obj_pid(tile_num(self_obj),  elevation(self_obj), pid_Critter_2) == true ) then begin
critter_dmg(tile_contains_pid_obj(tile_num(self_obj), elevation(self_obj), pid_Critter_2), random(1000, 5000), 6 bwor 256 bwor 6);
give_exp_points(500);
display_msg("Yes, +500 exp");
end
*/
               if (pid_Critter_2 == 16777500) then begin
               set_local_var(2, 0);
               set_local_var(3, 0);
               pid_Critter_2 :=0 ;
               add_timer_event(self_obj, 2, 2);
               end else
    if (pid_Critter_2 < 16777500) then begin
    set_local_var(3, pid_Critter_1 + 1);
    pid_Critter_2:= pid_Critter_1 + pid_Critter;
    display_msg("T_1N=" + pid_Critter_2);
    call tile_damage_1;
    end
end
т.е самовызов процедуры - ух скорость перебора такова что непозволяет в итоге сделать скриншот
т.е уменя есть скриншоты до и после - но нет самых красивых "в процессе".  
Заметим  что максимальный PID в 16777500 (диапазон от 16777217  до 16777500 включительно ) не случаен а именно я не смог в рамках одной процедуры взять значение
большее 16777558 - обычно стоп происходит на 16777555.

Ладушки создаем
procedure tile_damage_2
begin
end
Вызываем ее из procedure tile_damage_1 и обламываемся.
Мы неизбежно упремся в стоп на 16777555-16777558 Pid.
[далее следует самая непреводимая игра слов в любом спектре]

Я разрулил это так из
procedure tile_damage_1 вызываем procedure timed_event_p_proc через add_timer_event(self_obj, 8, 2); (восемь тиков это не обязательно)
из нее промежуточную из промежуточной уже tile_damage_2 в двух процедурах между tile_damage_1 иtile_damage_2
обнулял var-ы.
Пример:
if (fixed_param == 2) then begin
rm_timer_event(self_obj);
               set_local_var(2, 0);
               set_local_var(3, 0);
               pid_Critter_2 :=0 ;
call dinamit_destroy; у меня промежуточная и дестрояшая ОбьекТ.

Возможно вторая промежуточная не нужна и достаточно только procedure timed_event_p_proc - не проверял.
Но вот наоборот без первой вызываемой add_timer_event(self_obj, 8, 2); то есть с вызовом напрямую второй(там обнуляем вары), а затем procedure tile_damage_2 облом, также облом при попытке обнулить в рамках одной процедуры.
и тогда мы преспокойно досчитаем уже от 16777500 до 16777800, а может и побольше - не пробывал.

Вот такой вот шаманизм. :-)

Отправлено: 10:29 - 25 Янв., 2006 | ИСПРАВЛЕНО: Dar - 10:32 - 25 Янв., 2006
 

Переход по темам
<< Пред. След. >>
Единственная страница этой темы


Powered by Ikonboard 2.1.9 RUS
Modified by RU.Board Team
© 2000 Ikonboard.com