![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#936
|
|
Level 8 ![]() ![]() ![]() Класс: Маг Характер: Lawful Good Раса: Полуэльф ![]() |
Oksivarus до такого я пока не дошел, поэтому не знаю как тебе помочь....Спроси Айвана
Сообщение отредактировал MasterMage - Feb 4 2005, 13:23 |
![]() ![]()
Сообщение
#937
|
|||
Level 10 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Контент ![]() |
Oksivarus: Можно попробовать так:
|
||
![]()
Сообщение
#938
|
|||||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Можно и так. Я не проверял но компелится. Если будет трабла, просто отсоедени
добавив лишний if.
|
||||
![]()
Сообщение
#939
|
|||
Level 10 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Контент ![]() |
Oksivarus: Способ Aiwan'а будет быстрее, но лучше отсоедини из while'а, т.к.: IMHO + вопрос новичка к Aiwan'у :oops: :
Что произойдет, когда oItem будет INVALID? Будет ли движок дальше считать логическое выражение? Если да - могут быть траблы с GetTag(oItem), т.к. oItem будет INVALID. Или где-то можно это настроить? Или я не прав? Сообщение отредактировал Lemegeton - Feb 4 2005, 15:46 |
||
![]()
Сообщение
#940
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Lemegeton видишь ли, движок авроры это не физическая модель мира+законы физики в виде функций скриптов. Поэтому я и написал, что если будут траблы пусть сделает с условием одним еще. Просто ограничения движка просчитать на все позиции что мы с вами выдумываем не сможет ни один нормальный кодер. Погибнет... :rus: Вот попробуйте и скажите, будет дебаг ругаться или все пройдеть. :D
|
![]() ![]()
Сообщение
#941
|
|||
Level 2 ![]() Класс: Друид Характер: Neutral Good Раса: Эльф ![]() |
Добрый день, уважаемые! ;) Если не трудно, помогите мне разрешить несколько проблем с родной Аврорушкой и модулем) Часть Первая: Умные Монстры :swoon: Вероятно, этот вопрос уже был на обсуждении... сильно не ругайте ;) Проблема в том, что милые монстряшки очень любят бегать за удирающими плеерами... разумеется, и через зоны. В результате а) получается бардак в областях (ну это можно решить еще постами) б) получается веселый праздник аля "гоблины в городе" в связи с этим вопрос ^^ -как запретить переход между областями монстрам вообще (может есть такой switch) или -как сформулировать скрипт OnAreaExit, который не пускает монстра в область/триггер (в добавку приведу один пример из архива сервера: игрок, улепетывая от пантеры перешел несколько областей и вошел в портал в город. Каковым же было его удивление, когда вроде бы отставшая кошка материализовалась прямо перед ним - уже в городе...) Часть Вторая: Умные NPC После перехода на версию 1.64 в городах начали происходить странные вещи) Как только NPC замечает PС (вестимо на onheartbeat), он начинает предпринимать необычные действа, а именно: НПЦ всей толпой (включая собак и кошек) бегут (именно бегут) к дверям в области и открывают их. После этого все вроде как возвращается на круги своя... ActionRandomWalk(), понимаешь... Но стоит закрыть дверь... Рылся в x0_i0_anims и пытался поправить вот такого рода строчки
из списка меня насторожило go to a nearby placeable and interact with it и close an open door and return Складывается ощущение, что вместо того, чтобы закрывать открытые двери, они открывают закрытые :swoon: OnHeartbeat (onSpawn) у НПЦ стоит простой ActionRandomWalk() у некоторых IsMobileCloseRange Заранее благодарен! Сообщение отредактировал Bregolas - Feb 4 2005, 19:53 |
||
![]()
Сообщение
#942
|
|
Level 4 ![]() ![]() Класс: Волшебник Характер: True Neutral Раса: Полуэльф ![]() |
Хорошо попробую все что тут посоветовали но сразу возник вопрос а будет ли работать условие если я его запихну внутрь условия, примерно должна выйти следующяя строка (извините я с работы, под рукой тулсета нету пишу как помню)
IF (HasItem(oPC,"badrol")&& HasItem(oPC,"Wood")&& HasItem(oPC,(GetIsObjectValid(oItem) && GetStringLeft(GetTag(oItem), 5) == "food_")) } насколько я понимаю в функция HasItem сама перебирает весь инвентарь а вот для GetIsObjectValid надо принудительно делать цикл перебора. Добавлено в [mergetime]1107524638[/mergetime] Bregolas - я тоже думал сначяла с этим боротся но потом посмотрел прикольная такая оживленность выходит на шарде :yahoo: просто обыкновенно ходящие неписи особено упирающиеся в стены не сильно приклекательно смотрятся. Главное они не могут открыть двери которые закрыты на замок или другим способом. Возможно это не так уж и плохо (правда если это в сингле то да пикольного тут мало). |
![]()
Сообщение
#943
|
|||
Level 10 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Контент ![]() |
Тэкс, а что такое oItem и откуда он береться в такой строчке? А вот это
что такое? Может скобочки не закрыл где-то? Получается, что HasItem вторым параметром примет булевское значение (0 или 1)?!
З.Ы. Перебирать шмотки по-любому придется, если хочешь искать по части тэга а не по тэгу целиком. Aiwan: Не, вопрос в другом. У меня пол-тулсета под WineX'ом галлюцинируют, так что я не знаю, есть ли в NWNScript'ах настроечка компилятора а-ля Complete Boolean Equations в С++? Сообщение отредактировал Lemegeton - Feb 4 2005, 16:54 |
||
![]()
Сообщение
#944
|
|||||||
Level 2 ![]() Класс: Друид Характер: Neutral Good Раса: Эльф ![]() |
Не согласен :xz: Мои "неписи" мирно ходят по городку и в стены не упираются ;) Другое дело, выглядит все это не только несолидно но и туповато...
Ну, разумеется, все двери в таверны и кузницы открыты) Поэтому все они подвергаются нападению маньяков-нпц...
Если честно, на шарде это я тоже нахожу не очень веселым) особенно в густонаселенных городах. З.Ы.: Что еще я заметил: странным образом не во всех городах такие вещи происходят) Проверил - оказывается, если нпц не Commoner по классу, то он не подвержен такому дверевлечению. Но это только гипотеза... any idea? |
||||||
![]()
Сообщение
#945
|
|||||||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Bregolas как раз эту проблему я решал в ПЛ. Пираты бегали где ни попадя. Смотри базу скриптов там есть мой для дверей и триггеров.
Вот это лишнее. На кой тебе юзать хербит когда есть на онспавне строки? Раскомментируй их и сохрани скрипт под новым именем. Как нужн бродячий НПС вставь его ему и все, при загрузке он будет вечно бродить без хербита. И немедленно все убери оттуда у всех.
Насколько я понимаю, ты сам слабо представляешь что тебе надо. Давай что бы мы тут не выдумывали фигню, ты опишешь строго свою задачу и мы подумаем. А то телепаты у нас в отпуске и нам трудно представить что ты хочешь. :D Дальше, на кой тебе прилеплять инклюбу биовар? HasItem... ты знаешь сколько она весит? Если твой скрипт из двух строк будет содержать две инклюды биовар по 2 мега, то твой короткий на 5 кб скрипт будет весить 4 метра. Ясно? Инклюды сохраняются в теле скрипта. Теперь о твоем скрипте... Что он делает я :xz: .... но то что ты просил тут. Если окажется что тебе надо совсем другое, то мы тебя дружно побьем. :agr: :rolleyes: :D :D
|
||||||
![]()
Сообщение
#946
|
|||
Level 2 ![]() Класс: Друид Характер: Neutral Good Раса: Эльф ![]() |
извини, описался... разумеется, все они на onspawn. Это мне известно. Но любопытно было бы узнать что делать с их странно работающими random animations. За скрипт большое спасибо. Буду пробовать. Единственное, можно ли его приспособить и к OnAreaEnter, а то как-то невесело править двери и триггеры в 160 областях "?" :) |
||
![]()
Сообщение
#947
|
|||||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
А неписей поправить в стольких облостях? Инвентарь им настроить? :D Все этол я уже прохдил... Не ленись, правь.
Если ты заметил, то сама по себе функция это только функция. А всем управляет в основном инклюда валкмен. Так вот, если ее исправить патчем ипрописать что нить такого :rolleyes: эдакого, то такое и будет. Когда мы преходили с НВН на СОУ то еще покруче глюки ловили... |
||||
![]()
Сообщение
#948
|
|||||
Level 2 ![]() Класс: Друид Характер: Neutral Good Раса: Эльф ![]() |
Ну извини, глумишься ты что ли надо мной?
я то как раз заметил, и спрашиваю, как поправить x0_i0_anims и в нем ли дело! Дело в том, что по информации о патче 1.64 в ЭТОМ СКРИПТЕ ничего по идее не менялось. Тогда возникает вопрос: может сама функция GetIsClosed или ActionCloseDoor или какая иная перестали работать корректно?
Я, к счастью, больше двух лет уже в тулсете сижу и за это время на своих собственных ошибках и в одиночку же столько проблем переворотил, что эта фраза излишня... Про лень ты поймешь из вот этого примера: прикольно ли поправить 200 дроу в городе, после того как обнаружилось, что элайнмент у них CG вместо NE? (пришлось переделывать и палитру и размещенных, так как у всех были разные настройки как по скриптам? так и по инвентарю...) Сейчас же таким трудом заниматься нет времени, к сожалению. Я просто задал вопрос "можно ли". Я не спрашивал "править ли мне" Сообщение отредактировал Bregolas - Feb 4 2005, 19:51 |
||||
![]()
Сообщение
#949
|
|
Level 4 ![]() ![]() Класс: Волшебник Характер: True Neutral Раса: Полуэльф ![]() |
Aiwan спасибо за скрипт насколко я понимаю это то что я хотел, а именно - опрделить есть ли в инвентаре предмет с частью заданного тега.
|
![]()
Сообщение
#950
|
|
Level 4 ![]() ![]() Класс: Волшебник Характер: True Neutral Раса: Полуэльф ![]() |
Извиняюсь я опять, попробывал скрипт и теперь незнаю как прост можно реализовать следующее:
в соответствии с скриптом Aiwanа перебираем инвернтарь на наличие нужного предмета, если тег предмет совпадает то выполняем нужное действие если нет то бепем следующий предмет - ВОПРОС - как тут определить что такого предмета вообще нет в сумке. скажу что хочю, возможно я просто не могу пояснить (все проблемы людей в непонимании друг друга) Нужен скрипт для отдыха игрока (почьти стандартный) в котором проверяется наличие таких необходимых предметов - 1-бедрол, 2-дрова, 3-еда (причем еды может быть 10 видов и соответственно 10 различных тегов начинающихся на food.) бедрол после сна возвращяется, дрова и найденная еда уничьтажаются |
![]()
Сообщение
#951
|
|
Level 8 ![]() ![]() ![]() Класс: Убийца Характер: Chaotic Evil Раса: Эльф NWN: Маппинг ![]() |
Доброе време суток вощем у меня к вам 1 прозьба...
Даите плз сылку на скрипт магазина( там где через некоторое време во време игры когда туда будет положена вещ она пропадает)... :unsure: |
![]()
Сообщение
#952
|
|||||||||||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Править? Ручками... Либо взять старый и сделать импорт к себе. Думаешь все тебе расскажут что исправили? Ага... Они как то исправили работу с OBJECT_SELF в скриптах, так у нас рухнули все катсцены разом и прочие скрипты с задержкой на исполнение с OBJECT_SELF. Мы ж не идиоты, год все работало и вдруг сломалось :D Так то...
В вашх словах слышится раздрожение... Никоем образом не хотел задеть и прочее. И рекомендую с этим не баловать, народ тут вежливый и самолюбивый. Пара постов и ответы никто не напишет :drag: Ну, я скажу так. Сделать мод на левел 3-5 и потом подобрать баланс на 9-14 переделав не меньше чем ты описываешь тоже не два байта перекачать. Я это все делал сам у себя и по несколько раз. То фракцию не ту, то скрипты не так расставлю, ДБ исправит и говорит, в те слоты то в те это... и такого я делал сто раз. Поэтому я знаю что такое переделать (ненавижу) посему и говорю.
Вы совершенно правы мусье.
Так. Все просто как теория относительности.
Но ты не уточняешь, сколько еды уничтожается и какой? У тебя полные сумки жратвы, нужна одного вида или нет? Можно три одинаковые? Логика хромает. Какая еда у тебя и как она уничтожается. Сколько ее надо и имся скрипта на отдых. И все. Элендор поищи в базе скриптов. Был такой... |
||||||||||
![]()
Сообщение
#953
|
|
Level 4 ![]() ![]() Класс: Волшебник Характер: True Neutral Раса: Полуэльф ![]() |
возможно и просто но вот строчьку ExecuteScript("script_rest", oPC); я вообще не понимаю прост с такой функцие вообще не стыкался ниразу.
Еды 10 видов и соответственно 10 тегов. Уничьтожается сразу после соответствия на все проверки наличия предметов. По правилу вес съединой пищи должен быть 1/20 от жизни героя (вес прямо связан с тегом тобиш это можно отбросить из того что мне не понятно) но не меньше 1 шт. еды. (вродеб правильно написал, хотя может и заблуждаюсь как это должно выглядет в конечьном виде). Огромное спасибо кто удили мне свое внимание. Добавлено в [mergetime]1107553110[/mergetime] Количество еды в сумке определяется самим игроком тобиш может быть как 1 вида так и всех 10. Все 10 видов можно спокойно есть (условия на на проверку наличие пистицедов не требуется, и наложение дополнителльных побочьных эффектов как плохих так и хороших) |
![]()
Сообщение
#954
|
|||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Эта функция просто запускает скрипт с именем "script_rest" на объект РС. Тоесть, у тебя сработали все условия по проверке еды и дров, запускай скрипт отдыха. И усе, радуйся. |
||
![]()
Сообщение
#955
|
|||||
![]() Класс: Обыватель Характер: Chaotic Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
А кроме как кушать это еда нужна еще где-то? Почему не сделать одинаковые тэги? А вес проверять функцией
Это решение данного вопроса. Если ты хочешь разобраться с самой сутью перебора вещей в по части тэга инвентори, то извини, что я ввязался.
|
||||
![]()
Сообщение
#956
|
|||
Level 4 ![]() ![]() Класс: Волшебник Характер: True Neutral Раса: Полуэльф ![]() |
я извиняюсь (просто я немец так сказать :) ) и насколько я понял функцию GetWeight возвращяет вес предметов но это мне НЕ НУЖНО,я вес просто привязал к номеру (№1 - 1 кг .... №10 50 кг). одинаковые теги нельзя так как на магазин я повесил удалитель одинаковых вещей в соответствии с чем при одинаковых тегах останется только 1 вид еды. Еда используется 2 путями: 1- когда игрок просто отдыхает с востановлением всех сил (простое удаление из инвентаря) 2- использует как предмет и в соответстви с тем что скушал получяет некий бонус. Так вот
Как я уже говорил с этим вродеб разобрался за что вам огромное спасибо, НО как после перебора всех вещей в инвентаре и ненахождения необходимого застаивть сделать конкретное действие - сказать "у вас нет этого предмета". что в данной ситуации вернет функция - while (GetIsObjectValid(oItem)) |
||
![]()
Сообщение
#957
|
|||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Твой метод тянуть кота за хвост меня выбивает из колеи :D Коней на переправе не меняють :) Давай так, ты выложишь подробно ВСЕ свои УСЛОВИЯ что и как и теги, а мы тебе поможем. А ГЛАВНОЕ ЧТО ТЫ ОТ НЕГО (и нас :yes: ХОЧЕШЬ) Потаму как твой один скрипт с вопросами: "А вот если..." может перерасти в спам тему. Ждемс... :drag: |
||
![]()
Сообщение
#958
|
|
Level 4 ![]() ![]() Класс: Волшебник Характер: True Neutral Раса: Полуэльф ![]() |
Ок я у меня в скрипте написана следающяя строчька (перед этим разные условия на наличие предметов но все они с 1 тегом поэтому проблем в их поиске не возникает) Тянуть кота я не хочю честное слово.
if ((HasItem(oPC,"food_0")==TRUE)||(HasItem(oPC,"food_1")==TRUE)||(HasItem(oPC,"food_2")==TRUE)||(HasItem(oPC,"food_3")==TRUE)||(HasItem(oPC,"food_4")==TRUE)||(HasItem(oPC,"food_5")==TRUE)||(HasItem(oPC,"food_6")==TRUE)||(HasItem(oPC,"food_7")==TRUE)||(HasItem(oPC,"food_8")==TRUE)||(HasItem(oPC,"food_9")==TRUE)) //проверка на наличие еды { ExportSingleCharacter(oPC); //сохранения героя // из того что посоветовали на форуме попытался сделать удаление // первой найденной еды while (GetIsObjectValid(oItem) == TRUE) // Лезем в сумку { if (sTag == "food") // Находим бутерброд { string oTag = GetTag(oItem); DestroyObject(GetItemPossessedBy(oPC,oTag)); //съедаем еду } else { oItem = GetNextItemInInventory(oPC); // Смотрим дальше } } как видно из всего первая строчька очень длинная при это если в инветаре много всего то выдается всем наверно известная фраза о переполнение. Задачи скрипта: найти в инвентаре хоть 1 предмет с тегом food_0, food_1, ... , food_9 b и в случяе его отсутствия выполнть действие №1. Если же предмет такой присутствует то удалить этот предмет и запустить действие №2. |
![]()
Сообщение
#959
|
|
Level 4 ![]() ![]() Класс: Волшебник Характер: True Neutral Раса: Полуэльф ![]() |
Чтоб не тянуть кота за хвост выложу сразу получившийся скрипт.
Проблема - не могу удалить найденную благодаря вам еду. Для удаления использую функцию DestroyObject() пробывал запихнуть туда как обьект так и тег обьекта на оба варианта выдает сообщение ПРЕМЕННАЯ, ОПРЕДЕЛЕННАЯ БЕЗ ТИПА; на любую из этих строчек: DestroyObject(GetItemPossessedBy(oPC,sGorging)); //udalenie edy DestroyObject(oMeal); //udalenie edy вот весь скрипт (если поможет и чтоб кота не тянуть за хвоста): //::////////////////////////////////////////////// void PlaceBedroll(object oPC) { location lLoc = GetLocation(oPC); CreateObject(OBJECT_TYPE_PLACEABLE,"bedrolls001",lLoc,FALSE); DestroyObject(GetItemPossessedBy(oPC,"bedroll")); object oMyRoll = GetNearestObjectByTag("MyBedRoll",oPC); location lRoll = GetLocation(oMyRoll); AssignCommand(oPC,ActionMoveToLocation(lRoll,FALSE)); AssignCommand(oPC,ActionDoCommand(SetFacing(GetFacing(oMyRoll)))); } void PickupBedroll(object oPC) { AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0f)); CreateItemOnObject("bedroll",oPC); DestroyObject(GetNearestObjectByTag("MyBedRoll",oPC),1.0f); } #include "nw_i0_plot" void main() { object oPC = GetLastPCRested(); ExportSingleCharacter(oPC); SetLocalInt(oPC, "PCDead", 0); string sRealApp = "realApp"; int nRealMe = GetLocalInt(oPC, sRealApp); object oItem = GetFirstItemInInventory(oPC); int iFood = 0; while (GetIsObjectValid(oItem) && GetStringLeft(GetTag(oItem), 4) == "food"&&iFood==0) { int iFood = 1; string sGorging = ObjectToString(oItem); object oMeal = GetObjectByTag(sGorging); { } oItem = GetNextItemInInventory(oPC); } if (!GetIsPC(oPC)) return; if(nRealMe>0) { SetCreatureAppearanceType(oPC, nRealMe - 1); } if (GetLastRestEventType()== REST_EVENTTYPE_REST_STARTED && HasItem(oPC,"bedroll")&& (iFood==1)) { SetLocalInt(oPC, "bedroll", 1); DestroyObject(GetItemPossessedBy(oPC,sGorging)); //udalenie edy DestroyObject(oMeal); //udalenie edy FloatingTextStringOnCreature("Porridge is good, only it is not enough meat", oPC); PlaceBedroll(oPC); effect eBlind = EffectBlindness(); DelayCommand(2.5, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_IMP_SLEEP), oPC)); } else { if (HasItem(oPC,"bedroll")) { FloatingTextStringOnCreature("пожевать бы что то ..", oPC); } else { FloatingTextStringOnCreature("не, на сырой земле хреново спать", oPC); } //Remove blindness from the PC effect eLoop=GetFirstEffect(oPC); while (GetIsEffectValid(eLoop)) { if (GetEffectType(eLoop)==EFFECT_TYPE_BLINDNESS) RemoveEffect(oPC, eLoop); eLoop=GetNextEffect(oPC); } AssignCommand(oPC, ClearAllActions()); } if (GetLastRestEventType()== REST_EVENTTYPE_REST_CANCELLED && GetLocalInt(oPC,"bedroll")==1) { //Remove blindness from the PC effect eLoop=GetFirstEffect(oPC); while (GetIsEffectValid(eLoop)) { if (GetEffectType(eLoop)==EFFECT_TYPE_BLINDNESS) RemoveEffect(oPC, eLoop); eLoop=GetNextEffect(oPC); } PickupBedroll(oPC); SetLocalInt(oPC, "bedroll", 0); } if (GetLastRestEventType()== REST_EVENTTYPE_REST_FINISHED && GetLocalInt(oPC,"bedroll")==1) { //Remove blindness from the PC effect eLoop=GetFirstEffect(oPC); while (GetIsEffectValid(eLoop)) { if (GetEffectType(eLoop)==EFFECT_TYPE_BLINDNESS) RemoveEffect(oPC, eLoop); eLoop=GetNextEffect(oPC); } PickupBedroll(oPC); SetLocalInt(oPC, "bedroll", 0); } } |
![]()
Сообщение
#960
|
|||||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Oksivarus у тебя будет два скрипта, в одном проверишь, в другом удалишь. Все работает я проверял. Первый основной скрипт. Вешай хоть куды, главное РС правильно опиши.
Второй скрипт запускай с задержкой. Мой назывался "am_temp_05" свой назовешь и пропишешь вверху.
|
||||
![]() ![]() |
Текстовая версия | Сейчас: 12th July 2025 - 15:59 |