[AGFC: Valley of Gothic] М: Скриптинг в Готике

Страница 48 из 65 « Первая 384142434445464748 4950515253545558 Последняя »
Поиск в этой теме:

Расширенный поиск
Старый 16.10.2007, 05:56   #1881
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Как можно перебрать однотипные предметы (допустим, все луки), проверить определенное свойство и с нужными что-нибудь сделать? Где-то я точно видела такие конструкции, но никак не могу вспомнить где и найти пример в скриптах. Просто наваждение какое-то! Подскажите, куда смотреть, а?
Ответить с цитированием
Старый 16.10.2007, 07:41   #1882
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

По умолчанию Re: М: Скриптинг в Готике

Циклов нет :( Куча IF вам в помощь :)
Отправить личное сообщение для Ответить с цитированием
Старый 16.10.2007, 10:10   #1883
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от marazmus link=board=gothic&t=1105030050&start=3796150#37961 74 date=10/16/07, в 07:41:29
Циклов нет :( Куча IF вам в помощь :)
Странно, у меня четкое ощущение, что я такие штуки где-то видела... А неоднозначно работающие функции и повторяющиеся строчки вызывают внутренний протест... Хотя в скриптах не так. Пора ловить съезжающую крышу... *::):(

Где эти циклы бывают, а?
Ответить с цитированием
Старый 16.10.2007, 13:32   #1884
basilio58

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от okin link=board=gothic&t=1105030050&start=3796275#37962 98 date=10/16/07, в 10:10:26
Где эти циклы бывают, а?
Циклы с крышей? *:o
Лично я уже давно убедился, что метод "научного тыка" в даедалусе безотказен... ;D ;D ;D
Ответить с цитированием
Старый 16.10.2007, 14:40   #1885
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Циклы есть в функциях расписания, но очень урезанные  :P
Ответить с цитированием
Старый 16.10.2007, 15:45   #1886
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Народ, объясните все-таки, откуда берется инт в CreateInvItem. *
В благословенном туторе написано
void CreateInvItem (c_npc n0, int n1); - создает в инвентаре НПС n0 предмет с ID n1.
xxx.id благополучно выдает номер неписей, но для предметов рисует ноль. Так кто такой n1???

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

Сделала непися, который всегда одет в такой же доспех, как ГГ. Самым примитивным способом - перебрав все имеющиеся в игре броньки. Но это очень уж громоздко и уродливо. Очевидная мысля - посмотреть у одного и засунуть другому. А там эта загадочная разница типов с непонятно откуда берущимся id... И циклов немае, чтоб хоть перебрать по-быстрому... Кстати, вспомнила, где я их видела - в школьном паскале. Правда, с тех пор он ни разу не понадобился и напрочь забылся...

ps Метод тыка - эт, конечно, хорошо, но приятно понимать, что происходит... ;)
Ответить с цитированием
Старый 16.10.2007, 16:44   #1887
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Вот небольшой пример (для 1 готики) как определить одетые на ГГ доспехи и одеть некого НПЦ в такие же (к слову, можно определять не только доспехи, но и носимое оружие)
Итак:

var C_NPC AlbinoTmp; *//Это переменная для нашего "некого" нпц
var C_Item AlbinoItem; //Это для получения инстанции предмета
var int AlbinoArmor; * * *//Это для доспехов - фактически та же инстанция но в цифровом представлении.

if (Npc_HasEquippedArmor(hero))
{
AlbinoItem=Npc_GetEquippedArmor(hero); * * * //Сначала получаем имя одетой броньки (ф-ция Npc_GetEquippedArmor возвращает C_Item)
AlbinoArmor = Hlp_GetInstanceID(AlbinoItem); //Потом извлекаем её идшник - геморой, но иначе не выходит. Грубо говоря конвертируем C_item в integer. * * * * * *
};

if (AlbinoArmor!=0)
{ * * *
CreateInvItem(AlbinoTmp,AlbinoArmor); //Если ГГ одет в броню - т.е. AlbinoArmor не ноль, то создаем у нашего *AlbinoTmp такую же броньку, обратите внимание - используется переменная типа int a НЕ С_item.
AI_EquipBestArmor(AlbinoTmp); * * * * * *//Экипируем лучшую броню. * * *
};

Что то вроде этого что ли?

Касательно n1 - в данном случае имеется в виду не id предмета, а *именно ссылка на инстанцию предмета. Не буд врать, я не знаю, но, кажется, id предмета можно получить только через Hlp_GetInstanceID (c_item item).

Уж не знаю как, но в случае с предметами вполен можно написать CreateInvItem(hero,ItFoBeer); (где *ItFoBeer - instance ItFoBeer(C_Item)) и ошибки не будет ;)

Если есть желание можете попробовать другой, "честный" метод:
var int AlbinoBeer;
AlbinoBeer = Hlp_GetInstanceID(ItFoBeer);
CreateInvItem(hero,AlbinoBeer);

По идее, должны работать оба.
Ответить с цитированием
Старый 16.10.2007, 17:12   #1888
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от 360 link=board=gothic&t=1105030050&start=3797075#37970 91 date=10/16/07, в 16:44:21

AlbinoArmor = Hlp_GetInstanceID(AlbinoItem);
Hlp_GetInstanceID - ура, вот кого я искала! И методом тыка не нашла... Спасибо!

Еще один вопрос: почему одна и та же функция нормально работает в Dialoge и выдает unknown identifier в Item? А ежли ее прямо в Item вписать, работает там и там? Такое ощущение, что Item живет выше по течению от B_story и не знает, что там написано...

Куда ее можно вписать, чтоб Item тоже был в курсе? Или там и оставить - вроде никто не возражает? И где определяется направление течения? ;)
Ответить с цитированием
Старый 16.10.2007, 17:39   #1889
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
И где определяется направление течения?
Направление течения определяется в файле Gothic.src. Если вы пользуетесь GothicSourcer'om то при добавлении нового файла скрипта(подключении существующего), он выводит готик.срц списком с предложением вставить создаваемый\подключаемый скрипт в определенную его часть. Разумеется, пользовательские функции должны предшествовать диалогам, иначе получим сообщение о неизвестном идентификаторе (вызове необъявленной ф-ции). Иногда, кстати, приходиться заново закрыть\открыть проект в соурсере, чтобы компилятор увидел-таки объявленную ф-цию.
Ответить с цитированием
Старый 17.10.2007, 10:39   #1890
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
Народ, объясните все-таки, откуда берется инт в CreateInvItem. *
В благословенном туторе написано
void CreateInvItem (c_npc n0, int n1); - создает в инвентаре НПС n0 предмет с ID n1.
xxx.id благополучно выдает номер неписей, но для предметов рисует ноль. Так кто такой n1???
Тип instance в скриптах эквивалентен, но не равен типу int.
Т.к. в Даедалусе можно выполнять операции только с простыми типами, а производные типы в нем вообще отсутствуют (указатель, ссылка), то возникает сложность передачи (или присвоения) указателя на класс, а конкретнее на инстанцию (т.к. класс в чистом виде, без инициализации, в скриптах не используется). Для такой возможности разработчики сделали следующее - переопределили тип инстанции к типу int. Функции движка (системные) понимают такое переопределение и работают с ним правильно, с прикладными функциями (записанными в скриптах) всё обстоит сложнее, попробую показать это на примере.
Пример: есть instance hero(C_NPC) и есть const int MyInt = 3; также есть функция func int Info(var int Info_inst). Эту функцию можно вызвать так Info(hero) или так Info(MyInt).
Компиляторы, отличные от GS, пропустят оба выражения и не сообщат об ошибках, но первое выражение правильно, а второе - ошибочно. Компилятор GothicSourcer способен распознавать такие ошибки, но только с вашей помощью.
В папке System есть два файла RedefinedFunc.d и RedefinedLocalVariable.d.
В первый файл записываются функции скриптов (только скриптов, функции движка Готики сюда писать не надо), где запись int# обозначает инстанцию переопределенную к типу int.
Например так: int Info(int#); и т.д.
Во второй файл записываются имена локальных переменных функций, в которых тип instance переопределен к типу int.
После выполнения этих действий вы можете создавать свои функции, аргументом (или возвращаемым значением) которых может быть инстанция, а точнее переопределенный int.
И по аналогии с этим использовать локальные переменные в функциях, состоящие из инстанций.



Добавление от 10/17/07, в 10:59:04
2360:
Уж не знаю как, но в случае с предметами вполен можно написать CreateInvItem(hero,ItFoBeer); (где  ItFoBeer - instance ItFoBeer(C_Item)) и ошибки не будет
Если есть желание можете попробовать другой, "честный" метод:
var int AlbinoBeer;
AlbinoBeer = Hlp_GetInstanceID(ItFoBeer);
CreateInvItem(hero,AlbinoBeer);
Да, оба этих варианта справедливы, но только для функций движка. Поясняю, т.к. инстанция переопределенная к int, есть не что иное, как id инстанции, т.е. её порядковый номер объявления в скриптах. Это справедливо для всех инстанций скриптов, как предметов, нпс, так и других.
Предпочтельно использовать первый метод, т.к. он будет работать и со всеми вашими (прикладными функциями) - см. написанное выше.
Второй метод тоже можно использовать с вашими функциями, но в этом случае аргумент int должен быть "чистым", а не переопределенным, но это приведет несколько к увеличению кода скриптов, нужно всегда будет использовать функцию Hlp_GetInstanceID для получения id инстанции.
Ответить с цитированием
Старый 17.10.2007, 12:58   #1891
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2Vam:
Второй метод тоже можно использовать с вашими функциями, но в этом случае аргумент int должен быть "чистым", а не переопределенным, но это приведет несколько к увеличению кода скриптов, нужно всегда будет использовать функцию Hlp_GetInstanceID для получения id инстанции.
Увы, без него иногда просто не обойтись, например Wld_RemoveNpc (); работает только с типом int. Кстати, а вот и вопрос - если в мир вставить двух одинаковых НПЦ, а потом попробовать удалить их кодом:
Clone = Hlp_GetInstanceID(NON_xxx);
Wld_RemoveNpc (Clone);

Что произойдет? Удаляться оба нпц, ни одного или же мы получим вылет в windows?
Ответить с цитированием
Старый 17.10.2007, 16:40   #1892
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от 360 link=board=gothic&t=1105030050&start=3797200#37972 16 date=10/16/07, в 17:39:40
2okin:
Направление течения определяется в файле Gothic.src. Если вы пользуетесь GothicSourcer'om то при добавлении нового файла скрипта(подключении существующего), он выводит готик.срц списком с предложением вставить создаваемый\подключаемый скрипт в определенную его часть. Разумеется, пользовательские функции должны предшествовать диалогам, иначе получим сообщение о неизвестном идентификаторе (вызове необъявленной ф-ции).
Получается, что файл можно вписать в src выше или ниже независимо от того, где он лежит. Значит, распределение по папкам не имеет значения, это только для удобства пользования? Или?
Ответить с цитированием
Старый 17.10.2007, 16:51   #1893
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
Получается, что файл можно вписать в src выше или ниже независимо от того, где он лежит. Значит, распределение по папкам не имеет значения, это только для удобства пользования? Или?
Точно так. Компилирует GS по порядку, указанному в gothic.src. Все остальное - забота о модостроителях.
Ответить с цитированием
Старый 17.10.2007, 17:11   #1894
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
Получается, что файл можно вписать в src выше или ниже независимо от того, где он лежит. Значит, распределение по папкам не имеет значения, это только для удобства пользования? Или?
Да, всё именно так, значение имеет только местоположение файла в src файле, всё остальное только для удобства.

2360:
Увы, без него иногда просто не обойтись, например Wld_RemoveNpc (); работает только с типом int. Кстати, а вот и вопрос - если в мир вставить двух одинаковых НПЦ, а потом попробовать удалить их кодом:
Clone = Hlp_GetInstanceID(NON_xxx);
Wld_RemoveNpc (Clone);
Что произойдет? Удаляться оба нпц, ни одного или же мы получим вылет в windows?
Значит так:
1. Функция Hlp_GetInstanceID может выдать id только предмета или НПС, на все другие инстанции она выдаст -1.
2. Что делает функция Wld_RemoveNpc внутри себя пока не скажу, поэтому только проба может дать ответ на твой вопрос.

Ответить с цитированием
Старый 17.10.2007, 23:25   #1895
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Умм... Нельзя ж так людей пугать!

Завесила в очередной раз игру, в общем, предполагала, что повиснет, но проверила... Вернула обратно к работавшему варианту. Новый запуск - ВИСИМ!!! Хотя ошибки уже нет! Пробовала удалять строки, закрывать-открывать программу... То же самое.

Помогло удаление файла и создание его заново, с прежним текстом.

Sourcer что, где-то еще запоминает, что было написано? Или это случайный глюк и мне очень повезло?

Наверное, все-таки случайность... Вешаю я игру регулярно и такого раньше не было...

Добавление от 10/17/07, в 23:45:54
Попыталась разобраться, как работают всякие там плиты-наковальни. Вроде что-то поняла, не знаю, насколько правильно...

Вопрос номер раз:
с некоторыми предметами используется OnFunc и вводится константа MOBSI_. Парочку уже ввела... Есть ограничение на их количество? Кажется, где-то я про это уже читала, но не помню... Сколько штук их можно навставлять?

2. Превращение сырого мяса в жареное как будто нигде не нарисовано и является внутренним свойством сковороды... А красные кресты Грега вроде бы вызывают функцию B_SCGetTreasure, но опять же в спейсере ее не видно... Это что, вставлено уже в их ASC или как-их-там-еще-зовут? *Или я чего-то не нашла в скриптах-спейсере? Подскажите, пожалуйста, куда смотреть. Или как увидеть содержимое ентих asc'ов и прочих. Я их трогать не собираюсь, только посмотреть хочу...
Ответить с цитированием
Старый 18.10.2007, 23:49   #1896
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Не могу найти, где описаны заклинания превращения.

С заклинаниями телепорта вроде понятно: Spell_Logic_Teleport, потом в Spell_Cast_Teleport сам AI_Teleport и анимация.

А с превращением все заканчивается на Spell_Logic_TrfDragonSnapper:
Npc_SetActiveSpellInfo(self,DragonSnapper);
return SPL_SENDCAST; - Где искать продолжение? Само описание превращения?

Хочу срисовать оттуда превращение в снеппера. Если просто написать
Mdl_SetVisual(self,"DragonSnapper.mds");
Mdl_SetVisualBody(self,"Razor_Demon_Body",DEFAULT, DEFAULT,""
,DEFAULT,DEFAULT,-1);
то получается бегающий гребешок... Хотя со скелетом все прокатывает, человекообразное все-таки...

ps Понимаю, что вопросы через раз получаются глупые или некорректно сформулированные. Прошу прощения, но я только начинаю разбираться с тем, что все уже выяснили два года назад - в начале этой темы...

Добавление от 10/18/07, в 23:52:53
Кстати, из диалога использовать заклинания нельзя? Только напрямую кастовать?
Ответить с цитированием
Старый 19.10.2007, 01:36   #1897
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

2okin:

А с превращением все заканчивается на Spell_Logic_TrfDragonSnapper:
Npc_SetActiveSpellInfo(self,DragonSnapper);
return SPL_SENDCAST; - Где искать продолжение? Само описание превращения?
- потерянное продолжение в движке игры.
Попробуй использовать удаление и в ставку в мир нового непеся, при перевоплощении если это не Гг,
(хотя и с ним тоже можно попробывать)
.

Кстати, из диалога использовать заклинания нельзя? Только напрямую кастовать?
- нет нельзя.
Отправить личное сообщение для Ответить с цитированием
Старый 19.10.2007, 13:56   #1898
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от MaGoth link=board=gothic&t=1105030050&start=3802350#38023 60 date=10/19/07, в 01:36:47
2okin:
- потерянное продолжение в движке игры.
Попробуй использовать удаление и в ставку в мир нового непеся, при перевоплощении если это не Гг, (хотя и с ним тоже можно попробывать).
С другим неписем представляю, а как такое можно с ГГ провернуть, из скриптов? :o


Заставила другого непися кастануть после диалога превращение в снеппера. Результат порадовал. Появился снеппер, но от первого лица, т. е. он - ГГ и управляется клавишами. А рядом в растерянности стоял прежний ГГ с надписью "Я". *;D ;D ;D
А после обратного превращения снеппер благополучно перекинулся в кастовавшего НПС, пришлось пользоваться марвином и устраивать переселение душ...

То есть, превращенный может быть только ГГ и не важно, что он уже есть, вставляется новый. А при обратном превращении все-таки проверяется, кем он был... Хм, оч наглядно получилось, осталось только понять, можно ли это использовать... ГГ-то из диалога кастовать не заставишь, по крайней мере так, как я для нпс сделала... И превратить другого низя...

Н-да, получилось то самое удаление-вставка (вернее, вставка-удаление) в исполнении движка. Радикально. Даже слишком.

??? Можно устроить переселение душ без марвина? Где определяется, что "вот это - ГГ"? Подменить бы в последний момент кастующего... ::)
Ответить с цитированием
Старый 19.10.2007, 16:46   #1899
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
??? Можно устроить переселение душ без марвина? Где определяется, что "вот это - ГГ"?
Инстанция hero и есть ГГ.
Ответить с цитированием
Старый 19.10.2007, 20:08   #1900
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2Vam:
Инстанция hero и есть ГГ.
Ну да, вроде все было понятно, hero - он и в Африке hero... Но меня эта ситуация с превращением озадачила. Когда ГГ в виде снеппера клавишами управляется, кто рядом стоит? "Я" же остается ГГ, он как был прописан, таким и остался. А управление потерял. И как зовут снеппера - он тоже pc_hero с другой внешностью? Хотя если из него выселиться, он вполне дикий...
А если вставить непися и попросить его атаковать hero, на кого он все-таки нападет? Приду с работы проверю... Или ему сплохеет от такого издевательства? Тем более проверю! ;D
Или если удалить "Я"... Вылетит сразу или при обратном превращении?

Как получилось два ГГ и по какому принципу выбрался управляемый? Что происходит, когда в марвине нажимается "О"? Именно про эту штуку я и спрашивала, что определяет ГГ, управляемое состояние?

С заклом превращения не в тех руках - это, конечно, непредусмотренное безобразие... Но, может, можно это использовать? Очень хочется превратить ГГ в зверя, но в определенный момент, не давать ему в руки свиток...

М-дя, опять сумбур, но точно сформулированный вопрос наполовину является ответом, а это мне пока не светит...

Спрашивать, где нарисована невозможность сохранения игры в виде монстра и обратное превращение enter'ом, конечно, бесполезно? *::)
И до сохраненных характеристик НПС, в которого предстоит обратно перекидываться, тоже не достать?
Ответить с цитированием
Старый 19.10.2007, 20:18   #1901
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
Спрашивать, где нарисована невозможность сохранения игры в виде монстра и обратное превращение enter'ом, конечно, бесполезно?  
Все там же - в недрах движка Готики :)
И до сохраненных характеристик НПС, в которого предстоит обратно перекидываться, тоже не достать?
Вообще харакеристики можно достать обращаясь к массиву hero.attribute[], если hero в этот момент, конечно, снеппером не становится  ;)
Очень хочется превратить ГГ в зверя, но в определенный момент, не давать ему в руки свиток...
Не совсем понял, что вы тут сделать хотите? :) В определенный момент не давать свитком воспользоваться? Я могу, конечно ошибаться, я с таким не сталкивался, но можно попробовать перехватить действие свитка до того, как он передаст ф-ции создания движку. Поставить доп. условие в виде некой функции в самом скрипте кастования. При определенных услвоиях ф-ция возвращает 1, т.е. true в прочих - false, соответственно в зависимости от этого заклинание либо кастуется, либо нет.
Ответить с цитированием
Старый 19.10.2007, 22:26   #1902
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

360:
Вообще харакеристики можно достать обращаясь к массиву hero.attribute[], если hero в этот момент, конечно, снеппером не становится *;)
Да не те характеристики... Получилось, что закл превращения просто вставляет в мир снеппера, независимо от того, кто кастовал. А вот обратное превращение - точное, то есть где-то сохраняются характеристики кастующего. Вот они мне и нужны. Вернее, не они, а возможность вставить туда ГГ. Чтоб снеппер обратно превратился в ГГ, а не в мага. Поудалять лишних свидетелей - и получится нужный результат...
Но подозреваю, что ответ будет такой же: :(
Все там же - в недрах движка Готики :)
Не совсем понял, что вы тут сделать хотите?
Скорее всего, изобретаю очередной велосипед. ;)
Хочу сделать превращение ГГ в зверя из диалога. Злой дяденька маг говорит: "Чичас я тебя..." и превращает ГГ в снеппера.
- Через SetVisual не получилось, одни рога видны.
- Заклинания в движке, сделать аналогично не получается.
- Заставить ГГ кастануть из диалога низя.
А пока я пыталась разобраться, как оно устроено, получился смешной вариант с магом... Теперь буду с ним развлекаться ;D.

Наверное, есть какой-нибудь очень простой способ превратить ГГ, который я буду очень долго искать?.. ::)

Кстати, есть же всякие проверочные варианты ГГ, типа рокфеллера и т.д. Как они вставляются в игру?
Ответить с цитированием
Старый 21.10.2007, 15:08   #1903
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Вроде сделала - выглядит вполне как превращение, но на самом деле оно замена...

И я вся в сомнениях *- замененный ГГ полноценный или в некий светлый миг может вылезти ошибка? *

На вид ГГ как ГГ. Опыт исправно начисляется, уровни меняются, лп дают... Вроде все путем. Осталось выловить и вписать недостающие умения (если успел что-то выучить) и понять, что делать с инвентарем (тоже забавный момент!)

Черт, но он все-таки нормальный или нет?
Ответить с цитированием
Старый 21.10.2007, 23:01   #1904
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

2okin:

Нормальный он.  :)
Теперь тебе останется написать функцию перебора всего инвентаря, чтобы добавлять новому Гг в инвентарь предметы, думаю для этого лучше использовать массивы для проверок того что есть в инвентаре у Гг, и после превращения обратно в чела, добавлять ему то что было в инвентаре до превращения.

Получится километровый скрипт проверки, который для активации нуна будет частичто использовать в превращении в зверя, это чтобы понять что есть у Гг и вторая часть, при обратном, чтобы дать Гг то что было. :)
Тоже для статов но там мона переменными обойтись, массив не нужен. ;)
Отправить личное сообщение для Ответить с цитированием
Старый 23.10.2007, 10:33   #1905
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Народ, подскажите, плз, как с массивами обращаться. Те, что введены в Constants для заклинаний, дальше в скриптах не используются... Где можно найти пример, ну или что с ними можно делать?

С перекидыванием инвентаря получается длиннющее безобразие. Все, что поможет его сократить, будет манной небесной... ::)
Ответить с цитированием
Старый 23.10.2007, 11:01   #1906
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
Народ, подскажите, плз, как с массивами обращаться.
Сначала скажи, что ты хочешь с ними (массивами) сделать ::)
А обращаются с ними обычно по правилам скриптов - можно взять элемент массива, можно положить элемент в массив. Ограничения - индекс элемента должен быть константой, а не переменной, max размер массива - 255 элементов.
Ответить с цитированием
Старый 23.10.2007, 11:55   #1907
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Vam:
Сначала скажи, что ты хочешь с ними (массивами) сделать ::)
Чтоб понять, что я с ними хочу сделать, мне надо сначала понять, что с ними вообще МОЖНО делать. И как. А дальше я как-нить сообразю.

Пытаюсь понять премудрый совет Магота ;). Копирую инвентарь. Сделала кусочек на пробу с переменными. Работает, но это длинное уродство...

А обращаются с ними обычно по правилам скриптов - можно взять элемент массива, можно положить элемент в массив. Ограничения - индекс элемента должен быть константой, а не переменной, max размер массива - 255 элементов.
А как это - взять, положить? Где-нибудь пример можно найти? Чтоб понять, с чем это едят? Это как - одна переменная хором на много значений или как?
Ответить с цитированием
Старый 24.10.2007, 15:34   #1908
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
А как это - взять, положить? Где-нибудь пример можно найти? Чтоб понять, с чем это едят? Это как - одна переменная хором на много значений или как?
Это очень просто, всё как и с переменными.
пример: массив из класса C_NPC - int aivar[100];
можем взять значение из массива:
ааа = aivar[3];, где - ааа объявлен ранее как var int aaa; или const int aaa; 3 - индекс переменной в массиве
или ааа != aivar[3], или ааа == aivar[3], и т.д. любая операция сравнения тоже берет значение из массива и сравнивает с чем-либо.
можем положить значение в массив:
aivar[3] = ааа;
вместо индекса 3, может быть запись ввв, где - ввв объявлен ранее как const int ввв; в качестве индекса var int ввв; использовать нельзя.
Ответить с цитированием
Старый 24.10.2007, 16:30   #1909
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2Vam:
вместо индекса 3, может быть запись ввв, где - ввв объявлен ранее как const int ввв; в качестве индекса var int ввв; использовать нельзя
Кстати да, очень важное замечание - я так уже накололся, пытаясь сократить количество кода и был неприятно удивлен такой особенности даедалуса. Весьма странно, когда наряду с некоторыми удобными вещами натыкаешься на такие подводные камни.
Ответить с цитированием
Старый 25.10.2007, 13:11   #1910
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Vam:
360:

Спасибо. Буду играться... :)

ВОПРОС: Везде пишут, что при изменении скриптов надо начинать игру заново,а то неписи новые не вставляются и изменений не будет... Но некоторые изменения все-таки видны, иногда срабатывают свеженаписанные функции, которых точно в сейвах не было. Но вроде тоже не все... ::)

Почему так получается и, соответственно, когда нужно начинать новую игру, а когда не обязательно? Я уже Ксара в начале игры видеть не могу, хоть и закомментировала диалоги... И ждать долго...

2. Как можно убрать ролик в самом начале? Мешает...
Ответить с цитированием
Старый 25.10.2007, 13:13   #1911
kraw

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Может кто сталкивался с такой проблемой, и/или может что-то посоветовать:

В движке Готики есть возможность диалога 2-х персонажей, один из которых ГГ.
Понадобилось мне ввести в диалог 3-го персонажа. Сделал это достаточно просто. Он говорил, обращаясь к other, пришлось еще его заставить AI_WaitTillEnd, ну и AI_TurnToNPC. Немного пошлифовал синхронизацию и добился желаемого эффекта. В диалоге участвовало трое.

Дальше - больше. Понадобился диалог, где участвуют четверо. Причем ГГ - как сторонний наблюдатель. И вот один из собеседников (из тех, что не self и не other) вываливается из диалога. Т. е. вдруг продолжает свое расписание и не хочет говорить диалоговые фразы. Например, если у него в расписании SmallTalk, то говорит эти фразы вместо диалоговых. Может уйти раньше завершения диалога на свою wp. Или, если у него в расписаннии GuidePC, повернул голову к ГГ, несмотря на AI_TurnToNPC.

Может кто-нибудь, что-нибудь посоветует как избавиться от этих эффектов?

PS: Пришла идея, а что, если бы other сделать не ГГ, а другого персонажа. Может кто что-то похожее делал?

Добавление от 10/25/07, в 13:32:41
Цитата:
Сообщение от okin link=board=gothic&t=1105030050&start=3815250#38152 71 date=10/25/07, в 13:11:44
Vam:
360:

Спасибо. Буду играться... :)

ВОПРОС: Везде пишут, что при изменении скриптов надо начинать игру заново,а то неписи новые не вставляются и изменений не будет... Но некоторые изменения все-таки видны, иногда срабатывают свеженаписанные функции, которых точно в сейвах не было. Но вроде тоже не все... ::)

Почему так получается и, соответственно, когда нужно начинать новую игру, а когда не обязательно? Я уже Ксара в начале игры видеть не могу, хоть и закомментировала диалоги... И ждать долго...

Насколько я понимаю, когда добавляется новый объект (диалог, персонаж, предмет и т.п., т. е. instance), тогда надо начинать заново, чтобы при инициализации эти объекты были сосзданы. Если же добавляются функции, то это уже процедурные изменения, объекты не добавляются, инициализировать нет необходимости.

Исходя из этого я поступаю следующим образом. Задумывая сюжетную линию, прогнозирую сколько будет добавлено диалогов и у каких персонажей (чтобы они получали более-менее адекватные идентификаторы, иначе легко будет запутаться). Условия к ним возвращают 0. Также поступаю и с персонажами. И потом только наполняю эти объекты содержанием. Поэтому переигрывать при создании сюжетной линии не приходится.
Ответить с цитированием
Старый 25.10.2007, 14:03   #1912
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
2. Как можно убрать ролик в самом начале? Мешает...
Найдите в startup.d строчки вида PlayVideo(xxx); и закомментируйте ;)
2kraw:
Скорее всего, существут некое ограничение по времени, в течение которого НПЦ ждет реакцию а после возвращается к расписанию. ВОзможно также, что из-за отсутвия озвучки диалогов это происходит раньше, чем хотелось бы. А что если попробовать дать НПЦ чужие озвученные фразы и понаблюдать за реакцией?
Ответить с цитированием
Старый 26.10.2007, 11:36   #1913
kraw

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от 360 link=board=gothic&t=1105030050&start=3815350#38153 72 date=10/25/07, в 14:03:42

2kraw:
Скорее всего, существут некое ограничение по времени, в течение которого НПЦ ждет реакцию а после возвращается к расписанию. ВОзможно также, что из-за отсутвия озвучки диалогов это происходит раньше, чем хотелось бы. А что если попробовать дать НПЦ чужие озвученные фразы и понаблюдать за реакцией?
Попробую. Только вот сюжетно не очень хорошо получается... Впрочем, тут можно сманеврировать.

Добавление от 10/26/07, в 11:56:20
Кажется проблему решил.

Во многом дело было в использовании модифицированной функции состояния SmallTalk, которая перехватывала управление "лишними" участниками диалогов. Заменил на Stay и большая часть проблемы решилась. Ну и еще пришлось пошаманить. Например, если делать AI_GotNPC для other, то начинают в диалоге лезть глюки. А если не делать, то, вроде бы, все нормально.

Ну и не давал персонажам долго бездействовать во время диалога.
Ответить с цитированием
Старый 30.10.2007, 14:44   #1914
Kvils

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2ALL: не мог бы кто-нить подробненько написать о вставке НПС в мир при активации триггера, ато мне сказали, что надо прописывать это в скриптах и в Спайсере, вот только я не знаю где и как прописывать?
Ответить с цитированием
Старый 30.10.2007, 15:28   #1915
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2Владай: Со стороны скрипта все просто - создается некая функция, ну например
func void trigger_insert()
{
Wld_InsertNpc ([инстанция_нпс], "[вейпоинт]");
};
где [инстанция_нпс] - вставляемый НПЦ, а [вейпоинт] - имя вейпоинта на который вставляется НПЦ.

Соответсвенно, чтобы вставка произошла, функцию необходимо вызвать. А раз речь идет о триггерах, ф-цию будем вызывать при срабатывании триггера. Для создания триггера как раз и необходим спейсер.

Необходимый нам триггер принадлежит к классу zCTrigger и зовется oCTriggerScript.
Соответсвенно:
1. Выбираем панель "objects", вкладку "create" и из списоков - zCTriggerBase -> zCTrigger -> oCTriggerScript.
2. Переходим в основное окно, жмем ПКМ и выбираем пункт Insert [oCTriggerScript.]
3. Задаем триггеру размеры с помощью вкладки "Modify" и кнопки "Edit the Bbox"
4. Задаем триггеру условия срабатывания reactToOnTouch:TRUE, respondToPC:TRUE, respondToNPC:FALSE, startEnabled:TRUE *(подробнее тут -> http://mod.worldofgothic.ru/3s_zen/48/spacer-basilio58)
5. В параметр scriptFunc вписываем имя нашей ф-ции - trigger_insert.
Остается собрать ZEN-файл и откомпилировать gothic.dat.
По-моему - так :)
Ответить с цитированием
Старый 03.11.2007, 19:13   #1916
Kvils

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2360: А функцию нада в Стартапе прописывать? И после какой функции (или все равно где писать)? Например мне надо в Newworld'е сделать появление нпц, ну так это писать после записей про мир (инициализации и др.)?
Ответить с цитированием
Старый 03.11.2007, 19:24   #1917
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Не могу понять, как в игре считается время. ::)

Мне нужно отловить КОНЕЦ действия Mdl_ApplyOverlayMDSTimed (c_npc self, string overlayname, int timeTicks);

- Пробовала использовать Npc_HasBodyFlag или Npc_GetBodyState.
Они срабатывает в первый момент, но кончает действовать гораздо раньше, чем проходит timeTicks. Не знаю почему, но получается так...

- Пробовала в цикле zs_loop использовать Npc_GetStateTime. Для наглядности попросила его печатать значение. Оно все время равно 0, то есть в ней время не идет, хотя вроде должно... Или я неправильно использую функцию - время какого состояния она отсчитывает?

- Вставила в zs_loop переменную, прибавляя по единице в каждом цикле. Тоже распечатала значения и эмпирически подобрала то, которое соответствует timeTicks. *Ура, все работает!
А потом вдруг задумалась - скорость счета в цикле связана с внутренним временем игры? Она не будет зависеть, например, от компа? Что это за единица времени - один цикл??? :o

В общем, объясните, если можно, в чем считаются время в игре и чему соответствуют циклы? И как связано время, проставленное в разных функциях?
Ответить с цитированием
Старый 06.11.2007, 12:57   #1918
Vam

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
- Вставила в zs_loop переменную, прибавляя по единице в каждом цикле. Тоже распечатала значения и эмпирически подобрала то, которое соответствует timeTicks.  Ура, все работает!
Это единственное правильное решение получения времени работы какого-либо состояния.

А потом вдруг задумалась - скорость счета в цикле связана с внутренним временем игры? Она не будет зависеть, например, от компа? Что это за единица времени - один цикл???

В общем, объясните, если можно, в чем считаются время в игре и чему соответствуют циклы? И как связано время, проставленное в разных функциях?
Любая функция цикла вызывается движком 1 раз в секунду, следовательно, счетчик реализованный в функции будет показывать кол-во секунд в данном состоянии.
Ответить с цитированием
Старый 06.11.2007, 19:50   #1919
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2Vam:
Любая функция цикла вызывается движком 1 раз в секунду, следовательно, счетчик реализованный в функции будет показывать кол-во секунд в данном состоянии.
Секунд игровых? Для реальных они чересчур короткие.

А в чем тогда проставлено timeTicks в Mdl_ApplyOverlayMDSTimed ? Соотношение с насчитавшимися "секундами" совершенно кривое...
Ответить с цитированием
Старый 11.11.2007, 19:54   #1920
B_Wolf

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2Vam:
Любая функция цикла вызывается движком 1 раз в секунду
А помоему время цикла зацикленной функции зависит от конкретного восприятия и может варьироваться функцией Npc_SetPercTime(self,0.1);
В данном случае 1/10 секунды.

А вот реальное время в секундах, в котором находится НПЦ, в текущей зацикленной функции по идее считывается через:
int Npc_GetStateTime (c_npc self); - возвращает кол-во секунд, которые НПС self находится в текущем состоянии, заданном в " Loop " цикле.

Также есть еще одна интересная функция:
void Npc_SetStateTime (c_npc self, int seconds); - установить кол-во секунд seconds, как долго НПС self может находится в этом состоянии.
Ответить с цитированием
Страница 48 из 65 « Первая 384142434445464748 4950515253545558 Последняя »


Здесь присутствуют: 3 (пользователей: 0 , гостей: 3)
 

Ваши права в разделе

Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.


Текущее время: 12:40. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot

AGFC: Valley of Gothic © 2004-2022

Яндекс.Метрика