Скрипты, Все вопросы и ответы по скриптам |
Здравствуйте, гость ( Вход | Регистрация )
Скрипты, Все вопросы и ответы по скриптам |
Jun 24 2006, 07:10
Сообщение
#2351
|
|
Level 11 Класс: Воин Характер: Lawful Good Раса: Человек |
Не начинается диалог...
NSS void main() { object oPC = GetEnteringObject(); object oNPC1 = GetObjectByTag("NPC_01"); // Ãëàâàðü object oNPC2 = GetObjectByTag("NPC_02"); // Ëó÷íèöà object oNPC3 = GetObjectByTag("NPC_03"); object oNPC4 = GetObjectByTag("NPC_04"); object oWPpc1 = GetWaypointByTag("WP_PC_1"); object oWP1 = GetWaypointByTag("WP_NPC_01"); object oWP2 = GetWaypointByTag("WP_NPC_02"); object oWP3 = GetWaypointByTag("WP_NPC_03"); object oWP4 = GetWaypointByTag("WP_NPC_04"); object oDoor1 = GetObjectByTag("DOOR_01"); // Äâåðü Ãëàâàðÿ object oDoor2 = GetObjectByTag("DOOR_02"); // Äâåðü ëó÷íèöû object oDoor3 = GetObjectByTag("DOOR_03"); // Íàøà äâåðü object oDoor4 = GetObjectByTag("DOOR_04"); // Íàøà äâåðü if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1) return; { SetLocalInt(OBJECT_SELF, "TRIGGER", 1); SetCutsceneMode(oPC); AssignCommand(oPC, ClearAllActions()); AssignCommand(oNPC1, ClearAllActions()); AssignCommand(oNPC2, ClearAllActions()); AssignCommand(oNPC3, ClearAllActions()); AssignCommand(oNPC4, ClearAllActions()); ActionDoCommand(AssignCommand(oPC, ActionMoveToObject(oWPpc1))); ActionDoCommand(AssignCommand(oPC, SetCameraFacing(280.0, 7.0, 45.0, CAMERA_TRANSITION_TYPE_SLOW))); ActionDoCommand(AssignCommand(oPC, SpeakString("Êàê-òî ñäåñü ìðà÷íî... è... ïîäîçðèòåëüíî òèõî..."))); ActionWait(9.5); ActionDoCommand(AssignCommand(oDoor1, ActionOpenDoor(OBJECT_SELF))); ActionDoCommand(AssignCommand(oDoor2, ActionOpenDoor(OBJECT_SELF))); ActionDoCommand(AssignCommand(oDoor3, ActionOpenDoor(OBJECT_SELF))); ActionDoCommand(AssignCommand(oDoor4, ActionOpenDoor(OBJECT_SELF))); ActionWait(1.0); ActionDoCommand(AssignCommand(oNPC1, ActionForceFollowObject(oWP1))); ActionDoCommand(AssignCommand(oNPC2, ActionForceFollowObject(oWP2))); ActionDoCommand(AssignCommand(oNPC3, ActionForceFollowObject(oWP3))); ActionDoCommand(AssignCommand(oNPC4, ActionForceFollowObject(oWP4))); ActionWait(4.5); ActionStartConversation(GetFirstPC(), "bandit1"); } } |
Jun 24 2006, 09:27
Сообщение
#2352
|
|
Вечно меняющийся Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] |
Белатрис
Строка: NSS ActionStartConversation(GetFirstPC(), "bandit1"); Начинает диалог, с самим триггером. К тому же, зачем использовать функцию GetFirstPC() если игрок и так определен ? + Просто-напросто, может отсутствовать диалог. PS: на будущее, копируй код с элементами русс. речи (комментариями, текстом) на русской раскладке. |
Jun 24 2006, 18:45
Сообщение
#2353
|
|
Level 1 Класс: Друид Характер: Neutral Good Раса: Эльф |
Всем привет, Дамы и Господа.
Насколько я понимаю скрипты разбираются здесь. Дело в том, что на просторах инета я нашел один интересный скриптик. Этот скрипт меняет свойство навыка Animal Empathy у рэйнджэра и друида (вкратце, зверье не привлекается на сторону последних, но и не атакует их). Возникла одна проблема - скрипт идет только под HotU v. 1.66, а с учетом моего соединения скачать 76 Мб нереально. К тому же хотелось бы вставить подобное нововведение в кампанию, а не только в модули. Простой записи в Оверрайд не только основного файла (выложен файл *.erf), но даже его содержимого не достаточно. Если кого-то как и меня заинтересует подобное, то ниже ссылка. nwvault.ign.com Заранее спасибо за помощь... |
Jun 24 2006, 19:07
Сообщение
#2354
|
|
Вечно меняющийся Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] |
Alaron
В HotU, и 1.66 есть новые фун-ции, и если они используются в скрипте, то тут уже ничего не поделаешь, остаеться только ставить аддон и патчить игру. QUOTE Простой записи в Оверрайд не только основного файла (выложен файл *.erf), но даже его содержимого не достаточно. еrf, не нужно записывать в ovveride, они просто импортируются в модуль. (File - Import - нужный *erf) |
Jun 24 2006, 20:53
Сообщение
#2355
|
|
Level 1 Класс: Друид Характер: Neutral Good Раса: Эльф |
QUOTE В HotU, и 1.66 есть новые фун-ции, и если они используются в скрипте, то тут уже ничего не поделаешь, остаеться только ставить аддон и патчить игру. Что это меняет? Даже если пропатчить игру, то вставить скрипты в кампанию не выйдет, т.к. Тулсет просто откажется компилировать содержимое, ссылаясь на пропасть ошибок... QUOTE еrf, не нужно записывать в ovveride, они просто импортируются в модуль. (File - Import - нужный *erf) Я понимаю, тем не менее должна быть возможность вставить скрипты не в модуль, а в саму кампанию... Сообщение отредактировал Alaron - Jun 24 2006, 20:54 |
Jun 24 2006, 20:59
Сообщение
#2356
|
|
Вечно меняющийся Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] |
Alaron
QUOTE Я понимаю, тем не менее должна быть возможность вставить скрипты не в модуль, а в саму кампанию... Модули компании, лежат в папке nwn, и имеют расширение *NWN, для того чтобы открыть их в тулсете, просто смени расширение на *MOD, перезапиши в moduls, спокойно импортируй скрипт, сохраняй мод, а потом опять меняй расширение на *NWN, и записывай в прежнею папку. Сообщение отредактировал Dik Morris - Jun 25 2006, 12:39 |
Jun 24 2006, 22:35
Сообщение
#2357
|
|
Level 1 Класс: Друид Характер: Neutral Good Раса: Эльф |
QUOTE Модули компании, лежат в папке nwn, и имеют расширение *NWN, для того чтобы открыть их в тулсете, просто сменить расширение на *MOD, перезапиши в moduls, спокойно импортируй скрипт, сохраняй мод, а потом опять меняй расширение на *NWN, и записывай в прежнею папку. Как я уже писал выше, Тулсет сохраняет модули с пропастью ошибок в основном в скриптах. (IMG:style_emoticons/kolobok_light/sad.gif) К тому же придется прописывать скрипты ВО ВСЕХ МОДУЛЯХ, а это пи... в общем, крайне нежелательно. (IMG:style_emoticons/kolobok_light/suicide2.gif) В любом случае спасибо за совет... (IMG:style_emoticons/kolobok_light/declare.gif) Сообщение отредактировал Alaron - Jun 24 2006, 22:35 |
Jun 24 2006, 23:10
Сообщение
#2358
|
|
Level 9 Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен |
Alaron, а что тебе мешает исправить эти ошибки? Ну если ты хочешь изменить что-то в модулях компании, то делать это лучше все же во всех модулях. Да, вот еще что, если ты обратил внимание, то все модули сделаны так, чтобы в них не было ничего от аддона, в котором компания не делалась.
|
Jun 24 2006, 23:41
Сообщение
#2359
|
|
Level 11 Класс: Воин Характер: Lawful Good Раса: Человек |
QUOTE(Dik Morris @ Jun 24 2006, 17:27) [snapback]85785[/snapback] Белатрис Строка: NSS ActionStartConversation(GetFirstPC(), "bandit1"); Начинает диалог, с самим триггером. К тому же, зачем использовать функцию GetFirstPC() если игрок и так определен ? + Просто-напросто, может отсутствовать диалог. PS: на будущее, копируй код с элементами русс. речи (комментариями, текстом) на русской раскладке. А написать нельзя? (IMG:style_emoticons/kolobok_light/shout.gif) Айван: послушай меня, если тебе надо что бы КТО-ТО написал за тебя скрипт, то просить надо вежливо и низко кланяясь. ТУТ ТЕБЕ НИКТО НИЧЕГО НЕ ДОЛЖЕН. Если не умеешь, сразу и говори Я НЕ НИЧЕГО НЕ УМЕЮ. И люди не будут время тратить на объяснение и идеи. Я уже устал говорить, что мало что знаю, но народ этого не замечает! Вон, на предыдущей странице(кажется) я написал, что вообще все забыл. Этого не достаточно? Да и к тому же, я не приказываю, просто Дик первым увидел мой пост с 10 вопросами, почему же тогда он не вспомнил, что я ни-ни в скриптах, мне-то всего нужно было написать несколько строчек. Я могу лишь, что-то делать пользуясь чужими матерьялами ("вопросы и ответы" к примеру).. Дик, прошу прощения, если обидел, я не хотел, честно! Сообщение отредактировал Белатрис - Jun 25 2006, 10:19 |
Jun 25 2006, 08:25
Сообщение
#2360
|
|
Вечно меняющийся Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] |
QUOTE(Alaron @ Jun 25 2006, 01:35) [snapback]85809[/snapback] Как я уже писал выше, Тулсет сохраняет модули с пропастью ошибок в основном в скриптах. (IMG:style_emoticons/kolobok_light/sad.gif) К тому же придется прописывать скрипты ВО ВСЕХ МОДУЛЯХ, а это пи... в общем, крайне нежелательно. (IMG:style_emoticons/kolobok_light/suicide2.gif) В любом случае спасибо за совет... (IMG:style_emoticons/kolobok_light/declare.gif) Я говорил в предыдущем посте, что в более новой версии игры есть новые функции, скрипт без них - работать не сможет, отсюда и ошибки. (Я про код, в erf) Белатрис Во первых, какой вопрос - такой и ответ. Во вторых, Aiwan уже написал, тебе тут никто ничего не должен. По вопросу, eсли я правильно понял, то диалог игрок должен начать с одним из NPC, для этого, используй функцию: AssignCommand. Т.е последняя строчка, будет выглядеть так: NSS ActionDoCommand(AssignCommand(Нужный NPC, ActionStartConversation(oPC, "bandit1")));
Сообщение отредактировал Dik Morris - Jun 25 2006, 10:34 |
Jun 25 2006, 08:58
Сообщение
#2361
|
|
Level 1 Класс: Друид Характер: Neutral Good Раса: Эльф |
QUOTE Да, вот еще что, если ты обратил внимание, то все модули сделаны так, чтобы в них не было ничего от аддона, в котором компания не делалась. Да уж. И первые проявления этого - отказы в компилляции... (IMG:style_emoticons/kolobok_light/sad.gif) Dik Morris, Zirrex, спасибо. Пойду искать пропатченную версию в продаже, т.к. скачать 76 мб нереально... (IMG:style_emoticons/kolobok_light/sad.gif) Сообщение отредактировал Alaron - Jun 25 2006, 09:02 |
Jun 25 2006, 10:21
Сообщение
#2362
|
|
Level 11 Класс: Воин Характер: Lawful Good Раса: Человек |
Dik Morris, теперь мне понятно! СПАСИБО БОЛЬШОЕ!
|
Jun 26 2006, 05:25
Сообщение
#2363
|
|
Level 11 Класс: Воин Характер: Lawful Good Раса: Человек |
А как уничтожить скрипт, который, допустим запускается второй раз (это в диалоге)?
|
Jun 26 2006, 08:56
Сообщение
#2364
|
|
Вечно меняющийся Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] |
Белатрис, нужно просто делать проверку на локальные переменные.
По ним читай Здесь, либо в мануале от Aiwan'a. PS: т.е скрипт у тебя будет иметь такой вид: NSS void main()
{ if (GetLocalInt(OBJECT_SELF, "temp") == 0) { SetLocalInt(OBJECT_SELF, "temp",1); // Код ; } } |
Jun 26 2006, 12:33
Сообщение
#2365
|
|
Level 1 Класс: Друид Характер: Neutral Good Раса: Эльф |
Дамы и Господа, помогите, плиз, решить задачку.
Дано: Файл *.erf в нем *.uti, скрипты и информация для экспорта (кому интересно, ссылка выше на nwvault) Надо: Как можно удобнее вставить сие нововведение в кампании (NWN, SoU и HotU) Решение: Наиболее вероятным решением всех отозвавшихся является вставка через Аврору перепакованием модулей. Вопрос: Можно ли вставить содержимое файла ерф в Оверрайд и как? Если никак, то что еще можете предложить? Заранее much thanks... Сообщение отредактировал Alaron - Jun 26 2006, 12:34 |
Jun 27 2006, 08:29
Сообщение
#2366
|
|
Level 9 Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен |
Alaron, без внедрения в модули, у тебя ничего не получится. Скрипты сделаны с таким учетом, что ты их будешь устанавливать именно в модуль, а не отдельно. Отдельно же они даже работать не будут, потому что не понятно к чему относятся.
|
Jun 27 2006, 08:47
Сообщение
#2367
|
|
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
ИМХО, можно, только ncs (скомпилированные).
|
Jun 27 2006, 09:00
Сообщение
#2368
|
|
Лорд AxisTown'a Класс: Монах Характер: Lawful Good Раса: Дварф NWN: Маппинг |
QUOTE почему же тогда он не вспомнил, что я ни-ни в скриптах, ... а почему ОН( или кто-то другой) должен что-то о тебе вспоминать специально? я конечно понимаю, что каждый человек выдающиеся , уникальная ит итп личность, но , скриптеры , как правило , люди занятые своими собственными скриптами и в голове лишнюю информацию не держат..так что , если что-то надо конкретное, то и и писать надо соответственно ибо со чтением чужих мыслей у нас не очень получаеться пока (IMG:style_emoticons/kolobok_light/biggrin.gif) (IMG:style_emoticons/kolobok_light/mosking.gif) п.с. вышесказанное ,кстати, не только к конкретному случаю относиться (IMG:style_emoticons/kolobok_light/biggrin.gif) |
Jul 2 2006, 12:59
Сообщение
#2369
|
|
Level 2 Класс: Маг Характер: Chaotic Evil Раса: Полуэльф |
Доброго времени суток.
Прошу не посылать читать мануалы. Те кто пользуются NWNX знаю, что припомощи NWNX можно связать NWN и MySQL. Я связал (все отлично работает), но теперь появились вопросы: как записать данный в таблицу и как их от туда причитать и записать в переменные. Записать оказалось очень легко, но как от туда их прочитать? Собственно трока для записи в таблицу NSS string sSQL="INSERT INTO nwn(playername, charname, pc_dm, ip_address) "+ "VALUES('"+sPlayer+"','"+sChar+"','"+sDM+"','"+ip+"')"; SQLExecDirect(sSQL); Тут мы записываем в таблицу "nwn" в соответсвующие поля переменные sPlayer, sChar, sDM, ip. А как, имея уже заполненную таблицу, записать значения каждого соответсв. поля в переменную sPlayer, sChar, sDM, ip? Поидее мы должны выбрать сделать "SELECT * FROM `nwn_stast` WHERE 'playername' = 'sPlayer'" и т.п., а потом из полученного результата прочитать для каждой переменной значения. Как это сделать? |
Jul 2 2006, 13:28
Сообщение
#2370
|
|
Level 6 Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] |
я очень давно занимался nwnx'ом и т.д.. по памяти, там есть функции:
QUOTE SQLFirstRow\SQLFetch <- для чеков SQLExecDirect <- запрос SQLGetData <- получение данных ^ помойму что-то типа string sResult = SQLGetData(1); после запроса SELECT помойму так.. посмотри подфорум - Шарды рунета.. там было про ето Сообщение отредактировал [MoF]Darth_Nick - Jul 2 2006, 14:16 |
Jul 2 2006, 14:35
Сообщение
#2371
|
|
Level 8 Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек |
QUOTE(OxCom @ Jul 2 2006, 12:59) [snapback]86839[/snapback] Записать оказалось очень легко, но как от туда их прочитать? Собственно трока для записи в таблицу NSS string sSQL="INSERT INTO nwn(playername, charname, pc_dm, ip_address) "+ "VALUES('"+sPlayer+"','"+sChar+"','"+sDM+"','"+ip+"')"; SQLExecDirect(sSQL); Тут мы записываем в таблицу "nwn" в соответсвующие поля переменные sPlayer, sChar, sDM, ip. А как, имея уже заполненную таблицу, записать значения каждого соответсв. поля в переменную sPlayer, sChar, sDM, ip? Поидее мы должны выбрать сделать "SELECT * FROM `nwn_stast` WHERE 'playername' = 'sPlayer'" и т.п., а потом из полученного результата прочитать для каждой переменной значения. Как это сделать? следующий код сделает запрос: NSS string sPlayer = SQLEncodeSpecialChars("Аккаунт"); string sSQL = "SELECT * FROM nwn_stast WHERE playername='"+ sPlayer +"'"; SQLExecDirect(sSQL); результатом которого будет набор записей со значением "Аккаунт" в поле playername функция SQLFetch() позволит продвигаться по результирующему набору от первой записи до последней, возвращая SQL_SUCCES в том случае, если запись существует и SQL_ERROR в противоположном если SQLFetch() вернула SQL_SUCCES - значит можно получить значения полей текущей записи функцией SQLGetData(), в качестве параметра которой передается номер поля |
Jul 2 2006, 18:45
Сообщение
#2372
|
|
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
Насколько я помню, какие-то примеры должны быть в демо-модуле NWNX-ODBC.
Во-первых, начну с совета. Использовать в запросах заранее неизвестные и задаваемые игроком строки (имя чара, аккаунт и т.д.) следует ТОЛЬКО с функцией SQLEncodeSpecialChars. т.е.: "SELECT ..... WHERE ...='"+SQLEncodeSpecialChars(sString)+"' ...". То же и при INSERT. В базе эти строки будут закодированными (' заменяется на `~), а при их вытаскивании нужно будет сделать SQLDecodeSpecialChars. Во-вторых, как вытаскивать записи из базы. Приведу примеры. Получение номера и прав игрока (нужна одна запись): NSS #include "aps_include" ... string sName = GetName(oPC); string sAccount = GetPCPlayerName(oPC); SQLExecDirect("SELECT id, rights FROM nwn WHERE playername='"+SQLEncodeSpecialChars(sAccount)+"' AND charname='"+SQLEncodeSpecialChars(sName)+"'"); //Выполнение запроса if(SQLFetch()) //если есть хоть одна такая запись { int nID = StringToInt(SQLGetData(1)); //поле 1 - id int nRights = StringToInt(SQLGetData(2)); //поле 2 - rights } Получение нескольких записей (инициализация заданных переменных - упрощенный вариант): NSS #include "aps_include" SQLExecDirect("SELECT name, val FROM preset_vars"); //запрос while(SQLFetch()) //пролистывать записи до конца { string sVarName = SQLGetData(1); int nVal = StringToInt(SQLGetData(2)); SetLocalInt(GetModule(), sVarName, nVal); } На Экзисе я использую немного изменённую библиотеку, в частности там укорочены имена функций (SQLExec, SQLGet) и улучшена SQLEncodeSpecialChars: в запрос добавляется "\", и декодировать уже ничего не надо. Сообщение отредактировал virusman - Jul 2 2006, 18:49 |
Jul 6 2006, 13:52
Сообщение
#2373
|
|
Level 2 Класс: Маг Характер: Chaotic Evil Раса: Полуэльф |
Спасибо разобрался. Теперь такой вопрос:
Поставил скрипт в OnClientLeave. Он не срабатывает когда игрок выходит. NSS #инклуды void main() { object oPC = GetExitingObject(); if (!GetIsPC(oPC)) return; #работа с MySQL } Если этот же скрипт поставить объекту на OnUse и заменить GetExitingObject(); на GetExitingObject(); то все работает. |
Jul 6 2006, 15:36
Сообщение
#2374
|
|
Level 17 Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX |
На выходящем игроке некоторые функции не работают. Но это не тот случай, потому что подобный код:
NSS object oPlayer = GetExitingObject(); int nDM = GetIsDM(oPlayer); ... if (!nDM) ExecuteScript("lr_talsave_save",OBJECT_SELF); работает. Сообщение отредактировал virusman - Jul 6 2006, 15:36 |
Jul 6 2006, 19:15
Сообщение
#2375
|
|
Level 8 Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек |
В OnClientLeave функция GetIsPC возвращает FALSE.
|
Текстовая версия | Сейчас: 26th April 2024 - 21:21 |