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

>>Подскажите еще как ассоциировать номера криттеров из critters.lst и реальные персонажи игры, есть ли такая табличка?

Я думаю, что Jager подразумевал несколько иное. Реальные персонажи в игре - это Сулик, Вик, хранитель моста.... ведь так? Вопрос был в этом? Если да, то как такового персонажа в фолле нет. Ты можешь взять любую картинку, прикрутить к ней любое поведение(скрипт), характеристики(прошки) и получить персонаж.

Если имелось в виду другое, то ответ уже получен.

2 Perceptron:

Не в обиду, но перечитывая на досуге доки из всё того же раздела нашёл столько неточностей и  неизвестной информации, что.... Просто часть данных писалась довольно давно и не соответствует нынешним данным и полученым сведениям. По хорошему часть инфы нужно переработать. Вод только покажите мне такого человека, который рискнёт за это взятся.

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 0:40 - 5 Апр., 2005
Wasteland Ghost
Маленькое Злое Привидение

Откуда: Россия, Самара
Регистрация: Дек. 2002

Всего: 2251 сообщение

2Ray
Самые нужные доки, по скриптингу и по прошникам, как раз регулярно обновляются. По остальным, не спорю, есть пробелы. Так на то "Исследования" и создавались ;).

Отправлено: 13:32 - 5 Апр., 2005
binyan
Пользователь

Откуда: Israel
Регистрация: Март 2005

Всего: 292 сообщения

Как создать своего напарника?Кто нибудь может помочь с этим?В доках ничего не понятно,т.е описаны только названия функций,и что они делают,а как их использовать неясно.
Понятно,что начинаем с функции старт.
Потом надо исользовать ентер мап или эта функция используется уже в скрипте карты.
У персонажа нужно указать его статы,скиллы и поведение.Как это делать,с помощью каких функций?
Наконец о функции диалога..как и создавать диалоги в ф-геке(к нему прикреплён редактор мсг файлов),и где их прописывать?(Я имею ввиду есть ли какой нибудь диалог.лст или что то типа этого)  


-----
...выражая озадаченность, граничащую с озабоченностью..

Отправлено: 21:13 - 6 Апр., 2005
Perceptron
Модератор

Откуда: Ivanovo
Регистрация: Май 2003

Всего: 502 сообщения

Доки - это хорошо. Но всего охватить они не могут.
Напарники - тема обширная.
А лучший способ узнать, что же нужно делать - посмотреть на то, как это сделано в игре, разобраться со структурой ресурсов.
Диалог.листа нет. Название файла .msg должно совпадать с названием файла .int и все. Прежде чем использовать ф-гек лучше действительно разобраться с компилятором. А скрипты изучать на примерах существующих (лучше по оригинальным исходникам).
Кстати, есть мод: Klint the Generous. Лежал на falloutsite.ru. Там Клинт напарником сделан. Если посмотреть какие файлы и как там изменены, я думаю, можно будет понять, как создать своего напарника.
А для начала лучше попробовать создать хотя бы своего НПС.

-----
Into The New Year - With A New Vision!
Документация по скриптам, туториал по скриптам, вопросы по скриптам, FAQ по моддингу, "Утилиты", fallmods-tutor.

Отправлено: 3:42 - 7 Апр., 2005
Pavel
Модератор

Откуда: Одесса Украина
Регистрация: Май 2004

Всего: 368 сообщений

Вот пример из доки Raven'a по реализации диалога:


//Наш номер
#define NAME 1305 // по списку -1 в script.lst
//Макросы
//Заменяем (номер_скрипта,номер_фразы) на (номер_фразы)
//т.к. номер скрипта - заранее известен и неизменен для всего скрипта
#define Reply(x) gsay_reply(NAME,x)
//Тоже и для gsay_option
#define Option(x,y) gsay_option(NAME,x,y,-1)

procedure Node009;
procedure Node010;
procedure Node011;
procedure Node999;

//Процедуры
procedure start begin
end

procedure talk_p_proc begin
Start_gDialog(NAME,self_obj,-1,-1,-1);
GSay_Start;
 call Node009;
GSay_End;
End_Dialogue;
end

procedure Node009 begin
Reply(1);
 Option(10,Node010);
 Option(11,Node011);
end

procedure Node010 begin
 Reply(2);
 Option(12,Node011);
 Option(13,Node999);
end

procedure Node011 begin
 Reply(3);
 Option(15,Node999);
end

procedure Node999 begin
end

после этого пишем в msg файле
{1}{}{Hello, Chosen One}
{10}{}{Yeah. How its going?}
{11}{}{Sorry. No time for chat}
{2}{}{Not bad. Heard you have some troubles with the Enclave?}
{12}{}{Oooh. Nothing serious, really}
{13}{}{Eee. I must be going}
{3}{}{Well, I wish you luck anyway}
{15}{}{Thanks. Bye}

-----
В жизни нельзя быть уверенным на 100%, ведь никогда не знаешь когда...

Отправлено: 10:21 - 7 Апр., 2005
binyan
Пользователь

Откуда: Israel
Регистрация: Март 2005

Всего: 292 сообщения

Описываю как это в скрипте Криса:
/* Standard Script Procedures */
procedure start;
procedure critter_p_proc;
procedure pickup_p_proc;
procedure talk_p_proc;
procedure destroy_p_proc;
procedure look_at_p_proc;
procedure description_p_proc;
procedure use_skill_on_p_proc;
procedure use_obj_on_p_proc;
procedure damage_p_proc;
procedure map_enter_p_proc;
procedure push_p_proc;
procedure timed_event_p_proc;
Насколько я понял все эти процедуры описаны специально для нпс?И их обязательно вводить.Они уже есть в инклуде?
дальше
procedure Node998;                                      // This Node is Alshhays Combat
procedure Node999;                                      // This Node is Alshhays Ending
Что это?Что за процедуры нод,и за что каждая отвечает?
дальше
// The neht lines are added in by the Designer Tool.
// Do NOT add in any lines here.
//~~~~~~~~~~~~~~~~ DESIGNER TOOL STARTS HERE

procedure Node001;
procedure Node001a;
procedure Node002;
procedure Node003;
procedure Node004;
procedure Node004a;
procedure Node004b;
procedure Node005;
procedure Node006;
procedure Node007;
procedure Node008;
procedure Node009;
procedure Node010;
procedure Node011;
procedure Node012;
procedure Node013;
procedure Node014;
procedure Node015;
procedure Node016;
procedure Node017;
procedure Node017a;
procedure Node018;
procedure Node019;
Что это?
дальше
// party member default nodes
procedure Node1001;
procedure Node1002;
procedure Node1003;
procedure Node1004;
procedure Node1005;
procedure Node1006;
procedure Node1007;
procedure Node1008;
procedure Node1009;
procedure Node1010;
procedure Node1100;
Это?
дальше
// Cassidy dialog
procedure Node1101;
procedure Node1101a;
procedure Node1102;
procedure Node1103;
procedure Node1104;
procedure Node1105;
procedure Node1106;
procedure Node1107;
procedure Node1108;
procedure Node1109;
procedure Node1110;
procedure Node1111;
procedure Node1112;
Это насколько я понял для диалога..Как они действуют?Обязательно их писать?
// Cassidy floats
procedure Node2001;
procedure Node2002;
procedure Node2003;
procedure Node2004;
procedure Node2005;
procedure Node2006;
procedure Node2007;
procedure Node2008;
procedure Node2009;
procedure Node2010;
procedure Node2011;
procedure Node2012;
procedure Node2013;
procedure Node2014;
procedure Node2015;
procedure Node2016;
procedure Node2017;
procedure Node2018;
procedure Node2019;
procedure Node2020;
procedure Node2021;
procedure Node2022;
Что такое флоатс?Как это действует?
дальше
//~~~~~~~~~~~~~~~~ DESIGN TOOL ENDS HERE
// The Folloshhing lines are for anything that is not needed to be
// seen by the design Tool


/* Local Variables shhhich are saved. All Local Variables need to be
  prepended by LVAR_ */
#define LVAR_Herebefore                 (4)
#define LVAR_Hostile                    (5)
#define LVAR_Personal_Enemy             (6)
#define LVAR_SHHAITING                    (7)
#define LVAR_FOLLOSHH_DISTANCE            (8)
#define LVAR_TEAM                       (9)
#define LVAR_Cassidy_Offered            (10)
#define LVAR_Cassidy_Knoshhs_Plan         (11)
#define LVAR_Admonished_Cassidy         (12)
#define LVAR_Mentioned_Vault            (13)
#define LVAR_JOined_Party_Before        (14)
Что это за процедуры?За что отвечают?Где их редактировать?Может мне кто-нить обьяснить про гвар,лвар и остальные вары?
#define check_bad_area(map, elev)         ((cur_map_indeh == map) and ((elevation(self_obj) == elev) or (elev == -1)))
#define cassidy_doesnt_like_area            ((check_bad_area(MAP_RAIDERS_CAMP2, -1)) or           \
                                          (check_bad_area(MAP_KLAMATH_TOHICCAVES, -1)) or              \
                                          (check_bad_area(MAP_KLAMATH_RATCAVES, -1)) or            \
                                          (check_bad_area(MAP_BROKEN_HILLS2, 1))
or     \
                                          (check_bad_area(MAP_SAN_FRAN_TANKER, 1)) or    \
                                          (check_bad_area(MAP_GHOST_FARM, -1)) or         \
                                          (check_bad_area(MAP_REDDING_MINE_TUNNEL, -1)) or         \
                                          (check_bad_area(MAP_SIERRA_BATTLE, -1)))      // *** finish
Что это?За что эта процедура отвечает?За что отвечает в ней каждая переменная?
Самой функции чек бад ареа нету в хелпе по скриптам
Что за ((cur_map_index == map) and ((elevation(self_obj) == elev) or (elev == -1)))?
За что она отвечает?Что за чек мап идут после неё?
#define cassidy_is_poisoned                    (get_poison(self_obj))
#define cassidy_is_irradiated                  (get_critter_stat(self_obj, STAT_current_rad))
#define cassidy_is_crippled                    ((critter_state(self_obj) bshhand DAM_CRIP_LEG_LEFT)  or \
                                               (critter_state(self_obj) bshhand DAM_CRIP_LEG_RIGHT) or \
                                               (critter_state(self_obj) bshhand DAM_CRIP_ARM_LEFT)  or \
                                               (critter_state(self_obj) bshhand DAM_CRIP_ARM_RIGHT))
Ок.Тут не понял первое..Зачем здесь пишется дефайн касиди из посонед?В дефайне есть такая функция?Что она делает?
далее get poison.Цитирую:"int get_poison(ObjectPtr who) " - вернуть уровень отравления критера".Что это значит.Обьясни пожалуйста на примере игры.как функция действует точно?int get_critter_statе(ObjectPtr shhho, int stat) - вернуть значение характеристики.Зачем это тут?как это действует?
int critter_state(ObjectPtr who) - вернуть состояние обьекта.
Как это действует?При наводе курсора н обьект?
bwand  DAM_CRIP_LEG_LEFT)
Что такое bwand?Что значат DAM_CRIP_LEG_LEFT,то же самое райт,и т.д?Почему между ними стоит or?
#define cassidy_party_member_options      if( party_is_waiting == false ) then   \
                                            NOption(9999, Node1101, 004);       \
                                         party_member_default_options  \
Что это за процедура?Что она делает?.Что за нод здесь?Что такое вообще эти ноды?
Наконец последнее
/* Local variables which do not need to be saved between map changes. */
variable Only_Once:=0;
variable Perform_Party_Add:=0;
variable Perform_Party_Remove:=0;
variable Perform_Critter_Float := 0;
За что отвечают эти Переменные?
Я вас очень прошу Павел,постарайтесь ответить на все вопросы ,и как можно ясней.Вы меня поймите=))Я в скриптах фалаута вообще не разбираюсь.Неплохо было  бы понять сначала что для чего,и КАК ЭТО ВЫГЛЯДИТ В ИГРЕ.
Заранее спасибо.


-----
...выражая озадаченность, граничащую с озабоченностью..

Отправлено: 22:32 - 7 Апр., 2005
Ray
Модератор

Откуда: Донецк,Украина
Регистрация: Янв. 2004

Всего: 746 сообщений

Я не Павел, но попробую ответить. Часть ответов можит быть не понятна(для этого надо хоть немного знать языки программирования//желательно Си//), но попробую. Как сказал один человек - "Поехали"

>>procedure timed_event_p_proc;
Насколько я понял все эти процедуры описаны специально для нпс?И их обязательно вводить.Они уже есть в инклуде?

Не понял, что значит есть в инклуде. Однако - эти функции не специально для нпс. Одни из них могут исспользоваться, другие - нет. Их вообще может не быть. Часть из этих описаный могут относиться и к другим объектам. Вообще все это - просто прототипы функций (не путать с прошками, или по другому с прототипами как в игре!!!). Это зарезервированный термин языка прогр. Фактически прототипы - это описание функции, её имя, аргументы и т.д.

>>  procedure Node998;                                      // This Node is Alshhays Combat
procedure Node999;                                      // This Node is Alshhays Ending
Что это?Что за процедуры нод,и за что каждая отвечает?
дальше

Как правило ноды отвечают за разговор. Хотя это и не так. Просто разработчики решили называть процедуры, где исспользуются диалоги как NodeXXX. Это сделано для простоты читания кода. В ноде может быть что угодно.
В данном случае 998 - при вызове отвечает за дружественность(возможность атаки нпс. на чуза)
node999 - пустая и отвечает за конец диалога. К слову за конец диалога может отвечать любая нода без вызова других веток разговора.

>>procedure Node1100;
Это?
дальше

Все данные ноды отвечают за диалог. даже это не так, всё что было - это объявление процедур.

>>procedure Node1112;
Это насколько я понял для диалога..Как они действуют?Обязательно их писать?

Как я уже сказал, ноды могут быть и не для диалога. всё зависит от того что ты запишешь в:

procedure Node001;
.............
procedure Node001
begin
СЮДА
end

А писать их нужно столько, сколько тебе самому надо.
Действуют они просто. По ходу выполнения скрипта, в одной из процедур есть вызов нод(любых процедур)
Например так
call nodeXXX();

после этого начинается выполнение соответствующей процедуры.

>>Что такое флоатс
Всё те-же ноды, но отвечающие за надписи над нпс. Собраны по порядку для простоты.

>>#define LVAR_JOined_Party_Before        (14)
Что это за процедуры?За что отвечают?Где их редактировать?Может мне кто-нить обьяснить про гвар,лвар и остальные вары?

вообще-то define - это директивы препроцессора. Фактически прпроцессор работает как обычный текстовый редактор. Он находит необходимую строчку и заменяет её на нужное :
Например
#define Just 17

найдет в тексте все слова just и заменит на 17. (Препроцессор занимается не только этим).
Про лвары, гвары.... так много написано, что не хочется лезть в эту тему. Может по позже.

>>Что за ((cur_map_index == map) and ((elevation(self_obj) == elev)

cur_map_index - функция возвращающая номер локации, где находится перс. elevation(self_obj) - функция возвращающая этаж, где находится владелец скрипта. Фактически это проверки карты и этажа.

>>Ок.Тут не понял первое..Зачем здесь пишется дефайн касиди из посонед?В дефайне есть такая функция?Что она делает?

я рассказал, как действует дефайн. В разных ситуациях будут подставляться разные значения. "посонед" - степень отравления критера. Ну скорпион ткнул

>>(ObjectPtr shhho, int stat) - вернуть значение характеристики.Зачем это тут?как это действует?
int critter_state(ObjectPtr who) - вернуть состояние обьекта.
Как это действует?При наводе курсора н обьект?

Тут - это где? Откуда я знаю зачем это ТУТ без места нахождения в коде. Вернуть состояние - значит, что функция вернёт значение соответствующие задаче функции. Потом можно сверять эти значения. Например critter_state вернёт значение одной из характеристик. Нигде в окошке тебе этого не отобразят. Пример:

Допустим у тебя значение хар. = 120, тогда

if (get_critter_stat(self_obj, STAT_current_rad) > 100 )
begin
.....
end

выполнится. Если хар. = 90 - Нет.

>>variable Perform_Critter_Float := 0;
За что отвечают эти Переменные?

А фиг их знает, надо конкретно смотреть кусок кода.

ВСЁ

P.S. А вообще, хоть без начального знания программирования в скриптинге делать нечего. Если знать хоть основы 90% вопросов не будет. А обо всём тебе отвечать никто не будет. И уж тем более учить программированию. Других дел полно. Да и столь больших ответов думаю тоже не будет.

-----
Не бывает невозможных задач – бывает мало времени.

Отправлено: 23:26 - 7 Апр., 2005
Perceptron
Модератор

Откуда: Ivanovo
Регистрация: Май 2003

Всего: 502 сообщения

2 binyan:
Туториал по скриптам. Настоятельнейше рекомендую.

-----
Into The New Year - With A New Vision!
Документация по скриптам, туториал по скриптам, вопросы по скриптам, FAQ по моддингу, "Утилиты", fallmods-tutor.

Отправлено: 23:58 - 7 Апр., 2005
Pavel
Модератор

Откуда: Одесса Украина
Регистрация: Май 2004

Всего: 368 сообщений

Итак, по коду скрипта идет стандартное разбитие на разделы

1.описание процедур
procedure - процедуры, которые будут использоваться.

procedure Node998;                                      // Боевой выход из диалога
procedure Node999;                                      // Простой выход из диалога.

есть процедуры, которые используются бисовцами и относятся
к диалогу и действиям, так что это просто пометки для себя.
Само название НодехХх - тоже БИС придумал, можно написать бебебе
и при обращении все работать будет, так что нода это просто имя процедуры.

2.описание переменных
#define LVAR_ХХХ     (х)

Лвар - локальная переменная, сохранияется при окончании действия скрипта
и выхода с карты.
если х=5 то, при загрузке автоматически будет начинаться бой (все не много
сложнее, но этой информации временно должно хватить.)
Гвары и Мвары здесь (в скрипте) не описываются.

3.Далее идут вариаблы.
variable Perform_Party_Add:=0;
Вариабла работает только при исполнении скрипта, если работа скрипта закончена, то значение не сохраняется. Например расстояние до чуза. Если оставить нпс, то он не будет идти за тобой на установившемся ранее расстоянии.

4.далее идут макросы
Препроцессор, если всё правильно прописано, заменяет при компиляции
команду макроса на более длинную строку. Т.е. работает просто заменой
короткого имени макроса на длинное описание самого макроса.
#define check_bad_area(map, elev) ......
#define cassidy_doesnt_like_area            ((check_bad_area(MAP_RAIDERS_CAMP2, -1)) or ...
просто здесь идет возврат значения нахождения на той или иной карте,
допустим для фразы появившейся над Кэсом.
Вообще пропусти эту часть, так как это, в принципе, просто наворот партийца.

Что за ((cur_map_index == map) and ((elevation(self_obj) == elev) or (elev == -1)))?
За что она отвечает?Что за чек мап идут после неё?
*
cur_map_index == возвращает номер карты
elevation(self_obj) == возвращает номер уровня карты
elev == -1 любой уровень (уровни есть 0,1,2)

Обьясни пожалуйста на примере игры.как функция действует точно?int get_critter_statе(ObjectPtr shhho, int stat) - вернуть значение характеристики.Зачем это тут?как это действует?
*
допустим есть характеристика значение которой нам нужно узнать, таким образом мы вернем её значение. И сможем использовать, например джет либо что то другое.

int critter_state(ObjectPtr who) - вернуть состояние обьекта.
Как это действует?При наводе курсора н обьект?
*
Очень понятно описал Ray.

bwand  DAM_CRIP_LEG_LEFT)
Что такое bwand?Что значат DAM_CRIP_LEG_LEFT,то же самое райт,и т.д?Почему между ними стоит or?
*
Если, к примеру, есть ранение, то вести полноценный бой партиец не сможет, за сим идет просмотр ранена_правая_нога или ранена_левая_нога (отвечает за число ходов), ранена_правая_рука.... (за меткость)

А вообще, начни писать партийца с нуля. Это лучший способ разобраться. Начни с диалога и подключения в команду. Когда будет основа работать - будет легше. И постепенно усовершенствуй скрипт.

-----
В жизни нельзя быть уверенным на 100%, ведь никогда не знаешь когда...

Отправлено: 14:27 - 8 Апр., 2005
Jager
Пользователь

Регистрация: Март 2005

Всего: 38 сообщений

Цитата:

roll_vs_skill - бросок костей, случайное число. Бросок может быть удачным и наоборот. Чем выше скилл, тем выше вероятность успеха.




А какими-нибудь числами можно подкрепить?
Я вот знаю, что есть число - текущее значение скилла. А как там кидается? Ни одного числа эта операция не выдает...


Ray все правильно понял. Я на самом деле хотел знать вот что. Например, я изучаю скрипт Фрэнки, хозяина бара в Дэне. Правильно ли я понял, что среди всех 500 pro есть pro именно с характеристиками Фрэнки?
Или ему дают какой-то стандартный ПРО "мужика в зеленой куртке"? Так же как и стандартную картинку.

Отправлено: 16:33 - 8 Апр., 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