DroWishSoul
Jul 20 2005, 08:29
QUOTE (-fenix- @ Jul 20 2005, 08:21) |
Тут вот в прохождении спрашивали, что значит меч +1 и у меня возникло массу других вопросов, что значит... Есть какой-нить хелп, FAQ, по этому поводу? Наверное в лицензионных играх есть статьи, где объясняются все параметры и скилы, но в пиратке этого нет. Где можно это достать? |
Откуда можно это достать, я не знаю, всё узнавал по собственному опыту.
Если надо, то попробуй поискать на яндексе. Хотя, я почти уверен, что такие FAQ есть на какой-нибудь игромании в архивах или на ЛКИ.
Добавлено в 12:53 Помогите еще раз со скриптом... мне надо, чтобы в определенный промежуток времени (например, с 21 вечера до 6 утра) объект (например, NPC с тагом "tag") делал определенные действия (например, сидел (то есть, анимация, а не отдых))
вот так... да, и куда этот скрипт всунуть?
Daemonix
Jul 20 2005, 15:35
DroWishSoul
Если не ошибаюсь, было в базе скриптов. Но где-то точно было.
Добавлено в [mergetime]1121863071[/mergetime]
Вот, у меня тоже вопрос. Как сделать так:
вот непись, а вот его вэйпоинты. Сначала он идёт на первый WP, ждёт 10 сек, потом на второй, ждёт 10 сек и т.д. Где-то это было, но я ОЧЕНЬ ограничен во времени сидения в инете, чтобы искать.
-fenix-
Jul 20 2005, 16:07
DroWishSoul, вот самое простое, ставим на OnHeartbeat
Neverwinter Script Source |
void main() { object oNPC = OBJECT_SELF;
if (GetTimeHour() >= 21 || GetTimeHour() <=6) // проверяем время
{ AssignCommand(oNPC,ActionPlayAnimation(ACTION_SIT, 1.0, 10.0)); // совершаем любое действие }
else { // иначе что-то еще } } |
Dik Morris
Jul 20 2005, 16:14
Вот и ответ на твой вопрос, просто нарисуй триггер (надеюсь ты знаешь что это такое) и на onEnter поставь вот этот скриптик
Neverwinter Script Source |
void main() { object oPC = GetEnteringObject(); object oNPC = GetObjectByTag("Тэг твоего NPC"); object oWP_1 = GetWaypointByTag("Тэг первого вайпоинта"); object oWP_2 = GetWaypointByTag("Тэг второго вайпоинта"); object oWP_3 = GetWaypointByTag("Тэг третьего вайпоинта");
if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1) return; SetLocalInt(OBJECT_SELF,"TRIGGER",1);
ActionDoCommand(AssignCommand(oNPC, ActionMoveToObject(oWP_1))); ActionWait(10.0); ActionDoCommand(AssignCommand(oNPC, ActionMoveToObject(oWP_2))); ActionWait(10.0); ActionDoCommand(AssignCommand(oNPC, ActionMoveToObject(oWP_3))); ActionWait(10.0); } |
P.S: обрати внимание что ты сам можешь указать время, (ActionWait) добавить анимацию, фразы…
DroWishSoul
Jul 20 2005, 16:16
Благодарю.
Добавлено в 16:49
есть ещё вопросы:
fenix, можно ли подобное сотворить НЕ через HeartBeat, а, например, с наступлением определенного времени NPC должен делать действие?
а ACTION_SIT - это имеется ввиду сидение на стуле? Мне нужно, как при отдыхе... Но когда я ставлю ACTION_REST, он почему-то заваливается на спину с громким хлопком, а не садится на пол (а при ACTION_SIT не происходит ничего).
-fenix-
Jul 20 2005, 18:15
QUOTE (DroWishSoul @ Jul 20 2005, 16:16) |
а ACTION_SIT - это имеется ввиду сидение на стуле? Мне нужно, как при отдыхе... Но когда я ставлю ACTION_REST, он почему-то заваливается на спину с громким хлопком, а не садится на пол (а при ACTION_SIT не происходит ничего). |
Да, это я ступил надо вот, что писать ANIMATION_LOOPING_SIT_CROSS.
QUOTE (DroWishSoul @ Jul 20 2005, 16:16) |
можно ли подобное сотворить НЕ через HeartBeat, а, например, с наступлением определенного времени NPC должен делать действие? |
На сколько я знаю, специального слота, для ночного и дневного события нет!
Так, что проверяем это через хертбит каждые 6 секунд.
Если беспокоит, что он ночью каждые 6 секунд приказы отдает то можно так сделать.
Neverwinter Script Source |
void main() { object oNPC = OBJECT_SELF;
if (GetTimeHour() >= 21 && GetLocalInt(oNPC, "Ночь") == 0 || GetTimeHour() <=6 && GetLocalInt(oNPC, "Ночь") == 0)
{ AssignCommand(oNPC,ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 10.0)); SetLocalInt(oNPC, "Ночь", 1); }
else { if (GetLocalInt (oNPC, "Ночь") == 1) SetLocalInt(oNPC, "Ночь", 0); } } |
DroWishSoul
Jul 20 2005, 18:45
fenix, большое спасибо.
Zirrex
Jul 20 2005, 20:43
-fenix- ну и нагромоздил же ты скрипт, а не проще ли написать так:
Neverwinter Script Source |
void main() { if (GetLocalInt(OBJECT_SELF, "Night") == FALSE) { if (GetTimeHour() >= 21 || GetTimeHour() <= 6) { AssignCommand(OBJECT_SELF, PlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 9999.0)); SetLocalInt(OBJECT_SELF, "Night", TRUE); } } else { SetLocalInt(OBJECT_SELF, "Night", FALSE); } } |
И делать это надо не на хартбит, а на эвент OnRested. На эвенте хартбита при определенных условиях просто заставлять использовать функцию сна, в скрипте которого уже будет прописан сей скрипт. Желательно также сделать условия, что если с НПС заговорили, то переменную стереть, но пока он говорит, не садиться, и т.п.
Dik Morris, не совсем понял, зачем триггер? Достаточно указать НПС, что от него требуется, и он уже сам будет делать то что надо. Скрипт же можно изобразить гораздо проще. Тем более есть такие возможности. Правим код на хартбите:
Neverwinter Script Source |
WalkWayPoints(FALSE, 10.0); |
На OnSpawn убираем или комментируем "WalkWayPoints();"
-fenix-
Jul 20 2005, 20:54
QUOTE (Zirrex @ Jul 20 2005, 20:43) |
а не проще ли написать так: |
Проще, ну дак я сам только учусь
Zirrex, а зачем на OnRested, я че та не совсем допер, растолкуй плизз
З.Ы Дошла моя кутсценка
Daemonix
Jul 20 2005, 20:56
Спасибо Dik Morrsу и Zirrexу!
Кто-нибудь знает как на OnDeath непися постаить добавление записи в журнал игрока?
DroWishSoul
Jul 20 2005, 21:30
Daemonix, наверное, вот так:
Neverwinter Script Source |
void main() { object oPC = GetLastKiller(); AddJournalQuestEntry("TAG", ID, oPC); // вводим вместо TAG тэг квеста в журнале, а вместо ID - ID записи (это все вводится в Journal Editore) } |
PS Это если на случай, что ты его убил... эхм... а если его убьет твой фамилиар... мда... меня лучше не слушать
-fenix-
Jul 20 2005, 21:33
Не много дополню
QUOTE (Daemonix @ Jul 20 2005, 20:56) |
Кто-нибудь знает как на OnDeath непися постаить добавление записи в журнал игрока? |
Есть функция
Цитата из перевода Valleo
Neverwinter Script Source |
void AddJournalQuestEntry(string szPlotID, int nState, object oCreature, int bAllPartyMembers=TRUE, int bAllPlayers=FALSE, int bAllowOverrideHigher=FALSE)
string szPlotID - это плот ID, который создается при создании записи в toolset39;s Journal Editor int nState - номер статейки, которую надо записать в ваш журнал, тоже найдете в toolset39;s Journal Editor object oCreature - каму добавится запись в журнал int bAllPartyMembers - если TRUE - запись добавится всем партийцам int bAllPlayers - если TRUE - запись добавится ВСЕМ в этом МИРЕ int bAllowOverrideHigher - если TRUE - вы сможете установить номер записи, меньшИй, чем текущий. То есть если номер текущей записи в квесте szPlotId - N, то с этой опцией вы сможете установить любой номер, меньший N. Это полезно в случае отката квеста на некоторое время назад, либо при множественном выборе номер, когда точно неизвестно, будет ли номер больше текущего, либо меньше. |
Zirrex
Jul 20 2005, 21:38
Daemonix при смерти НПС добавляешь запись в журнал персонажа. Правда, НПС должен быть уникальным:
Neverwinter Script Source |
void main() { object oKiller = GetLastKiller();
if (GetIsPC(oKiller) && (GetLocalInt(oKiller, "NW_JOURNAL_ENTRYJOUR_Save") < 10)) { AddJournalQuestEntry("JOUR_Save", 10, oPC, TRUE, TRUE); } } |
Строчка "(GetLocalInt(oKiller, ""NW_JOURNAL_ENTRYJOUR_Save") < 10)", если у тебя не одна запись, и в данном случае добавляется первая.
На будущее, если есть какой-то вопрос, попробуй что-то подобное найти в одиночных модулях игры, там примеров просто море.
DroWishSoul, так надо выделить, кто убивает НПС.
-fenix-, да, сценка дошла, немного повозился с ней, скоро пришлю. Ты там очень много поставил таких вещей, как "ActionDoCommand", когда внутренняя функция уже имела "Action...".
Не надо изобретать велосипедов. Все уже давно написано за вас и не так криво...
Neverwinter Script Source |
void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) |
Стандартная функция Биовар. Если прописать так:
Neverwinter Script Source |
WalkWayPoints(FALSE, 10.0); |
То будет ходить по поинтам и ждать ровно 10 секунд. Если повесить на поинт локалку X2_L_WAYPOINT_SETFACING становится лицом в сторну вепоинта.
QUOTE (DroWishSoul @ Jul 20 2005, 11:29) |
Помогите еще раз со скриптом... мне надо, чтобы в определенный промежуток времени (например, с 21 вечера до 6 утра) объект (например, NPC с тагом "tag") делал определенные действия (например, сидел (то есть, анимация, а не отдых)) вот так... да, и куда этот скрипт всунуть? |
То же самое, читаем спавн скрипт на НПС по дефолту. Там написано что надо разкомментировать, что бы НПС ходил домой ночью. И даже как назвать скрипт что будет запускаться когда он дойдет до ночного поинта отдыха. А что он будет делать, решать вам.
LocalString X2_S_SLEEP_AT_NIGHT_SCRIPT == "имя_скрипта_на_ночь" - Стринг на модуле - запускает скрипт ночью на НПС надо NW_FLAG_SLEEPING_AT_NIGHT
Neverwinter Script Source |
SetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT); |
Zirrex
Jul 20 2005, 21:54
Aiwan, так он же хочет, чтобы он не уходил, а просто сидел ночью. Чтобы НПС ушел, это не сложно, а вот чтобы сидел в определенный промежуток времени, надо бы уже иначе.
-fenix-, потому что, чем меньше подобных скриптов на хартбите, тем лучше. Если не указать определенных условий, он будет делать подобное, в данном случае, сидеть, когда ему захочется этого, точнее велит сам скрипт. Если не хартбите сделать команду отдыха, когда НПС в режиме покоя, т.е. с ним никто не разговаривает, не бьет, или он сам не сражается, причем не "ActionRest", а "ForceRest", чтобы он сел отдыхать, при этом будет выполняться соответствующий скрипт.
Я почему не хотел бы еще кидать тот скрипт на хартбит, чтобы он не проверялся постоянно, а выполнялся только тогда, когда это точно нужно. Т.е. НПС сидел и вдруг встал, и чтобы он сел снова, нужно уже иметь готовую переменную.
Daemonix
Jul 20 2005, 23:24
Хм,.. инетресно. А кто-нибудь в курсах, как можно при разговоре с неписём:
Непись:
- Пошёл отсюда!
Герой(вар.1):
<убеждение> Успокойся, я хочу помочь!
Герой(вар.2):
Ладно, пойду.
При первом варианте может быть так:
Непись(вар.1)
<успех>Да, ты прав... Мне надо расслабиться...
<неудача> Нет, я тебе не верю. Вали прочь!
Так вот, с появлением фразы
QUOTE |
<убеждение> Успокойся, я хочу помочь! |
я уже разобрался, а как далее?
Имеешь в виду как сделать проверку на скил, т.е. если достаточно, то вариант <успех>, а если не хватает, то второй вариант? Если да, то на вариант ответа неписи "Да, ты прав..." вешай что-нибудь типа такой фигни:
(во вкладке "надпись появляется при")
int StartingConditional ()
{
object oPC = GetPCSpeaker ();
if (!(GetAbilityScore(oPC, ABILITY_INTELLIGENCE) >= 15'к примеру')) return FALSE;
return TRUE;
}
на второй вариант можешь повесить почти тоже самое, только измени знаки >= на <, хотя это делать не обязательно(в смысле вешать второй скрипт

).
ЗЫ: если я неправильно понял твой вопрос, то извини...
Daemonix открой любой диалог в ПЛ к примеру и посмотри как сделано. Все описывать тебе просто замучаешься... Там все просто. Я лично разбирался глядя на диалоги Биовар.
DroWishSoul
Jul 21 2005, 09:32
Эх... еще вопрос... как NPC заберет у меня 5 предметов с одним тагом во время диалога?
PS Уже стыдно спрашивать
Люди добрые! (Гномы, эльфы и иже с ними) помогите ради всех богов! Нужно мне несколько спутников взять с собой. (2- 5) а больше одного не получается. Чего им нужно, блин?
Daemonix
Jul 21 2005, 10:59
QUOTE |
zmey Люди добрые! (Гномы, эльфы и иже с ними) помогите ради всех богов! Нужно мне несколько спутников взять с собой. (2- 5) а больше одного не получается. Чего им нужно, блин? |
Всмысле каких спутников? Чтобы неписи просто шли за тобой или их морды появлялись в правом верхнем углу?(фамилиары) В последнем случае более одного никогда не видел...
для daemonix: а в hordes? там было двое!
-fenix-
Jul 21 2005, 11:36
DroWishSoul, тут не давно было, вылелось в функцию
Neverwinter Script Source |
int removeStackItems(object oInventory, string sItem, int nNum) { object oItem = GetFirstItemInInventory(oInventory); int nCount = nNum; // столько итемов осталось удалить while(GetIsObjectValid(oItem) && (nCount > 0)) { if(GetTag(oItem) == sItem) { int nStack = GetItemStackSize(oItem); if (nStack <= nCount) // ЕСЛИ в стопке предметов меньше, { // чем нам нужно удалить: DestroyObject(oItem); // - удаляем все стопку nCount-=nStack; // - уменьшаем счетчик на кол-во уд-х пред-ов } else { // ИНАЧЕ сокращ. размер стопки и обнуляем счетчик SetItemStackSize(oItem, nStack-nCount); nCount = 0; } } oItem = GetNextItemInInventory(oInventory); } return nNum - nCount; // возвращаем кол-во уд-х пред-ов } |
zmey, на сколько я понимаю, то только в хорде так и можно делать, а вообще то же где-то это было.
Где-то нужно поставить максимум хенчменов, посмотри в темках.
DroWishSoul
Jul 21 2005, 13:03
Не пойму никак... где же тут указывается таг вещей?
Аваддон
Jul 21 2005, 13:09
QUOTE (DroWishSoul @ Jul 21 2005, 13:03) |
Не пойму никак... где же тут указывается таг вещей? |
В параметрах вещи.
-fenix-
Jul 21 2005, 13:32
Neverwinter Script Source |
int removeStackItems(object oInventory, string sItem, int nNum)
object oInventory - объект в инвентаре которого нужно удалить вещь. string sItem - тег вещи, которую надо удалить. int nNum - кол-во, сколько надо удалить. |
DroWishSoul
Jul 21 2005, 14:03
QUOTE (Аваддон @ Jul 21 2005, 13:09) |
В параметрах вещи. |
Я имел ввиду скрипт.
-fenix-
Jul 21 2005, 14:11
Это функция, кОторая это делает, что тебе надо
Neverwinter Script Source |
int removeStackItems(object oInventory, string sItem, int nNum)
object oInventory - объект в инвентаре которого нужно удалить вещь. string sItem - тег вещи, которую надо удалить. int nNum - кол-во, сколько надо удалить. |
Это так сказать объяснение, что это функция делает
Neverwinter Script Source |
{ object oItem = GetFirstItemInInventory(oInventory); int nCount = nNum; // столько итемов осталось удалить while(GetIsObjectValid(oItem) && (nCount > 0)) { if(GetTag(oItem) == sItem) { int nStack = GetItemStackSize(oItem); if (nStack <= nCount) // ЕСЛИ в стопке предметов меньше, { // чем нам нужно удалить: DestroyObject(oItem); // - удаляем все стопку nCount-=nStack; // - уменьшаем счетчик на кол-во уд-х пред-ов } else { // ИНАЧЕ сокращ. размер стопки и обнуляем счетчик SetItemStackSize(oItem, nStack-nCount); nCount = 0; } } oItem = GetNextItemInInventory(oInventory); } return nNum - nCount; // возвращаем кол-во уд-х пред-ов } |
Чтобы воспользоваться функцией надо все, что я написал в первом ответе кинуть в файл скрипта и в нужном месте просто пользоваться функцией.
З.Ы описание должно быть до использование функции, лучше всего в самом начале.
З.З.Ы а еще лучше скинуть ее в отдельный файл и подключить его как инклюд!
DroWishSoul
Jul 21 2005, 15:15
Ладно, я уже по-другому сделал, спасибо.
Daemonix
Jul 21 2005, 23:19
QUOTE |
zmeyдля daemonix: а в hordes? там было двое! |
Хм, просто я не играл в Hordes. У меня только Shadows of Undertide есть. Но скоро куплю.
Добавлено в [mergetime]1121977284[/mergetime]
З.Ы. Думаете, есть смысл делать мод для непрокачанного героя?
QUOTE (zmey @ Jul 21 2005, 11:25) |
больше одного не получается. Чего им нужно, блин? |
в скрипт OnModuleLoad добавь строку:
Neverwinter Script Source |
SetMaxHenchmen(5); |
Dik Morris
Jul 22 2005, 09:41
Daemonix ты имеешь в виду мод для героя первого уровня? Дык конечно лучше делать, чтобы начинать первоуровневым игроком, а потом прокачать его (по ходу игры) скажем до 20

. Лично я так и делаю, у себя.
Добавлено в [mergetime]1122021364[/mergetime] QUOTE |
Хм,.. инетресно. А кто-нибудь в курсах, как можно при разговоре с неписём:
Непись: - Пошёл отсюда!
Герой(вар.1): <убеждение> Успокойся, я хочу помочь!
Герой(вар.2): Ладно, пойду. |
Daemonix! Наверно скорее всего я опоздал

… Но если нет, или если ты до конца не понял тогда смотри:
Пример:
NPC: Привет игрок! У меня есть деньги!
Игрок: (убеждение) Не поделишься богатством?
1) Вариант ответа NPC, при срабатывании убеждения:
Конечно на, я не жадный!
2) Вариант ответа NPC, при провале убеждения:
Нет! Пошел ты!
Дык вот, Первый вариант появляется если в закладку ПОЯВЛЯЕТСЯ ПРИ, добавить этот скрипт:
Neverwinter Script Source |
#include "nw_i0_tool"
int StartingConditional() { if(!(AutoDC(DC_EASY, SKILL_PERSUADE, GetPCSpeaker()))) return FALSE;
return TRUE; } |
Ты можешь сам делать такие скрипты, просто в Мастере скриптов (Это в редакторе диалога, ты наверное знаешь) ПОЯВЛЯЕТСЯ ПРИ -> МАСТЕР СКРИПТОВ -> КРИТЕРИЙ УМЕНИЙ и проверяешь убеждение…
P.S: У меня стоит Hordes of the Underdark, а у тебя ведь Shadows of Undrentide может что не сойдется…но вроде и должно.
Daemonix
Jul 22 2005, 15:33
Спасибо, Dik Morris!
Вот ещё что, я тут на днях придумал такой скрипт, хотя и уверен, что его кто-то до меня уже придумал.
Так вот: вам часто приходится делать города в своих модулях? И не все же неписи в городах смогут сказать что-то важное. Обычно их реплики сводятся к одной строчке. И мне в голову пришла мысль:
как можно сделать так, чтобы непись произносил не одну и ту же короткую реплику всё время, а разные?
Объяснение просто:
Берём непися, создаём ему разговор: а там, в разговоре делаем ему 4(можете сколько угодно) разных приветствия.
Я пробовал на таких:
-Привет!
-Тебе нравится наш город!
-Похоже ты не местный!
-Я бы посоветовал тебе пойти в таверну!
И привязываем к каждому приветствию условие появления:
CODE |
int StartingConditional() {
// Вместо 4 ставим своё кол-во реплик if(Random(4) >= 1) return FALSE;
return TRUE; } |
Вот. Я всё проверил и вроде пашет. Но лучше всего увеличьте число реплик с 4 до 8-10.
Dik Morris
Jul 22 2005, 16:00
Daemonix попробовал я твой скрипт

, все вроде нормально но вот иногда НПС молчит и приходится повторно щелкать, напрягает знаете ли

...Но можно делать проверкой, случайно (ТЕКСТ ПОЯВ. ПРИ СЛУЧАЙНО) так тоже нечего, и не надо каждый раз другие скрипты делать т.к не у всех ведь неписей одинаковое кол-во фраз, у кого-то больше, у кого-то меньше.
Daemonix
Jul 22 2005, 16:16
Да, это верно. Надеюсь, можно будет что-нибудь доработать. А такой простой скрипт можно и в ScriptWizard'е сделать.
Zirrex
Jul 22 2005, 21:06
Daemonix хм... а зачем же "Random(4) >= 1"? У тебя получается, что говорить НПС будет только в одном случае. Лучше уж сделать тогда один скрипт, а диалог выполнить на токене. В скрипте расписать переключатель, и каждый раз НПС будет говорить разные фразы, причем молчать не будет никогда.
Daemonix
Jul 22 2005, 21:20
QUOTE |
ZirrexЛучше уж сделать тогда один скрипт, а диалог выполнить на токене. В скрипте расписать переключатель, и каждый раз НПС будет говорить разные фразы, причем молчать не будет никогда. |
В смысле? Пожалуйста, расскажи поподробнее.
Добавлено в [mergetime]1122056496[/mergetime]
З.Ы. Не очень хорошо разбираюсь в токенах.
Добавлено в [mergetime]1122056598[/mergetime]
З.З.Ы. Так и думал, что все сразу раскритикуют.
Dik Morris
Jul 23 2005, 08:08
Daemonix,
QUOTE |
Так и думал, что все сразу раскритикуют. |
Критика то необходима... куда уж без нее.
И вообще лучше делать не просто безмозглые фразы, а фразы со смыслом, пусть и не большим

.
Простой пример:"Немедленно оденьтесь!" (Текст появ. при - вы без одежды)
"Господи! Да вы ранены!" (Текст появ. при - вы ранены)
"Нечего себе мускулы!" (Текст появ. при, проверка на силу)
"Ух, да ты еще совсем молодой!" (Текст появ. при - проверка на возраст)
"Здорово орк!" (Текст появ. при - раса)
"Привет варвар!" (Текст появ. при - класс)
Все это очень легко, и делается в визарде, и несомненно приукрасит диалог...
З.Ы: если нужны скрипты на одежду и ранение тогда скажи.
Валеско
Jul 23 2005, 08:42
QUOTE |
"Ух, да ты еще совсем молодой!" |
я бы заменил на что-то типа:
"Ей, парень, привет!"
"Юноша, отойдите с дороги"
и "Куда прешь, дедуган?!" при большом возрасте.
Daemonix
Jul 23 2005, 12:14
Dik Morris,
QUOTE |
З.Ы: если нужны скрипты на одежду и ранение тогда скажи. |
Да, кстати, пригодились бы, и вообще, хорошая идея!
Dik Morris
Jul 23 2005, 13:01
Daemonix!Блин я тогда напутал что то извини в общем, дал тебе два одинаковых скрипта

, сорри, вот исправил:
Вот скрипт если игрок ранен: (ставится на Текст. появ при)
Neverwinter Script Source |
int StartingConditional() { if ((GetLocalInt(OBJECT_SELF,"counter")!=3) && (GetLocalInt(OBJECT_SELF,"counter")!=1)) { int roll=d100(); if (roll>60) { int CurrentHP=GetCurrentHitPoints(GetPCSpeaker()); int MaxHP=GetMaxHitPoints(GetPCSpeaker()); if ((MaxHP/2)>=(CurrentHP)) { return TRUE; } return FALSE; } return FALSE; } return FALSE; } |
А, скрипт если игрок не одет: (ставится на Текст. появ при)
Neverwinter Script Source |
int StartingConditional() { if ((GetLocalInt(OBJECT_SELF,"counter")!=1) && (GetLocalInt(OBJECT_SELF,"counter")!=2)) { int roll=d100(); if (roll>33) { object oItem=GetItemInSlot(INVENTORY_SLOT_CHEST,GetPCSpeaker()); if(!GetIsObjectValid(oItem)) { return TRUE; } return FALSE; } return FALSE; } return FALSE; } |
Daemonix
Jul 23 2005, 13:11
Dik Morris!А не знаешь, как вообще сделать так, чтобы непись, которого ты побьёшь, переставал драться и начинал диалог?
Добавлено в [mergetime]1122113847[/mergetime] Кстати говоря, спасибо!
Zirrex
Jul 23 2005, 14:43
Daemonix, необходимо, чтобы он перед боем сохранял на переменную значение твоей полной жизни, и когда ее бы оставалось мало, то твоей персонаж автоматически падал бы на колени, а НПС через некоторое время заводил диалог.
Посмотри здесь скрипт Айвана
Скрипты. Том III.
Самый простой способ вывести сообщение по токену:
Neverwinter Script Source |
int StartingConditional() { string sMessage; int iRandom = d6();
switch (iRandom) { case 1: sMessage = "Сообщение 1"; break; case 2: sMessage = "Сообщение 2"; break; case 3: sMessage = "Сообщение 3"; break; case 4: sMessage = "Сообщение 4"; break; case 5: sMessage = "Сообщение 5"; break; case 6: sMessage = "Сообщение 6"; break; }
SetCustomToken(10000, sMessage); return TRUE; } |
В Диалоге НПС создаешь его ответ таким образом:
Neverwinter Script Source |
<CUSTOM10000> |
В каждом варианте переключателя можешь сделать небольшой скриптик, который будет проверять условия вывода сообщения. Например, как описано выше, персонаж молод, не одет, дурно пахнет и т.д. Правда, придется убрать случайность, чтобы уже была проверка на условия.
Dik Morris, а зачем ты постоянно в скриптах используешь переменные? Они у тебя хоть изменяются или так и остаются равными нулю? Если остаются, какой в них прок, только усложнение простого скрипта. Те же скрипты, только проще:
Neverwinter Script Source |
int StartingConditional() { object oPC = GetPCSpeaker();
int CurrentHP = GetCurrentHitPoints(oPC); int MaxHP = GetMaxHitPoints(oPC) / 2;
if (d100() > 60) { if (MaxHP >= CurrentHP) { return TRUE; } return FALSE; } return FALSE; } |
Neverwinter Script Source |
int StartingConditional() { object oPC = GetPCSpeaker(); object oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
if (d100() > 33) { if (!GetIsObjectValid(oItem)) { return TRUE; } return FALSE; } return FALSE; } |
Daemonix
Jul 24 2005, 18:13
Спасибо, Zirrex, потом попробую.... А никто не знает, как делать диалог неотменяемым, т.е. жмёшь на ESC и всё равно остаёшься в нём? А то его очень надо дослушать.
-fenix-
Jul 24 2005, 18:18
Daemonix, ставишь в св-вах непися прям на первой заклатке, на против диалога, галочку "без прерывания".
Аваддон
Jul 24 2005, 19:26
-fenix- Ух ты! А я думал это для того, чтобы другим игрокам во время диалога, при кликах на НПС писалось что объект занят
Daemonix
Jul 24 2005, 20:51
Во, класс! А я чё-то ещё не могу найти в предметах, интерьере, ландшафтах такую фигню: большие ворота (локация типа "деревенский"). Не подскажете, где мне их найти?
Добавлено в [mergetime]1122227532[/mergetime]
Такие ворота были и в Игре в эпизоде 3 (если не ошибаюсь) на входе в город Лускан.
QUOTE (-fenix- @ Jul 24 2005, 21:18) |
Daemonix, ставишь в св-вах непися прям на первой заклатке, на против диалога, галочку "без прерывания". |
И что? Хочешь сказать не будет прерываться?

Будет. Надо принудилово ставить катсцену и стартовать диалог. Потом отменять в диалоге катсцену. Если уж учите чему, то проверяйте хотя бы.
-fenix-
Jul 24 2005, 21:37
В особенностях есть несколько ворот!
QUOTE (Daemonix @ Jul 24 2005, 20:51) |
Такие ворота были и в Игре в эпизоде 3 (если не ошибаюсь) на входе в город Лускан. |
Это где, в ПЛ? Тогда наверно там они в хаке.
QUOTE (Aiwan @ Jul 24 2005, 21:35) |
что? Хочешь сказать не будет прерываться? biggrin.gif Будет. Надо принудилово ставить катсцену и стартовать диалог. Потом отменять в диалоге катсцену. Если уж учите чему, то проверяйте хотя бы. |
Я дог глубины души был уверен, что он не будет прерываться

(хотя не когда не пробовал

)
Daemonix
Jul 24 2005, 21:37
QUOTE |
адо принудилово ставить катсцену и стартовать диалог. Потом отменять в диалоге катсцену. |
А это как?