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

Я снова в деле. К доке за это время добавилось две главы.

Отправлено: 11:13 - 21 Авг., 2004
YikxX
Пользователь

Откуда: NCR :)
Регистрация: Февр. 2004

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

Народ, объясните плиз новичку, как компилировать скрипты.
Скачал компилятор с этого сайта, а скомпилить им ничего не могу - все время какие-то ошибки выдает.
Пробую компилить так -
ipp.exe имя_скрипта.ipp
Я так пологаю, что чего-то не хватает? Подскажите плиз.
И еще - Процедура смерти (любыми способами) НПС прописана в его скрипте, я полагаю? Имеет ли она какое-нибудь стандартное название для всех? Можно ли туда вписать присвоение значения какой либо переменной во время смерти?
И последнее Есть ли какая-нибудь GVAR, которая ставится в 1 если жители Арройо похищены Анклавом? В какой момент она устанавливается в 1?

-----
Обломись! Я подложил туда носок...

Отправлено: 9:31 - 23 Авг., 2004
Alan Killenger
Пользователь

Откуда: Россия, Ижевск
Регистрация: Июль 2004

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

Kovarny в своем FAQ ответил на вопрос:
"Q:Как из скрипта одного объекта обратиться к другому?
Можно воспользоваться экспортированием переменных (так оно и сделано в большинстве скриптов).
В скрипте карты объявляется переменная:
export variable my_obj;
Далее в скрипте объекта объявляется другая переменная:
import variable my_obj;
Ей присваивается значение указателя "на себя", например, так:
procedure start
begin
my_obj := self_obj;
end
Потом в другом скрипте её можно использовать, объявив как "импортную":
import variable my_obj;
"

Я считаю, что ввиду изначальной специфичности вопроса, ответ был именно такой, каким ему и надлежало быть дабы не растягиваться на несколько страниц. Но лично я не понял ни вопроса ни ответа на него и, так как здесь обсуждению скриптов самое место.. : Какова цель обращения из одного скрипта к другому: вызов процедуры чужого скрипта или запрос значений? Что конкретно указывают export и import? Зачем нужно задействовать скрипт карты? Почему бы тогда просто не использовать MVAR? Что означает "присваивается значение указателя "на себя""? Что должно получится в итоге: общая внутренняя переменная двух скриптов? Ну и так далее..

Дайте плиз кто-нибудь развернутый ответ.


-----
hit me, nail me, make me god

Отправлено: 22:31 - 23 Авг., 2004
Perceptron
Модератор

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

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

>Скачал компилятор с этого сайта, а скомпилить им ничего не могу - все время какие-то ошибки выдает.
Вопрос прямо в ФАК. IPP включает в скрипт при компиляции стандартные переменные. Если ты используешь декомпилированный скрипт, то там эти переменные уже есть. Это источник ошибок. Если хочешь простой жизни, используй другие компиляторы. Или удали эти переменные - смотри файл new_scr.ipp.
>И еще - Процедура смерти (любыми способами) НПС прописана в его скрипте, я полагаю?
Обработчик destroy_p_proc. Переменную, конечно, можно. См. доки по скриптам.И последнее  
>Есть ли какая-нибудь GVAR, которая ставится в 1 если жители Арройо похищены Анклавом?
Предполагаю, что есть. Надо декомпилировать скрипты (возможно, obj_dude.int).

>Какова цель обращения из одного скрипта к другому: вызов процедуры чужого скрипта или запрос значений?
Никаких процедур из другого скрипта не вызывается. Это нужно для обмена инфой.
>Что конкретно указывают export и import?
export - видимо то, что эта переменная может использоваться вне скрипта, import - то, что эта переменная внешняя, другого скрипта.
>Зачем нужно задействовать скрипт карты?
Не знаю, но БИСовцы так делали.
>Что означает "присваивается значение указателя "на себя""?
Нет никакого присваивания на себя. Есть пример, в котором переменной присваивается значение (вызовом функции).
>Что должно получится в итоге: общая внутренняя переменная двух скриптов?
Переменная, кот. могут пользоваться оба скрипта.
Посмотри скрипт Нагора (ACNagor.int) и его пса Смока (ACDog.int). Это пример использования скрипта. Еще посмотри скрипт карты (ArVillag.int, по-моему) - там должна быть объявлена экспортная переменная. Просто все обычно делается по образу и подобию БИС.

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

Отправлено: 2:06 - 24 Авг., 2004
Raven
Пользователь

Откуда: Владик
Регистрация: Февр. 2004

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

>>Какова цель обращения из одного скрипта к другому: вызов процедуры чужого скрипта или запрос значений?

Никакого "обращения" не происходит. Объясняю. Переменная, прописанная в скрипте карты с ключевым словом export будет доступна ВСЕМ скриптам на карте - как на чтение, так и на запись. Хранить в этой переменной можно всё, что угодно - PID, указатель, число денег, причитающихся Чузу - в общем, всё.

Пример: по результатам разговора с одним персонажем Чуз должен получить некоторое количество денег от другого. Число денег генерируется автоматически в скрипте первого НПС. Как второму узнать сколько денег выдавать?

Используем импорт/экспорт. В скрипте карты пишем:
export variable money_to_give;
Теперь переменная money_to_give потенциально доступна всем объектам на этой карте.

В скрипте первого НПС (генератора числа денег) пишем:
---------------------------
<...>
//Импортируем переменную, т.е. делаем её доступной для этого скрипта
import variable money_to_give;
<...>
//Какая-то процедура генерации денег
procedure generate_amount begin
<...>
//Присваиваем экспортной переменной сгенерированную сумму
money_to_give:=generated_cash;
end
<...>
---------------------------

Всё, теперь переменная money_to_give хранит подлежащую выдаче сумму денег. В скрипте НПС2 (выдающий) пишем:
---------------------------
<...>
import variable money_to_give;
<...>
procedure give_money  begin
<...>
//Передаём Чузу сгенерированную сумму
item_caps_adjust(dude_obj,money_to_give);
<...>
end
<...>
---------------------------

Пример2 (передача указателя):
Карта:
---------------------------
export variable ptr_npc1;
---------------------------
НПС1:
---------------------------
<...>
import variable npc1;

procedure start begin
//Присваиваем экспортной варе указатель "на себя"
npc1:=self_obj;
end
<...>
---------------------------
НПС2:
---------------------------
import variable ptr_npc1;
<...>
display_msg("NPC1 tile="+tile_num(npc1));
display_msg("NPC1 meelee skill="+has_skill(npc1,SKILL_MEELEE));
---------------------------
НПС3:
---------------------------
import variable ptr_npc1;
<...>
display_msg("NPC1 elev="+elevation(npc1));
display_msg("NPC1 doctor skill="+has_skill(npc1,SKILL_DOCTOR));
---------------------------

Теперь вместо денег мы сделали общедоступным указатель на НПС1. Теперь любой объект может импортировать эту переменную и использовать хранящейся в ней указатель для получения необходимой информации о НПС1 - номер тайла, уровень, предметы в инвентаре, скилы, характеристики - всё что угодно, любая информация об объекте может быть получена, если мы знаем указатель на него.

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

Надеюсь, теперь понятно.

>>Почему бы тогда просто не использовать MVAR?

Да, можно использовать MVAR. В этом случае скрипт карты можно не править, в скрипте одного НПС пишем:
---------------------------
//обычно пользуют start, но можно и m_e
procedure map_enter_p_proc
set_map_var(MVAR_var,self_obj);
end
---------------------------
Для остальных НПС:
---------------------------
//пользуемся импортной переменной
variable var;
var:=map_var(MVAR_var);
---------------------------

Но это плохой стиль. MVAR-ы запоминаются в сейвах. Зачем хранить на жёстком диске какой-то указатель на объект, тем более, указатель каждый раз разный. Проще импорт/экспорт.


>>Что должно получится в итоге: общая внутренняя переменная двух скриптов?

Общая внутренняя глобальная переменная всех скриптов на карте, которые эту переменную импортировали.




(Добавление от 5:43 - 24 Авг., 2004.)


>>Народ, объясните плиз новичку, как компилировать скрипты.

Ну ты даёш, Икс. Новичок, блин :-) Сто лет в комьюнити уже :-) Бум обучать.

>>Скачал компилятор с этого сайта, а скомпилить им ничего не могу - все время какие-то ошибки выдает.
Во-первых: лучше переходи на БИС, ты же скрещиванием модов занимаешся, тут всё скрипты под BIS compiler обычно пишутся.
Во-вторых: что компилишь? Запейсти кусок.

>>Я так пологаю, что чего-то не хватает? Подскажите плиз.

Скрипт с багами, вестимо. Или умный человек использовал препроцессорные директивы (обычно, ИППсты этого не делают). Проверь скрипт на наличие строчек #define, #include, #ifndef.

>>И еще - Процедура смерти (любыми способами) НПС прописана в его скрипте, я полагаю?

Никакой "процедуры смерти" нет. Анимация смерти выбирается/отрисовывается движком, скрипты здесь не при чём. Но в момент смерти персонажа срабатывает обработчик destroy_p_proc, во время получения повреждений (любых, из любого источника) - damage_p_proc и в ряде случаев срабатывает combat_p_proc

>>Можно ли туда вписать присвоение значения какой либо переменной во время смерти?

Да, следующим образом:
-----------------------------
procedure destroy_p_proc begin
//обычный стафф - inc_good/bad_critter и т.п.
<...>
//ставим переменную
set_global_var(GVAR_pogib_smertyu_hrabrih,1);
end
-----------------------------

>>И последнее  Есть ли какая-нибудь GVAR, которая ставится в 1 если жители Арройо похищены Анклавом?

Да, под прогресс по основной сюжетной линии существует вара GVAR_FALLOUT_2 и макросы: set_f2, force_f2, get_f2, f2_flag_any.

Флаги, хранящиеся в этой ГВАРЕ (точнее, их названия, сами флаги цифровые, от 0 до 8):
f2_state_v13_looking
f2_state_v13_known
f2_state_v13_found
f2_state_v13_entered
f2_state_tribe_kidnapped
f2_state_fix_tanker //возможно, не используется
f2_state_tanker_fix_known
f2_state_tanker_fixed
f2_state_enclave_destroyed

Тебя, видимо, интересует f2_state_tribe_kidnapped.

>>В какой момент она устанавливается в 1?

При первом заходе в ardead.map (разбитая деревня). Устанавливается из скрипта Хакунина (типа, умирающего). Попутно на карте открывается локация Наварро.

Отследить момент смены "Живое Арройо - мёртвое Арройо". Мне пока не удалось. Ну, я не особо-то и пытался, если честно :-)

Отправлено: 5:11 - 24 Авг., 2004
YikxX
Пользователь

Откуда: NCR :)
Регистрация: Февр. 2004

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

Ну, в скриптинге Фола то я новичок

Я счас перешел на Нойдовский компайлер/декомпайлер - проблем пока нет.

Ясно. То есть после смерти Хакунина GVAR_FALLOUT_2 == 4 так я понимаю?

> f2_state_fix_tanker //возможно, не используется

Похоже, это действительно так. В скрипте капитана Рона Майерса (который рассказывает, как починить танкер и как им управлять) устанавливаются только флаги 6 и 7.

Да и еще. Что это за команда/оператор - op_metarule? еще я встречал - op_metarule3 Что сие такое?

-----
Обломись! Я подложил туда носок...

Отправлено: 9:23 - 24 Авг., 2004
Raven
Пользователь

Откуда: Владик
Регистрация: Февр. 2004

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

>>Ясно. То есть после смерти Хакунина GVAR_FALLOUT_2 == 4 так я понимаю?

Да.

>>Да и еще. Что это за команда/оператор - op_metarule? еще я встречал - op_metarule3 Что сие такое?

См. доку от WG. В BIS это соответственно metarule и metarule3 - комплексные многогранные команды с огромным числом параметров.

Отправлено: 11:15 - 24 Авг., 2004
YikxX
Пользователь

Откуда: NCR :)
Регистрация: Февр. 2004

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

Новый вопрос на засыпку.
Как и где прописывается взятие какого-либо квеста? Я полагаю, что в скрипте того, у кого квест берешь? И закрытие его наверное там же? Для этого какая-нибудь специальная команда существует?
А то счас заметил прикол - когда сдаешь Бекки первый квест (про Фрэда и его долг), сразу же в ПИП-бое прописывается квест на Дерека и книгу, хотя я Бекки об этой работе еще и не спрашивал.
Хотел исправить, лазил, лазил в скрипте Бекки - так и не разобрался в чем там косяк.
Help!

-----
Обломись! Я подложил туда носок...

Отправлено: 14:16 - 2 Сент., 2004
izuk3n
Deleted

Регистрация: N/A

Всего: N/A сообщений

посмотри master.dat//data/quests.txt

там всё разъяснено

Отправлено: 14:23 - 2 Сент., 2004
escapist
Пользователь

Откуда: В. Новгород
Регистрация: Авг. 2004

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

Появилась у меня тут пара вопросиков:

-Что такое AI Packet у криттера?

-Как я понял float_msg предназначена для отображения реплик криттеров, которые появляются над их головами? Тогда правильно ли я написал для этого процедуру и когда она должна вызываться?
procedure QQQ begin
float_msg(self_obj,127,1);
end

-И еще: какая еще может быть реакция, кроме нейтральной, и на что она влияет?
giQ_Option(4,NAME,114,Node003,NEUTRAL_REACTION);  

(Отредактировал(а) escapist - 11:20 - 20 Сент., 2004)

Отправлено: 19:58 - 19 Сент., 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