Nordock no jishu il Forum

Hosted by freeforums.org
It is currently Sat Dec 26, 2009 3:53 pm

All times are UTC + 1 hour



Welcome
Welcome to <strong>Nordock no jishu il Forum</strong>.

You are currently viewing our boards as a guest, which gives you limited access to view most discussions and access our other features. By joining our free community, you will have access to post topics, communicate privately with other members (PM), respond to polls, upload content, and access many other special features. Registration is fast, simple, and absolutely free, so please, <a href="/profile.php?mode=register">join our community today</a>!




Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Script canzone del bardo
PostPosted: Wed May 30, 2007 11:49 pm 
Offline
Site Admin
User avatar

Joined: Wed May 30, 2007 6:52 pm
Posts: 92
Code:
//::///////////////////////////////////////////////
//:: Bard Song
//:: NW_S2_BardSong
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    This spells applies bonuses to all of the
    bard's allies within 30ft for a set duration of
    10 rounds.
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Feb 25, 2002
//:://////////////////////////////////////////////
//:: Last Updated By: Georg Zoeller Oct 1, 2003
/*
bugfix by Kovi 2002.07.30
- loosing temporary hp resulted in loosing the other bonuses
*/

#include "x0_i0_spells"

void main()
{
    if (GetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF))
    {
        FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced
        return;
    }
    string sTag = GetTag(OBJECT_SELF);

    if (sTag == "x0_hen_dee" || sTag == "x2_hen_deekin")
    {
        // * Deekin has a chance of singing a doom song
        // * same effect, better tune
        if (Random(100) + 1 > 80)
        {
            // the Xp2 Deekin knows more than one doom song
            if (d3() ==1 && sTag == "x2_hen_deekin")
            {
                DelayCommand(0.0, PlaySound("vs_nx2deekM_050"));
            }
            else
            {
                DelayCommand(0.0, PlaySound("vs_nx0deekM_074"));
                DelayCommand(5.0, PlaySound("vs_nx0deekM_074"));
            }
        }
    }


    //Declare major variables
    int nLevel = GetLevelByClass(CLASS_TYPE_BARD);
    int nRanks = GetSkillRank(SKILL_PERFORM);
    int nChr = GetAbilityModifier(ABILITY_CHARISMA);
    int nPerform = nRanks;
    int nDuration = 10; //+ nChr;

    effect eAttack;
    effect eDamage;
    effect eWill;
    effect eFort;
    effect eReflex;
    effect eHP;
    effect eAC;
    effect eSkill;

    int nAttack;
    int nDamage;
    int nWill;
    int nFort;
    int nReflex;
    int nHP;
    int nAC;
    int nSkill;
    int bonusdanni = (nLevel+nRanks+nChr)/8;
    if (bonusdanni >=12) bonusdanni = 12;
    //Check to see if the caster has Lasting Impression and increase duration.
    if(GetHasFeat(870))
    {
        nDuration *= 10;
    }

    // lingering song
    if(GetHasFeat(424)) // lingering song
    {
        nDuration += 5;
    }

    //SpeakString("Level: " + IntToString(nLevel) + " Ranks: " + IntToString(nRanks));

    if(nPerform >= 100 && nLevel >= 30)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = 48+(nLevel*nRanks*nChr)/100;
        nAC = 7;
        nSkill = 19+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 95 && nLevel >= 29)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (46+(nLevel*nRanks*nChr)/100);
        nAC = 6;
        nSkill = 18+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 90 && nLevel >= 28)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (44+(nLevel*nRanks*nChr)/100);
        nAC = 6;
        nSkill = 17+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 85 && nLevel >= 27)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (42+(nLevel*nRanks*nChr)/100);
        nAC = 6;
        nSkill = 16+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 80 && nLevel >= 26)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (40+(nLevel*nRanks*nChr)/100);
        nAC = 6;
        nSkill = 15+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 75 && nLevel >= 25)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (38+(nLevel*nRanks*nChr)/100);
        nAC = 6;
        nSkill = 14+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 70 && nLevel >= 24)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (36+(nLevel*nRanks*nChr)/100);
        nAC = 5;
        nSkill = 13+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 65 && nLevel >= 23)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (34+(nLevel*nRanks*nChr)/100);
        nAC = 5;
        nSkill = 12+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 70 && nLevel >= 22)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (32+(nLevel*nRanks*nChr)/100);
        nAC = 5;
        nSkill = 11+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 55 && nLevel >= 21)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (30+(nLevel*nRanks*nChr)/100);
        nAC = 5;
        nSkill = 9+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 50 && nLevel >= 20)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (28+(nLevel*nRanks*nChr)/100);
        nAC = 5;
        nSkill = 8+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 45 && nLevel >= 19)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (26+(nLevel*nRanks*nChr)/100);
        nAC = 5;
        nSkill = 7+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 40 && nLevel >= 18)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (24+(nLevel*nRanks*nChr)/100);
        nAC = 5;
        nSkill = 6+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 35 && nLevel >= 17)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (22+(nLevel*nRanks*nChr)/100);
        nAC = 5;
        nSkill = 5+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 30 && nLevel >= 16)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 3;
        nFort = 2;
        nReflex = 2;
        nHP = (16+(nLevel*nRanks*nChr)/100);
        nAC = 5;
        nSkill = 4+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 24 && nLevel >= 15)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 2;
        nFort = 2;
        nReflex = 2;
        nHP = (16+(nLevel*nRanks*nChr)/100);
        nAC = 4;
        nSkill = 3+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 21 && nLevel >= 14)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 3+bonusdanni;
        nWill = 1;
        nFort = 1;
        nReflex = 1;
        nHP = (16+(nLevel*nRanks*nChr)/100);
        nAC = 3;
        nSkill = 2+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 18 && nLevel >= 11)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 2+bonusdanni;
        nWill = 1;
        nFort = 1;
        nReflex = 1;
        nHP = (8+(nLevel*nRanks*nChr)/100);
        nAC = 2;
        nSkill = 2+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 15 && nLevel >= 8)
    {
        nAttack = 2+(nLevel+nRanks+nChr)/10;
        nDamage = 2+bonusdanni;
        nWill = 1;
        nFort = 1;
        nReflex = 1;
        nHP = (8+(nLevel*nRanks*nChr)/100);
        nAC = 0;
        nSkill = 1+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 12 && nLevel >= 6)
    {
        nAttack = 1+(nLevel+nRanks+nChr)/10;
        nDamage = 2+bonusdanni;
        nWill = 1;
        nFort = 1;
        nReflex = 1;
        nHP = 5+(nLevel*nRanks*nChr)/100;
        nAC = 0;
        nSkill = 1+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 9 && nLevel >= 3)
    {
        nAttack = 1+(nLevel+nRanks+nChr)/10;
        nDamage = 2+bonusdanni;
        nWill = 1;
        nFort = 0;
        nReflex = 0;
        nHP = 5+(nLevel*nRanks*nChr)/100;
        nAC = 0;
        nSkill = 0+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 6 && nLevel >= 2)
    {
        nAttack = 1+(nLevel+nRanks+nChr)/10;
        nDamage = 1+bonusdanni;
        nWill = 1;
        nFort = 0;
        nReflex = 0;
        nHP = 5+(nLevel*nRanks*nChr)/100;
        nAC = 0;
        nSkill = 0+(nLevel+nRanks+nChr)/6;
    }
    else if(nPerform >= 3 && nLevel >= 1)
    {
        nAttack = 1+(nLevel+nRanks+nChr)/10;
        nDamage = 1+bonusdanni;
        nWill = 0;
        nFort = 0;
        nReflex = 0;
        nHP = 5+(nLevel*nRanks*nChr)/100;
        nAC = 0;
        nSkill = 0+(nLevel+nRanks+nChr)/6;
    }
    effect eVis = EffectVisualEffect(VFX_DUR_BARD_SONG);

    eAttack = EffectAttackIncrease(nAttack);
    eDamage = EffectDamageIncrease(nDamage, DAMAGE_TYPE_SONIC);
    effect eLink = EffectLinkEffects(eAttack, eDamage);

    if(nWill > 0)
    {
        eWill = EffectSavingThrowIncrease(SAVING_THROW_WILL, nWill);
        eLink = EffectLinkEffects(eLink, eWill);
    }
    if(nFort > 0)
    {
        eFort = EffectSavingThrowIncrease(SAVING_THROW_FORT, nFort);
        eLink = EffectLinkEffects(eLink, eFort);
    }
    if(nReflex > 0)
    {
        eReflex = EffectSavingThrowIncrease(SAVING_THROW_REFLEX, nReflex);
        eLink = EffectLinkEffects(eLink, eReflex);
    }
    if(nHP > 0)
    {
        //SpeakString("HP Bonus " + IntToString(nHP));
        eHP = EffectTemporaryHitpoints(nHP);
//        eLink = EffectLinkEffects(eLink, eHP);
    }
    if(nAC > 0)
    {
        eAC = EffectACIncrease(nAC, AC_DODGE_BONUS);
        eLink = EffectLinkEffects(eLink, eAC);
    }
    if(nSkill > 0)
    {
        eSkill = EffectSkillIncrease(SKILL_ALL_SKILLS, nSkill);
        eLink = EffectLinkEffects(eLink, eSkill);
    }
    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
    eLink = EffectLinkEffects(eLink, eDur);

    effect eImpact = EffectVisualEffect(VFX_IMP_HEAD_SONIC);
    effect eFNF = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30);
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, GetLocation(OBJECT_SELF));

    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));

    eHP = ExtraordinaryEffect(eHP);
    eLink = ExtraordinaryEffect(eLink);

    while(GetIsObjectValid(oTarget))
    {
        if(!GetHasFeatEffect(FEAT_BARD_SONGS, oTarget) && !GetHasSpellEffect(GetSpellId(),oTarget))
        {
             // * GZ Oct 2003: If we are silenced, we can not benefit from bard song
             if (!GetHasEffect(EFFECT_TYPE_SILENCE,oTarget) && !GetHasEffect(EFFECT_TYPE_DEAF,oTarget))
             {
                if(oTarget == OBJECT_SELF)
                {
                    effect eLinkBard = EffectLinkEffects(eLink, eVis);
                    eLinkBard = ExtraordinaryEffect(eLinkBard);
                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLinkBard, oTarget, RoundsToSeconds(nDuration));
                    if (nHP > 0)
                    {
                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nDuration));
                    }
                }
                else if(GetIsFriend(oTarget))
                {
                    ApplyEffectToObject(DURATION_TYPE_INSTANT, eImpact, oTarget);
                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(nDuration));
                    if (nHP > 0)
                    {
                        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, RoundsToSeconds(nDuration));
                    }
                }
            }
        }
        oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF));
    }
}


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron