|
Ray
Модератор
Откуда: Донецк,Украина Регистрация: Янв. 2004
Всего: 746 сообщений
|
Сейчас меня запинают, закидают камнями.... Будут говорить, как ты до такого бреда додумался. И т.д. и т.п. Однако, мне как-то нужно было кое что сделать, и поступил я следующим образом. Для предметов нет аналога critter_p_proc. Поэтому я просто поставил вне видимости карты критера с скриптом, где был critter_p_proc. Ну и там уже всё проверял. Прикол был в том, что через import сделать нельзя было. Но потом к счастью вышла дока по лифтам.
----- Не бывает невозможных задач – бывает мало времени.
|
Отправлено: 17:27 - 18 Мая, 2005
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
to Ray Ещё и не такие извращения приходится иногда использовать to B A Z i K Если нужно организовать аналог critter_p_proc для объекта - воспользуйся timed_event_p_proc. Зацикленный таймер - самое оно. Запустить его можно из map_enter_p_proc скрипта объекта.
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 23:28 - 18 Мая, 2005
|
|
B A Z i K
Пользователь
Откуда: Киев, Украина Регистрация: Авг. 2004
Всего: 36 сообщений
|
2WG: >>Имхо, лучше связать эти две двери через экспортные вары-указатели. Да дверей то уже шесть... Эт прийдется 6 скриптов лепить + 3 спатиала. Теоретически можно конечно в скрипте двери еще чекать хекс, на каком она размещена, и обойтись одним скриптом для всех трех. Но... Надо пробовать по-другому. Карта выглядит очень похожей на карту входа\здания Собора из первого Фолла. Там переход организован не ахти, просто при юзании двери Чуза кидает на другой уровень карты. Но идею про вары-указатели намотаю на ус Если ничего не придумаем сделаю через эти самые вары. >>Вопрос остаётся с тем, как вызвать мап_апдейт. >>Попробуй fade_in/fade_out. >>Вроде бы после них апдейт вызывается... Что-то не получилось у меня добиться мап_апдейта :\ Также и с gfade_in\out. >>Глупый вопрос: зачем тебе переход между уровнями через спатиал? Почему не >>через exit grid? Имхо, через спатиал красивее выглядит Ничего более. Также в спатиал можно какую-то доп. проверку или изменение вары прилепить. Тот-же fade_in c аутом. Для данного случая получается гибче. 2Tehnokrat: А можно чуть подробней про зацикленный таймер?
----- B@ZiK was here!
|
Отправлено: 8:56 - 19 Мая, 2005
|
|
Pavel
Модератор
Откуда: Одесса Украина Регистрация: Май 2004
Всего: 368 сообщений
|
2 B A Z i K Слушай, а не легче ли завести гвару и использовать побитовую запись? если 1 уровень и bit_1==1 и координаты(х,у) то открыта, иначе закрыта. Будет 1 скрипт дверей и 3 спатиала: всего 4 скрипта. А вообще, если все двери на одной карте, то поставь криттера, сделай его невидимым, у него запусти проверку в critter_p_proc и поставь дверям видимость. Если нужно видна открытая дверь, не нужно - закрытая. Опять же все двери в одном скрипте. Будет 1 скрипт дверей, один нпс и 3 спатиала: всего 5 скриптов. А еще можно реализовать все в скрипте одной двери. если 1 уровень и открыли дверь, то анимируем поход чуза в точку (х,у), как только он пришел, то перносим чуза и дверь на другой этаж. Дверь остается такая как есть открытая или закрытая. Будет 1 скрипт дверей. Выбирай варианты
----- В жизни нельзя быть уверенным на 100%, ведь никогда не знаешь когда...
|
Отправлено: 12:52 - 19 Мая, 2005
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
2Tehnokrat [стучит головой о клавиатуру] Моя есть тупая. Моя пора на пенсию. Ё-моё! Это же так просто! 2B A Z i K Воспользуйся советом Технократа. А именно: в мап_энтер прописываешь вызов таймерного события, которое чекает двери и снова вызывает таймерное событие. Что-то типа рекурсии :). И у тебя получится нечто, вроде криттер_п_проц. Как подробнее сказать - не знаю :). Пример писать времени нет, но ты уж сам посмотри таймерные события ;).
|
Отправлено: 14:09 - 19 Мая, 2005
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
to Wasteland Ghost Фигня, тебе просто не встречалась данная задача "в деле" to B A Z i K Примерно так это выглядит: procedure map_enter_p_proc begin add_timer_event(self_obj, 1, 1); end procedure timed_event_p_proc begin if fixed_param==1 then begin /* Здесь пишем всё, что необходимо сделать с дверью*/ add_timer_event(self_obj, 1, 1); end end
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 23:51 - 19 Мая, 2005
|
|
B A Z i K
Пользователь
Откуда: Киев, Украина Регистрация: Авг. 2004
Всего: 36 сообщений
|
2Tehnokrat: Не поверишь, но изначально делал именно так Знаю-знаю, все так говорят после получения ответа, но у меня сие не вышло. Разве что в моем варианте в timed_event_p_proc не указал установку этого же таймерного события. Получается, что при заходе на второй уровень дверь открывается по истечении некоторого времени (вроде меньше чем время мап_апдейта). Граждане, а может вы мой скриптик хоть одним глазком посмотрите, я скроее всего апшипся, но вот где... Постю его сюды: procedure timed_event_p_proc begin if (fixed_param == 1) then begin if (map_var(2) == 1) then begin obj_open(self_obj); add_timer_event(self_obj, 1, 1); end end end procedure use_p_proc begin if (map_var(2) == 0) then begin set_map_var(2, 1); end else begin set_map_var(2, 0); end add_timer_event(self_obj, 1, 1); end procedure map_update_p_proc begin if (map_var(2) == 1) then begin obj_open(self_obj); end end procedure map_enter_p_proc begin add_timer_event(self_obj, 1, 1); if (map_var(2) == 1) then begin obj_open(self_obj); end end Сделать через critter_p_proc левого криттера, как говорили Рей и Павел получилось. Способ неплохой, рабочий, но при заходе на второй уровень карты дверь открывается где-то через секунду после захода игрока. Также иногда дверь при клике открывается, и тут же закрывается. Но это скорее всего чеки и их выполнения из разных скриптов просто накладываются друг на друга. З.Ы. Сорри, что отвечаю с периодичностью в 24 часа. С инетом траблы. Все, прекращаю оффтопить
----- B@ZiK was here!
|
Отправлено: 22:02 - 20 Мая, 2005
|
|
Tehnokrat
Модератор
Откуда: Новосибирск Регистрация: Окт. 2003
Всего: 489 сообщений
|
to B A Z i K Попробуй следующий скрипт прицепить к обоим дверям, только координаты правильные укажи: #define DOOR1_ELEV 0 // Уровень, на котором находится первая дверь #define DOOR1_TILE 24331 // Гекс, на котором находится первая дверь #define DOOR2_ELEV 1 // Уровень, на котором находится вторая дверь #define DOOR2_TILE 17112 // Гекс, на котором находится вторая дверь procedure start; procedure map_enter_p_proc; procedure use_p_proc; variable dpid; procedure map_enter_p_proc begin dpid := obj_pid(self_obj); end procedure use_p_proc begin if obj_is_open(self_obj) then begin if elevation(self_obj)==DOOR1_ELEV then obj_close(tile_contains_pid_obj(DOOR2_TILE, DOOR2_ELEV, dpid)); else obj_close(tile_contains_pid_obj(DOOR1_TILE, DOOR1_ELEV, dpid)); end else begin if elevation(self_obj)==DOOR1_ELEV then obj_open(tile_contains_pid_obj(DOOR2_TILE, DOOR2_ELEV, dpid)); else obj_open(tile_contains_pid_obj(DOOR1_TILE, DOOR1_ELEV, dpid)); end end (Отредактировал(а) Tehnokrat - 18:16 - 21 Мая, 2005)
----- Прошлое можно узнать, но нельзя изменить. Будущее можно изменить, но нельзя узнать.
|
Отправлено: 12:52 - 21 Мая, 2005
|
|
B A Z i K
Пользователь
Откуда: Киев, Украина Регистрация: Авг. 2004
Всего: 36 сообщений
|
Работаетъ Вообщем остановился на последнем варианте от Технократа. Получилось 3 скрипта для дверей и три спатиала. Относительно дешево и cердито. И никаких МВАР. Т.е. то чего и добивался. Всем спасибо за советы и идеи!
----- B@ZiK was here!
|
Отправлено: 8:16 - 23 Мая, 2005
|
|
Dar
Пользователь
Откуда: Воронеж Регистрация: Дек. 2004
Всего: 289 сообщений
|
Возник такой вопрос. Можно ли организовать чек на "применяемый" скил (воровство например) не стандартно в подъопытном критере, а в скрипте дюда, или еще как/где? Чтобы был один чек на 10-к критеров без перебивания их скриптов?
|
Отправлено: 20:34 - 23 Мая, 2005
|
|
|
|