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

Думал, может скриптами можно обойтись.
QUOTE(windhover @ Aug 17 2006, 02:15) [snapback]89776[/snapback]
Да это уже в контент надо лезть, как я понимаю unsure.gif
Думал, может скриптами можно обойтись.
Это надо отредактировать файл имя_тайлсета.set. Там просто затери все иконки и все. А файл этот текстовой.
Zirrex
Aug 18 2006, 15:32
Aiwan, и какой же файл затирать? Они имеют очень туманные названия. Потом, если вытереть оттуда всю информацию, то лишатся карт и все остальные локации, которые используют данный набор тайлов. По-моему это не выход. Разработчикам нужно было сделать в настройках локации опцию "Отобрать или не отображать карту".
helvene
Aug 18 2006, 15:40
Zirrex, затирается не файл, а ссылка на него в тайлсете.
Zirrex
Aug 18 2006, 17:04
Объясните на примере. Я что-то не понимаю где именно затирать.
helvene
Aug 18 2006, 17:06
Айван уже писал:
QUOTE(Aiwan @ Aug 17 2006, 09:23) [snapback]89787[/snapback]
Это надо отредактировать файл имя_тайлсета.set
Берем к примеру файл tti01.set, переименовываем его в новый или оставляем старый. Если старый то у всех лок не буит карты. Если новый то только на новой. К примеру tti02.set. Открываем, ищем название и правим:
CODE
UnlocalizedName=No_map_area
Ищем все файлы карт ImageMap2D:
CODE
ImageMap2D=no_map
Могеш сделать no_map.tga и нарисовать там дулю.
И все. А. Не забуть itp переименовать и горизонт. И все. Новый тайлсет.
helvene
Aug 18 2006, 20:24
От себя добавлю - если уже есть области, котторые нужно перенести на новый тайлсет, из модуля экстрактим файлы с расширением .are и соответствующими тегами, открыть их в любом шестнадцетиричном редакторе и в колонке с ASCII найти и заменить префикс тайлсета.
После этого открыть на редактирование модуль и в директории temp, куда тулсет разворачивает его при редактировании, заменить старые файлы новыми, отредактированными. Сохранить модуль, не изменяя в нем более ничего.
Перенос произведен

Айв, перемести последние посты в контент, а? Там они более уместны будут.
Пусть повисят несколько дней.
windhover
Aug 19 2006, 00:33
Благодарю всех за столь исчерпывающие объяснения.
Всетаки решил остановиться на варианте с скриптом и неполным скрытием карты, так как в некоторых случаях карту надо открывать(например игрок купил карту определенной местности).
И сразу возникает вопрос: сильно ли отобразиться на производительности, если на хетбите всех локаций будет висеть скрипт, затирающий карту?
QUOTE(Zirrex @ Aug 18 2006, 15:32) [snapback]89882[/snapback]
... Разработчикам нужно было сделать в настройках локации опцию "Отобрать или не отображать карту".
Ага, а сколько еще есть вещей, которые "...нужно было сделать"
-fenix-
Aug 19 2006, 01:06
Ну, можно сделать проверку на наличие игрока в локации, тогда скрипт будет срабатывать тока в одной локации.
Но всеж, ИМХО как-то не катит затирание на хертбит, не лучше ли сделать затерание карты при выходе с локи?
windhover
Aug 19 2006, 13:30
QUOTE(-fenix- @ Aug 19 2006, 01:06) [snapback]89944[/snapback]
Ну, можно сделать проверку на наличие игрока в локации, тогда скрипт будет срабатывать тока в одной локации.
Но всеж, ИМХО как-то не катит затирание на хертбит, не лучше ли сделать затерание карты при выходе с локи?
Смысл в том, чтобы игрок не ходил по карте, поэтому ее надо постоянно затирать, если затирать при выходе/входе в локу она будет скрыта при следующем заходе, а когда игрок находиться в локации - будет открываться.
А если сделать так:
Скрипт запускается при входе игрока в локу, через каждые 10 сек проверяет наличие игрока, если есть - затирает карту, если нет - останавливается, или, с помощью Alternative Core таймер создавать?
azathoth
Aug 19 2006, 13:38
QUOTE(windhover @ Aug 19 2006, 01:33) [snapback]89943[/snapback]
И сразу возникает вопрос: сильно ли отобразиться на производительности, если на хетбите всех локаций будет висеть скрипт, затирающий карту?
Нет. Вспомни, что у каждого созданного в игре монстра на хатбите уже стоит скрипт, и довольно непростой, так что затирание катры будет каплем в море, к тому же, если это сингл, то можешь использовать только хатбит модуля и затирать только карту, в которой находится игрок.
windhover
Aug 19 2006, 13:44
QUOTE(azathoth @ Aug 19 2006, 13:38) [snapback]89984[/snapback]
Нет. Вспомни, что у каждого созданного в игре монстра на хатбите уже стоит скрипт, и довольно непростой, так что затирание катры будет каплем в море, к тому же, если это сингл, то можешь использовать только хатбит модуля и затирать только карту, в которой находится игрок.
О, точно, хетбит модуля! Вообщем надо попробовать.. модуль сингловый
Благодарю покорнейше
Можно использовать хертбит ЛОКАЦИИ. Зачем юзать всего модуля?
NSS
object oPC = GetFirstPC();
if (GetArea(oPC) != OBJECT_SELF) return;
virusman
Aug 19 2006, 18:26
QUOTE
Можно использовать хертбит ЛОКАЦИИ. Зачем юзать всего модуля?
Если такая локация одна - да. Если много - лучше использовать модульный.
Привет,хотел бы узнать,есть ли ограничения на использование ассигн команд?То есть, можно ли мне попросить не крича,а например, плэйс или итем ассигнить ту или иную команду.
Привет,хотел бы узнать,есть ли ограничения на использование ассигн команд?То есть, можно ли мне попросить не крича,а например, плэйс или итем ассигнить ту или иную команду.
Milfes
Aug 20 2006, 00:01
Мне кажеться нельзя, как ты себе представляеш плейс будет выполнять команду, ну например ActionMoveToObject.

Хотя я не спец могу и ошибаться.
А тебе что конкретно надо?
QUOTE(Milfes @ Aug 20 2006, 00:01) [snapback]90082[/snapback]
Мне кажеться нельзя, как ты себе представляеш плейс будет выполнять команду, ну например ActionMoveToObject. :crazy:
Хотя я не спец могу и ошибаться.
А тебе что конкретно надо?
например,убить или добавить визуальный эффект.В данном случае, а вообще, знать бы конкретно.
можно, если я тебя правильно понял. Особых ограничений не встречал (писались же большие катсцены на триггерах, там по паре сотен строк. Косяки бывали, но вроде команды все выполняются)
QUOTE(Waromon @ Aug 20 2006, 02:13) [snapback]90094[/snapback]
Вообще - да, команды плектаблы выполняют, но не все. (например, как выше уже сказано было ActionMoveToObject)
ты невнимателен. Речь ж о том, чтобы это через Assign для другого (НПС) делать.
Waromon
Aug 20 2006, 01:13
2 Noah
А тыб взял да и опробовал.

Вообще - да, команды плектаблы выполняют, но не все. (например, как выше уже сказано было ActionMoveToObject)
Milfes
Aug 20 2006, 01:17
QUOTE
например,убить или добавить визуальный эффект
Можно при помощи функции ApplyEffectToObject.
Milfes, часто для синхронизации этого мало и приходится или писать на самом НПС, или если пишется для стороннего объекта, через структуры типа:
AssignCommand(oNPC,ActionDoCommand(ApplyEffectToObject(...)))
например.
Milfes
Aug 20 2006, 01:30
Если не трудно обьясните зачем нужна функция ActionDoCommand.
Уже сам разобрался.
Waromon
Aug 20 2006, 12:26
2 Milfes
Просто для того чтобы в будущем подобных вопросов не возникало, идем
СЮДА и качаем Лексикон, если напряги с инглишем читаем
перевод Функция Тулсета и
перевод некоторых статей Лексикона, все на русском языке.
Milfes
Aug 21 2006, 11:50
Подскажите пожалуйсто, как через скрипты у мага востановить все заклинания, не используя отдых.
virusman
Aug 21 2006, 12:06
Никак.
Waromon
Aug 21 2006, 13:38
QUOTE(Milfes @ Aug 21 2006, 11:50) [snapback]90169[/snapback]
Подскажите пожалуйсто, как через скрипты у мага востановить все заклинания, не используя отдых.
Функция ForceRest - мгновенный отдых, восстанавливаются и спеллы и фиты и т.д...
З.Ы: virusman, он походу имел в виду стандартных рест.
-fenix-
Aug 21 2006, 13:53
Да вроде нет, он довольно четко говорил про тока восстановление спелов.
Сделать это ни как низя, ибо функции для восстановления спеллов почему-то нету, хотя уменьшение есть.
Забыли разрабы про восстановление или нет, почему в патчах до сих пор функции нету???
З.Ы. Вообще-то есть способ восстановить спеллы используя функцию поднятия уровня хенча, но там ток по пакеджам восстанавливается.
virusman
Aug 21 2006, 16:42
Есть ещё один вариант.
Дело в том, что если спеллов 0, то при уменьшении их становится 255. Таким образом, можно установить то количество спеллов, которое нужно.
Milfes
Aug 21 2006, 17:58
QUOTE
Функция ForceRest - мгновенный отдых, восстанавливаются и спеллы и фиты и т.д...
Спасибо, впринципе подойдёт. Мне фиты не важны были, главное востановление заклинаний.
-fenix-
Aug 21 2006, 18:13
Хех, Milfes, так ведь это полноценный отдых, только без проверок на врагов и прочее, он и хиты восполнит и все заклы с чара снимет и св-ва на предметах восполнит и прочее.
Если так оно и надо, то так бы и сказал.
Milfes
Aug 21 2006, 18:19
QUOTE
не используя отдых.
Я имел виду, что бы он не садился и не шло время, просто я не знал про мгновенный отдых.
QUOTE
он и хиты восполнит и все заклы с чара снимет и св-ва на предметах восполнит и прочее
это в принципе не надо, но и не помешает.
Кто-нибудь сможет выложить скрипт, чтобы после использования предмета срабатывал нужный мне скрипт.
Или дать ссылку, где это уже написано.
-fenix-
Aug 28 2006, 13:29
Для срабатывания скрипта при использовани предмета ни какой скрипт писать не надо, есть специальное событие - 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
Aug 28 2006, 15:19
Артём, ты меня извини, конечно, но ты вообще читаешь, для чего служат те или иные функции, прежде чем их использовать? Как я понял из скрипта, ты хотел нанести урон цели, и при этом цель должна что-то сказать. Скрипт такой:
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
Aug 28 2006, 17:19
Ты на предположение мое не ответил. Скрипт на кого должен использоваться? Только на игрока? Если на игрока, то зачем "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
Aug 29 2006, 10:26
Вопрос конечно может и странный...
Где находится текст функции GetRacialType() дабы его похерить и написать так как оно мне надо? Эксплорером разодрал весь scrpits.bif, но в nwnscript.nss только заголовок нашел
:-(
Где эта функция находится никто не знает? И получится ли вообще править общесистемные функции?
[MoF]Darth_Nick
Aug 29 2006, 12:52
если функция стандартная - то она фшыта в движок ...изменить можно каким нить извратом с дизасмом и хуками вроде

да и зачем ее менять О_о
Ilrilan
Aug 29 2006, 13:13
а папка оверрайд ничем помочь не может? мне надо заменить эту функцию в игре на свою... как вот только это сделать?
-fenix-
Aug 29 2006, 13:33
Зачем что-то менять/заменять??
Напиши свою функцию!!!
Скажи точно, что тебе надо, чтобы функция делала??
Ilrilan
Aug 29 2006, 14:26
Мне надо чтобы Невер читал расу чара не из файла перса, а из БД. Хранить цифру в БД несложно, сложнее заставить Невер считать эту цифру расой.
Ну или менять расу персонажа на лету, скриптом. Если не получится гетрасиалтайп переписать, буду искать адрес в памяти где раса и через nwnx пытаться че-нить сделать. Но геморрой...
-fenix-
Aug 29 2006, 14:36
А не проще написать функцую, каторая бы по имени или там ID или чему там, возвращала из базы расу перса, и использовать ее замест стандартной???
virusman
Aug 29 2006, 17:58
QUOTE
Ну или менять расу персонажа на лету, скриптом. Если не получится гетрасиалтайп переписать, буду искать адрес в памяти где раса и через nwnx пытаться че-нить сделать. Но геморрой...
RacialType:
CODE
pObjectData = pObject+0xC64; //(смещения в байтах)
nRacialType = *(pObjectData+0x3E4);
//только учти, что в NWNX-Functions объект смещён на 4:
//this->pGameObject = gameObject+4;
типа того.
Но проще и безопасней заюзать LetoScript и изменять значение в bic-файле. Вряд ли расу придётся менять как перчатки.
Ещё можно заменить эту функцию в nwscript.nss и использовать вместо неё свою, но для этого всё равно придётся вставлять свой инклюд в каждый файл, где используется эта функция (Креон перл-скрипт для этого юзал).
У меня вопрос, какой нужен скрипт чтобы после смерти непися заработал новый скрипт.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.