|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
get_critter_stat(obj_ptr,STAT_gender); 0 - Male 1 - Female Проще пользовать макросы из command.h: dude_is_male и dude_is_female соответственно. >>Обыдно - пропадает возможность для создания нормального ИИ криттерам. Ну-у-у, не скажи. Есть тут у нас в тиме подходики... Наработочки, так сказать... Всё руки не доходят форумцев порадовать, да и аудитории особой, похоже, нет... Если сильно попросите... :-)
|
Отправлено: 14:28 - 16 Ноября, 2004
|
|
pal
Пользователь
Откуда: Estonia, Narva Регистрация: Янв. 2003
Всего: 42 сообщения
|
Друзья скриптологи. кто нибудь может обьяснить значеть ф-ции ScriptAction. вот встретил в первом Фоле такой кусок кода: if ScriptAction=2 then begin Heal(Player,-100); Write('Hurt dude'; end; что эта проверка значит ???? заранее спасибо
|
Отправлено: 15:13 - 16 Ноября, 2004
|
|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
Из Доки: int script_action - возвращает действие, активировавшее этот скрипт. В скриптах Fallout2 не используется Аргументы: нет Возвращаемое значение: номер стандартного обработчика (см. DEFINE.H, раздел Script Procedure Types) --------------------------------------------- // script.h: Script Procedure Types // #define no_proc (0) #define start_proc (1) #define spatial_proc (2) #define description_proc (3) #define pickup_proc (4) #define drop_proc (5) #define use_proc (6) #define use_obj_on_proc (7) #define use_skill_on_proc (8) #define use_ad_on_proc (9) #define use_disad_on_proc (10) #define talk_proc (11) #define critter_proc (12) #define combat_proc (13) #define damage_proc (14) #define map_enter_proc (15) #define map_exit_proc (16) #define create_proc (17) #define destroy_proc (18) #define barter_init_proc (19) #define barter_proc (20) #define look_at_proc (21) #define timed_event_proc (22) #define map_update_proc (23) --------------------------------------------- На пальцах: если твоя процедура вызвана из spartial_p_proc (а она вызывается когда дюд пробегает рядом), то ему сносят хиты.
|
Отправлено: 15:37 - 16 Ноября, 2004
|
|
pal
Пользователь
Откуда: Estonia, Narva Регистрация: Янв. 2003
Всего: 42 сообщения
|
To Raven: если не трудно поясни смысл следующей конструкции if (GVAR[613]=9103 OR GVAR[613]=9102) then begin end else begin end; end; по мне так она смысла не несёт а почти везде есть
|
Отправлено: 17:24 - 16 Ноября, 2004
|
|
Alan Killenger
Пользователь
Откуда: Россия, Ижевск Регистрация: Июль 2004
Всего: 404 сообщения
|
Ухх.. люди, простите если где-то это уже говорилось, но ни в учебнике Raven'a, ни в доке Walteland Ghost, ни на этой теме.. так и не увидел ответа. 1. На кой [censored] нужен scrname.msg? -------------------- фрагмент поста Raven'a, см. выше ---------------------- 3. Потом открываешь Data\Text\English\Game\scrname.msg Добавлешь строчку: --------------------------------------- {1404}{}{Имя_NPC}# имя_скрипта.int ; Описание_NPC --------------------------------------- При вызове obj_name(self_obj) или просто взгляде на этого NPC будет выдаваться именно Имя_NPC Соответственно, если писал #define NAME 1305 здесь пишешь {1405} и т.д. --------------------- end of фрагмент поста Raven'a ------------------------ То есть такая конструкция нужна только для того, чтобы в скрипте самого NPC на обработчик look_at_p_proc забить? 2. Дитя Pascal'я, я с трудом свыкаюсь с переменными, тип которых нигде не объявляется. Ладно еще где-то сказали, мол GVAR имеет 32 бита.. а остальные? Можно ли в LVAR записать стркоу? символ? а может число с плавающей запятой ? 3. Что, собственно, и явилось причиною предидущего вопроса, я написал в своем скрипте подобным образом: --- *.msg --- .. {номер строки}{}{строка с текстом} .. ------------- --- *.ssl --- .. set_local_var(LV_number,номер строки); float_msg(self_obj,message_str(номер скрипта,LV_number)+","+message_str(номер скрипта,номер строки)); .. ------------- В результате криттер говорит: "Error,строка с текстом". В чем прикол? Если номер строки равен 1, то ошибки нет. (Отредактировал(а) Alan Killenger - 7:39 - 17 Ноября, 2004)
|
Отправлено: 19:46 - 16 Ноября, 2004
|
|
Mynah
Модератор
Откуда: Пермь Регистрация: Окт. 2004
Всего: 469 сообщений
|
2pal: На всякий случай проверил все скрипты... Эта гвара используется только в одном, да и то - по-другому. Имхо, ты в чём то ошибаешся. Да и синтаксис твоего куска кода, мягко говоря, не совсем похож на Фоловский. 2Alan Killenger: 1. Самый простой пример: Попробуй не указать имя криттера в scrname.msg и начать бой с ним. Везде, вместо его имени, будет написано <None> получил повреждения... (бла-бла-бла) 2. А самому попробовать? ;) Там те же самые 32 бита. (кстати, где ты умудрился в Фаллауте использовать числа с плавающей запятой?). Строки там, имхо, хранить нет смысла. Можно ведь хранить номер строки из *.msg файла ;) А в случае использования битов, можно ещё и номер *.msg файла хранить. 3. У тебя так: float_msg(self_obj,message_str(номер скрипта,LV_number)+","+message_str(номер скрипта,номер строки)); А надо так: float_msg(self_obj,message_str(номер скрипта, local_var(LV_number))+","+message_str(номер скрипта,номер строки)); (Добавление от 21:27 - 16 Ноября, 2004.) 2Raven:
Цитата:
Всё руки не доходят форумцев порадовать, да и аудитории особой, похоже, нет...
Есть аудитория :) Ну ооочень просим :)) (Отредактировал(а) Mynah - 23:40 - 16 Ноября, 2004)
----- Scio me nihil scire
|
Отправлено: 21:25 - 16 Ноября, 2004
|
|
Raven
Пользователь
Откуда: Владик Регистрация: Февр. 2004
Всего: 408 сообщений
|
to Alan 1. Раньше я думал, что scrname.msg необходим прежде всего для привязки msg-файла к скрипту и задания имени и описания объекта. Имя и описание можно задать в прототипе, с привязкой тоже не всё ясно. Так что даже не знаю что и ответить. 2. Числа с плавающей точкой в Фоле ЕСТЬ. Обнаружились совсем недавно, при просмотре исходников компилятора ssl-файлов. Попробуй: variable a=1234.5678; display_msg("a="+a); Кроме того, в Фоле есть тип char - одиночный символ ('a','Z' и т.д.). Более того, с помощью ряда манипуляций можно получить ASCII-код char-символа. Я не шучу. И да - все вары 32-ух битовые. >>Строки там, имхо, хранить нет смысла. Можно ведь хранить номер строки из *.msg файла ;) Только при этом нужно знать номер самого мсг-фала. Кстати, вот вам инфа для размышления - что делает следующий код: ------------------------------------- #define MAX_SCRIPTS2000 variable i=1307; variable msg_file_num; variable msg_string; msg_string:="LABEL: "+obj_name(self_obj); while (i<MAX_SCRIPTS) then begin if message_str(i,100)==msg_string then begin msg_file_num:=i; i:=MAX_SCRIPTS+1; else i+=1; end ------------------------------------- Догадались? Правильно, перебирает все "юзерские" мсг-шки, смотрит на 100-ую строчку на наличие слова "LABEL: Vasya", например. Оо-чень полезно в том случае, если вы не знаете номер мсг-шки, но знаете часть содержимого. Вообще же я даже написал скрипт, который парсит свою мсг-шку как ... скрипт. Т.е. пишем в мсг {101}{GIVE} {102}{Кожаная броня} и Чузу выдаётся броня :-) Постараюсь написать об этом попозже, по приходу из универа. to pal Это декомпиляторские штуки. Смысла нет, а почему он так делает - фиг знает.
|
Отправлено: 0:32 - 17 Ноября, 2004
|
|
Alan Killenger
Пользователь
Откуда: Россия, Ижевск Регистрация: Июль 2004
Всего: 404 сообщения
|
Mynah: "Строки там, имхо, хранить нет смысла. Можно ведь хранить номер строки из *.msg файла.." Хехе, само собой, но это только в том случае, когда содержимое строки заранее есть одно из нескольких вариантов. А если строка строится более динамично? float_msg(self_obj,message_str(номер скрипта, local_var(LV_number))+","+message_str(номер скрипта,номер строки)); - thanks. Raven:"msg_string:="LABEL: "+obj_name(self_obj);" А по-моему, msg_string в четыре байта явно не укладывается.. в чем прикол? Как перестать париться с созданием диалогов и для героя-мужчины и для героя-женщины? Я думаю делать следующую конструкцию: 1. формат номера строки в *.msg файле: ???? - ? <=> номер - м/ж 2. в самом скрипте: #define message(P_number) message_str(C_script,P_number*10+get_critter_stat(dude_obj,34)) Никаких мучений в диалоговых процедурах, но в таком случае мне прийдется почти удваивать количество строк в *.msg файле. Как мне модернизировать скрипт, чтобы он делал следующее: в случае, когда не найдена реплика для женского пола, автоматом выбирал аналогичную реплику мужского? То есть, я спрашиваю: как определить, присутствует ли данная реплика в *.msg файле? (Отредактировал(а) Alan Killenger - 6:36 - 17 Ноября, 2004)
|
Отправлено: 2:37 - 17 Ноября, 2004
|
|
Wasteland Ghost
Маленькое Злое Привидение
Откуда: Россия, Самара Регистрация: Дек. 2002
Всего: 2251 сообщение
|
Mynah абсолютно прав по поводу scrname.
Цитата:
А по-моему, msg_string в четыре байта явно не укладывается.. в чем прикол?
Зато базовый адрес строки укладывается просто замечательно :). 2pal декомпилер вообще странная штука, особенно когда скрипты ему от Ф1 подсовываешь :). Однако, я знаю одного скриптоманьяка, который скрипты из Ф1 переносил в Ф2 и довольно успешно ;).
Цитата:
Строки там, имхо, хранить нет смысла.
Ни разу не пробовал такую конструкцию:
Код:
variable stored_node; ... /*где-то в одной из нод диалога*/ stored_node := "Node002"; ... /*например, в обработчике talk_p_proc*/ start_gdialog(NAME, self_obj, 4, -1, -1); gSay_Start; call stored_node; gSay_End; end_dialogue;
Лично мне это помогло реализовать нормальную пьянку с Виски Бобом :). Ибо, если из диалога вызвать юз объекта (пива, например) на другом объекте, то произойдёт этот юз только при выходе из диалога. А такой вот макар помогает прервать диалог, что-то там похимичить, а потом диалог возобновить с того места, на котором остановились.
|
Отправлено: 9:36 - 17 Ноября, 2004
|
|
pal
Пользователь
Откуда: Estonia, Narva Регистрация: Янв. 2003
Всего: 42 сообщения
|
To WastelandGhost and Raven: Аня ты меня раскусила со скриптами вот что то на них потянуло, с 1го Фола. в догонку микровопрос: такой кусок тоже смысла не несёт или это нромальная проверка:? (перед OR) if GVAR[159]>2 * GVAR[160] OR GVAR[156]=1 then ..... кстати предпологагается что ОпКоды в 1м Фоле ПОЛНОСТЬЮ аналогичны 2му ,так? т.е. по научному если то подмножество ОпКодов 1го входит в множество 2го ??? да если не трудно можно прокомментировать следующий кусок кода: if GetItemCountByCritter(Player,98) then begin SayOption_2(249,124,22,50); end else begin SayOption_2(249,125,21,50); end; команда SayOption_2(_script_,num_str,xx,50); незнакома. шо це есть параметр хх ? (Отредактировал(а) pal - 9:46 - 17 Ноября, 2004)
|
Отправлено: 10:25 - 17 Ноября, 2004
|
|
|
|