balrog
Jun 28 2005, 20:52
Мефистофель Может у тебя к модулю, помимо всего борохла их оверрайда, подключенны ешо какие-нибудь хаки?
Мефистофель
Jun 29 2005, 08:05
QUOTE |
Мефистофель Может у тебя к модулю, помимо всего борохла их оверрайда, подключенны ешо какие-нибудь хаки? |
Нет я ничё не подключал, у меня всё идёт из Оверейда, но может причина в фойлах, TILESETS? и Textures_Tpc.erf, и Tailes_Tpc.erf?
Zirrex
Jun 29 2005, 20:09
Ребята, вопросы следующего содержания. Может быть вам они не покажутся новыми, но нормальное решение им я пока что найти не смог.
1. Все наверняка знают, что вышедший Хоту привнес массу недоразумений и ошибок. Одна из таких ошибок, не затирающиеся иммунитеты от полиморфов, когда им перезаходишь на сервер.
Снять сам полиморф не составляет труда, но эффекты остаются все равно. В каком видел они хранятся на персонаже, не понятно. В момент полиморфа на персонаже создается невидимый объект, в котором хранятся все установки полиморфа. Пробовал проверить, так ли это, нет его, но если посмотреть 2da, то там четко видно, что подобный объект создается. Что происходит с эффектами в момент снятия полиморфа, я так и не понял, но они становятся постоянными и снимаются лишь через сон или смерть. Лечу подобное недоразумение пока что снятием полиморфа и затиранием всех заклинаний, иначе их становится по 255. Старый баг колдуна.
Скрипт, который на данный момент служит мне лечением:
Neverwinter Script Source |
void RemovePolymorth(object oPC) { // Посмотреть первый эффект effect eEffect = GetFirstEffect(oPC);
while (GetIsEffectValid(eEffect)) { // Если есть эффект полиморфа на игроке, то продолжить if (GetEffectType(eEffect) == EFFECT_TYPE_POLYMORPH) { // Удалить эффект полиморфа с игрока RemoveEffect(oPC, eEffect); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oPC)), oPC); break; } // Посмотреть следующий эффект eEffect = GetNextEffect(oPC); }
object oSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC);
// Если есть объект невидимой брони, удалить if (GetIsObjectValid(oSkin)) { DestroyObject(oSkin); } } |
2. Биоваре оставили баг со сменой оружия. Почему его до сих пор не исправили, мне не ясно, ибо он на корню нарушает раундовую боевую систему, позволяя атаковать за 1 раунд несколько раз, без учета, что этих атак может быть гораздо меньше. Применил пока что такое решение проблемы. Подскажите, в чем я не прав, или как это можно сделать проще. Скрипт находится на эвенте "On Attacked" скрипта "nw_c2_default5":
Neverwinter Script Source |
if (GetIsDM(oPC) || GetIsDMPossessed(oPC) || !GetIsPC(oPC)) return;
// Start script - Выпадение из рук оружия, если его решили сменить в бою object oWeaponR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); object oWeaponL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); effect eAttack = EffectAttackDecrease(15);
int nUsedOther; string sMessage = "Вы пытаетесь быстро выхватить новое оружие в бою, но все равно мешкаете немного!";
if (GetIsObjectValid(oWeaponR) && GetIsObjectValid(oWeaponL)) { if ((GetLocalInt(oWeaponR,"WeaponR") != 1) || (GetLocalInt(oWeaponL,"WeaponL") != 1)) { object oItem = GetFirstItemInInventory(oPC);
while (GetIsObjectValid(oItem)) { if (GetLocalInt(oItem,"WeaponR") == 1) || (GetLocalInt(oItem,"WeaponL") == 1)) { nUsedOther = 1; DeleteLocalInt(oItem, "WeaponR"); DeleteLocalInt(oItem, "WeaponL"); break; } oItem = GetNextItemInInventory(oPC); }
if (nUsedOther == 1) { nUsedOther = 0; SendMessageToPC(oPC, sMessage); AssignCommand(oPC, ClearAllActions(TRUE)); AssignCommand(oPC, ActionUnequipItem(oWeaponR)); AssignCommand(oPC, ActionUnequipItem(oWeaponL)); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAttack, oPC, 60.0f); } else { SetLocalInt(oWeaponR, "WeaponR", 1); SetLocalInt(oWeaponL, "WeaponL", 1); DelayCommand(7.0, DeleteLocalInt(oWeaponR, "WeaponR")); DelayCommand(7.0, DeleteLocalInt(oWeaponL, "WeaponL")); } } } else if (GetIsObjectValid(oWeaponR)) { if (GetLocalInt(oWeaponR,"WeaponR") != 1) { object oItem = GetFirstItemInInventory(oPC);
while (GetIsObjectValid(oItem)) { if (GetLocalInt(oItem,"WeaponR") == 1) { nUsedOther = 1; DeleteLocalInt(oItem, "WeaponR"); break; } oItem = GetNextItemInInventory(oPC); }
if (nUsedOther == 1) { nUsedOther = 0; SendMessageToPC(oPC, sMessage); AssignCommand(oPC, ClearAllActions(TRUE)); AssignCommand(oPC, ActionUnequipItem(oWeaponR)); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAttack, oPC, 60.0f); } else { SetLocalInt(oWeaponR, "WeaponR", 1); DelayCommand(7.0, DeleteLocalInt(oWeaponR, "WeaponR")); } } } else if (GetIsObjectValid(oWeaponL)) { if (GetLocalInt(oWeaponL,"WeaponL") != 1) { object oItem = GetFirstItemInInventory(oPC);
while (GetIsObjectValid(oItem)) { if (GetLocalInt(oItem,"WeaponL") == 1) { nUsedOther = 1; DeleteLocalInt(oItem, "WeaponL"); break; } oItem = GetNextItemInInventory(oPC); }
if (nUsedOther == 1) { nUsedOther = 0; SendMessageToPC(oPC, sMessage); AssignCommand(oPC, ClearAllActions(TRUE)); AssignCommand(oPC, ActionUnequipItem(oWeaponL)); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eAttack, oPC, 60.0f); } else { SetLocalInt(oWeaponL, "WeaponL", 1); DelayCommand(7.0, DeleteLocalInt(oWeaponL, "WeaponL")); } } } // End script - Выпадение из рук оружия, если его решили сменить в бою |
Агрессинг
Jun 29 2005, 22:12
Вопрос, который некуда сунуть - понадобился срочно демо модуль к Анимации НПС (насколько я помню, там был такой скрипт, который мне нужен)а на ВРГ/ОЛД/ФАЙлы выдает 404 когда кликаю на ссылку к модулю. Может его, как и статью, выложить на новом ВРГ?
Ну может вы мне и без мода поможете? Почему - то НПС стоит, как столб. Вот скрипт
Neverwinter Script Source |
void main() { int nUser = GetUserDefinedEventNumber(); if(nUser == 1001) { if (GetLocalInt(OBJECT_SELF,"BUSY")==0) { SetLocalInt(OBJECT_SELF,"BUSY",1);
if (GetLocalInt(OBJECT_SELF,"ActionSet")==0) SetLocalInt(OBJECT_SELF,"ActionSet",Random(4)+1); switch (GetLocalInt(OBJECT_SELF,"ActionSet")) { case 1: ActionMoveToObject(GetNearestObjectByTag("wp_wife1"),FALSE,0.0); ActionSpeakString("Ужасные спицы!"); ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.5,25.0); break; case 2: ActionMoveToObject(GetNearestObjectByTag("wp_wife2"),FALSE,0.0); ActionSpeakString("Скоро уже будет готово.. Осталось чуть чуть подождать"); ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.5,12.0); break; case 3: ActionMoveToObject(GetNearestObjectByTag("wp_wife3"),FALSE,0.0); ActionSpeakString("Хм, этот бараний хаш весьма неплох."); ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.5,12.0); break; case 4: ActionMoveToObject(GetNearestObjectByTag("wp_wife4"),FALSE,0.0); ActionSpeakString("Каждые тридцать минут эта постель превращаеется в кубло!"); ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING,1.5,9.0); break; case 5: ActionMoveToObject(GetNearestObjectByTag("TABLE"),FALSE,0.0); ActionSpeakString("Милый, я подала на стол!"); ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.5,12.0); } ActionDoCommand(SetLocalInt(OBJECT_SELF,"BUSY",0)); } } } |
В чем дело, господа?
Zirrex
Jun 30 2005, 01:13
Агрессинг почему твой НПС подлетает к столу совершенно без задержки? Ты хочешь, чтобы он телепортировался, или стол настолько близко, что рукой можно дотянуться? Столбом он у тебя стоит, потому что ты ему изменяешь переменную, и не сбрасываешь, когда ты делаешь:
Neverwinter Script Source |
SetLocalInt(OBJECT_SELF, "ActionSet", Random(4) + 1); |
то первый раз условие проходит, потому что изначально эта переменная равна 0, но второй раз она уже будет равна не 0, и условие:
Neverwinter Script Source |
if (GetLocalInt(OBJECT_SELF, "ActionSet") == 0) |
ты не сможешь пройти.
Neverwinter Script Source |
ActionMoveToObject(GetNearestObjectByTag("wp_wife1"), FALSE, 0.0); |
FALSE, 0.0 - лишнее, по-умолчанию они равны тому, что ты поставил.
Лучше уж так:
Neverwinter Script Source |
void main() { int nUser = GetUserDefinedEventNumber();
if (nUser == 1001) { if (GetLocalInt(OBJECT_SELF, "BUSY") == 0) { SetLocalInt(OBJECT_SELF, "BUSY", 1);
int iAction = Random(4) + 1;
switch (iAction) { case 1: ActionForceMoveToObject(GetNearestObjectByTag("wp_wife1"), FALSE, 1.0, 5.0); ActionSpeakString("Ужасные спицы!"); ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.5, 25.0)); break;
case 2: ActionForceMoveToObject(GetNearestObjectByTag("wp_wife2"), FALSE, 1.0, 5.0); ActionDoCommand(ActionSpeakString("Скоро уже будет готово.. Осталось чуть чуть подождать")); ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.5, 12.0)); break;
case 3: ActionForceMoveToObject(GetNearestObjectByTag("wp_wife3"), FALSE, 1.0, 5.0); ActionDoCommand(ActionSpeakString("Хм, этот бараний хаш весьма неплох.")); ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.5, 12.0)); break;
case 4: ActionForceMoveToObject(GetNearestObjectByTag("wp_wife4"), FALSE, 1.0, 5.0); ActionDoCommand(ActionSpeakString("Каждые тридцать минут эта постель превращаеется в кубло!")); ActionDoCommand(ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING, 1.5, 9.0)); break;
case 5: ActionForceMoveToObject(GetNearestObjectByTag("TABLE"), FALSE, 1.0, 5.0); ActionDoCommand(ActionSpeakString("Милый, я подала на стол!")); ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.5, 12.0)); break; } ActionDoCommand(SetLocalInt(OBJECT_SELF, "BUSY", 0)); } } } |
С текстом я не знаю, фраза должна произноситься сразу, или после того, как персонаж подойдет к объекту. Сделал ожидание.
Агрессинг
Jun 30 2005, 01:23
QUOTE |
С текстом я не знаю, фраза должна произноситься сразу, или после того, как персонаж подойдет к объекту. Сделал ожидание.
|
Спасиб, попробую, че то я напортачил. А ActionSpeakString всегда говорится с послеующим действием, в данном случае - анимацией, а SpeakString можно и без другого действия ставить.
Zirrex
Jun 30 2005, 01:32
Агрессинг, не знаю, когда я делал НПС "ActionSpeakString", то замечающий НПС игрока, вначале говорил фразу, потом начинал движение. Сделав такое ожидание, он стал вначале подбегать, а потом говорить фразу. В общем, эксперименты быстро наводят на ответы

Совет, лучше делай красивые скрипты, тогда в них проще разобраться, а когда все в одну строчку, то глаза разбегаются.
Zirrex тебе надо в вопросы по скриптам.
QUOTE (Агрессинг @ Jun 30 2005, 01:12) |
Может его, как и статью, выложить на новом ВРГ? |
Скачай мой мануал по Авроре, там теперь и модуль и описание катсцен. Дублировать я не стал больше.
По поводу твоего скрипта...
Ты как всегда юзаешь хертбит. Я рекомендую тебе воткнуть стринги на каждую строку и посмотреть, один блок действий держит в стеке непись или кучу, каждые 6 секунд получает от хертбита. Если у тебя сингл то добавь такую строку себе в начало скрипта:
Neverwinter Script Source |
if (GetArea(GetFirstPC()) != OBJECT_SELF) {return;} |
QUOTE (Aiwan @ Jun 30 2005, 08:25) |
Скачай мой мануал по Авроре, там теперь и модуль и описание катсцен. |
речь о статье по анимации и демке к ней, Айв.
(и там я кстати делал только основу, так что проверок бой/диалог/рс в локации тама нету )
Агрессинг
Jun 30 2005, 23:39
Не получается, хоть зарежся!!!
Вставил
Neverwinter Script Source |
if (GetArea(GetFirstPC()) != OBJECT_SELF) {return;} |
все сделал, а эта дура электронная все стоит и стоит.
Neverwinter Script Source |
void main() { int nUser = GetUserDefinedEventNumber(); if (GetArea(GetFirstPC()) != OBJECT_SELF) {return;} if (nUser == 1001) { if (GetLocalInt(OBJECT_SELF, "BUSY") == 0) { SetLocalInt(OBJECT_SELF, "BUSY", 1);
int iAction = Random(4) + 1;
switch (iAction) { case 1: ActionForceMoveToObject(GetNearestObjectByTag("wp_wife1"), FALSE, 1.0, 5.0); ActionSpeakString("Ужасные спицы!"); ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.5, 25.0)); break;
case 2: ActionForceMoveToObject(GetNearestObjectByTag("wp_wife2"), FALSE, 1.0, 5.0); ActionDoCommand(ActionSpeakString("Скоро уже будет готово.. Осталось чуть чуть подождать")); ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.5, 12.0)); break;
case 3: ActionForceMoveToObject(GetNearestObjectByTag("wp_wife3"), FALSE, 1.0, 5.0); ActionDoCommand(ActionSpeakString("Хм, этот бараний хаш весьма неплох.")); ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.5, 12.0)); break;
case 4: ActionForceMoveToObject(GetNearestObjectByTag("wp_wife4"), FALSE, 1.0, 5.0); ActionDoCommand(ActionSpeakString("Каждые тридцать минут эта постель превращаеется в кубло!")); ActionDoCommand(ActionPlayAnimation(ANIMATION_FIREFORGET_GREETING, 1.5, 9.0)); break;
case 5: ActionForceMoveToObject(GetNearestObjectByTag("TABLE"), FALSE, 1.0, 5.0); ActionDoCommand(ActionSpeakString("Милый, я подала на стол!")); ActionDoCommand(ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.5, 12.0)); break; } ActionDoCommand(SetLocalInt(OBJECT_SELF, "BUSY", 0)); } } } |
QUOTE (Aiwan @ Jun 30 2005, 08:25) |
if (GetArea(GetFirstPC()) != OBJECT_SELF) {return;} |
Айв, ты чего советуешь??
Neverwinter Script Source |
if (GetArea(GetFirstPC()) != GetArea(OBJECT_SELF)) return; |
Агрессинг, она у тебя хоть без этого включения:
Neverwinter Script Source |
if (GetArea(GetFirstPC()) != GetArea(OBJECT_SELF)) return; |
Говорит что-нибудь?
И потом, если это одиночная игра, на каком эвенте у тебя установлен сей скрипт? Дело в том, что по-умолчанию на хертбите вот этого:
Neverwinter Script Source |
int nUser = GetUserDefinedEventNumber();
if(nUser == 1001) //HEARTBEAT {
} |
не нужно. Скрипт будет работать и так.
Подобная ветка нужна на эвенте OnUserDefined, если ты что-то хочешь сделать с НПС, когда рядом игрок. Иначе же она будет ходить по выбранному скриптом пути постоянно, даже когда игрока нет рядом или в локации объекта, это сильно перегрузит игру, если таких НПС будет множество.
Zirrex, я перечилат пост твой раза 3.. и так и не понял, что ты хотел сказать.
Но суть в том, что Агрессинг написал все верно, кроме проверки на локацию.
Стоит только еще добавить проверку на диалог (IsInConversation) и на бой (GetIsInCombat)
QUOTE (Lex @ Jul 1 2005, 03:06) |
Айв, ты чего советуешь?? |
Ну замутил я

ЗАМУТИЛ!
GoingPro)
Jul 1 2005, 18:01
Подскажите плиз где можно скачать Aurora Toolset???
Буду очень благодарен....
Агрессинг
Jul 1 2005, 18:33
На nwnights вроде альфа версия валяется (200 с гаком мегабайт)
PS
А зачем топик - то создавать,

написал бы в одиночном вопросе!
GoingPro)
Jul 1 2005, 18:40
У вас очень хитрый форум, я тут впервые, делаю так как на обыкновенных форумах сорри
Агрессинг
Jul 1 2005, 18:47
Есть топик специально для новичков, правила раздела называется. Повнимательнее в следующий раз.
Lex, он не написал, на какой эвент установил этот скрипт. То что он у него не работает, меня удивляет. Я лишь заметил, что выделенный мной код не нужен на хертбите.
Мягкий Пушистик, давай не будем флеймить. Я знаю что это такое, но он у него не работает, вот я и спрашиваю на всякий случай. Так как иных вариантов от Лекса с Айвеном нету, то не вижу причин сомневаться в работоспособности скрипта.
GoingPro)
Jul 2 2005, 12:50
Люди как зделать что бы при испльзовании предмета тебя телепортировало на указаное место?
Заранее благодарен...
-fenix-
Jul 2 2005, 15:25
QUOTE |
Люди как зделать что бы при испльзовании предмета тебя телепортировало на указаное место? |
Создаешь нужный тебе предмет и даешь ему какой то тэг, при этом в предмет добавь свойство "Только своя уникальная сила".
Далее в нужном месте создаешь вэйпоинт с тэгом ST_+ResRef предмета.
Этот скрипт ставется на OnActivateItem в св-ах модуля.
Neverwinter Script Source |
void main() { object oPC = GetItemActivator(); object oItem = GetItemActivated(); string sResRef = GetResRef(oItem); string sItemResRef = "item"; //Сюда ResRef предмета
if (sResRef == sItemResRef) { object oTarget = GetWaypointByTag("WP_" + sItemResRef);
AssignCommand(oPC, ClearAllActions()); DelayCommand(1.0f, AssignCommand(oPC, ActionJumpToLocation(GetLocation(oTarget)))); } } |
1.
QUOTE (-fenix- @ Jul 2 2005, 16:25) |
ActionJumpToLocation(GetLocation(oTarget)))); |
можно просто
ActionJumpToObject(oTarget)
2. лучше не по резрефу проверять, а по тэгу. (могу расписать, почему важнее и правильнее)
3.
QUOTE (-fenix- @ Jul 2 2005, 16:25) |
DelayCommand(1.0f, |
делэй не стоит делать тут. В эту 1 секунду я могу пошевелиться и потом сам лови забавки

4. в ХОТУ есть система, там дефолтовые скрипты на активат, эквип, анэквип и прочие вызываеют скрипт с с тэгом вещи (те имя скрипта = тэгу вещи). Так что можно через нее делать еще.
Если уж делать наиболее верно, то лучше так:
Neverwinter Script Source |
void main() { object oPC = GetItemActivator(); object oItem = GetItemActivated(); string sItemTag = GetTag(oItem);
if (sItemTag == "thing") { object oPlace = GetWaypointByTag("wp_" + sItemTag);
AssignCommand(oPC, ClearAllActions()); // если честно, лишнее, все действия и так очищаются, когда используешь вещь SetCommandable(FALSE, oPC); // если есть задержка, и ты не хочешь, чтобы цель двигалась DelayCommand(1.0, AssignCommand(oPC, ActionJumpToObject(oPlace))); DelayCommand(1.0, SetCommandable(TRUE, oPC)); // если с задержкой return; } } |
Lex, если делать через тэг вещи вызывание скрипта, то в нем придется описать точку перехода, которую можно вкратце изобразить тут же.
GoingPro)
Jul 2 2005, 17:42
Наверное я что то не так делаю, но у меня не получилось....
А во вотором скрипте ошибка...
А да я найти "Только своя уникальная сила" не смог.
Наверное делать это все ещо не для меня...
QUOTE |
А во вотором скрипте ошибка... |
он не компилится из-за буквы "я" маленькой в коментсах.
Удали их (русский текст после // )
QUOTE |
А да я найти "Только своя уникальная сила" не смог. |
свойства вещи - заклинание (cast spell) - уникальная сила на себя (unique power self only)
GoingPro)
Jul 2 2005, 17:53
Ладно у меня такая вот вещь я ее не на себя юзаю, это портал

...
Нужно было в самом начале сказать, наверное есть даже способ проще.
При исользовании его портируешься в следующую локацыю. Тоесть в другую локацыю.
--------------------------------------
Ага кажеться я стал понимать.
object oPlace = GetWaypointByTag("wp_" + sItemTag); вместо "wp_" поставить таг вэйпоинта? а sItemTag у нас уже есть и указан выше..Правильно?
тебе это и написал Zirrex. На себя, не на себя, не суть. Факт в том, что джамп идет к точке wp_ItemTag (itemtag это тэг айтема)
А если ты не можешь то готовое, что тебе дали внедрить у себя, то я помочь не могу.
"При исользовании его портируешься в следующую локацыю"
А вот это я сам не понял. Что значит следующая?
(поправь просто предыдущий пост свой, допиши конкретнее, что тебе надо, новый пост не оставляй.)
-fenix-
Jul 2 2005, 18:28
Люди че та я запутался!
Один говорит, что лучше по тегу, другой по РесРефу(это не только тут, по форуму много таких прений). На сколько я знаю, по тегу выберают предмет с локации, а по РесРефу из палитры(но можно и из локи).
Можете плизз раз и навсегда разъяснить принципиальное отличие.
QUOTE |
(но можно и из локи) |
- выборки из локи по рефу нет. Только по тэгу или по списку. Ты не путай ситуацию, когда надо отскриптить айтем со скриптами, что работают с плейсами.
Смотри: я хочу сделать колечко с уникальным свойством и дать его НПС. Беру нпс, в инвентарь кидаю кольцо (резреф у него там какой-то уже есть и тэг тоже какой-то там есть). Меняю свойства, внешний вид и тэг (но не резреф, он не меняется, когда работаешь с экземплярами объектов (те с теми, что в локе, а не с теми, что в палитре)). Вот теперь колечко имеет уникальный тэг и я могу отскриптовать например что-нить на одевание кольца и прочее, проверяя тэг его. А если проверю резреф? То тогда я могу перепутать его с тем кольцом, что я взял за основу, но полностью переделал. Оно мне надо? В этой ситуации роль уникального идентификатора играет тэг. (обычно при правильной работе он всегда эту роль играет, а реф только для создания вещей нужен)
Можно конечно все вещи создавать в палитре, чтобы резрефы были уникальные, но палитра тогда у тебя будет огромная (а нужна то она по сути для создания вещей скриптами, нафиг там тебе всякие мертвые души. Ну и если надо много кого одеть и обуть в одинаковые вещи.. стражу например.)
во.. язык у меня не ахти подвешен, но вроде самую суть сказал.
QUOTE |
Ага кажеться я стал понимать. object oPlace = GetWaypointByTag("wp_" + sItemTag); вместо "wp_" поставить таг вэйпоинта? а sItemTag у нас уже есть и указан выше..Правильно? |
эх..нет.
смотри:
string sItemTag = GetTag(oItem); - те в переменной хранится тэг вещи.. (например ITM_RING - тэг нужной нам вещи)
if (sItemTag == "thing") - тут мы сравниваем, если наш тег совпадает с тем, который нам нужен (тут надо заменить тогда thing на ITM_RING, чтобы нужное нам колчеко проверялось)
а точка, куда прыгать получается такая:
WP_ITM_RING
Итог:
в скрипте Zirrex замени "thing" на "ITM_RING" (или что там тебе нужно) и помести waypoint с тэгом "WP_ITM_RING" в точку, куда тебе надо портироваться. Потом сделай кольцо (или что там у тебя) с этим тэгом (ITM_RING) и свойство ему сделай нужное (я выше описал)
Скрипт ставь на onItemActivated (или как-то так.. в свойствах модуля ищи эакладки эти).
Теперь проверь работу кольца.
В любом случае тебе надо почитать статьи по тулсету (тема Ссылки или Вопросы и Ответы)
--------
че-то я добрый сегодня.. последний раз такое расписываю.. читайте статьи, епть.
-fenix-
Jul 2 2005, 19:35
Lex спосибо, я вообще так и думал, просто когда читал все перепалки раньше че та намудрил, короче сам себе мозги засрал так, что совсем запуталси
Был нужен человек каторый все это разгребет,
спосибо тебе огромное
GoingPro)
Jul 2 2005, 19:51
Lex спасибо огромное, я щас ознакомлюсь хотябы в основах скриптовых и тогда уже начну что то делать, а то я только по рисованию спецыализировался

Ага ещо кстати у портала нету спэлов, я не могу поставить уникальную силу....
Добавлено в [mergetime]1120323907[/mergetime] Последний глупый вопрос...Как зделать что бы НПС довала предмет(тоже колечко например)....
-fenix-
Jul 2 2005, 21:08
QUOTE |
Ага ещо кстати у портала нету спэлов, я не могу поставить уникальную силу.... |
А зачем она тебе, ты хочешь чтобы после захода в портал игрока кидало в последнее место юзания кольца? Тады надо на OnActivateItem в св-ах модуля. вот это
Neverwinter Script Source |
void main() void main() { object oPC = GetItemActivator(); object oItem = GetItemActivated(); string sItemTag = GetTag(oItem);
if (sItemTag == "thing") { object oPlace = GetWaypointByTag("wp_" + sItemTag); SetLocalLocation(oPC, "ReturnLocation", GetLocation(oPC));
AssignCommand(oPC, ClearAllActions()); // если честно, лишнее, все действия и так очищаются, когда используешь вещь SetCommandable(FALSE, oPC); // если есть задержка, и ты не хочешь, чтобы цель двигалась DelayCommand(1.0, AssignCommand(oPC, ActionJumpToObject(oPlace))); DelayCommand(1.0, SetCommandable(TRUE, oPC)); // если с задержкой return; } } |
А на OnUsed портала вот это
Neverwinter Script Source |
void main() { object oUser = GetLastUsedBy();
AssignCommand(oUser, ClearAllActions()); DelayCommand(1.0f, AssignCommand(oUser, ActionJumpToLocation(GetLocalLocation(oUser, "ReturnLocation")))); } |
QUOTE |
Последний глупый вопрос...Как зделать что бы НПС довала предмет(тоже колечко например).... |
Если в разговоре, то при нажатие на ветку диалога в Редакторе диалога становятся активными заклатки "текст появляется при" и "совершенные действия", там есть изображение шляпки, нажимай и там разберешься.
А вообще есть функция
Neverwinter Script Source |
CreateItemOnObject(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1) |
string sItemTemplate - тег кольца
object oTarget=OBJECT_SELF - кому дать
int nStackSize=1 - кол-во в стеки(для стрел, болтов пуль...)
Такой вопрос. Как сделать хак-пак не обязательным для модуля. То есть если у игрока есть возможность и желание качать хак, он его скачает и будет играть, а если нет то...все равно будет играть.
Хак-пак включает в себя...портреты скажем. Только не надо говорить - "Запихни портреты отдельно в архив" и тому подобное. Нужен именно хак.
Пусть твой ленивый игрок получит такой же по имени хак, но только вместо ресурсов впихни в него свое фото. И все.
Однако, если твой модуль будет, к примеру иметь что-то чего есть только в хаке, то в случае с тайлом-моделью ты получишь крах. Поэтому не трахай тут нам мозги.
QUOTE (Лито @ Jul 3 2005, 01:29) |
"Запихни портреты отдельно в архив" и тому подобное. |
Я бы сказал куда запихнуть все это... Уже столько общаешься на форуме, а такие глупые вопросы задаешь
GoingPro)
Jul 2 2005, 23:02
-fenix- Извените, но я плохо разбераюсь в скрптах, не могли бы Вы написать полный скрит, который мне необходимо будет внедрить в диолог.
Please!Буду очень благодарен.
Добавлено в [mergetime]1120335467[/mergetime] Спасибо я уже разобрался, какой я молочинка
Добавлено в [mergetime]1120335494[/mergetime] Быстро учусь
-fenix-
Jul 3 2005, 12:58
На заклатку совершенные действия вот этот скрипт
Neverwinter Script Source |
void main() { CreateItemOnObject("Тут тег кольца", GetPCSpeaker(), 1);
} |
"Тут тег кольца" - не тэг, а резреф. Кольцо ДОЛЖНО быть в палитре.
Мефистофель
Jul 5 2005, 16:38
"Ну немогу, так интересно" А скажите возможно ли заработать, продав целую игру из 3х модулей?
Ну если тебя устроит мой ответ. То за месяц на настоящей работе я зарабатываю больше чем за два года титанического упорного труда над проектом. Вопросы есть?
Мефистофель
Jul 6 2005, 20:39
QUOTE |
Ну если тебя устроит мой ответ. То за месяц на настоящей работе я зарабатываю больше чем за два года титанического упорного труда над проектом. Вопросы есть? |
НЕТ! Но зато как наверное приятно увидеть свою игру на прилавках в магазине, и когда твоё "детище" комуто интересно!
\\За оффтоп прошу извенить.
Доброго времени суток. У меня такой вопрос:как в NVN:HofU можно изменить количество нанимаемых хенчменов.Те сделать их не 2,а 3 или 4.Я так понял, что за это отвечает "GetMaxHenchmen()".Но вот где он прописан я найти не смог.
И что означает "SetMaxHenchmen(4)"?Ведь хенчменов не 4.Помогите разобраться
SetMaxHenchmen(4) это установить максимальное число хенчманов
AddHenchman(хозяин, кого добавить)
нпр
у тебя стоит 5 ниписей у каждого в диалоге стоит строка прими меня в пати, можно даже один диалог
затем ставишь SetMaxHenchmen сколько тебе надо
после чего у каждого нипися в просьбе вступить в пати ставишь простой скрипт
Neverwinter Script Source |
void main() { object oPC = GetPCSpeaker(); AddHenchman(oPC, OBJECT_SELF); } |
вот в принципе и все, главное еще чтобы наемники имели сценарии хенчманов
эти помоему от xp1
OnBlocked=x0_ch_hen_block
OnDamaged=x0_ch_hen_damage
OnDeath=x0_ch_hen_death
OnConversation=x0_ch_hen_conv
OnDisturbed=x0_ch_hen_distrb
OnCombatRoundEnd=x0_ch_hen_combat
OnHeartbeat=x0_ch_hen_heart
OnPhysicalAttacked=x0_ch_hen_attack
OnPerception=x0_ch_hen_percep
OnRested=x0_ch_hen_rest
OnSpawn=x0_ch_hen_spawn
OnSpellCast=x0_ch_hen_spell
OnUserDefined=x0_ch_hen_usrdef
QUOTE |
SetMaxHenchmen(4) это установить максимальное число хенчманов |
Вставил я скрипт.Но найм стал немного странен. В диалоге 2 варианта ответа:да, мол, пошли, и нет, народу с тобой много. Ставлю скрипт в 1. Пойдем,говорю. Он мне - избавься от народа,а сам же становится членом отряда.Причем народа у меня нет нет. Если поставить скрипт в 2,то он всегда говорит,что согласен,но больше 2 не нанимается-когда приходит третий хенчмен, то уходит первый.Почему так происходит и как с этим бороться?
P.S. Извините если коряво выражаюсь,но по другому не получается
Мефистофель
Jul 10 2005, 21:40
Народ где взять хак пак, с новенькой красивой областью города?
Zirrex
Jul 10 2005, 22:28
Glom, посмотри эту систему хеyчманов
Neverwinter Vault.
Мефистофель, поищи хаки по этой ссылке
Neverwinter Vault. Если внимательно осмотреть ресурс, то сможешь найти все что душе угодно.
Batkom
Jul 11 2005, 02:24
кстати о ваулте, я давно хотел реализовать лошадок, есть ли там чтото подобное?
я искал, не нашел, может плохо искал..
Мефистофель
Jul 11 2005, 02:28
Скажите сколько максимум хеyчманов, в НВН возможно?
Добавлено в 02:33
Очень для меня важно! подскажите пожалуйста, возможно ли, играть в НВН. по сети или Лан. через "HyperTerminal" если Да, то что для этого нужно сделать?
Добавлено в [mergetime]1121038510[/mergetime]
QUOTE |
кстати о ваулте, я давно хотел реализовать лошадок, есть ли там чтото подобное? я искал, не нашел, может плохо искал.. |
Посмотри в теме "Ссылки" тама то что ты ищеш!
GoingPro)
Jul 11 2005, 08:41
Помогите пожалуйста. Как зделать что бы в скриптах можно было юзать русский язык?
Zirrex
Jul 11 2005, 09:03
GoingPro), зайди на сайт этого форума в раздел "Файлов", и скачай требуемую заплатку для редактора. После установки ты сможешь печатать в скриптовом редакторе русскими буквами, а также пропечатывать маленькую букву "я".
Мефистофель, вначале попробуй соединиться по "Hyper Terminal", а уж потом следуй этим инструкциям:
Чтобы войти на сервер шарда, нужно зайти в игру, выбрать раздел "Multiplayer", в полях ввода "Player name" и "Password" ввести свои "account" и "password", которые зарегистрированы (не обязательный шаг с паролем, есть возможность обойти связь с мастер сервером, вписав в файл hosts адреса 127.0.0.1 master.bioware.com и 127.0.0.1 nwmaster.bioware.com).
Далее жмешь "Ok" и выбираешь кнопку меню "Join LAN Game".
На появившейся странице в нижнем меню выбери "Direct Connect". В поле ввода "Server IP Address" введи адрес своего сервера, например "nwn.server.ru", поле "Player password" оставь незаполненным (это по желанию, в настройках сервера можно указать и пароль). Жми "Ok".
После входа на сервер, создай себе персонажа и жми "Game".
Если к твоему серверу удастся подсоедениться человеку, который с тобой связался, значит возможна такая игра, если нет, значит только через интернет LAN соединение.
Да, о том, что надо запускать серверную часть через "nwserver", я писать не буду, об этом должны знать все, кто работает с редактором.