|
Oleg1969
Пользователь
Откуда: Саратов Регистрация: Май 2006
Всего: 168 сообщений
|
Цитата: Quote: from Wasteland Ghost on 12:39 - 10 Июня, 2006 [quote]ну вообщето переменной присваивается значение стоящее в скобках... Ну ладно это особенности компилятора...
Вообще-то, батенька, это не переменная, это макроимя. Читай ФАК или любую доку по препроцессорам. Означает сей факт, что если ты напишешь #define MY_DEF HORRIGAN_KOZEL То везде вместо MY_DEF препроцессор (компилятор тут отдыхает и умывает руки, не его это вотчина) подставит HORRIGAN_KOZEL. Препроцессор не выполняет вычислений, поэтому скобки в макросах - это хороший тон.[/quote] МММММ Мадам (или модемуазель?), под словом "компилятор" я имел ввиду общее понятие, с препроцессором, без него, мне без разници ... И если я могу чему-то присвоить какое-то значение то это для меня тоже переменная и неважно чем задается ей это значение... Давайте не будем цепляться к словам... Вот так вот, поэтому я и говорю, что это особенности компилятора и я их на данный момент изучаю... Спасибо всем кто откликнулся на мой вопрос, на данный момент он решон с помощью автора скрипта, в чем ему большое СПАСИБО! ЗЫ: Кстати у меня глупая особенность сначала изучить доступные доки и факи...
----- За сим прощаюсь, Олег.
|
Отправлено: 12:26 - 11 Июня, 2006
|
|
Oleg1969
Пользователь
Откуда: Саратов Регистрация: Май 2006
Всего: 168 сообщений
|
Посмотрите в чем дело: Не хочет работать скрипт сирены компилятор крмпилит без проблем, логика не нарушена, а не работает... Или работает но не предсказуемо, когда захочет а не сразу после установленного бита.... /* Ñêðèïò ñèðåíû */ #include "D:\Fallout2\mod\scripts\headers\define.h" #include "D:\Fallout2\mod\scripts\HEADERS\command.h" #define NAME SCRIPT_TOKLAXON //1307 procedure start; procedure map_update_p_proc; procedure start begin end procedure map_update_p_proc begin //variable item; if (gvar_bit(GVAR_RESERVED_VAR59,bit_1)==1) then begin if obj_pid(self_obj) == PID_NS_LIGHT then create_object(PID_NS_FLASHING_LIGHT,tile_num(self_obj),elevation(self_obj)); else create_object(PID_EW_FLASHING_LIGHT,tile_num(self_obj),elevation(self_obj)); end end Вот такие пироги...
----- За сим прощаюсь, Олег.
|
Отправлено: 16:21 - 16 Июня, 2006
|
|
Alchemist
Модератор
Откуда: Арзамас-17 Регистрация: Дек. 2004
Всего: 298 сообщений
|
На сколько я могу видеть, не все кодовые блоки begin ... end корректно закрыты. Попробуй так и сравни поведение (если правильно понял, куда относится else): procedure map_update_p_proc begin //variable item; if (gvar_bit(GVAR_RESERVED_VAR59,bit_1)==1) then begin if obj_pid(self_obj) == PID_NS_LIGHT then begin create_object(PID_NS_FLASHING_LIGHT,tile_num(self_obj),elevation(self_obj)); end else begin create_object(PID_EW_FLASHING_LIGHT,tile_num(self_obj),elevation(self_obj)); end end end
----- /// What'ya be sain'? Vault 100+? We need nothing o'that!
|
Отправлено: 16:35 - 16 Июня, 2006
|
|
Oleg1969
Пользователь
Откуда: Саратов Регистрация: Май 2006
Всего: 168 сообщений
|
МММ Все закрыто правильно... Сколько бегинов столько и эндов... А еще мона почитать доку и увидеть, что бегин в условиях применяется только для обьединения в блоки... А причину я нашол. В маппере не работает, а вот в игре как часы заработало все...! В обчем маппер для тестов неподходит, кстати в доке это тоже написано... Грабли... Всем спасибо.
----- За сим прощаюсь, Олег.
|
Отправлено: 14:31 - 17 Июня, 2006
|
|
Oleg1969
Пользователь
Откуда: Саратов Регистрация: Май 2006
Всего: 168 сообщений
|
Такой вопрос возник... Как долго могут выполняться скрипты (с какой скоростью) и что на это влияет? А то уже запарился, на простейших вещах то сразу срабатывает, то с тааааким запаздыванием, что ОЙ!!! И второй вопрос, пользуюсь у себя стандартными макросами по установке, проверке и снятию бит... На сколько сии операции медленны и имеет ли смысл перейти на обычные переменные для ускорения процесса? Битами у меня флаги на карте выставляются...
----- За сим прощаюсь, Олег.
|
Отправлено: 1:54 - 19 Июня, 2006
|
|
Alan Killenger
Пользователь
Откуда: Россия, Ижевск Регистрация: Июль 2004
Всего: 404 сообщения
|
Цитата: Как долго могут выполняться скрипты (с какой скоростью) и что на это влияет? А то уже запарился, на простейших вещах то сразу срабатывает, то с тааааким запаздыванием, что ОЙ!!!
Не знаю, у меня только однажды было серьезное запаздывание. Во время диалога мой скрипт читал каждую реплику, высеивая из нее нужную подстроку. Т.е. было сравнение строк нехилое количество раз. Хотя чисто интуитивно я всегда делаю привязки по времени к каким-нибудь обработчикам.
Цитата: И второй вопрос, пользуюсь у себя стандартными макросами по установке, проверке и снятию бит... На сколько сии операции медленны и имеет ли смысл перейти на обычные переменные для ускорения процесса? Битами у меня флаги на карте выставляются...
ИМХО bwor и bwand реализованиы как раз or и and, установка бита - установка числа, проверка наличия бита - bwand и сравнение двух чисел. Плохо только если делаешь shr, shl. А так - забей, пиши как удобно, на фоне общей неэффективности это все незаметно.
----- hit me, nail me, make me god
|
Отправлено: 16:00 - 19 Июня, 2006 | ИСПРАВЛЕНО: Alan Killenger - 17:01 - 19 Июня, 2006
|
|
Sokil
Пользователь
Откуда: Омск Регистрация: Март 2004
Всего: 120 сообщений
|
Ребята, подскажите, что я делаю не так? Какие-то проблемы с бартером. По плану персонаж предлагает Чузу купить плоскогубцы. Если тот соглашается, идет вызов режима бартера. Далее, если герой выменивает плоские, персонаж должен сказать что-то типа "Вот и молодец", если не вменивает - "Почему ты передумал?" В реале же получается так, что фраза персонажа вообще не появляется. Когда Чуз покупает плоскогубцы, в режиме бартера появляется фраза "Хорошая сделка, бла-бла-бла." По выходе из бартера она не стирается никоим образом. И реплика персонажа просто не появляется (вообще-то в истории диалога она присутствует, но вот на дисплее не высвечивается). Пытался делать по-всякому, результат нулевой. Вот кусок кода:
Цитата:
procedure inf_trade begin variable item; item:=create_object(PID_MULTI_TOOL,1,1); add_obj_to_inven(self_obj, item); gdialog_barter; call trade_bufer; end procedure trade_bufer begin Reply(" "); if (obj_is_carrying_obj_pid(dude_obj,PID_MULTI_TOOL)) then call Node030; else call Node031; end procedure Node030 begin Reply(mstr(780)); NOption(783,Node999,1); end procedure Node031 begin Reply(mstr(781)); NOption(782,Node999,1); end
Что я делаю неправильно, и как сделать правильно ;) ? Чтобы закончил торговать - получил адекватную фразу?
|
Отправлено: 23:04 - 23 Июня, 2006
|
|
Oleg1969
Пользователь
Откуда: Саратов Регистрация: Май 2006
Всего: 168 сообщений
|
ЭЭЭ Я не спец, пока только начинающий, но судя по всему у тебя выдается стандартная фраза при бартере попробуй на входе в процедуру поставить script_overrides; может поможет... Это я пока понял из описания процесса... Счас попытаюсь посмотреть сам скрипт...
----- За сим прощаюсь, Олег.
|
Отправлено: 8:28 - 24 Июня, 2006
|
|
Sokil
Пользователь
Откуда: Омск Регистрация: Март 2004
Всего: 120 сообщений
|
Проблема решена. Пусть, не слишком изящно, но решена. Просто в процедуре, следующей после выхода из бартера, добавил опцию [Далее]. После этого диалог отображается нормально. Кстати, в вышеприведенном примере, в процедуре trade_bufer не работал условный переход (где проверялось наличие плоскогубцев в инвентаре Чуза). Когда я перенес его в другую процедуру, все заработало. Такое впечатление , что после выхода из бартера половина скриптовых команд не отрабатывается.
|
Отправлено: 13:07 - 24 Июня, 2006
|
|
Akkella
Пользователь Регистрация: Авг. 2006
Всего: 175 сообщений
|
И снова здрасте.) Такой вопрос. Стоят три НПС и напротив них еще двое. Чузен подбегает к троим и ведет диалог с одним из них, один из вариантов троица нападает на Чузена. (Они прописаны в одной команде) Вопрос: Как сделать так, чтоб два напротив напали на троих. (Они как бы враги и пользуются ситуевиной)
|
Отправлено: 7:36 - 15 Авг., 2006
|
|
|
|