Цитата(Flaristan @ Jan 8 2012, 16:14)

Рекомендую - для написания тривиальных эвентов и в качестве удобного пособия примеров для изучения NWN-скриптинга.
Запускаем тулсет, открываем нужную локацию, открываем вкладку с монстрами и жмем кнопку «редактировать и копировать» на понравившемся, делаем что хотим с этим монстром и создаем ему уникальный резреф в конце сохраняя в кастомной своей палитре, копируем этот резреф себе в сторонку.
Скачиваем скрипт генератор, запускаем, выбираем (в окошке вверху слева) тип скрипта «нормальный скрипт», выбираем источник запуска скрипта «ПС входит куда-то», отменяем спец условие, выбираем из списка скриптовых эвентов «сделать если ЭТО тогда ТО условие» и жмем кнопку «скрипт»:
- выбираем тип условия «проверить локальную целочисленную»;
- вводим в поле название для нашей переменной (ну например MONSTER_SPAWN_CHECK);
- выбираем галочку на условие «точно равно»;
- выставляем значение «0»;
- жмем «ок»;
выбираем из списка скриптовых эвентов «спавн созданий» и жмем кнопку «скрипт», заполняем поля:
- «резреф» (копируем его из описалова монстра которого хотим спавнить);
- визуальный эффект спавна (можно не трогать);
- точка спавна – по вейпоинту (указываем таг нашего вейпоинта);
- действия создания при респавне – выбираем «без действия»;
- жмем «ок – выход»;
выбираем из списка скриптовых эвентов «установка локальных переменных» и жмем кнопку «скрипт»:
- выбираем тип переменной «целочисленная» и ставим соответствующий флажок (integer);
- вводим в поле название нашей переменной упомянутое блоком выше (в примере MONSTER_SPAWN_CHECK);
- устанавливаем ее в значение «1»;
- жмем «ок – выход»;
жмем кнопку «окончить текущие если», выбираем вариант «просто закончить», жмем кнопку «закрыть», видим в окошке наш сгенерированный скрипт и комент «поместите на OnEnter»:
Код
//Put this script OnEnter
void main()
{
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;
if (GetLocalInt(oPC, "MONSTER_SPAWN_CHECK")== 0)
{
oTarget = GetWaypointByTag("TAG_OF_WAYPOINT ");
lTarget = GetLocation(oTarget);
oSpawn = CreateObject(OBJECT_TYPE_CREATURE, "resref_of_creature", lTarget);
SetLocalInt(oPC, "MONSTER_SPAWN_CHECK", 1);
}
}
копируем все это дело, жмем «свойства локации» в тулсете, открываем вкладку «события» и ищем окошко «OnEnter», жмем кнопочку чуть правее чтоб открыть редактирование скрипта на этот триггер и вставляем туда этот скопированный из генератора скрипт и сохраняем его под оригинальным именем, ставим на локации вейпоинт упомянутый в скрипте с упомянутым оригинальным тагом («TAG_OF_WAYPOINT» или что там придумается) – это будет точка спавна упомянутого монстра (резреф которого не забываем указать посмотрев в своей кастомной палитре в свойствах монстра).
Жмем в генераторе скриптов кнопку «очистить для нового скрипта», «ок», снова выбираем тип скрипта «нормальный», выбираем стартер «ПС разрушивает/убивает монстра или плейсебл», выбираем че будет если убьет последователь – «отразится на ПС», отменяем наличие спец условия, выбираем из списка скриптовых эвентов «установка локальных переменных» и жмем кнопку «скрипт»:
- выбираем тип переменной «целочисленная» и ставим соответствующий флажок (integer);
- вводим в поле название нашей переменной упомянутое блоками выше (в примере MONSTER_SPAWN_CHECK);
- устанавливаем ее в значение «0»;
- жмем «ок – выход»;
жмем кнопку «закрыть», видим и копируем наш сгенерированный скрипт с пометкой «поместить на OnDeath»:
Код
//Put this script OnDeath
void main()
{
object oPC = GetLastKiller();
while (GetIsObjectValid(GetMaster(oPC)))
{
oPC=GetMaster(oPC);
}
if (!GetIsPC(oPC)) return;
SetLocalInt(oPC, "MONSTER_SPAWN_CHECK", 0);
}
копируем это дело и жмем свойства нашего кастомного монстра с упомянутым резрефом в нашей кастомной палитре, выбираем пункт «событий» и находим триггер «OnDeath», жмем справа чтоб редактировать скрипт и вставляем наш скопированный сохранив его под оригинальным названием.
Итого: имеем локацию; на ней точку респавна монстра (наш вейпоинт); и скрипт на входе в локацию который проверяет игрока в нее входящего на локальную переменную – если игрок уже убивал нашего оригинального монстра или еще не был на этой локации, значит новенький и целенький монстр появится в указанной точке при входе, если уже заходил в локацию но монстра еще не убивал, значит спавнить нового не будем.
Система будет отлично работать для синглплеерного спавна монстра – для мультиплеерного как правило они сложнее и индивидуальнее.