Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103
Lamonde
Цитата(Lirulin @ Oct 18 2008, 16:55) *
Но, насколько я могу судить, ошибка все же была не в этом? В конце концов вейпойнт и дата не связаны... (понимаю, я задаю слишком много вопросов, но лучше один раз понять, чем сто раз тупо воспользоваться плодами чужого труда... вот я и пытаюсь уразуметь и не ошибаться больше)
Совершенно верно, это была просто ремарка.
Lirulin
Вот теперь понял=) Возможно, теперь и еще какие-то глюки смогу исправить, потому что с этими проверками и последующими действиями у меня все время что-то не так unsure.gif wacko.gif
Lamonde
Цитата(Lirulin @ Oct 19 2008, 08:26) *
Вот теперь понял=) Возможно, теперь и еще какие-то глюки смогу исправить, потому что с этими проверками и последующими действиями у меня все время что-то не так unsure.gif wacko.gif
Старайся писать все аккуратно и не спешить. Так же, советую не скупиться на пробелы, если они помогают лучше читать код, тогда все ошибки будут, как на ладони.
Ksanatos
Мастер скажите, как составить один из самых простейших скриптов , чтоб при загрузки модуля можно было только создавать персонажа и было запрещено играть готовыми?
Ilerien
Лир, набери в гугле "coding style" smile.gif
Могу изложить свой стиль, если нужно wacko.gif Вроде никто на неразборчивость кода не жаловался пока.
Цитата
Мастер скажите, как составить один из самых простейших скриптов , чтоб при загрузки модуля можно было только создавать персонажа и было запрещено играть готовыми?
Рецепт на все случаи жизни сразу в голову как-то не приходит. Можно предложить частичное решение проблемы, в onClientEnter модуля (кстати, а он при загрузке сейва срабатывает? просто я шардовик, ни разу таким вопросом не интересовался smile.gif Если срабатывает, то нужно похитрее сделать).
Neverwinter Script
void main()
{
    object oPC = GetEnteringObject();
    if(GetXP(oPC)) //если экспы у чара не 0, выкидываем его из модуля
        EndGame("");
}
Конечно, читакам никто не помешает свалить кучу шмота на чара без экспы smile.gif
Lex
тока ты не отличишь готового перса 1 уровня от созданного только что. Ибо не отличаются.
Ilerien
Угу, я про это и говорю wacko.gif
virusman
Достаточно сделать проверку на экспу и отнимать все вещи при входе. А если игроку захочется прочитерить - он это всё равно сделает.
Neakris
Цитата
Мастер скажите, как составить один из самых простейших скриптов , чтоб при загрузки модуля можно было только создавать персонажа и было запрещено играть готовыми?

Не стоит забывать и про то, что модуль может быть по-разному подгружен. То есть можно запускать его врежиме одиночной игры (тогда рецепт Ilerien'a), либо можно стартовать модуль своим сервером - тогда в настройках сервера можно просто выбрать пункт "Не использовать готовых персоонажей"... или как-то так он звучит.
И необходимое послесловие: вся защита в мире делается от честных людей.
Цитата
А если игроку захочется прочитерить - он это всё равно сделает.
. Просто подумай... и впрямь необходимо, чтобы игрока жестко ограничивали при старте игры? Просто напиши в комментарии к модулю, что желательно создание нового персоонажа. И, соответственно, тот, кому интересен этот модуль, будет играть по правилам. Тот же, кто запустил его "от балды", все равно не будет в него играть, каким бы интересным он ни был.
Вот ИМХО.
virus_found
Цитата
Тот же, кто запустил его "от балды", все равно не будет в него играть, каким бы интересным он ни был.

Будет wink3.gif
Ksanatos
Хотелось бы что б было как в Проклятье Левора, чтоб персонаж появлялся типо на родной земле без денег и инвентаря , а не какойто полубог со стороны приходит.
В скриптах познания не велики, ранее лепил только торговце и перемещения, пытался тут инвентарь убить, подскажите непутевому волшебнику как тут лучше можно...
Neverwinter Script
//:://////////////////////////////////////////////
//:: 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);
AssignCommand(oPC,
TakeGoldFromCreature(GetGold(oPC),oPC,TRUE));
object oItem = GetFirstItemInInventory(oPC);
while(GetIsObjectValid(oItem))
{
int i=0;
while(i<14)
{
DestroyObject(GetItemInSlot(i, oPC));
i++;
{
}


P.S. Слышал существует генератор модулей , хоть закрученный сюжет он не делает , но зато за пару сек расставит монстров и сгенерит примитивные квесты и торговцев. Где такой скачать можно?
Neakris
Так и можно, ты правильно взял скрипт Айвана.
Да, и еще... ты в другой теме спрашивал:
Цитата
Я тут недавно , может это и не в тему , кто знает скрипт чтоб воскрешение отменить, что бы в модуле только загружаться можно было?

Все просто:
В редакторе Aurora выбираешь меню "Редактировать", подпункт "Модульные свойства", вкладку "События". Ищещь событие OnPlayerDeath, открываешь скрипт, прописанный этому событию. Смотришь в самый конец. Одна из последних строчек будет
DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH)).
Меняй ее на такую строчку
DelayCommand(2.5, PopUpDeathGUIPanel(oPlayer, FALSE, FALSE));
Потом сохраняй скрипт как свой. Т.е. не сохраняй изменения в имеющемся, а выбери пункт Сохранить Как и сохрани под своим именем. Так всегда лучше делать при редактировании имеющихся скриптов. Все, нажимай кнопку ОК в модульных свойствах. Теперь игрок может только загрузиться или выйти из игры.
Ilerien
Эм *посмотрел на скрипт* А это точно скрипт Айвана без изменений? о.О Такое впечатление, что там куска не хватает. Да и операторные скобки странно расставлены snoozer_17.gif
Neverwinter Script
void main()
{
    object oPC = GetEnteringObject(), oItem;
    int nSlot;

    TakeGoldFromCreature(GetGold(oPC), oPC); //забираем золото

    SetXP(oPC, 0); //забираем опыт

    for(nSlot = 0; nSlot <= 17; nSlot++)
        DestroyObject(GetItemInSlot(nSlot, oPC));  //убиваем надетые вещи

    oItem = GetFirstItemInInventory(oPC);
    while(GetIsObjectValid(oItem))
    {
        DestroyObject(oItem);   //убиваем инвентарь
        oItem = GetNextItemInInventory(oPC);
    }
}

Если игрок злобный и напихал в инвентарь кучу всего, будут тормоза из-за DestroyObject без задержки.
Ksanatos
Благодарю всех , все пашет отлично.
Сюжет моего моего модуля посвящен племени орков, желательно вписать в этот скрипт ограничения , чтоб можно было играть только полуорками(только ограничения по расе).
Кто-нибудь знает как лучше подправить автоматы в редакторе Aurora, большенство простейших скриптов можно сгенерить автоматически , только по каким то причинам генерят они не верно , можно ли их подправить.
gennady
Цитата(Ksanatos @ Oct 25 2008, 10:39) *
Благодарю всех , все пашет отлично.

Странно... Если это скрипт для слота OnClientEnter, то золото у него останется. wacko.gif Нужно так:
Neverwinter Script
// забрать все золото
      AssignCommand(oPC, TakeGoldFromCreature(GetGold(oPC), oPC, TRUE));

Цитата(Ksanatos @ Oct 25 2008, 10:39) *
Кто-нибудь знает как лучше подправить автоматы в редакторе Aurora, большенство простейших скриптов можно сгенерить автоматически , только по каким то причинам генерят они не верно , можно ли их подправить
Мастер скриптов пишет все верно! Но не копилятся они могут по причине малой "я". Нужет патч Думбо или замена "я" на "Я" в комментариях к скрипту... (можно воспользовать авто заменой редактора скриптов)
DarkDante
Мастера,Помогите чайнику, плз! Как присвоить переменной типа object самого персонажа, в сааамом начале модуля(onClientEnter)? Надо чтобы над ним появлялась всплывающая сторока типа 'Кто я? ничего не помню трам папам...'. Heelp! help.gif
Neakris
2 Ksanatos:
Цитата
Мастер скриптов пишет все верно! Но не копилятся они могут по причине малой "я". Нужет патч Думбо или замена "я" на "Я" в комментариях к скрипту... (можно воспользовать авто заменой редактора скриптов)

А можно не париться и просто потереть все комментарии в базовом скрипте wink3.gif Просто у меня, например, Aurora базовая, но ведь все пашет!)
По поводу ограничения по расе... К сожалению, я не знаю, как красиво завершить игру... Могу только предложить сырой способ:
Neverwinter Script
if (GetRacialType(oPC) != RACIAL_TYPE_HALFORC) //ЕСЛИ раса игрока НЕ полуорк,
        {
        //ТО с задержкой в 3 секунды вывести игроку сообщение о смерти.
        DelayCommand(3.0, PopUpDeathGUIPanel(oPC, FALSE, FALSE, 0, "Your message"));
        }

Воть... в кавычках вместо "Your message" введи то, что будет появляться на окне смерти персоонажа. Что-то вроде "Вы должны быть полуорк!". Только на русский он будет ругаться. Воть... почему окно смерти? Нуу... потому что я знаю еще только два способе выкинуть игрока:
1. BootPC(oPC); //Это выкидывает игрока С СЕРВЕРА. При условии, что игрок играет на сервере.
2. EndGame(""); //Это просто завершает игру Казалось бы, то, что надо! Но в кавычках надо обязательно указать имя финального ролика. Не укажешь его или укажешь несуществующий - покажут просто базовый ролик. Вот... так что я решил, что через панельку смерти более красиво. К тому же у игрока тогда будет возможность прочитать в заголовке, почему же он "умер".
Все, времени нет, убегаю...

2 DarkDante:
Нет, не убегаю... Еще отвечу на твой пост...
Чтобы игрок при старте модуля сказал нужную тебе фразу, воспользуйся следующим куском кода (из верно тобой указанного события OnClientEnter):
Neverwinter Script
//Объект oPC = вошедший объект;
    object oPC = GetEnteringObject();
    //С задержкой в 3.0 секунды, Заставить oPC выполнить действие, ДействиеСказатьСтрочку "Message"
    DelayCommand(3.0, AssignCommand(oPC, ActionSpeakString("Message", TALKVOLUME_TALK)));

Все, потом "Message" меняешь на нужное тебе сообщение. Кавычки сохраняются!
DarkDante
Спс, Neakris.
Сразу задам еще один вопрос - создав триггер, в собтие onEnter я вставляю следующий код:
Код
void main()
{
  AssignCommand (OBJECT_SELF, ActionDoCommand(SpeakString("Недавно здесь была битва. Трупы ещё относительно свежие, но вороны уже успели выклевать им глаза и лица...")));
}

и ничего не происходит sorry.gif

Тоже самое если я пишу
Код
void main()
{
  object oPC = GetEnteringObject();
   AssignCommand (oPC, ActionDoCommand(SpeakString("Недавно здесь была битва. Трупы ещё относительно свежие, но вороны уже успели выклевать им глаза и лица...")));
}


Мож я что делаю неправильно? И если да, то как надо?
drago
OBJECT_SELF у тебя в первом варианте выступает как сам триггер.
ActionDoCommand там не надо.
Лучше всего кстати использовать SendMessageToPC.
DarkDante
Насчет OBJECT_SELF я сразу понял, а вот на счет ActionDoCommand это спс yes3.gif
Ilerien
DarkDante, для скриптов есть форумный тег nss smile.gif
Если хочется, чтобы над головой появлялось, надо юзать FloatingTextStringOnCreature smile.gif
gennady
Цитата(DarkDante @ Oct 25 2008, 22:41) *
Сразу задам еще один вопрос - создав триггер, в собтие onEnter я вставляю следующий код: (...) Мож я что делаю неправильно? И если да, то как надо?

Код сам по себе верный. Но вот подход нет. Триггеры не выводят текст над собой, как и произносят звуки... Это раз. А во-вторых, и самое главное, каждый скрипт нужно компилировать, а не просто сохранять! В этом основная ошибка, т.к. второй скрипт записан как раз для триггера, и почти верно... В этом скрипте не нужен оператор ActionDoCommand, т.к. переводит код в акцию и ГГ может её сбить. Кстати вывод строки может сразу быть записан, как акция: ActionSpeakString
DarkDante
Цитата(Ilerien @ Oct 26 2008, 01:36) *
DarkDante, для скриптов есть форумный тег nss

Сорри, это я перепутал малость rolleyes.gif
Спс всемyes3.gif

Хмм, тут ещё вопрос нарисовался...
В некоторых модулях, в начале игры есть такая фишка - диалог героя самим с собой(поднять левел, тарам-парам...).Вот мне интересно - как с помощью скрипта запустить этот диалог(или вообще диалог)?

Сорри, уж не надо, сам разобрался)))))
greye
Можно ли при помощи базовых функций организовать подсчет наносимого урона от игроков и их петов?
Если да, то как, если нет, то почему(логика подсказывает, что если эта информация отражается в battlechat'е, то ее можно использовать).
Буду премного благодарен за ответ.
drago
Есть две функции полезные в этом плане - GetTotalDamageDealt и GetDamageDealtByType.
Обе вешаются в OnDamaged. Первая возвращает весь урон, полученный коллером, вторая по типу.
Кстати GetTotalDamageDealt помоему возвращает 0, если на плейсебле или двери их использовать.
greye
Спасибо, конечно, но я, видимо неправильно сформулировал вопрос. Можно ли подсчитать нанесенный урон за раунд для каждого нападающего по отдельности?
Ilerien
По идее можно, если использовать функции GetLastDamager() & GetTotalDamageDealt().
Только ещё хитрым образом надо будет отмерять раунд smile.gif
Chiffa
Уважаемые мастера, подскажите, реально ли заменить имя непися с помощью скрипта? Я чего только не перепробовал! "DestroyObject" - явно не то, "DestroyString" - редактор не понимает, "DeletelString" - то же самое, нет у него такой команды, только "DeleteLocalString" - но это опять не то! Также нет в редакторе такой команды, как "ChangeString"! Понимаете, это не блажь и не придурь. Сюжет требует! Я сочиняю сказку, где герой знает героиню только по кличке. А потом берет нужный артефвкт и узнает Истиное Имя героини. То есть у него на глазах "кличка" меняется на "Истиное Имя". Эффектно, но как такого эффекта добиться?
И еще вопрос, простите за назойливость. Запертая дверь пропускает только "своих". То есть тех, на ком определенная одежда (тег). Я тупо поставил тег ключа тот же, что и тег одежды. И дверь открывается, если ты эту шмотку просто имеешь в инвентаре. Но мне-то надо не это! Надо, чтобы она одета была!
С уважением,
Chiffa
greye
Заменить имя можно удалив персонажа DestroyObject, а потом поместить нового, абсолютно такого же, но просто с другим именем(создаешь в палитре).

А со шмоткой поставь проверку тега не по инвентарю, а по слоту в нем GetItemInSlot(INVENTORY_SLOT_CHEST, object)
Ilerien
Чтобы имя у непися изменить, можно применить функцию SetName().
А с дверью - скрипт на неё повесить smile.gif Какой, нет времени писать, мб попозже.
drago
Насчет двери что-то типа, ставить в OnFailedToOpen:
Neverwinter Script
void main()
{
    object oPC = GetClickingObject();
    if(GetItemInSlot(INVENTORY_SLOT, oPC) == "tag_of_item")
        {
            ActionOpenDoor(OBJECT_SELF);
            DelayCommand(2.5f,ActionCloseDoor(OBJECT_SELF));
        }
}


Эм... там INVENTORY_SLOT_CHEST, недоглядел, и править не могу...

и GetTag(GetItemInSlot(INVENTORY_SLOT, oPC)) еще, тьфу, туплю smile.gif
Chiffa
Спасибо, Drago! Мне бы когда-нибудь научиться так "тупить" - сел и играючи написал скрипт для незнакомого "чайника". И скрипт, кстати, грамотный, я уже понимаю, что должно сработать! Только наверно надо еще и не "CloseDoor" (она изначально "Closе"), о все-таки "OpenDoor"? Щас проверю.
Насчет уничтожения непися и закидывания на его место нового, с палитры - фишка известная, но мне она не подходит, сорри. Я грил, что по сюжету герой узнает Истиное Имя своей возлюбленной. И замена имени происходит (Хех, ДОЛЖНА происходить!) у него на глазах. А если эта возлюбленная вдруг испарится, и на ее месте появится точно такая же, будет не "Сказка", а пародия. Попробую поэкспериментировать с "SetName()". Ilerien, будут проблемы, я тя еще побеспокою, можно?
Кстати, я тут новенький. Прочитал форум. Тема была интересная насчет "сохраненок". Ну, чтобы скрипты проверить в последних локациях без прохождения всего модуля заново. И правда, обидно, что нельзя конвертировать сейвы в моды и, главное, обратно! Но есть куча способов это обойти. У меня свой. Простой, как мычание. Я никогда не делаю модуль целиком. Делаю кучу маленьких. У меня есть "Poligon", "Poligon1" "Poligon2" и т. д. Точнее, этот "микро-модуль" делается один раз, со всеми "свойствами", "настройками пользователя", фракциями, палитрой и пр., а потом размножается, с заменой тега и имени, ессно .Делаю их на полном серьезе, как части будущей "Сказки". На этих "Полигонах испытываю все скрипты, триггеры и пр. А потом экспорт-импорт" и готово.
Уважаемые админы, если я глупость написал про эти "Полигоны", просто сотрите! Не хочу флудером прослыть.
Спасибо.
Lamonde
Цитата(Chiffa @ Nov 2 2008, 03:23) *
...У меня есть "Poligon", "Poligon1" "Poligon2" и т. д. Точнее, этот "микро-модуль" делается один раз, со всеми "свойствами", "настройками пользователя", фракциями, палитрой и пр., а потом размножается, с заменой тега и имени, ессно .Делаю их на полном серьезе, как части будущей "Сказки". На этих "Полигонах испытываю все скрипты, триггеры и пр. А потом экспорт-импорт" и готово.
Уважаемые админы, если я глупость написал про эти "Полигоны", просто сотрите! Не хочу флудером прослыть.
Спасибо.
Делаю тоже самое, smile.gif ток кол-во модулей у меня обычно не больше 2х (основной + еще 1 с единственной локой для тестирования скриптов).
Chiffa
А я и не сомневался, что изобрел велосипед. Просто хотел, чтобы изобретанием таких велосипедов не занимались другие начинающие, вроде меня. Кстати, раз уж идея "Полигонов" оказалась не такой уж глупой, выскажу еще одну.
Моим "букварем" по скриптам были модулм "Проклятия Левора". Там почти у каждого скрипта сверху ПО РУССКИ написано для чего он и что делает. Кто основательно покопался в модах "Проклятья", не станет задавать вопрос типа: "Как проверить, вооружен ли игрок?". Подобные проверки во втором модуле - на диалоге каждого сюжетного непися. Как, кстати, проверки навыков, скилов, пола, "одет-раздет" - и т.д. и т.п. И еще много всякого полезного. Не думаю, что русские комментарии к скриптам писались для меня, "чайника", скорее это просто пояснения для других членов команды. Но суть дела от этого не меняется, и потому СПАСИБО мастерам! А новичкам совет: копайтесь глубже в модулях "Проклятия", там почти на все случаи жизни есть скрипты которые можно как использовать без переделки, как и "лопатить" в зависимости от собственных потребностей.
Учился я еще и на том, что исправил "легендарный" квест с "доилкой". Нашел пропавшего капитана Крола (Винсент, гад, превратил его в вампира, а дальше герой с высоким навыком убеждения возвращает бедняге жизнь с помощью богини Сан. Ну а если навык низкий - хеппи энда не будет, с Кролом-вампиром приходится драться, брать с трупа его мандат и нести расстроеннму лорду Бренгу. Так или иначе, но квест завершен.)
Еще раз отдельное спасибо мастерам и тем, кого хватило терпения это все прочитать.
Ilerien
Цитата
А если эта возлюбленная вдруг испарится, и на ее месте появится точно такая же, будет не "Сказка", а пародия.

Если грамотно организовать замену непися, то игрок подмены и не заметит smile.gif
Цитата
Попробую поэкспериментировать с "SetName()". Ilerien, будут проблемы, я тя еще побеспокою, можно?
Попытка - не пытка... wink3.gif
Кстати, SetName() иногда глючит, по меньшей мере у нас переименование неписей/вещей/плейсов и т. д. работает с поправкой на то, что иногда у ДМ-а, который переименовывал обжект, отображается старое имя.
Chiffa
Ilerien, твоя цитата из Блока просто в жилу! Почти сутки бьюсь с этим .... переименованием, будь оно не ладно! По ходу, у меня глючит не просто SetName, а весь редактор! Причем оба (у мя их два, на движке "Шадоу" и "Нордеса"). И оба "SetName" в упор не видят! Ищещь в меню - нету! Набираешь вручную: ругаются "неправильная функция"! Уже почти готов сдаться и согласиться на "грамотную замену персонажа". Ну, там затемнение применить или еще какой эффект. Благо, повод хороший: игрок сцапал главный артефакт "Сказки", ну как тут без спецэффектов...http://www.city-of-masters.ru/forums/style_emoticons/kolobok_light/scratch_one-s_head.gif
Вот только... Очень уж не хочется "гнуться под этот изменчивый мир", хотя бы и виртуальный. Ilerien, если я правильно понял, тебе уже доводилось переименовывать предметы и персов. Не затруднит скинуть парочку уже использованных скриптов? Я их постараюсь перелопатить под свою "Сказку". Как перелопатил скрипт Drago.
Кстати, хочу поблагодарить тебя, Drago, еще раз: скрит оказался просто на все случаи жизни! Я его не только на эту пресловутую дверь повесил успешно, но еще и в диалоги неписей вставил и даже в триггер. Теперь, если герой вздумает с кем-то поговорить или просто прогуляться по территории без униформы, то Великая Волшебная СИЛА (jamp называется) тупо швыряет его взад за эти проклятые ворота! А они снова заперты! Именно то, что требовалось, а я сразу и не оценил...http://www.city-of-masters.ru/forums/style_emoticons/kolobok_light/crazy.gif
Спасибо!
Ilerien
Цитата
И оба "SetName" в упор не видят! Ищещь в меню - нету! Набираешь вручную: ругаются "неправильная функция"
Не помню, в какой версии эту функцию сделали. Поставь 1.69 smile.gif
Цитата
Не затруднит скинуть парочку уже использованных скриптов?
Сомневаюсь, что кусок скрипта на onPlayerChat, который обжекты переименовывает, тебе поможет smile.gif
virusman
В 1.67
Chiffa
Цитата
Сомневаюсь, что кусок скрипта на onPlayerChat, который обжекты переименовывает, тебе поможет

А почему нет? Я где-то читал, смутно помню. что неписи - это тоже обжекты.. Вроде в скриптах...
Ilerien, ты чо, всерьез принял меня за халявщика и любителя загребать жар чужими руками? Хм, правильный подход. Глупо даже рожу кривить, представляю, сколько ты повидал подобных фруктов... Только это - не мой случай. Подумай, станет халявщик ПОЛНОСТЬЮ переделывать ПЛ, чтобы хоть чему-то научиться? И только после двух лет "перелопачивания" ПЛ засесть за собственный модуль. Понимаешь, я журналист. И, смею думать, не самый худший. Сюжет завернуть покруче, заинтриговать или слезу из игрока вышибить - это мое. А вот подогнать под задумки хороший скриптовый "фундамент" - тут, ессно, я слаб. Потому мне и так важно понять принцип. КАК ОНО РАБОТАЕТ! А уж дальше - разберусь как-нибудь.
Впрочем, дорогой метр, ты в своем праве, так что никаких вопросов (без иронии). Только (это уже ко всем) какая-таки версия: 1.67 или 1.69? Хотя и это не суть важно, скачаю и опробую обе. Где скачать лучше? И главное, как сделать, чтобы они работали, если не совместимы с моей версией Невера, оголтело пиратской? Патчи какие и где брать?
drago
Цитата
какая-таки версия: 1.67 или 1.69?

1.67 точно, потому что в 1.68 есть эта функция.
greye
Подскажите пожалуйста, что не так: фрагмент скрипта onCombatRoundEnd. Объект должен сменить цель для атаки на новую. все получаемые локальные переменные и объекты правильно работают(все проверки выдают правильные значения). В самом конце при проверке тоже выдает правильный объект для атаки, но не переключается на нее.
Neverwinter Script
object oLastAttackAt = GetLocalObject(OBJECT_SELF, "oAttackAt"); //это самый первый атакующий в скрипте onAttacked
    object oDamager = GetFirstObjectInArea();

    while (oDamager != OBJECT_INVALID)
    {
        if ((GetIsPC(oDamager) || GetObjectType(oDamager) == OBJECT_TYPE_CREATURE) && oDamager!=OBJECT_SELF//перебираю всех живых
        {
          if (GetLocalInt(oDamager,"DamageDealt")>GetLocalInt(oLastAttackAt, "DamageDealt"))// Причиненный урон
          {
            oLastAttackAt = oDamager;
          }
        SpeakString(GetName(oDamager)+" : "+IntToString(GetLocalInt(oDamager, "DamageDealt"))); //проверка
        }
        oDamager = GetNextObjectInArea();
    }

    SetLocalObject(OBJECT_SELF, "oAttackAt", oLastAttackAt);
    ActionAttack(oLastAttackAt);
    SpeakString("Attack at "+GetName(oLastAttackAt)+" : "+IntToString(GetLocalInt(oLastAttackAt, "DamageDealt"))); //проверка
drago
Попробуй создать переменную int bFound = FALSE и дописать код в таком роде:
Neverwinter Script
while (oDamager != OBJECT_INVALID&& bFound == FALSE)
    {
        if ((GetIsPC(oDamager) || GetObjectType(oDamager) == OBJECT_TYPE_CREATURE) && oDamager!=OBJECT_SELF//перебираю всех живых
        {
          if (GetLocalInt(oDamager,"DamageDealt")>GetLocalInt(oLastAttackAt, "DamageDealt"))// Причиненный урон
          {
            oLastAttackAt = oDamager;
            bFound = TRUE; //нашли атакера, дальше не ищем
          }
        SpeakString(GetName(oDamager)+" : "+IntToString(GetLocalInt(oDamager, "DamageDealt"))); //проверка
        }
        oDamager = GetNextObjectInArea();
    }
greye
2Drago
Боюсь, такой вариант не подходит. Мне надо перебрать все возможные объекты и выбрать из них всех "самый вредный", то есть причинивший наибольшее количество урона. То, что ты написал завершит цикл, не просмотрев всех до конца.

Всем спасибо, все свободны, заработало: поставил ClearAllActions() перед атакой.
Ilerien
Цитата
Ilerien, ты чо, всерьез принял меня за халявщика и любителя загребать жар чужими руками? Хм, правильный подход. Глупо даже рожу кривить, представляю, сколько ты повидал подобных фруктов..
Да что ты, я тут и бываю, чтоб помогать. Готовыми исходниками или советами - уже дело десятое smile.gif Просто там скрипт имеет только одно общее с тем, что тебе нужно - юз этой функции. Лови smile.gif Кусок кода из скрипта fr_o0_playerchat, если поможет - я буду только рад smile.gif
Neverwinter Script
//DM Rename Tool: new name
        if(sCommand == "/newname" && bIsDM)
        {
            oTarget = GetLocalObject(oPC, "FR_RENAMEWAND_TARGET");
            oArea = GetArea(oTarget);
            if(!GetIsObjectValid(oArea) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM)
                oArea = GetArea(GetItemPossessor(oTarget));        
            bHideCommand = TRUE;
            if(GetIsObjectValid(oTarget) && oArea == GetArea(oPC))
            {
                if(!GetIsPC(oTarget))
                    SetName(oTarget, sString);
                DeleteLocalObject(oPC, "FR_RENAMEWAND_TARGET");
            }
        }
Цитата
Только (это уже ко всем) какая-таки версия: 1.67 или 1.69?
Ставь 1.69 и не парься smile.gif
Lex
greye, отсутствие ClearAllActions при смене цели, поэтому и не атакует - выполняет предыдущий приказ.
зы: а вообще система выбора цели малек странная. Ибо НПС будет тупить если его 2ое примерно одинаково будут долбать. Будет между ними метаться и в итоге ничего не сделает.

Neverwinter Script
if(!GetIsObjectValid(oArea) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM)
                oArea = GetArea(GetItemPossessor(oTarget));

жесть.. ты какое событие юзаешь, что у тебя у тагета такой разброс может быть (или нормальный объект/крича, или предмет smile.gif ) ?

Цитата(Chiffa @ Nov 3 2008, 16:27) *
И только после двух лет "перелопачивания" ПЛ

омг shok.gif что ж там 2 года то лопатить???
Chiffa
Цитата
Ставь 1.69 и не парься

Парюсь теперь я только об одном: ОТКУДА эту версию скачать? Поисковик по этому (лучшему, на мой вкус) сайту ничего не дает. Яндекс назойливо вываливает что угодно, вполть до порносайтов (!), только не то, что надо.
И тут же возникла еще проблема. На другом форуме этого же сайта я прочитал, что Toolset отдельно не обновляется. Надо патчить весь "Невер". И это не какй-то там юзер пишет, а сам Aiwan лично! Так что ж мне делать?
Да, Ilerien,благодарю за скрипт! Ты абсолютно прав: это не то, что мне нужно, но... Ты дал главное: ключ. Удочку, а не готовую рыбку. Именно то, что и требуется. Надеюсь, не только мне, но большинству начинающих. Тех, кто хочет ДУМАТЬ, а не пользоваться готовеньким.
Спасибо.

Цитата
что ж там 2 года то лопатить???

О, много чего! Причем речь идет не о "легендарном" квесте с "доилкой" и не о квесте поисков капитана Крола, которые я доделал. Это так, мелочи... Речь совсем о другом. Но это - отдельная песня. Даже целая поэма! Только напишу я ее (неприменно!) на форум ПЛ, чтобы здесь преды не получать. Тут могу только напомнить: модули ПЛ, на мой вкус - лучший "букварь" для начинающих. Там у каждого (ну, почти каждого) скрипта есть пояснения. На русском языке и слева направо. Для чего скрипт и что он делает. И кто просматривал модули ПЛ, тот не станет доставать мастеров вопросами типа: как узнать, вооружен ли игрок, есть у него деньги и сколько, какой у него навык, пол, раса, одет он или раздет и далее в том же духе. А подобных вопросов (причем не только на форуме начинающих!), как я заметил, выше крыши.
А вопрос, "что лопать?" кстати, хороший! Может, кто еще знает и другие модули, где также работала команда и писали пояснения к скриптам? Лучший учебник - это где много примеров. Конкретных, с пояснениями. Гораздо приятней и полезней учиться на практике, чем читать даже самые понятные и умные статьи. Но это уже мое личное мнение...
Спасибо.

Типа постскриптума. Нашел-таки патч (спасибо Гуглу!) поднимающий весь "Невер" до версии 1.69. Не запускается, подлец! Говорит: "вставьте оригинальный диск с игрой!". Семь утра, пойду посплю, а то и правда комунь чоньть вставлю...
greye
Еще вопросик: как отследить использование зелий? Я так понимаю, что их использование расценивается игрой как CastSpell, тогда, по идее, мне должны помочь команды GetSpellCastItem,GetLastSpellCaster;только мне это надо для персонажа, а на него я не могу повесить событие onSpellCastAt(не умею, во всяком случае). Причем желательно это делать на весь модуль, а не на кого-то конкретного. Если делать на использование по тагу, то там только если на сам предмет накладывают заклинание, при потере предмета мне тоже не подходит, так как его можно выложить и взять обратно. P.S. Lex, спасибо за помощь и замечание, но это не для нпс, а для существ. Они у меня как раз туповаты, но достаточно сильны для того, чтобы любой захотел, чтобы монстр атаковал кого угодно, лишь бы не игрока.
virusman
Цитата(Chiffa @ Nov 4 2008, 07:07) *
Типа постскриптума. Нашел-таки патч (спасибо Гуглу!) поднимающий весь "Невер" до версии 1.69. Не запускается, подлец! Говорит: "вставьте оригинальный диск с игрой!". Семь утра, пойду посплю, а то и правда комунь чоньть вставлю...
Вот патч. На официальном сайте NWN его найти проще простого:
http://files.bioware.com/neverwinternights...9HotUUpdate.exe
И никаких дисков он не требует.
Lex
спеллы в принципе можно отслеживать через SpellHook
greye
Понял, спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.