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


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

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 ] Все собщения

 
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
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 ] Все собщения


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