Лучше юзать ЮзерДеф с проверкой игрока в локации с НПС.
QUOTE (Aiwan @ Jan 8 2006, 01:23) |
Лучше юзать ЮзерДеф с проверкой игрока в локации с НПС. |
в начале ХБ дефолтового это есть уже.
Neverwinter Script Source |
// * if not runnning normal or better Ai then exit for performance reasons if (GetAILevel() == AI_LEVEL_VERY_LOW) return; |
-fenix-
Jan 8 2006, 02:23
Nashman, во первых, тебе уже сказали, во вторых, помоему задержка между действиями маловата, а иногда слишком большая. Да и удобнее юзать DelayCommand.
QUOTE (Kavin @ Jan 7 2006, 20:52) |
Ой... И Encounter-ы тоже нельзя?.. |
Тоже, как и тригеры!
NedWarN
Jan 8 2006, 06:30
Хелп, Мастера Скриптов.
У меня бешанная идея создать скрипт. Нападобии Диабло.
Чтобы можно было вставить Камень в Шмотку и она изменилась.
А думаю это невозможно. Помогите.
Dik Morris
Jan 8 2006, 09:54
А почему бы не сделать так:
На оружие вешаешь особое свойство, при вызывании которого начинался бы диалог с оружие.
Там, строчки появ. в зависимости от тагов камней, потом на Action Takens можно повесить скрипт добавление свойства определенной вещи. (Функцию не помню, глянь в НотУ у кузнеца, во 2 компании.)
Просто и понятно.

Создаеться способом описанным выше макс. за 5 мин. Дерзай.
StalkerDtN
Jan 8 2006, 13:07
Всем привет!
Плз, подскажите как работает "сумка просителя" в игре.
QUOTE (NedWarN @ Jan 8 2006, 06:30) |
Хелп, Мастера Скриптов. У меня бешанная идея создать скрипт. Нападобии Диабло. Чтобы можно было вставить Камень в Шмотку и она изменилась. А думаю это невозможно. Помогите. |
можно конечно вариант Дика, но это не очень удобно.
На самом деле все проще и более функционально.
В 2да прописываются новые заклы, на камни эти заклы вешаются. Скрипт заклов - добавление свойств вещи.
Посмотри стандартные заклы.. например Light. Можно наложить его на вещь, можно на существо.
Neverwinter Script Source |
//:://///////////////////////////////////////////// //:: Light //:: NW_S0_Light.nss //:: Copyright © 2001 Bioware Corp. //::////////////////////////////////////////////// /* Applies a light source to the target for 1 hour per level
XP2 If cast on an item, item will get temporary property "light" for the duration of the spell Brightness on an item is lower than on the continual light version.
*/ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Aug 15, 2001 //::////////////////////////////////////////////// //:: VFX Pass By: Preston W, On: June 22, 2001 //:: Added XP2 cast on item code: Georg Z, 2003-06-05 //:://////////////////////////////////////////////
#include "x2_inc_spellhook"
void main() {
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run // this spell. if (!X2PreSpellCastCode()) { return; }
//Declare major variables object oTarget = GetSpellTargetObject();
int nDuration; int nMetaMagic;
// Handle spell cast on item.... if (GetObjectType(oTarget) == OBJECT_TYPE_ITEM && ! CIGetIsCraftFeatBaseItem(oTarget)) { // Do not allow casting on not equippable items if (!IPGetIsItemEquipable(oTarget)) { // Item must be equipable... FloatingTextStrRefOnCreature(83326,OBJECT_SELF); return; }
itemproperty ip = ItemPropertyLight (IP_CONST_LIGHTBRIGHTNESS_NORMAL, IP_CONST_LIGHTCOLOR_WHITE);
if (GetItemHasItemProperty(oTarget, ITEM_PROPERTY_LIGHT)) { IPRemoveMatchingItemProperties(oTarget,ITEM_PROPERTY_LIGHT,DURATION_TYPE_TEMPORARY); }
nDuration = GetCasterLevel(OBJECT_SELF); nMetaMagic = GetMetaMagicFeat(); //Enter Metamagic conditions if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% }
AddItemProperty(DURATION_TYPE_TEMPORARY,ip,oTarget,HoursToSeconds(nDuration)); } else { effect eVis = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20); effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); effect eLink = EffectLinkEffects(eVis, eDur);
nDuration = GetCasterLevel(OBJECT_SELF); nMetaMagic = GetMetaMagicFeat(); //Enter Metamagic conditions if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_LIGHT, FALSE));
//Apply the VFX impact and effects ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, HoursToSeconds(nDuration)); }
} |
нюансы конечно есть, например разделение на типы вещей (оружие, броня и тд), чтобы не вешать +дамаг на армор и прочее. Но это уже твоя забота.
можно даже сделать "камнедер", который будет их обратно вынимать. Сделать возможность вставки более чем 1 камня.. Ну короче наворотить можно чего хошь.
можно конечно не заклами, а просто уникальным свойством камня. МБ тебе так проще будет, но суть одна: Вешать на камни это (наложение), а не на вещи.
NedWarN
Jan 9 2006, 09:58
Dik Morris
Извени но ты не представляеш, как диалоги меня достали.
Lex
А я неумею Прописывать 2да, блин что делать.
И еще как сделать так чтоб при использовании закла, игрок стоял смирно и ничо не делал.
-fenix-
Jan 9 2006, 12:03
QUOTE (NedWarN @ Jan 9 2006, 10:58) |
А я неумею Прописывать 2да, блин что делать. |
Топать в форум по 2да и просить/спрашивать/учиться там!
Nashman
Jan 9 2006, 13:53
Привет,
Нужен совет!!
У меня есть сидячии НЕПИСИ. Можно им задать какую-нить анимацию. И можно их заставить разговаривать между собой не вставая?
Dik Morris
Jan 9 2006, 14:01
QUOTE |
Можно им задать какую-нить анимацию. |
Hacчет анимации это наврятли, вроде невозможно.
QUOTE |
можно их заставить разговаривать между собой не вставая? |
Neverwinter Script Source |
// The caller will immediately speak sStringToSpeak (this is different from // ActionSpeakString) // - sStringToSpeak // - nTalkVolume: TALKVOLUME_* void SpeakString(string sStringToSpeak, int nTalkVolume=TALKVOLUME_TALK) |
QUOTE |
Извени но ты не представляеш, как диалоги меня достали. |
Учись правописанию!
NedWarNпосмотри мой модуль...
сделан он для турниров, но принцип вендора там именно "через камушки"...
http://forums.karamba.ru/index.php?act=Att...pe=post&id=1301зы скрипт который тебе нужен: vns_vswitch_use
NedWarN
Jan 10 2006, 01:45
Vanes
Sps/ Буду глядеть.
Nashman
Jan 10 2006, 04:09
Привет,
Подскажите:
- Я сделал так, что бы когда из сидячим НПС хочешь поговорить - он встает говорит, что бы ПС отвязался, а потом обратно садится. Все хорошо, но когда он садится, то сидя постоянно поворачивается в мою сторону. Что можно из этим сделать?
ПС: По поводу Фоновой музики, в функциях нужно указать номер фоновой мелодии, а как его узнать(номер)?
Dik Morris
Jan 10 2006, 08:37
QUOTE |
. Все хорошо, но когда он садится, то сидя постоянно поворачивается в мою сторону. |
Была подобная проблема.

Но чессно сказать уже не помню как решил, попробуй скажем почистить акции у NPC (на ActionTakens последней строчки:
Neverwinter Script Source |
// Clear all the actions of the caller. // * No return value, but if an error occurs, the log file will contain // "ClearAllActions failed.". // - nClearCombatState: if true, this will immediately clear the combat state // on a creature, which will stop the combat music and allow them to rest, // engage in dialog, or other actions that they would normally have to wait for. void ClearAllActions(int nClearCombatState=FALSE) |
А вообще вот
ТУТ разбирается подобная ситуация.
Насчет музыки.
Открываешь ambientmusic.2DA и смотришь там, например:
QUOTE |
1 61842 mus_ruralday1 **** **** **** ****
|
PS: вопросы скорее одиночного типа, в следующий раз повнимательнее плиз.
Salasar
Jan 11 2006, 17:57
У меня такая ситуация я хочу, чтобы когда герой входил в триггер дверь в комнате открывалась, оттуда выходил НПС подходил к герою, вступал с ним в разговор и, по окончании разговора становился хенчменом героя.
Dik Morris
Jan 11 2006, 18:27
Salasar
QUOTE |
У меня такая ситуация я хочу, чтобы когда герой входил в триггер дверь в комнате открывалась, оттуда выходил |
Такие скрипты разбираются на каждой странице форума, используй поиск.

(И + функции:
Neverwinter Script Source |
// Cause the action subject to open oDoor void ActionOpenDoor(object oDoor) |
Neverwinter Script Source |
// Set the locked state of oTarget, which can be a door or a placeable object. void SetLocked(object oTarget, int bLocked) |
Для открытия двери.)
QUOTE |
окончании разговора становился хенчменом героя. |
Есть тема: (В этом разделе форума)
"
Скрипты для новичков" там 100% найдеться ответ на твой вопрос.

Вообще народ, лучше перед тем как что нибуть спросить, не надо лениться, а использовать хорошую такую кнопочку,
ПОИСК.
PS: хотя еще лучше начать разбираться самому, все равно так как тебе нужно никто не сделает, да и куда приятнее все писать самостоятельно. (И.М.Х.О)
StalkerDtN
Jan 13 2006, 06:52
Привет всем!
У меня такой вопрос (точнее два):
1). все знают про сумки в инвентаре(те куда можно положить ограниченное колличество вещей и плюс они уменьшают вес), можно ли сделать так, что, допустим, я в нее (в сумку) ложу несколько предметов если это подходящии предметы, то эти предметы изчезают и там появляется новый предмет (именно в этой сумке, а не просто ложиться в инвентарь)
2). существует ли функция которая берет позицию предмета в инвентаре (я не про слоты одежды и т.п.). Или хотя бы смотрит сколько данный предмет занимает места в инвентаре.
Dik Morris
Jan 13 2006, 09:17
StalkerDtN
Можно было бы сделать, просто.
Ложишь в сумку итемы, активируешь её...
НО! Видишь ли, на сумку нельзя вешать свойство: активировать предмет, так что приодеться по другому.
Создаём предмет со свойством активации, когда мы активируем этот предмет на сумке срабатывает ниже приведенный скрипт:
Neverwinter Script Source |
#include "nw_i0_tool" //На onActivaItem модуля. void main() { object oPC = GetItemActivator();// Игрок object oPa = GetItemActivated();// Активируемый предмет object oSu = GetNearestObjectByTag("ТАГ_СУМКИ");// Сумка
if (GetTag(oPa)=="TAГ_ПРЕМЕТА") // Проверка. Если таг активируемого предмета равен: TAГ_ПРЕМЕТА, ТО: { if ((HasItem(oPC,"ТАГ_СУМКИ"))&& GetItemActivatedTarget()==oSu) // Проверка. Если итем находиться в инвентаре игрока, // + если мы активируем на сумке то: { if ((HasItem(oSu,"ТАГ_ПРЕДМЕТА_1")) && HasItem(oSu,"ТАГ_ПРЕДМЕТА_2")) // Опять проверка. Если в сумке есть два премета // с тагами: ТАГ_ПРЕДМЕТА_1 и ТАГ_ПРЕДМЕТА_2, то: { DestroyObject(GetNearestObjectByTag("ТАГ_ПРЕДМЕТА_1"));//Дестроим эти преметы DestroyObject(GetNearestObjectByTag("ТАГ_ПРЕДМЕТА_2"));//Дестроим эти преметы CreateItemOnObject("ТАГ_НОВОГО__ПРЕДМЕТА",oSu,1);// Создаем новый ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_DISPEL),oPC); // Налаживаем визуальный эффект. (для большей реалистичности) } } // ЗЫ: скрипт писал в дикой спешке, народ, если будут ошибки, прошу сильно не пинать  } } |
Nashman
Jan 13 2006, 15:58
Привет,
Подскажите ПЛС. Почему нельзя записать так:
Neverwinter Script Source |
ActionDoCommand(AssignCommand(oNPC, CreateItemOnObject(...))); |
Выдает "Делкларация не соответсвует параметру".
ПС: Просто нужно создать последовательность, а и-за єтой ошибки не получается!
-fenix-
Jan 13 2006, 16:24
Потому что функция CreateItemOnObject не является void функцией.
Нужно написать свою void функцию, в которой будет выполнятся CreateItemOnObject.
Говорили такое ни раз и функцию приводили то же ни раз!!!
Neverwinter Script Source |
//Позволяет использовать функцию CreateItemOnObject в //ActionDoCommand, AssignCommand и DelayCommand. void ActionCreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1);
void ActionCreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1) { CreateItemOnObject(sItemTemplate, oTarget, nStackSize); } |
А вот для CreateObject
Neverwinter Script Source |
//Позволяет использовать функцию CreateObject в //ActionDoCommand, AssignCommand и DelayCommand. void ActionCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="");
void ActionCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="") { CreateObject(nObjectType, sTemplate, lLocation, bUseAppearAnimation=FALSE, sNewTag=""); } |
Может в ВИО добавить?
StalkerDtN
Jan 13 2006, 17:13
Dik Morris
Спасибо за участие, но это не есть то что мне нужно. Я делал уже нечто подобное только вешал скрипт на ХБ, все работало, но постоянные (точнее, совсем даже не постоянные) задержки меня котегорически не устраивали. Мне, как раз, хотелось чтобы все было, так сказать, мгновено. Видимо енто невозможно.
PS: У тебя пара неточностей:
1. "if ((HasItem(oSu,"ТАГ_ПРЕДМЕТА_1")) && HasItem(oSu,"ТАГ_ПРЕДМЕТА_2"))"
- это несработает, т.к. выше "object oSu = GetNearestObjectByTag("ТАГ_СУМКИ")"
нужно - "object oSu = GetObjectByTag("ТАГ_СУМКИ")"
2. "DestroyObject(GetNearestObjectByTag("ТАГ_ПРЕДМЕТА_1"))" - таг все предметы с "ТАГ_ПРЕДМЕТА_1" тоже уничтожуться, лучше отдельной функцией, например вот так:
void DObj()
{
object oSumka = GetObjectByTag("SUMKA");
object dobj_1 = GetItemPossessedBy(oSumka, "ITEM_1");
object dobj_2 = GetItemPossessedBy(oSumka, "ITEM_2");
DestroyObject(dobj_1);
DestroyObject(dobj_2);
}
Dik Morris
Jan 13 2006, 20:46
Функция:
Neverwinter Script Source |
HasItem |
Проверяет обладает ли цель нужным предметом, т.е:
Neverwinter Script Source |
HasItem(oSu,"ТАГ_ПРЕДМЕТА_1 |
Проверяем, иметься ли в сумке нужный тебе айтем, так как:
QUOTE |
несколько предметов если это подходящии предметы, то эти предметы... |
QUOTE |
object oSu = GetObjectByTag("ТАГ_СУМКИ")" |
Таг БЛИЖАЙШЕЙ. Ведь если юзаем:
Neverwinter Script Source |
GetObjectByTag |
, то айтемы могут создаться в совсем другой сумке! (Если конечно она присутствует в игре

)
QUOTE |
"ТАГ_ПРЕДМЕТА_1" тоже уничтожуться |
Хех, таже ситуация что и с сумкой...
Уничтожаться ближайшие объекты. Т.е те что у тебя в инвентаре.
ЗЫ: sorry за оффтоп, но ведь нужно человеку обьяснить как лучше.

ЗЗЫ: пользуйся кодом NSS.
QUOTE (Dik Morris @ Jan 13 2006, 20:46) |
Таг БЛИЖАЙШЕЙ. |
только в случае работы с инвентарем это не работает. И если надо убать именно те, что в сумке, то StalkerDtN верно написал.
QUOTE (Dik Morris @ Jan 13 2006, 20:46) |
ЗЫ: sorry за оффтоп, но ведь нужно человеку обьяснить как лучше.  |
Вообще оба замечания его - верные.
Добавлено в 21:19
QUOTE (StalkerDtN @ Jan 13 2006, 06:52) |
2). существует ли функция которая берет позицию предмета в инвентаре (я не про слоты одежды и т.п.). Или хотя бы смотрит сколько данный предмет занимает места в инвентаре. |
по поводу места - можно через 2да посчитать.
что-то такое..
Neverwinter Script Source |
int GetItemPlace(object oItem) { int nBASE = GetBaseItemType(oItem); int nWidth = StringToInt(Get2DAString("baseitems","InvSlotWidth",nBASE); int nHeight = StringToInt(Get2DAString("baseitems","InvSlotHeight",nBASE); return nWidth*nHeight; } |
Добавлено в 21:23
QUOTE (StalkerDtN @ Jan 13 2006, 06:52) |
можно ли сделать так, что, допустим, я в нее (в сумку) ложу несколько предметов если это подходящии предметы, то эти предметы изчезают и там появляется новый предмет (именно в этой сумке, а не просто ложиться в инвентарь) |
тока постоянной проверкой. Ну или как предложил Дик (тока реализованный более правильно, через сумку, а не айтем)
Добавлено в 21:25
QUOTE (StalkerDtN @ Jan 13 2006, 17:13) |
Я делал уже нечто подобное только вешал скрипт на ХБ, все работало, но постоянные (точнее, совсем даже не постоянные) задержки меня котегорически не устраивали. |
ну это просто. Выноси в отдельный скрипт проверки и запускай в ХБ (модуля, игрока) с интервалом нужным. Скажем
0.0
1.0
2.0
3.0
4.0
5.0
те у тебя будет каждую секунду проверка. Задержки минимальны, но код проверочный оптимизируй по максимуму. мб не 1.0 а 1.5 шаг... но это уже сам как хочешь.
Но проще не париться и идею чуть-чуть подправить под реалии тулсета

Вариант положил в сумку, потом активировал - нормальный.

QUOTE (Dik Morris @ Jan 13 2006, 09:17) |
НО! Видишь ли, на сумку нельзя вешать свойство: активировать предмет, так что приодеться по другому. |
itemprops.2da
строка Cast_Spell, столбец 18_Containers. Ставим вместо 0 1 и кидаем в хак, если есть.
Теперь можно вешать активацию на саму сумку и забыть про другой айтем.
Nashman
Jan 13 2006, 22:35
Привет,
Искал, но не нашел:
- Можно непися "положить"?
Archangel
Jan 13 2006, 22:42
QUOTE |
Привет, Искал, но не нашел: - Можно непися "положить"? |
Положить можно анимацией "ANIMATION_LOOPING_DEAD_FRONT".
Но помни, что НеПиСя нельзя положить на неактивную (т.е. ту, которая встроена в локу) кровать.
QUOTE (Archangel @ Jan 13 2006, 22:42) |
Но помни, что НеПиСя нельзя положить на неактивную (т.е. ту, которая встроена в локу) кровать. |
мдя..

учитесь говорить. Есть тайловые, а есть плейсовые кровати

Положить (именно на) можно только на тайловую кромать после правки вокмеша тайла.
а вообще правило простое - положить можно там, куда можно наступить.
QUOTE (Archangel @ Jan 13 2006, 22:42) |
ANIMATION_LOOPING_DEAD_FRONT |
тогда и про ANIMATION_LOOPING_DEAD_BACK Не забывай.
Добавлено в [mergetime]1137197961[/mergetime]
но тока это - в вопросы новичков.
Nashman
Jan 15 2006, 03:06
Привет,
Возник вопросик, думаю больше команде ВРГ, я у "Проклятии Левора" видел похожое:
- У Вас, когда открываешь какой-то сундук появляется фраза(видит кто-то или нет), мне нужно впринцыпе то же. Можете написать как Вы это сделали?
Dik Morris
Jan 15 2006, 08:29
Открой ПЛ, и посмотри какие скрипты стоят в слотах сундука.
StalkerDtN
Jan 16 2006, 12:02
Привет всем!
У меня скорее даже не вопрос, а не понимание ПОЧЕМУ так!
Суть проблемы в следующем: допустим есть у меня рычаг на локации, когда я его нажимаю, то на другом объекте (в этой же локации, его таг OBJ_VFX_1) проигрывается визуальный эффект, домупстим, VFX_DUR_INFERNO.
Когда я использую вот такой скрипт:
Neverwinter Script Source |
void main() { object oVFX = GetObjectByTag("OBJ_VFX_1");
if (oVFX == OBJECT_INVALID) SendMessageToPC(GetFirstPC(), "объект не существует"); else { ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_INFERNO), oVFX); SendMessageToPC(GetFirstPC(), "объект существует"); } } |
Визуально анимации нет, но есть ее звук.
Когда вот такой:
Neverwinter Script Source |
void main() { object oVFX = GetObjectByTag("OBJ_VFX_1");
if (oVFX == OBJECT_INVALID) SendMessageToPC(GetFirstPC(), "объект не существует"); else { ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_INFERNO), GetLocation(oVFX)); SendMessageToPC(GetFirstPC(), "объект существует"); } } |
Все работает.
Вопрос: ПОЧЕМУ!
ЗЫ: когда вместо
Neverwinter Script Source |
oVFX = GetObjectByTag("OBJ_VFX_1"); |
использую
Neverwinter Script Source |
GetFirstPC() |
или
Neverwinter Script Source |
OBJECT_SELF |
- т.е. сам рычаг первый скрипт работает как надо.
Эффекты VFX_DUR_* накладываются на ЛОКАЦИЮ Location: Floor, Body? head и т.д. Но самое главное, это параметр Location, который ты задаешь во втором случае верно. В первом ты пытаешься засунуть это все на объект, что есть не верно.
StalkerDtN
Jan 16 2006, 13:52
Тогда почему енто работает:
Neverwinter Script Source |
void main() { // здесь поджигается объект которого атакую (эта лишь часть кода, но она работает) object oPC = GetFirstPC(), oAtt;
if (GetCurrentAction(oPC) == ACTION_ATTACKOBJECT) { oAtt = GetAttackTarget(); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_DUR_INFERNO), oAtt); } } |
И почему 1-й скрипт работает при
Neverwinter Script Source |
OBJECT_SELF |
- анимация на самом рычаге
и когда целью анимации является сам игрок
QUOTE (Aiwan @ Jan 16 2006, 13:08) |
Эффекты VFX_DUR_* накладываются на ЛОКАЦИЮ Location: Floor, Body? head и т.д. Но самое главное, это параметр Location, который ты задаешь во втором случае верно. В первом ты пытаешься засунуть это все на объект, что есть не верно. |
?????
CODE |
VFX_DUR_* Constant Group Temporary visual effects that last for a specified duration. |
(с) Лекскикон.
Временные эффекты, имеющие определенную продолжительность.
Хотя реально это не совсем так, но тем не менее ни слова про локацию.
Location: Area, Location: About Body, это не то все, это описание того, как эффект видно. если привязка к части тела - на локацию не наложить эффект. Но тип эффекта не имеет отношение к тому, на что его накладывать.
StalkerDtN, честно, фиг знает, что там такое. Эффекты имеют довольно много нюансов, которые не описаны нигде.
StalkerDtN НЫН движок это не аксиома. Это скорее, как многий код - есть правильное исполнение, есть неправильное. Твои куски кода это на обум, вот и сработало. Мы совсем не знаем какие происходят операции с OBJECT_SELF, возможно движок автоматом берет его локацию, позицию и прочее изначально содержит это в описании объекта.
QUOTE |
Remarks
Since most effects affect objects, many will have no effect when applied at a Location. Use this function to apply Visual and Area of Effect effects, for example, you can use this to apply the visual effect of a spell, where none has been cast.
|
CODE |
VFX_FNF_PWSTUN White dots orbiting and purple vapors lifting. Location: About Body Color(s): white, purple VFX_COM_SPARKS_PARRY Sparks from a parry. Location: Feet Color(s): white
|
Если вы укажете в случае 1 вместо Location крича плейсебл, то шанс что он сработает равен 0.
Во втором случае так же. Укажите вместо локи что либо другое может не сработать.
На что действует каждый эффект, есть в описаннии в лексиконе. Я сталкивался с этим. Поэтому понял, что такой-то спел надо накладывать на то, что имеет в себе описание локации действия. Естественно для всех эффектов не проверял.
StalkerDtN
Jan 17 2006, 10:16
Да, неприятно.

Спасибо за хелп, буду иметь ввиду. Хотя к локации не всегда удобно и приемлимо. Ну, например, если объект движется, но это, покрайней мере, решаемо.
ЗЫ: Кстати, GetFirstPC() - есть объект и берется именно как объект, а все арбайтен. Гы!
Здравствуйте !!!

Хотелось бы спросить какой из предложенных стандартных скриптов можно посмотреть, чтобы узнать как Jump'ить себя или НПС ?
А если нет такого, то хотя бы приведите пример .
StalkerDtN
Jan 19 2006, 17:28
Привет
RoHaN !
Следующий скрипт тебя или NPC перекинет в любую точку внутри модуля:
Neverwinter Script Source |
void main() { object oPC = GetFirstPC(); // берем игрока, т.е. самого себя object oNPC = GetObjectByTag("TAG_NPC"); // берем NPC, которого будем jump-ить
object oPoint_1 = GetObjectByTag("TAG_POINT_1"); // точка, в которую будет прыгать игрок object oPoint_2 = GetObjectByTag("TAG_POINT_2"); // точка, в которую будет прыгать NPC
AssignCommand(oPC , JumpToLocation(GetLocation(oPoint_1))); // применяем прыжок в точку для игрока AssignCommand(oNPC, JumpToLocation(GetLocation(oPoint_2))); // применяем прыжок в точку для NPC } |
Кончено, есть и другие варианты - на твое усмотрение.
ЗЫ: А, вообще, читай мануал, или в тему скрипты новичкам, там наверника это есть.
StalkerDtN
Jan 21 2006, 07:55
Всем привет!
У меня такой вопрос: как можно сделать так, чтобы в какой-нибудь из слотов игрока (INVENTORY_SLOT_*)
нельзя было запихать соответствующую ему(слоту) вещь. Вариант, на подобие, - отлавливать событие одевания предмета с помощью onPlayerEquipItem не рационален, т.к. все равно проигрывается анимация - если это оружие, то взятие его в руку. К тому же очень вероятно, что оружие не уберется, т.е. как объек-то оно уберется, а вот как анимация останется, приходится делать задержку.
Есть подозрение, что это можно усоществить через onSpawn, но вот как.
ЗЫ: Вроде, нечто подобное я где-то на форуме видел, но где именно так и не нашел.
Nashman
Jan 22 2006, 01:37
QUOTE |
нельзя было запихать соответствующую ему(слоту) вещь. |
Где-то читал, что нельзя. Можно просто снять... Попробуй UserDef постявь безконечный цыкл(Такая не знаю или работает, но в Делфи, Си на 100%):
Neverwinter Script Source |
while(TRUE) { //Снимаем и говорим что-то... } |
ЗЫ: Читал где-то на форуме...
Nashman,
Коллеги хмурят лбы в недоуменьи:
Рыдаю в три ручья, упав под стол!
Вы добрый гений смехотерапии,
Я ржу, как конь, читая ваш прикол!
Самое простое, но глючное, ибо жрет ресурсы - на hb непися
Neverwinter Script Source |
void main(){ object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, OBJECT_SELF); if(GetIsObjectValid(oItem)) ActionUnequipItem(oItem);} |
helvene
Jan 22 2006, 02:50
QUOTE (Nashman @ Jan 22 2006, 01:37) |
UserDef постявь безконечный цыкл |
*из-под стола доносится сдавленное бульканье*
просто надеваете на чара вещи с определенными тегами, а в скрипте OnUnEquipItem - проверку... если вещь вдруг снимается, то надеваете ее обратно...
ничего лишнего одето гарантированно не будет, да и скрипт не особо требовательный...
StalkerDtN
Jan 22 2006, 09:50
NeoJSmith ,
QUOTE |
Самое простое, но глючное, ибо жрет ресурсы - на hb непися
Neverwinter Script Source
Neverwinter Script Source | void main(){ object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, OBJECT_SELF); if(GetIsObjectValid(oItem)) ActionUnequipItem(oItem);} |
|
Если применять проверку даже через каждую 0.1 с. все равно проигрывается анимация и есть шанс (!), что оружие в руке останется (т.е. если это меч, то в руке будет меч), хотя формально как объекта его там нету.
Vanes,
а если рука всегда должна быть пустой (2da - не то, именно скрипты).
хм...
ну тут варианта 2...
в СЕРе я видел "пустые" модельки вепов, правда не знаю как это будет выглядеть... скорее всего коряво

или же просто убери у чара и запрети брать все фиты Weapon Proficiency(...)...
QUOTE (helvene @ Jan 22 2006, 05:50) |
*из-под стола доносится сдавленное бульканье* |
Читаю тему регулярно. Ржу как конь. Жена уже ругается.
Епть... Нафик вы велисапедр изобретаете? Когда есть велосипед?
Берете стандартный скрипт в слоте модуля OnPlayerEquipItem. Добавляете в самый верх свои строки:
Neverwinter Script Source |
object oItem = GetPCItemLastEquipped(); // Item object oPC = GetPCItemLastEquippedBy(); // Игрок string sTagItem = GetTag(oItem); // Таг Item-a
// ------------------------------------------------------------------------- // МЕЧЬ КЛАДЕНЕЦ ДЛЯ ВЗРОСЛЫХ ПАЦАНОВ // -------------------------------------------------------------------------
if (sTagItem=="ТАГ_МЕЧА") { if(!GetLocalInt(oPC, "ЛОКАЛКА_МОЖНО_ВЗЯТЬ_МЕЧИК")) { AssignCommand(oPC, ActionUnequipItem(oItem)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 2.0, 3.0)); AssignCommand(oPC, SpeakString("Мне надо манной какшки покушать.")); SendMessageToPC(oPC, "Меч перевесил вас, и вы упали навзничь в кучу оркских какашек."); } else { AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3, 2.0, 5.0)); AssignCommand(oPC, SpeakString("Я шмог! Я шмог! Шмог! Шмог! ШМОГ!")); } } // ------------------------------------------------------------------------- |
Добавлено в [mergetime]1137925681[/mergetime]
QUOTE (StalkerDtN @ Jan 21 2006, 10:55) |
Вариант, на подобие, - отлавливать событие одевания предмета с помощью onPlayerEquipItem не рационален, т.к. все равно проигрывается анимация - если это оружие, то взятие его в руку. |
Любое действие это есть сигнал. Если ты телепатический скрипт сделаешь, то хвала и респект тебе. Надо хотя бы знать, ЧТО РС СОБИРАЕТСЯ одеть меч. НАХ такие заморочки? Они НИКОМУ НЕ НУЖНЫ. Поверь. Игрокам наплевать. ЕСли только чисто для себя...
Добавлено в [mergetime]1137925852[/mergetime]
Единственно грамотное и простое решение - сделать два меча. Первый не оденет НИКТО. Второй оденут. Дальше объяснять не надо думаю...
StalkerDtN
Jan 22 2006, 15:20
- не наплевать потому и делаю.
QUOTE |
ЕСли только чисто для себя... |
- и для себя тоже.
QUOTE |
Епть... Нафик вы велисапедр изобретаете? Когда есть велосипед? Берете стандартный скрипт в слоте модуля OnPlayerEquipItem. Добавляете в самый верх свои строки:
|
- а ты проверь в игре то, что написал и увидешь, что оружие убирается (ВИЗУАЛЬНО!!!) лишь иногда.
ЗЫ: А, вообще, Aiwan , собеседника надо уважать даже если, на первый взгляд, его слова кажутся пустыми...
QUOTE (StalkerDtN @ Jan 22 2006, 15:20) |
- а ты проверь в игре то, что написал и увидешь, что оружие убирается (ВИЗУАЛЬНО!!!) лишь иногда. |
он не работает всегда, потому как нехватает задержки. Ну так тебе голова на что? Взял да добавил (мы тут тока идеи подсказываем и концептуальные части кода, все остальное уже вы сами)
Neverwinter Script Source |
void main() { object oItem = GetPCItemLastEquipped(); // Item object oPC = GetPCItemLastEquippedBy(); // Игрок string sTagItem = GetTag(oItem); // Таг Item-a
// ------------------------------------------------------------------------- // МЕЧЬ КЛАДЕНЕЦ ДЛЯ ВЗРОСЛЫХ ПАЦАНОВ // -------------------------------------------------------------------------
if (sTagItem=="SWORD") { if(!GetLocalInt(oPC, "SWORD")) { DelayCommand(0.4,AssignCommand(oPC, ClearAllActions())); DelayCommand(0.5,AssignCommand(oPC, ActionUnequipItem(oItem))); DelayCommand(0.6,AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 2.0, 3.0))); AssignCommand(oPC, SpeakString("Мне надо манной какшки покушать.")); SendMessageToPC(oPC, "Меч перевесил вас, и вы упали навзничь в кучу оркских какашек."); } else { AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3, 2.0, 5.0)); AssignCommand(oPC, SpeakString("Я шмог! Я шмог! Шмог! Шмог! ШМОГ!")); } } // ------------------------------------------------------------------------- } |
Добавлено в 15:55
QUOTE (StalkerDtN @ Jan 22 2006, 15:20) |
даже если, на первый взгляд, его слова кажутся пустыми... |
и не на первый. Кроме как этим способом ну и конечно же бесконечным циклом (

), ты не сделаешь запрет. Тебе об этом второй день уже говорят.
Добавлено в [mergetime]1137948041[/mergetime] QUOTE (Lex @ Jan 22 2006, 15:55) |
Кроме как этим способом ну и конечно же бесконечным циклом |
вру. Можно еще 1 макаром:
лезем в baseitems.2da, создаем новый тип оружия, все прописываем, а в требуемые фиты заносим наш.
лезем в feats.2da делаем этот наш фит. (по аналогии с Weapon Proficiency)
лезем в iprp_feats.2da и добавляем наш фит в те, что можно дать вещи.
Создаем в палитре шкурку и даем ей этот фит. Теперь, когда тебе надо, чтобы можно было брать меч, создавай ее на игрока и одевай на скрытый слот.
Это все реально сделать, другой вопрос, надо ли это все ради того, что можно сделать несколькими строчками кода (хотя факт того, что игрок возьмет оружие в руку будет.. на 1 сек. Но результат все равно наш достигается.)
QUOTE (StalkerDtN @ Jan 22 2006, 18:20) |
ЗЫ: А, вообще, Aiwan , собеседника надо уважать даже если, на первый взгляд, его слова кажутся пустыми... |
Писал, писал тебе ответ... да глюкнула старница. В общем еще раз мне влом писать все. Скажу кратко. Было бы мне на тебя плевать, я бы и не потратил свое время на кусок кода. Мы с Лексом даем шанс молодежи себя проявить, вот и не отвечаем быстро.
QUOTE (StalkerDtN @ Jan 22 2006, 18:20) |
- а ты проверь в игре то, что написал и увидешь, что оружие убирается (ВИЗУАЛЬНО!!!) лишь иногда. |
Наверное я должен все натстроить тебе и ерефку прислать? В игре проверять и вылизывать код, твои проблемы. Больше на твои вопросы я лично не отвечаю. Успехов.
QUOTE (Lex @ Jan 22 2006, 18:55) |
Создаем в палитре шкурку и даем ей этот фит. Теперь, когда тебе надо, чтобы можно было брать меч, создавай ее на игрока и одевай на скрытый слот. |
Для этого еще нужно игроку свой конфиг давать. Если там будет запрет на
CODE |
[Server Options] ItemLevelRestrictions=1
|
То ничего не наденет игрок.
Я возмущен.
QUOTE (Aiwan @ Jan 22 2006, 22:29) |
Для этого еще нужно игроку свой конфиг давать. Если там будет запрет на |
ну.. что мешает в iprp_feats.2da поставить коэф. 1? Тогда левелрестрикт нам не помеха.

так вот