![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#61
|
|
Level 12 ![]() ![]() ![]() ![]() Класс: Мастер Оружия Характер: Lawful Good Раса: Эльф NWN: Маппинг ![]() |
Нет, тут не для Шарда, а так для одиночной игры, вся ситуация сосотит в том, что мне нужно реализовать суб расу Дроу, которая как известно обладает двумя способностями(на даный момент хватает только спела).
И можетете ктонибудь сказать какой командой можно одеть эту шкуру? |
![]()
Сообщение
#62
|
|
Level 4 ![]() ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Орк NWN: Скриптинг [PW] ![]() |
Такой вопрос:
можно ли каким нибудь образом восстановить игроку запомненные, но уже использованные спеллы (без отдыха)? Ато я в тулсете знаю только возможность уменьшить количество кастов запомненного спелла, а вот обратной возможности так и не нашел... (IMG:style_emoticons/kolobok_light/shout.gif) |
![]()
Сообщение
#63
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
2 Vestel
Этот скрипт ставишь на OnEnter локации. Делаешь невидимого монстра с нейтральной фракцией ко всем и делаешь его плотовым. Для диалога немного переделай. Сможешь? Код //:://///////////////////////////////////////////// //:: Name //:: Copyright (c) 2004 WRG! //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: //::////////////////////////////////////////////// void main() { object oPC = GetEnteringObject(); // GetPCSpeaker(); if (!GetIsPC(oPC) || GetLocalInt(oPC, "START_PC")) // ДЛЯ ЛОКАЦИИ {return;} if (GetIsPC(oPC)) { SetLocalInt(oPC, "START_PC", TRUE); AssignCommand(oPC, ClearAllActions()); object oSpeaker=CreateObject(OBJECT_TYPE_CREATURE,"ResRef_невидимого_НПС",GetLocation(oPC),FALSE); AssignCommand(oSpeaker, ActionStartConversation(oPC, "dlg_assignskills")); } } В конце своего диалога на слот Normal и слот Aborted делаешь кусочек кода: Код void main()
{ DestroyObject(OBJECT_SELF, 0.5); } |
![]()
Сообщение
#64
|
|
Level 7 ![]() ![]() Класс: Чемпион Торма Характер: Chaotic Good Раса: Человек NWN: DM ![]() |
Вопрос первый.
При первом входе персонажа на сервер, должен срабатывать скрипт, который начинает с ним диалог (вроде как на Энтарионе "система именных оружий" и т.д). Этот же диалог должен начинаться после каждого ЛевелАпа. Проверка на первость входа идет через стандартное Deity по факту наличия зарезервированных символов в котором и должен запускаться диалог. С подсказки Aiwan'a была создана НПС (таг: "MCS_TALKMAN"), которой было заданно имя, которая будет вести диалог. Она спрятана в дальнюю локацию с названием "Секретная Лока" (таг: "SECRET_AREA"). При использывании конструкции: Код objeсt oMCS=GetObjectByTag("MCS_TALKMAN"); диалог не начинается.ActionStartConversation(oMCS,"dlg_testdialog",TRUE, TRUE); Может быть надо как-то указывать, что действие происходит в разных локациях или что? Буду рад любой помощи. Вопрос второй. В диалоге должна появляться фраза использующая переменные. Типа Цитата "Уже прошло 2.. 3.. 6.. 8.. дней из 11 отпущенных". Переменную с LocalInt'a я считать могу, а вот, как вставить ее в диалог не разобрался. Может кто-нибудь подсказать?..
|
![]()
Сообщение
#65
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
2 Elven king делаешь шкурку со свойствами. Код впихивай хоть куда.
Код void main() { object oPC = GetFirstPC(); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC)); // если уже висит какая-нибудь шкурка object oItm = CreateItemOnObject("ResRef шкурки", oPC, 1); AssignCommand(oPC, ActionEquipItem(oItm, INVENTORY_SLOT_CARMOUR)); } |
![]()
Сообщение
#66
|
|
Level 7 ![]() ![]() Класс: Чемпион Торма Характер: Chaotic Good Раса: Человек NWN: DM ![]() |
В догонку:
как в том же диалоге сделать, чтобы до тех пор пока пользователь не выбрал "Выход" у него были одни и те же фразы? Скрипт работает, только НПС почему-то не невидимый.. Как сделать? Я в непонятках.. Пробывал на него Перманентный Импрувнутый Инвиз вешать - не помогает.. |
![]()
Сообщение
#67
|
|
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Цитата как в том же диалоге сделать, чтобы до тех пор пока пользователь не выбрал "Выход" у него были одни и те же фразы? Делаешь Copy строки на которую надо переходить постоянно и вставляешь ее как Paste As Link в конец "цикличных" веток диалога. Цитата Скрипт работает, только НПС почему-то не невидимый.. Как сделать? Я в непонятках.. Пробывал на него Перманентный Импрувнутый Инвиз вешать - не помогает.. Не надо инвизов. В палитре есть невидимый непись. Полистай Appearance в свойствах существа. Invisible Creature вроде называется... |
![]()
Сообщение
#68
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Вестель как ты представляешь диалог, если твой персонаж за три девять земель? (IMG:style_emoticons/kolobok_light/biggrin.gif) Тогда уж так:
Код void main() { object oPC = GetFirstPC(); object oMCS=GetObjectByTag("MCS_TALKMAN"); AssignCommand(oMCS, ActionJumpToObject(oPC)); AssignCommand(oMCS, ActionStartConversation(oPC,"dlg_testdialog",TRUE, TRUE)); } Но если этот персонаж будет так же использован другим игроком? Лучше сделай код таким как я написал выше в посте. Создал, дестроил объект. |
![]()
Сообщение
#69
|
|
Level 7 ![]() ![]() Класс: Чемпион Торма Характер: Chaotic Good Раса: Человек NWN: DM ![]() |
Создаваю, дестрою..
Цитата В палитре есть невидимый непись. Полистай Appearance в свойствах существа. Invisible Creature вроде называется... Null Human в моей (vts027) версии Toolset'а оно завется.. Но Invisible Creature я искал долго.. Теперь все работает.. Теперь если можно, расскажите по подробнее, как с токенами работать.. |
![]()
Сообщение
#70
|
|
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Токены устанавливаются через SetCustomToken(400, "стринг"); // 400 - это пример номера
Затем в диалоге ты просто пишешь <CUSTOM400> и вместо него в игре в диалоге появляется "стринг". Вот и все (IMG:style_emoticons/kolobok_light/wink3.gif) . |
![]()
Сообщение
#71
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Я для вот думал как сделать такой скриптик ...
Заходит игрок в гостиницу отдохнуть, снимает номерок. Заходит туда и жмет рест. на ресте с него снимаются все шмотки и кладуться в шкаф а сам он рухает спать на коврик. Вокруг него темнеет сон длится минуту. Но это я все знаю как реализовать. Я вот что хотел: Значит пока он спит рандомно в случае 1 из 40 допустим, включается SetCutScene то несть он не может отменить сон и управлять не может. В коридоре гостиницы появляется воришка, камера переходит к нему, он делает вид что ковыряется в двери, дверка открывается, он вскрывает шкаф со шмотом ПС копается там. После этого воришка убегает, CutScene заканчивается перс в стает и недощитывается в шкафу рандомно 2х вещей. З.Ы. Но шмотки удалятся только если воришка откроет сундук, потому что вдруг там засаду устроят(IMG:style_emoticons/kolobok_light/wink3.gif) )) |
![]()
Сообщение
#72
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Аваддон это можно реализовать, достаточно просто. Во время отдыха запускай функцию Random и как только получишь нужный вариант просто на задержку ставь скрипт, вот кусок кода:
Код void main() { object oPC = GetFirstPC(); // или как надо определи оРС int i = (Random(100)); if (i < 5) { DelayCommand(20.0, ExecuteScript("скрипт_сценки", oPC)); } } Но тебе надо будет круто нарисовать катсценку. Вней все вейпы бери GetNearest**** что бы можно было в нескольких местах использовать. Ну и соответственно вейпы и прочее расставь везде. |
![]()
Сообщение
#73
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Ага, я вот еще что хотел спросить.
У меня GetObjectByTag отлично работает, а вот GetNearestObjectByTag вообще НОЛЬ! Не работает. Или надо это делать как AssignCommand? Добавлено в [mergetime]1087585512[/mergetime] P.S. 1. Зачем нужна задержка? 2.Как я понял Инта рандомно выпадает от 0 до 100, и если она меньше 5 то скрипт пускается? А как сделать чтобы вероятность была 1 из 40? |
![]()
Сообщение
#74
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Цитата У меня GetObjectByTag отлично работает, а вот GetNearestObjectByTag вообще НОЛЬ! Не работает. Не можеть такого быть. (IMG:style_emoticons/kolobok_light/shok.gif) Это одно и то же, только второе берет БЛИЖАЙШИЙ объект с таким тегом. Задержка нужна для красоты (IMG:style_emoticons/kolobok_light/crazy.gif) просто будет прикольней отдохнуть немного и бац! Сценка. Ну так посчитай, сделай рандом из 40 и прировняй int к постоянному числу, например 10. Будет твой результат. Но я что то не помню что бы 40 раз отдыхал в игре. Лучше уж 25% или 30... Добавлено в [mergetime]1087587538[/mergetime] У тебя объект надеюсь в ЭТОЙ ЛОКАЦИИ где происходит действие кат сценки? :?) |
![]()
Сообщение
#75
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Да, только Nearest я так к слову спросил потому что, у меня такая вещь на отдыхе - когда костер разжигаешь - дрова должны изчезнуть. Когда я пишу DestroyObject(GetNearestObjectByTag("rest_wood")); дрова не изчезают хотя я стою рядом с ними, но стоит мне написать DestroyObject(GetObjectByTag("rest_wood")); и бац - все работает.. Не понимаю в чем дело.
|
![]()
Сообщение
#76
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
А, все допер в чем ошибка. Там надо же еще писать от кого ближайший объект (IMG:style_emoticons/kolobok_light/lol.gif)
А теперь другой вопрос как сделать чтобы объект создавался с задержкой? Ну например я срубил дерево а через 500сек там еще одно выросло? Я пытался совместить DelayCommand и CreateObject - бестолку. Написал отдельную функцию - и поставил ее на дилэй - тоже не появляется..вот фигня какая. |
![]()
Сообщение
#77
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Вот кусок моей инклюды, работает все как часы. Хочешь просто объект, хочешь с новым тегом крееть.
Код //:://///////////////////////////////////////////// //:: Name: am_libcutscen //:: Copyright (c) 2004 WRG! //::////////////////////////////////////////////// /* БИБЛИОТЕКА ДЛЯ СЦЕН */ //::////////////////////////////////////////////// //:: Created By: Aiwan Aiwan@e-mail.ru //:: Created On: 22.03.2004 //::////////////////////////////////////////////// // ФУНКЦИЯ СОЗДАНИЯ ОБЪЕКТА С НОВЫМ ТАГОМ // int iAnimation = АНИМАЦИЯ ПРИ ПОЯВЛЕНИИ // string sNewTag = "НОВЫЙ_TAG_ОБЪЕКТА" void ActionCreateNew(int nObjType, string sCreature, location lLoc, int iAnimation, string sNewTag); // ФУНКЦИЯ СОЗДАНИЯ item ОБЪЕКТА // sItemTemplate - ResRef объекта // oTarget - у кого создаем объект // nStackSize - количество в стеке void ActionCreateItem(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1); //------------------------------------------------------------------------------ void ActionCreate(int nObjType, string sCreature, location lLoc); void ActionCreate(int nObjType, string sCreature, location lLoc) { CreateObject(nObjType, sCreature, lLoc); } void ActionCreateNew(int nObjType, string sCreature, location lLoc, int iAnimation, string sNewTag) { CreateObject(nObjType, sCreature, lLoc, FALSE, sNewTag); } void ActionCreateItem(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1) { CreateItemOnObject(sItemTemplate,oTarget, nStackSize); } /*void main() { } Код DelayCommand(30.0, ActionCreate(sCreature, lLoc)); Это кусок кода из скрипта. Код DelayCommand(33.5, ActionCreateItem("key_shop_nouse", oPC, 1)); Это тоже. Все пахает. |
![]()
Сообщение
#78
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Спасибо(IMG:style_emoticons/kolobok_light/smile.gif) Так так, а кто у нас тут специалист по бд? Или может это не с БД связано...
Вообщем очень заинтересовался, как можно сделать сейф предметов для мультика? Тоесть человек положил в сейф предмет, ззакрыл, получил расписку и ушел. Сервак перезагрузился, он зашел отдал расписку, сказал кодовое слово и получил обратно свои предметы... Если конечно ни у кого ничего такого не написано, то подайте хотябы идею как реализовать это. Вписывать теги всех вещей - исключено! Их там столько... |
![]()
Сообщение
#79
|
|
Level 9 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [PW] ![]() |
Цитата Спасибо Так так, а кто у нас тут специалист по бд? Или может это не с БД связано... Вообщем очень заинтересовался, как можно сделать сейф предметов для мультика? Тоесть человек положил в сейф предмет, ззакрыл, получил расписку и ушел. Сервак перезагрузился, он зашел отдал расписку, сказал кодовое слово и получил обратно свои предметы... Если конечно ни у кого ничего такого не написано, то подайте хотябы идею как реализовать это. Вписывать теги всех вещей - исключено! Их там столько... Есть несколько способов. Если хочешь именно с распиской за каждую вещь - можно не используя БД сделать сохранение любой вещи, _котороая есть в палитре_, конечно при условии, что у тебя модуль "как у людей" построен и тег==ресрефу. С БД можно сохранять любые вещи, даже самодельные, выданные ДМ-ом. Расписка и кодовое слово тут не нужны, у каждого игрока свой инвентарь в сундуке (т.е. кто открыл - того сундук и прочитался). Есть ограничения на этот случай тоже. 1) если писать в БД все объекты сразу, то получишь большой лаг (по одному предмету - еще нормально). 2) При удалении из БД объекта размер самой базы не уменьшается и нужна принудителньая упаковка баз данных внешней утилитой. В другом топике, "Шарды", я выложу пример такого сундука (в течение дня (IMG:style_emoticons/kolobok_light/smile.gif) ) |
![]()
Сообщение
#80
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Интересная идея посетила. Вот воры крадут - это нормально ведь у кого то спот не прокачен. Но когда воры крадут в городе где полно охраны это уже прям не охрана а музей восковых фигур. Как можно прописать чтобы охрана становилась хостайл для вора если увидит что вор у кого то крадет?
Может OnHeartBit арены города поставить проверку -какие навыки используются и если используются PickPocket выставлять хостайл? |
![]()
Сообщение
#81
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
на дистурб НПС напиши скрипт, чтобы он заорал Воры! Хватаешь ближайшего стражника и атакуешь им игрока. Не надо делать репутацию 0. Это не очень логично.
|
![]()
Сообщение
#82
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
Да но это будет работать если воры обносят НПС а если они обносят других игроков?
|
![]()
Сообщение
#83
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
тогда незнаю
|
![]()
Сообщение
#84
|
|
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Тогда пусть другой игрок ему и стучит по голове, если заметил кражу. Гы. (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#85
|
|
Level 10 ![]() ![]() ![]() Класс: Воин Характер: Lawful Neutral Раса: Человек NWN: Скриптинг [PW] ![]() |
О да(IMG:style_emoticons/kolobok_light/smile.gif) ))
|
![]() ![]() |
Текстовая версия | Сейчас: 15th May 2025 - 03:59 |