Lamonde
Oct 18 2008, 17:12
Цитата(Lirulin @ Oct 18 2008, 16:55)

Но, насколько я могу судить, ошибка все же была не в этом? В конце концов вейпойнт и дата не связаны... (понимаю, я задаю слишком много вопросов, но лучше один раз понять, чем сто раз тупо воспользоваться плодами чужого труда... вот я и пытаюсь уразуметь и не ошибаться больше)
Совершенно верно, это была просто ремарка.
Lirulin
Oct 19 2008, 07:26
Вот теперь понял=) Возможно, теперь и еще какие-то глюки смогу исправить, потому что с этими проверками и последующими действиями у меня все время что-то не так
Lamonde
Oct 19 2008, 11:14
Цитата(Lirulin @ Oct 19 2008, 08:26)

Вот теперь понял=) Возможно, теперь и еще какие-то глюки смогу исправить, потому что с этими проверками и последующими действиями у меня все время что-то не так

Старайся писать все аккуратно и не спешить. Так же, советую не скупиться на пробелы, если они помогают лучше читать код, тогда все ошибки будут, как на ладони.
Ksanatos
Oct 20 2008, 10:22
Мастер скажите, как составить один из самых простейших скриптов , чтоб при загрузки модуля можно было только создавать персонажа и было запрещено играть готовыми?
Ilerien
Oct 20 2008, 10:26
Лир, набери в гугле "coding style"

Могу изложить свой стиль, если нужно

Вроде никто на неразборчивость кода не жаловался пока.
Цитата
Мастер скажите, как составить один из самых простейших скриптов , чтоб при загрузки модуля можно было только создавать персонажа и было запрещено играть готовыми?
Рецепт на все случаи жизни сразу в голову как-то не приходит. Можно предложить частичное решение проблемы, в onClientEnter модуля (кстати, а он при загрузке сейва срабатывает? просто я шардовик, ни разу таким вопросом не интересовался

Если срабатывает, то нужно похитрее сделать).
Neverwinter Script
void main()
{
object oPC = GetEnteringObject();
if(GetXP(oPC)) //если экспы у чара не 0, выкидываем его из модуля
EndGame("");
}
Конечно, читакам никто не помешает свалить кучу шмота на чара без экспы
тока ты не отличишь готового перса 1 уровня от созданного только что. Ибо не отличаются.
Ilerien
Oct 20 2008, 17:32
Угу, я про это и говорю
virusman
Oct 20 2008, 20:32
Достаточно сделать проверку на экспу и отнимать все вещи при входе. А если игроку захочется прочитерить - он это всё равно сделает.
Neakris
Oct 22 2008, 19:08
Цитата
Мастер скажите, как составить один из самых простейших скриптов , чтоб при загрузки модуля можно было только создавать персонажа и было запрещено играть готовыми?
Не стоит забывать и про то, что модуль может быть по-разному подгружен. То есть можно запускать его врежиме одиночной игры (тогда рецепт
Ilerien'a), либо можно стартовать модуль своим сервером - тогда в настройках сервера можно просто выбрать пункт "Не использовать готовых персоонажей"... или как-то так он звучит.
И необходимое послесловие: вся защита в мире делается от честных людей.
Цитата
А если игроку захочется прочитерить - он это всё равно сделает.
. Просто подумай... и впрямь необходимо, чтобы игрока жестко ограничивали при старте игры? Просто напиши в комментарии к модулю, что желательно создание нового персоонажа. И, соответственно, тот, кому интересен этот модуль, будет играть по правилам. Тот же, кто запустил его "от балды", все равно не будет в него играть, каким бы интересным он ни был.
Вот ИМХО.
virus_found
Oct 22 2008, 23:31
Цитата
Тот же, кто запустил его "от балды", все равно не будет в него играть, каким бы интересным он ни был.
Будет
Ksanatos
Oct 23 2008, 09:24
Хотелось бы что б было как в Проклятье Левора, чтоб персонаж появлялся типо на родной земле без денег и инвентаря , а не какойто полубог со стороны приходит.
В скриптах познания не велики, ранее лепил только торговце и перемещения, пытался тут инвентарь убить, подскажите непутевому волшебнику как тут лучше можно...
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
Oct 23 2008, 12:54
Так и можно, ты правильно взял скрипт Айвана.
Да, и еще... ты в другой теме спрашивал:
Цитата
Я тут недавно , может это и не в тему , кто знает скрипт чтоб воскрешение отменить, что бы в модуле только загружаться можно было?
Все просто:
В редакторе Aurora выбираешь меню "Редактировать", подпункт "Модульные свойства", вкладку "События". Ищещь событие OnPlayerDeath, открываешь скрипт, прописанный этому событию. Смотришь в самый конец. Одна из последних строчек будет
DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH)).
Меняй ее на такую строчку
DelayCommand(2.5, PopUpDeathGUIPanel(oPlayer, FALSE, FALSE));
Потом сохраняй скрипт как свой. Т.е. не сохраняй изменения в имеющемся, а выбери пункт Сохранить Как и сохрани под своим именем. Так всегда лучше делать при редактировании имеющихся скриптов. Все, нажимай кнопку ОК в модульных свойствах. Теперь игрок может только загрузиться или выйти из игры.
Ilerien
Oct 23 2008, 16:43
Эм *посмотрел на скрипт* А это точно скрипт Айвана без изменений? о.О Такое впечатление, что там куска не хватает. Да и операторные скобки странно расставлены

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
Oct 25 2008, 09:39
Благодарю всех , все пашет отлично.
Сюжет моего моего модуля посвящен племени орков, желательно вписать в этот скрипт ограничения , чтоб можно было играть только полуорками(только ограничения по расе).
Кто-нибудь знает как лучше подправить автоматы в редакторе Aurora, большенство простейших скриптов можно сгенерить автоматически , только по каким то причинам генерят они не верно , можно ли их подправить.
gennady
Oct 25 2008, 13:41
Цитата(Ksanatos @ Oct 25 2008, 10:39)

Благодарю всех , все пашет отлично.
Странно... Если это скрипт для слота
OnClientEnter, то золото у него останется.

Нужно так:
Neverwinter Script
// забрать все золото
AssignCommand(oPC, TakeGoldFromCreature(GetGold(oPC), oPC, TRUE));
Цитата(Ksanatos @ Oct 25 2008, 10:39)

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

Просто у меня, например, 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
Oct 25 2008, 20:41
Спс,
Neakris.
Сразу задам еще один вопрос - создав триггер, в собтие onEnter я вставляю следующий код:
Код
void main()
{
AssignCommand (OBJECT_SELF, ActionDoCommand(SpeakString("Недавно здесь была битва. Трупы ещё относительно свежие, но вороны уже успели выклевать им глаза и лица...")));
}
и ничего не происходит

Тоже самое если я пишу
Код
void main()
{
object oPC = GetEnteringObject();
AssignCommand (oPC, ActionDoCommand(SpeakString("Недавно здесь была битва. Трупы ещё относительно свежие, но вороны уже успели выклевать им глаза и лица...")));
}
Мож я что делаю неправильно? И если да, то как надо?
OBJECT_SELF у тебя в первом варианте выступает как сам триггер.
ActionDoCommand там не надо.
Лучше всего кстати использовать SendMessageToPC.
DarkDante
Oct 25 2008, 21:17
Насчет OBJECT_SELF я сразу понял, а вот на счет ActionDoCommand это спс
Ilerien
Oct 25 2008, 21:36
DarkDante, для скриптов есть форумный тег nss

Если хочется, чтобы над головой появлялось, надо юзать FloatingTextStringOnCreature
gennady
Oct 26 2008, 06:25
Цитата(DarkDante @ Oct 25 2008, 22:41)

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

DarkDante, для скриптов есть форумный тег nss
Сорри, это я перепутал малость
Спс всем

Хмм, тут ещё вопрос нарисовался...
В некоторых модулях, в начале игры есть такая фишка - диалог героя самим с собой(поднять левел, тарам-парам...).Вот мне интересно - как с помощью скрипта запустить этот диалог(или вообще диалог)?
Сорри, уж не надо, сам разобрался)))))
Можно ли при помощи базовых функций организовать подсчет наносимого урона от игроков и их петов?
Если да, то как, если нет, то почему(логика подсказывает, что если эта информация отражается в battlechat'е, то ее можно использовать).
Буду премного благодарен за ответ.
Есть две функции полезные в этом плане - GetTotalDamageDealt и GetDamageDealtByType.
Обе вешаются в OnDamaged. Первая возвращает весь урон, полученный коллером, вторая по типу.
Кстати GetTotalDamageDealt помоему возвращает 0, если на плейсебле или двери их использовать.
Спасибо, конечно, но я, видимо неправильно сформулировал вопрос. Можно ли подсчитать нанесенный урон за раунд для каждого нападающего по отдельности?
Ilerien
Oct 27 2008, 00:18
По идее можно, если использовать функции GetLastDamager() & GetTotalDamageDealt().
Только ещё хитрым образом надо будет отмерять раунд
Уважаемые мастера, подскажите, реально ли заменить имя непися с помощью скрипта? Я чего только не перепробовал! "DestroyObject" - явно не то, "DestroyString" - редактор не понимает, "DeletelString" - то же самое, нет у него такой команды, только "DeleteLocalString" - но это опять не то! Также нет в редакторе такой команды, как "ChangeString"! Понимаете, это не блажь и не придурь. Сюжет требует! Я сочиняю сказку, где герой знает героиню только по кличке. А потом берет нужный артефвкт и узнает Истиное Имя героини. То есть у него на глазах "кличка" меняется на "Истиное Имя". Эффектно, но как такого эффекта добиться?
И еще вопрос, простите за назойливость. Запертая дверь пропускает только "своих". То есть тех, на ком определенная одежда (тег). Я тупо поставил тег ключа тот же, что и тег одежды. И дверь открывается, если ты эту шмотку просто имеешь в инвентаре. Но мне-то надо не это! Надо, чтобы она одета была!
С уважением,
Chiffa
Заменить имя можно удалив персонажа DestroyObject, а потом поместить нового, абсолютно такого же, но просто с другим именем(создаешь в палитре).
А со шмоткой поставь проверку тега не по инвентарю, а по слоту в нем GetItemInSlot(INVENTORY_SLOT_CHEST, object)
Ilerien
Nov 1 2008, 23:11
Чтобы имя у непися изменить, можно применить функцию SetName().
А с дверью - скрипт на неё повесить

Какой, нет времени писать, мб попозже.
Насчет двери что-то типа, ставить в 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)) еще, тьфу, туплю
Спасибо, Drago! Мне бы когда-нибудь научиться так "тупить" - сел и играючи написал скрипт для незнакомого "чайника". И скрипт, кстати, грамотный, я уже понимаю, что должно сработать! Только наверно надо еще и не "CloseDoor" (она изначально "Closе"), о все-таки "OpenDoor"? Щас проверю.
Насчет уничтожения непися и закидывания на его место нового, с палитры - фишка известная, но мне она не подходит, сорри. Я грил, что по сюжету герой узнает Истиное Имя своей возлюбленной. И замена имени происходит (Хех, ДОЛЖНА происходить!) у него на глазах. А если эта возлюбленная вдруг испарится, и на ее месте появится точно такая же, будет не "Сказка", а пародия. Попробую поэкспериментировать с "SetName()". Ilerien, будут проблемы, я тя еще побеспокою, можно?
Кстати, я тут новенький. Прочитал форум. Тема была интересная насчет "сохраненок". Ну, чтобы скрипты проверить в последних локациях без прохождения всего модуля заново. И правда, обидно, что нельзя конвертировать сейвы в моды и, главное, обратно! Но есть куча способов это обойти. У меня свой. Простой, как мычание. Я никогда не делаю модуль целиком. Делаю кучу маленьких. У меня есть "Poligon", "Poligon1" "Poligon2" и т. д. Точнее, этот "микро-модуль" делается один раз, со всеми "свойствами", "настройками пользователя", фракциями, палитрой и пр., а потом размножается, с заменой тега и имени, ессно .Делаю их на полном серьезе, как части будущей "Сказки". На этих "Полигонах испытываю все скрипты, триггеры и пр. А потом экспорт-импорт" и готово.
Уважаемые админы, если я глупость написал про эти "Полигоны", просто сотрите! Не хочу флудером прослыть.
Спасибо.
Lamonde
Nov 2 2008, 04:10
Цитата(Chiffa @ Nov 2 2008, 03:23)

...У меня есть "Poligon", "Poligon1" "Poligon2" и т. д. Точнее, этот "микро-модуль" делается один раз, со всеми "свойствами", "настройками пользователя", фракциями, палитрой и пр., а потом размножается, с заменой тега и имени, ессно .Делаю их на полном серьезе, как части будущей "Сказки". На этих "Полигонах испытываю все скрипты, триггеры и пр. А потом экспорт-импорт" и готово.
Уважаемые админы, если я глупость написал про эти "Полигоны", просто сотрите! Не хочу флудером прослыть.
Спасибо.
Делаю тоже самое,

ток кол-во модулей у меня обычно не больше 2х (основной + еще 1 с единственной локой для тестирования скриптов).
А я и не сомневался, что изобрел велосипед. Просто хотел, чтобы изобретанием таких велосипедов не занимались другие начинающие, вроде меня. Кстати, раз уж идея "Полигонов" оказалась не такой уж глупой, выскажу еще одну.
Моим "букварем" по скриптам были модулм "Проклятия Левора". Там почти у каждого скрипта сверху ПО РУССКИ написано для чего он и что делает. Кто основательно покопался в модах "Проклятья", не станет задавать вопрос типа: "Как проверить, вооружен ли игрок?". Подобные проверки во втором модуле - на диалоге каждого сюжетного непися. Как, кстати, проверки навыков, скилов, пола, "одет-раздет" - и т.д. и т.п. И еще много всякого полезного. Не думаю, что русские комментарии к скриптам писались для меня, "чайника", скорее это просто пояснения для других членов команды. Но суть дела от этого не меняется, и потому СПАСИБО мастерам! А новичкам совет: копайтесь глубже в модулях "Проклятия", там почти на все случаи жизни есть скрипты которые можно как использовать без переделки, как и "лопатить" в зависимости от собственных потребностей.
Учился я еще и на том, что исправил "легендарный" квест с "доилкой". Нашел пропавшего капитана Крола (Винсент, гад, превратил его в вампира, а дальше герой с высоким навыком убеждения возвращает бедняге жизнь с помощью богини Сан. Ну а если навык низкий - хеппи энда не будет, с Кролом-вампиром приходится драться, брать с трупа его мандат и нести расстроеннму лорду Бренгу. Так или иначе, но квест завершен.)
Еще раз отдельное спасибо мастерам и тем, кого хватило терпения это все прочитать.
Ilerien
Nov 2 2008, 22:34
Цитата
А если эта возлюбленная вдруг испарится, и на ее месте появится точно такая же, будет не "Сказка", а пародия.
Если грамотно организовать замену непися, то игрок подмены и не заметит

Цитата
Попробую поэкспериментировать с "SetName()". Ilerien, будут проблемы, я тя еще побеспокою, можно?
Попытка - не пытка...

Кстати, SetName() иногда глючит, по меньшей мере у нас переименование неписей/вещей/плейсов и т. д. работает с поправкой на то, что иногда у ДМ-а, который переименовывал обжект, отображается старое имя.
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
Nov 3 2008, 11:20
Цитата
И оба "SetName" в упор не видят! Ищещь в меню - нету! Набираешь вручную: ругаются "неправильная функция"
Не помню, в какой версии эту функцию сделали. Поставь 1.69

Цитата
Не затруднит скинуть парочку уже использованных скриптов?
Сомневаюсь, что кусок скрипта на onPlayerChat, который обжекты переименовывает, тебе поможет
virusman
Nov 3 2008, 11:23
В 1.67
Цитата
Сомневаюсь, что кусок скрипта на onPlayerChat, который обжекты переименовывает, тебе поможет
А почему нет? Я где-то читал, смутно помню. что неписи - это тоже обжекты.. Вроде в скриптах...
Ilerien, ты чо, всерьез принял меня за халявщика и любителя загребать жар чужими руками? Хм, правильный подход. Глупо даже рожу кривить, представляю, сколько ты повидал подобных фруктов... Только это - не мой случай. Подумай, станет халявщик ПОЛНОСТЬЮ переделывать ПЛ, чтобы хоть чему-то научиться? И только после двух лет "перелопачивания" ПЛ засесть за собственный модуль. Понимаешь, я журналист. И, смею думать, не самый худший. Сюжет завернуть покруче, заинтриговать или слезу из игрока вышибить - это мое. А вот подогнать под задумки хороший скриптовый "фундамент" - тут, ессно, я слаб. Потому мне и так важно понять
принцип. КАК
ОНО РАБОТАЕТ! А уж дальше - разберусь как-нибудь.
Впрочем, дорогой метр, ты в своем праве, так что никаких вопросов (без иронии). Только (это уже ко всем) какая-таки версия: 1.67 или 1.69? Хотя и это не суть важно, скачаю и опробую обе. Где скачать лучше? И главное, как сделать, чтобы они работали, если не совместимы с моей версией Невера, оголтело пиратской? Патчи какие и где брать?
Цитата
какая-таки версия: 1.67 или 1.69?
1.67 точно, потому что в 1.68 есть эта функция.
Подскажите пожалуйста, что не так: фрагмент скрипта 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"))); //проверка
Попробуй создать переменную 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();
}
2Drago
Боюсь, такой вариант не подходит. Мне надо перебрать все возможные объекты и выбрать из них всех "самый вредный", то есть причинивший наибольшее количество урона. То, что ты написал завершит цикл, не просмотрев всех до конца.
Всем спасибо, все свободны, заработало: поставил ClearAllActions() перед атакой.
Ilerien
Nov 3 2008, 23:52
Цитата
Ilerien, ты чо, всерьез принял меня за халявщика и любителя загребать жар чужими руками? Хм, правильный подход. Глупо даже рожу кривить, представляю, сколько ты повидал подобных фруктов..
Да что ты, я тут и бываю, чтоб помогать. Готовыми исходниками или советами - уже дело десятое

Просто там скрипт имеет только одно общее с тем, что тебе нужно - юз этой функции. Лови

Кусок кода из скрипта fr_o0_playerchat, если поможет - я буду только рад

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 и не парься
greye, отсутствие ClearAllActions при смене цели, поэтому и не атакует - выполняет предыдущий приказ.
зы: а вообще система выбора цели малек странная. Ибо НПС будет тупить если его 2ое примерно одинаково будут долбать. Будет между ними метаться и в итоге ничего не сделает.
Neverwinter Script
if(!GetIsObjectValid(oArea) && GetObjectType(oTarget) == OBJECT_TYPE_ITEM)
oArea = GetArea(GetItemPossessor(oTarget));
жесть.. ты какое событие юзаешь, что у тебя у тагета такой разброс может быть (или нормальный объект/крича, или предмет

) ?
Цитата(Chiffa @ Nov 3 2008, 16:27)

И только после двух лет "перелопачивания" ПЛ
омг

что ж там 2 года то лопатить???
Цитата
Ставь 1.69 и не парься
Парюсь теперь я только об одном: ОТКУДА эту версию скачать? Поисковик по этому (лучшему, на мой вкус) сайту ничего не дает. Яндекс назойливо вываливает что угодно, вполть до порносайтов (!), только не то, что надо.
И тут же возникла еще проблема. На другом форуме этого же сайта я прочитал, что Toolset отдельно не обновляется. Надо патчить весь "Невер". И это не какй-то там юзер пишет, а сам Aiwan лично! Так что ж мне делать?
Да, Ilerien,благодарю за скрипт! Ты абсолютно прав: это не то, что мне нужно, но... Ты дал главное: ключ. Удочку, а не готовую рыбку. Именно то, что и требуется. Надеюсь, не только мне, но большинству начинающих. Тех, кто хочет ДУМАТЬ, а не пользоваться готовеньким.
Спасибо.
Цитата
что ж там 2 года то лопатить???
О, много чего! Причем речь идет не о "легендарном" квесте с "доилкой" и не о квесте поисков капитана Крола, которые я доделал. Это так, мелочи... Речь совсем о другом. Но это - отдельная песня. Даже целая поэма! Только напишу я ее (неприменно!) на форум ПЛ, чтобы здесь преды не получать. Тут могу только напомнить: модули ПЛ, на мой вкус - лучший "букварь" для начинающих. Там у каждого (ну, почти каждого) скрипта есть пояснения. На русском языке и слева направо. Для чего скрипт и что он делает. И кто просматривал модули ПЛ, тот не станет доставать мастеров вопросами типа: как узнать, вооружен ли игрок, есть у него деньги и сколько, какой у него навык, пол, раса, одет он или раздет и далее в том же духе. А подобных вопросов (причем не только на форуме начинающих!), как я заметил, выше крыши.
А вопрос, "что лопать?" кстати, хороший! Может, кто еще знает и другие модули, где также работала команда и писали пояснения к скриптам? Лучший учебник - это где много примеров. Конкретных, с пояснениями. Гораздо приятней и полезней учиться на практике, чем читать даже самые понятные и умные статьи. Но это уже мое личное мнение...
Спасибо.
Типа постскриптума. Нашел-таки патч (спасибо Гуглу!) поднимающий весь "Невер" до версии 1.69. Не запускается, подлец! Говорит: "вставьте оригинальный диск с игрой!". Семь утра, пойду посплю, а то и правда комунь чоньть вставлю...
Еще вопросик: как отследить использование зелий? Я так понимаю, что их использование расценивается игрой как CastSpell, тогда, по идее, мне должны помочь команды GetSpellCastItem,GetLastSpellCaster;только мне это надо для персонажа, а на него я не могу повесить событие onSpellCastAt(не умею, во всяком случае). Причем желательно это делать на весь модуль, а не на кого-то конкретного. Если делать на использование по тагу, то там только если на сам предмет накладывают заклинание, при потере предмета мне тоже не подходит, так как его можно выложить и взять обратно. P.S. Lex, спасибо за помощь и замечание, но это не для нпс, а для существ. Они у меня как раз туповаты, но достаточно сильны для того, чтобы любой захотел, чтобы монстр атаковал кого угодно, лишь бы не игрока.
virusman
Nov 4 2008, 11:17
Цитата(Chiffa @ Nov 4 2008, 07:07)

Типа постскриптума. Нашел-таки патч (спасибо Гуглу!) поднимающий весь "Невер" до версии 1.69. Не запускается, подлец! Говорит: "вставьте оригинальный диск с игрой!". Семь утра, пойду посплю, а то и правда комунь чоньть вставлю...
Вот патч. На
официальном сайте NWN его найти проще простого:
http://files.bioware.com/neverwinternights...9HotUUpdate.exeИ никаких дисков он не требует.
спеллы в принципе можно отслеживать через SpellHook
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.