Скрипты для новичков, Самые простые скрипты с описанием |
Здравствуйте, гость ( Вход | Регистрация )
Скрипты для новичков, Самые простые скрипты с описанием |
Aug 23 2005, 17:53
Сообщение
#1
|
|
Миловидный Бегрюссунг Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
Здесь будут вывешаны самые простые скрипты на которых можно построить новичку свой модуль. Любой пост кроме скрипта с описанием будет считаться спамом и автор получит предупреждение. Всем Мастерам скриптов советую максимально разжевывать куда, как и зачем вставлять код. При этом максимально просто писать код. Этим мы поможем новичкам не только справиться с проблемой, но и понемногу научим понимать код. Сложные скрипты писать в другую тему.
============================ LEX: Беру тему под контроль. Если тут в скриптах или комментариях ошибки, пишу в то же посте, где допущена неточность. Авторам постов обратить внимание на эти ремарки и вносить коррективы по необходимости. ============================ Начем. Самое главное, это начало модуля. Тут все написано, как раздеть игрока, одеть, дать ему денег и отправить дальше. Ставится он на слот модуля OnClientEnter. NSS //:://////////////////////////////////////////////
//:: OnEnter am_mod_enter //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* Скрипт на вход в модуль при старте. */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 22.08.2005 //::///////////////////////////////////////////// void main() { object oMod = GetModule(); // Наш модуль object oPC = GetEnteringObject(); // Того кто вошел // Если это не игрок (а ДМ к примеру) или уже было раз, то сделаем возврат // скрипта, т.е. дальше он не пойдет. if (!GetIsPC(oPC) || GetLocalInt(oMod, "START_GAME")) {return;} { SetLocalInt(oMod, "START_GAME", TRUE); // Что бы сработал только один раз //--------- Откроем туман над локацией если вам надо. К примеру в городе ------- ExploreAreaForPlayer(GetObjectByTag("ТАГ_НУЖНОЙ_ЛОКАЦИИ"), oPC); //--------------- Проводим деноминацию денежных накоплений --------------------- AssignCommand(oPC, TakeGoldFromCreature(GetGold(oPC),oPC,TRUE)); // Заберем все денежки //------------------ Убиваем весь инвентарь ------------------------------------ object oItem = GetFirstItemInInventory(oPC); // Первый итем в инвентаре while(GetIsObjectValid(oItem)) // Пока такой объект существует { DestroyObject(oItem); // Удаляем его oItem = GetNextItemInInventory(oPC); // Берем другой объект... } //------------------ Убиваем всю амуницию ------------------------------------- int i=0; while(i<14) // ПОКА i меньше 14. 14 - это количество всех слот у объекта { DestroyObject(GetItemInSlot(i, oPC)); // i++; // Это значит i увеличится на еденичку от своего значения // Было ноль к примеру, станет 1 и т.д. } //------------------------ Создаем предметы ------------------------------------ // Если вам нужны отдельно каждому классу по несколько предметов, то // скопируйте кусок кода еще и измените CLASS_TYPE_ Наведите курсор, // нажми F2 и выберите нужное значение константы // int Class = GetClassByPosition(1, oPC); // switch (Class) // В зависимости от класса // { // case CLASS_TYPE_BARBARIAN: // { // CreateItemOnObject("ResRef_Объекта", oPC,1); // } // case CLASS_TYPE_FIGHTER: // { // CreateItemOnObject("ResRef_Объекта", oPC,1); // } // } GiveGoldToCreature(oPC, 5000); // Даем золотишко CreateItemOnObject("ResRef_Объекта1", oPC, 1); CreateItemOnObject("ResRef_Объекта2", oPC, 1); CreateItemOnObject("ResRef_Объекта3", oPC, 30); // 1 - это количество в стеке, если вам надо 30 стрел, то ставьте там 30 //---------------------- Опознаем предметы ----------------------------------- object oItemCr = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItemCr)) { SetIdentified(oItemCr,TRUE); oItemCr = GetNextItemInInventory(oPC); } //-------------------- Уровень игрока для игры в модуле ------------------------ // К примеру нам нужен игрок 5 уровня. Смотрим таблицу уровней и видим, // что Level 5 = 10000 xp. { SetXP(oPC, 10000); } //---------------------- Оденем нашего игрока --------------------------------- AssignCommand(oPC, ActionEquipMostEffectiveArmor()); //---------------------------------- END --------------------------------------- } } |
Mar 31 2006, 07:09
Сообщение
#2
|
|
Миловидный Бегрюссунг Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
НПС после нападения становится нейтральным и начинает диалог с РС. В свойствах НПС поставь Immortal галочку. Что бы не убить его с одного удара.
NSS //------------------------------------------------------------------------------ // Добавляем на хертбит Нпс. //------------------------------------------------------------------------------ object oSelf = OBJECT_SELF; object oPC = GetFirstPC(); // Это самое простое. Можно узнать по демагу или ближайший крич int iCurHP = GetCurrentHitPoints(oSelf); // Количество поинтов максимум о Нпс int iMaxHP = GetMaxHitPoints(oSelf); // Сколько в данный момент if(!GetLocalInt(oSelf, "STOP")) { if (iCurHP < iMaxHP/4) // Четверть нр от общего или меньше { // Если это враг то меняем ему фракцию на комманера. Если нет, то убери эту строку ChangeToStandardFaction(oSelf, STANDARD_FACTION_COMMONER); SetLocalInt(oSelf, "STOP", TRUE); AssignCommand(oPC, ClearAllActions(TRUE)); AssignCommand(oSelf, ClearAllActions(TRUE)); ClearPersonalReputation(oPC, oSelf); AssignCommand(oSelf, PlayAnimation(ANIMATION_LOOPING_TALK_PLEADING, 1.0, 5.0)); DelayCommand(0.3, SetCommandable(FALSE, oPC)); DelayCommand(1.5, AssignCommand(oSelf, SpeakString("Дядя, простите, я больше так не буду!"))); /* Тут описываешь важнецкие клятвы в верности, слезные истории про трудное дество... */ DelayCommand(5.0, AssignCommand(oSelf, ActionMoveToObject(oPC))); DelayCommand(5.4, AssignCommand(oSelf, ActionDoCommand(SetCommandable(TRUE, oPC)))); DelayCommand(5.6, AssignCommand(oSelf, ActionStartConversation(oPC))); } } //------------------------------------------------------------------------------ Появление строки в диалоге Нпс. Строка диалога равна имени ближайшего поинта с тагом WP_STRING. Строка дожна быть в диалоге всегда ОДНА и содержать токен <CUSTOM220>. А содержание = имя вейпоинта. NSS //:://////////////////////////////////////////////
//:: Выдает стринг, если НПС рядом с поинтом //:: Copyright © 2006 WRG! //::////////////////////////////////////////////// /* Таг нашего поинта. WP_STRING <CUSTOM220> - [Имя поинта - строка НПС] */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 17.01.2006 //::////////////////////////////////////////////// int StartingConditional() { object oWp = GetNearestObjectByTag("WP_STRING"); // Берем ближайший объект с тагом "WP_STRING" float fDist = 20.0f; // Расстояние реакции, дальше 20 метров строки не будет float fZone = GetDistanceBetween(OBJECT_SELF, oWp); // Дистанция срабатывания //------------------------------------------------------- if(GetIsObjectValid(oWp)) // Если такой объект существует { if (fDist < fZone) // Если дистанция между Нпс и Поинтом больше установленной 20 м. return FALSE; // Строка не появится else // в противном случае (ЕЩЕ) { string sMessage = GetName(oWp); // Стринг sMessage равен имени поинту SetCustomToken(220, sMessage); // Установим токен 220 равный этому стрингу return TRUE; // Вернем строку функции StartingConditional(). Она покажет ее игроку } } else return FALSE; // Если такого объекта oWp нет, то нечего не появится } |
Текстовая версия | Сейчас: 29th April 2024 - 20:25 |