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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
> Индивидуальность или универсальность?, Элемент для своей системы респауна\спауна\гуляния монстров.
Anakondar
сообщение Oct 27 2011, 10:47
Сообщение #1


Level 6
**

Класс: Друид
Характер: Chaotic Neutral
Раса: Гном



Сейчас в нашем мультиплеерном модуле работает следующая система:
Есть одинаковые по физическим параметрам Creature Objects (существа). Одинаковые в смысле того, что являются копиями одного ResRef, расставленными по локациям своего обитания (обычно, более одного экземпляра на локацию). Каждое из этих существ совершают псевдо периодическое движение по маршруту WayPoint-ов WP_CreatureTag_##, причём, маршрут движения у каждого экземпляра свой, чтобы они не мешали друг другу и не скучивались в одном месте. Достигнуто это следующим образом: после выставления существа в тулсете но до выставления его вэйпоинтов к его тэгу дописывается индивидуальный постфикс.

Проблемки? Ога. А именно:
Захотелось мне добавить определённому типу монстров фит, хитпоинт, скил, дубину, поменять клыки, шкуру, название, скриптсэт, аппирэнс и т.д., для чего я, отредактировав его в тулсэте, нажимаю "Мгновенное обновление", ведь руками расставлять все 2054 экземпляра лень. Естественно, индивидуальные постфиксы слетают. И опять-таки, руками туеву хучу тэгов менять лень. Что делать?

Есть решение? Да, вот оно:
В OnSpawn скрипте существ прописал кусок, который смотрит, соответствует ли тэг экземпляра его ResRef-у (если нет, значит менялся вручную). Если да, то скрипт считает, сколько таких существ в облости (area). Если больше 1, то нужно ввести индивидуальность. Делаем ему NewTag, такой что NewTag = Tag + "##", где ## каким-либо оброзом вычесленная порядковый номер существа. Если таковая замена произошла, сигнализируем об этом локальными переменными существа, для верности переносим в WP_NewTag_01 (если такого нет и если локальные переменные существа велят ему быть, а локальные переменые области позволяют ему быть - создаём этот вэйпоинт) и пускаем "по этапу". (Естественно скрипт выполняется только для тех существ, которые были в модуле изначально или создавались с моей палитры моими скриптами. Энкаунтерные существа и саммоны игнорят этот кусок.)

Всё ж нормально, не? Кое-какие моменты остаются:
1. А как порядковый-то номер вичислить? Дело в том, что OnSpawn запускается каждым существом отдельно, и каждое существо нумерует своих собратьев по-разному. Многие хотят быть первыми. Пытался применять различные способы: по тэгу ближайшего вэйпоинта, по LocalInt-счётчику области или модуля, но всё равно случается возникать близнецам с одинаковыми именами (тобишь, тэгами).
2. Что делать с существами, которые вместо WalkWaypoints() гуляют RendomWalk()? Как добавить индивидуальность им (а-ля "точки рандомволка существа01 должны лежать не далее, чем нДистанс от плэйсайбл01)?
3. Создал новый тип существ. Ладно, так уж и быть, расставил 99999 экземпляров через шифт по областям. А вот 999999999 (по Х штук на каждое существо) вэйпоинтов ставить лень - они все с разными тэгами к тому же. Ноль-первый создастся сам, и на него будут возвращаться после сражения все наши объекты. Но по возвращении будут стоять истуканами. Как бы скриптом сгенерить ещё парочку вэйпоинов, да так чтобы они не лежали в стене, в костре, в яме, под столом, на столе?

Сообщение отредактировал Anakondar - Oct 27 2011, 11:41
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
Ilerien
сообщение Oct 28 2011, 20:57
Сообщение #2


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

Класс: Волшебник
Характер: Lawful Evil
Раса: Эльф
NWN: Скриптинг [PW]
Gem of the North



Цитата
Если в GetLocalString(GetModule(), "X2_S_UD_SPELLSCRIPT"), то я про то же и сказал, что могу поставить туда свою проверку, которая выполнится и "зарежет" каст, если необходимо. Но если моя проверка каст не зарезала, то эффект заклинания, а вместе с ним и стандартная проверка возымеют место. Но хотелось бы исключить стандартную проверку вообще.
В чём проблема? Если хочется только убрать дефолтную лошадиную проверку полиморфа, то делается это просто, если посмотреть функцию X2PreSpellCastCode() в x2_inc_spellhook.
Neverwinter Script
int X2PreSpellCastCode()
{
  object oTarget = GetSpellTargetObject();
  int nContinue;

  //---------------------------------------------------------------------------
  // This small addition will check to see if the target is mounted and the
  // spell is therefor one that should not be permitted.
  //---------------------------------------------------------------------------
  if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
  { // do check for abort due to being mounted check
      if (HorseGetIsMounted(oTarget)&&X3ShapeShiftSpell(oTarget))
      { // shape shifting not allowed while mounted
          if(GetIsPC(oTarget))
          {
              FloatingTextStrRefOnCreature(111982,oTarget,FALSE);
          }
          return FALSE;
      } // shape shifting not allowed while mounted
  } // do check for abort due to being mounted check


  //здесь - всякий флуд вроде проверок на концентрацию, секвенсоры и UMD

  return nContinue;
}
Достаточно выставить в 1 локалку X3_NO_SHAPESHIFT_SPELL_CHECK, и лошадиная проверка выполняться не будет.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме
- Anakondar   Индивидуальность или универсальность?   Oct 27 2011, 10:47
- - greye   Цитата(Anakondar @ Oct 27 2011, 11:47) 1....   Oct 27 2011, 11:01
- - Anakondar   Цитата(greye @ Oct 27 2011, 12:01) Можно ...   Oct 27 2011, 11:28
- - greye   Цитата(Anakondar @ Oct 27 2011, 12:28) Не...   Oct 27 2011, 11:38
- - Anakondar   Цитата(greye @ Oct 27 2011, 12:38) Можно ...   Oct 27 2011, 11:48
- - denis0k   ЦитатаЗахотелось мне добавить определённому типу м...   Oct 27 2011, 17:39
- - Ilerien   ЦитатаГрузиться мб будет адски (а при куче перцепш...   Oct 27 2011, 19:24
- - denis0k   ЦитатаПочему ТМИ?Потому что именно тми в перцепшен...   Oct 27 2011, 20:05
- - Anakondar   Цитата(denis0k @ Oct 27 2011, 21:05) если...   Oct 27 2011, 20:47
- - denis0k   Идеальных варианта два: 1) Заранее всё спроектиров...   Oct 28 2011, 07:37
- - Anakondar   Проблема не в суть темы, однако, актуалочка. Переп...   Oct 28 2011, 16:43
- - greye   Цитата(Anakondar @ Oct 28 2011, 16:43) Ес...   Oct 28 2011, 17:14
- - Anakondar   Может и спелхук, а не генерек, сути то не менятет ...   Oct 28 2011, 17:36
- - greye   Цитата(Anakondar @ Oct 28 2011, 17:36) Мо...   Oct 28 2011, 17:41
- - Anakondar   Ну да, есть такая буква. Однако, как ни странно, п...   Oct 28 2011, 18:03
- - greye   Цитата(Anakondar @ Oct 28 2011, 18:03) Но...   Oct 28 2011, 18:21
- - denis0k   Цитатапроблемы не решаетПолностью решает, ибо для ...   Oct 28 2011, 19:28
- - Anakondar   ЦитатаПолностью решает, ибо для этого придуман. Та...   Oct 28 2011, 19:49
- - Ilerien   ЦитатаЕсли в GetLocalString(GetModule(), "X2_...   Oct 28 2011, 20:57
- - Anakondar   Да, этого локального целого я не заметил, извиняюс...   Oct 28 2011, 21:45
- - Flaristan   По поводу респавна монстров - для себя остановился...   Nov 1 2011, 00:06
- - Anakondar   У меня реализована несколько своеобразная система ...   Nov 1 2011, 19:42
- - Flaristan   Тут уже затрагивали где-то рядом вопрос ненужности...   Nov 1 2011, 22:04
- - Anakondar   Цитатапеременную/таймаут на определенное значение ...   Nov 1 2011, 22:27
- - Flaristan   Тут может быть еще такой фокус, что путь фактическ...   Nov 1 2011, 22:41
- - Anakondar   Что что, а уж путь, ежели он открыт, нормально про...   Nov 1 2011, 23:02


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 12th May 2024 - 22:25