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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 130 131 132 133 134 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Lex
сообщение May 26 2010, 16:11
Сообщение #3276


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



там есть и для навыков и для заклинаний, вроде бы. А если меня глючит и такой вещи нет, то на вход вешать эффект с увеличением шанса провала. Всяко проще, чем спелхук.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение May 26 2010, 16:22
Сообщение #3277


Level 11
Иконки Групп

Класс: Волшебник
Характер: Lawful Evil
Раса: Эльф
NWN: Скриптинг [PW]
Gem of the North



Цитата
А если меня глючит и такой вещи нет, то на вход вешать эффект с увеличением шанса провала. Всяко проще, чем спелхук.
Тебя глючит. Спеллхук чуть сложнее, зато на порядок более надёжен.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение May 27 2010, 00:43
Сообщение #3278


Level 4
**

Класс: Клерик
Характер: Lawful Good
Раса: Человек



Огромное спасибо. Давно хотел сделать такую штуку, но было лень.
Поковырял компанию, немного переработал оригинальные скрипты.
В дальнейшем собираюсь переделать работу с предметами и сам скрипт под мультиплеер с записью свойств в MySQL
Смысл таков:
На локацию вешается локалинт ITEM_KEY = 0 как счетчик.
В недоступном месте стоит вейпоинт backup_waypoint.
При заходе в локацию, на игрока вешается эффект провала заклинания и прочищаются все эффекты кроме естественных.
С предметами сделано довольно странно, но для сингла сойдет:
1) Предметы копируются к вейпоинту с новыми тегами
2) На оригинальных предметах прочищаются все свойства и устанавливается локалстринг с тегом копии
При выходе из локации с игрока снимаются эффект спеллфейла и полиморфа(иначе нельзя будет восстановить свойства на заполиморфимшеся друле), а потом с предметами происходит следующее:
1) Изымается локалстринг с тегом буферного предмета
2) Копируются все свойства с буферного на оригинальный предмет
3) Буферный предмет уничтожается
Раскомментировал, как мог.
На onEnter локации:
Neverwinter Script
#include "x2_inc_itemprop"

int GetIsAlcohol(object oItem)
{
    itemproperty ip;
    ip = GetFirstItemProperty(oItem);
    if(GetIsItemPropertyValid(GetNextItemProperty(oItem)
))
        return FALSE;
    if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL)
    {
        if(GetItemPropertySubType(ip) == IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_BEER ||
           GetItemPropertySubType(ip) == IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_SPIRITS ||
           GetItemPropertySubType(ip) == IP_CONST_CASTSPELL_SPECIAL_ALCOHOL_WINE)
            return TRUE;
    }
    return FALSE;
}
int GetIsPoisonAmmo(object oItem)
{
    itemproperty ip;
    ip = GetFirstItemProperty(oItem);
    if(GetIsItemPropertyValid(GetNextItemProperty(oItem)
))
        return FALSE;
    if(IPGetItemHasItemOnHitPropertySubType(oItem, IP_CONST_ONHIT_ITEMPOISON))
        return TRUE;
    return FALSE;
}
int GetIsDyeKit(object oItem)
{
    if(GetBaseItemType(oItem) == BASE_ITEM_MISCSMALL)
    {
        itemproperty ip = GetFirstItemProperty(oItem);
        if(GetItemPropertyType(ip) == ITEM_PROPERTY_CAST_SPELL)
        {
            int nSubType = GetItemPropertySubType(ip);
            return (nSubType >= 490 && nSubType <= 497);
        }
        return FALSE;
    }
    return FALSE;
}
//Копирует предмет
void RemoveAllProperties(object oItem, object oPC, int nSlot = -1)
{
    if(oPC != OBJECT_INVALID)
    {
        if(oItem == OBJECT_INVALID)//Если не передается предмет, но передается слот, то работать с предетом на слоте
           {
            oItem = GetItemInSlot(nSlot, oPC);
            if(oItem == OBJECT_INVALID)
            return;
           }
           else
            {
            int nType = GetBaseItemType(oItem);
            if(nType == BASE_ITEM_TORCH ||
               nType == BASE_ITEM_TRAPKIT ||
               nType == BASE_ITEM_HEALERSKIT ||
               nType == BASE_ITEM_GRENADE ||
               nType == BASE_ITEM_THIEVESTOOLS ||
               nType == 109 || // crafting stuff
               nType == 110 ||
               nType == 112)
                return;
            }
    }
   
   
    if(GetIsAlcohol(oItem) || GetIsPoisonAmmo(oItem) || GetIsDyeKit(oItem))
        return;
    if(oItem == OBJECT_INVALID)
        return;
    // вейпоинт, куда складываются копии предметов
    //Должен быть недоступен игроку
    object oWP = GetWaypointByTag("backup_waypoint");
    //счетчик предметов, должен быть установлен для объекта выполнения заранее и не должен сбрасываться
    int nKey = GetLocalInt(OBJECT_SELF, "ITEM_KEY");
    nKey++;
    SetLocalInt(OBJECT_SELF, "ITEM_KEY", nKey);
    string sKey = IntToString(nKey);
    object oCopy = CopyObject(oItem, GetLocation(oWP), OBJECT_INVALID, "back_item" + sKey);
    //После копирования на предмет записывается его ключ
    SetLocalString(oItem, "ITEM_KEY", sKey);

    itemproperty ip = GetFirstItemProperty(oItem);
    while(GetIsItemPropertyValid(ip))
    {
        RemoveItemProperty(oItem, ip);
        ip = GetNextItemProperty(oItem);
    }
}
//Убирает эффекты с существа, оставляя естественные эффекты, например EFFECT_TYPE_POISON
void RemoveEffects(object oObject)
{
    effect eEff = GetFirstEffect(oObject);
    while(GetIsEffectValid(eEff))
    {
        int nType = GetEffectType(eEff);
        if(GetEffectSubType(eEff) != SUBTYPE_EXTRAORDINARY &&
           (nType == EFFECT_TYPE_ABILITY_INCREASE ||
           nType == EFFECT_TYPE_AC_INCREASE ||
           nType == EFFECT_TYPE_ATTACK_INCREASE ||
           nType == EFFECT_TYPE_BLINDNESS ||
           nType == EFFECT_TYPE_CHARMED ||
           nType == EFFECT_TYPE_CONCEALMENT ||
           nType == EFFECT_TYPE_CONFUSED ||
           nType == EFFECT_TYPE_CURSE ||
           nType == EFFECT_TYPE_DAMAGE_IMMUNITY_INCREASE ||
           nType == EFFECT_TYPE_DAMAGE_INCREASE ||
           nType == EFFECT_TYPE_DAMAGE_REDUCTION ||
           nType == EFFECT_TYPE_DAMAGE_RESISTANCE ||
           nType == EFFECT_TYPE_DAZED ||
           nType == EFFECT_TYPE_DEAF ||
           nType == EFFECT_TYPE_DOMINATED ||
           nType == EFFECT_TYPE_ELEMENTALSHIELD ||
           nType == EFFECT_TYPE_ETHEREAL ||
           nType == EFFECT_TYPE_FRIGHTENED ||
           nType == EFFECT_TYPE_HASTE ||
           nType == EFFECT_TYPE_IMMUNITY ||
           nType == EFFECT_TYPE_IMPROVEDINVISIBILITY ||
           nType == EFFECT_TYPE_INVISIBILITY ||
           nType == EFFECT_TYPE_INVULNERABLE ||
           nType == EFFECT_TYPE_ABILITY_INCREASE ||
           nType == EFFECT_TYPE_NEGATIVELEVEL ||
           nType == EFFECT_TYPE_PARALYZE ||
           nType == EFFECT_TYPE_POLYMORPH ||
           nType == EFFECT_TYPE_REGENERATE ||
           nType == EFFECT_TYPE_SANCTUARY ||
           nType == EFFECT_TYPE_SAVING_THROW_INCREASE ||
           nType == EFFECT_TYPE_SEEINVISIBLE ||
           nType == EFFECT_TYPE_SILENCE ||
           nType == EFFECT_TYPE_SKILL_INCREASE ||
           nType == EFFECT_TYPE_SLOW ||
           nType == EFFECT_TYPE_SPELL_IMMUNITY ||
           nType == EFFECT_TYPE_SPELL_RESISTANCE_INCREASE ||
           nType == EFFECT_TYPE_SPELLLEVELABSORPTION ||
           nType == EFFECT_TYPE_TEMPORARY_HITPOINTS ||
           nType == EFFECT_TYPE_TRUESEEING ||
           nType == EFFECT_TYPE_ULTRAVISION ||
           nType == EFFECT_TYPE_INVULNERABLE))
            RemoveEffect(oObject, eEff);
        eEff = GetNextEffect(oObject);
    }
}

void main()
{
    object oEnter = GetEnteringObject();
    //Если игрок сохранился, вышел из игры и загрузился потом, ничего с ним не делать
    //INSIDE - Локальная переменная для избежания глюков с save\load
    int nInside = GetLocalInt(oEnter, "INSIDE");
    if(nInside == 1) return;
    SetLocalInt(oEnter, "INSIDE", 1);
    RemoveEffects(oEnter);
    effect eSpellFailure = EffectSpellFailure(100, SPELL_SCHOOL_GENERAL);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSpellFailure, oEnter);
    object oItem = GetFirstItemInInventory(oEnter);
        while(oItem != OBJECT_INVALID)
        {
            RemoveAllProperties(oItem, oEnter, -1);
            oItem = GetNextItemInInventory(oEnter);
        }
        //Убираем свойства с предметов в слотах экиперовки
        //Если лексикон не врет, то искомые слоты с 0(INVENTORY_SLOT_HEAD) по 13(INVENTORY_SLOT_BOLTS)
        int iSlot = 0;
        while(iSlot<14)
        {
        RemoveAllProperties(OBJECT_INVALID, oEnter, iSlot);
        iSlot++;
        }
}



На onExit:
Neverwinter Script
#include "x2_inc_itemprop"
// Восстанавливаем свойства предметов
void RestoreAllProperties(object oItem, object oPC, int nSlot = -1)
{
   if(oPC != OBJECT_INVALID)
    {
        if(oItem == OBJECT_INVALID)//Если не передается предмет, но передается слот, то работать с предетом на слоте
            oItem = GetItemInSlot(nSlot, oPC);
        if(oItem == OBJECT_INVALID)
            return;
    }
    string sKey = GetLocalString(oItem, "ITEM_KEY");
    object oOriginalItem = GetObjectByTag("back_item" + sKey);
    if(oOriginalItem != OBJECT_INVALID)
    {
        //Копировать все свойства предмета на новый
        IPCopyItemProperties(oOriginalItem, oItem);
        DestroyObject(oOriginalItem);
        DeleteLocalString(oItem, "ITEM_KEY");
    }
}
//Убирает свойства с создания
void RemoveEffects(object oObject)
{
    effect eEff = GetFirstEffect(oObject);
    while(GetIsEffectValid(eEff))
    {
        if(GetEffectType(eEff) == EFFECT_TYPE_SPELL_FAILURE || GetEffectType(eEff) == EFFECT_TYPE_POLYMORPH)
            RemoveEffect(oObject, eEff);
        eEff = GetNextEffect(oObject);
    }
}

void main()
{
    object oExit = GetExitingObject();
    SetLocalInt(oExit, "INSIDE", 0); // Локальная переменная для избежания глюков с save\load
    if(GetObjectType(oExit) == OBJECT_TYPE_CREATURE)
    {
        RemoveEffects(oExit);
        object oItem = GetFirstItemInInventory(oExit);
        float fDelay = 4.0; //Задержка для избежания глюков с прогрузкой, можно увеличить
        while(oItem != OBJECT_INVALID)
        {
            DelayCommand(fDelay, RestoreAllProperties(oItem, oExit, -1));
            oItem = GetNextItemInInventory(oExit);
        }
        //Убираем свойства с предметов в слотах экиперовки
        //Если лексикон не врет, то искомые слоты с 0(INVENTORY_SLOT_HEAD) по 13(INVENTORY_SLOT_BOLTS)
        int iSlot = 0;
        while(iSlot<14)
        {
        DelayCommand(fDelay, RestoreAllProperties(OBJECT_INVALID, oExit, iSlot));
        iSlot++;
        }
       
    }
    }

}


Сообщение отредактировал Batkom - May 27 2010, 00:59
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
SvetikSM
сообщение May 27 2010, 08:35
Сообщение #3279


Level 1


Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек



приветик)

делаю свой первый в жизни мод)) до этого модостроем не занималась вообще.
по началу всё достаточно просто получалось, сделала участки, разместила монстров, неписей, прописала диалоги, переходы между локациями...
но вот дело дошло до скриптов, и тут совсем ничего не понятно (IMG:style_emoticons/kolobok_light/sad.gif)

попробовала добавить опыт, как написано здесь

Цитата
//-------------------- Уровень игрока для игры в модуле ------------------------
// К примеру нам нужен игрок 5 уровня. Смотрим таблицу уровней и видим,
// что Level 5 = 10000 xp.
{
SetXP(oPC, 10000);
}

ничего не получается, никакого опыта (IMG:style_emoticons/kolobok_light/sad.gif)

также пробовала деньги добавлять, снова не работает ((

мой мод не очень большой, и много там не нужно, но помогите хотя бы с простыми задачами, пожалуйста (IMG:style_emoticons/kolobok_light/unsure.gif)

1. как все таки мне сделать, чтобы при старте модуля игрокам назначался 5-ый уровень?

2. как сделать, чтобы в диалоге с НПЦ появлялась строчка, что его можно присоединить в отряд? ( в безвыходной ситуации взяла Боддинока Глинка, поменяла ему все диалоги под свой сюжет, но тем не менее остается всегда строчка, что я работаю на Арибет - я не знаю как и где это убрать ... ).

3. ну и наконец, как сделать хотя бы простенький квест? Например непись дает задание, принести ему такой то предмет, и чтобы при подношении ему этого предмета он выдавал бы N-ное количество опыта и золота.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 27 2010, 09:44
Сообщение #3280


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(SvetikSM @ May 27 2010, 09:35) *
ничего не получается, никакого опыта sad.gif

как именно написала скрипт и куда его поставила? Процитированный тобой кусок - не является законченным скриптом, это лишь функция.
отвечая на твой первый вопрос, должно быть так:
Neverwinter Script
void main()
{
object oPC = GetFirstPC();
SetXP(oPC , 10000);
}

Этот скрипт нужно поставить в слот модуля, на onEnterPlayer (или как-то так он называется).

по поводу всего остального, прочитай для начала: http://www.city-of-masters.ru/forums/index...?showtopic=1612
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
SvetikSM
сообщение May 27 2010, 11:07
Сообщение #3281


Level 1


Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек



спасибо. с опытом и деньгами разобралась.
со спутником тоже, но не совсем.
вот это я ему прописала:
Цитата
if(GetLocalInt(OBJECT_SELF, "HENCHED") != TRUE) // Проверка, что присоединяется один раз
{
SetLocalInt(OBJECT_SELF, "HENCHED", TRUE); // Вот и установка
AddHenchman(GetPCSpeaker(), OBJECT_SELF); // Добавляем хенча тому игроку, с кем говорит


теперь по завершении диалоги НПЦ входит в отряд. Но, если его на время отлучить из отряда, то второй раз он уже почему то не нанимается, хотя строчка, по которой он должен входить - есть.
что я делаю не так? (IMG:style_emoticons/kolobok_light/unsure.gif)

Цитата(SvetikSM @ May 27 2010, 15:06) *
спасибо. с опытом и деньгами разобралась.
со спутником тоже, но не совсем.
вот это я ему прописала:


теперь по завершении диалоге НПЦ входит в отряд. Но, если его на время отлучить из отряда, то второй раз он уже почему то не нанимается, хотя строчка, по которой он должен входить - есть.
что я делаю не так? (IMG:style_emoticons/kolobok_light/unsure.gif)

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 27 2010, 12:21
Сообщение #3282


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(SvetikSM @ May 27 2010, 12:07) *
теперь по завершении диалоги НПЦ входит в отряд. Но, если его на время отлучить из отряда, то второй раз он уже почему то не нанимается, хотя строчка, по которой он должен входить - есть.
что я делаю не так? unsure.gif

не снимаешь переменную HENCHED. Она в твоей ситуации вообще не нужна, имхо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение May 27 2010, 12:30
Сообщение #3283


Level 11
Иконки Групп

Класс: Волшебник
Характер: Lawful Evil
Раса: Эльф
NWN: Скриптинг [PW]
Gem of the North



Цитата
1. как все таки мне сделать, чтобы при старте модуля игрокам назначался 5-ый уровень?
Если планируется, что играть будет несколько человек одновременно, то про GetFirstPC() во всех скриптах нужно забыть. Например, в скрипте на заход
Neverwinter Script
object oPC = GetEnteringObject();
На мой взгляд, пихать во все скрипты, где нужно получить игрока, GetFirstPC() - крайне вредная привычка даже для сингла.

Сообщение отредактировал Ilerien - May 27 2010, 12:31
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение May 27 2010, 12:32
Сообщение #3284


Level 4
**

Класс: Клерик
Характер: Lawful Good
Раса: Человек



Ага.
Еще вариант: добавить в onhb хенча
Neverwinter Script
if (GetIsPC(GetFactionLeader(OBJECT_SELF))) SetLocalInt(OBJECT_SELF, "HENCHED", FALSE);

Считаю, что проверку HENCHED нужно делать при отображении в диалоге строки "Пойдем со мной"

Сообщение отредактировал Batkom - May 27 2010, 12:41
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 27 2010, 13:00
Сообщение #3285


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Цитата(Batkom @ May 27 2010, 13:32) *
Считаю, что проверку HENCHED нужно делать при отображении в диалоге строки "Пойдем со мной"

там проще проверить, в патии хенч или нет. те переменная тут явно дублирующая.
Цитата(Ilerien @ May 27 2010, 13:30) *
GetFirstPC() - крайне вредная привычка даже для сингла.

для сингла не вредная (IMG:style_emoticons/kolobok_light/smile.gif) И я не обратил внимание что там про "игроков". тогда да, от GetFirstPC надо отказываться.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение May 27 2010, 13:20
Сообщение #3286


Level 11
Иконки Групп

Класс: Волшебник
Характер: Lawful Evil
Раса: Эльф
NWN: Скриптинг [PW]
Gem of the North



Цитата(Lex @ May 27 2010, 13:00) *
для сингла не вредная (IMG:style_emoticons/kolobok_light/smile.gif)
Ещё какая вредная (IMG:style_emoticons/kolobok_light/smile.gif) 1) захочется переделать модуль под мультиплеер или хотя бы потестить двумя клиентами -> случится пипец; 2) это ухудшает понимание API и механизма исполнения скриптов; 3) захочет скриптер войти в команду шарда или что-нибудь в этом роде -> придётся переучиваться (IMG:style_emoticons/kolobok_light/smile.gif)

Сообщение отредактировал Ilerien - May 27 2010, 13:21
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
SvetikSM
сообщение May 27 2010, 16:24
Сообщение #3287


Level 1


Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек



эм...
вот так написала
Цитата
{
object oPC = GetEnteringObject();
SetXP(oPC , 10000);
}


но теперь при каждом заходе в игру опыт всегда снижается до 10к, до 5 лвла, даже если герой несколько прокачался вперед.
как это исправить? (IMG:style_emoticons/kolobok_light/declare.gif)

да, игра планируется не одиночная, а на двух-трех человек.

Цитата
не снимаешь переменную HENCHED. Она в твоей ситуации вообще не нужна, имхо.

спасибо, теперь со спутником всё нормально (IMG:style_emoticons/kolobok_light/declare.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение May 27 2010, 17:45
Сообщение #3288


Level 11
Иконки Групп

Класс: Волшебник
Характер: Lawful Evil
Раса: Эльф
NWN: Скриптинг [PW]
Gem of the North



Цитата
как это исправить?
Neverwinter Script
void main()
{
    object oPC = GetEnteringObject();
    if(GetXP(oPC) < 10000)
        SetXP(oPC, 10000);
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
greye
сообщение May 30 2010, 21:57
Сообщение #3289


Level 7
**

Класс: Некромант
Характер: True Neutral
Раса: Нежить



Neverwinter Script
int nGoldAmount = some_func();
SendMessageToPC(oPlayer, IntToString(nGoldAmount) + " gold to move");
AssignCommand(oPlayer, TakeGoldFromCreature(nGoldAmount, oPlayer, TRUE));

onPlayerDeath, после воскрешения и вообще всё валидное.
В сообщении игроку выводится правильное значение, но деньги забираются все, что есть. В чём проблема?

Вопрос снят...

Сообщение отредактировал greye - May 30 2010, 22:38
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение Jun 1 2010, 17:25
Сообщение #3290


Level 4
**

Класс: Клерик
Характер: Lawful Good
Раса: Человек



Доброе время суток. Сейчас ваяю крафт. Решил сделать некий конструктор. Однако, дабы избежать перегруженности палитры предметов, было решено генерировать предметы полностью динамически. Застопорился только в одном: Как сменить предмету имя и описание? Это вообще возможно из скриптов?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
greye
сообщение Jun 1 2010, 17:53
Сообщение #3291


Level 7
**

Класс: Некромант
Характер: True Neutral
Раса: Нежить



SetName, SetDescription
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение Jun 1 2010, 18:51
Сообщение #3292


Level 4
**

Класс: Клерик
Характер: Lawful Good
Раса: Человек



Спасибо, я балбес, SetName нашел, а вот SetDescription нету. Он в каком-то инклюде?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение Jun 1 2010, 19:25
Сообщение #3293


Level 11
Иконки Групп

Класс: Волшебник
Характер: Lawful Evil
Раса: Эльф
NWN: Скриптинг [PW]
Gem of the North



Нет, в версии 1.69 / в плагине Funcs к NWNX.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение Jun 1 2010, 22:25
Сообщение #3294


Level 4
**

Класс: Клерик
Характер: Lawful Good
Раса: Человек



Чорт, на 1,69 переходить совсем не хочется, много лишнего и с dialog.tlk проблемы. Впрочем, NWNX все равно подключать собирался. Спасибо.

Сообщение отредактировал Batkom - Jun 1 2010, 22:25
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Jun 1 2010, 22:35
Сообщение #3295


Level 17
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



SetDescription есть в 1.69.
А NWNX уже сам требует 1.69.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ilerien
сообщение Jun 1 2010, 22:56
Сообщение #3296


Level 11
Иконки Групп

Класс: Волшебник
Характер: Lawful Evil
Раса: Эльф
NWN: Скриптинг [PW]
Gem of the North



Цитата
Чорт, на 1,69 переходить совсем не хочется, много лишнего и с dialog.tlk проблемы.
Actually, никаких проблем. Полностью переведённый dialog.tlk для 1.69. А лишнее же всегда можно не использовать, верно?
Вернул на место ссылку на плейграунд. Алсо, не первый случай, когда ссылки на плейграунд начинают магическим образом вести на вpг. Достойный способ потешить самолюбие, ничего не скажешь.

Сообщение отредактировал Ilerien - Jun 7 2010, 19:13
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение Jun 2 2010, 02:32
Сообщение #3297


Level 4
**

Класс: Клерик
Характер: Lawful Good
Раса: Человек



Ух-ты!
Вот спасибо. (впрочем, я еще конечно поканителюсь с переходом на 1.69, конечно, не известно, чем это грозит, главное, чтобы с тайлсетом ничего не стряслось)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
ReyBrujo
сообщение Jun 6 2010, 19:07
Сообщение #3298


Level 2
*

Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Вот один из моих скриптиков, который я использовал как спец-атаку монстра (в моем случае дракона).
Действует он так :
1. Проставляем переменные.
2. Чекаем локацию НПЧ на наличие валидных созданий - врагов.
3. Если враг ,- НПЧ ,- то парализуем его на 10-20 сек.
4. Если враг ПЧ - парализуем на 10-20 сек и колдуем на него заклинание огненного шара.
5. Записываем локальную переменную специальных атак.

Может, кому - то понадобится. =)

Neverwinter Script
/////////////////////////////////////////////////////
//////        /////    //////  //  //            //
/////        //  //  //      //  //            ///
////          /////    /////    /////          ////
///          //  //  //          //          /////
//            //  //  //////  /////          //////
/////////////////////////////////////////////////////
// Copyright © Rey Brujo, ma-zi-la@hotmail.com  //
// Created By: ReyBrujo, City Of Masters          //
// Created On: 06/06/2010                          //
/////////////////////////////////////////////////////

void main()
{
object oNPC = OBJECT_SELF; // NPC
object oPC = GetFirstPC(); // Player
int nHP = (GetCurrentHitPoints() / GetMaxHitPoints())*100; // Hit Points (in (IMG:style_emoticons/kolobok_light/wacko.gif)
int nSAtt = GetLocalInt(oNPC, "specatt"); // Special Attack integer
int nNHP = 50;

if(nHP < nNHP && nSAtt >= 1)
    {
    nSAtt -= 1;
    object oCreature = GetFirstObjectInArea(GetArea(oNPC));
    while(GetIsObjectValid(oCreature)) // Check for valid creatures (enemies). If it exists - cast chosen spells/effects.
        {
        // NPC //
        if(GetObjectType(oCreature) == OBJECT_TYPE_CREATURE && GetIsEnemy(oCreature) == TRUE && GetIsPC(oCreature) == FALSE)
            {
            ClearAllActions(TRUE);
            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectParalyze(), oCreature, 10.0+Random(10));
            }

        // PC //
        if(GetObjectType(oCreature) == OBJECT_TYPE_CREATURE && GetIsEnemy(oCreature) == TRUE && GetIsPC(oCreature) == TRUE)
            {
            ClearAllActions(TRUE);
            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectParalyze(), oCreature, 10.0+Random(10));
            ClearAllActions(TRUE);
            SetFacingPoint(GetPosition(oPC));
            ActionDoCommand(ActionCastSpellAtObject(SPELL_FIRE
BALL, oPC, METAMAGIC_EMPOWER, TRUE));
            ActionWait(0.5);
            }
        oCreature = GetNextObjectInArea(GetArea(oNPC)); // Continue checking
        }
    SetLocalInt(oNPC, "specatt", nSAtt); // Set number of special attacks
    }
}


Тот скрипт, который я выложил в прошлом посте - это только часть моего плана спец атаки.
Если кто-то может, подскажите, как сделать, чтобы дракон взлетал, висел немного(можно без висения), пускал несколько огненных шаров (любым способом) и опускался нормально на землю.
Я пробовал такое сделать, но мой дракон либо только взлетал и исчезал в облаках (дизаппир-аппир), либо просто взлетал - садился (рассоединенные дизаппир и аппир с клиром действий), либо просто тупил.

Еще одно забыл сказать - действие происходит только если у НПК хп меньше чем nNHP % (у меня поставлено 50)

И еще одно - не забудьте в переменные НПЧ поставить переменную specatt, которая больше 0.

Этот скрипт ставится на хертбит монстра (IMG:style_emoticons/kolobok_light/wacko.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Laajin
сообщение Jun 7 2010, 08:10
Сообщение #3299


Level 5
**

Класс: Пьяный Мастер
Характер: Chaotic Good
Раса: Человек



Два варианта:
1. тебе нужно изучить 3д макс и там сделать свою анимацию.
2. На nwn vault я видел хек пак где сделаны летающие драконы, впринципе можно сделать чтобы происходила замена модели - стоящего на лапах, на летящего в воздухе, а потом наоборот.

честно говоря боле вариантов я не вижу, потому что функции аппер-дизаппер они по другому работать не могут.

Сообщение отредактировал Laajin - Jun 7 2010, 08:10
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
ReyBrujo
сообщение Jun 8 2010, 18:19
Сообщение #3300


Level 2
*

Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Вот начал делать собственный мультиплеерный модуль. Никак не могу сделать две вещи - скрипт на вход(игрок заходит, его должно перенести на вейпоинт) и скрипт, который бы при создании НПЧ давал им команду атаки ближайшего врага.
Пока что есть вот что:
1. (ОнЕнтер триггера под точкой входа)
Neverwinter Script
void main()
{
//////////// MY SCRIPTS ////////////
//--------------------------------//
////////////////////////////////////
object oPC = GetEnteringObject();
object oGame = GetObjectByTag("GAME");
object oGuard = GetObjectByTag("NW_ELFRANGER001");
object oSieger = GetObjectByTag("NW_DROWCLER001");
int nPlayers = GetLocalInt(oGame, "players");
int nGuards = GetLocalInt(oGame, "guards");
int nSiegers = GetLocalInt(oGame, "siegers");
if(GetIsPC(oPC) == TRUE)
{
SetLocalInt(oGame, "players", nPlayers+1); //Set number of players to +1
if(nGuards>nSiegers)
{//Set number of siegers to +1
JumpToObject(GetWaypointByTag("wp_siegers"));
SetStandardFactionReputation(STANDARD_FACTION_HOST
ILE, 100, oPC);
SetStandardFactionReputation(STANDARD_FACTION_DEFE
NDER, 0, oPC);
SetLocalInt(oGame, "siegers", nSiegers+1);
SpeakString(IntToString(nSiegers));
}
else
{//Set number of guards to +1
JumpToObject(GetWaypointByTag("wp_guards"));
SetStandardFactionReputation(STANDARD_FACTION_HOST
ILE, 0, oPC);
SetStandardFactionReputation(STANDARD_FACTION_DEFE
NDER, 100, oPC);
SetLocalInt(oGame, "guards", nGuards+1);
SpeakString(IntToString(nGuards));
}
///////// OTHER SCRIPTS /////////
//-----------------------------//
/////////////////////////////////

// ITEMS //
CreateItemOnObject("potion001", oPC);
CreateItemOnObject("potion001", oPC);
CreateItemOnObject("potion001", oPC);
CreateItemOnObject("potion001", oPC);
CreateItemOnObject("potion001", oPC);
}
}


2. (Хертбит. Инклюд "inc_nearest" просто перенаправляет на "x0_i0_enemy" (чтобы удобнее было искать =) ))
Neverwinter Script
#include "nw_i0_generic"
#include "inc_nearest"

void main()
{
//////////////////////////////////////////
// тут обычные скрипты хертбита //
//////////////////////////////////////////
    if(GetCurrentAction() != ACTION_ATTACKOBJECT)
    {
    ActionAttack(GetNearestEnemy(), TRUE);
    }
}


В первом скрипте всё, кроме джамп ту вейпоинт работает нормально. С вейпом проблем вроде-бы нет.
А во втором скрипте я долго пытался намутить, один раз что-то получилось, но тогда у мну вылетел тулсет, а я не помню, что сделал.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 130 131 132 133 134 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28th April 2025 - 02:22