Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )


Важно! Ссылки
Slam
Отправлено: Nov 4 2009, 11:13


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


дело не в семёрке. поставил нвн от 1с - крякозяблов нет. попробую расковырять в чём суть
ЗЫ: в нвн от 1с в папке оверрайд шрифтов никаких нету...
update: 1с русифицировала ехе-шник nwn.exe когда его ставишь, то крякозяблы пропадают. в тулсете всё равно крякозяблы в комментариях к функциям
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #134209 · Ответов: 118 · Просмотров: 208,954

Важно! Ссылки
Slam
Отправлено: Nov 3 2009, 12:58


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Цитата(Lex @ Nov 1 2009, 14:04) *
положи в папку override русские шрифты: http://www.wrg.ru/download.php?view.80

не помогло. так же пробовал и эти: http://www.wrg.ru/download.php?view.79
крякозяблами так же отображаются комментарии к функциям после установки русского nwscript.nss от сюда: http://www.wrg.ru/download.php?view.172
ЗЫ: стоит NWN Diamond Edition + Windows 7
ЗЫЫ: поставил пиратку + руский диалог.тлк + шрифты - не помогло. надо попробовать найти образ нвн от 1С, проверить его
странно что похоже я один такой (IMG:style_emoticons/kolobok_light/smile.gif) мож винда дуркует...
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #134198 · Ответов: 118 · Просмотров: 208,954

Важно! Ссылки
Slam
Отправлено: Oct 31 2009, 20:41


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Цитата(Virake @ Jun 28 2009, 23:07) *
Мой dialog.tlk v1.69 - очередная версия.
Ссылка

небольшая проблема со шрифтами: когда запускаешь nwn.exe, появившаяся менюшка отображается крякозабликами. см. скриншот.
может каких шрифтов не хватает?

Скриншот: http://s61.radikal.ru/i174/0910/b1/4502ca3e9832.jpg
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #134184 · Ответов: 118 · Просмотров: 208,954

Важно! Скрипты
Slam
Отправлено: May 22 2007, 22:18


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Цитата(Aiwan @ May 22 2007, 21:19) [snapback]108507[/snapback]
2. Муть какая то непонятная. Где стоит скрипт, при каких условиях работает. Додумывать было лень.
3. Функция атаки не будет действовать на дружественные НПС. Код поправь под свои нужды.

2. Скрипт стоит на диалоге. При выборе ПС определенной ветки диалога, выполняется этот скрипт. Сам по себе он рабочий, но у меня не получается сделать его функцией и запихать в свой инклуд.
3. Мой скрипт атаки один в один такой же кроме строчки AssignCommand(oSelf, DetermineCombatRound(oPC)); (кстати, всё хочу узнать, что это), проблемма в самом модуле, т.к. в новосозданном модуле атака проходит нормально.
ЗЫ: извините, если я не внятно выражаю свои мысли
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #108509 · Ответов: 3670 · Просмотров: 701,186

Важно! Скрипты
Slam
Отправлено: May 22 2007, 18:51


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


У меня вот образовалось два вопроса
1. Если я буду в одно и то же время выполнять много команд (например через DellayCommand с одинаковой задержкой), это может как-то негативно повлиять на работу скрипта?
2. Написал идущий ниже скрипт. Пытаюсь загнать его в функцию, но не получается. При дебаге выяснилось, что функция не может получить обьект НПС. Т.е. у меня в передаваемых параметрах стоит object NPC, когда функция начинает работать с ним, то возвращает OBJECT_INVALID. Пробовал НПС в скрипте определять и по тэгу и как OBJECT_SELF, результат один. Я вроде бы уже писал пару подобных функций и все было нормально...
Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Name: sl_KnockDown
//:: Place: Ever
//:://////////////////////////////////////////////
/*
Описание:
НПС вырубает ПС с анимацией одного удара
*/

//:://////////////////////////////////////////////
//:: Created By: Slam
//:: Created On: 22.05.07
//:://////////////////////////////////////////////

#include "sc_inc_debug"
void main()
{
    SetLocalInt(GetModule(), "DebugMode", 4);
    SetLocalInt(GetModule(), "DebugLogFile", 1);

    object oPC = GetFirstPC();
    object oNPC = OBJECT_SELF;

    SetCommandable(FALSE,oPC);
    SetImmortal(oPC, TRUE);
    SetImmortal(oNPC, TRUE);
    AssignCommand(oNPC, ClearAllActions());
// Записываем в локалку текущую фракцию НПС ////////////////////////////////////
    object oFactionMember = GetNextFactionMember(oNPC, FALSE);
    int i;
    for (i = 0; i < 5; i++)
    {
        if (oFactionMember != oNPC)
        {
            SetLocalObject(oNPC, "FactionMember", oFactionMember);
            break;
        }
        oFactionMember = GetNextFactionMember(oFactionMember, FALSE);
    }
////////////////////////////////////////////////////////////////////////////////

// ОПРЕДЕЛЯЕМ, ДЕРЖИТ ЛИ НПС ОРУЖИЕ В РУКАХ ДО НАЧАЛА БОЯ //////////////////////
    object oRHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC);
    object oLHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC);
    if(oRHand != OBJECT_INVALID || oLHand != OBJECT_INVALID)
    {
        SetLocalInt(oNPC, "bIsArmed", 1);
    }
////////////////////////////////////////////////////////////////////////////////

// Ударяем, а потом вырубаем ПС ////////////////////////////////////////////////
    effect eKnockdown = EffectKnockdown();
    float fNPCKnockdownTime = 10.0;
    AssignCommand(oNPC, ActionUseFeat(FEAT_KNOCKDOWN, oPC));
    DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockdown, oPC, fNPCKnockdownTime));
////////////////////////////////////////////////////////////////////////////////

    DelayCommand(1.5, FadeToBlack(oPC));

// Востанавливаем фракцию НПС //////////////////////////////////////////////////
    if (GetIsObjectValid(GetLocalObject(oNPC, "FactionMember")))
    {
        object oFactionMember = GetLocalObject(oNPC, "FactionMember");
        DelayCommand(0.6, ChangeFaction(oNPC, oFactionMember));
        DelayCommand(0.7, DeleteLocalObject(oNPC, "FactionMember"));
    }
    else
        DelayCommand(0.6, ChangeToStandardFaction(oNPC, STANDARD_FACTION_COMMONER));
    DelayCommand(0.8, ClearPersonalReputation(oPC, oNPC));
////////////////////////////////////////////////////////////////////////////////

    AssignCommand(oNPC, DelayCommand(0.9, ClearAllActions(TRUE)));

// Лечим НПС и ПС //////////////////////////////////////////////////////////////
    int nMaxNPCHP = GetMaxHitPoints(oNPC);
    int nMaxPCHP = GetMaxHitPoints(oPC);
    DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(nMaxNPCHP), oNPC));
    DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(nMaxPCHP), oPC));
////////////////////////////////////////////////////////////////////////////////

// ЕСЛИ НПС ДО НАПАДЕНИЯ БЫЛ БЕЗ ОРУЖИЯ, УБИРАЕМ ОРУЖИЕ В ИНВЕНТАРЬ ////////////
    if (GetLocalInt(oNPC, "bIsArmed") == 0)
    {
        AssignCommand(oNPC, DelayCommand(
            9.0, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC))));
        AssignCommand(oNPC, DelayCommand(
            9.1, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC))));
    }
    DeleteLocalInt(oNPC, "bIsArmed");
////////////////////////////////////////////////////////////////////////////////

    DelayCommand(fNPCKnockdownTime, FadeFromBlack(oPC));
    DelayCommand(fNPCKnockdownTime, SetCommandable(TRUE, oPC));
}

и вот ещё вопрос
3. Делаю скрипт с нападением НПС на ПС (меняю репутацию НПС а потом ActionAttack(oNPC,oPC)). Тестирую, и вот что мне невер выдаёт:
"You cannot perform this action on a friendly target due to PvP settings", как это переводится я знаю, но вот откуда такая чтука появилась... Раньше всё робило, видимо в самом Тулсете что-то нахимичил... Может кто сталкивался?
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #108503 · Ответов: 3670 · Просмотров: 701,186

Важно! Скрипты
Slam
Отправлено: May 15 2007, 14:29


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


gennady спсиба тебе за всё :) навёл меня на очень умные мысли
Переписал заново скрипт. Всё работает как часы. Выкладываю, может кому пригодится
Neverwinter Script Source
//::////////////////////////////////////////////////////////////////////////////
//:: Name: sl_on_used
//:: Place: OnUsed Placeble
//::////////////////////////////////////////////////////////////////////////////
/*
ОПИСАНИЕ:
Скрипт дуэли между ПС и НПС. На обоих до начала боя вешается бессмертие.
Дуэль проигрывает тот, у кого остался 1 хитпоинт.
Проигравший на время вырубается и, опционально, у него выбрасываются
оружие и деньги.
УСТАНОВКА:
Скрипт sl_on_used поставить на любое действие, которое должно активиоровать дуэль
Скрипт sl_OnCombatRoundEnd поставить на OnCombatRoundEnd НПСа, с которым будет дуэль
Создать фракцию temp_enemy, нейтральную ко всем, кроме игрока, к нему враждебна
Создать существо с этой фракцией в закрытой локе
Удостовериться в том, что НПС с которым будет дуэль - не единственный в своей фракции,
если единственный, то создать существо с его фракцией в закрытой локе
(опционально) Настроить НПС с приведенными ниже параметрами
ПАРАМЕТРЫ НПС:
Установите на НПС локальные переменные числового типа,
если хотите отключить следующие возможности скрипта
(Название переменной/Значение/Описание)
WinCountOFF/1/НЕ Считает количество побед НПС над ПС
DefeatCountOFF/1/НЕ Считает количество поражений НПС от ПС
WeaponDropOFF/1/НПС при поражение НЕ выбрасывает свое оружие
MoneyDropOFF/1/НПС при поражение НЕ выбрасывает свои деньги
GetPlayerWeaponMoneyOFF/1/НПС при победе НЕ забирает оружие и деньги ПС
HealOFF/1/НПС НЕ лечится после боя
OwnWeaponPickUpOFF/1/Если ПС после победы не взял оружие и/или золото НПС,
                                          то НПС когда оклемается, подберет его
WeaponHideOFF/1/Если НПС перед боем стоял без оружия,
                                      то после боя он НЕ убирает его в инвентарь
GoHomeOFF/1/НПС после боя НЕ возврашается на то место,
                                                    где он был перед началом боя
*/

//::////////////////////////////////////////////////////////////////////////////
//:: Created By: Slam
//:: Created On: 14.05.07
//:: Debugging help: gennady
//::////////////////////////////////////////////////////////////////////////////

void main()
{
    object oPC = GetFirstPC();
    object oNPC = GetNearestObjectByTag("npc_guard");
    object oFaction = GetObjectByTag("temp_enemy");
    // МЕНЯЕМ ФРАКЦИЮ НПС НА РОДНУЮ ////////////////////////////////////////////
    object oFactionMember = GetNextFactionMember(oNPC, FALSE);
    int i;
    for (i = 0; i < 5; i++)
    {
        if (oFactionMember != oNPC)
        {
            SetLocalObject(oNPC, "FactionMember", oFactionMember);
        break;
        }
        oFactionMember = GetNextFactionMember(oFactionMember, FALSE);
    }
    ////////////////////////////////////////////////////////////////////////////
    // ВОЗВРАЩАЕМ НПС НА МЕСТО /////////////////////////////////////////////////
    if (GetLocalInt(oNPC, "GoHomeOFF") == 0)
    {
        SetLocalLocation(oNPC, "Return_Loc", GetLocation(oNPC));
        SetLocalFloat(oNPC, "FacingPoint", GetFacing(oNPC));
    }
    ////////////////////////////////////////////////////////////////////////////
    SetLocalInt(oNPC, "bImmortalAttack", 1);
    // ОПРЕДЕЛЯЕМ, ДЕРЖИТ ЛИ НПС ОРУЖИЕ В РУКАХ ДО НАЧАЛА БОЯ //////////////////
    if (GetLocalInt(oNPC, "WeaponHideOFF") == 0)
    {
        object oRHand=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC);
        object oLHand=GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC);
        if(oRHand != OBJECT_INVALID || oLHand != OBJECT_INVALID)
        {
            SetLocalInt(oNPC, "bIsArmed", 1);
        }
    }
    ////////////////////////////////////////////////////////////////////////////
    AssignCommand(oNPC, ClearAllActions());
    AssignCommand(oNPC, ActionEquipMostDamagingMelee());
    ChangeFaction(oNPC, oFaction);
    SetImmortal(oNPC, TRUE);
    SetImmortal(oPC, TRUE);
    AssignCommand(oNPC, ActionDoCommand(ActionAttack(oPC)));
}

Neverwinter Script Source
//::////////////////////////////////////////////////////////////////////////////
//:: Name: sl_OnCombatRoundEnd
//:: Place: OnCombatRoundEnd Creature
//::////////////////////////////////////////////////////////////////////////////
/*
*/

//::////////////////////////////////////////////////////////////////////////////
//:: Created By: Slam
//:: Created On: 14.05.07
//:: Debugging help: gennady
//::////////////////////////////////////////////////////////////////////////////

#include "x0_i0_position"

void DefeatCount(object oNPC);
void General(object oPC, object oNPC);
void ChangeFactionToParrent(object oNPC);
void WeaponDrop(object oNPC);
void MoneyDrop(object oNPC);
void WinCount(object oNPC);
void Heal(object oNPC);
void GetPlayerWeaponMoney(object oNPC, object oPC);
void GoHome(object oNPC);
void WeaponHide(object oNPC);
void Heal(object oNPC);
void OwnWeaponPickUp(object oNPC);
void DoIt(object oNPC);

void main()
{
    ExecuteScript("nw_c2_default3", OBJECT_SELF);

    object oNPC = OBJECT_SELF;
    if (GetLocalInt(oNPC, "bImmortalAttack") == 1)
    {
        object oPC = GetFirstPC();
        int nCurPCHP = GetCurrentHitPoints(oPC);
        int nCurNPCHP = GetCurrentHitPoints(oNPC);
        // Если ПС выиграл
        if (nCurNPCHP < 2)
        {
            // УВЕЛИЧИВАЕМ ЛОКАЛКУ, КОТОРАЯ СЧИТАЕТ ПОРАЖАЕНИЯ НПС НА 1, см. void DefeatCount(object oNPC)
            if (GetLocalInt(oNPC, "DefeatCountOFF") == 0)
                DefeatCount(oNPC);
            effect eKnockdown = EffectKnockdown();
            string sPCwinString = "Получил!";
            float fNPCKnockdownTime = 10.0;
            float fNPCParentFacingPoint = GetLocalFloat(oNPC, "FacingPoint");
            // ОБЩАЯ ПРОЦЕДУРА ДЛЯ НПС, НЕ ЗАВИСИМО, ВЫИГРАЛ ОН ИЛИ ПРОИГРАЛ, см. void General(object oPC, object oNPC)
            General(oPC, oNPC);
            // НПС ВЫКИДЫВАЕТ СВОЕ ОРУЖИЕ ПЕРЕД СОБОЙ, см. void WeaponDrop(object oNPC)
            if (GetLocalInt(oNPC, "WeaponDropOFF") == 0)
                WeaponDrop(oNPC);
            // НПС ВЫКИДЫВАЕТ СВОИ ДЕНЬГИ ПЕРЕД СОБОЙ, см. void MoneyDrop(object oNPC)
            if (GetLocalInt(oNPC, "MoneyDropOFF") == 0)
                MoneyDrop(oNPC);
            AssignCommand(oNPC, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockdown, oNPC, fNPCKnockdownTime)));
            AssignCommand(oPC, ActionSpeakString(sPCwinString));
            // ВЫПОЛНЯЕТСЯ, КОГДА НПС ПРОИГРАЛ, см. void DoIt(object oNPC) /////
            DelayCommand(fNPCKnockdownTime + 0.3, DoIt(oNPC));
        }
        // Если НПС выиграл
        if (nCurPCHP < 2)
        {
            // УВЕЛИЧИВАЕМ ЛОКАЛКУ, КОТОРАЯ СЧИТАЕТ ПОБЕДЫ НПС НА 1, см. void WinCount(object oNPC)
            if (GetLocalInt(oNPC, "WinCountOFF") == 0)
                WinCount(oNPC);
            string sNPCwinString = "Получил!";
            float fPCKnockdownTime = 10.0;
            // ОБЩАЯ ПРОЦЕДУРА ДЛЯ НПС, НЕ ЗАВИСИМО, ВЫИГРАЛ ОН ИЛИ ПРОИГРАЛ, см. void General(object oPC, object oNPC)
            General(oPC, oNPC);
            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), oPC, fPCKnockdownTime);
            AssignCommand(oNPC, SpeakString(sNPCwinString));
            AssignCommand(oNPC, ActionWait(3.0));
            // НПС ПЬЕТ ИЗ БУТЫЛКИ И ЛЕЧИТСЯ, см. void Heal(object oNPC)
            if (GetLocalInt(oNPC, "HealOFF") == 0)
                Heal(oNPC);
            // НПС ЗАБИРАЕТ ЗОЛОТО И ОРУЖИЕ ИГРОКА, ЕСЛИ ОНИ ЕСТЬ, см. void GetPlayerWeaponMoney(object oNPC, object oPC)
            if (GetLocalInt(oNPC, "GetPlayerWeaponMoneyOFF") == 0)
                GetPlayerWeaponMoney(oNPC, oPC);
            // ВОЗВРАЩАЕМ НПС НА МЕСТО, см. void GoHome(object oNPC) ///////////
            if (GetLocalInt(oNPC, "GoHomeOFF") == 0)
                GoHome(oNPC);
            // ЕСЛИ НПС ДО НАПАДЕНИЯ БЫЛ БЕЗ ОРУЖИЯ, УБИРАЕМ ОРУЖИЕ В ИНВЕНТАРЬ, см. void WeaponHide(object oNPC)
            if (GetLocalInt(oNPC, "WeaponHideOFF") == 0)
                WeaponHide(oNPC);
        }
    }
    else return;
}


// ОБЩАЯ ПРОЦЕДУРА ДЛЯ НПС, НЕ ЗАВИСИМО, ВЫИГРАЛ ОН ИЛИ ПРОИГРАЛ ///////////////
void General(object oPC, object oNPC)
{
    DeleteLocalInt(oNPC, "bImmortalAttack");
    SetImmortal(oNPC, FALSE);
    SetImmortal(oPC, FALSE);
    // МЕНЯЕМ ФРАКЦИЮ НПС НА РОДНУЮ, см. void ChangeFactionToParrent(object oNPC)
    ChangeFactionToParrent(oNPC);
    ClearPersonalReputation(oPC, oNPC);
    AssignCommand(oNPC, ClearAllActions(TRUE));
    AssignCommand(oPC, ClearAllActions(TRUE));
}
////////////////////////////////////////////////////////////////////////////////

// МЕНЯЕМ ФРАКЦИЮ НПС НА РОДНУЮ ////////////////////////////////////////////////
void ChangeFactionToParrent(object oNPC)
{
    if (GetIsObjectValid(GetLocalObject(oNPC, "FactionMember")))
    {
    object oFactionMember = GetLocalObject(oNPC, "FactionMember");
    ChangeFaction(oNPC, oFactionMember);
    }
    else
    ChangeToStandardFaction(oNPC, STANDARD_FACTION_COMMONER);
    DeleteLocalObject(oNPC, "FactionMember");
}
////////////////////////////////////////////////////////////////////////////////

// ВОЗВРАЩАЕМ НПС НА МЕСТО /////////////////////////////////////////////////////
void GoHome(object oNPC)
{
    float fNPCParentFacingPoint = GetLocalFloat(oNPC, "FacingPoint");
    location lNPCParentLoc = GetLocalLocation(oNPC, "Return_Loc");
    AssignCommand(oNPC, ActionMoveToLocation(lNPCParentLoc));
    AssignCommand(oNPC, ActionDoCommand(DelayCommand(0.3, SetFacing(fNPCParentFacingPoint))));
    DeleteLocalLocation(oNPC, "Return_Loc");
    DeleteLocalFloat(oNPC, "FacingPoint");
}
////////////////////////////////////////////////////////////////////////////////

// ЕСЛИ НПС ДО НАПАДЕНИЯ БЫЛ БЕЗ ОРУЖИЯ, УБИРАЕМ ОРУЖИЕ В ИНВЕНТАРЬ
void WeaponHide(object oNPC)
{
    if (GetLocalInt(oNPC, "bIsArmed") == 0)
    {
        object oNPCRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC);
        object oNPCLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC);
        AssignCommand(oNPC, ActionDoCommand(DelayCommand(1.0, ActionUnequipItem(oNPCRightHand))));
        AssignCommand(oNPC, ActionDoCommand(DelayCommand(1.5, ActionUnequipItem(oNPCLeftHand))));
    }
    DeleteLocalInt(oNPC, "bIsArmed");
}
////////////////////////////////////////////////////////////////////////////////

// НПС ЗАБИРАЕТ ЗОЛОТО И ОРУЖИЕ ИГРОКА, ЕСЛИ ОНИ ЕСТЬ //////////////////////////
void GetPlayerWeaponMoney(object oNPC, object oPC)
{
    int nPCGold = GetGold(oPC);
    object oPCWeaponTag = GetLastWeaponUsed(oPC);
    if ((nPCGold != 0) && (GetIsObjectValid(oPCWeaponTag)))
    { // Есть золото, есть оружие
        string sNPCmoneyweaponString = "И деньги и оружие. Богатый сегодня улов";
        location lPCMoneyLoc = GenerateNewLocationFromLocation(GetLocation(oPC), 1.0, GetLeftDirection(GetFacing(oPC)), 90.0);
        location lPCWeaponLoc = GenerateNewLocationFromLocation(GetLocation(oPC), 0.5, GetRightDirection(GetFacing(oPC)), 90.0);
        object oPCGold = CreateObject(OBJECT_TYPE_ITEM, "nw_it_gold001", lPCMoneyLoc);
        string sPCWeaponResRef = GetResRef(oPCWeaponTag);
        object oPCWeapon = CreateObject(OBJECT_TYPE_ITEM, sPCWeaponResRef, lPCWeaponLoc);
        TakeGoldFromCreature(nPCGold, oPC, TRUE);
        SetItemStackSize(oPCGold, nPCGold);
        AssignCommand(oNPC, ActionPickUpItem(oPCGold));
        DestroyObject(oPCWeaponTag);
        AssignCommand(oNPC, ActionPickUpItem(oPCWeapon));
        AssignCommand(oNPC, ActionSpeakString(sNPCmoneyweaponString));
    }
    else if ((nPCGold != 0) && !(GetIsObjectValid(oPCWeaponTag)))
    { // Есть золото, нет оружия
        location lPCMoneyLoc = GenerateNewLocationFromLocation(GetLocation(oPC), 1.0, GetLeftDirection(GetFacing(oPC)), 90.0);
        string sNPCmoneynoweaponString = "И зачем тебе деньги, ты даже оружия не можешь купить";
        object oPCGold = CreateObject(OBJECT_TYPE_ITEM, "nw_it_gold001", lPCMoneyLoc);
        TakeGoldFromCreature(nPCGold, oPC, TRUE);
        SetItemStackSize(oPCGold, nPCGold);
        AssignCommand(oNPC, ActionPickUpItem(oPCGold));
        AssignCommand(oNPC, ActionSpeakString(sNPCmoneynoweaponString));
    }
    else if ((nPCGold == 0) && (GetIsObjectValid(oPCWeaponTag)))
    { // Нет золота, есть оружие
        location lPCWeaponLoc = GenerateNewLocationFromLocation(GetLocation(oPC), 0.5, GetRightDirection(GetFacing(oPC)), 90.0);
        string sNPCnomoneyweaponString = "Хорошее у тебя было оружие, жаль, что еще денег нет";
        string sPCWeaponResRef = GetResRef(oPCWeaponTag);
        object oPCWeapon = CreateObject(
        OBJECT_TYPE_ITEM, sPCWeaponResRef, lPCWeaponLoc);
        DestroyObject(oPCWeaponTag);
        AssignCommand(oNPC, ActionPickUpItem(oPCWeapon));
        AssignCommand(oNPC, ActionSpeakString(
        sNPCnomoneyweaponString));
    }
    else
    { // Нет золота, нет оружия
        string sNPCnomoneynoweaponString = "Ни денег, ни оружия, и зачем ты на меня полез?!";
        AssignCommand(oNPC, ActionMoveToObject(oPC));
        AssignCommand(oNPC, ActionSpeakString(
        sNPCnomoneynoweaponString));
    }
    AssignCommand(oNPC, ActionWait(3.0));
}
////////////////////////////////////////////////////////////////////////////////

// НПС ПЬЕТ ИЗ БУТЫЛКИ И ЛЕЧИТСЯ ///////////////////////////////////////////////
void Heal(object oNPC)
{
    int nMaxNPCHP = GetMaxHitPoints(oNPC);
    AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK));
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(nMaxNPCHP), oNPC);
}
////////////////////////////////////////////////////////////////////////////////

// УВЕЛИЧИВАЕМ ЛОКАЛКУ, КОТОРАЯ СЧИТАЕТ ПОБЕДЫ НПС НА 1 ////////////////////////
void WinCount(object oNPC)
{
    int nWinCount = GetLocalInt(oNPC, "WinCount");
    SetLocalInt(oNPC, "WinCount", nWinCount + 1);
}
////////////////////////////////////////////////////////////////////////////////

// НПС ВЫКИДЫВАЕТ СВОИ ДЕНЬГИ ПЕРЕД СОБОЙ //////////////////////////////////////
void MoneyDrop(object oNPC)
{
    int nNPCGold = GetGold(oNPC);
    if (nNPCGold !=0)
    {
        location lNPCGoldLoc = GenerateNewLocationFromLocation(GetLocation(oNPC), 0.5, GetLeftDirection(GetFacing(oNPC)), 0.0);
        object oNPCGold = CreateObject(OBJECT_TYPE_ITEM, "nw_it_gold001", lNPCGoldLoc);
        TakeGoldFromCreature(nNPCGold, oNPC, TRUE);
        SetItemStackSize(oNPCGold, nNPCGold);
    }
}
////////////////////////////////////////////////////////////////////////////////

// НПС ВЫКИДЫВАЕТ СВОЕ ОРУЖИЕ ПЕРЕД СОБОЙ //////////////////////////////////////
void WeaponDrop(object oNPC)
{
    object oNPCWeapon = GetLastWeaponUsed(oNPC);
    if (GetIsObjectValid(oNPCWeapon))
    {
        SetLocalString(oNPC, "NPCWeaponTag", GetTag(oNPCWeapon));
        location lNPCWeaponLoc = GenerateNewLocationFromLocation(GetLocation(oNPC), 1.0, GetRightDirection(GetFacing(oNPC)), 90.0);
        string sNPCItemResRef = GetResRef(oNPCWeapon);
        DestroyObject(oNPCWeapon);
        CreateObject(OBJECT_TYPE_ITEM, sNPCItemResRef, lNPCWeaponLoc);
    }
}
////////////////////////////////////////////////////////////////////////////////

// УВЕЛИЧИВАЕМ ЛОКАЛКУ, КОТОРАЯ СЧИТАЕТ ПОРАЖАЕНИЯ НПС НА 1 ////////////////////
void DefeatCount(object oNPC)
{
    int nDefeatCount = GetLocalInt(oNPC, "DefeatCount");
    SetLocalInt(oNPC, "DefeatCount", nDefeatCount + 1);
}
////////////////////////////////////////////////////////////////////////////////

// НПС СОБИРАЕТ СВОЕ ОРУЖИЕ, ЕСЛИ ИГРОК НЕ ПОДНЯЛ ЕГО //////////////////////////
void OwnWeaponPickUp(object oNPC)
{
    object oNPCWeapon = GetNearestObjectByTag(GetLocalString(oNPC, "NPCWeaponTag"));
    if (GetIsObjectValid(oNPCWeapon))
    {
        AssignCommand(oNPC, ActionPickUpItem(oNPCWeapon));
    }
    object oNPCGold = GetNearestObjectByTag("NW_IT_GOLD001");
    if (GetIsObjectValid(oNPCGold))
    {
        AssignCommand(oNPC, ActionPickUpItem(oNPCGold));
    }
}
////////////////////////////////////////////////////////////////////////////////

// ВЫПОЛНЯЕТСЯ, КОГДА НПС ПРОИГРАЛ, сделанна из-за своей криворукости при работе с DelayCommand
void DoIt(object oNPC)
{
    string sNPCdefeatString = "Ммм... Моя голова";
    AssignCommand(oNPC, ActionSpeakString(sNPCdefeatString));
    AssignCommand(oNPC, ActionWait(3.0));
    // НПС ПЬЕТ ИЗ БУТЫЛКИ И ЛЕЧИТСЯ, см. void Heal(object oNPC) ///////////////
    if (GetLocalInt(oNPC, "HealOFF") == 0)
        Heal(oNPC);
    // НПС СОБИРАЕТ СВОЕ ОРУЖИЕ, ЕСЛИ ИГРОК НЕ ПОДНЯЛ ЕГО, см. void OwnWeaponPickUp(object oNPC)
    if (GetLocalInt(oNPC, "OwnWeaponPickUpOFF") == 0)
        OwnWeaponPickUp(oNPC);
    DeleteLocalString(oNPC, "NPCWeaponTag");
    // ВОЗВРАЩАЕМ НПС НА МЕСТО, см. void GoHome(object oNPC) ///////////////////
    if (GetLocalInt(oNPC, "GoHomeOFF") == 0)
        GoHome(oNPC);
    // ЕСЛИ НПС ДО НАПАДЕНИЯ БЫЛ БЕЗ ОРУЖИЯ, УБИРАЕМ ОРУЖИЕ В ИНВЕНТАРЬ, см. void WeaponHide(object oNPC)
    if (GetLocalInt(oNPC, "WeaponHideOFF") == 0)
        WeaponHide(oNPC);
}

  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #108255 · Ответов: 3670 · Просмотров: 701,186

Важно! Скрипты
Slam
Отправлено: May 11 2007, 20:47


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Цитата(gennady @ May 11 2007, 14:35) [snapback]108066[/snapback]

ну с тэгом нпс, у которого берется фракция я не напутал, суть в том, что можно сделать закрытую локу и там его поставить; а если брать ближайшего, то тогда придется в каждой локе, где будет дуэль ставить этого нпс и прятать его куда-нить :)
А смысл считать урон НПС? я что-то не пойму...
А можешь дать ссылку на этот пост Айвана, может пригодится
С хенчмена игрока же другая история, я думаю в модуле делать эту фишку как дуэль 1х1, таким образом хенчменов буду морозить и всё...
какие проблемы возникли:
1. не знаю как возвращать "родную" фракцию НПС, т.е. мне нужна функция типа записывает текующу фракцию НПС в локалку, а потом восстанавливает
2. когда ПС выигрывает, не получается сделать, чтобы НПС после того как проснулся, вернулся бы на свою старую позицию и повернулся лицом, куда смотрел раньше (см. коменты)
3. иногда такой глюк, у ПС здоровье =1, но он не может попасть по НПС и поэтому ф-ция не выполняется
4. НПС чаще всего не атакуюет, пока его не ударишь...
Если есть какие-то идеи по оптимизации, поделитесь пожалуйста :)
ЗЫ: спасибо всем, кто принимал участие в разработке sss debug system за замечательный инклуд с системой дебага
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #108083 · Ответов: 3670 · Просмотров: 701,186

Slam
Отправлено: May 10 2007, 10:10


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Цитата(azathoth @ May 10 2007, 01:04) [snapback]107992[/snapback]
И обновлять журнал, для этого можно создать две совпадающие записи (типа "<CUSTOM2000><CUSTOM2001>...") и переключаться между ними.
Neverwinter Script Source
//  тут предполагается, что есть записи 10 и 20
object oPC = GetFirstPC();
int nEven = !GetLocalInt(oPC, "LOCINT_RUMOR_EVEN");
SetLocalInt(oPC, "LOCINT_RUMOR_EVEN", nEven);
if (nEven) nEven = 10; else nEven = 20;
AddJournalQuestEntry("HOWTA_RUMOR", nEven, oPC, TRUE, FALSE, TRUE);

а можешь вот это обьяснить по подробнее, я не понял
ЗЫ: простите за нубство, я новичек :)
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #108010 · Ответов: 3359 · Просмотров: 636,414

Важно! Скрипты
Slam
Отправлено: May 10 2007, 09:56


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Цитата(gennady @ May 10 2007, 07:37) [snapback]107996[/snapback]
Как вернуть начальную фракцию НПС, да ты тут все сам уже ответил, когда менял ему эту самую фракцию. Теперь просто возьми другого перса с аналогичной фракцией, и верни своего НПСа в эту фракцию.

этот способ я естественно знаю :) а есть ли другой? т.к. будет не очень удобно если другого перса с аналогичной фракцией в локе не будет
Цитата(gennady @ May 10 2007, 07:37) [snapback]107996[/snapback]
Чтобы НПС вернуть в начальную точку, нужно определить эту самую точку, у тебя это нужно вставить в 1 скрипт:
Neverwinter Script Source
SetLocalLocation(oNPC, "Return_LOC", GetLocation(oNPC));

Тогда во втором эта локация будет определятся так:
Neverwinter Script Source
location Loc = GetLocalLocation(oNPC, "Return_LOC");

и как я сам не догадался...
Цитата(gennady @ May 10 2007, 07:37) [snapback]107996[/snapback]
Вообще идея интересная, но мне кажется, что ее лучше реализовывать через проверку урона, который нанес герой НПСу в определенную отсечку времени…

а вот это я не понял
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #108008 · Ответов: 3670 · Просмотров: 701,186

Slam
Отправлено: May 9 2007, 11:26


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Мне нужно сделать такую вещь:
ПС постепенно узнаёт новую информацию (например о городе)
и она добавляется в его журнал. Но как оказалось, addjournalquestentry
ЗАМЕНЯЕТ старую информацию новой, а не добавляет...
Возможно ли как-то реализовать мою идею?
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #107967 · Ответов: 3359 · Просмотров: 636,414

Важно! Скрипты
Slam
Отправлено: May 8 2007, 21:29


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Представляю на суд общественности свой небольшой скрипт, точнее два.
Что они делают:
Если кто играл в Готику 1,2, тот сразу поймёт
НПС дерётся с ПС, но не убивает его, а оставляет в бессознательном состояние на некоторое время
и забирает его текущее оружие и вещи. Естественно, если выигрывает ПС, то всё происходит также,
только наоборот :)
Ну это скрипты должены делать в идеале... У меня же всё гораздо хуже...
Некоторые вопросы уже есть в комментариях...
плюс ко всему, у меня, когда выигрывает НПС, он начинает говорить и делать часть вещей по два раза (это видимо из-за того, что всё висит на комбатраунде... не знаю как поправить)
Буду очень благодарен, если вы поможите решить эти вопросы. Ну и если можно, то оптимизировать его маленько :)
ЗЫ: Это мой третий в жизни скрипт, так что не судите строго; я его делал около 6 часов... :)
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #107956 · Ответов: 3670 · Просмотров: 701,186

Slam
Отправлено: May 7 2007, 21:02


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Цитата(virusman @ May 7 2007, 21:53) [snapback]107898[/snapback]
Из локации: На квикбаре выключи отображение плейсеблов и звуков, потом выдели всё оставшееся и удали.
Из палитры модуля: Удали из папки temp0 файлы с расширениями utc, uti, utt, uts, ute, utd, после чего перестрой палитры.
//Вопрос вроде не в тот раздел.

с палитрами уже разобрался, но всё равно спасибо.
с локацией счас попробую.
ЗЫ: проблема в том, что их 185... довольно трудоёмкий процесс получится
вопрос ещё, чем можно редактировать файлы gic и git
//Вроде в тот (IMG:style_emoticons/kolobok_light/smile.gif)
  Форум: Custom Content · Просмотр сообщения: #107901 · Ответов: 111 · Просмотров: 120,531

Slam
Отправлено: May 7 2007, 20:28


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


Вопрос такой. Есть ли возможно удалить из модуля всё, кроме плэйсеблов и звуков?
Буду очень благодарен за ответ.
ЗЫ: Ручками не предлагать (IMG:style_emoticons/kolobok_light/smile.gif) сейчас ими и делаю, но ужасно долго, пол-часа только скрипты вычищал...
  Форум: Custom Content · Просмотр сообщения: #107896 · Ответов: 111 · Просмотров: 120,531

Slam
Отправлено: Jan 14 2007, 11:43


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


QUOTE(helvene @ Jan 13 2007, 23:33) [snapback]102208[/snapback]

Давайте, намерно, тогда диалог или в ICQ, или в приват переносить (для меня первое - предпочтительней), потому как с тех пор, как эта инициатива заглохла, я не уверена, что она оживет заново именно здесь.

А если интересен именно архив локаций - попробуйте посмотреть волт, секцию Prefabs.
Это оно и есть.

про секцию на волте я знаю...
а почему вы считаете, что сдесь эта тема не оживёт?
  Форум: Техническая поддержка · Просмотр сообщения: #102235 · Ответов: 74 · Просмотров: 66,341

Slam
Отправлено: Jan 13 2007, 20:24


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


QUOTE(helvene @ Jan 13 2007, 13:14) [snapback]102181[/snapback]

Я слышу голос разума!
Slam, а можно поинтересоваться - вам с какой целью?

из меня плохой дизайнер локаций, вот я и хотел поучиться на примерах
  Форум: Техническая поддержка · Просмотр сообщения: #102198 · Ответов: 74 · Просмотров: 66,341

Slam
Отправлено: Jan 12 2007, 17:16


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


QUOTE(helvene @ Jan 12 2007, 15:51) [snapback]102125[/snapback]

Под какую платформу - NWN или NWN2?

NWN, я думаю НВН2 ещё сыровата, чтобы на неё переходить...
  Форум: Техническая поддержка · Просмотр сообщения: #102138 · Ответов: 74 · Просмотров: 66,341

Slam
Отправлено: Jan 12 2007, 13:38


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


хотелось бы поднять тему...
  Форум: Техническая поддержка · Просмотр сообщения: #102119 · Ответов: 74 · Просмотров: 66,341

Slam
Отправлено: Jan 12 2007, 12:31


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


а как можно узнать, какие строки добавились в dialog.tlk после патча? а именно 1.67-1.68
ЗЫ: простите, что поднял старую тему
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #102114 · Ответов: 28 · Просмотров: 47,078

Важно! Скрипты
Slam
Отправлено: Jan 10 2007, 18:28


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


QUOTE(Lex @ Jan 10 2007, 15:51) [snapback]101993[/snapback]

надо
NSS
int nRand = Random(5);


ps: а лучше еще отмечай строку, которую компилятор отметил. Так надежнее

спасибо! учту
с тулсетом недавно столкнулся, не знал что он на регистр смотрит...
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #101997 · Ответов: 3670 · Просмотров: 701,186

Важно! Скрипты
Slam
Отправлено: Jan 10 2007, 15:16


Level 2
*

Группа: Candidate
Сообщений: 24
Регистрация: 12.04.2005
Пользователь №: 894


NSS
void main()
{

    int nRand = random(5);
    object oNPC = GetObjectByTag("npc_krol");
    string sSpeakStr;

    PlaySound("as_cv_gongring2");
    switch (nRand)
    {
        case 0 : sSpeakStr="Ты что делаешь!?"; break;
        case 1 : sSpeakStr="Прекрати немедленно!"; break;
        case 2 : sSpeakStr="Я всё дядюшке раскажу!"; break;
        case 3 : sSpeakStr="Или ты сам уйдёшь, или я тебе помогу!"; break;
        case 4 : sSpeakStr="465"; break;
    }
    AssignCommand(oNPC, ActionSpeakString(sSpeakStr));
}

temp3.nss(4): ERROR: PARSING VARIABLE LIST
вот... не пойму почему не компилится
  Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #101992 · Ответов: 3670 · Просмотров: 701,186


Есть новые сообщения  Открытая тема (есть новые ответы)
Нет новых сообщений  Открытая тема (нет новых ответов)
Горячая тема (есть новые сообщения)  Горячая тема (есть новые ответы)
Горячая тема (нет новых сообщений)  Горячая тема (нет новых ответов)
Опрос (есть новые голоса)  Опрос (есть новые голоса)
Опрос (нет новых голосов)  Опрос (нет новых голосов)
Тема закрыта  Закрытая тема
Тема перемещена  Тема перемещена
 

Текстовая версия Сейчас: 28th March 2024 - 16:53