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


Форум TeamX » Тех. поддержка » Скрипты (Все вопросы по скриптингу - сюда)

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] Все собщения

 
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
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] Все собщения


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