Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
windhover
QUOTE(Zirrex @ Aug 16 2006, 02:34) [snapback]89707[/snapback]

windhover, карта при этом белого цвета? Если да, то использован набор тайлов "Микросет". Иначе же можно карту затирать постоянно у персонажа, который вошел на локацию. Это делается с помощью функции:

NSS
// Expose/Hide the entire map of oArea for oPlayer.
// - oArea: The area that the map will be exposed/hidden for.
// - oPlayer: The player the map will be exposed/hidden for.
// - bExplored: TRUE/FALSE. Whether the map should be completely explored or hidden.
void ExploreAreaForPlayer(object oArea, object oPlayer, int bExplored=TRUE)



Да нет, там миникарта черная.
Затирать - немного не то, нужно чтобы карта постоянно была закрыта, а так даже если на хетбит вешать скрипт с этой функцией - карта в пределах видимости ПС открывается, когда он отходит с места - на том месте закрывается и открывается в новом, и т.д.
Видимо скриптами не получится sad.gif
virusman
Создаётся точная копия тайлсета, но с пустыми значениями минимап (или заменёнными на чёрный квадрат).
windhover
QUOTE(virusman @ Aug 16 2006, 23:08) [snapback]89772[/snapback]

Создаётся точная копия тайлсета, но с пустыми значениями минимап (или заменёнными на чёрный квадрат).


Да это уже в контент надо лезть, как я понимаю unsure.gif
Думал, может скриптами можно обойтись.
Aiwan
QUOTE(windhover @ Aug 17 2006, 02:15) [snapback]89776[/snapback]
Да это уже в контент надо лезть, как я понимаю unsure.gif
Думал, может скриптами можно обойтись.

Это надо отредактировать файл имя_тайлсета.set. Там просто затери все иконки и все. А файл этот текстовой.
Zirrex
Aiwan, и какой же файл затирать? Они имеют очень туманные названия. Потом, если вытереть оттуда всю информацию, то лишатся карт и все остальные локации, которые используют данный набор тайлов. По-моему это не выход. Разработчикам нужно было сделать в настройках локации опцию "Отобрать или не отображать карту".
helvene
Zirrex, затирается не файл, а ссылка на него в тайлсете.
Zirrex
Объясните на примере. Я что-то не понимаю где именно затирать.
helvene
Айван уже писал:
QUOTE(Aiwan @ Aug 17 2006, 09:23) [snapback]89787[/snapback]
Это надо отредактировать файл имя_тайлсета.set

Aiwan
Берем к примеру файл tti01.set, переименовываем его в новый или оставляем старый. Если старый то у всех лок не буит карты. Если новый то только на новой. К примеру tti02.set. Открываем, ищем название и правим:
CODE

UnlocalizedName=No_map_area

Ищем все файлы карт ImageMap2D:
CODE

ImageMap2D=no_map

Могеш сделать no_map.tga и нарисовать там дулю.
И все. А. Не забуть itp переименовать и горизонт. И все. Новый тайлсет. smile.gif



helvene
От себя добавлю - если уже есть области, котторые нужно перенести на новый тайлсет, из модуля экстрактим файлы с расширением .are и соответствующими тегами, открыть их в любом шестнадцетиричном редакторе и в колонке с ASCII найти и заменить префикс тайлсета.

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

Перенос произведен smile.gif

Айв, перемести последние посты в контент, а? Там они более уместны будут.
Aiwan
Пусть повисят несколько дней.
windhover
Благодарю всех за столь исчерпывающие объяснения.
Всетаки решил остановиться на варианте с скриптом и неполным скрытием карты, так как в некоторых случаях карту надо открывать(например игрок купил карту определенной местности).
И сразу возникает вопрос: сильно ли отобразиться на производительности, если на хетбите всех локаций будет висеть скрипт, затирающий карту?

QUOTE(Zirrex @ Aug 18 2006, 15:32) [snapback]89882[/snapback]

... Разработчикам нужно было сделать в настройках локации опцию "Отобрать или не отображать карту".

Ага, а сколько еще есть вещей, которые "...нужно было сделать" declare.gif
-fenix-
Ну, можно сделать проверку на наличие игрока в локации, тогда скрипт будет срабатывать тока в одной локации.

Но всеж, ИМХО как-то не катит затирание на хертбит, не лучше ли сделать затерание карты при выходе с локи?
windhover
QUOTE(-fenix- @ Aug 19 2006, 01:06) [snapback]89944[/snapback]

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

Но всеж, ИМХО как-то не катит затирание на хертбит, не лучше ли сделать затерание карты при выходе с локи?


Смысл в том, чтобы игрок не ходил по карте, поэтому ее надо постоянно затирать, если затирать при выходе/входе в локу она будет скрыта при следующем заходе, а когда игрок находиться в локации - будет открываться.

А если сделать так:
Скрипт запускается при входе игрока в локу, через каждые 10 сек проверяет наличие игрока, если есть - затирает карту, если нет - останавливается, или, с помощью Alternative Core таймер создавать?
azathoth
QUOTE(windhover @ Aug 19 2006, 01:33) [snapback]89943[/snapback]
И сразу возникает вопрос: сильно ли отобразиться на производительности, если на хетбите всех локаций будет висеть скрипт, затирающий карту?

Нет. Вспомни, что у каждого созданного в игре монстра на хатбите уже стоит скрипт, и довольно непростой, так что затирание катры будет каплем в море, к тому же, если это сингл, то можешь использовать только хатбит модуля и затирать только карту, в которой находится игрок.
windhover
QUOTE(azathoth @ Aug 19 2006, 13:38) [snapback]89984[/snapback]

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


О, точно, хетбит модуля! Вообщем надо попробовать.. модуль сингловый
Благодарю покорнейше thank_you.gif
Aiwan
Можно использовать хертбит ЛОКАЦИИ. Зачем юзать всего модуля?
NSS
object oPC = GetFirstPC();
if (GetArea(oPC) != OBJECT_SELF) return;
virusman
QUOTE
Можно использовать хертбит ЛОКАЦИИ. Зачем юзать всего модуля?
Если такая локация одна - да. Если много - лучше использовать модульный.
Noah
Привет,хотел бы узнать,есть ли ограничения на использование ассигн команд?То есть, можно ли мне попросить не крича,а например, плэйс или итем ассигнить ту или иную команду.

Привет,хотел бы узнать,есть ли ограничения на использование ассигн команд?То есть, можно ли мне попросить не крича,а например, плэйс или итем ассигнить ту или иную команду.
Milfes
Мне кажеться нельзя, как ты себе представляеш плейс будет выполнять команду, ну например ActionMoveToObject. crazy.gif
Хотя я не спец могу и ошибаться.
А тебе что конкретно надо?
Noah
QUOTE(Milfes @ Aug 20 2006, 00:01) [snapback]90082[/snapback]

Мне кажеться нельзя, как ты себе представляеш плейс будет выполнять команду, ну например ActionMoveToObject. :crazy:
Хотя я не спец могу и ошибаться.
А тебе что конкретно надо?

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


QUOTE(Waromon @ Aug 20 2006, 02:13) [snapback]90094[/snapback]
Вообще - да, команды плектаблы выполняют, но не все. (например, как выше уже сказано было ActionMoveToObject)

ты невнимателен. Речь ж о том, чтобы это через Assign для другого (НПС) делать.
Waromon
2 Noah

А тыб взял да и опробовал. smile.gif

Вообще - да, команды плектаблы выполняют, но не все. (например, как выше уже сказано было ActionMoveToObject)
Milfes
QUOTE
например,убить или добавить визуальный эффект

Можно при помощи функции ApplyEffectToObject.
Lex
Milfes, часто для синхронизации этого мало и приходится или писать на самом НПС, или если пишется для стороннего объекта, через структуры типа:
AssignCommand(oNPC,ActionDoCommand(ApplyEffectToObject(...)))
например.
Milfes
Если не трудно обьясните зачем нужна функция ActionDoCommand.

Уже сам разобрался.
Waromon
2 Milfes

Просто для того чтобы в будущем подобных вопросов не возникало, идем СЮДА и качаем Лексикон, если напряги с инглишем читаем перевод Функция Тулсета и перевод некоторых статей Лексикона, все на русском языке.
Milfes
Подскажите пожалуйсто, как через скрипты у мага востановить все заклинания, не используя отдых.
virusman
Никак.
Waromon
QUOTE(Milfes @ Aug 21 2006, 11:50) [snapback]90169[/snapback]

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



Функция ForceRest - мгновенный отдых, восстанавливаются и спеллы и фиты и т.д...

З.Ы: virusman, он походу имел в виду стандартных рест. smile.gif
-fenix-
Да вроде нет, он довольно четко говорил про тока восстановление спелов.
Сделать это ни как низя, ибо функции для восстановления спеллов почему-то нету, хотя уменьшение есть.
Забыли разрабы про восстановление или нет, почему в патчах до сих пор функции нету???

З.Ы. Вообще-то есть способ восстановить спеллы используя функцию поднятия уровня хенча, но там ток по пакеджам восстанавливается.
virusman
Есть ещё один вариант.
Дело в том, что если спеллов 0, то при уменьшении их становится 255. Таким образом, можно установить то количество спеллов, которое нужно.
Milfes
QUOTE
Функция ForceRest - мгновенный отдых, восстанавливаются и спеллы и фиты и т.д...


Спасибо, впринципе подойдёт. Мне фиты не важны были, главное востановление заклинаний.
-fenix-
Хех, Milfes, так ведь это полноценный отдых, только без проверок на врагов и прочее, он и хиты восполнит и все заклы с чара снимет и св-ва на предметах восполнит и прочее.
Если так оно и надо, то так бы и сказал.
Milfes
QUOTE
не используя отдых.
Я имел виду, что бы он не садился и не шло время, просто я не знал про мгновенный отдых.
QUOTE
он и хиты восполнит и все заклы с чара снимет и св-ва на предметах восполнит и прочее
это в принципе не надо, но и не помешает.
Артём
Кто-нибудь сможет выложить скрипт, чтобы после использования предмета срабатывал нужный мне скрипт.
Или дать ссылку, где это уже написано.
-fenix-
Для срабатывания скрипта при использовани предмета ни какой скрипт писать не надо, есть специальное событие - OnActivateItem в св-вах модуля. Вот туда и нужно вписать скрипт, который будет срабатывать при использовании предмета. Можешь пасмотреть еще ТУТ
Артём
Понятно
Спасибо!


Я пытался написать скрипт по той схеме но у меня нечего не вышло.
NSS
void main()
{
object oActivator = GetItemActivator();
object oActivated = GetItemActivated();
object oPC = GetEnteringObject();


if ("item_1" == GetTag(oActivated))
  {
  effect eDamage = EffectDamage(1);
  string sString="Текст";
  ActionDoCommand(AssignCommand(oPC, ActionSpeakString(sString)));
  }
}
Zirrex
Артём, ты меня извини, конечно, но ты вообще читаешь, для чего служат те или иные функции, прежде чем их использовать? Как я понял из скрипта, ты хотел нанести урон цели, и при этом цель должна что-то сказать. Скрипт такой:
NSS
void main()
{
    object oPC = GetItemActivator();
    object oItem = GetItemActivated();
    object oTarget = GetItemActivatedTarget(); // не GetEnteringObject(); Прочитай про эту функцию
    string sItem = GetTag(oItem);

    if ("item_1" == sItem)
    {
        AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1), oTarget));
        AssignCommand(oTarget, ActionSpeakString("Текст"));
    }
}
Артём
Прошу прощение за глупость.[
Скрипт я написал, не проверял, я просто хотел привести пример.
Сам скрипт такой.
NSS
void main()
{
object oActivator = GetItemActivator();
object oActivated = GetItemActivated();
object oTarget = GetFirstPC();
location lSparks = GetLocation(oTarget);

if ("item_1" == GetTag(oActivated))
  {
  DelayCommand(1.0,ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect
  (VFX_IMP_DIVINE_STRIKE_FIRE),lSparks));

  string sString="Упс...";
  ActionDoCommand(AssignCommand(oTarget, ActionSpeakString(sString)));
  }
}


У меня ещё один вопрос, какой нужен скрипт для прибавления нужного количество мне жизней.
Zirrex
Ты на предположение мое не ответил. Скрипт на кого должен использоваться? Только на игрока? Если на игрока, то зачем "object oTarget = GetFirstPC();"? У тебя есть функция "GetItemActivator();", а это никто иной, как игрок.
NSS
void main()
{
    object oPC = GetItemActivator();
    object oItem = GetItemActivated();
    string sItem = GetTag(oItem);
    location lSparks = GetLocation(oPC);

    if ("item_1" == sItem)
    {
        ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_FIRE), lSparks);
        DelayCommand(1.0, AssignCommand(oPC, ActionSpeakString("Упс...")));
    }
}

Советую все главные функции выносить наверх модульного эвента, чтобы потом, если ты решишь добавить описание срабатывания иной вещи, не писать их снова.

Чтобы выполнить скрипт на кого-угодно (зависит от установки в самой вещи), т.е. на себя или на любой объект, на который будет направлен предмет, то можно сделать так:
NSS
void main()
{
    object oPC = GetItemActivator();
    object oItem = GetItemActivated();
    object oTarget = GetItemActivatedTarget();
    string sItem = GetTag(oItem);

    if ("item" == sItem)
    {
        // если на цель
        ExecuteScript("name_script", oTarget);
        // если на себя
        ExecuteScript("name_script", oPC);
    }
}
Артём
Понятно
Спасибо!
Все скрипты которые мне дают я сохраняю у меня, их уже около сотни.

Я уже спрашивал, но спрошу ещё.
Какой нужен скрипт для прибавления нужного количество мне жизней.
Ilrilan
Вопрос конечно может и странный...
Где находится текст функции GetRacialType() дабы его похерить и написать так как оно мне надо? Эксплорером разодрал весь scrpits.bif, но в nwnscript.nss только заголовок нашел
:-(
Где эта функция находится никто не знает? И получится ли вообще править общесистемные функции?
[MoF]Darth_Nick
если функция стандартная - то она фшыта в движок ...изменить можно каким нить извратом с дизасмом и хуками вроде crazy.gif да и зачем ее менять О_о
Ilrilan
а папка оверрайд ничем помочь не может? мне надо заменить эту функцию в игре на свою... как вот только это сделать?
-fenix-
Зачем что-то менять/заменять??
Напиши свою функцию!!!

Скажи точно, что тебе надо, чтобы функция делала??
Ilrilan
Мне надо чтобы Невер читал расу чара не из файла перса, а из БД. Хранить цифру в БД несложно, сложнее заставить Невер считать эту цифру расой.
Ну или менять расу персонажа на лету, скриптом. Если не получится гетрасиалтайп переписать, буду искать адрес в памяти где раса и через nwnx пытаться че-нить сделать. Но геморрой...
-fenix-
А не проще написать функцую, каторая бы по имени или там ID или чему там, возвращала из базы расу перса, и использовать ее замест стандартной???
virusman
QUOTE
Ну или менять расу персонажа на лету, скриптом. Если не получится гетрасиалтайп переписать, буду искать адрес в памяти где раса и через nwnx пытаться че-нить сделать. Но геморрой...
RacialType:
CODE
pObjectData = pObject+0xC64; //(смещения в байтах)
nRacialType = *(pObjectData+0x3E4);
//только учти, что в NWNX-Functions объект смещён на 4:
//this->pGameObject = gameObject+4;

типа того.
Но проще и безопасней заюзать LetoScript и изменять значение в bic-файле. Вряд ли расу придётся менять как перчатки.

Ещё можно заменить эту функцию в nwscript.nss и использовать вместо неё свою, но для этого всё равно придётся вставлять свой инклюд в каждый файл, где используется эта функция (Креон перл-скрипт для этого юзал).
Артём
У меня вопрос, какой нужен скрипт чтобы после смерти непися заработал новый скрипт.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.