Помощь - Поиск - Пользователи - Календарь
Полная версия: ОДИНОЧНЫЙ ВОПРОС
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68
balrog
Мефистофель Может у тебя к модулю, помимо всего борохла их оверрайда, подключенны ешо какие-нибудь хаки?
Мефистофель
QUOTE
Мефистофель Может у тебя к модулю, помимо всего борохла их оверрайда, подключенны ешо какие-нибудь хаки?

Нет я ничё не подключал, у меня всё идёт из Оверейда, но может причина в фойлах, TILESETS? и Textures_Tpc.erf, и Tailes_Tpc.erf?
Zirrex
Ребята, вопросы следующего содержания. Может быть вам они не покажутся новыми, но нормальное решение им я пока что найти не смог.

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 - Выпадение из рук оружия, если его решили сменить в бою
Агрессинг
Вопрос, который некуда сунуть - понадобился срочно демо модуль к Анимации НПС (насколько я помню, там был такой скрипт, который мне нужен)а на ВРГ/ОЛД/ФАЙлы выдает 404 когда кликаю на ссылку к модулю. Может его, как и статью, выложить на новом ВРГ? dntknw.gif
Ну может вы мне и без мода поможете? Почему - то НПС стоит, как столб. Вот скрипт
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));
}
}
}

В чем дело, господа? this.gif
Zirrex
Агрессинг почему твой НПС подлетает к столу совершенно без задержки? Ты хочешь, чтобы он телепортировался, или стол настолько близко, что рукой можно дотянуться? Столбом он у тебя стоит, потому что ты ему изменяешь переменную, и не сбрасываешь, когда ты делаешь:

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));
        }
    }
}


С текстом я не знаю, фраза должна произноситься сразу, или после того, как персонаж подойдет к объекту. Сделал ожидание.
Агрессинг
QUOTE
С текстом я не знаю, фраза должна произноситься сразу, или после того, как персонаж подойдет к объекту. Сделал ожидание.

Спасиб, попробую, че то я напортачил. А ActionSpeakString всегда говорится с послеующим действием, в данном случае - анимацией, а SpeakString можно и без другого действия ставить.
Zirrex
Агрессинг, не знаю, когда я делал НПС "ActionSpeakString", то замечающий НПС игрока, вначале говорил фразу, потом начинал движение. Сделав такое ожидание, он стал вначале подбегать, а потом говорить фразу. В общем, эксперименты быстро наводят на ответы smile.gif

Совет, лучше делай красивые скрипты, тогда в них проще разобраться, а когда все в одну строчку, то глаза разбегаются.
Aiwan
Zirrex тебе надо в вопросы по скриптам.
QUOTE (Агрессинг @ Jun 30 2005, 01:12)
Может его, как и статью, выложить на новом ВРГ?

Скачай мой мануал по Авроре, там теперь и модуль и описание катсцен. Дублировать я не стал больше.
По поводу твоего скрипта...
Ты как всегда юзаешь хертбит. Я рекомендую тебе воткнуть стринги на каждую строку и посмотреть, один блок действий держит в стеке непись или кучу, каждые 6 секунд получает от хертбита. Если у тебя сингл то добавь такую строку себе в начало скрипта:
Neverwinter Script Source
if (GetArea(GetFirstPC()) != OBJECT_SELF)
  {return;}

Lex
QUOTE (Aiwan @ Jun 30 2005, 08:25)
Скачай мой мануал по Авроре, там теперь и модуль и описание катсцен.

речь о статье по анимации и демке к ней, Айв.
(и там я кстати делал только основу, так что проверок бой/диалог/рс в локации тама нету )
Агрессинг
Не получается, хоть зарежся!!! swoon.gif this.gif
Вставил
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));
        }
    }
}
Lex
QUOTE (Aiwan @ Jun 30 2005, 08:25)
if (GetArea(GetFirstPC()) != OBJECT_SELF)
  {return;}

Айв, ты чего советуешь??
Neverwinter Script Source
if (GetArea(GetFirstPC()) != GetArea(OBJECT_SELF))    return;

Zirrex
Агрессинг, она у тебя хоть без этого включения:

Neverwinter Script Source
if (GetArea(GetFirstPC()) != GetArea(OBJECT_SELF)) return;

Говорит что-нибудь?

И потом, если это одиночная игра, на каком эвенте у тебя установлен сей скрипт? Дело в том, что по-умолчанию на хертбите вот этого:

Neverwinter Script Source
int nUser = GetUserDefinedEventNumber();

    if(nUser == 1001) //HEARTBEAT
    {

    }

не нужно. Скрипт будет работать и так.

Подобная ветка нужна на эвенте OnUserDefined, если ты что-то хочешь сделать с НПС, когда рядом игрок. Иначе же она будет ходить по выбранному скриптом пути постоянно, даже когда игрока нет рядом или в локации объекта, это сильно перегрузит игру, если таких НПС будет множество.
Lex
Zirrex, я перечилат пост твой раза 3.. и так и не понял, что ты хотел сказать.
Но суть в том, что Агрессинг написал все верно, кроме проверки на локацию.
Стоит только еще добавить проверку на диалог (IsInConversation) и на бой (GetIsInCombat)
Aiwan
QUOTE (Lex @ Jul 1 2005, 03:06)
Айв, ты чего советуешь??

Ну замутил я pardon.gif ЗАМУТИЛ! pilot.gif
GoingPro)
Подскажите плиз где можно скачать Aurora Toolset???
Буду очень благодарен....
Агрессинг
На nwnights вроде альфа версия валяется (200 с гаком мегабайт)
PS
А зачем топик - то создавать, diablo.gif написал бы в одиночном вопросе!
GoingPro)
У вас очень хитрый форум, я тут впервые, делаю так как на обыкновенных форумах сорри unsure.gif
Агрессинг
Есть топик специально для новичков, правила раздела называется. Повнимательнее в следующий раз.
Zirrex
Lex, он не написал, на какой эвент установил этот скрипт. То что он у него не работает, меня удивляет. Я лишь заметил, что выделенный мной код не нужен на хертбите.
Zirrex
Мягкий Пушистик, давай не будем флеймить. Я знаю что это такое, но он у него не работает, вот я и спрашиваю на всякий случай. Так как иных вариантов от Лекса с Айвеном нету, то не вижу причин сомневаться в работоспособности скрипта.
GoingPro)
Люди как зделать что бы при испльзовании предмета тебя телепортировало на указаное место?
Заранее благодарен...
-fenix-
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))));
  }
}
Lex
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 секунду я могу пошевелиться и потом сам лови забавки smile.gif

4. в ХОТУ есть система, там дефолтовые скрипты на активат, эквип, анэквип и прочие вызываеют скрипт с с тэгом вещи (те имя скрипта = тэгу вещи). Так что можно через нее делать еще.
Zirrex
Если уж делать наиболее верно, то лучше так:

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)
Наверное я что то не так делаю, но у меня не получилось.... unsure.gif
А во вотором скрипте ошибка...
А да я найти "Только своя уникальная сила" не смог. unsure.gif

Наверное делать это все ещо не для меня... swoon.gif
Lex
QUOTE
А во вотором скрипте ошибка...

он не компилится из-за буквы "я" маленькой в коментсах.
Удали их (русский текст после // )

QUOTE
А да я найти "Только своя уникальная сила" не смог. unsure.gif

свойства вещи - заклинание (cast spell) - уникальная сила на себя (unique power self only)

GoingPro)
Ладно у меня такая вот вещь я ее не на себя юзаю, это портал pardon.gif...
Нужно было в самом начале сказать, наверное есть даже способ проще.
При исользовании его портируешься в следующую локацыю. Тоесть в другую локацыю.
--------------------------------------
Ага кажеться я стал понимать.
object oPlace = GetWaypointByTag("wp_" + sItemTag); вместо "wp_" поставить таг вэйпоинта? а sItemTag у нас уже есть и указан выше..Правильно?
Lex
тебе это и написал Zirrex. На себя, не на себя, не суть. Факт в том, что джамп идет к точке wp_ItemTag (itemtag это тэг айтема)
А если ты не можешь то готовое, что тебе дали внедрить у себя, то я помочь не могу.

"При исользовании его портируешься в следующую локацыю"
А вот это я сам не понял. Что значит следующая?
(поправь просто предыдущий пост свой, допиши конкретнее, что тебе надо, новый пост не оставляй.)




-fenix-
Люди че та я запутался!dntknw.gif Один говорит, что лучше по тегу, другой по РесРефу(это не только тут, по форуму много таких прений). На сколько я знаю, по тегу выберают предмет с локации, а по РесРефу из палитры(но можно и из локи).


Можете плизз раз и навсегда разъяснить принципиальное отличие.
Lex
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-
Lex спосибо, я вообще так и думал, просто когда читал все перепалки раньше че та намудрил, короче сам себе мозги засрал так, что совсем запуталси biggrin.gif
Был нужен человек каторый все это разгребет, спосибо тебе огромное
GoingPro)
Lex спасибо огромное, я щас ознакомлюсь хотябы в основах скриптовых и тогда уже начну что то делать, а то я только по рисованию спецыализировался smile.gif


Ага ещо кстати у портала нету спэлов, я не могу поставить уникальную силу....
Добавлено в [mergetime]1120323907[/mergetime]
Последний глупый вопрос...Как зделать что бы НПС довала предмет(тоже колечко например)....
-fenix-
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 - кол-во в стеки(для стрел, болтов пуль...)
Лито
Такой вопрос. Как сделать хак-пак не обязательным для модуля. То есть если у игрока есть возможность и желание качать хак, он его скачает и будет играть, а если нет то...все равно будет играть.
Хак-пак включает в себя...портреты скажем. Только не надо говорить - "Запихни портреты отдельно в архив" и тому подобное. Нужен именно хак.
Aiwan
Пусть твой ленивый игрок получит такой же по имени хак, но только вместо ресурсов впихни в него свое фото. И все.
Однако, если твой модуль будет, к примеру иметь что-то чего есть только в хаке, то в случае с тайлом-моделью ты получишь крах. Поэтому не трахай тут нам мозги. this.gif
QUOTE (Лито @ Jul 3 2005, 01:29)
"Запихни портреты отдельно в архив" и тому подобное.

Я бы сказал куда запихнуть все это... Уже столько общаешься на форуме, а такие глупые вопросы задаешь dntknw.gif
GoingPro)
-fenix- Извените, но я плохо разбераюсь в скрптах, не могли бы Вы написать полный скрит, который мне необходимо будет внедрить в диолог. Please!
Буду очень благодарен.
Добавлено в [mergetime]1120335467[/mergetime]
Спасибо я уже разобрался, какой я молочинка yahoo.gif
Добавлено в [mergetime]1120335494[/mergetime]
Быстро учусь smile.gif
-fenix-
На заклатку совершенные действия вот этот скрипт

Neverwinter Script Source
void main()
{
   
    CreateItemOnObject("Тут тег кольца", GetPCSpeaker(), 1);

}
Lex
"Тут тег кольца" - не тэг, а резреф. Кольцо ДОЛЖНО быть в палитре.
Мефистофель
"Ну немогу, так интересно" А скажите возможно ли заработать, продав целую игру из 3х модулей?
Aiwan
Ну если тебя устроит мой ответ. То за месяц на настоящей работе я зарабатываю больше чем за два года титанического упорного труда над проектом. Вопросы есть?
Мефистофель
QUOTE
Ну если тебя устроит мой ответ. То за месяц на настоящей работе я зарабатываю больше чем за два года титанического упорного труда над проектом. Вопросы есть?

НЕТ! Но зато как наверное приятно увидеть свою игру на прилавках в магазине, и когда твоё "детище" комуто интересно!
\\За оффтоп прошу извенить.
Glom
Доброго времени суток. У меня такой вопрос:как в NVN:HofU можно изменить количество нанимаемых хенчменов.Те сделать их не 2,а 3 или 4.Я так понял, что за это отвечает "GetMaxHenchmen()".Но вот где он прописан я найти не смог.
И что означает "SetMaxHenchmen(4)"?Ведь хенчменов не 4.Помогите разобраться
Batkom
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



Glom
QUOTE
SetMaxHenchmen(4) это установить максимальное число хенчманов

Вставил я скрипт.Но найм стал немного странен. В диалоге 2 варианта ответа:да, мол, пошли, и нет, народу с тобой много. Ставлю скрипт в 1. Пойдем,говорю. Он мне - избавься от народа,а сам же становится членом отряда.Причем народа у меня нет нет. Если поставить скрипт в 2,то он всегда говорит,что согласен,но больше 2 не нанимается-когда приходит третий хенчмен, то уходит первый.Почему так происходит и как с этим бороться?
P.S. Извините если коряво выражаюсь,но по другому не получается
Мефистофель
Народ где взять хак пак, с новенькой красивой областью города? yes.gif
Zirrex
Glom, посмотри эту систему хеyчманов Neverwinter Vault.

Мефистофель, поищи хаки по этой ссылке Neverwinter Vault. Если внимательно осмотреть ресурс, то сможешь найти все что душе угодно.
Batkom
кстати о ваулте, я давно хотел реализовать лошадок, есть ли там чтото подобное?
я искал, не нашел, может плохо искал.. dntknw.gif
Мефистофель
Скажите сколько максимум хеyчманов, в НВН возможно?
Добавлено в 02:33
Очень для меня важно! подскажите пожалуйста, возможно ли, играть в НВН. по сети или Лан. через "HyperTerminal" если Да, то что для этого нужно сделать?
Добавлено в [mergetime]1121038510[/mergetime]
QUOTE
кстати о ваулте, я давно хотел реализовать лошадок, есть ли там чтото подобное?
я искал, не нашел, может плохо искал..

Посмотри в теме "Ссылки" тама то что ты ищеш!
GoingPro)
Помогите пожалуйста. Как зделать что бы в скриптах можно было юзать русский язык?
Zirrex
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", я писать не буду, об этом должны знать все, кто работает с редактором.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.