![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2486
|
|
Ищущий ![]() ![]() ![]() ![]() ![]() Класс: Рейнджер Характер: Lawful Neutral Раса: Эльф ПОДМАСТЕРЬЕ ![]() |
Dana, на форуме есть раздел, посвящённый 2да. В двух словах это не описать. Каждой таблице сответствует определённый тип параметров. Т.е. в одной таблице описывается оружие, в другой классы, в третьей портреты и т.п.
Читайте тут: http://www.wrg.ru/forums/index.php?showforum=24 Там можно найти очень много полезного. |
![]()
Сообщение
#2487
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
2dasource.zip - не советую, выдерй nwn explorer'ом каким-нить из патченного\простого ХОТУ.
прога не обязательна, пойдет и ворд пад\блокнот оверрайд - для себя, хак - для шарда\сервера |
![]()
Сообщение
#2488
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Existor @ Mar 13 2006, 16:40) [snapback]72536[/snapback] В нвне, афаик, на громкость точечного источника звука влияет не только положение чара, а еще и положение камеры относительно центра сферы звучания. Так как большинство игроков предпочитают отдалять камеру на максимум, они зачастую пропускают мимо ушей звуковое оформление локации. Меня интересует другое. КАК СКРИПТОМ СОЗДАТЬ ЗВУКОВОЙ ОБЪЕКТ НА ЛОКЕ. |
![]() ![]()
Сообщение
#2489
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Chess, система конечно не идеальна, но на ее основе можно сделать неплохую систему дропа различных вещей. Самое главное, это формула, а остальное уже гораздо проще. Данный пример рассматривает дроп металлической краски с довольно маленьким шансом выпадения. Чтобы увеличить шанс, достаточно изменить величину "DROPPROCENT" или же число 1.4. Одно но, я старался подобрать число 1.4 таким образом, чтобы получаемый шанс не вылезал за 0 или 100. Конечно, если монстр 40 уровня, а персонаж 1-го уровня, то число уйдет в минус, но тогда число нужно пересчитать таким образом, чтобы даже при такой разнице в уровнях число не уходило в минус. При числе 0.43 и максимальном уровне 20, число даже при разнице в уровнях 1 к 20 не будет уходить в минус. Также величина этого числа зависит, насколько сильно будет изменяться шанс по мере роста персонажа над уровнем монстра или наоборот.
NSS int GetIsMonsterDrop(object oOwner) { object oMod = GetModule(); object oKiller = GetLastKiller(); int nLevelP = GetHitDice(oKiller); int nLevelM = GetHitDice(OBJECT_SELF); float fChance = IntToFloat(GetLocalInt(oMod, "DROPPROCENT")); // к примеру - 55 // Расчет случайного числа float fRandom = IntToFloat(Random(100)) + (IntToFloat(Random(100)) / 100.00); // Подсчет разницы в уровнях между персонажем и противником float fLevel = (IntToFloat(nLevelP) - IntToFloat(nLevelM)); float fConst = (fLevel * fLevel); // Расчет основного шанса выпадения float fProcent = ((fChance - (1.4 * fConst)) + IntToFloat(Random(100))) / 100.00; if (fProcent >= fRandom) { return TRUE; } return FALSE; } void main() { object oKiller = GetLastKiller(); object oCreature = OBJECT_SELF; if (GetLastKiller() == oCreature) return; if (GetRacialType(oCreature) == RACIAL_TYPE_ANIMAL || GetRacialType(oCreature) == RACIAL_TYPE_ABERRATION || GetRacialType(oCreature) == RACIAL_TYPE_MAGICAL_BEAST || GetRacialType(oCreature) == RACIAL_TYPE_BEAST || GetRacialType(oCreature) == RACIAL_TYPE_VERMIN) { SetIsDestroyable(FALSE, FALSE, FALSE); DelayCommand(1.0, SetIsDestroyable(TRUE, FALSE, FALSE)); } else { // Простые функции, которые запрещают на некоторое время // исчезновение трупа. SetIsDestroyable(FALSE, FALSE, FALSE); DelayCommand(30.0, SetIsDestroyable(TRUE, FALSE, FALSE)); // Расчет шанса выпадения if (GetIsMonsterDrop(oKiller)) { int nDye = Random(17) + 1; switch (nDye) { case 1: CreateItemOnObject("x2_it_dyeM03", oCreature); break; case 2: CreateItemOnObject("x2_it_dyeM00", oCreature); break; case 3: CreateItemOnObject("x2_it_dyeM31", oCreature); break; case 4: CreateItemOnObject("x2_it_dyeM16", oCreature); break; case 5: CreateItemOnObject("x2_it_dyeM40", oCreature); break; case 6: CreateItemOnObject("x2_it_dyeM28", oCreature); break; case 7: CreateItemOnObject("x2_it_dyeM24", oCreature); break; case 8: CreateItemOnObject("x2_it_dyeM32", oCreature); break; case 9: CreateItemOnObject("x2_it_dyeM18", oCreature); break; case 10: CreateItemOnObject("x2_it_dyeM10", oCreature); break; case 11: CreateItemOnObject("x2_it_dyeM42", oCreature); break; case 12: CreateItemOnObject("x2_it_dyeM02", oCreature); break; case 13: CreateItemOnObject("x2_it_dyeM25", oCreature); break; case 14: CreateItemOnObject("x2_it_dyeM37", oCreature); break; case 15: CreateItemOnObject("x2_it_dyeM08", oCreature); break; case 16: CreateItemOnObject("x2_it_dyeM36", oCreature); break; case 17: CreateItemOnObject("x2_it_dyeM48", oCreature); break; } } } } Aiwan, а почему бы не попробовать эту функцию? Если посмотреть описание функции "SoundObjectSetPosition": QUOTE This function can be used to change the position of the sound object that is placed in the module. For instance, a sound of moaning could be placed on a player when they open a chest. то звук можно использовать на любое действие. В данном случае рассмотрен момент, когда игрок открывает сундук, а нам нужен костер. Ставим на действие OnUsed похожий скрипт, и наслаждаемся треском костра. Но тут нужна обязательная проверка, есть ли уже такой звук рядом с игроком или в локации, чтобы не дублировать звуки, если у костра решат погреться несколько персонажей. NSS void main() { vector vPlayer = GetPosition(GetLastDisturbed()); // location in vector format object mySound = GetObjectByTag("CryptMoans"); SoundObjectSetPosition(mySound, vPlayer); } Правда, звук предварительно придется разместить на закрытой локации, которая служит для хранения каких-либо вещей или просто для теста. Прежде чем помещать звук на локацию, его можно настроить и выключить, чтобы он не работал просто так. Когда загорается костер, помещать звук в точку, где стоит игрок, и проигрывать до тех пор, пока игрок спит. Идея не опробована, но чем черт не шутит? Сообщение отредактировал Zirrex - Mar 13 2006, 22:53 |
![]()
Сообщение
#2490
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Zirrex, примного благодарен ! Буду разбераться !
NSS void main() { object oMod = GetModule(); object oPC = GetEnteringObject(); if (!GetIsPC(oPC) || GetLocalInt(oMod, "START_GAME")) {return;} { SetLocalInt(oMod, "START_GAME", TRUE); TakeGoldFromCreature(GetGold(oPC),oPC,TRUE); object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); } int i=0; while(i<14) { DestroyObject(GetItemInSlot(i, oPC)); i++; } object oItemCr = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItemCr)) { SetIdentified(oItemCr,TRUE); oItemCr = GetNextItemInInventory(oPC); } GiveGoldToCreature(oPC, 250); CreateItemOnObject("item", oPC, 1); CreateItemOnObject("item001", OPc, 1); AssignCommand(oPC, ActionEquipMostEffectiveArmor()); } } Этот скрипт у меня стоит на OnEnterClient, вот проблема, когда я перезапускаю сервак, он выполняет этот скрипт по новой... Подскажите, как исправить, чтоб этот скрипт выполнялся всего один раз, при первом входе в модуль... |
![]()
Сообщение
#2491
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Chess, убери "GetLocalInt(oMod, "START_GAME")". Это лишнее. Когда рестартуется сервер, то у тебя эта переменная сбрасывается в 0. Даже если у входящего персонажа опыт не 0, но переменная 0, то скрипт выполнится. Соответственно не нужна функция "SetLocalInt(oMod, "START_GAME", TRUE);"
Не совсем понял, зачем тебе этот цикл: NSS object oItemCr = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItemCr)) { SetIdentified(oItemCr,TRUE); oItemCr = GetNextItemInInventory(oPC); } если ты верхней командой и так все удалил из инвентаря. В итоге получается что-то вроде этого скрипта: NSS void main()
{ object oPC = GetEnteringObject(); if (GetIsDM(oPC)) return; if (!GetXP(oPC)) // опыт равен 0 { TakeGoldFromCreature(GetGold(oPC), oPC, TRUE); object oItem = GetFirstItemInInventory(oPC); while (GetIsObjectValid(oItem)) { DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); } int i = 0; while (i < 15) { DestroyObject(GetItemInSlot(i, oPC)); i++; } GiveGoldToCreature(oPC, 250); CreateItemOnObject("item", oPC, 1); CreateItemOnObject("item001", oPC, 1); SetXP(oPC, 1); AssignCommand(oPC, ActionEquipMostEffectiveArmor()); } } |
![]()
Сообщение
#2492
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
со скриптами в соотв. тему плиз.
|
![]()
Сообщение
#2493
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(Zirrex @ Mar 13 2006, 22:52) [snapback]72582[/snapback] Правда, звук предварительно придется разместить на закрытой локации, которая служит для хранения каких-либо вещей или просто для теста. При этом мы не видим в параметрах функции oArea, а в лексиконе читаем "assumes CryptMoans Sound is placed nearby this script placed in the OnDisturbed section of the chest"!!! Вариант тут один - в каждой локе ставить данный звук. |
![]()
Сообщение
#2494
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Zirrex, черти сколько бился. Уже надоело давно. Думал есть готовое решение. В любом случае спасибо за инфу.
|
![]()
Сообщение
#2495
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Возможно ли написать скрипт, который при загрузке в локу определенную, сканировал чара на класс, фокусировку на оружие, и загружал скрипт на выдачу рандомного шмота, но по результатам сканирования, например Воин с фокусом на топор, загружаешься в локу, у воина в инвентаре Тяжелая Броня и Топор.
З.Ы. это просто вопрос, скрипты не обязательны, сам подумаю если такое возможно, а от подсказок не откажусь :-) Сообщение отредактировал Chess - Mar 14 2006, 20:06 |
![]() ![]()
Сообщение
#2496
|
|
Восставший из пепла ![]() ![]() ![]() Класс: Бледный Мастер Характер: Neutral Evil Раса: Человек ПОДМАСТЕРЬЕ ![]() |
QUOTE(Chess @ Mar 14 2006, 22:03) [snapback]72686[/snapback] Возможно ли написать скрипт, который при загрузке в локу определенную, сканировал чара на класс, фокусировку на оружие, и загружал скрипт на выдачу рандомного шмота, но по результатам сканирования, например Воин с фокусом на топор, и после загрузке в локу у тебя в рюкзаке лежит Фулик и топор ? З.Ы. это просто вопрос, скрипты не обязательны, сам подумаю если можно, а от подсказок не откажусь :-) Ну, если это только вопрос... То тогда ответ положительный. Да, можно. Надо написать скриптик и поставить его на OnEnter локи. Тока локалку не забудь, а то будешь давать предметы каждый раз при входе в локу. Ну, а если вдруг все таки понадобится скрипт, то это не ко мне. Не, ну, конечно, я могу вдоволь постебаться над собой во время его написания. Но себя жалко. И инет, которого вообще нету нифиха...(IMG:style_emoticons/kolobok_light/biggrin.gif) Сообщение отредактировал Archangel - Mar 14 2006, 20:15 |
![]()
Сообщение
#2497
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Не боись Archangel, не потривожу :-)
Но спасибо, что ответил на вопрос... Извините за очень тупой вопрос, но может есть у кого ссылочка или на компе перевод Функций Тулсета ? С Инглишем туган, всю жизнь немецкий учил, я пытаюсь конечно разбираться, словарь из рук не убераю, но не все есть в словаре... Хотяб самые основные функции, если не сложно... |
![]() ![]()
Сообщение
#2498
|
|
Восставший из пепла ![]() ![]() ![]() Класс: Бледный Мастер Характер: Neutral Evil Раса: Человек ПОДМАСТЕРЬЕ ![]() |
QUOTE(Chess @ Mar 15 2006, 00:16) [snapback]72696[/snapback] Извините за очень тупой вопрос, но может есть у кого ссылочка или на компе перевод Функций Тулсета ? С Инглишем туган, всю жизнь немецкий учил, я пытаюсь конечно разбираться, словарь из рук не убераю, но не все есть в словаре... Хотяб самые основные функции, если не сложно... Ну как такового перевода вроде нет. А вообще на сайте есть часть переведенного Лексикона. Должно помочь. Вот ссылочка Сообщение отредактировал Archangel - Mar 14 2006, 22:37 |
![]()
Сообщение
#2499
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
QUOTE(Chess @ Mar 14 2006, 20:03) [snapback]72686[/snapback] Возможно ли написать скрипт, который при загрузке в локу определенную, сканировал чара на класс, фокусировку на оружие, и загружал скрипт на выдачу рандомного шмота, но по результатам сканирования, например Воин с фокусом на топор, загружаешься в локу, у воина в инвентаре Тяжелая Броня и Топор. Ответ: Возможно. А если без шуток, то писать его довольно долго, если учитывать все варианты соответствия оружия-классов-фитов. Свой я посеял, а новый писать - кучу времени нужно. Вот советы: 1. Вместо проверки на класс делай проверку на Weapon/Armor Proficiency, так как их можно взять дополнительно фитом или получить от расы. 2. Не забудь про размер (Size category) рас, так, например, пузаны и гномы не смогут тягать косу. 3. В НВН, да и в D&D вообще вариант меч+щит выигрывает перед двуручниками и дуалом (да и щитом могут пользоваться не все). В первой кампании НВН был подобный скрипт, но он учитывал только фокус на оружия, увеличивая шанс попадания в сундук предпочитаемого орудия убийства. Может быть стоит сделать нечто подобное? А для брони и щита много писать не надо. |
![]()
Сообщение
#2500
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
QUOTE А если без шуток, то писать его довольно долго правда? 19 строк занимает ф-ция, которая возвращает фокус на оружие(если фокус есть ессенно) NSS int dnGetWF(object oPC) { if(GetHasFeat(FEAT_WEAPON_FOCUS_CLUB ,oPC)) return FEAT_WEAPON_FOCUS_CLUB ; if(GetHasFeat(FEAT_WEAPON_FOCUS_DWAXE,oPC)) return FEAT_WEAPON_FOCUS_DWAXE; if(GetHasFeat(FEAT_WEAPON_FOCUS_WHIP,oPC)) return FEAT_WEAPON_FOCUS_WHIP; int i; for(i=90; i<128; i++) { if(GetHasFeat(i,oPC)) return i; } return FALSE; } QUOTE если учитывать все варианты соответствия оружия-классов-фитов зачем? не когда не видел игроков трятящих фиты просто так QUOTE сканировал чара на класс NSS // A creature can have up to three classes. This function determines the // creature's class (CLASS_TYPE_*) based on nClassPosition. // - nClassPosition: 1, 2 or 3 // - oCreature // * Returns CLASS_TYPE_INVALID if the oCreature does not have a class in // nClassPosition (i.e. a single-class creature will only have a value in // nClassLocation=1) or if oCreature is not a valid creature. int GetClassByPosition(int nClassPosition, object oCreature=OBJECT_SELF) © toolset QUOTE и загружал скрипт на выдачу рандомного шмота, но по результатам сканирования, например Воин с фокусом на топор можно, не трудно Сообщение отредактировал [MoF]Darth_Nick - Mar 15 2006, 15:59 |
![]()
Сообщение
#2501
|
|
Level 1 Класс: Фея Характер: Chaotic Evil Раса: Фея ![]() |
Вобщем так... хочу сделать что-то типа сервера на НВН, нужно чтобы монстры появлялись в определённых местах, при условии их уничтожения, через определённое время, т.е. сделать банальные респаун. Стандартными средствами, т.е. без кода очень легко сделать респаун, но он работает по условию (УСЛОВИЕ: пересечение монстром или игроком зоны респауна). Как сделать так чтобы можно было респаунить монстров без условия или по условию уничтожения всех в зоне???
Заране благодарен. Я в скриптах полный ноль. Хочу сделать респаун, потом дальше скриптами заняться... |
![]()
Сообщение
#2502
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Смотри ТУТ.
QUOTE(Zen @ Mar 16 2006, 18:51) [snapback]72944[/snapback] Я в скриптах полный ноль. Хочу сделать респаун, потом дальше скриптами заняться... Это не правильно. Посмотри код респаун, на который я тебе дал ссылку, понимаешь, что там делается? Если нет, то как ты хочешь сделать свой респаун. Мож начнешь с азов? |
![]()
Сообщение
#2503
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
NESS'ом можно спаунить без знания скриптинга вроде как
но фиксить там только скриптами(если надо) Сообщение отредактировал [MoF]Darth_Nick - Mar 17 2006, 12:55 |
![]()
Сообщение
#2504
|
|
Level 2 ![]() Класс: Друид Характер: Lawful Neutral Раса: Полуэльф ![]() |
И снова здравствуйте…
Докладываю обстановку: Имеются две субрасы. Как мне сделать, чтобы: 1) у них на противоборствующую расу автоматические выставлялся диз (то бишь по умолчанию были враждебными), 2) и нельзя было бы поменять «не нравиЦа» на «нравиЦа». Мне бы хотя бы функцию, которая меняет это отношение и событие, когда это происходит. Заранее благодарна. Целую. Дана. |
![]()
Сообщение
#2505
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
NSS object oPC = GetFirstPC(); object oEnter = GetEnteringObject(); while(GetIsObjectValid(oPC) && (GetSubRace(oEnter) == "Race_1") && (GetSubRace(oPC) == "Race_2") && (GetIsPC(oEnter))) { SetPCDislike(oEnter,oPC); oPC = GetNextPC(); } попробуй так, я щас просто проверить не могу.. QUOTE 2) и нельзя было бы поменять «не нравиЦа» на «нравиЦа». по нормальному - помойму нельзя Сообщение отредактировал [MoF]Darth_Nick - Mar 18 2006, 19:01 |
![]()
Сообщение
#2506
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
У меня тоже полувопрос-полуответ. Было бы неплохо выставлять хостаил прямо на OnPerception игрока (да и вообще много интересных вещей хотелось бы делать в скриптах на игроке), но ведь изменять стандартные скрипты на player'е нельзя? Или все-таки можно через оверрайд или хак?
|
![]()
Сообщение
#2507
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
хотя у игрока и есть слоты и Лето туда можно вписать что угодно, но на деле все там стирается и есть только 1 скрипт, oHB игрока (называется default). Другие слоты заюзать к большому сожалению не получается (IMG:style_emoticons/kolobok_light/sad.gif)
|
![]()
Сообщение
#2508
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
через лето можно изменять
но как показывала практика, игра зависает |
![]()
Сообщение
#2509
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Lorendroll @ Mar 18 2006, 21:41) [snapback]73188[/snapback] Было бы неплохо выставлять хостаил прямо на OnPerception игрока так непосредственно не получится... но выход есть. Кастомная аура (форма и радиус прописывается в соотв. 2да) без визуального эффекта (там же это можно указать) со скриптами на вход и выход и хб если надо. Имхо в данном случае хороший вариант, правда не знаю, как будет на шарде это. NSS // Create an Area Of Effect effect in the area of the creature it is applied to.
// If the scripts are not specified, default ones will be used. effect EffectAreaOfEffect(int nAreaEffectId, string sOnEnterScript="", string sHeartbeatScript="", string sOnExitScript="") |
![]()
Сообщение
#2510
|
|
Level 2 ![]() Класс: Друид Характер: Lawful Neutral Раса: Полуэльф ![]() |
Дополнюсь и исправлюсь.
можно ли разделить ПС не на субрасы а на фракции, хотя бы условные (это к примеру запоминание их принадлежности к той или иной партии на итеме) , и что бы дизлайк выставлялся как на фракции, то есть нельзя исзменить. |
![]() ![]() |
Текстовая версия | Сейчас: 23rd July 2025 - 14:02 |