![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2136
|
|
Level 1 Класс: Волшебник Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Привет,
У PC есть пиво "ss_pivo" (n бутылочек). Как сделать, чтобы в диалоге отдать пиво НПС. Нужно отдать заявленное количество бутылочек. И как определить, сколько бутылочек есть у PC? |
![]()
Сообщение
#2137
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
С помощью фун-ций:
NSS // Sets stack size of an item. // - oItem: item to change // - nSize: new size of stack. Will be restricted to be between 1 and the // maximum stack size for the item type. If a value less than 1 is passed it // will set the stack to 1. If a value greater than the max is passed // then it will set the stack to the maximum size void SetItemStackSize(object oItem, int nSize) NSS // Returns stack size of an item // - oItem: item to query int GetItemStackSize(object oItem) NSS // Destroy oObject (irrevocably). // This will not work on modules and areas. void DestroyObject(object oDestroy, float fDelay=0.0f) |
![]()
Сообщение
#2138
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
QUOTE(Lanilor @ Apr 7 2006, 06:26) [snapback]76679[/snapback] И как определить, сколько бутылочек есть у PC? к примеру вот скрипт, показывающий строку в диалоге, если у персонажа игрока есть больше, чем N бутылочек: NSS int Match(string s1, string s2) забирающий N бутылочек (тоже в диалоге):{ return (s1 == s2); } int GetNumItemsInInventory(object oInventory = OBJECT_SELF, string sTag = "*") { int nNum = 0; object oItem = GetFirstItemInInventory(oInventory); while (GetIsObjectValid(oItem)) { if (Match(GetTag(oItem), sTag)) { nNum += GetItemStackSize(oItem); } oItem = GetNextItemInInventory(oInventory); } return nNum; } int StartingConditional() { return (GetNumItemsInInventory(GetPCSpeaker(), "ss_pivo") >= 3); } NSS int Match(string s1, string s2) только не забудь залепить такую дыру в диалогах NWN: во время разговора можно положить предметы на землю, а при этом скрипт может уже постчитать, что предметы в инвентаре. Лечится легко:{ return (s1 == s2); } int RemoveItemsFromInventory(object oInventory = OBJECT_SELF, string sTag = "*", int nNum = -1) { int nStack; object oItem = GetFirstItemInInventory(oInventory); while (GetIsObjectValid(oItem) && (nNum != 0)) { if (Match(GetTag(oItem), sTag)) { if (nNum < 0) DestroyObject(oItem); else if ((nStack = GetItemStackSize(oItem)) > nNum) { SetItemStackSize(oItem, nStack - nNum); return 0; } else { DestroyObject(oItem); nNum -= nStack; } } oItem = GetNextItemInInventory(oInventory); } return nNum; } void main() { RemoveItemsFromInventory(GetPCSpeaker(), "ss_pivo", N); } -- Непись: Ну и где ж пиво-то? ---- Игрок: Вот тебе твое пиво, как заказывал, все *N* штук! (провека на наличие предметов) ------ Непись: О-о-о... давай-давай, теперь в кружку лей... (проверка на наличие предметов) ------ Непить: Ну-ну молодец, молодец. А теперь подними с пола и поставь на стол. Я сказал подними и поставь! ---- Игрок: Сейчас принесу... |
![]()
Сообщение
#2139
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
А можно еще так:
NSS void DestroyItem(object oOwner, string sComponent, int nNumItems) { int nStackSize; object oItem = GetFirstItemInInventory(oOwner); while (GetIsObjectValid(oItem) == TRUE) { if (GetTag(oItem) == sComponent) { nStackSize = GetItemStackSize(oItem); if (nStackSize > nNumItems) { SetItemStackSize(oItem, nStackSize - nNumItems); return; } else if (nStackSize == nNumItems) { DestroyObject(oItem, 0.1); return; } else if (nStackSize < nNumItems) { nNumItems = nNumItems - nStackSize; DestroyObject(oItem, 0.1); } } oItem = GetNextItemInInventory(oOwner); } } void main() { object oPC = GetPCSpeaker(); string sGhead = "am_it_goblinhead"; if (IsInInventory(oPC, sGhead)) { int nFound = 0; object oItem = GetFirstItemInInventory(oPC); while (GetIsObjectValid(oItem) == TRUE) { if (GetTag(oItem) == sGhead) { nFound = nFound + GetNumStackedItems(oItem); } oItem = GetNextItemInInventory(oPC); } GiveGoldToCreature(oPC, 100 * nFound); DestroyItem(oPC, sGhead, nFound); } else { SpeakString("Не понял, а где же трофеи? Вы решили меня надуть?"); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oPC, 15.0f); } } Взял скрипт из своего модуля. НПС отдаются головы гоблинов. Если их нет, но игрок желает на халяву получить деньги (а проверка на деньги уже была), ставится на второе условие сей мелкий скриптик. Сообщение отредактировал Zirrex - Apr 8 2006, 02:22 |
![]()
Сообщение
#2140
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
А чего в базу не кинуть код? Я вот на днях тоже писал сам, а мог бы не париться... (IMG:style_emoticons/kolobok_light/pardon.gif)
|
![]()
Сообщение
#2141
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
А база закрыта =)
Lex: открыл |
![]()
Сообщение
#2142
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Я тогда подберу коллекцию разнообразных скриптов, которые будут полезны каждому, кто занимается разработкой модулей. Только вначале их нужно соответствующе оформить (IMG:style_emoticons/kolobok_light/smile.gif)
Lex: от это будет отлично |
![]()
Сообщение
#2143
|
|
Level 1 Класс: Волшебник Характер: Chaotic Neutral Раса: Полуэльф ![]() |
2azathoth: сенькс, очень удобный код.
2Zirrex: а зачем в DestroyObject() указан fDelay? |
![]()
Сообщение
#2144
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Lanilor, а, это я делал для одного скрипта своего, чтобы вначале выводилось сообщение, а потом удалялась сама вещь. Можешь задержку убрать, она не принципиальна.
|
![]()
Сообщение
#2145
|
|
Level 1 Класс: Рейнджер Характер: Lawful Neutral Раса: Эльф ![]() |
Уважаемые мастера, очень сомневаюсь, что это возможно, но вопрос всё же задам:
Допустим PC и два хенчмена доходят до финала какой-нить локации, а дальше их, по сценарию, разбрасывает по разным локациям. Появляется какая-нить фея и говорит - "А теперь выбираем сценарий!" (помните FF6?) И после прохождения одного, сразу же переходить к прохождению второго и т.д. Короче - Отдельно за хенчей, без PC, можно играть? И как энто буит выглядеть в скриптах??? |
![]()
Сообщение
#2146
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Люди, ни кто не сталкивался с ситуацией, когда нужно снять эффект яда?
Сам-то эффект снимается, но с каждым эффектом яда накладывается еще и эффект понижения статов, для каждого яда понижается свой стат и для каждого кидается свой кубик. Так вот, как отличить эффект понижающий статы, который был наложен вместе с ядом, от того, который был просто когда-то наложен? |
![]()
Сообщение
#2147
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(-fenix- @ Apr 11 2006, 06:12) [snapback]77271[/snapback] Так вот, как отличить эффект понижающий статы, который был наложен вместе с ядом, от того, который был просто когда-то наложен? Поиск эффекта от имени того, кто его наложил не выхоит? NSS void RemoveEffectCreator(object oCreature, object oCreator = OBJECT_SELF)
{ effect eEffect = GetFirstEffect(oCreature); while(GetIsEffectValid(eEffect)) { if (GetEffectCreator(eEffect) == oCreator) { RemoveEffect(oCreature, eEffect); } eEffect = GetNextEffect(oCreature); } } |
![]()
Сообщение
#2148
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(Aiwan @ Apr 11 2006, 10:02) [snapback]77290[/snapback] Поиск эффекта от имени того, кто его наложил не выхоит? Хм, ну да, можно для начало найти яд, узнать кто его наложил, снять его, а потом поискать EffectAbilityDecrease, который повесил этот же объект. Сенькс. (IMG:style_emoticons/kolobok_light/yes3.gif) |
![]()
Сообщение
#2149
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Fortesso, я так и не понял, что тебе нужно.
|
![]()
Сообщение
#2150
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
-fenix-, а если просто кинуть спел лечения от яда?
NSS void main() { object oPC = GetFirstPC(); AssignCommand(oPC,ActionCastSpellAtObject(SPELL_LESSER_RESTORATION,oPC,METAMAGIC_QUICKEN,TRUE)); } |
![]()
Сообщение
#2151
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE Короче - Отдельно за хенчей, без PC, можно играть? И как энто буит выглядеть в скриптах??? Нет кажется нельзя, можно только за фамильяра. |
![]()
Сообщение
#2152
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(gennady @ Apr 11 2006, 16:14) [snapback]77311[/snapback] -fenix-, а если просто кинуть спел лечения от яда? Дело в том, что ядом может быть поражен РС и в бою с пауком и во время этого же боя стрелой от врага. Чей яд удалять? QUOTE(Fortesso @ Apr 11 2006, 03:59) [snapback]77267[/snapback] Отдельно за хенчей, без PC, можно играть? И как энто буит выглядеть в скриптах??? Нельзя. Никак. |
![]()
Сообщение
#2153
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Fortesso @ Apr 11 2006, 14:43) [snapback]77314[/snapback] Отдельно за хенчей, без PC, можно играть? И как энто буит выглядеть в скриптах??? ну можно в принципе, но кривовато. Игроку поменять внешность, фенотип, сбросить левелы в 0, дать опыта, автолевелап по нужному направлению и вперед. Имя останется правда старым, но и это можно обойти. В диалогах писать не <FullName> а какой-нить токен, который переприсваивать в зависимости от того, кто играет. Но это все кривовато (IMG:style_emoticons/kolobok_light/smile.gif) Так что лучше забудь. |
![]()
Сообщение
#2154
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Можно. Использовать БД для сохранения почти всех игровых и особенно сюжетных данных (да, тут сложно, но возможно), а после разветвления сюжета попросить игрока перезайти чаром-хенчем, которому уже можно накидать левелы, шмотки и т.д. в соответствии с БД. Можно даже копию оригинального чара игрока сделать для участия в катсценах при игре за хенча.
Сообщение отредактировал virusman - Apr 12 2006, 00:48 |
![]()
Сообщение
#2155
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
можно из хенчей сделать прообразы и полиморфить в них без возможности располиморфиться.. (IMG:style_emoticons/kolobok_light/drag.gif)
ну и изменить полиморф так, чтоб можно было кастовать, использовать предметы и т.п.. (IMG:style_emoticons/kolobok_light/drag.gif) в 1.67 появится возможность менять внешний вид, мутировать можно будет (IMG:style_emoticons/kolobok_light/smile.gif) (IMG:style_emoticons/kolobok_light/prankster2.gif) че-то несу какую-то хрень (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#2156
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Да бросьте вы стардать. (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) Теоретически ВСЕ можно. И каняшек с фикалиями и полимерфы НПС с мегашкуркой что сменить все статы, функции смены имени и проччеее. Человеку это надо? Нет. Поспасить решили? Интеллектуально (IMG:style_emoticons/kolobok_light/smile.gif) Марш по мастерским и работать. Трансмутаторы, растудыт вас... (IMG:style_emoticons/kolobok_light/biggrin.gif)
|
![]()
Сообщение
#2157
|
|
Level 8 ![]() ![]() ![]() Класс: Теневой Танцор Характер: True Neutral Раса: Эльф ![]() |
Извиняюсь за глупый вопрос, но можно ли проверить наличие в инвентаре PC определенного кол-ва предметов?
|
![]()
Сообщение
#2158
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Айв, человек спросил, можно ли. Я предложил совершенно реальный способ. Непростой - да. Но, например, написать работающий боевой АИ в разы сложнее. А кто-то ведь пишет. Так что не надо так.
*ушёл скриптить дальше* |
![]()
Сообщение
#2159
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Elf-Drow @ Apr 12 2006, 16:07) [snapback]77475[/snapback] Извиняюсь за глупый вопрос, но можно ли проверить наличие в инвентаре PC определенного кол-ва предметов? в базе есть + было ну совсем недавно QUOTE(virusman @ Apr 12 2006, 16:08) [snapback]77476[/snapback] Так что не надо так. просто дело в том, что парня интересовал простой способ. А новичку подрубать БД и делать другие описанные тобой операции... малек трудновато. (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#2160
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(virusman @ Apr 12 2006, 18:08) [snapback]77476[/snapback] Айв, человек спросил, можно ли. Я предложил совершенно реальный способ. Непростой - да. Но, например, написать работающий боевой АИ в разы сложнее. А кто-то ведь пишет. Так что не надо так. *ушёл скриптить дальше* Вирь, зря обижаешься. Я же по отечески (IMG:style_emoticons/kolobok_light/smile.gif) РАЗ. Во творых, не надо новичу забивать голову. Вот и все. (IMG:style_emoticons/kolobok_light/wink3.gif) |
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 18:02 |