Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
205 страниц V  « < 37 38 39 40 41 > »   
Ответить в эту темуОткрыть новую тему
> Вопросы новичков, Абсолютные глупости
MasterMage
сообщение Feb 4 2005, 13:22
Сообщение #936


Level 8
***

Класс: Маг
Характер: Lawful Good
Раса: Полуэльф



Oksivarus до такого я пока не дошел, поэтому не знаю как тебе помочь....Спроси Айвана

Сообщение отредактировал MasterMage - Feb 4 2005, 13:23
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lemegeton
сообщение Feb 4 2005, 13:45
Сообщение #937


Level 10
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Человек
NWN: Контент



Oksivarus: Можно попробовать так:
Neverwinter Script Source
main()
{
  int nItems = 0;
  string sTag = "";
  int iPos = 0;
  // Первый объект в инвенторе
  object oItem = GetFirstItemInInventory(GetFirstPC());
  // Пока объекты есть (перебираем все объекты)
  while (GetIsObjectValid(oItem) == TRUE)
  {
      oTag = GetTag(oItem);  // Получаем таг текущего объекта
      iPos = FindSubString(oTag, "food");  // Пытаемся найти позицию подстроки "food" в таге
      if (iPos>-1) {  // Если подстрока найдена
        // Делаем тут все, что надо.
      }
      // Ищем следующий объект в инвенторе
      oItem = GetNextItemInInventory(GetFirstPC());
  }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 4 2005, 15:05
Сообщение #938


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Можно и так. Я не проверял но компелится. Если будет трабла, просто отсоедени
Neverwinter Script Source
GetStringLeft(GetTag(oItem), 5) == "food_")
добавив лишний if.
Neverwinter Script Source
void main()
{
    object oPC = GetFirstPC(); // Сам опишешь его правильно
    object oItem = GetFirstItemInInventory(oPC);
    // Пока такой объект сушествует и его 5 знаков TAG слева равны food_
    while (GetIsObjectValid(oItem) && GetStringLeft(GetTag(oItem), 5) == "food_")
          {
          // Проверка на пистициды
          if (GetStringRight(GetTag(oItem), 2) == "01") // Ищем адрессно, ежли надо
          {
          }
          oItem = GetNextItemInInventory(oPC);
          }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lemegeton
сообщение Feb 4 2005, 15:45
Сообщение #939


Level 10
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Человек
NWN: Контент



Oksivarus:
Способ Aiwan'а будет быстрее, но лучше отсоедини из while'а, т.к.:

IMHO + вопрос новичка к Aiwan'у :oops: :
Neverwinter Script Source
while (GetIsObjectValid(oItem) && GetStringLeft(GetTag(oItem), 5) == "food_")

Что произойдет, когда oItem будет INVALID? Будет ли движок дальше считать логическое выражение? Если да - могут быть траблы с GetTag(oItem), т.к. oItem будет INVALID. Или где-то можно это настроить?

Или я не прав?

Сообщение отредактировал Lemegeton - Feb 4 2005, 15:46
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 4 2005, 16:15
Сообщение #940


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Lemegeton видишь ли, движок авроры это не физическая модель мира+законы физики в виде функций скриптов. Поэтому я и написал, что если будут траблы пусть сделает с условием одним еще. Просто ограничения движка просчитать на все позиции что мы с вами выдумываем не сможет ни один нормальный кодер. Погибнет... :rus: Вот попробуйте и скажите, будет дебаг ругаться или все пройдеть. :D

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Bregolas
сообщение Feb 4 2005, 16:22
Сообщение #941


Level 2
*

Класс: Друид
Характер: Neutral Good
Раса: Эльф



Добрый день, уважаемые! ;) Если не трудно, помогите мне разрешить несколько проблем с родной Аврорушкой и модулем)

Часть Первая: Умные Монстры :swoon:
Вероятно, этот вопрос уже был на обсуждении... сильно не ругайте ;)
Проблема в том, что милые монстряшки очень любят бегать за удирающими плеерами... разумеется, и через зоны. В результате
а) получается бардак в областях (ну это можно решить еще постами)
б) получается веселый праздник аля "гоблины в городе"
в связи с этим вопрос ^^
-как запретить переход между областями монстрам вообще (может есть такой switch)
или
-как сформулировать скрипт OnAreaExit, который не пускает монстра в область/триггер
(в добавку приведу один пример из архива сервера: игрок, улепетывая от пантеры перешел несколько областей и вошел в портал в город. Каковым же было его удивление, когда вроде бы отставшая кошка материализовалась прямо перед ним - уже в городе...)

Часть Вторая: Умные NPC
После перехода на версию 1.64 в городах начали происходить странные вещи) Как только NPC замечает PС (вестимо на onheartbeat), он начинает предпринимать необычные действа, а именно: НПЦ всей толпой (включая собак и кошек) бегут (именно бегут) к дверям в области и открывают их. После этого все вроде как возвращается на круги своя... ActionRandomWalk(), понимаешь... Но стоит закрыть дверь... Рылся в x0_i0_anims и пытался поправить вот такого рода строчки


Neverwinter Script Source
void AnimActionPlayRandomImmobile();

// Perform a random close-range action.
// This will include:
// - go to a nearby placeable and interact with it
// - go to a nearby friend and interact with them
// - play a random animation
// - walk to a nearby 'NW_STOP' waypoint
// - close an open door and return
// - go back to starting position
// - fall through to ActionPlayRandomImmobile


из списка меня насторожило
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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Feb 4 2005, 16:34
Сообщение #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: просто обыкновенно ходящие неписи особено упирающиеся в стены не сильно приклекательно смотрятся. Главное они не могут открыть двери которые закрыты на замок или другим способом. Возможно это не так уж и плохо (правда если это в сингле то да пикольного тут мало).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lemegeton
сообщение Feb 4 2005, 16:50
Сообщение #943


Level 10
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Человек
NWN: Контент



Тэкс, а что такое oItem и откуда он береться в такой строчке?
А вот это
Neverwinter Script Source
...HasItem(oPC,(GetIsObjectValid(oItem) && GetStringLeft(GetTag(oItem), 5) == "food_"))...
что такое? Может скобочки не закрыл где-то? Получается, что HasItem вторым параметром примет булевское значение (0 или 1)?!

З.Ы. Перебирать шмотки по-любому придется, если хочешь искать по части тэга а не по тэгу целиком.

Aiwan: Не, вопрос в другом. У меня пол-тулсета под WineX'ом галлюцинируют, так что я не знаю, есть ли в NWNScript'ах настроечка компилятора а-ля Complete Boolean Equations в С++?

Сообщение отредактировал Lemegeton - Feb 4 2005, 16:54
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Bregolas
сообщение Feb 4 2005, 17:09
Сообщение #944


Level 2
*

Класс: Друид
Характер: Neutral Good
Раса: Эльф



QUOTE
Bregolas - я тоже думал сначяла с этим боротся но потом посмотрел прикольная такая оживленность выходит на шарде  просто обыкновенно ходящие неписи особено упирающиеся в стены не сильно привлекательно смотрятся. Возможно это не так уж и плохо (правда если это в сингле то да пикольного тут мало).


Не согласен :xz: Мои "неписи" мирно ходят по городку и в стены не упираются ;) Другое дело, выглядит все это не только несолидно но и туповато...

QUOTE
Главное они не могут открыть двери которые закрыты на замок или другим способом.


Ну, разумеется, все двери в таверны и кузницы открыты) Поэтому все они подвергаются нападению маньяков-нпц...

QUOTE
(правда если это в сингле то да пикольного тут мало)


Если честно, на шарде это я тоже нахожу не очень веселым) особенно в густонаселенных городах.

З.Ы.: Что еще я заметил: странным образом не во всех городах такие вещи происходят) Проверил - оказывается, если нпц не Commoner по классу, то он не подвержен такому дверевлечению. Но это только гипотеза...
any idea?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 4 2005, 18:07
Сообщение #945


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Bregolas как раз эту проблему я решал в ПЛ. Пираты бегали где ни попадя. Смотри базу скриптов там есть мой для дверей и триггеров.
QUOTE (Bregolas @ Feb 4 2005, 19:22)
OnHeartbeat у НПЦ стоит простой ActionRandomWalk()

Вот это лишнее. На кой тебе юзать хербит когда есть на онспавне строки? Раскомментируй их и сохрани скрипт под новым именем. Как нужн бродячий НПС вставь его ему и все, при загрузке он будет вечно бродить без хербита. И немедленно все убери оттуда у всех.
QUOTE (Oksivarus @ Feb 4 2005, 19:34)
насколько я понимаю в функция HasItem сама перебирает весь инвентарь а вот для GetIsObjectValid надо принудительно делать цикл перебора.

Насколько я понимаю, ты сам слабо представляешь что тебе надо. Давай что бы мы тут не выдумывали фигню, ты опишешь строго свою задачу и мы подумаем. А то телепаты у нас в отпуске и нам трудно представить что ты хочешь. :D Дальше, на кой тебе прилеплять инклюбу биовар? HasItem... ты знаешь сколько она весит? Если твой скрипт из двух строк будет содержать две инклюды биовар по 2 мега, то твой короткий на 5 кб скрипт будет весить 4 метра. Ясно? Инклюды сохраняются в теле скрипта.
Теперь о твоем скрипте... Что он делает я :xz: .... но то что ты просил тут. Если окажется что тебе надо совсем другое, то мы тебя дружно побьем. :agr: :rolleyes: :D :D
Neverwinter Script Source
void main()
{
    object oPC = GetFirstPC(); // Сам опишешь его правильно
    object oItem = GetFirstItemInInventory(oPC);
    string sTag = GetStringLeft(GetTag(oItem), 5);
    object oB = GetItemPossessedBy(oPC,"badrol");
    object oW = GetItemPossessedBy(oPC,"Wood");
    if (GetIsObjectValid(oB)) // Если у РС коврик под задницей
    {
    if (GetIsObjectValid(oW)) // Если он засранец дров нарубили в лесу
        {
        while (GetIsObjectValid(oItem)) // Лезем в сумку и делаем перебор всего дерьма
          {
          if (sTag == "food_") // Находим бутерброд
          {
          // ПЛЮЕМ В НЕГО И ПРЯЧЕМ В СУМКУ РС
          }
          oItem = GetNextItemInInventory(oPC); // Смотрим следующий бутерброд
          }
        }
    }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Bregolas
сообщение Feb 4 2005, 18:38
Сообщение #946


Level 2
*

Класс: Друид
Характер: Neutral Good
Раса: Эльф



QUOTE
Вот это лишнее. На кой тебе юзать хербит когда есть на онспавне строки? Раскомментируй их и сохрани скрипт под новым именем. Как нужн бродячий НПС вставь его ему и все, при загрузке он будет вечно бродить без хербита. И немедленно все убери оттуда у всех.


извини, описался... разумеется, все они на onspawn. Это мне известно. Но любопытно было бы узнать что делать с их странно работающими random animations.

За скрипт большое спасибо. Буду пробовать. Единственное, можно ли его приспособить и к OnAreaEnter, а то как-то невесело править двери и триггеры в 160 областях "?" :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 4 2005, 19:35
Сообщение #947


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Bregolas @ Feb 4 2005, 21:38)
За скрипт большое спасибо. Буду пробовать. Единственное, можно ли его приспособить и к OnAreaEnter, а то как-то невесело править двери и триггеры в 160 областях "?"

А неписей поправить в стольких облостях? Инвентарь им настроить? :D Все этол я уже прохдил... Не ленись, правь.
QUOTE (Bregolas @ Feb 4 2005, 21:38)
Но любопытно было бы узнать что делать с их странно работающими random animations.

Если ты заметил, то сама по себе функция это только функция. А всем управляет в основном инклюда валкмен. Так вот, если ее исправить патчем ипрописать что нить такого :rolleyes: эдакого, то такое и будет. Когда мы преходили с НВН на СОУ то еще покруче глюки ловили...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Bregolas
сообщение Feb 4 2005, 19:46
Сообщение #948


Level 2
*

Класс: Друид
Характер: Neutral Good
Раса: Эльф



Ну извини, глумишься ты что ли надо мной?

QUOTE
Если ты заметил, то сама по себе функция это только функция.


я то как раз заметил, и спрашиваю, как поправить x0_i0_anims и в нем ли дело! Дело в том, что по информации о патче 1.64 в ЭТОМ СКРИПТЕ ничего по идее не менялось. Тогда возникает вопрос: может сама функция GetIsClosed или ActionCloseDoor или какая иная перестали работать корректно?

QUOTE
А неписей поправить в стольких облостях? Инвентарь им настроить?  Все этол я уже прохдил... Не ленись, правь.



Я, к счастью, больше двух лет уже в тулсете сижу и за это время на своих собственных ошибках и в одиночку же столько проблем переворотил, что эта фраза излишня... Про лень ты поймешь из вот этого примера: прикольно ли поправить 200 дроу в городе, после того как обнаружилось, что элайнмент у них CG вместо NE? (пришлось переделывать и палитру и размещенных, так как у всех были разные настройки как по скриптам? так и по инвентарю...) Сейчас же таким трудом заниматься нет времени, к сожалению.

Я просто задал вопрос "можно ли". Я не спрашивал "править ли мне"


Сообщение отредактировал Bregolas - Feb 4 2005, 19:51
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Feb 4 2005, 20:00
Сообщение #949


Level 4
**

Класс: Волшебник
Характер: True Neutral
Раса: Полуэльф



Aiwan спасибо за скрипт насколко я понимаю это то что я хотел, а именно - опрделить есть ли в инвентаре предмет с частью заданного тега.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Feb 4 2005, 21:11
Сообщение #950


Level 4
**

Класс: Волшебник
Характер: True Neutral
Раса: Полуэльф



Извиняюсь я опять, попробывал скрипт и теперь незнаю как прост можно реализовать следующее:
в соответствии с скриптом Aiwanа перебираем инвернтарь на наличие нужного предмета, если тег предмет совпадает то выполняем нужное действие если нет то бепем следующий предмет - ВОПРОС - как тут определить что такого предмета вообще нет в сумке.

скажу что хочю, возможно я просто не могу пояснить (все проблемы людей в непонимании друг друга)
Нужен скрипт для отдыха игрока (почьти стандартный) в котором проверяется наличие таких необходимых предметов - 1-бедрол, 2-дрова, 3-еда (причем еды может быть 10 видов и соответственно 10 различных тегов начинающихся на food.)
бедрол после сна возвращяется, дрова и найденная еда уничьтажаются
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Элендор
сообщение Feb 4 2005, 21:39
Сообщение #951


Level 8
***

Класс: Убийца
Характер: Chaotic Evil
Раса: Эльф
NWN: Маппинг



Доброе време суток вощем у меня к вам 1 прозьба...
Даите плз сылку на скрипт магазина( там где через некоторое време во време игры когда туда будет положена вещ она пропадает)... :unsure:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 4 2005, 23:30
Сообщение #952


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Bregolas @ Feb 4 2005, 22:46)
я то как раз заметил, и спрашиваю, как поправить x0_i0_anims и в нем ли дело!

Править? Ручками... Либо взять старый и сделать импорт к себе. Думаешь все тебе расскажут что исправили? Ага... Они как то исправили работу с OBJECT_SELF в скриптах, так у нас рухнули все катсцены разом и прочие скрипты с задержкой на исполнение с OBJECT_SELF. Мы ж не идиоты, год все работало и вдруг сломалось :D Так то...
QUOTE (Bregolas @ Feb 4 2005, 22:46)
Я просто задал вопрос "можно ли". Я не спрашивал "править ли мне"

В вашх словах слышится раздрожение... Никоем образом не хотел задеть и прочее. И рекомендую с этим не баловать, народ тут вежливый и самолюбивый. Пара постов и ответы никто не напишет :drag:
Ну, я скажу так. Сделать мод на левел 3-5 и потом подобрать баланс на 9-14 переделав не меньше чем ты описываешь тоже не два байта перекачать. Я это все делал сам у себя и по несколько раз. То фракцию не ту, то скрипты не так расставлю, ДБ исправит и говорит, в те слоты то в те это... и такого я делал сто раз. Поэтому я знаю что такое переделать (ненавижу) посему и говорю.
QUOTE (Oksivarus @ Feb 5 2005, 00:11)
скажу что хочю, возможно я просто не могу пояснить (все проблемы людей в непонимании друг друга)

Вы совершенно правы мусье.
QUOTE (Oksivarus @ Feb 5 2005, 00:11)
Нужен скрипт для отдыха игрока (почьти стандартный) в котором проверяется наличие таких необходимых предметов - 1-бедрол, 2-дрова, 3-еда (причем еды может быть 10 видов и соответственно 10 различных тегов начинающихся на food.)
бедрол после сна возвращяется, дрова и найденная еда уничьтажаются

Так. Все просто как теория относительности.
Neverwinter Script Source
ExecuteScript("script_rest", oPC);

Но ты не уточняешь, сколько еды уничтожается и какой? У тебя полные сумки жратвы, нужна одного вида или нет? Можно три одинаковые? Логика хромает. Какая еда у тебя и как она уничтожается. Сколько ее надо и имся скрипта на отдых. И все.

Элендор поищи в базе скриптов. Был такой...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Feb 5 2005, 00:30
Сообщение #953


Level 4
**

Класс: Волшебник
Характер: True Neutral
Раса: Полуэльф



возможно и просто но вот строчьку ExecuteScript("script_rest", oPC); я вообще не понимаю прост с такой функцие вообще не стыкался ниразу.

Еды 10 видов и соответственно 10 тегов. Уничьтожается сразу после соответствия на все проверки наличия предметов. По правилу вес съединой пищи должен быть 1/20 от жизни героя (вес прямо связан с тегом тобиш это можно отбросить из того что мне не понятно) но не меньше 1 шт. еды.
(вродеб правильно написал, хотя может и заблуждаюсь как это должно выглядет в конечьном виде).

Огромное спасибо кто удили мне свое внимание.
Добавлено в [mergetime]1107553110[/mergetime]
Количество еды в сумке определяется самим игроком тобиш может быть как 1 вида так и всех 10. Все 10 видов можно спокойно есть (условия на на проверку наличие пистицедов не требуется, и наложение дополнителльных побочьных эффектов как плохих так и хороших)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 5 2005, 01:42
Сообщение #954


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Oksivarus @ Feb 5 2005, 03:30)
возможно и просто но вот строчьку ExecuteScript("script_rest", oPC); я вообще не понимаю прост с такой функцие вообще не стыкался ниразу.

Эта функция просто запускает скрипт с именем "script_rest" на объект РС. Тоесть, у тебя сработали все условия по проверке еды и дров, запускай скрипт отдыха. И усе, радуйся.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tiger Greyhawk
сообщение Feb 5 2005, 04:07
Сообщение #955



Иконки Групп

Класс: Обыватель
Характер: Chaotic Good
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE (Oksivarus @ Feb 5 2005, 00:30)
Еды 10 видов и соответственно 10 тегов

А кроме как кушать это еда нужна еще где-то? Почему не сделать одинаковые тэги? А вес проверять функцией
Neverwinter Script Source
int GetWeight(object oTarget=OBJECT_SELF)
Это решение данного вопроса. Если ты хочешь разобраться с самой сутью перебора вещей в по части тэга инвентори, то извини, что я ввязался.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Feb 5 2005, 11:26
Сообщение #956


Level 4
**

Класс: Волшебник
Характер: True Neutral
Раса: Полуэльф



я извиняюсь (просто я немец так сказать :) ) и насколько я понял функцию GetWeight возвращяет вес предметов но это мне НЕ НУЖНО,я вес просто привязал к номеру (№1 - 1 кг .... №10 50 кг).
одинаковые теги нельзя так как на магазин я повесил удалитель одинаковых вещей в соответствии с чем при одинаковых тегах останется только 1 вид еды.
Еда используется 2 путями:
1- когда игрок просто отдыхает с востановлением всех сил (простое удаление из инвентаря)
2- использует как предмет и в соответстви с тем что скушал получяет некий бонус.

Так вот
QUOTE (Aiwan @ Feb 5 2005, 01:42)
Эта функция просто запускает скрипт с именем "script_rest" на объект РС. Тоесть, у тебя сработали все условия по проверке еды и дров, запускай скрипт отдыха. И усе, радуйся.


Как я уже говорил с этим вродеб разобрался за что вам огромное спасибо, НО как после перебора всех вещей в инвентаре и ненахождения необходимого застаивть сделать конкретное действие - сказать "у вас нет этого предмета". что в данной ситуации вернет функция - while (GetIsObjectValid(oItem))

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 5 2005, 12:04
Сообщение #957


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Oksivarus @ Feb 5 2005, 14:26)
Как я уже говорил с этим вродеб разобрался за что вам огромное спасибо, НО как после перебора всех вещей в инвентаре и ненахождения необходимого застаивть сделать конкретное действие - сказать "у вас нет этого предмета". что в данной ситуации вернет функция - while (GetIsObjectValid(oItem))

Твой метод тянуть кота за хвост меня выбивает из колеи :D Коней на переправе не меняють :) Давай так, ты выложишь подробно ВСЕ свои УСЛОВИЯ что и как и теги, а мы тебе поможем. А ГЛАВНОЕ ЧТО ТЫ ОТ НЕГО (и нас :yes: ХОЧЕШЬ) Потаму как твой один скрипт с вопросами: "А вот если..." может перерасти в спам тему. Ждемс... :drag:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Feb 5 2005, 14:16
Сообщение #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.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Feb 5 2005, 20:59
Сообщение #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);
}

}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 5 2005, 21:04
Сообщение #960


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Oksivarus у тебя будет два скрипта, в одном проверишь, в другом удалишь. Все работает я проверял.
Первый основной скрипт. Вешай хоть куды, главное РС правильно опиши.
Neverwinter Script Source
void main()
{
    object oPC = GetEnteringObject(); // Сам опишешь его правильно
    object oItem = GetFirstItemInInventory(oPC);
    string sFood = "food_";
    SetLocalInt(oPC, "FOOD", FALSE); // Локалка контроль за едой
    SetLocalInt(oPC, "DELEY", FALSE); // Локалка контроль за удалением
    {
    while(GetIsObjectValid(oItem))
        {
          if ((GetStringLeft(GetTag(oItem), 5)== sFood))
            {
            SetLocalInt(oPC, "FOOD", (GetLocalInt(oPC, "FOOD") + 1));
            FloatingTextStringOnCreature("Одын", oPC);
            ActionWait(0.3); // ставь задержку иначе проскользнут локалки
            }
          oItem = GetNextItemInInventory(oPC);
        }
        DelayCommand(2.0, ExecuteScript("am_temp_05", oPC));
        // Скрипт твоего отдыха запускай с задержкой, так как сумку надо потрошить долго...
        }
}


Второй скрипт запускай с задержкой. Мой назывался "am_temp_05" свой назовешь и пропишешь вверху.
Neverwinter Script Source
void main()
{
    object oPC = GetFirstPC();
    string sFood = "food_";
    int iFood = GetLocalInt(oPC, "FOOD");
    SetLocalInt(oPC, "DELEY", FALSE);
    int i = 2; // Сколько еды надо забрать. Это число + 1
    if (GetIsPC(oPC) && iFood > 2)
            {
              object oItem = GetFirstItemInInventory(oPC);
              while(GetIsObjectValid(oItem))
                {
                if (GetStringLeft(GetTag(oItem), 5)== sFood && GetLocalInt(oPC, "DELEY") <= i)
                    {
                    DestroyObject(oItem);
                    SetLocalInt(oPC, "DELEY", (GetLocalInt(oPC, "DELEY") + 1));
                    ActionWait(0.3);
                    FloatingTextStringOnCreature("Забираем "+IntToString(GetLocalInt(oPC, "DELEY")),  oPC);
                    }
                oItem = GetNextItemInInventory(oPC);
                }
            //:://///////////////////////////////////////////////
            /*
              Сюда впиши то что должно произойтьи когда дестроишь три предмета
              */

            //:://///////////////////////////////////////////////
            FloatingTextStringOnCreature("Работает!!!", oPC);
            return;
            }
    //:://///////////////////////////////////////////////
    /*
      Сюда впиши то что должно произойтьи когда нехватает еды
    */

    //:://///////////////////////////////////////////////
    FloatingTextStringOnCreature("У вас всего "+IntToString(iFood)+" единиц еды!",  oPC);
    FloatingTextStringOnCreature("Маловато!", oPC);
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

205 страниц V  « < 37 38 39 40 41 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 12th July 2025 - 15:59