OnDeath of any Mythallar

mail@pastecode.io avatarunknown
c_cpp
a month ago
3.9 kB
18
Indexable
Never
void main()
{
    object oHeurodis = GetNearestObjectByTag("Heurodis");

    //If the Mythallar is destroyed once it's isolated, Heurodis is made
    //vulnerable.
    int bActive = GetLocalInt(OBJECT_SELF, "bActive");
    int iDestroyed = GetLocalInt(GetArea(OBJECT_SELF), "iMythallarDestroyed");
    if (bActive == TRUE)
    {
        object oArea = GetArea(OBJECT_SELF);
        SetLocalInt(oArea, "bMythallarDestroyed", TRUE);
        SetPlotFlag(oHeurodis, FALSE);

        //Play VO.
        AssignCommand(oHeurodis, SpeakStringByStrRef(40139, TALKVOLUME_SHOUT));
        AssignCommand(oHeurodis, PlaySoundByStrRef(76029, FALSE));

        //Screenshake for all players.
        effect eShake = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
        int iNth = 1;
        object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, iNth);
        while (oPC != OBJECT_INVALID)
        {
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eShake, oPC);
            iNth++;
            oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, iNth);
        }

        //Add journal entry.
        AddJournalQuestEntry("Journ_Main_40", 1, oPC, TRUE, TRUE);

        //Give XP to everyone
        object oPC_XP = GetFirstPC();
        while (oPC_XP != OBJECT_INVALID)
        {
            int bXP = GetLocalInt(oPC_XP, "XP_Main_10");
            if (bXP == FALSE)
            {
                SetLocalInt(oPC_XP, "XP_Main_10", TRUE);
                float fPercent = (15 - iDestroyed)/100.00;
                int iXP = FloatToInt(GetJournalQuestExperience("Journ_Main_End") * fPercent);
                GiveXPToCreature(oPC_XP, iXP);
            }
            oPC_XP = GetNextPC();
        }

        //Activate Wind Sounds (City is Falling now)
        object oSound1 = GetObjectByTag("snd_winds04_wind_1");
        object oSound2 = GetObjectByTag("snd_winds04_wind_2");
        DelayCommand(1.0, SoundObjectPlay(oSound1));
        SoundObjectPlay(oSound2);

        //Set Tremors Active in the Area. (and other city falling effects)
        SetLocalInt(oArea, "nTremorsActive", 1);

        //Lock force doors so PCs cannot leave the area again..
        /* DOORS PERMANENTLY LOCKED**
        object oDoor1 = GetObjectByTag("Winds_04_E_Winds_03_E");
        object oDoor2 = GetObjectByTag("Winds_04_N_Winds_03_N");
        object oDoor3 = GetObjectByTag("Winds_04_S_Winds_03_S");
        object oDoor4 = GetObjectByTag("Winds_04_W_Winds_03_W");

        AssignCommand(oDoor1, ActionCloseDoor(oDoor1));
        AssignCommand(oDoor2, ActionCloseDoor(oDoor2));
        AssignCommand(oDoor3, ActionCloseDoor(oDoor3));
        AssignCommand(oDoor4, ActionCloseDoor(oDoor4));
        SetLocked(oDoor1, TRUE);
        SetLocked(oDoor2, TRUE);
        SetLocked(oDoor3, TRUE);
        SetLocked(oDoor4, TRUE);
        */
        //Destroy All Mythalar in a chain reaction
        SignalEvent(oArea, EventUserDefined(1999));
    }
    else
    {
        SetLocalInt(GetArea(OBJECT_SELF), "iMythallarDestroyed", iDestroyed+1);
        if (GetIsDead(oHeurodis) == FALSE)
        {
            //Play VO.
            int iRandom = Random(2)+1;
            if (iRandom == 1)
            {
                PlayVoiceChat(VOICE_CHAT_THREATEN, oHeurodis);
            }
            if (iRandom == 2)
            {
                PlayVoiceChat(VOICE_CHAT_LAUGH, oHeurodis);
            }
        }
    }
    if (GetLocalInt(GetModule(), "X1_HeurodisCharge") == 1)
        return;
    //Turn Heurodis hostile if she isn't already.
    SetLocalInt(GetModule(), "X1_HeurodisCharge", 1);

    ChangeToStandardFaction(oHeurodis, STANDARD_FACTION_HOSTILE);
    object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oHeurodis);
    AssignCommand(oHeurodis, ActionMoveToObject(oPC, TRUE, 10.0));
    AssignCommand(oHeurodis, DetermineCombatRound());
}