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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 41 42 43 44 45 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
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 и как это сделать?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Apr 28 2005, 21:19
Сообщение #1066


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

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



У меня вообще оруженосец есть. Я его сделал из Томи, путем пластической операции и промывки разговора. Только он сует мне свой контракт (тег - NW_HEN_GALPERS, ResRes - hen_galpers002). В его скриптах ни тега, ни ResRefа не нашел. И еще инвентарь у него от Томи остался.



Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Алексашка
сообщение Apr 29 2005, 19:43
Сообщение #1067


Level 3
*

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



QUOTE (-fenix- @ Apr 28 2005, 21:19)
У меня вообще оруженосец есть. Я его сделал из Томи, путем пластической операции и промывки разговора. Только он сует мне свой контракт (тег - NW_HEN_GALPERS, ResRes - hen_galpers002). В его скриптах ни тега, ни ResRefа не нашел. И еще инвентарь у него от Томи остался.

Ты имеешь ввиду невозможность зайти в его инвентарь? Могу тебя порадовать, еще одним сюрпризом в будущем. Когда ты будешь повышать уровень своему"Томи" можешь ненароком остаться вообще без оруженосца :D . Выкинь этого персонажа и сделай нового. Просто содаешь нового перса, с теми параметрами которые тебе нужны, затем заходишь в скрипты и меняешь все, стоящие там по умолчанию, на скрипты оруженосца из первого или вторго аддона. Смотря какой у тебя стоит. Создаешь ему диалог со скриптом присоединения и оруженосец готов. Скрипты по памяти не напишу, а тулсета рядом нет.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Алексашка
сообщение Apr 29 2005, 19:45
Сообщение #1068


Level 3
*

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



QUOTE (-fenix- @ Apr 28 2005, 21:19)
Только он сует мне свой контракт (тег - NW_HEN_GALPERS, ResRes - hen_galpers002). В его скриптах ни тега, ни ResRefа не нашел.

Контракт прописан в диалоге в строке присоединения. :D
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Apr 29 2005, 22:34
Сообщение #1069


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Zik @ Apr 28 2005, 23:40)
Подскажите пожалуйста, можно ли отключить (запретить использовать) кнопку save character, которая экспортирует персонажа в localvault и как это сделать?

Боюсь что никак. Если только вообще запретить панель сэйва.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Apr 30 2005, 16:58
Сообщение #1070


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

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



Самого оруженосца уже сам сделал. А вот за контракт ОГРОМНОЕ СПАСИБО!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Scaled
сообщение May 3 2005, 23:09
Сообщение #1071


Level 3
*

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



Привет всем, у меня вот такой вопрос : я вот компонентную магию делаю, заклы переписать не проблема. Вот в чем проблема, так это в том что я не знаю как она устанавливаеться, т. е. как заставить работать переписаные заклы?
Я не прошу скриптов, только алгоритм куда что вставлять :D
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 4 2005, 10:59
Сообщение #1072


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

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



Эм..там в spells.2da написано, какой скрипт какой закл обрабатывает по моему. Те если тебе надо закл поменять, то тебе эти скрипты и надо ковырять..или я что-то не догоняю?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Buldog
сообщение May 4 2005, 12:38
Сообщение #1073


Level 5
**

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



Все спелы обрабатыватся соответствующими скриптами, причем, что бы узнать какой скрипт какой спелл обрабатывает вовсе не обязательно лезть в spells.2da, у большинства скриптов имя совпадает с названием спела. А что бы посмотреть скрипты, просто при открытии скрипта поставь пометку, что бы показывались не только скрипты модуля, но и дефолтные скрпты НВНа.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Scaled
сообщение May 5 2005, 13:08
Сообщение #1074


Level 3
*

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



Не это все понятно, я про то как заставить переписаные спеллы работать.Пример, вот я переписал скрипт с молнией , добавил, скажем, компонент. Куда его надо поставить, или в каком скрипте ссылку на него сделать?
:crazy: Замучился, порожаюсь как люди разбираються....
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение May 5 2005, 14:04
Сообщение #1075


Level 9
***

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



У самого были вопросы с компоненткой. В ту пору мне dumbo все разжевал :D
Сейчас попробую я.
Делается все дело с помощью биотваревской системы spell-hook
Ставь на модуль переменную типа string, с именем X2_S_UD_SPELLSCRIPT. стоимость пременной = названию скрипта, в котором ты будешь дополнять спеллы.
Как поставить переменную?
Св-ва модуля -> Улучшенный(Advanced) -> переменные.
Вот пример компонентного закла.
скрипт называется m_my_spell.
Neverwinter Script Source
void main()
{
object oPC = OBJECT_SELF;
object oTarget = GetSpellTargetObject();  //в кого пуляем?
object oItem = GetSpellCastItem();  //а если кастуем с предмета?
int nSpell = GetSpellId();  //переменная, которая определяет какой именно спелл кастуется
switch (nSpell)

       {

         case SPELL_FIREBALL:  //на какие собственно спеллы компонент? В данном случае на фаэрболлы и фаэрбрэнды
         case SPELL_FIREBRAND:
         case SPELL_DELAYED_BLAST_FIREBALL:
         if (GetIsObjectValid(oItem))  //если указанные выше спеллы кастуются с предмета(амулет, свиток и т.д.). Останавливаем скрипт.
           {
           break;
           }

           if ((HasItem(oPC,"sera") == FALSE) && (GetIsDM(oPC) == FALSE))  //если у кастующего нет компонента с тэгом sera - остановить спелл.Если кастер - ДМ, забиваем на проверку
          {                                                                                            
           SetModuleOverrideSpellScriptFinished();
           SendMessageToPC(OBJECT_SELF, "У вас нет необходимых компонентов!!");
           }
      else
    {
    DestroyObject(GetItemPossessedBy(oPC,"sera")); //забираем серу
    }
    break;

скрипт называется m_my_spell.
Значит переменная на модуле будет выглядеть так:
имя: X2_S_UD_SPELLSCRIPT тип: string стоимость: m_my_spell

Сообщение отредактировал Лито - May 5 2005, 14:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 29th April 2024 - 10:42