DBColl
Dec 20 2004, 20:17
Ага, игрока...

Как ты подменишь его?

Полиморфом? Причем именно с теми статами, навыками и фитами...
maxxim
Dec 21 2004, 20:14
QUOTE (Raven @ Dec 17 2004, 00:03) |
Tarron, спроси maxxim`а - он тож на Нордоке вроде... или бери Seviss - он все-таки посовременнее и полегче |
не понял проблеммы в нордоке система лута достаточно непохая, (хотя я та и не разобрался в ней). падает труп мода. он юзейбл. в нем лут через какоето время тр3уп исчезает вместе с лутом. что очень хорошо июо после жуков не каждый подбирает все вещи. и есть сделать мешки то через как4оето время поле будет забито мусором а на каждуюу локу ставить мусорщика жирно так как у них все скрипты на хертбите висят серва лагает как дурной. я мусорщиков в городах ставлю и вастерских там де мнго мусора а решта уже проблеммы индейцев.
MasterMage
Dec 21 2004, 20:55
Можно подменить...копируешь, только один будет с крыльями...все диалоги копируешь и квесты... и всееееееее
Нет, там проще был способ, полазьте по скриптам ваулта
DBColl
Dec 22 2004, 12:21
QUOTE (MasterMage @ Dec 21 2004, 19:55) |
Можно подменить...копируешь, только один будет с крыльями...все диалоги копируешь и квесты... и всееееееее |
Мда. Видно ты слабовато представляешь, что представляет из себя копирование чара. Попробуй это сделать и чтобы у тебя еще и получилось, и заработало... Я РЕСПЕКТну

и скажу, что ньюб в скриптинге...
MasterMage
Dec 22 2004, 13:08
DBColl 
Лучше подскажи, как в диалогах делать фразы таким серым цветом, чтоб они перебрасывали потом на такую же точно фразу в этом же диалоге, но в другое место. Уффф. И почему, когда прав. кнопкой нажимаю, слово "связать" не подсвечено(там где вырезать, копировать и т.д.)? Непонятно...
DBColl
Dec 22 2004, 14:19
Есть пункт в выпадающем меню Copy As Link. Смотри его

.
Goblin
Dec 22 2004, 14:48
Как сделать чтобы в строке диалога с НПЦ часть текста была другого цвета (например красным) ?
Клемент Астилон
Dec 22 2004, 15:30
Через тег <cRGB></c>
По-моему так... Только надо особые знаки. На Ваулте был ексе генерирующий такие теги. Поищи сам. У меня где-то было, если найду кину ссылку.
DBColl
Dec 22 2004, 15:36
Щелкни правой кнопкой в окне редактирования строки диалога. Всплывет 2 пункта, что-то типа Tokens и SpellChecking. Нажимай Tokens. Вставляй <StartHighlight(синий)/Action(зеленый)/Check(красный)>выделяемый текст</Start>. Все.
CODE |
object oPC = GetEnteringObject(); if(GetIsPC(oPC) && !(GetXP(oPC)) && !GetIsDM(oPC)); { SetXP(oPC, 1); // Removing PC's Items In Slots for(i=0; i<=13; i++){ oItem = GetItemInSlot(i, oPC); DestroyObject(oItem); } // Removing PC's Gold int nAmount = GetGold(oPC); AssignCommand(oPC, TakeGoldFromCreature(nAmount, oPC, TRUE));
// Removing PC's Inventory. oItem = GetFirstItemInInventory(oPC); while(oItem!=OBJECT_INVALID){ DestroyObject(oItem); oItem = GetNextItemInInventory(oPC);
CreateItemOnObject("item004", oPC); CreateItemOnObject("item", oPC); CreateItemOnObject("item", oPC); CreateItemOnObject("item", oPC); CreateItemOnObject("item001", oPC); CreateItemOnObject("item003", oPC); } }
|
Я точно знаю что скрипт кривой

,пожалуйста помогите разобратся что в нем не так?
DBColl
Dec 23 2004, 12:06
А что он должен делать-то? У тебя странная подача вопроса...
Ну как я понял - это скрипт на OnClient Enter. Он дает вновь прибывшему игроку 1 XP, уничтожает его вещи и дает свои...
У меня шас нет толчка под рукой, но
Neverwinter Script Source |
if(GetIsPC(oPC) && !(GetXP(oPC)) && !GetIsDM(oPC)); { SetXP(oPC, 1); // Removing PC's Items In Slots for(i=0; i<=13; i++){ oItem = GetItemInSlot(i, oPC); DestroyObject(oItem); } |
Незнаю, можно ли проверять наличие какого-нить опыта с помощью
Neverwinter Script Source |
!(GetXP(oPC)) |
но в любом случае
Neverwinter Script Source |
if(GetIsPC(oPC) && !(GetXP(oPC)) && !GetIsDM(oPC)); { SetXP(oPC, 1); |
Тут нада скобочку закрыть после SetXP (oPC,1);
Lemegeton
Dec 23 2004, 14:26
Лито:
В таких условиях можно лишь предпологать вариант коррекции ошибок, но я попробую. Пункт первый - ошибка стопудово. Исправление - есть мое IMHO. Остальные - по усмотрению и необходимости в скрипте.
1. Бяку нашел. Сразу. Ты удаляешь все предметы в инвентаре и в этом цикле создаешь еще ЧЕТЫРЕ новых!!! Посмотри, где скобочку не закрыл...
IMHO:
Neverwinter Script Source |
oItem = GetFirstItemInInventory(oPC); while(oItem!=OBJECT_INVALID){ DestroyObject(oItem); oItem = GetNextItemInInventory(oPC);
CreateItemOnObject("item004", oPC); CreateItemOnObject("item", oPC); CreateItemOnObject("item", oPC); CreateItemOnObject("item", oPC); CreateItemOnObject("item001", oPC); CreateItemOnObject("item003", oPC); } |
Скорее всего, должно быть:
Neverwinter Script Source |
oItem = GetFirstItemInInventory(oPC); while(oItem!=OBJECT_INVALID){ DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); } CreateItemOnObject("item004", oPC); CreateItemOnObject("item", oPC); CreateItemOnObject("item", oPC); CreateItemOnObject("item", oPC); CreateItemOnObject("item001", oPC); CreateItemOnObject("item003", oPC); |
Обрати внимание на закрывающую скобку, перенесенную с последней строчки на пятую.
2. С помощью
Neverwinter Script Source |
!(GetXP(oPC)) |
ты проверяешь НЕ НУЛЕВОСТЬ экспы, т.е. скрипт сработает, только если у игрока не 0 экспы. Если так и надо, тогда ОК, но конструкция явно "дикая" (wild expression

). Лучше, наверно, !(GetXP(oPC)) перевести в (GetXP(oPC)>0). Хотя первый вариант явно быстрее.
Скорее всего, CreateItem'ы надо вынести за условие. Чтобы они давались и "нулевым" входящим.
3. В коде:
Neverwinter Script Source |
oItem = GetItemInSlot(i, oPC); DestroyObject(oItem); |
Надо бы проверять на valid. Вроде:
Neverwinter Script Source |
oItem = GetItemInSlot(i, oPC); if (oItem != OBJECT_INVALID) {DestroyObject(oItem);}; |
На всякий случай. Иногда, почему-то слетает. Несмотря на все уверения.
Пока только это.

З.Ы. Вопросы надо задавать яснее. Пока
Raven не намекнул, что это OnClientEnter, я тоже не врубался, что нужно.
Брр.. из-за этой пунктуации сразу не врубился
DBColl
Dec 23 2004, 15:54
Молодцы ребята!

РЕСПЕКТ!
baskan
Dec 23 2004, 16:42
Вот у меня вопросик))Как игровому персу присобачить какиенибудь крылья, или хвост?
DBColl
Dec 23 2004, 16:59
Никак, наверное. Это рассовый признак.
Lemegeton
Dec 23 2004, 17:35
Как так - "рассовый"? Хвост может быть у каждого!
Только тулсет этого, похоже, не позволяет (вернее, шибко геморно)...
VantallA
Dec 23 2004, 17:39
Я знаю, что когда заходишь под ДМом то можно контролить кого угодно, а можно ли тогда в это время какой-нить консольной командой(если такая есть) сохранить перса??
И ещё, чем мона править файлы персов? те которые по моему в локалваулте хранятся?
MasterMage
Dec 23 2004, 18:15
DBColl Мну не понимать...
Каком всплывающем меню...И у мну на русском...
Добавлено в [mergetime]1103815058[/mergetime] и еще ..
Пробую поставить с помощью мастера скриптов в диалог ограничение на характер(злой, нейтрал или хор.), но вместо того, чтоб правильно работать, диалог всегда обрывается на месте фразы со скриптом......дело ясное, что дело темное...во
DBColl
Dec 23 2004, 19:07
QUOTE (VantallA @ Dec 23 2004, 16:39) |
И ещё, чем мона править файлы персов? те которые по моему в локалваулте хранятся? |
Есть на ваульте прога Leto называется. Ищи.
QUOTE (MasterMage @ Dec 23 2004, 17:15) |
Мну не понимать... Каком всплывающем меню...И у мну на русском... |
Во-первых, ставь тулсет на инглише, ибо давно известно, что тул криво работает на руссише.
Во-вторых, по делу. Ты должен сначала сделать Copy строки на которую хочешь перескочить, затем ставишь курсор на ту строку, с которой хочешь перескакивать в это "другое" место и по правой мыши в менюшке нажимаешь Copy As Link (или в твоем случае "Связать"). Вот и все.
В будущем лучше буду ставить вопрос
CODE |
void main() { object oPC = GetEnteringObject(); if(GetIsPC(oPC) && (GetXP(oPC)>0) && !GetIsDM(oPC)) { SetXP(oPC, 1); for(i=0; i<=13; i++){ oItem = GetItemInSlot(i, oPC); if (oItem != OBJECT_INVALID) {DestroyObject(oItem);}; } int nAmount = GetGold(oPC); AssignCommand(oPC, TakeGoldFromCreature(nAmount, oPC, TRUE)); oItem = GetFirstItemInInventory(oPC); while(oItem!=OBJECT_INVALID){ DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); } } } |
- это то что я переписал
CODE |
for(i=0; i<=13; i++){ |
- А в этой строчке он ругается
+не могу нигде присобачить создание итемов, вобщем -
DBColl
Dec 23 2004, 20:35
QUOTE (Лито @ Dec 23 2004, 19:07) |
if (oItem != OBJECT_INVALID) {DestroyObject(oItem);}; |
Убери из этой строчки последнюю точку с запятой.
Добавлено в [mergetime]1103824302[/mergetime]
QUOTE (Лито @ Dec 23 2004, 19:07) |
+не могу нигде присобачить создание итемов, вобщем - |
Создание итемов присобачь в конце скрипта, перед последней фигурной скобкой.
QUOTE |
Убери из этой строчки последнюю точку с запятой. |
все равно на той же строчке та же ошибка
Аваддон
Dec 23 2004, 21:13
QUOTE (Лито @ Dec 23 2004, 20:07) |
oItem = GetItemInSlot(i, oPC); if (oItem != OBJECT_INVALID) {DestroyObject(oItem);}; |
Странно вы как то наличие предмета проверяете...
А может лучше так:
if(GetIsObjectValid(oItem)) ???
DBColl
Dec 23 2004, 21:19
Лито Приведи текст ошибки что ль?..
очень прошу, может вы все готовое выложите в одном коде, а то я уже замучался, не работает, буду очень признателен

у меня тулсет русский к сожелению

пишет вот это - переменная, определенная без типа
MasterMage
Dec 23 2004, 22:27
Пнятненько
Только вот я не разберусь на инглише.... Хоть и знаю его, но на русском понятней, особенно пока учусь.
Но теперь понял и попробую....
QUOTE (Лито @ Dec 23 2004, 21:31) |
у меня тулсет русский к сожелению пишет вот это - переменная, определенная без типа |
Добавь сразу после
Neverwinter Script Source |
object oPC = GetEnteringObject(); |
строчку
Neverwinter Script Source |
int i; |
Пиши скрипты не в тэгах CODE, а в тэгах NSS. Для этого они на этом форуме и реализованы.
И научись скрипты писать с соблюдением правил лестницы. То есть делай отступы в виде 2-4 пробелов в начале КАЖДОЙ новой строки в блочных операторах. И никогда не стоит пренебрегать пробелами. Иначе ты еще ОЧЕНЬ долго будешь допускать мелкие синтаксические ошибки...
То есть твой скрипт должен был бы выглядить следующий образом (ошибки скрипта я не исправлял, мне некогда их искать):
Neverwinter Script Source |
void main() { object oPC = GetEnteringObject(); int i;
if (GetIsPC(oPC) && (GetXP(oPC) > 0) && !GetIsDM(oPC)) { SetXP(oPC, 1);
for (i = 0; i <= 13; i++) { oItem = GetItemInSlot(i, oPC); if (oItem != OBJECT_INVALID) DestroyObject(oItem); }
int nAmount = GetGold(oPC); AssignCommand(oPC, TakeGoldFromCreature(nAmount, oPC, TRUE));
oItem = GetFirstItemInInventory(oPC); while (oItem != OBJECT_INVALID) { DestroyObject(oItem); oItem = GetNextItemInInventory(oPC); } } } |
Заработал
Спасибо всем кто принял участие.Большое!

PS На будущее...у меня есть еще несколько подобных вопросов, может мне стоит их писать в топ "скрипты"?
QUOTE (Лито @ Dec 24 2004, 12:27) |
PS На будущее...у меня есть еще несколько подобных вопросов, может мне стоит их писать в топ "скрипты"? |
Да, в тему с проблемами скриптов. Пиши туды.
MasterMage
Dec 24 2004, 11:33
Aiwan Хех, а вот и ты....
DBColl
у мну получилось... Теперь буду диалоги осваивать...
Может кто поможет мне понять, каким скриптом запустить триггер встречи...
Хочу, чтоб зомби появлялись только ночью...
А вот у меня вопрос не по скриптам , я создал предмет у торговца (еда) но у него она стоит 1gp как сделать так чтобы она стоила 10?
PS помоему абсолютная глупость

но никак не могу с этим разобратся
Lemegeton
Dec 24 2004, 12:05
Лито:
Стоимость товара у торговца зависит от многого. В основном, от процентной наценки торговца и от умения персонажа торговаться.
Но и у предмета есть стоимость (в самой первой вкладке в свойствах предмета, слева-сверху). Она зависит от предмета (точнее, от того, как она прописана на предмет в файле 2da

), но есть и параметр Дополнительной стоимости (вроде непосредственной и необоснованной наценки) он расположен как раз под "зарядами" на той же самой первой вкладке. Увеличь ее на сколько нужно.
Rezident
Dec 24 2004, 15:28
Ув. сторжилы форума и просто матера. Вопрс. Как сделать диалог кторый прозвучас 1 раз больше не повторияется. Те если перс поговорит с НПС на какой либо ветке разговора, то эта ветка больне никогда ему доступна не будет. Она просто исчезнет или закроется из диалога. Как это сделать?
Lemegeton
Dec 24 2004, 16:19
На "Текст появляется при" ветки разговора, которая должна появится лишь однажды:
Neverwinter Script Source |
int StartingConditional() { int iResult; iResult = GetLocalInt(OBJECT_SELF, "SpeakNoMore")>0; SetLocalInt(OBJECT_SELF, "SpeakNoMore", 1) return iResult; } |
Если это для Шарда, то не годится. При рестарте локальные переменные сбрасываются. Их там надо в БД прописывать.
Rezident
Dec 24 2004, 17:23
А вставлять то его ку да этот скрипт? В какой слот в чьих свойствах?
DBColl
Dec 24 2004, 17:25
Универсально.
Neverwinter Script Source |
int StartingConditional() { if (GetLocalInt(GetPCSpeaker(), GetTag(OBJECT_SELF) + "_SpeakNoMore") == 0) { SetLocalInt(GetPCSpeaker(), GetTag(OBJECT_SELF) + "_SpeakNoMore", 1) return TRUE; } return FALSE; } |
Первой в диалоге ставится строка, которая должна появится в первый раз и единожды. На нее и вешается этот скрипт.
На вотрую строку скрипта не надо вообще.
Lemegeton
Dec 24 2004, 17:26
QUOTE |
На "Текст появляется при" ветки разговора, которая должна появится лишь однажды: |
Т.е. на проверку появления текста. В свойствах строки диалога, конечно!
DBColl:
Да, так получше будет. Постоянно забываю разницу скриптов и обычных языков программирования...
DBColl
Dec 24 2004, 17:28
QUOTE (Rezident @ Dec 24 2004, 16:23) |
А вставлять то его ку да этот скрипт? В какой слот в чьих свойствах? |
На строку в диалоге (закладка "TextAppearsWhen" рус. "Текст появляется при" ).
Добавлено в [mergetime]1103898638[/mergetime]
QUOTE (Lemegeton @ Dec 24 2004, 16:26) |
Да, так получше будет. Постоянно забываю разницу скриптов и обычных языков программирования... |
Ничего. Немного практики в скриптах и мыслить станешь чуть по-другому

. Придумаешь еще кучу всяких ноу-хау удобных фишек

.
Lemegeton
Dec 24 2004, 18:24
Такой вот вопросичек. А чем лучше на игрока вешать? Тут, вроде, кода куда больше, а видимых преимуществ - нет?!
DBColl
Dec 24 2004, 18:41
QUOTE (Lemegeton @ Dec 24 2004, 17:24) |
Такой вот вопросичек. А чем лучше на игрока вешать? Тут, вроде, кода куда больше, а видимых преимуществ - нет?! |
А тем, что сохраняя игрока в localvault в случае шарда, или же в save в случае сингла, переменные не падают.

К тому же с этими переменными ты хоть куда! Хоть на другой шард (если 2 дружественных шарда

), хоть в другой модуль в синглах.
Добавлено в [mergetime]1103903775[/mergetime] Хотя конечно в сингле переменные на неписях не падают при SAVE.
Lemegeton
Dec 24 2004, 19:02
Оба-на! Респект. Правда теперь упереписываюсь
DBColl
Dec 24 2004, 19:52
Еще один финт. Если деаешь сингл, не сохраняй локалы на айтемах. Они летят при SAVE/LOAD. С остальными объектами все путем

.
MasterMage
Dec 24 2004, 23:14
АУУУУУ,..... Как поставить запуск встречи с зомби на ночь только....??????
Мну забыли
Rezident
Dec 25 2004, 00:12
И еще подскажите пожалуста как при убийстве допустим хорошего добропорядочного гражданина у убийцы карма сместилась в сторону злой или хаотичный и соответсвенно при помощи кому нибудь карма сместилась в сторону хороший? Нужна просто позарез такая шутка.
2 MasterMage ....
Neverwinter Script Source |
//::////////////////////////////////////////////// //:: Copyright © 2004 WRG! //:: OnEnter //::////////////////////////////////////////////// /* Скрипт запускает Енкаучер только в ночь Автор идеи DBColl */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 26.12.2004 //::////////////////////////////////////////////// void main() { object oPC = GetEnteringObject(); if (GetLocalInt(OBJECT_SELF, "Night")) { return; } if (GetIsPC(oPC)) { if (GetIsNight() && !GetLocalInt(OBJECT_SELF, "Night")) { SetEncounterActive(TRUE); SetLocalInt(OBJECT_SELF, "Night", TRUE); DelayCommand(300.0, SetLocalInt(OBJECT_SELF, "Night", FALSE)); } if (GetIsDay() || GetIsDawn() || GetIsDusk()) { SetEncounterActive(FALSE); } } } |
Добавлено в [mergetime]1103924117[/mergetime]
QUOTE (Rezident @ Dec 25 2004, 03:12) |
И еще подскажите пожалуста как при убийстве допустим хорошего добропорядочного гражданина у убийцы карма сместилась в сторону злой или хаотичный и соответсвенно при помощи кому нибудь карма сместилась в сторону хороший? Нужна просто позарез такая шутка. |
В принципе это реализовано стандартными средствами в НВН.
Предлагаю на простые вопросы не отвечать, а просто описывать - как это делается (типа : "Вешаешь на строку диалога скрипт, в котором проверяешь наличие локальной переменной, если ее нет - вешаешь ее на чара и return TRUE, а если есть - тада False"), чтобы человек сам скрипт писал, а то ж не научатся ничему
Lemegeton
Dec 25 2004, 13:17
Raven: Нифига. Беспонтово. Я по себе помню. Пока код не посмотрю, всякие намеки практически бесполезны. Неделю убил, пока не смог коротенько писать. Пока опыт не будет накоплен на этом деле, нужно читать готовые скрипты. Особенно, если они написаны мастерами.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.