» 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 ] Все собщения

 
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
 

Переход по темам
<< Пред. След. >>
Страницы этой темы [ 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