Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

8 страниц V  « < 3 4 5 6 7 > »   
Ответить в эту темуОткрыть новую тему
> Модуль "История дома Салливан", Обсуждение модуля Heather
Рейтинг 5 V
Heather
сообщение Feb 23 2015, 19:51
Сообщение #86


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Цитата(NumberOne @ Feb 23 2015, 19:37) *
Заметил особенность, не знаю, может я что-то упустил, но: в начальной деревне, в доме, от которого ключ у собаки, когда я пью с человеком на первом этаже, то он начинает отговаривать меня от пятой рюмки, но я соглашаюсь, выпиваю и диалог заканчивается. Когда начинаю разговаривать с ним еще раз, все идет по новой. Что-то должно происходить после пятой?

P.S Еще в прошлом году хотел сказать, диалоги пишешь хорошо, у меня так не получается)

За диалоги спасибо. Но это единственное, что выходит нормально)

В новой версии диалог тоже обрывается? Там идет проверка на силу и конституцию. Если меньше, то провал, если больше успех. Видимо, у тебя какой-то параметр равен 14 и нужная реплика не выскакивает, т.к. стоит "<=" или ">="
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 23 2015, 20:01
Сообщение #87


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(Heather @ Feb 23 2015, 20:51) *
В новой версии диалог тоже обрывается?


Да, я скачивал вместе с интерлюдией второй части. Телосложение у моего персонажа 12, сила 16.

И еще, когда я разрешил конфликт между крестьянами насчет проклятого урожая (т.е начали подозревать Доретту), открылась кузница, я зашел, но в диалоге с кузнецом есть только вопрос о том, сможет ли он мне выковать оружие, т.е персонаж не спрашивает, где, мол Доретта. После того, как загрузил сохранение, где это задание еще не трогал, все стало нормально, вопрос появился. Какая причина могла послужить этому - не знаю.

Сообщение отредактировал NumberOne - Feb 23 2015, 20:06
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 23 2015, 20:09
Сообщение #88


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Цитата(NumberOne @ Feb 23 2015, 20:01) *
Да, я скачивал вместе с интерлюдией второй части. Телосложение у моего персонажа 12.

У себя потестила - вроде все работает. Надо еще перепроверить. Но если что, это необязательно для сюжета.
Цитата(NumberOne @ Feb 23 2015, 20:01) *
в диалоге с кузнецом есть только вопрос о том, сможет ли он мне выковать оружие, т.е персонаж не спрашивает, где, мол Доретта. После того, как загрузил сохранение, где это задание еще не трогал, все стало нормально, вопрос появился. Какая причина могла послужить этому - не знаю.

И я не знаю. О_о Это странно. Но я чувствовала, что мои мучения с 1-ой главой не закончены. Чую, до самого Судного дня будут находиться глюки.
Посмотрю сейчас, что там за проверки у меня.

Реплика про девочку должна быть по умолчанию. Она появляется, если переменная равна нулю. Что-то глючит, но не с моей стороны. (IMG:style_emoticons/kolobok_light/pardon.gif)
Версия точно последняя? Локация с деревней изменилась? (Я Кэшлдорт с нуля перерисовала)

Сообщение отредактировал Heather - Feb 23 2015, 20:14
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 23 2015, 20:24
Сообщение #89


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(Heather @ Feb 23 2015, 21:09) *
У себя потестила - вроде все работает.


Загрузка сохранения не помогла.

Как я понял, когда умираешь и нажимаешь возродиться персонажа переносит в локацию, где нпс начинает диалог. Только диалог не начинается, т.е еще идет режим боя и пишет "слишком взволнованы, чтобы говорить". Так происходит потому, что слишком быстро нажимаю кнопку возрождения, т.е бой еще не успевает спадать. Можно сделать так, чтобы при заходе на локацию режим боя сбрасывался и диалог начинался спокойно. Но это столь незначительно, что потратишь время зря, просто мысль для улучшения пришла и решил озвучить.

И еще два совета, так же незначительных: 1) Не помешали бы автосохранения (я дырявая голова, лень палец на G поставить). 2) В журнале заданий было бы неплохо между обновлением записей вставить пустую строку (т.е нажать ENTER). Обратил внимание, что некоторые абзацы слипнуты - читать сложновато.


Цитата(Heather @ Feb 23 2015, 21:09) *
Версия точно последняя? Локация с деревней изменилась? (Я Кэшлдорт с нуля перерисовала)


Да, там еще кладбище отдельное.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 23 2015, 20:33
Сообщение #90


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Цитата(NumberOne @ Feb 23 2015, 20:24) *
Загрузка сохранения не помогла.

Если не лениво начать заново, я перезалила архив на 1-ой странице. Конечно, удобнее скинуть только сам модуль, если надо, могу на почту отправить.

Цитата(NumberOne @ Feb 23 2015, 20:24) *
Как я понял, когда умираешь и нажимаешь возродиться персонажа переносит в локацию, где нпс начинает диалог. Только диалог не начинается, т.е еще идет режим боя и пишет "слишком взволнованы, чтобы говорить". Так происходит потому, что слишком быстро нажимаю кнопку возрождения, т.е бой еще не успевает спадать. Можно сделать так, чтобы при заходе на локацию режим боя сбрасывался и диалог начинался спокойно. Но это столь незначительно, что потратишь время зря, просто мысль для улучшения пришла и решил озвучить.

И еще два совета, так же незначительных: 1) Не помешали бы автосохранения (я дырявая голова, лень палец на G поставить). 2) В журнале заданий было бы неплохо между обновлением записей вставить пустую строку (т.е нажать ENTER). Обратил внимание, что некоторые абзацы слипнуты - читать сложновато.

1) Да, фуга корявенькая и не переделанная. Тогда я не знала, что можно что-то там сбрасывать. =)
2)Автосейвы есть, они пойдут после пролога, т.е. после деревни
3) Да, согласна. Кое-где не помешает разграничить абзацы. Просто в редакторе журнала это не всегда заметно.

Замечания очень дельные, спасибо. Я помечу их для себя. Только не знаю, когда исправлять - хочется уже вторую главу выложить, а там еще конь не валялся.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 23 2015, 21:01
Сообщение #91


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(Heather @ Feb 23 2015, 21:33) *
Если не лениво начать заново, я перезалила архив на 1-ой странице. Конечно, удобнее скинуть только сам модуль, если надо, могу на почту отправить.


Не стоит, это не столь важно.

На опушку Одиля в пещере, когда в диалоге атакаю шамана гоблинов, остальные гоблины стоят, будто бы и не было ничего. Было бы неплохо прописать им скрипт атаки. А может это уже косяк игры, не знаю точно.

Сообщение отредактировал NumberOne - Feb 23 2015, 21:01
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 23 2015, 21:36
Сообщение #92


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



История дома Салливан - залил на сайт. (IMG:style_emoticons/kolobok_light/good.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 24 2015, 18:33
Сообщение #93


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Начал переигрывать (захотелось другой класс) и обнаружил, что вопрос у кузнеца насчет Доретты отсутствует видимо после того, как купил братику игрушку и отдал ее.

Когда пил с Джори персонаж все же упал после пятой и начал храпеть, не знаю почему в самом первом разе скрипт не сработал.

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

"Пикси переполняет счастье от долгожданной свободы. Она спешит УЛЕТЬ в лес"

Опечатка.

Пропал триггер перехода из чащобы Одиля в поселение эльфов, когда выполнял кв спасения женщины. Просто нету триггера и все тут... (IMG:style_emoticons/kolobok_light/unknw.gif)

Сообщение отредактировал NumberOne - Feb 24 2015, 17:27
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 24 2015, 21:53
Сообщение #94


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Ах, блин. Вот с игрушкой косяк. Так глупо, на самом деле. Всего один неправильный скрипт на одной реплике и все! Считай, сюжет запорот. Вот как я так умудряюсь?!
Насчет пещеры - они наверное неподвижными сделаны, эти скелеты и призрак.

А вот с триггером это серьезная проблема. =(
Блин! Я так надеялась, что все наконец в порядке!
Кажется, Айван рано выложил модуль на сайт WRG. (IMG:style_emoticons/kolobok_light/cray.gif)

Ко всему этому как нельзя лучше подходит твоя подпись, NumberOne. ВСЕ ПРАХ...

Сообщение отредактировал Heather - Feb 24 2015, 22:11
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 07:11
Сообщение #95


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Ну, считай, что с каждым постом о баге, твой модуль становится все лучше и лучше. Я прохожу медленно, но зато стараюсь охватить все, поэтому скорее все я пока не упустил ничего.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melisse
сообщение Feb 25 2015, 10:00
Сообщение #96


Level 11
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Фея
NWN: Скриптинг [PW]
Край Лесов



скрипты надо было в хак пихать, (IMG:style_emoticons/kolobok_light/angel.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 10:31
Сообщение #97


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Ахахахах... Мелисса все о своем) Ну тут она права. Хотя я сам в хаки скрипты не пихаю... Но я все тестю по 20 раз после каждого скрипта, так что я уверен, что такой необходимости нема.

P.S Сегодня вечером продолжу играть, настроение нет как-то с температурой 38...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 11:47
Сообщение #98


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



NumberOne, Спасибо тебя огромнейшее! И за прохождение, и за замечания! Ссылку на модуль, наверное, удалю пока. Чтобы косячные версии не скачивали.
И я 20 раз проверяю. но у меня плохо с абстрактным мышлением. Я-то знаю, куда идти и не всегда могу продумать, как может поступить игрок.
Скорейшего выздоровления и дальнейшей безбаговой игры!

Melisse, я хотела все в хак кинуть, чесслово. Но испугалась, да и поленилась. =)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 16:34
Сообщение #99


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Дневник Гиллеспи: "покинуть родную землю и близкий людейй". Опечатка. И еще, это нормально, что эльф называет своих сородичей из Креции людьми?

Счастье для шали в знания а мне некому - нет запятой перед а.

Когда представляю себя Саллену: "Мое имя - господин" после господин нет пробела

Я так рад, что согласились,господин! - Тоже пробела нет.

В общем тебе нужно проверить многие диалоги, где используется жетон господин (если используется) потому много где просто нет пробелов.

Убил жуков в амбаре, но у Саллена не появляется диалог на завершение кв. Он только говорит: "Прошу вас, господин [Полное имя], поторопитесь!

Сообщение отредактировал NumberOne - Feb 25 2015, 16:18
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 16:51
Сообщение #100


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Цитата
В общем тебе нужно проверить многие диалоги, где используется жетон господин (если используется) потому много где просто нет пробелов.

Хах, я поняла в чем дело. В моем переводе "господин" - это "лорд". И там переводчиками добавлен лишний пробел. Поэтому у меня всегда "лорд ?" получался. Но я и забыла, что перевод может быть не один и тот же. И если это так, то игроков ждет множество "мигосподинов" вместо "милордов". XD

Цитата
Убил жуков в амбаре, но у Саллена не появляется диалог на завершение кв

Странно, на жуках стоит скрипт on death с переменной +1. Может какой-нибудь жук заныкался?

Сообщение отредактировал Heather - Feb 25 2015, 16:56
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 17:17
Сообщение #101


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Запись в журнале нечиста на руку "Но расспросить няню поподробнее" Что-то не вяжется.

Цитата(Heather @ Feb 25 2015, 17:51) *
И если это так, то игроков ждет множество "мигосподинов" вместо "милордов"


А почему бы самой не написать милорд прямо в диалоге? Вроде как персонаж и так по умолчанию человеческой расы мужского пола.

Цитата(Heather @ Feb 25 2015, 17:51) *
Странно, на жуках стоит скрипт on death с переменной +1. Может какой-нибудь жук заныкался?


Вроде бы всех убил, я бы сосчитал их, но у меня нет сохранения. Кстати говоря, т.к я играю за плута, 3 из них я убил электрической ловушкой... Возможно, в скрипте стоит проверка на то, убил ли именно сам персонаж и из-за этого возможно троих убитой ловушкой мне не засчитали...

if (!GetIsPC(oPC)) return;

вот, это проверека на то, что убийца является игроком, думаю ее можно удалить и локалку присваивать объекту object oPC = GetFirstPC(), все-равно в любом случае по идеи в убийстве косвенно или прямо участвует только игрок.

В своем модуле я использую этот скрипт:

Код
void main()
{
int nDead = GetLocalInt(GetModule(),"LOCAL") + 1; //Имеющаяся локалка на модуле +1
SetLocalInt(GetModule(),"LOCAL", nDead); //Вешается локалка на модуль
  
if (nDead >= 6) //Когда, наконец умирает последний монстр (в данном случае шестой)
    {
     Действия
    }
}


Чтобы избежать читерства в твоем случае, нужно еще запретить жукам выходить из локации. А то шибко умные могу выйти, привести за собой жуков и стравит их между нпс. И просто подождать, когда нпс сделают свою работу.

Сообщение отредактировал NumberOne - Feb 25 2015, 17:19
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 17:21
Сообщение #102


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Да, человеческой расы, но пол может быть и женским. Поэтому для удобства и экономии времени я пользовалась стандартными жетонами. Но, похоже, придется переделывать каждый диалог и писать в них свой токен для лорда/леди.


if (!GetIsPC(oPC)) return - у меня именно так и стоит. и пц объявлен как last killer. Т.е. если жука убьет, скажем, пет или ловушка, то нам не засчитают? Уй, мамочки! Косяк на косяке едет и косяком погоняет. (IMG:style_emoticons/kolobok_light/biggrin.gif)

Цитата
запретить жукам выходить из локации.

а как это сделать?

Сообщение отредактировал Heather - Feb 25 2015, 17:22
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 17:46
Сообщение #103


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(Heather @ Feb 25 2015, 18:21) *
пет или ловушка


Насчет пета не знаю, но ловушка это точно)))

Цитата(Heather @ Feb 25 2015, 18:21) *
а как это сделать?


Не знаю, но я частенько замечал, что некоторые монстры покидают, а некоторые нет. Можно схитрить и сделать немного по другому: т.к там дверь, а не триггер, то можно пожалуй вообще исключить возможность стандартного перехода из области, т.е для жуков его точно не должно быть. В свойствах двери оставить пустой строку тега назначения, а в типе выстовить голочку дверь. Получится, что перехода как такового нет. А чтобы персонаж все же мог перейти, поставить в слоте OnAreaTransitionClick хороший скрипт создателя рыцарской саги.

Код
//:://////////////////////////////////////////////
//:: Created By: Gennady  УНИВЕРСАЛЬНЫЙ СКРИПТ ПЕРЕМЕЩЕНИЙ
//:: Created On: 5.10.2006  Авто сохранение
//:://////////////////////////////////////////////
#include "ludi"
void main()
{
object oSelf = OBJECT_SELF;
object oPoint = GetWaypointByTag("WP_" + GetTag(oSelf));
object oPC = GetFirstPC();
if ((GetArea(oPC) == GetArea(oSelf)&&GetDistanceBetween(oPC, oSelf) < 3.0) ||
      GetIsPC(GetEnteringObject()))
  {
   if(GetLocalInt(oSelf, "OPEN_SD") == 1)
    JumpFirstPC(oPoint);
   else
   {
    SetLocalInt(oSelf,"OPEN_SD",1);
    DoSinglePlayerAutoSave();
    DelayCommand(60.0,SetLocalInt(oSelf,"OPEN_SD",0));
   }
  }
else
AssignCommand(GetEnteringObject(), ClearAllActions());
}
// помещать в слот OnUsed OnEnter OnClick OnAreaTransitionClick
// Точка перемещения содержит WP_+Тег объекта


Но к нему нужна инклюда, т.е чтобы в твоем модуле/хаке был следующий скрипт

Код
///////////////////////////////////////////////
//  ***  БИБЛИОТЕКА  ***        #include "ludi"
///////////////////////////////////////////////
// ____________ Генерируем случайную точку _____________________________________
location CreateRandomLocation(object oTarget, float fRadius, int bOnLine = TRUE)
{
if(!bOnLine)
fRadius=IntToFloat(Random(FloatToInt(fRadius)));
float iXO=VectorMagnitude(GetPosition(oTarget))*cos(VectorToAngle(GetPosition(oTarget)));
float iYO=VectorMagnitude(GetPosition(oTarget))*sin(VectorToAngle(GetPosition(oTarget)));
float fRndomAngle=IntToFloat(Random(360));
location lNEW=Location(GetArea(oTarget),Vector(iXO+fRadius*cos(fRndomAngle),iYO+fRadius*sin(fRndomAngle)),360.0);
return lNEW;
}
// ЗАМЕНА МАЛОЙ БУКВЫ Я
// --------- Использование      МОЯ СТОЯТЬ КАК СТЕНА
//  1) string sTokenValue = "Мо"+ya()+" сто"+ya()+"ть как стена";
//  2) string sTokenValue = ya("Мойа стойать как стена");
string ya(string sTokenValue = "йа");
// Перемещаем создание к точкам днем и ночью
// object oWPD - Точка день
// object oWPN - Точка ночь
// object oPS - Существо перемещаемое
void pLudey(object oWPD, object oWPN, object oPS);
// Любой персонаж в радиусе 12 метров, который видит ГЕРОЯ,
// и имеет класс простолюдин, но не имеет класса животное
object NPCAlerts(object oPC);
// ТЕКСТ НАД ПЕРСОНАЖЕМ
// object oPC - ПЕРСОНАЖ
// string sTokenValue - ТЕКСТ НАД ПЕРСОНАЖЕМ
void text(object oPC, string sTokenValue);
// Перемещение людей
// object oPC - Существо
// object oWP - Точка Перемещение
void Jump(object oPC, object oWP);
// ПЕРЕМЕЩЕНИЕ ГЕРОЯ и всей его свиты к точке object oWP
void JumpFirstPC(object oWP);
// ДАТЬ ПРЕДМЕТ ИЗ ПАЛИТРЫ
// string sItemTemplate - ResRef предмета
// object oTarget - Объект или существо кому дать
// int nStackSize - Количество предметов, если они слаживаемые
void CreateItemPC(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1);
// ВЫЗВАТЬ ИЗ ПАЛИТРЫ
// nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE,
//   OBJECT_TYPE_STORE, OBJECT_TYPE_WAYPOINT
// string sTemplate - ResRef ВЫЗЫВАЕМОГО
// location lLocation - ЛОКАЦИЯ ВЫЗОВА
// bUseAppearAnimation
// ПРИСВОИТЬ НОВЫЙ ТЭГ
void CreateObjectN(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="");
// ДОПОЛНИТЕЛЬНЫЙ УРОН ДЛЯ ЗАКЛИНАНИЯ
// object oSelf - Объект = OBJECT_SELF
// int Damage - делитель максимальных ХР
void SpellDamage(object oSelf, int Damage);
//ПЕРЕДВИЖЕНИЕ ПЛЕЙСА
// object oSelf - Объект управлЯющий передвижением
// string sGtTag - тэг передвигаемого объекта
// float fDist=0.1 - дистанциЯ одного шага
// float fSpeed=0.3 - скорость кадра
// int iShag=20 количество создаваемых объектов (кадров)
// float fOrient=180.0 - направление движениЯ
void multik(object oSelf, string sGtTag, float fDist=0.1, float fSpeed=0.3, int iShag=20, float fOrient=180.0);
// ЛОКАЦИЯ ОТНОСИТЕЛЬНО ОБЪЕКТА
// object oTarget - сам объект
// float fRadius - радиус локации от объекта
// float fAngle - градусы угла (0.0 - 360.0):
// 0.0 - 3 часа; 90.0 - 12 часов; 180.0 - 9 часов; 270.0 - 6 часов.
// float fAngle - oTarget равен GetFacing(oTarget)
// float fZ=0.0 - добавить высоту (по умолчанию равна высоте oTarget)
// float fOpient=0.0 - величина осевого угла локации
location CreateLocation(object oTarget, float fRadius, float fAngle, float fZ=0.0, float fOpient=0.0);
// ПЕРЕМЕННАЯ ТОРГОВОЙ РЕПУТАЦИИ
// int iRepa - величина смены репутации (от - 3 до 10 пунктов)
void ReputationTorg(int iRepa);
// Текущий день
int Day();
//КОПИЯ ОБЪЕКТА
// object oSource  - объкт который копируем
// location locLocation - локациЯ где поЯвитсЯ копиЯ
// object oOwner = OBJECT_INVALID - если копируем предмет,
// то его можно положить другому существу или плейсу
// string sNewTag = "" - присвоим копии новый тэг
void CopyObjectN(object oSource, location locLocation, object oOwner = OBJECT_INVALID, string sNewTag = "");


// ____________________ КОПИЯ ОБЪЕКТА __________________________________________
void CopyObjectN(object oSource, location locLocation, object oOwner = OBJECT_INVALID, string sNewTag = "")
{CopyObject(oSource, locLocation, oOwner, sNewTag);}
//______________ Перемещение день-ночь _________________________________________
void pLudey(object oWPD, object oWPN, object oPS)
{
  if (oPS==OBJECT_INVALID||oWPD==OBJECT_INVALID||oWP
N==OBJECT_INVALID) return;
  int T = GetTimeHour();
   if(T>=7 && T<21)   // день
   {
    if (GetLocalInt(OBJECT_SELF, "PEREMESH") != 1)
      {
       AssignCommand(oPS, ClearAllActions());
       DelayCommand(0.1, CopyObjectN(oPS, GetLocation(oWPD)));
       DestroyObject(oPS, 0.3);
       DelayCommand(2.0, SetLocalInt(OBJECT_SELF,"PEREMESH",1));
      }
    }
   else if (GetLocalInt(OBJECT_SELF, "PEREMESH") != 2)  // ночь
      {
       AssignCommand(oPS, ClearAllActions());
       DelayCommand(0.1, CopyObjectN(oPS, GetLocation(oWPN)));
       DestroyObject(oPS, 0.3);
       DelayCommand(2.0, SetLocalInt(OBJECT_SELF,"PEREMESH",2));
      }
}   // ДЛЯ СПЯЩИХ СКРИПТ de_sleep HB
//__________________________________________________
____________________________
object NPCAlerts(object oPC)
{
object oNPC = GetFirstObjectInShape(SHAPE_SPHERE, 12.0, GetLocation(OBJECT_SELF), TRUE);
object oPC = GetFirstPC();

while (GetIsObjectValid(oNPC))
  {
   if (GetObjectSeen(oPC, oNPC) && GetLevelByClass(CLASS_TYPE_COMMONER, oNPC) >= 1
       && !GetIsDead(oNPC) && GetLevelByClass(CLASS_TYPE_ANIMAL, oNPC) == FALSE)
      return oNPC;
   oNPC = GetNextObjectInShape(SHAPE_SPHERE, 12.0, GetLocation(OBJECT_SELF), TRUE);
  }
  return oNPC;
}
//__________________________________________________
____________________________
void OpenContainer(object oPC)
{
object oSelf = OBJECT_SELF;
object oItem = GetFirstItemInInventory(oSelf);
if (oItem == OBJECT_INVALID) return; // Если уже нет предметов
object oPC = GetFirstPC();
object oNPC = NPCAlerts(oPC);  // ЕСТЬ ЛИ В РАД 12 МЕТРОВ КТО? ВИДИТ ЛИ ОН PC?
vector vFace = GetPosition(oSelf);
location lNPC = GetLocation(oNPC);
int nMas = 20 + GetSkillRank(SKILL_HIDE, oPC);
int nPass = (GetSkillRank(SKILL_HIDE, oPC) + d20()) - (GetSkillRank(SKILL_SPOT, oNPC) + d20());
string sHide = "Бросок (Уход в тень): <cуу >20+"+IntToString(GetSkillRank(SKILL_HIDE, oPC))+"</c>";
if (GetLocalInt(OBJECT_SELF, "NPC_PROV") == 1) return;
if (GetIsObjectValid(oNPC))
  {
   if (GetStealthMode(oPC) == STEALTH_MODE_ACTIVATED)
    {
     if (nPass >= 0)
      {
       GiveXPToCreature(oPC, nMas);
       AssignCommand(oPC, SpeakString("Никто не видит... Можно брать..."));
       FloatingTextStringOnCreature("<c у >ВАС НЕ ЗАМЕТИЛИ!</c>", oPC);
       SendMessageToPC(oPC, "<c °у>"+sHide+"</c>");
       SetLocalInt(OBJECT_SELF, "NPC_PROV",1);
       return;
      }
      else
         FloatingTextStringOnCreature("Ваша маскировка замечена.", oPC);
     }
  }
else
{
  SetLocalInt(OBJECT_SELF, "NPC_PROV",1);
  AssignCommand(oPC, SpeakString("Никто не видит... Можно брать..."));
  return;
}
  AssignCommand(oNPC, ClearAllActions());
  AssignCommand(oPC, ClearAllActions());
  PlayVoiceChat(VOICE_CHAT_HELP, oNPC);
  AssignCommand(oNPC, SetFacingPoint(vFace));
  AssignCommand(oPC, SetFacingPoint(GetPosition(oNPC)));
  AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD));
  AssignCommand(oPC, SpeakString("Похоже, за мной кто-то наблюдает..."));
  AssignCommand(oNPC, ActionSpeakString("Эй, не трогай это!"));
  AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL, 1.0, 3.0));
  AssignCommand(oNPC, ActionForceMoveToObject(oPC, TRUE, 1.0, 5.0));
  AssignCommand(oNPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_NO, oNPC)));
  AssignCommand(oNPC, ActionSpeakString("Это не твое. Уходи!"));
  AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_FIREFORGET_TAUNT));
  AssignCommand(oNPC, ActionDoCommand(AssignCommand(oSelf, ActionStartConversation(oPC,"konteiner"))));
  AssignCommand(oNPC, ActionDoCommand(AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_CLOSE))));
  AssignCommand(oNPC, ActionForceMoveToLocation(lNPC, FALSE, 5.0));
  if(Random(100) >= 50)
  {
   AssignCommand(oNPC, ActionSpeakString("Эх, можешь брать это барахло. Только ничего не ломай!"));
   SetLocalInt(OBJECT_SELF, "NPC_PROV",1);
  }
  else
  {
   AssignCommand(oNPC, ActionSpeakString("Не тобой положено, не тебе и брать!"));
   SetLocalInt(oPC, "VOR_COMMONER", GetLocalInt(oPC, "VOR_COMMONER") + 1);
   if(GetLocalInt(oPC, "VOR_COMMONER")>=10)
   DelayCommand(16.1, ExecuteScript("stop_commoner", oPC));
  }
  DelayCommand(0.2, SetCommandable(FALSE, oPC)); // заблокировать очередь
  DelayCommand(0.3, SetCommandable(FALSE, oNPC));
  DelayCommand(15.0, SetCommandable(TRUE, oNPC));
  DelayCommand(15.2, AssignCommand(oNPC, ClearAllActions()));
  DelayCommand(15.3, AssignCommand(oNPC, SetFacingPoint(vFace)));
  DelayCommand(16.0, SetCommandable(TRUE, oPC));
}
//___________________ ЗАМЕНА МАЛОЙ БУКВЫ Я _____________________________________
string ya(string sTokenValue = "йа")
   {
    string sYa = GetName(GetObjectByTag("ax_letter_ya"));
    string sResult = "";
    string sSub;
    int i = 0;
    while ((sSub = GetSubString(sTokenValue, i, 2)) != "")
           {
           if (sSub == "йа")
              {
              sResult += sYa;
              i += 2;
              }
           else
              {
              sResult += GetStringLeft(sSub, 1);
              i++;
              }
           }
    return sResult;
  }
// _____________________ ДАТЬ ПРЕДМЕТ ИЗ ПАЛИТРЫ _______________________________
void CreateItemPC(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1)
{CreateItemOnObject(sItemTemplate, oTarget, nStackSize);}
// ____________________ ВЫЗВАТЬ ИЗ ПАЛИТРЫ _____________________________________
void CreateObjectN(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="")
{CreateObject(nObjectType, sTemplate, lLocation, bUseAppearAnimation, sNewTag);}
// __________________ ТЕКСТ НАД ПЕРСОНАЖЕМ _____________________________________
void text(object oPC, string sTokenValue)
{
  AssignCommand(oPC, SpeakString(sTokenValue));
}
//____________________ Перемещение людей _______________________________________
void Jump(object oPC, object oWP)
{
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, JumpToObject(oWP));
}
//____________________ ПЕРЕМЕЩЕНИЕ ГЕРОЯ _______________________________________
void JumpFirstPC(object oWP)
{
object oPC = GetFirstPC();
object oNPC = GetFirstObjectInArea(oPC);

   AssignCommand(oPC, ClearAllActions());
   AssignCommand(oPC, JumpToObject(oWP));
while (GetIsObjectValid(oNPC))
{
  if (oPC==GetMaster(oNPC))
  {
   AssignCommand(oNPC, ClearAllActions());
   AssignCommand(oNPC, JumpToObject(oWP));
  }
  oNPC = GetNextObjectInArea(oPC);
}
}
//______________ ДОПОЛНИТЕЛЬНЫЙ УРОН ДЛЯ ЗАКЛИНАНИЯ ____________________________
void SpellDamage(object oSelf, int Damage)
{
object oPC = GetLastSpellCaster();
int iD = GetCurrentHitPoints(oSelf);// Текущие ХР
int iDM = GetMaxHitPoints(oSelf)/Damage;// Повреждение
string siD = IntToString(iDM);
effect eDamage = EffectDamage(iDM);
effect eSav = EffectSavingThrowDecrease(SAVING_THROW_ALL, 10, SAVING_THROW_TYPE_ALL);
effect eKosti = EffectVisualEffect(VFX_COM_CHUNK_BONE_MEDIUM);
location lSmoke = GetLocation(oSelf);

if (iDM > iD)
  {
   if (iD < 12) return;
   iD = iD-10;
   iDM = iD; siD = IntToString(iDM);
   effect eDamageM = EffectDamage(iDM);
   ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamageM,oSelf);
   ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eKosti,lSmoke);
  }
else
   ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oSelf);
   ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eSav,oSelf,10.0);
   SendMessageToPC(oPC, "<c °у>"+GetName(oSelf)+"</c> получил урон от <c °у>"+GetName(oPC)+"</c>: (<cу  >"+siD+"</c>)");
}
//____________________ ПЕРЕДВИЖЕНИЕ ПЛЕЙСА _____________________________________
void multik(object oSelf, string sGtTag, float fDist=0.1, float fSpeed=0.3, int iShag=20, float fOrient=180.0)
{
if (GetLocalInt(oSelf,"STENA") == 1) return;
object oPlace = GetNearestObjectByTag(sGtTag, oSelf);
effect eVis = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); // невидимость
effect eIskra = EffectVisualEffect(VFX_COM_SPARKS_PARRY);
int i;
AssignCommand(oSelf, ClearAllActions());
AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eIskra, oSelf);
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oPlace));
for (i=1; i<iShag; i++)
  {
    vector vSpawn = GetPosition(oPlace);
    float fFacing = GetFacing(oPlace);
    vSpawn.x += cos(fFacing) * fDist*i;
    vSpawn.y += sin(fFacing) * fDist*i;
    // Если отрицательное значение, то locSpawn позади oPC
    location locSpawn = Location(GetArea(oPlace), vSpawn, fOrient+fFacing);
  object oNew = CreateObject(OBJECT_TYPE_PLACEABLE, GetResRef(oPlace), locSpawn, FALSE, sGtTag);
  SetPlotFlag(oNew, TRUE); // Сюжетный
   ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oNew);
   AssignCommand(oSelf, ActionDoCommand(RemoveEffect(oNew, GetFirstEffect(oNew))));
   if (i<(iShag-1))
   {
    if (i<3) AssignCommand(oSelf, ActionWait(1.0));
    else AssignCommand(oSelf, ActionWait(fSpeed));
    AssignCommand(oSelf, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, oNew)));
    AssignCommand(oSelf, ActionDoCommand(DestroyObject(oNew, 0.5)));
   }
  }
  AssignCommand(oPlace,PlaySound("al_cv_millwheel1"));
  DelayCommand(4.0, AssignCommand(oPlace,PlaySound("as_cv_minercar1")));
  SetLocalInt(oSelf,"STENA",1);
  AssignCommand(oSelf, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT, eIskra, oSelf)));
  AssignCommand(oSelf, ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));
  AssignCommand(oSelf, ActionDoCommand(SetLocalInt(oSelf,"STENA",0)));
  AssignCommand(oSelf, ActionDoCommand(DestroyObject(oPlace)));
}
//_________________ Действие с большим числом предметов в инвентаре ____________
int Match(string s1, string s2)
{
return (s1 == s2);
}
// ------- Проверить
//  int StartingConditional()
// {return (GetNumItemsInInventory(GetPCSpeaker(), "ТЕГ") >= 3);}

int GetNumItemsInInventory(object oInventory = OBJECT_SELF, string sTag = "*")
{
int nNum = 0;
object oItem = GetFirstItemInInventory(oInventory);
    while (GetIsObjectValid(oItem))
    {
     if (Match(GetTag(oItem), sTag))
       nNum += GetItemStackSize(oItem);
       oItem = GetNextItemInInventory(oInventory);
    }
    return nNum;
}
// -------- Забрать (если число отрицательное -3, забрать все)
// void main()
// {RemoveItemsFromInventory(GetPCSpeaker(), "ТЕГ", 3);}

int RemoveItemsFromInventory(object oInventory = OBJECT_SELF, string sTag = "*", int nNum = -1)
{
int nStack;
object oItem = GetFirstItemInInventory(oInventory);
   while (GetIsObjectValid(oItem) && (nNum != 0))
    {
     if (Match(GetTag(oItem), sTag))
      {
        if (nNum < 0) DestroyObject(oItem);
         else if ((nStack = GetItemStackSize(oItem)) > nNum)
         {
          SetItemStackSize(oItem, nStack - nNum);
          return 0;
         }
        else
        {
         DestroyObject(oItem);
         nNum -= nStack;
        }
      }
        oItem = GetNextItemInInventory(oInventory);
    }
    return nNum;
}
//___________________ ЛОКАЦИЯ ОТНОСИТЕЛЬНО ОБЪЕКТА _____________________________
location CreateLocation(object oTarget, float fRadius, float fAngle, float fZ=0.0, float fOpient=0.0)
{
vector vTarget = GetPosition(oTarget);
float fXNew = vTarget.x+(fRadius*cos(fAngle));
float fYNew = vTarget.y+(fRadius*sin(fAngle));
float fZNew = vTarget.z+fZ;
vector vNew = Vector(fXNew,fYNew,fZNew);
location LNew = Location(GetArea(oTarget), vNew , fOpient);
return LNew;
}
// _______________ ПЕРЕМЕННАЯ ТОРГОВОЙ РЕПУТАЦИИ _______________________________
void ReputationTorg(int iRepa)
{
object oPC = GetFirstPC();
int iReput = GetLocalInt(oPC,"TORGOVEZ_REPA");
int iNew =iReput+iRepa;
if (iNew >= 10) iNew = 10;
if (iNew <= -3) iNew = -3;
SetLocalInt(oPC,"TORGOVEZ_REPA",iNew);
if (iRepa > 0)
SendMessageToPC(oPC, ya("Ваша репутацийа повысилась на: <c у >"+IntToString(iRepa)+"0%</c>"));
else
SendMessageToPC(oPC, ya("Ваша репутацийа понизилась на: <cу  >"+IntToString(iRepa)+"0%</c>"));
}
// _______________  Текущий день _______________________________________________
int Day()
{
int nDay = GetCalendarDay();
int nMes = 28*GetCalendarMonth();
int nYear = GetCalendarYear();
int iDay = 336*nYear+nMes+nDay;
return iDay;
}
//void main(){}


В нем конечно много лишнего, а точнее нам ненужного. Скрипт все таки писался для другого модуля со своими нуждами.

Цитата(Heather @ Feb 25 2015, 18:21) *
Да, человеческой расы, но пол может быть и женским.


Хм, не знал насчет пола

В книгах частенько встречаются мелкие ошибки. То пробел отсутствует после точки, то запятая пропущена. И еще, не используй букву Ё она в игре выглядит как ,
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 18:44
Сообщение #104


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Ух, какой гигантский! Попробую сначала самостоятельно поколдовать над этими жуками, а этот скрипт оставлю "про запас".
Думаю, не только в книгах, но и в диалогах, журнале есть опечатки. Ибо ворда не имею, чтобы проверять. Все вручную.)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 19:45
Сообщение #105


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Сделал, если этом можно так назвать, кв с бандитами и Лиамой, вот что приметил:

Диалог Лиамы: "А эти андиты", пропущена б.
Запись журнала: "убил брата на глаза", отсутствует буква х.

И еще, главное замечание. Когда я говорил с бандитами, они зарезали его брата. Меня это естественно не устраивало (дух оригинальной компании нвн, где я спаситель мира всего дает о себе знать). Поэтому я, видя, что бандиты являются нейтральными, решил убить их без суда и следствия (такой уж оказался менталитет у моего персонажа, не жалеть бандюг и тем более не идти на разговоры, начал тупо атаковать ближайших), рассчитывая, что потом брат будет спасен, так и есть, брат оказался жив, только вот сюжет продолжался по сценарию, если бы он был мертв. Тут либо надо сделать несколько линий развития истории, либо как-то сделать, чтобы диалог был неизбежен (самый лучший вариант запилить кат сцену, где персонаж сразу же по открытии двери начинает диалог.

Сообщение отредактировал NumberOne - Feb 25 2015, 19:47
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 21:07
Сообщение #106


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



NumberOne, а ты квест с теми жуками в Лойа-тан так и не завершил? А то, там по завершению нас зовут в дом к старейшинам, где находится еще 1 квест + маленькая сценка.

Насчет бандитов и брата, да, запилю катсцен. Ибо этот мужик должен-таки трагично умирать, все дела. Ну а ты, конечно, молодец, что попытался его спасти. =) Это мило.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 21:08
Сообщение #107


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Цитата(Heather @ Feb 25 2015, 22:07) *
NumberOne, а ты квест с теми жуками в Лойа-тан так и не завершил? А то, там по завершению нас зовут в дом к старейшинам, где находится еще 1 квест + маленькая сценка.


Да? Ну и ладно, я все-равно уже в городе... Может быть заново буду проходить, загляну.

Еще я в какой-то бочке нашел книгу про Фаэрун - мелочь, но миру не соответствует.

И еще, эти бандиты дались мне весьма трудно, учитывая, что я плут (мало хп, мало защиты, + Тайный удар не пашет, т.к я с целью 1х1) Мне пришлось немного схитрить, пользуясь некоторыми особенностями игры. А там еще и маг, который кидает ошеломление и прочее. Ад.

Сообщение отредактировал NumberOne - Feb 25 2015, 21:11
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 21:29
Сообщение #108


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



Я все хочу сделать такой скрипт, чтобы фаэрунские книги вообще не попадались. И в шкафах нам рандомно выпадали мои книжки. Но пока не знаю, как это делать - читаю форум про скрипты, может найду-что-то.

Это околосюжетный квест, причем с возможностью пройти его после основного сюжета. Так что я рассчитывала, что если игроку будет трудно, он отложит и подкачается. На 5 уровне вроде они нормально мочатся (хотя и с зельями и прочими баффами)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NumberOne
сообщение Feb 25 2015, 21:57
Сообщение #109


Level 4
**

Класс: Воин
Характер: Chaotic Good
Раса: Человек



Прохожу квест с артефактами, нпс теперь нейтральный, все ок. Когда доходит до боя, я его не могу убить. Просто не наносится урон, пишет оружие неэффективно. Открыл модуль и посмотреть этого нпс, обнаружил, что у него в инвентаре, во вкладке естественная экипировка надета кожа, имеющая овер 99999 эфектов в том числе и с поглощением урона. Так задумано или там тоже нужно лвл подкачать?

P.S С меня сегодня хватит, багов вроде бы больше не замечал.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Heather
сообщение Feb 25 2015, 22:08
Сообщение #110


Level 5
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
История дома Салливан



NumberOne, нет, так не задумано. Я шкурку кинула, а отредактировать ее забыла. Она не должна быть такой перекачанной. Ну, в принципе, данный квест тоже доступен после сюжета, так что можно немного покачаться, купить оружие получше и забить тварь.
Ах, да. Этот квест обязателен для выполнения (точнее, тот, который следует за ним). Поэтому, если демонетко окажется совсем крутой, придется убить ее с помощью читов. Я очень извиняюсь, какие-то изменения делала на скорую руку и не проверила потом. =(


Надеюсь, хоть что-то приятное в игре присутствует? Или сплошные несостыковки и глюки?

Сообщение отредактировал Heather - Feb 25 2015, 22:11
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

8 страниц V  « < 3 4 5 6 7 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 4th July 2025 - 23:48