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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 41 42 43 44 45 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Алексашка
сообщение Apr 17 2005, 17:15
Сообщение #1041


Level 3
*

Класс: Клерик
Характер: True Neutral
Раса: Человек



QUOTE (Lex @ Apr 17 2005, 14:56)
Хм...с лучниками можно так.
Есть мишень и кто-то в нее стреляет. (кстати надо еще подумать и о дистанции). Результат - мишень выдает кол-во очков, которые набрал игрок. Можно их например суммировать. И сравнивать с суммами других игроков....

У меня есть готовый скрипт. Написан правда для другого был, но принцип похожий. Можно переделать под свои нужды. Мишень как создание. С эффектом парализации. А то бывали смешные случаи, когда мишень начала гоняться за игроком. :D Скрипт писал давно, когда русского языка в тулсете небыло. Нуждается в оптимизации, но руки не доходят. Считает именно попадания, а не повреждения.
Neverwinter Script Source
#include "nw_i0_tool"
void main()
{
    object oAttacker = GetLastAttacker();

//* Should only register if hit with a ranged weapon
if( GetIsPC(oAttacker))
  {

    if(GetWeaponRanged(GetLastWeaponUsed(oAttacker)))
    {
        SpeakOneLinerConversation();

            if(GetDistanceToObject(oAttacker) > 12.0)
            {
                if(GetLocalInt(GetModule(),"archer_trening")< 100)
                {
                    SetLocalInt(GetModule(),"archer_trening",(GetLocalInt(GetModule(),"archer_trening")+1));
                    if(GetLocalInt(GetModule(),"archer_trening")== 100)
                  {

                    effect eDamage = EffectDamage(5000);
                    DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, OBJECT_SELF));

                    SetLocalInt(GetModule(), "archer_trening", 0);

                    RewardPartyXP(500, oAttacker);
                  }
                }
                else
                {

                }
                AssignCommand(GetNearestObjectByTag("Olodrin"),SpeakOneLinerConversation("arch_uspeh",oAttacker));

            }
            else
            {
                AssignCommand(GetNearestObjectByTag("Olodrin"),SpeakOneLinerConversation("blisko",oAttacker));
            }
            }
            else
            {
                AssignCommand(GetNearestObjectByTag("Olodrin"),SpeakOneLinerConversation("bow",oAttacker));
            }
            }
        else
            {
                {
        int nHeal = GetMaxHitPoints(OBJECT_SELF) - GetCurrentHitPoints(OBJECT_SELF);
        effect eHeal = EffectHeal(nHeal);
        {
        if (nHeal > 0)
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF);
        }
        }

                AssignCommand(GetNearestObjectByTag("Olodrin"),SpeakOneLinerConversation("signboard11",oAttacker));
            }

        }

Добавлено в [mergetime]1113747557[/mergetime]
Подскажите, как правильно сделать проверку по времени. Я подхожу к неписю, а он говорит приходи через 3 часа. Как запомнить время в которое он мне это сказал и как проверить, что три часа прошло. :shout:
Добавлено в [mergetime]1113748392[/mergetime]
Можно например поставить переменную на 20 попаданий. Чья мишень первой получает 20 попаданий присваивает переменную 1, кто второй переменную два и т.д. На полу я опытным путем рисовал черту на дистанции 15 и если игрок был на шаг ближе, то попадание не засчитывалось, а тренер кричал: "Отойди подальше". Да там еще строка лишняя есть. Я ее делал, чтобы хенчманы, по скудоумию своему, зря в мишень не бились. :lol:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tiger Greyhawk
сообщение Apr 18 2005, 05:55
Сообщение #1042



Иконки Групп

Класс: Обыватель
Характер: Chaotic Good
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE (Алексашка @ Apr 17 2005, 18:15)
Подскажите, как правильно сделать проверку по времени. Я подхожу к неписю, а он говорит приходи через 3 часа. Как запомнить время в которое он мне это сказал и как проверить, что три часа прошло.

Есть функция int GetTimeHoure(). А потом делаешь проверку через переменную.
Есть ведь Lexicon на это. Или я совсем не так понял твою "проблему" :oops:
Ты, вроде, более-менее разбираешься же. По таким вопросам предлагаю в чат. Гораздо операивнее решится.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Apr 18 2005, 08:31
Сообщение #1043


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

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



в пределах одного дня через GetTimeHoure(), но если чел придет на сдел. день в тот же час, то облом.

Надо преобразовывать месяц, день и час в часы и запомнить. Потом сравнивать с тамки же преобразованием. Разница больше 3-х значить прошло более 3-х часов.
У меня в Тсурле все временные штуки на этом построены
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
RiPPeR
сообщение Apr 18 2005, 15:54
Сообщение #1044


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

Класс: Страж Тьмы
Характер: Chaotic Neutral
Раса: Дракон
NWN: Скриптинг [PW]



Возникла проблема с "порядком действий"
Чтобы я и не делал, нифига не работает!
Еа 99% уверен что это баг NWN, на как его обойти?

oPC и oTarget правильные объекты 100%
Строка об атаке не работает :(.
Хотя катсцен работает.

Neverwinter Script Source
effect eCutS = EffectCutsceneDominated();
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); // что-нибудь
                                                                                                            // красивое
effect eLink = EffectLinkEffects(eMind, eCuts);

object oTarget = GetAttackTarget(oPC);

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, 6.00);

//DelayCommand(6.00,AssignCommand(oPC,ClearAllActions(TRUE)));
AssignCommand(oPC,DelayCommand(6.00,ActionAttack(oTarget)));


Сообщение отредактировал RiPPeR - Apr 18 2005, 15:55
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Apr 18 2005, 16:07
Сообщение #1045


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

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



\\ перенес в соотв. тему

Всех предупреждаю последний раз. Кто не видел, не мои проблемы.

КТО НЕ ОЗНАКОМИТСЯ С ПРАВИЛАМИ И НАЧНЕТ ПОСТИТЬ И СОЗДАВАТЬ ТОПИКИ ПОЛУЧИТ ПРЕД.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
RiPPeR
сообщение Apr 18 2005, 16:09
Сообщение #1046


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

Класс: Страж Тьмы
Характер: Chaotic Neutral
Раса: Дракон
NWN: Скриптинг [PW]



Извиняюсь, но тут вопросы по скриптам, а у меня скорее баг движка.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Apr 18 2005, 16:14
Сообщение #1047


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

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



нет. Никто за несколько лет работы там новых багов не нашел. :) (известные баги описаны в лексиконе. И это не движковые баги, а просто кривая работа нескольких функций)
Скрипт скорее всего криво написан. :)
Ты напиши, где стоит, что он должен делать и что происходит. И по подробнее. :)

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
RiPPeR
сообщение Apr 18 2005, 16:18
Сообщение #1048


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

Класс: Страж Тьмы
Характер: Chaotic Neutral
Раса: Дракон
NWN: Скриптинг [PW]



Задержка на 6 сек, потом атака того, кого бил до этого
Добавлено в [mergetime]1113832097[/mergetime]
Все блин, методом встраивания проверок локал интов, брания локал обжектов и других премудростей в скрипт default, все таки заработало. :crazy: :crazy: :crazy:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Алексашка
сообщение Apr 18 2005, 18:58
Сообщение #1049


Level 3
*

Класс: Клерик
Характер: True Neutral
Раса: Человек



QUOTE (Lex @ Apr 18 2005, 08:31)
в пределах одного дня через GetTimeHoure(), но если чел придет на сдел. день в тот же час, то облом.

Надо преобразовывать месяц, день и час в часы и запомнить. Потом сравнивать с тамки же преобразованием. Разница больше 3-х значить прошло более 3-х часов.
У меня в Тсурле все временные штуки на этом построены

Понял свою проблему. :D "Три часа" я писал для примера. У меня было 18 часов. И проблемка была именно с переходами в следующий день. Нужно было всего лишь скопировать инклюд из Левора :yes: и все заработало. Lex "виноват" :yes: Тсурл никак не начну проходить. Времени не хватат. :xz:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение Apr 20 2005, 19:03
Сообщение #1050


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Пожертвуйте в базу скриптов, систему опыта :oops: . Со всякими коэффицентами для разных классов. Наверняка кто нибудь писал для своих модулей

Еще хотелось бы знать, можно ли редактировать стандартную НВН-скую систему опыта(только не надо мне говорить про ползунок в св-ах модуля.)

З.Ы. Айван нарисуй *умоляющий* смайлик :)

Сообщение отредактировал Лито - Apr 20 2005, 19:03
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Buldog
сообщение Apr 20 2005, 19:53
Сообщение #1051


Level 5
**

Класс: Мастер Оружия
Характер: Chaotic Neutral
Раса: Полуорк



Вот, писал для нашего шарда, конечно далеко от идеала, но работает, тут использованы коэффициенты для классов и для субрасс. Учтена смерть мобов от ловушек, за идею спасибо HitmanXXX. В партии экспа распределяется в зависимости от лвла чаров, которые были рядом с убитым мобом + штрафы за большой разброс по лвлам, для защиты от нубокача.

Состоит из 2х скриптов, инклюд:

inc_xpsystem_nd
Neverwinter Script Source
///////////////////////////////////////////////
//*******************************************//
//***********Created by Buldog***************//
//*******************************************//
//*******************************************//
//**********Modified 20.04.2005**************//
//*******************************************//
///////////////////////////////////////////////

//Classes coefficients
const float FIGHTER_COEFFICIENT          = 1.5;
const float ARCANE_ARCHER_COEFFICIENT    = 0.9;
const float ASSASSIN_COEFFICIENT        = 1.5;
const float BARBARIAN_COEFFICIENT        = 1.5;
const float BARD_COEFFICIENT            = 0.8;
const float BLACKGUARD_COEFFICIENT      = 1.2;
const float CLERIC_COEFFICIENT          = 0.8;
const float DIVINE_CHAMPION_COEFFICIENT  = 0.9;
const float DRAGON_DISCIPLE_COEFFICIENT  = 0.9;
const float DRUID_COEFFICIENT            = 1.4;
const float DWARVEN_DEFENDER_COEFFICIENT = 1.3;
const float HARPER_COEFFICIENT          = 2.0;
const float MONK_COEFFICIENT            = 1.2;
const float PALADIN_COEFFICIENT          = 0.8;
const float PALE_MASTER_COEFFICIENT      = 0.8;
const float RANGER_COEFFICIENT          = 1.5;
const float ROGUE_COEFFICIENT            = 1.4;
const float SHADOWDANCER_COEFFICIENT    = 1.2;
const float SHIFTER_COEFFICIENT          = 1.3;
const float SORCERER_COEFFICIENT        = 0.4;
const float WEAPON_MASTER_COEFFICIENT    = 0.9;
const float WIZARD_COEFFICIENT          = 0.5;

//Subrace coefficients
const int AIR_GENASI_COEFFICIENT          = 1;
const int EARTH_GENASI_COEFFICIENT        = 1;
const int WATER_GENASI_COEFFICIENT        = 1;
const int FIRE_GENASI_COEFFICIENT          = 1;
const int CELESTIAL_COEFFICIENT            = 8;
const int FIENDISH_COEFFICIENT            = 8;
const int HALF_CELESTIAL_COEFFICIENT      = 7;
const int HALF_FIEND_COEFFICIENT          = 7;
const int HALF_DRAGON_COEFFICIENT          = 8;
const int AASIMAR_COEFFICIENT              = 1;
const int TIEFLING_COEFFICIENT            = 1;
const int GHOSTWISE_HALFLING_COEFFICIENT  = 1;
const int LIGHTFOOT_HALFLING_COEFFICIENT  = 1;
const int STRONGHEART_HALFLING_COEFFICIENT = 1;
const int GOLD_DWARF_COEFFICIENT          = 1;
const int SHIELD_DWARF_COEFFICIENT        = 1;
const int DUERGAR_COEFFICIENT              = 2;
const int DROW_COEFFICIENT                = 2;
const int WILD_ELF_COEFFICIENT            = 1;
const int MOON_ELF_COEFFICIENT            = 1;
const int SUN_ELF_COEFFICIENT              = 1;
const int WOOD_ELF_COEFFICIENT            = 1;
const int ROCK_GNOME_COEFFICIENT          = 1;
const int SVIRFNEBLIN_COEFFICIENT          = 3;

//Calculate XP bonus.
int BonusCalculation(object oPC, object oCreature=OBJECT_SELF);

//Return class coefficient for calculate XP.
float ClassCoefficient(object oPC);

//Return oPC level with subrace coefficient for calculate XP.
int LevelWithSubrace(object oPC);

//Calculate XP bonus if killer is trap.
int TrapBonusCalkulation(object oPC, object oCreature=OBJECT_SELF);

float ClassCoefficient(object oPC)
{
    int nClass, nPClass, nPLC = 0 ,nLC = 0, n;

    float fCoeff = 0.0;

    for(n = 1; n <= 3; n++)
    {
        nClass = GetClassByPosition(n, oPC);
        nLC = GetLevelByClass(nClass, oPC);
        if(nLC > nPLC) { nPClass = nClass; nPLC = nLC; }

        if(nPClass == CLASS_TYPE_BARBARIAN)        fCoeff = BARBARIAN_COEFFICIENT;
        if(nPClass == CLASS_TYPE_BARD)            fCoeff = BARD_COEFFICIENT;
        if(nPClass == CLASS_TYPE_CLERIC)          fCoeff = CLERIC_COEFFICIENT;
        if(nPClass == CLASS_TYPE_DRUID)            fCoeff = DRUID_COEFFICIENT;
        if(nPClass == CLASS_TYPE_FIGHTER)          fCoeff = FIGHTER_COEFFICIENT;
        if(nPClass == CLASS_TYPE_MONK)            fCoeff = MONK_COEFFICIENT;
        if(nPClass == CLASS_TYPE_PALADIN)          fCoeff = PALADIN_COEFFICIENT;
        if(nPClass == CLASS_TYPE_RANGER)          fCoeff = RANGER_COEFFICIENT;
        if(nPClass == CLASS_TYPE_ROGUE)            fCoeff = ROGUE_COEFFICIENT;
        if(nPClass == CLASS_TYPE_SORCERER)        fCoeff = SORCERER_COEFFICIENT;
        if(nPClass == CLASS_TYPE_WIZARD)          fCoeff = WIZARD_COEFFICIENT;
        if(nPClass == CLASS_TYPE_ARCANE_ARCHER)    fCoeff = ARCANE_ARCHER_COEFFICIENT;
        if(nPClass == CLASS_TYPE_ASSASSIN)        fCoeff = ASSASSIN_COEFFICIENT;
        if(nPClass == CLASS_TYPE_BLACKGUARD)      fCoeff = BLACKGUARD_COEFFICIENT;
        if(nPClass == CLASS_TYPE_DIVINE_CHAMPION)  fCoeff = DIVINE_CHAMPION_COEFFICIENT;
        if(nPClass == CLASS_TYPE_DRAGON_DISCIPLE)  fCoeff = DRAGON_DISCIPLE_COEFFICIENT;
        if(nPClass == CLASS_TYPE_DWARVEN_DEFENDER) fCoeff = DWARVEN_DEFENDER_COEFFICIENT;
        if(nPClass == CLASS_TYPE_HARPER)          fCoeff = HARPER_COEFFICIENT;
        if(nPClass == CLASS_TYPE_PALE_MASTER)      fCoeff = PALE_MASTER_COEFFICIENT;
        if(nPClass == CLASS_TYPE_SHADOWDANCER)    fCoeff = SHADOWDANCER_COEFFICIENT;
        if(nPClass == CLASS_TYPE_SHIFTER)          fCoeff = SHIFTER_COEFFICIENT;
        if(nPClass == CLASS_TYPE_WEAPON_MASTER)    fCoeff = WEAPON_MASTER_COEFFICIENT;
    }

    //SendMessageToPC(oPC, "Class coefficient: " + FloatToString(fCoeff));
    return fCoeff;
}

int LevelWithSubrace(object oPC)
{
    int nPCRace = GetRacialType(oPC);
    int nLvl = GetHitDice(oPC);

    string sPCSubrace = GetStringUpperCase(GetSubRace(oPC));

    if(sPCSubrace == "") return nLvl;

    switch(nPCRace)
    {  /*
        case RACIAL_TYPE_ALL:
            if(TestStringAgainstPattern("**AIR**", sPCSubrace))            nLvl = nLvl + AIR_GENASI_COEFFICIENT;
            if(TestStringAgainstPattern("**EARTH**", sPCSubrace))          nLvl = nLvl + EARTH_GENASI_COEFFICIENT;
            if(TestStringAgainstPattern("**WATER**", sPCSubrace))          nLvl = nLvl + WATER_GENASI_COEFFICIENT;
            if(TestStringAgainstPattern("**FIRE**", sPCSubrace))          nLvl = nLvl + FIRE_GENASI_COEFFICIENT;
            if(TestStringAgainstPattern("**CELESTIAL**", sPCSubrace))      nLvl = nLvl + CELESTIAL_COEFFICIENT;
            if(TestStringAgainstPattern("**FIENDISH**", sPCSubrace))      nLvl = nLvl + FIENDISH_COEFFICIENT;
            if(TestStringAgainstPattern("**HALF-CELESTIAL**", sPCSubrace)) nLvl = nLvl + HALF_CELESTIAL_COEFFICIENT;
            if(TestStringAgainstPattern("**HALF-FIEND**", sPCSubrace)||
              TestStringAgainstPattern("**FIEND**", sPCSubrace))          nLvl = nLvl + HALF_FIEND_COEFFICIENT;
            if(TestStringAgainstPattern("**HALF-DRAGON**", sPCSubrace)||
              TestStringAgainstPattern("**DRAGON**", sPCSubrace))        nLvl = nLvl + HALF_DRAGON_COEFFICIENT;
            break;*/

        case RACIAL_TYPE_HUMAN:
            if(TestStringAgainstPattern("**AASIMAR**", sPCSubrace))        nLvl = nLvl + AASIMAR_COEFFICIENT;
            if(TestStringAgainstPattern("**TIEFLING**", sPCSubrace))      nLvl = nLvl + TIEFLING_COEFFICIENT;
            break;
        case RACIAL_TYPE_HALFORC:
            break;
        case RACIAL_TYPE_HALFELF:
            break;
        case RACIAL_TYPE_HALFLING:
            if(TestStringAgainstPattern("**GHOSTWISE**", sPCSubrace))      nLvl = nLvl + GHOSTWISE_HALFLING_COEFFICIENT;
            if(TestStringAgainstPattern("**LIGHTFOOT**", sPCSubrace))      nLvl = nLvl + LIGHTFOOT_HALFLING_COEFFICIENT;
            if(TestStringAgainstPattern("**STRONGHEART**", sPCSubrace))    nLvl = nLvl + STRONGHEART_HALFLING_COEFFICIENT;
            break;
        case RACIAL_TYPE_DWARF:
            if(TestStringAgainstPattern("**GOLD**", sPCSubrace))          nLvl = nLvl + GOLD_DWARF_COEFFICIENT;
            if(TestStringAgainstPattern("**SHIELD**", sPCSubrace))        nLvl = nLvl + SHIELD_DWARF_COEFFICIENT;
            if(TestStringAgainstPattern("**GRAY**", sPCSubrace) ||
              TestStringAgainstPattern("**DUERGAR**", sPCSubrace))        nLvl = nLvl + DUERGAR_COEFFICIENT;
            break;
        case RACIAL_TYPE_ELF:
            if(TestStringAgainstPattern("**DROW**", sPCSubrace) ||
              TestStringAgainstPattern("**DARK**", sPCSubrace))          nLvl = nLvl + DROW_COEFFICIENT;
            if(TestStringAgainstPattern("**WILD**", sPCSubrace))          nLvl = nLvl + WILD_ELF_COEFFICIENT;
            if(TestStringAgainstPattern("**MOON**", sPCSubrace))          nLvl = nLvl + MOON_ELF_COEFFICIENT;
            if(TestStringAgainstPattern("**SUN**", sPCSubrace))            nLvl = nLvl + SUN_ELF_COEFFICIENT;
            if(TestStringAgainstPattern("**WOOD**", sPCSubrace))          nLvl = nLvl + WOOD_ELF_COEFFICIENT;
            break;
        case RACIAL_TYPE_GNOME:
            if(TestStringAgainstPattern("**ROCK**", sPCSubrace))          nLvl = nLvl + ROCK_GNOME_COEFFICIENT;
            if(TestStringAgainstPattern("**DEEP**", sPCSubrace) ||
              TestStringAgainstPattern("**SVIRFNEBLIN**", sPCSubrace))    nLvl = nLvl + SVIRFNEBLIN_COEFFICIENT;
            break;
    }
    //SendMessageToPC(oPC, "Subrace coefficient: " + IntToString(nLvl));
    return nLvl;
}

int BonusCalculation(object oPC, object oCreature=OBJECT_SELF)
{
    object oPartyMember = GetFirstFactionMember(oPC, FALSE);
    object oPCArea, oCArea = GetArea(oCreature);

    int nLvl, nDiff, nMaxLvl = 0, nPartyXP;
    int i = 0, j = 0, k, l = 0;
    int nLvlCreature = GetHitDice(oCreature);

    float fCRCreature = GetChallengeRating(oCreature);
    float fDiff = (IntToFloat(nLvlCreature) + fCRCreature) * 0.5;
    float fPartyXP, fXPMod = 7.0f;

    while(GetIsObjectValid(oPartyMember))
    {
        nLvl = LevelWithSubrace(oPartyMember);

        if(!GetIsPC(oPartyMember) && !GetIsDM(oPartyMember)) nLvl = GetHitDice(oPartyMember);

        oPCArea = GetArea(oPartyMember);
        if(oCArea == oPCArea && GetDistanceBetween(oPartyMember, oCreature) <= 35.0f &&
          !GetIsDM(oPartyMember) && GetCurrentHitPoints(oPartyMember) > 0)
        {
            if(GetIsPC(oPartyMember)) l++;
            if(nLvl > nMaxLvl && GetIsPC(oPartyMember)) nMaxLvl = nLvl;
        }
        oPartyMember = GetNextFactionMember(oPC, FALSE);
    }

    fDiff = fDiff - IntToFloat(nMaxLvl);

    nDiff = FloatToInt(fDiff);
    if (fDiff - IntToFloat(nDiff) >= 0.5) nDiff = nDiff + 1;
    if (nDiff > 12) nDiff = 12;
    if (nDiff < -6) nDiff = -6;

    for (k = -6; k <= nDiff; k++)
    {
        j++;
        fPartyXP = fPartyXP + fXPMod * IntToFloat(j);
    }

    if(l > 1) fPartyXP = fPartyXP * (1.2 * IntToFloat(l));

    //SendMessageToPC(oPC, "Base bonus XP: " + IntToString(FloatToInt(fPartyXP)));

    return FloatToInt(fPartyXP);
}

int TrapBonusCalkulation(object oPC, object oCreature=OBJECT_SELF)
{
    int nLvl = LevelWithSubrace(oPC), nDiff, k, j;
    int nLvlCreature = GetHitDice(oCreature);

    float fCRCreature = GetChallengeRating(oCreature);
    float fDiff = (IntToFloat(nLvlCreature) + fCRCreature) * 0.5;
    float fXPMod = 7.0f, fXP;

    fDiff = fDiff - IntToFloat(nLvl);

    nDiff = FloatToInt(fDiff);
    if (fDiff - IntToFloat(nDiff) >= 0.5) nDiff = nDiff + 1;
    if (nDiff > 12) nDiff = 12;
    if (nDiff < -6) nDiff = -6;

    for (k = -6; k <= nDiff; k++)
    {
        j++;
        fXP = fXP + fXPMod * IntToFloat(j);
    }

    //SendMessageToPC(oPC, "Base bonus XP: " + IntToString(FloatToInt(fPartyXP)));

    return FloatToInt(fXP);
}

//void main(){}


И основной скрипт, который раздает экспу:

nd_applyxp
Neverwinter Script Source
///////////////////////////////////////////////
//*******************************************//
//***********Created by Buldog***************//
//*******************************************//
//*******************************************//
//**********Modified 20.04.2005**************//
//*******************************************//
///////////////////////////////////////////////

#include "inc_xpsystem_nd"
#include "nd_textcolor_inc"

int GetXPByLevel(int nLevel)
{
    return (((nLevel - 1) * nLevel) / 2) * 1000;
}

object CheckKiller(object oKiller)
{
    //SendMessageToPC(oKiller, "Checking Monster Killer...");
    if (!GetIsPC(oKiller))
    {
        if (GetObjectType(oKiller) == OBJECT_TYPE_CREATURE) oKiller = GetMaster(oKiller);
        else
        {
            oKiller = GetTrapCreator(oKiller);
            SetLocalInt(oKiller, "TrapKiller", 1);
            //SendMessageToPC(oKiller, "Finded Trap Master!");
        }
    }
    if (GetIsPC(oKiller) && !GetIsDM(oKiller)) return oKiller;
    return OBJECT_INVALID;
}

void main()
{
    object oPC = GetLastKiller();

    oPC = CheckKiller(oPC);

    if(oPC == OBJECT_INVALID) return;

    if(GetIsDM(oPC)) return;

    object oCreature = OBJECT_SELF;
    object oParty, oPArea, oCArea = GetArea(oCreature);

    int i = 0, nPC = 0, nXP, nNewXP, nLevel, nPLevel = 0, nPCPLvl = 0, nAPLvl = 0;
    int nDelta;
    int nBonusXP = BonusCalculation(oPC, oCreature);
    int nMinXP = 10, nMaxXP = 1000;

    float fClassCoeff, fNewXP;

    if(GetLocalInt(oPC, "TrapKiller") == 1)
    {
        nBonusXP = TrapBonusCalkulation(oPC, oCreature);
        nNewXP = nBonusXP;

        if(nNewXP < nMinXP) nNewXP = nMinXP;
        if(nNewXP > nMaxXP) nNewXP = nMaxXP;

        //SendMessageToPC(oPC, "XP before apply class coefficient: " + IntToString(nNewXP));

        fClassCoeff = ClassCoefficient(oParty);
        fNewXP = IntToFloat(nNewXP) * fClassCoeff;

        if(GetXP(oPC) - GetXPByLevel(GetHitDice(oPC) + 1) > 0 && GetHitDice(oPC) < 40)
        {
            fNewXP = 0.0;
            SendMessageToPC(oParty, "You must to level up before getting new expierence points.");
        }

        //SendMessageToPC(oPC, "You getting XP: " + FloatToString(fNewXP));
        GiveXPToCreature(oPC, FloatToInt(fNewXP));
        SendMessageToPC(oPC, C_LBLUE2 +  GetName(oPC) + C_END + C_ORANGE + " óáèë " + GetName(oCreature) + C_END);
        DeleteLocalInt(oPC, "TrapKiller");
        return;
    }

    oParty = GetFirstFactionMember(oPC, FALSE);
    while(GetIsObjectValid(oParty))
    {
        nLevel = LevelWithSubrace(oParty);

        if(!GetIsPC(oParty) && !GetIsDM(oParty)) nLevel = GetHitDice(oParty);

        //SendMessageToPC(oParty, "Your level with subrace: " + IntToString(nLevel));

        oPArea = GetArea(oParty);

        if(oCArea == oPArea && GetDistanceBetween(oParty, oCreature) <= 35.0f &&
          !GetIsDM(oParty) && GetCurrentHitPoints(oParty) > 0)
        {
            i++;
            if(GetIsPC(oParty) && !GetIsDM(oParty))
            {
                nPCPLvl = nPCPLvl + nLevel;
                nPC++;
            }
            nPLevel = nPLevel + nLevel;
            //SendMessageToPC(oParty, "Party level with your: " + IntToString(nPLevel) +
            //                        ", i: " + IntToString(i));
        }
        oParty = GetNextFactionMember(oPC, FALSE);
    }

    nAPLvl = nPCPLvl/nPC;

    oParty = GetFirstFactionMember(oPC, FALSE);
    while(GetIsObjectValid(oParty))
    {
        nLevel = LevelWithSubrace(oParty);
        oPArea = GetArea(oParty);

        if(oPArea == oCArea && GetDistanceBetween(oParty, oCreature) <= 35.0f &&
          GetIsPC(oParty) && !GetIsDM(oParty) && GetCurrentHitPoints(oParty) > 0)
        {
            nXP = GetXP(oParty);

            if(i > 1)
            {
                nNewXP = nBonusXP / nPLevel * nLevel;
            }
            else { nNewXP = nBonusXP; }

            if(nNewXP < nMinXP) nNewXP = nMinXP;
            if(nNewXP > nMaxXP) nNewXP = nMaxXP;

            //SendMessageToPC(oPC, "XP before apply class coefficient: " + IntToString(nNewXP));

            fClassCoeff = ClassCoefficient(oParty);
            fNewXP = IntToFloat(nNewXP) * fClassCoeff;

            if(GetXP(oParty) - GetXPByLevel(GetHitDice(oParty) + 1) > 0 && GetHitDice(oParty) < 40)
            {
                fNewXP = 0.0;
                SendMessageToPC(oParty, "You must to level up before getting new expierence points.");
            }

            //SendMessageToPC(oPC, "You getting XP: " + FloatToString(fNewXP));

            if(nAPLvl > nLevel) nDelta = (nAPLvl - nLevel)/2;
            else nDelta = (nLevel - nAPLvl)/2;

            if(nDelta < 1) nDelta = 1;

            nNewXP = FloatToInt(fNewXP)/nDelta;

            if(nNewXP < nMinXP) nNewXP = nMinXP;
            if(nNewXP > nMaxXP) nNewXP = nMaxXP;

            GiveXPToCreature(oParty, nNewXP);
        }
        oParty = GetNextFactionMember(oPC, FALSE);
    }
}


В скрипт nw_c2_default7, или как там его, помещаешь строчку:
ExecuteScript("nd_applyxp", OBJECT_SELF);
А еще, маленький инклюдик для расскраски сообщений, идея _каа_, но сам инклюдик писал я сам :)

nd_textcolor_inc
Neverwinter Script Source
///////////////////////////////////////////////
//*******************************************//
//***********Created by Buldog***************//
//*******************************************//
///////////////////////////////////////////////

const string C_WHITE  = "<cþþþ>";
const string C_YELLOW = "<cþþ >";
const string C_RED    = "<cþ  >";
const string C_BLUE1  = "<c  þ>";
const string C_BLUE2  = "<c zþ>";
const string C_LBLUE1 = "<c þþ>";
const string C_LBLUE2 = "<czþþ>";
const string C_GREEN  = "<c þ >";
const string C_LILAC1 = "<cþ þ>";
const string C_LILAC2 = "<czzþ>";
const string C_ORANGE = "<cþz >";
const string C_VIOLET = "<cz þ>";
const string C_END    = "</c>";

//void main(){}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение Apr 20 2005, 19:57
Сообщение #1052


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Buldog, ты даже не представляешь, как ты мне помог :yahoo:

И спасибки за оперативность :good:
Добавлено в [mergetime]1114017506[/mergetime]
Ну конечно же появилось несколько проблем :this:

1. нужно ли раскомментировать в инклюдах
Neverwinter Script Source
//void main(){}

Если нет, то у меня не получается их скомпилить.
2.В скрипте раздающем экспу, компилятор просит меня "Дублировать выполнение функции(main)"
вобщем тоже не состовляется :(
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Buldog
сообщение Apr 20 2005, 20:44
Сообщение #1053


Level 5
**

Класс: Мастер Оружия
Характер: Chaotic Neutral
Раса: Полуорк



Если надо откомпилить, то раскоментируй, откомпилируй, а потом снова закоментируй, тока не забудь сохранить вариант с закоментированым майном, в инклюдах функции void main() быть не должно, потому они в инклюдах и закоментированы, из за етого и ошибка в основном скрипте.

Сообщение отредактировал Buldog - Apr 20 2005, 20:45
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение Apr 20 2005, 20:56
Сообщение #1054


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Buldog все пасиба, работает :)
Добавлено в [mergetime]1114089959[/mergetime]
Раз уж пошел разговор о системе опыта, может есть у кого нибудь и система лута? :)
Нет нет, я не настолько ленивый, я написал собственную, но к сожелению она очень большая(2000 строк в скрипте, а всего их 3) :this:
Так что,для меня этот вопрос остается открытым :xz:

Сообщение отредактировал Лито - Apr 21 2005, 16:25
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Алексашка
сообщение Apr 22 2005, 20:20
Сообщение #1055


Level 3
*

Класс: Клерик
Характер: True Neutral
Раса: Человек



Сделал себе систему крафта.(Содрал из Левора :D ) 2da таблицу сделал свою, скрипт содрал у Baalа :D Надеюсь божественная аватара не будет сильно гневаться на скромного священника. :yes: У самого ума не хватит такой скрипт написать. Все получилось нормально. Только вместо названий вещей и компонентов пишуться ярлыки. (В леворе кстати такое имело место быть. С вещами имеющими два тега). Подскажите из-за чего такое происходит.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Apr 23 2005, 06:27
Сообщение #1056


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

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



там глянь, в инклюде есть работа с обхектом одним..это вроде поинт. Он у тебя есть в модуле?
(просто имя вещи находится так: она создается в том поинте и берется ее имя, а вещь удаляется. Иначе, если нету вещи или поинта, то берется сам резреф....кажись так)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Алексашка
сообщение Apr 25 2005, 18:51
Сообщение #1057


Level 3
*

Класс: Клерик
Характер: True Neutral
Раса: Человек



QUOTE (Lex @ Apr 23 2005, 06:27)
там глянь, в инклюде есть работа с обхектом одним..это вроде поинт. Он у тебя есть в модуле?
(просто имя вещи находится так: она создается в том поинте и берется ее имя, а вещь удаляется. Иначе, если нету вещи или поинта, то берется сам резреф....кажись так)

:yahoo: Спасибо Lex! Я просто не поставил точку WP, в которой вещи креатятся и дестроятся. Все работает, все ОК! Спасибо за теорию. Мне ее временами катастрофически не хватает. :yes: Я гуманитарий, а не программист. (т.е. программер :yes: )
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение Apr 25 2005, 20:21
Сообщение #1058


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



Появилась идея сделать что-то вроде фильтра на нецензурные выражения.
Смысл такой: когда игрок выражается :D то получает штраф и предупреждение автоматически. Должен быть какой-то словарь, куда надо вписать все :bad: .Вот только не знаю с какого конца начать. Надеюсь, что поможете :yes:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tiger Greyhawk
сообщение Apr 26 2005, 03:54
Сообщение #1059



Иконки Групп

Класс: Обыватель
Характер: Chaotic Good
Раса: Человек
NWN: Скриптинг [Sn]



to Лито:
swearfilter.2da и namefilter.2da ссылка на описание значений Но это, насколько я понял Leon_PRO, будет работать только в "chatroom" (чат до игры), хотя это надо проверить. На экране у говорящего отображается, а как будет у других :xz: .
Можно сделать путем отслеживания произнесенных слов (как например в "Русская версия KPBS (система банкинга и биржи) ссылка" в переводе Аваддона, см. его подпись), но это, по моему, будет только после произнесения слова. :xz: т.е. можно сделать на автоматический штраф и предупреждение, но не катит как фильтр. Хотя, это все только предположения.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Apr 28 2005, 18:42
Сообщение #1060


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]







Люди как сделать полноценного оруженосца. И можно сделать, чтобы с персом бегало 2 оруженосца, а не один?


И как сделать портал, который в официальной компании и модах. Юзаешь камень призыва и тебя переносит к порталу, заходишь в портал и тебя переносит в последнее место использования камня.

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Buldog
сообщение Apr 28 2005, 19:03
Сообщение #1061


Level 5
**

Класс: Мастер Оружия
Характер: Chaotic Neutral
Раса: Полуорк



По поводу камня с возвратом. Создаешь нужный тебе предмет и даешь ему какой то тэг, при этом в предмет добавь свойство в русской версии "Только своя уникальная сила", прозьба не смеяться, по английски я понимаю плохо, поэтому использую руссифицированный тулсет, как это свойство по английски звучит я не в курсе.

В модуле в OnActivateItem помещаешь скрипт:
Neverwinter Script Source
void main()
{
    object oUser = GetItemActivator();
    object oStone = GetItemActivated();
    object oTarget = GetObjectByTag("ST_" + GetTag(oStone));

    SetLocalLocation(oUser, "ReturnLocation", GetLocation(oUser));

    AssignCommand(oUser, ClearAllActions());
    DelayCommand(1.0f, AssignCommand(oUser, ActionJumpToLocation(GetLocation(oTarget))));
}

Далее в нужном месте создаешь вэйпоинт с тэгом ST_+тэг предмета и поблизости портал. В OnUsed портала вставляешь скрипт:
Neverwinter Script Source
void main()
{
    object oUser = GetLastUsedBy();

    AssignCommand(oUser, ClearAllActions());
    DelayCommand(1.0f, AssignCommand(oUser, ActionJumpToLocation(GetLocalLocation(oUser, "ReturnLocation"))));
}

Сам не проверял, но должно работать :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Apr 28 2005, 19:33
Сообщение #1062


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Buldog спасибо, попробую.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
RiPPeR
сообщение Apr 28 2005, 19:37
Сообщение #1063


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

Класс: Страж Тьмы
Характер: Chaotic Neutral
Раса: Дракон
NWN: Скриптинг [PW]



QUOTE

Neverwinter Script Source
void main()
{
    object oUser = GetItemActivator();
    object oStone = GetItemActivated();
    object oTarget = GetObjectByTag("ST_" + GetTag(oStone));

    SetLocalLocation(oUser, "ReturnLocation", GetLocation(oUser));

    AssignCommand(oUser, ClearAllActions());
    DelayCommand(1.0f, AssignCommand(oUser, ActionJumpToLocation(GetLocation(oTarget))));
}

Дык так будет для любой активации уник повера предмета одинаковое дейтсвие, проверку тага actived предмета нужно сделать, а лучше res-ref'а.
Добавлено в [mergetime]1114706618[/mergetime]
Neverwinter Script Source
void main()
{
object oPC = GetItemActivator();
object oItem = GetItemActivated();
   
string sResRef = GetResRef(oItem);
string sStoneResRef = "stone"; //Сюда рес-реф камня поставишь

if (sResRef == sStoneResRef)
  {
  object oTarget = GetWaypointByTag("WP_" + sStoneResRef);

  SetLocalLocation(oPC, "ReturnLocation", GetLocation(oPC));

  AssignCommand(oPC, ClearAllActions());
  DelayCommand(1.0f, AssignCommand(oPC, ActionJumpToLocation(GetLocation(oTarget))));
  }
}


При активации камня (или любого другого предмета) с заданным рес-рефом, телепортирует его к вэйпоинту с тагом: WP_+рес-реф камня. В скрипте между " " своё название подставь и все.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Apr 28 2005, 20:34
Сообщение #1064


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Buldog все работает спасибо!

RiPPeR - поправлю как сказал, тоже спасибо!

А про оруженосца кто знает?????????
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zik
сообщение Apr 28 2005, 20:40
Сообщение #1065


Level 4
**

Класс: Оборотень
Характер: Neutral Evil
Раса: Тварь



Здравствуйте.

Подскажите пожалуйста, можно ли отключить (запретить использовать) кнопку save character, которая экспортирует персонажа в localvault и как это сделать?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 41 42 43 44 45 > » 
Ответить в эту темуОткрыть новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 14th May 2025 - 13:36