Neverwinter Nights | Редактор Аврора
По сайту
Главная
Рыцарская сага
Файлы
Neverwinter Nights
Гостевая книга
Форум сайта

По теме
Игроделу
Редактор фракций
Редактор журнала
Редактор диалога
Редактор скрипта
Модуль и области
Двери
Монстры
Встречи
Предметы
Торговцы
Объекты
Триггеры
Звуки
Тайлы
Хак файлы
Скриптинг

По интернету
Англоязычные сайты
nwvault.ign.com
nwn.bioware.com
NWN Lexicon
Русскоязычные сайты
Сайт WRG.ru
Город Мастеров
Сайт bioware
Сайт NWNights
Сайт nwnzone
Скрижали Судьбы
Neverwinter NightsРедактор АврораИгроделу

Введение в Редактор Аврора

После двух лет работы с редактором Аврора игры Neverwinter Nights, накопился некоторый опыт, которым я бы и хотел поделиться в этой теме с начинающими игроделами. Так же я попытался в этой теме подобрать необходимые скрипты, которые вы можете включить в свои модули. Если вы не найдете в этой теме ответы на мучащие вас вопросы, советую посетить форум Города Мастеров сайта WRG. ru создателей игры Проклятие Левора, где вам помогут решить многие проблемы по модостроительству.

Для автономного просмотра всего содержания темы «Игроделу» можно скачать мануал:
версия 2.02.09   скачать Скачать файл

О найденных ошибках в этой теме, прошу сообщить мне в Гостевую книгу, или зайдите на Форум сайта, где также можно будет обсудить любые возникшие вопросы и способы их решения…

Маленькая шпаргалка по скриптам

Дать предмет

CreateItemOnObject("ResRef ", GetPCSpeaker(), 1);

или

object oItem = CreateItemOnObject("ResRef ", GetPCSpeaker(), 1);

SetIdentified(oItem, TRUE); // опознать

Дать ХР

GiveXPToCreature(GetPCSpeaker(),100);

Золото

GiveGoldToCreature(GetPCSpeaker(),100);// дать золота

TakeGoldFromCreature(9000, GetPCSpeaker(), TRUE); // забрать золото

Удалить предмет из инвентаря

DestroyObject(GetItemPossessedBy(GetPCSpeaker(), "TAG"));

Проверить предмет инвентаря существа

int StartingConditional()

{

if(GetIsObjectValid(GetItemPossessedBy(GetPCSpeaker(), "TAG")))

return TRUE;

return FALSE;

}

Установить переменную

SetLocalInt(GetPCSpeaker(),"LOCAL",1);

SetLocalInt(OBJECT_SELF,"LOCAL",1);

SetLocalInt(GetClickingObject(),"LOCAL ",1);

SetLocalInt(GetModule(),"LOCAL",1);

SetLocalInt(GetEnteringObject(),"LOCAL",1);

SetLocalInt(GetLastUsedBy(),"LOCAL",1);

SetLocalInt(GetFirstPC(),"LOCAL",1);

if (GetLocalInt(OBJECT_SELF, "LOCAL") == 1) // Проверить

SetLocalInt(oSelf, "NUM", GetLocalInt(oSelf, "NUM") + 1);

// Прибавить к переменной "NUM" единицу

Текст над персонажем

ActionSpeakString("Охо-хо, что же будет???");

DelayCommand(31.5, AssignCommand(oPC, SpeakString("Слова")));

AssignCommand(oPC, ActionStartConversation(oNPC,"dialog"));

// “dialog” - диалог персонажа

AssignCommand(oPC, ActionStartConversation(oNPC)); // диалог персонажа

Текст в панели отчета

FloatingTextStringOnCreature("Текст.", GetExitingObject());

SendMessageToPC(oPC, "Вы убили гоблина");

Плейс или дверь говорит свой диалог (слот OnUsed)

ActionStartConversation(GetLastUsedBy());

Авто сохранение

DoSinglePlayerAutoSave();

Перемещение существа к точке маршрута при диалоге

ActionForceMoveToObject(GetObjectByTag("Тэг точки"), FALSE, 0.0, 15.0);

ActionDoCommand(SetCommandable(TRUE));

DelayCommand(0.1, SetCommandable(FALSE));

Перемещение героя и NРС к точке маршрута при диалоге

(Универсальная версия)

object oSelf = OBJECT_SELF;

object oPoint = GetWaypointByTag("WP_" + GetTag(oSelf));

object oPC = GetPCSpeaker();

AssignCommand(oPC, ClearAllActions());

AssignCommand(oSelf, ClearAllActions());

AssignCommand(oPC, ActionJumpToObject(oPoint));

AssignCommand(oSelf, ActionJumpToObject(oPoint));

// Точка перемещения содержит WP_+Тэг объекта NPC

Уничтожить объект

object oByTag = GetNearestObjectByTag ("TAG");

DestroyObject(oByTag, 1.00); // уничтожить ближайший объект с тегом

DestroyObject(GetObjectByTag("CERDZE"),1.00); // уничтожить объект с тегом

Закрытие двери

object oDoor = GetObjectByTag("TAG");

AssignCommand(oDoor, ActionCloseDoor(oDoor));

SetLocked(oDoor, TRUE);

Открытие двери

object oDoor = GetObjectByTag("TAG");

AssignCommand(oDoor, ActionDoCommand(SetLocked(oDoor, FALSE)));

AssignCommand(oDoor, ActionOpenDoor(oDoor));

Эффекты

effect eSmoke = EffectVisualEffect(VFX_FNF_DISPEL);

location Loc = GetLocation(OBJECT_SELF);

ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eSmoke, Loc);

object oPC = GetFirstPC();

ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eSmoke,oPC, 10.0);

NPC садится на стул (Универсальная версия)

if (!IsInConversation(OBJECT_SELF))

ActionSit(GetNearestObjectByTag("ST_"+ GetTag(OBJECT_SELF)));

Управление фракцией

void main()

{

object oPC = GetPCSpeaker();

object oByTag = GetObjectByTag("TAG");

AdjustReputation( oPC, oByTag, 50);

}

// Фракция нейтральная (ненавидит цифра со знаком - )

Проверить врага

if(GetIsEnemy(oPC, oEnemy)) // Если враги

ChangeFaction(oGob, oNeytral); // Дать oGob фракцию oNeytral

Озвучить

PlaySound("as_cv_gongring2");

PlayVoiceChat(VOICE_CHAT_DEATH);

Добрый

AdjustAlignment(GetFirstPC(), ALIGNMENT_GOOD, 5);

Проверить наличие нескольких предметов

#include "nw_i0_tool"

void main()

{

if(HasItem(GetObjectByTag("TAG "), "Item_1")&&

HasItem(GetObjectByTag("TAG"), "Item_2"))

}

Проверить несколько переменных

int StartingConditional()

{

if(GetLocalInt(GetPCSpeaker(), "R1_") == 1 &&

GetLocalInt(GetPCSpeaker(), "R2_") == 1 &&

GetLocalInt(GetPCSpeaker(), "R3_") == 1)

return TRUE;

return FALSE;

}

Проверить переменную и предмет

#include "nw_i0_tool"

int StartingConditional()

{

if(GetLocalInt(GetPCSpeaker(), "LOCAL") == 1 &&

HasItem(GetPCSpeaker(), "TAG"))

return TRUE;

return FALSE;

}

Существо или плейс перемещается из палитры

object oWP = GetWaypointByTag("WP_");

location Loc = GetLocation(oWP);

CreateObject(OBJECT_TYPE_CREATURE, "ResRef", Loc, FALSE, "newTag"); // Существо

CreateObject(OBJECT_TYPE_PLACEABLE, "ResRef", Loc, FALSE, "newTag"); // Объект

или

object oNPC = CreateObject(OBJECT_TYPE_CREATURE,"ResRef",Loc,FALSE,"newTag");

Проверить дистанцию

object oCreature = GetNearestCreature

(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);

if (GetIsObjectValid(oCreature) == TRUE &&

GetDistanceToObject(oCreature) < 10.0)

или

object oCreature = GetObjectByTag("TAG");

object oPC = GetFirstPC();

if(GetArea(oPC== GetArea(oCreature) &&

GetDistanceBetween (oPC, oCreature) < 10.0)

Запись в журнале

(взяли предмет, событие в слоте OnAqcuireItem модуля)

#include "nw_i0_tool"

void main()

{

object oPC = GetFirstPC();

if(HasItem(oPC, "TAG"))

AddJournalQuestEntry("quest_12", 1, oPC); // журнал

}

Открыть карту

ExploreAreaForPlayer(GetArea(OBJECT_SELF), GetEnteringObject());

Открыть точку на карте

SetMapPinEnabled(GetObjectByTag("KARTA"),1);

Проверка предметов в ящеке (слот OnDisturbed)

object oItem = GetInventoryDisturbItem(); // слот OnDisturbed

if (GetTag(oItem) == "TAG") {}

Смерть существа, остается труп

void main()

{

if (Random(2) == 0)

PlayAnimation(ANIMATION_LOOPING_DEAD_FRONT);

else

PlayAnimation(ANIMATION_LOOPING_DEAD_BACK);

SetIsDestroyable(FALSE, TRUE, TRUE);

PlayVoiceChat(VOICE_CHAT_DEATH);

}

Уничтожить умершее существо

object oPC = GetObjectByTag("BODY");

AssignCommand(oPC, SetIsDestroyable(TRUE, TRUE, TRUE));

DestroyObject(oPC, 0.5);

Дать сигнал

SignalEvent(GetObjectByTag("TAG"), EventUserDefined(300));

Проверить сигнал (слот OnUserDefined)

void main()

{

int nEvent = GetUserDefinedEventNumber();

switch(nEvent)

{

case 300: {Что должно произойти} break;

}

}

Взять спутника

AddHenchman(GetPCSpeaker(), OBJECT_SELF);

Убрать спутника

object oPC = GetPCSpeaker();

object oSP = GetHenchman(oPC);

if (GetIsObjectValid(oSP))

{

RemoveHenchman(oPC, oSP);

AssignCommand(oSP, ClearAllActions());

}

Уровень звука

SoundObjectPlay(oSound); // Звук включить

SoundObjectStop(oSound); // Звук выключить

SoundObjectSetVolume(GetObjectByTag("TAG"), 0-127);

// уровень звука от 0 до 127

Проверить героя

object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;

Проверить персонаж

object oNPC = GetEnteringObject();

if (!(GetTag(oNPC) == "TAG")) return;

Удалить встречу

SetEncounterActive(FALSE, GetObjectByTag("VOLKI"));

Сработает только при заряженной встречи

Очистить стек, т.е. отменить все действия

DelayCommand(0.1, AssignCommand(OBJECT_SELF, ClearAllActions()));

Снять бессмертие

SetImmortal(OBJECT_SELF, FALSE); // Снимаем бессмертие

SetPlotFlag(OBJECT_SELF, FALSE); // Снимаем галку сюжет

Заклинание

object oPC = GetFirstPC();

object oZel = GetNearestObjectByTag("ZEL_");

//Объект на который должен быть скастован спелл.

AssignCommand(oPC,ActionCastSpellAtObject(SPELL_FIREBALL,

oZel,PROJECTILE_PATH_TYPE_BALLISTIC)); // дейсвующее

AssignCommand(oPC,ActionCastFakeSpellAtObject(SPELL_FIREBALL,

oZel,PROJECTILE_PATH_TYPE_BALLISTIC)); // визуальное

Анимация

AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 2.0));

Запретить действия персонажу

SetCommandable(FALSE, oPC); // заблокировать очередь

SetCommandable(TRUE, oPC); // разблокировать очередь

Проверить эффект

effect eEffect = GetFirstEffect(OBJECT_SELF);

if (GetEffectType(eEffect) == EFFECT_TYPE_VISUALEFFECT) {}

Сумка

if(GetBaseItemType(oItem) == BASE_ITEM_LARGEBOX)

ActionGiveItem(oItem, oPC); // Дать сумку или предмет

Надписи

string sTag = GetTag(OBJECT_SELF);

string sStrL = GetStringLeft(sTag, 3); // Три первых левых буквы

int iEnd = GetStringLength(sTag ); // количество знаков в надписи

Проверить строку

if(FindSubString("*Atrib_1*Atrib_2*Atrib_3*", GetTag(oItem)+"*") > 0) {}

Переход на другой модуль

StartNewModule("Arena1");

Перенос переменных для перехода модулей

object oPC = GetFirstPC();

int iReput = GetLocalInt(oPC,"TORGOVEZ_REPA"); // Наша переменная

SetCampaignInt("MOD_1", "REPA_2", iReput, oPC); // установить переменную

if (GetLocalInt(oPC, "R3_VOLXV") == 1) // Проверить

// установить переменную

SetCampaignInt("MOD_1", "R3_VOLXV", 1, oPC);

========== в новом модуле ============

int iCom = GetCampaignInt("MOD_1", "REPA_2", oPC);

SetLocalInt(oPC,"TORGOVEZ_REPA", iCom); // Присвоить

if(GetCampaignInt("MOD_1", "R3_VOLXV", oPC)==1) // Проверить

{

SetLocalInt(GetFirstPC(),"R3_VOLXV",1);

DeleteCampaignVariable("MOD_1", "R3_VOLXV", oPC);

}

Спутник и переход с ним в другой модуль

object oPC = GetFirstPC();

StoreCampaignObject("MOD_1", "N1", GetHenchman(oPC), oPC);

========== в новом модуле ============

object oSP = RetrieveCampaignObject("MOD_1", "N1", GetLocation(oPC), OBJECT_INVALID, oPC);

AddHenchman(oPC, oSP);

DeleteCampaignVariable("MOD_1", " N1", oPC);

Уровень сложности

int iGame = GetGameDifficulty(); // Уровень сложности равен 1,2,3,4

Обновление: Rambler's Top100