![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#3551
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
открой модуль и посмотри монстров в кастомной палитре или на картах, какие там стоят скрипты в слоте onDeath. Если автор модуля писал свои скрипты на экспу, то только туда.
|
![]()
Сообщение
#3552
|
|
Level 2 ![]() Класс: Оборотень Характер: True Neutral Раса: Эльф ![]() |
Вроде стандартный
Neverwinter Script //::////////////////////////////////////////////////// //:: NW_C2_DEFAULT7 /* Default OnDeath event handler for NPCs. Adjusts killer's alignment if appropriate and alerts allies to our death. */ //::////////////////////////////////////////////////// //:: Copyright © 2002 Floodgate Entertainment //:: Created By: Naomi Novik //:: Created On: 12/22/2002 //::////////////////////////////////////////////////// #include "x2_inc_compon" #include "x0_i0_spawncond" #include "give_custom_exp" void main() { int nClass = GetLevelByClass(CLASS_TYPE_COMMONER); int nAlign = GetAlignmentGoodEvil(OBJECT_SELF); object oKiller = GetLastKiller(); give_custom_exp(oKiller, OBJECT_SELF, 0); // If we're a good/neutral commoner, // adjust the killer's alignment evil if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL)) { AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5); } // Call to allies to let them know we're dead SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK); //Shout Attack my target, only works with the On Spawn In setup SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK); // NOTE: the OnDeath user-defined event does not // trigger reliably and should probably be removed if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(1007)); } В скриптах я полный нуб, но думаю мб дело в #include "x2_inc_compon" #include "x0_i0_spawncond" #include "give_custom_exp" На всякий случай вот "give_custom_exp" Neverwinter Script //#include "NW_I0_GENERIC"
//#include "_inc_inventory" //void main(){} // Remove this line if Scrotok's corpse code is not used. //#include "_kb_loot_corpse" //int Debug = FALSE; // Set to TRUE enables several debug lines. // Debug info includes party shares, etc. //int Double_EXP = TRUE; // Set to TRUE enables seeing first the PW // experience followed by Bioware experience. // This is useful to compare values. float Experience_Slider = 0.42;// This is the percentage that can be adjusted. // This value matches the Bioware slider. float Exp_Level_Cap = 3.0; // This is the basic CR cap. int Boss_Cap_Method = 3; // These are mode sets for how bosses are handled // Mode 1: The CR of the boss is modified. // The exp cap is left at +8 CR. // Mode 2: The CR of the boss is left alone. // The exp cap is raised by the mod. // Mode 3: The CR of the boss is modified. // The exp cap is raised by the mod. float Lower_Exponent = 1.50; // This is the exponent that defines how exp // drops off when the CR is lower than player. float Higher_Exponent = 1.20; // This is the exponent that defines how exp // increases whent he CR is higher than player. float Party_Proximity = 25.0; // The distance a party member must be to get a // share of the experience. float Leveling_Exponent = 1.20;// This exponent defines how fast the exponent is // when determining party shares. // The following is the level difference and // how it relates to shares: // 1.10 at 10 levels difference = 1.63 shares // 1.20 at 10 levels difference = 6.19 shares // 1.30 at 10 levels difference = 13.79 shares float Familiar_Split = 0.01; // The ratio of shares that a familiar or animal // companion receives. float Henchman_Split = 0.01; // The ratio of shares that a henchman or // summoned creature receives. // Absolutely, Positively do not call this function inside another loop // that uses GetNextPC. This can be used inside GetNextFactionMember(). void SendMessageToParty( object oMember, string sText ) { object oPartyMember = GetFirstPC(); while( GetIsObjectValid(oPartyMember) ) { if( GetFactionEqual( oPartyMember, oMember ) ) SendMessageToPC( oPartyMember, sText ); oPartyMember = GetNextPC(); } } // This routine comes from and idea from Tone Eternal. // It limits a player from gaining more experience after reaching enough to // continue to the next level. This is not really a bug, but a short-coming // of the Bioware code. // This function is not used in version 1.4 or higher, but can be installed. int GetLevel(object oPlayer) { int iXP = GetXP(oPlayer); if(iXP < 1000) return 1; else if(iXP < 3000) return 2; else if(iXP < 6000) return 3; else if(iXP < 10000) return 4; else if(iXP < 15000) return 5; else if(iXP < 21000) return 6; else if(iXP < 28000) return 7; else if(iXP < 36000) return 8; else if(iXP < 45000) return 9; else if(iXP < 55000) return 10; else if(iXP < 66000) return 11; else if(iXP < 78000) return 12; else if(iXP < 91000) return 13; else if(iXP < 105000) return 14; else if(iXP < 120000) return 15; else if(iXP < 136000) return 16; else if(iXP < 153000) return 17; else if(iXP < 171000) return 18; else if(iXP < 190000) return 19; else if(iXP < 210000) return 20; else if(iXP < 231000) return 21; else if(iXP < 253000) return 22; else if(iXP < 276000) return 23; else if(iXP < 300000) return 24; else if(iXP < 325000) return 25; else if(iXP < 351000) return 26; else if(iXP < 378000) return 27; else if(iXP < 406000) return 28; else if(iXP < 435000) return 29; else if(iXP < 465000) return 30; else if(iXP < 496000) return 31; else if(iXP < 528000) return 32; else if(iXP < 561000) return 33; else if(iXP < 595000) return 34; else if(iXP < 630000) return 35; else if(iXP < 666000) return 36; else if(iXP < 703000) return 37; else if(iXP < 741000) return 38; else if(iXP < 780000) return 39; else return 40; } // The main routine for giving experience to the player. // Created by David Bills. void give_custom_exp( object oKiller, object oDead, int nCRMod ) { // Custom DMG EXP Script (varies slightly on bonuses and penalties) // Concept and Original Code By Helznicht // Syntax Clean-Up and Area Check Award by Mmealman // Major bug rennovation by David Bills. 1-9-03 // Basic experience for creatures is around Bioware 3%. // To adjust this, modify the polynomial equation below. if( GetLocalInt( oDead, "AlreadyDyingEXP" ) == 1 ) { DeleteLocalInt(oDead, "AlreadyDyingEXP"); return; } // First get all the members of the party float LowestLevelMember = 1000.0; float HighestLevelMember = -10.0; float PartyShares = 0.0; float fLevel = 0.0; float fCRMod = IntToFloat( nCRMod ); object oMaster, oHighest, oLowest; int bOld; int nTotalMembers = 0; int flxp1; int flxp; //check to see if oKiller was summon/familiar. if so, changes oKiller to summon master. oMaster = GetMaster(oKiller); if (GetIsObjectValid(oMaster)) { if (oKiller == GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oMaster) || oKiller == GetAssociate(ASSOCIATE_TYPE_ANIMALCOMPANION, oMaster) || oKiller == GetAssociate(ASSOCIATE_TYPE_DOMINATED, oMaster) || oKiller == GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oMaster) || oKiller == GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster) || oKiller == GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMaster)) oKiller = oMaster; } object oPartyMember = GetFirstFactionMember(oKiller, FALSE ); while( GetIsObjectValid(oPartyMember) && GetIsPC(oKiller)) { if( GetArea(oKiller) == GetArea(oPartyMember) && GetCurrentHitPoints( oPartyMember ) > 0 && GetDistanceBetween( oKiller, oPartyMember ) < Party_Proximity ) { nTotalMembers++; if( GetIsPC( oPartyMember ) ) fLevel = IntToFloat( GetLevel( oPartyMember ) ); else fLevel = IntToFloat(GetHitDice( oPartyMember )); if( LowestLevelMember > fLevel ) { LowestLevelMember = fLevel; oLowest = oPartyMember; } if( HighestLevelMember < fLevel ) { HighestLevelMember = fLevel; oHighest = oPartyMember; } } oPartyMember = GetNextFactionMember(oKiller, FALSE); } // Now we need to test for the Really low level creatures. // They need to be scaled as negative level to function properly. float fChallenge = GetChallengeRating( oDead ); if( fChallenge < 1.0 ) fChallenge = 1.0 - (( 1.0 - fChallenge ) * 5.0); // This is the level difference of the dead to the highest fLevel = fChallenge - HighestLevelMember; if( Boss_Cap_Method == 1 ) { fLevel += fCRMod; if( fLevel >= Exp_Level_Cap ) fLevel = Exp_Level_Cap; } else if( Boss_Cap_Method == 2 ) { if( fLevel >= Exp_Level_Cap+fCRMod ) fLevel = Exp_Level_Cap+fCRMod; } else { if( fLevel >= Exp_Level_Cap ) fLevel = Exp_Level_Cap; fLevel += fCRMod; } //Calculate basic value of kill float FinalMonValue = 84.0 * HighestLevelMember + 750; // This is the exponential function to match the 3e rules. // There is some adjustment here to allow for smooth transitions. if( fLevel < 0.0 ) FinalMonValue = FinalMonValue * pow( Lower_Exponent, fLevel ); else FinalMonValue = FinalMonValue * pow( Higher_Exponent, fLevel ); FinalMonValue = FinalMonValue * Experience_Slider; if( FinalMonValue < 0.0 ) FinalMonValue = 0.0; PartyShares = 1.0; int nPenalty; if( PartyShares > 0.0 ) { //Determine the value of the Split EXP // This is based on shares compared to the lowest member to the heighest. int SFEint; //Distribute EXP to all PCs in the Party based upon shares. float fMonst = GetChallengeRating(oDead); int HighestLevel = FloatToInt(HighestLevelMember); oPartyMember = GetFirstFactionMember(oKiller, TRUE); while ( GetIsObjectValid(oPartyMember) ) { int iLeech = HighestLevel - GetHitDice(oPartyMember); if (GetArea(oKiller) == GetArea(oPartyMember) && GetCurrentHitPoints( oPartyMember ) > 0 && GetDistanceBetween( oKiller, oPartyMember ) < Party_Proximity && iLeech <= 10 ) { SFEint = FloatToInt( FinalMonValue ); int nCurLevel; if(HighestLevel > GetLevel(oPartyMember)+3) { nCurLevel = FloatToInt(HighestLevelMember); } else { nCurLevel = GetLevel(oPartyMember); } if(nCurLevel <= FloatToInt(fMonst)+3) { if(GetLevel(oPartyMember) <= 5) SFEint *= 2; if(SFEint > 500) SFEint = 500; GiveXPToCreature(oPartyMember, SFEint); int iCR = FloatToInt(fMonst); int iGP = d20(1); int iGPT = iGP + iCR*15; if (iGPT < 1) { GiveGoldToCreature(oPartyMember, 1); } else { if(GetLevel(oPartyMember) < 5) iGPT *= 2; GiveGoldToCreature(oPartyMember, iGPT); } } else { GiveGoldToCreature(oPartyMember, 1); GiveXPToCreature(oPartyMember, SFEint); } } oPartyMember = GetNextFactionMember(oKiller, TRUE); } } }
Причины изменения: Для скриптов есть код с тегом [NSS] [/NSS]
|
![]()
Сообщение
#3553
|
|
Level 7 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN: Модмейкер Начало Войны ![]() |
В первом скрипте эту строчку закомментируй:
Neverwinter Script give_custom_exp(oKiller, OBJECT_SELF, 0); И перекомпилировать не забудь. Сообщение отредактировал Alian REXis - Feb 18 2008, 22:40 |
![]()
Сообщение
#3554
|
|
Level 11 ![]() Класс: Волшебник Характер: Neutral Good Раса: Фея NWN: Скриптинг [PW] Край Лесов ![]() |
Цитата Вопросец тут назрел =) Вообщем,есть нпс и у него несколько веток разговора.Как сделать что бы при начале диалога ветка выбиралась случайно? вариантов много. Можно использовать переменные, можно просто рандом на StartCondition например вешать на "текст появляется при" скрипт Neverwinter Script int StartingConditional() { if(Random(2) >= 1) return TRUE; return FALSE; } Вообще способов много. Все описывалось тут на форуме многократно, поищи. Сообщение отредактировал Melisse - Feb 19 2008, 00:12 |
![]()
Сообщение
#3555
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Цитата Вопросец тут назрел =) Можно что-то типа этого:Вообщем,есть нпс и у него несколько веток разговора.Как сделать что бы при начале диалога ветка выбиралась случайно? 1) инициализация диалога, первая ветка - не важно, какой в ней текст (в слот ветки для условных скриптов) Neverwinter Script int StartingConditional() { //смотрим, сколько у нас веток в диалоге //напрямую это сделать нельзя, так что удобно будет руками (опция advanced - variables) запихать количество веток в локальную переменную на неписе int nBranchCount = GetLocalInt(OBJECT_SELF, "nBranchCount"); //задаём ветку SetLocalInt(OBJECT_SELF, "nCurrentBranchNumber", Random(nBranchCount) + 1); //выходим из ветки return FALSE; } 2) Скрипты на каждой ветке - достаточно создать столько скриптов, сколько максимально планируется веток в таких диалогах. Скрипты вида: Neverwinter Script //номер ветки const int BRANCH_NUMBER = 1; int StartingConditional() { //проверяем, совпадает ли выпавший выше рандом с номером ветки return GetLocalInt(OBJECT_SELF, "nCurrentBranchNumber") == BRANCH_NUMBER; } для каждой ветки - скрипт со своим значением BRANCH_NUMBER (я привёл для первой). Скрипты помещать в условные слоты каждой ветки (в русском переводе "текст появляется при" *поклон в сторону Мел* (IMG:style_emoticons/kolobok_light/smile.gif) ) Сообщение отредактировал Ilerien - Feb 19 2008, 01:50 |
![]()
Сообщение
#3556
|
|
Level 2 ![]() Класс: Оборотень Характер: True Neutral Раса: Эльф ![]() |
Цитата В первом скрипте эту строчку закомментируй: А можно нубу показать как это делается? -) Как перекомпилировать знаю. |
![]()
Сообщение
#3557
|
|
Level 7 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN: Модмейкер Начало Войны ![]() |
Вот так (IMG:style_emoticons/kolobok_light/smile.gif)
Neverwinter Script //give_custom_exp(oKiller, OBJECT_SELF, 0); Теперь эта строчка не будет обрабатываться компилятором. Сообщение отредактировал Alian REXis - Feb 19 2008, 13:24 |
![]()
Сообщение
#3558
|
|
Level 2 ![]() Класс: Оборотень Характер: True Neutral Раса: Эльф ![]() |
Получилось, спасибо (IMG:style_emoticons/kolobok_light/snoozer_17.gif)
|
![]()
Сообщение
#3559
|
|
Level 2 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек ![]() |
"//" без кавычек пред любой строкой делают ее комментарием.
|
![]()
Сообщение
#3560
|
|
Level 2 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек ![]() |
Никто не встречал утилиту, которая может очистить модуль от "остатков" подключаемых когда-то хак-паков ? От скриптов, моделей и т.д. чтобы не вылетал тулсет с ошибкой, когда в локации есть что-то чего нет в ресурсах уже.
Я полазил на ваулте - но не нашёл ничего даже приблизительно подобного =\ |
![]()
Сообщение
#3561
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Если только сделать шаблонный модуль с хаками, экспортировать в него по отдельности локации, и проверять, есть ли в них хаки. Когда с хаками работаешь довольно долго, то потом трудно догадаться, были ли использованы в локациях хаки или нет.
Кстати, при открытии локации, редактор не будет падать, если в локации использованы из хака вещи (возможен сбой, если такие вещи одеты на существо) или объекты. Они лишь не будут отображаться. А вот если в локации задействованы тайлы из хака, то тогда редактор сразу выдаст ошибку и повиснет. Самый лучший способ, чтобы быстро освободить модуль от хаков, записывать, какие хаки подключаются и что в них входит, чтобы быстро сориентироваться, где ресурсы хака применялись. |
![]()
Сообщение
#3562
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Уважаемые мастера , у меня к Вам ваще нубский вопрос: в самом тулсете там где имена локаций и названия монстром вместо шрифтов стоят вертикальные чёрточки , и при входе в игру ( после заставок атари и др) вместо менюшки (начать игру , загрузить ...) ваще чёрный экран и надо наугад попадать в то место , где обычно находится надпись запустить. Помогите , обьясните хотя бы чего у меня нехватает.
З.Ы. Сама игра работает на других компах и со шрифтами всё норм , а у самого с этим разобраться - "таланта" не хватает . Заранее благодарен всем ответившим |
![]()
Сообщение
#3563
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
|
![]()
Сообщение
#3564
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
тулсет запустить в режиме совместимости - маздай 95 (IMG:style_emoticons/kolobok_light/ph34r.gif)
последний год только так с ним удавалось работать |
![]()
Сообщение
#3565
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Вот такой вот вопрос тем кто знает, я создал две локации одна Exterior а другая Interior. На каждой локации есть дверь, как мне их соединить, ну тоесть сделать переход из одной локации в другую ?
|
![]()
Сообщение
#3566
|
|
Level 5 ![]() ![]() Класс: Рейнджер Характер: Lawful Good Раса: Эльф ![]() |
Не знаю, как насчёт первого НВН, но в редакторе НВН2 есть у каждого объекта что-то типа свойств(Properties)...
В этих свойствах объекта есть строка Transitting to и строчка Link Object Type. В Link Object Type выбираешь к примеру вэйпоинт, который поставишь около дверки в которую нужно переместиться. В Transitting to прописываешь тэг этого вэйпойнта. Насчёт того чтобы одна дверь перемещала в другую дверь не помню, поэтому точно сказать не могу как это сделать, да и вообще существует ли такое? Точно не помню... (IMG:style_emoticons/kolobok_light/yahoo.gif) |
![]()
Сообщение
#3567
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Я может не так выразился. Щас попробую подругому обьяснить. Я два дня назад начал пробовать создавать свои модули, вот значит, сделал я поляну на ней расставил пару деревьев и волка, и еще поставил дом. Потом создал еще одну локацию Interior ну тоесть внутренее помещение, сделал комнату, поставил там стол и стул. Научите меня как сделать так что бы я открывал дверь в доме и нажимая на темное пространство за ней попадал в комнату которую я создал. Желательно подробно, я только учусь и еще ничего не понимаю в редакторе. И еще такой вопросик, я хочу положить на землю самый простой мечь или дубинку что бы ею мог пользовать герой 1 уровня , подскажите где мне ее взять ?
|
![]()
Сообщение
#3568
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
про дверь тебе частично правильно сказали. Зайди у любой из 2х дверей в Свойства - Переход местности. Там установи тип места назначения (дверь) и в выпадающем меню выбери локацию места назначения (если выбрал дверь в доме, то тут следует выбрать локацию с домиком). После этого в списке найди нужную дверь. Посмотри чтобы стояла галочка в позиции "в обе стороны". И все.
ВАЖНО: у дверей должен быть разный, УНИКАЛЬНЫЙ тэг. (в свойствах на основной странице). например для твоего случая что-то типа "DOOR_FOREST_TO_HOUSE", "DOOR_HOUSE_TO_FOREST". (писать тэги большими буквами - устоявшееся старое правило при работе с редактором) И если только начинаешь работать, внимательно изучи эту тему и особенно Туториал от Айвана |
![]()
Сообщение
#3569
|
|
Level 5 ![]() ![]() Класс: Рейнджер Характер: Lawful Good Раса: Эльф ![]() |
Цитата И еще такой вопросик, я хочу положить на землю самый простой мечь или дубинку что бы ею мог пользовать герой 1 уровня , подскажите где мне ее взять ? Заходишь в Items, там поройся и найди то оружие, которое тебе требуется... На земле оружие будет в виде мешочка... |
![]()
Сообщение
#3570
|
|
Level 18 ![]() Класс: Страж Тьмы Характер: True Neutral Раса: Человек МАСТЕР D&D ![]() |
Вот такой вот вопрос тем кто знает, я создал две локации одна Exterior а другая Interior. На каждой локации есть дверь, как мне их соединить, ну тоесть сделать переход из одной локации в другую ? Вот какие строки тебе нужны. ![]() ![]() |
![]()
Сообщение
#3571
|
|
Level 5 ![]() ![]() Класс: Рейнджер Характер: Lawful Good Раса: Эльф ![]() |
Теперь понял? Или хочешь я видео сниму, как надо делать переход из одной двери в другую? (IMG:style_emoticons/kolobok_light/biggrin.gif)
|
![]()
Сообщение
#3572
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Хватит в теме про Аврору оффтопить про Электрон.
|
![]()
Сообщение
#3573
|
|
Level 2 ![]() Класс: Оборотень Характер: True Neutral Раса: Эльф ![]() |
Проблема с опытом решилась только для определенных существ. За "умеренных" и выше, за боссов продолжает выдаваться двойной опыт -)
В смысле 2 раза. Например 120 и сразу же после этого еще 11. Сообщение отредактировал Lordeath - Mar 9 2008, 22:45 |
![]()
Сообщение
#3574
|
|
Level 11 ![]() Класс: Волшебник Характер: Lawful Evil Раса: Эльф NWN: Скриптинг [PW] Gem of the North ![]() |
Полный скрипт nw_c2_default7 в студию (IMG:style_emoticons/kolobok_light/smile.gif) А то щас в этом посте исключительно его верхний кусок.
|
![]()
Сообщение
#3575
|
|
Level 2 ![]() Класс: Оборотень Характер: True Neutral Раса: Эльф ![]() |
Странно, скрипт скопировал полностью -)
|
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 19:43 |