예제 #1
0
    public override bool OnDialog(GameObject attachee, GameObject triggerer)
    {
        if ((!attachee.HasMet(triggerer)))
        {
            ScriptDaemon.record_time_stamp(501);
            if ((GetGlobalVar(454) & 0x100) != 0)
            {
                triggerer.BeginDialog(attachee, 590);
            }
            else if ((GetGlobalFlag(91)))
            {
                triggerer.BeginDialog(attachee, 100);
            }
            else
            {
                triggerer.BeginDialog(attachee, 1);
            }
        }
        else
        {
            triggerer.BeginDialog(attachee, 300);
        }

        return(RunDefault);
    }
 public static bool schedule_sb_retaliation_for_narc(GameObject attachee, GameObject triggerer)
 {
     SetGlobalVar(945, 5);
     StartTimer(518400000, () => sb_retaliation_for_narc()); // 518400000ms is 6 days
     ScriptDaemon.record_time_stamp("s_sb_retaliation_for_narc");
     return(RunDefault);
 }
예제 #3
0
    public override bool OnInsertItem(GameObject attachee, GameObject triggerer)
    {
        if (((triggerer.GetNameId() == 1203) && (!GetGlobalFlag(109))))
        {
            ScriptDaemon.record_time_stamp(512);
            UiSystems.CharSheet.Hide();
            attachee.Destroy();
            SetGlobalFlag(109, true);
            AttachParticles("DesecrateEarth", triggerer);
            foreach (var npc in ObjList.ListVicinity(new locXY(484, 400), ObjectListFilter.OLC_NPC))
            {
                if ((new[] { 14337, 14381 }).Contains(npc.GetNameId()) && npc.GetLeader() == null) // earth temple guards
                {
                    npc.Attack(SelectedPartyLeader);
                }
            }

            foreach (var npc in ObjList.ListVicinity(new locXY(484, 424), ObjectListFilter.OLC_NPC))
            {
                if ((new[] { 14337, 14381, 14296 }).Contains(npc.GetNameId()) && npc.GetLeader() == null) // earth temple guards
                {
                    npc.Attack(SelectedPartyLeader);
                }
            }
        }

        return(RunDefault);
    }
 public static bool schedule_sb_retaliation_for_whistleblower(GameObject attachee, GameObject triggerer)
 {
     SetGlobalVar(945, 6);
     StartTimer(1209600000, () => sb_retaliation_for_whistleblower()); // 1209600000ms is 14 days
     ScriptDaemon.record_time_stamp("s_sb_retaliation_for_whistleblower");
     return(RunDefault);
 }
 public static bool schedule_sb_retaliation_for_snitch(GameObject attachee, GameObject triggerer)
 {
     SetGlobalVar(945, 4);
     StartTimer(864000000, () => sb_retaliation_for_snitch()); // 864000000ms is 10 days
     ScriptDaemon.record_time_stamp("s_sb_retaliation_for_snitch");
     return(RunDefault);
 }
예제 #6
0
    public static bool schedule_bandits_1(GameObject attachee, GameObject triggerer)
    {
        var tempp = GetGlobalVar(923);

        if (GetGlobalVar(923) == 0)
        {
            for (var p = 0; p < 12; p++)
            {
                tempp += RandomRange(0, 8);
            }

            tempp -= 24;
            if (tempp < 5)
            {
                tempp = 5;
            }

            // approximate a gaussian distribution by adding together 12 uniformly distributed random variables
            // average result will be 24 days, standard deviation will be 8 days
            // it is then truncated at 5 days minimum (feel free to change) (roughly 1% of results might reach 5 or lower otherwise, even negative is possible though rare)
            SetGlobalVar(923, tempp);
        }

        StartTimer(tempp * 24 * 60 * 60 * 1000, () => set_bandits());
        ScriptDaemon.record_time_stamp("s_ranths_bandits_1");
        return(RunDefault);
    }
예제 #7
0
 public static bool set_reward(GameObject attachee, GameObject triggerer)
 {
     attachee.RunOff();
     StartTimer(864000000, () => give_reward());         // 864000000ms is 10 days
     ScriptDaemon.record_time_stamp("s_tillahi_reward"); // bulletproofed with Global Scheduling System - see py00439script_daemon.py
     return(RunDefault);
 }
예제 #8
0
 public static bool prepare_goons(GameObject attachee)
 {
     // This script schedules Skole's Goons
     // Reworked to use global timing system
     StartTimer(259200000, () => goons_attack(attachee));
     ScriptDaemon.record_time_stamp("s_skole_goons");
     return(RunDefault);
 }
예제 #9
0
 public static bool schedule_reward(GameObject attachee, GameObject triggerer)
 {
     SetGlobalFlag(152, true);
     attachee.SetObjectFlag(ObjectFlag.OFF);
     StartTimer(1209600000, () => give_reward()); // 1209600000ms is 2 weeks
     ScriptDaemon.record_time_stamp("s_thrommel_reward");
     return(RunDefault);
 }
예제 #10
0
 public static bool destroy_orb(GameObject attachee, GameObject triggerer)
 {
     SetGlobalFlag(326, true);
     // set timer for 4 days and then end game or go to verbo
     StartTimer(345600000, () => return_Zuggtmoy(attachee, triggerer));
     ScriptDaemon.record_time_stamp("s_zuggtmoy_banishment_initiate");
     return(RunDefault);
 }
예제 #11
0
    public override bool OnDying(GameObject attachee, GameObject triggerer)
    {
        if (CombatStandardRoutines.should_modify_CR(attachee))
        {
            CombatStandardRoutines.modify_CR(attachee, CombatStandardRoutines.get_av_level());
        }

        ScriptDaemon.record_time_stamp(507);
        return(RunDefault);
    }
예제 #12
0
    public static void q16()
    {
        if (GetQuestState(16) == QuestState.Accepted || GetQuestState(16) == QuestState.Mentioned)
        {
            SetQuestState(16, QuestState.Completed);
            ScriptDaemon.record_time_stamp(431);
        }

        return;
    }
예제 #13
0
    public static void rngfighttime_set()
    {
        if (!GetGlobalFlag(426))
        {
            ScriptDaemon.record_time_stamp(426);
            SetGlobalFlag(426, true);
        }

        return;
    }
예제 #14
0
    public static void f41()
    {
        if (!GetGlobalFlag(41))
        {
            SetGlobalFlag(41, true);
            ScriptDaemon.record_time_stamp(432);
        }

        return;
    }
예제 #15
0
    public override bool OnDying(GameObject attachee, GameObject triggerer)
    {
        ScriptDaemon.record_time_stamp(505);
        ScriptDaemon.set_v(499, ScriptDaemon.get_v(499) + 1);
        if (Math.Pow((ScriptDaemon.get_v(498) / 75f), 3) + Math.Pow((ScriptDaemon.get_v(499) / 38f), 3) + Math.Pow((ScriptDaemon.get_v(500) / 13f), 3) >= 1)
        {
            ScriptDaemon.record_time_stamp(510);
        }

        return(RunDefault);
    }
예제 #16
0
    public override bool OnDialog(GameObject attachee, GameObject triggerer)
    {
        if (GetGlobalVar(923) == 0)
        {
            var tempp = 0;
            for (var p = 0; p < 12; p++)
            {
                tempp += RandomRange(0, 8);
            }

            tempp -= 24;
            if (tempp < 5)
            {
                tempp = 5;
            }

            SetGlobalVar(923, tempp);
        }
        else if (!ScriptDaemon.tpsts("s_ranths_bandits_1", 0))
        {
            ScriptDaemon.record_time_stamp("s_ranths_bandits_1");
        }

        attachee.TurnTowards(triggerer);
        if ((GetQuestState(78) == QuestState.Completed && GetQuestState(107) == QuestState.Unknown && GetQuestState(112) == QuestState.Mentioned))
        {
            triggerer.BeginDialog(attachee, 430);
        }

        if ((GetQuestState(74) == QuestState.Completed && GetQuestState(78) == QuestState.Unknown && GetQuestState(111) == QuestState.Mentioned))
        {
            triggerer.BeginDialog(attachee, 450);
        }
        else if ((GetGlobalVar(993) == 7))
        {
            triggerer.BeginDialog(attachee, 630);
        }
        else if ((GetGlobalVar(993) == 9))
        {
            triggerer.BeginDialog(attachee, 710);
        }
        else if ((attachee.GetMap() == 5156))
        {
            triggerer.BeginDialog(attachee, 910);
        }
        else
        {
            triggerer.BeginDialog(attachee, 1);
        }

        return(SkipDefault);
    }
예제 #17
0
    public override bool OnDying(GameObject attachee, GameObject triggerer)
    {
        // if should_modify_CR( attachee ):
        // modify_CR( attachee, get_av_level() )
        ScriptDaemon.record_time_stamp(518);
        SetGlobalFlag(110, true);
        if ((attachee.GetLeader() != null))
        {
            SetGlobalVar(29, GetGlobalVar(29) + 1);
        }

        return(RunDefault);
    }
예제 #18
0
    public override bool OnDialog(GameObject attachee, GameObject triggerer)
    {
        if ((!attachee.HasMet(triggerer)))
        {
            ScriptDaemon.record_time_stamp(503);
            triggerer.BeginDialog(attachee, 1);
        }
        else
        {
            triggerer.BeginDialog(attachee, 50);
        }

        return(SkipDefault);
    }
예제 #19
0
    public override bool OnHeartbeat(GameObject attachee, GameObject triggerer)
    {
        if ((!GameSystems.Combat.IsCombatActive()))
        {
            foreach (var obj in ObjList.ListVicinity(attachee.GetLocation(), ObjectListFilter.OLC_PC))
            {
                if ((!attachee.HasMet(obj)))
                {
                    if ((Utilities.is_safe_to_talk(attachee, obj)))
                    {
                        ScriptDaemon.record_time_stamp(501);
                        if ((GetGlobalFlag(91)))
                        {
                            obj.TurnTowards(attachee); // added by Livonya
                            attachee.TurnTowards(obj); // added by Livonya
                            obj.BeginDialog(attachee, 100);
                        }
                        else if (((GetGlobalFlag(107)) || (GetGlobalFlag(105))))
                        {
                            obj.TurnTowards(attachee); // added by Livonya
                            attachee.TurnTowards(obj); // added by Livonya
                            obj.BeginDialog(attachee, 590);
                        }
                        else
                        {
                            obj.TurnTowards(attachee); // added by Livonya
                            attachee.TurnTowards(obj); // added by Livonya
                            obj.BeginDialog(attachee, 1);
                        }
                    }
                }
            }
        }

        // game.new_sid = 0		## removed by Livonya
        if ((GetGlobalVar(727) == 0 && attachee.GetLeader() == null && !GameSystems.Combat.IsCombatActive()))
        {
            attachee.CastSpell(WellKnownSpells.OwlsWisdom, attachee);
            attachee.PendingSpellsToMemorized();
        }

        if ((GetGlobalVar(727) == 4 && attachee.GetLeader() == null && !GameSystems.Combat.IsCombatActive()))
        {
            attachee.CastSpell(WellKnownSpells.ShieldOfFaith, attachee);
            attachee.PendingSpellsToMemorized();
        }

        SetGlobalVar(727, GetGlobalVar(727) + 1);
        return(RunDefault);
    }
예제 #20
0
    public override bool OnExitCombat(GameObject attachee, GameObject triggerer)
    {
        if ((attachee.GetMap() == 5001 || attachee.GetMap() == 5051 || attachee.GetMap() == 5121))
        {
            attachee.SetObjectFlag(ObjectFlag.OFF);
            if ((!GetGlobalFlag(929)))
            {
                SetGlobalVar(927, 5);
                StartTimer(432000000, () => reset_gremlich()); // 432000000ms is 5 days
                ScriptDaemon.record_time_stamp("s_gremlich_2");
            }
        }

        return(RunDefault);
    }
예제 #21
0
    public override bool OnDialog(GameObject attachee, GameObject triggerer)
    {
        if (attachee.GetNameId() == 14181) // Water Temple Sentry
        {
            if (ScriptDaemon.get_v("water_sentry_pester") < 7)
            {
                var lll = RandomRange(0, 3);
                attachee.FloatLine(lll + 1100, triggerer);
                ScriptDaemon.set_v("water_sentry_pester", ScriptDaemon.get_v("water_sentry_pester") + 1);
            }
            else if (ScriptDaemon.get_v("water_sentry_pester") == 7)
            {
                var lll = RandomRange(0, 1);
                attachee.FloatLine(1104 + lll, triggerer);
                ScriptDaemon.set_v("water_sentry_pester", ScriptDaemon.get_v("water_sentry_pester") + 1);
            }
            else if (ScriptDaemon.get_v("water_sentry_pester") == 8)
            {
                attachee.FloatLine(1150, triggerer);
                ScriptDaemon.set_v("water_sentry_pester", ScriptDaemon.get_v("water_sentry_pester") + 1);
            }
            else if (ScriptDaemon.get_v("water_sentry_pester") > 8)
            {
                attachee.SetCritterFlag(CritterFlag.MUTE);
            }
        }
        else if ((!attachee.HasMet(triggerer)))
        {
            ScriptDaemon.record_time_stamp(501);
            if ((GetGlobalFlag(91)))
            {
                triggerer.BeginDialog(attachee, 100);
            }
            else
            {
                triggerer.BeginDialog(attachee, 1);
            }
        }
        else
        {
            triggerer.BeginDialog(attachee, 300);
        }

        return(SkipDefault);
    }
예제 #22
0
    public override bool OnDialog(GameObject attachee, GameObject triggerer)
    {
        ScriptDaemon.record_time_stamp(515);
        if ((GetGlobalFlag(132)))
        {
            attachee.Attack(triggerer);
        }
        else if ((!attachee.HasMet(triggerer)))
        {
            triggerer.BeginDialog(attachee, 1);
        }
        else
        {
            triggerer.BeginDialog(attachee, 370);
        }

        return(SkipDefault);
    }
예제 #23
0
 public static void set_to_of_off(GameObject obj)
 {
     if ((obj != null && !Utilities.critter_is_unconscious(obj) && obj.GetLeader() == null && !obj.D20Query(D20DispatcherKey.QUE_Critter_Is_Held))) // mainly in case the player initiates the fight with her e.g. one-shotting or charming her etc.
     {
         // and not obj.d20_query(Q_Prone) # removed this one - I think it's reasonable that she crawls under something even after being tripped
         obj.SetObjectFlag(ObjectFlag.CLICK_THROUGH);
         // obj.move(obj.location + 50 , 0.0, 0.0)
         ScriptDaemon.record_time_stamp("dala_buggered_off");
         obj.SetObjectFlag(ObjectFlag.OFF);
     }
     else
     {
         obj.ClearObjectFlag(ObjectFlag.CLICK_THROUGH);
         // obj.move(obj.location - 50 , 0.0, 0.0)
         obj.ClearObjectFlag(ObjectFlag.OFF);
         obj.FadeTo(255, 1, 35);
     }
 }
예제 #24
0
    public override bool OnDialog(GameObject attachee, GameObject triggerer)
    {
        ScriptDaemon.record_time_stamp(517);
        triggerer.TurnTowards(attachee); // added by Livonya
        attachee.TurnTowards(triggerer); // added by Livonya
        if ((triggerer.GetPartyMembers().Any(o => o.HasFollowerByName(8031))))
        {
            // Prince Thrommel in your party
            triggerer.BeginDialog(attachee, 700);
        }
        else if ((triggerer.GetPartyMembers().Any(o => o.HasFollowerByName(8040)) && (!GetGlobalFlag(192))))
        {
            // Ashrem in your party
            triggerer.BeginDialog(attachee, 860);
        }
        else if (((GetGlobalFlag(115)) && (GetGlobalFlag(116)) && (!GetGlobalFlag(125))))
        {
            // Tubal and Antonio are dead (116 & 115 respectively), and you haven't bluffed him yet (125)
            triggerer.BeginDialog(attachee, 400);
        }
        else if ((!attachee.HasMet(triggerer)))
        {
            if ((GetGlobalFlag(92)))
            {
                // Recruited via Wat
                triggerer.BeginDialog(attachee, 200);
            }
            else
            {
                // Waltzing In (TM)
                triggerer.BeginDialog(attachee, 1);
            }
        }
        else
        {
            // "What news have you for me"
            triggerer.BeginDialog(attachee, 300);
        }

        return(SkipDefault);
    }
예제 #25
0
    public static bool encounter_picker(GameObject attachee, GameObject triggerer)
    {
        var enc = RandomRange(1, 6);

        if ((enc == 1))
        {
            StartTimer(259200000, () => set_sport_encounter_1()); // 259200000ms is 3 days
            ScriptDaemon.record_time_stamp("s_sport_1");
        }
        else if ((enc == 2))
        {
            StartTimer(259200000, () => set_sport_encounter_2()); // 259200000ms is 3 days
            ScriptDaemon.record_time_stamp("s_sport_2");
        }
        else if ((enc == 3))
        {
            StartTimer(259200000, () => set_sport_encounter_3()); // 259200000ms is 3 days
            ScriptDaemon.record_time_stamp("s_sport_3");
        }
        else if ((enc == 4))
        {
            StartTimer(259200000, () => set_sport_encounter_4()); // 259200000ms is 3 days
            ScriptDaemon.record_time_stamp("s_sport_4");
        }
        else if ((enc == 5))
        {
            StartTimer(259200000, () => set_sport_encounter_5()); // 259200000ms is 3 days
            ScriptDaemon.record_time_stamp("s_sport_5");
        }
        else if ((enc == 6))
        {
            StartTimer(259200000, () => set_sport_encounter_6()); // 259200000ms is 3 days
            ScriptDaemon.record_time_stamp("s_sport_6");
        }

        return(RunDefault);
    }
예제 #26
0
    public override bool OnStartCombat(GameObject attachee, GameObject triggerer)
    {
        romag_call_help(attachee);
        if ((Utilities.obj_percent_hp(attachee) < 50 && (!attachee.HasMet(triggerer))))
        {
            GameObject found_pc = null;
            foreach (var pc in PartyLeader.GetPartyMembers())
            {
                attachee.AIRemoveFromShitlist(pc);
                if (pc.type == ObjectType.pc)
                {
                    found_pc = pc;
                }
            }

            if (found_pc != null)
            {
                ScriptDaemon.record_time_stamp(501);
                foreach (var pc in PartyLeader.GetPartyMembers())
                {
                    foreach (var npc in ObjList.ListVicinity(attachee.GetLocation(), ObjectListFilter.OLC_NPC))
                    {
                        if ((new[] { 14162, 14163, 14165, 14337, 14339, 14156 }).Contains(npc.GetNameId()) && npc.GetLeader() == null)
                        {
                            npc.AIRemoveFromShitlist(pc);
                        }
                    }
                }

                found_pc.BeginDialog(attachee, 200);
                return(SkipDefault);
            }
        }

        return(RunDefault);
    }
예제 #27
0
    public void ApplySideEffect(GameObject npc, GameObject pc, int lineNumber, out string originalScript)
    {
        switch (lineNumber)
        {
        case 35:
        case 36:
        case 522:
        case 541:
        case 553:
            originalScript = "npc.attack(pc)";
            npc.Attack(pc);
            break;

        case 60:
        case 470:
            originalScript = "game.story_state = 5";
            StoryState     = 5;
            break;

        case 160:
        case 1600:
            originalScript = "game.quests[49].state = qs_mentioned";
            SetQuestState(49, QuestState.Mentioned);
            break;

        case 175:
        case 176:
            originalScript = "unlock_sw_doors()";
            unlock_sw_doors();
            break;

        case 190:
            originalScript = "game.quests[49].state = qs_accepted; game.global_flags[346] = 1; record_time_stamp(479)";
            SetQuestState(49, QuestState.Accepted);
            SetGlobalFlag(346, true);
            ScriptDaemon.record_time_stamp(479);
            ;
            break;

        case 220:
        case 310:
            originalScript = "game.quests[49].state = qs_completed; pc.reputation_add( 10 )";
            SetQuestState(49, QuestState.Completed);
            pc.AddReputation(10);
            ;
            break;

        case 240:
            originalScript = "game.quests[50].state = qs_mentioned";
            SetQuestState(50, QuestState.Mentioned);
            break;

        case 250:
            originalScript = "game.quests[50].state = qs_accepted; npc.item_transfer_to(pc,3601); game.global_flags[346] = 1";
            SetQuestState(50, QuestState.Accepted);
            npc.TransferItemByNameTo(pc, 3601);
            SetGlobalFlag(346, true);
            ;
            break;

        case 305:
        case 306:
            originalScript = "game.quests[49].state = qs_botched";
            SetQuestState(49, QuestState.Botched);
            break;

        case 320:
            originalScript = "game.quests[50].state = qs_completed";
            SetQuestState(50, QuestState.Completed);
            break;

        case 340:
            originalScript = "game.quests[51].state = qs_mentioned";
            SetQuestState(51, QuestState.Mentioned);
            break;

        case 360:
        case 380:
        case 390:
            originalScript = "game.quests[51].state = qs_completed";
            SetQuestState(51, QuestState.Completed);
            break;

        case 400:
            originalScript = "record_time_stamp(483); game.quests[51].state = qs_accepted";
            ScriptDaemon.record_time_stamp(483);
            SetQuestState(51, QuestState.Accepted);
            ;
            break;

        case 443:
        case 593:
        case 594:
            originalScript = "game.global_flags[813] = 1";
            SetGlobalFlag(813, true);
            break;

        case 451:
        case 601:
            originalScript = "escort_below(npc, pc)";
            escort_below(npc, pc);
            break;

        case 1621:
        case 1641:
            originalScript = "pc.reputation_add( 10 )";
            pc.AddReputation(10);
            break;

        default:
            originalScript = null;
            return;
        }
    }
예제 #28
0
    public override bool OnHeartbeat(GameObject attachee, GameObject triggerer)
    {
        var(xx, yy) = attachee.GetLocation();
        if ((!GameSystems.Combat.IsCombatActive()))
        {
            if (xx == 545 && yy == 497) // Kelno is in his usual place
            {
                foreach (var obj in ObjList.ListVicinity(attachee.GetLocation(), ObjectListFilter.OLC_PC))
                {
                    if ((!attachee.HasMet(obj)))
                    {
                        if ((Utilities.is_safe_to_talk(attachee, obj)))
                        {
                            ScriptDaemon.record_time_stamp(516);
                            if (((GetGlobalFlag(104)) || (GetGlobalFlag(105)) || (GetGlobalFlag(107))))
                            {
                                obj.TurnTowards(attachee); // added by Livonya
                                attachee.TurnTowards(obj); // added by Livonya
                                obj.BeginDialog(attachee, 460);
                            }
                            else
                            {
                                obj.TurnTowards(attachee); // added by Livonya
                                attachee.TurnTowards(obj); // added by Livonya
                                obj.BeginDialog(attachee, 1);
                            }
                        }
                    }
                }
            }
            else
            {
                // game.new_sid = 0			## removed by Livonya
                // else: #Kelno is in the Air Altar room - Air is on alert
                foreach (var obj in GameSystems.Party.PartyMembers)
                {
                    // attachee.turn_towards(obj)
                    if ((!attachee.HasMet(obj) && is_safe_to_talk2(attachee, obj, 25) == 1 && obj.type == ObjectType.pc))
                    {
                        ScriptDaemon.record_time_stamp(516);
                        if (((ScriptDaemon.get_v(453) & 4) == 0 && (ScriptDaemon.get_v(453) & 8) == 0 && (ScriptDaemon.get_v(453) & 16) == 0)) // Air Escort Variables
                        {
                            // How the hell did you get here? GTFO! (not escorted by anyone, probably dropped in from ceiling or snuck in)
                            // For now, ordinary dialogue
                            if (((GetGlobalFlag(104)) || (GetGlobalFlag(105)) || (GetGlobalFlag(107))))
                            {
                                obj.TurnTowards(attachee); // added by Livonya
                                attachee.TurnTowards(obj); // added by Livonya
                                obj.BeginDialog(attachee, 460);
                            }
                            else
                            {
                                obj.TurnTowards(attachee); // added by Livonya
                                attachee.TurnTowards(obj); // added by Livonya
                                obj.BeginDialog(attachee, 1);
                            }
                        }
                        else
                        {
                            if (((GetGlobalFlag(104)) || (GetGlobalFlag(105)) || (GetGlobalFlag(107))))
                            {
                                obj.TurnTowards(attachee); // added by Livonya
                                attachee.TurnTowards(obj); // added by Livonya
                                obj.BeginDialog(attachee, 460);
                            }
                            else
                            {
                                obj.TurnTowards(attachee); // added by Livonya
                                attachee.TurnTowards(obj); // added by Livonya
                                obj.BeginDialog(attachee, 1);
                            }
                        }
                    }
                }
            }
        }

        if ((GetGlobalVar(715) == 0 && attachee.GetLeader() == null && !GameSystems.Combat.IsCombatActive()))
        {
            attachee.CastSpell(WellKnownSpells.ProtectionFromElements, attachee);
            attachee.PendingSpellsToMemorized();
        }

        if ((GetGlobalVar(715) == 4 && attachee.GetLeader() == null && !GameSystems.Combat.IsCombatActive()))
        {
            attachee.CastSpell(WellKnownSpells.ShieldOfFaith, attachee);
            attachee.PendingSpellsToMemorized();
        }

        SetGlobalVar(715, GetGlobalVar(715) + 1);
        return(RunDefault);
    }
예제 #29
0
    public override bool OnDying(GameObject attachee, GameObject triggerer)
    {
        if (CombatStandardRoutines.should_modify_CR(attachee))
        {
            CombatStandardRoutines.modify_CR(attachee, CombatStandardRoutines.get_av_level());
        }

        // if game.global_flags[277] == 0:
        // Kalshane's idea for Raimol ratting the party out to the traders and triggering the assassination - put on hold
        // for obj in game.party:
        // if obj.name == 8050:
        // a = game.encounter_queue
        // b = 1
        // for enc_id in a:
        // if enc_id == 3000:
        // b = 0
        // if b == 1:
        // game.encounter_queue.append(3000)
        // game.global_flags[420] = 1
        ScriptDaemon.record_time_stamp(425);
        if ((attachee.GetLeader() != null))
        {
            SetGlobalVar(29, GetGlobalVar(29) + 1);
            SetGlobalFlag(37, true);
            if ((StoryState <= 1))
            {
                StoryState = 2;
            }

            return(RunDefault);
        }

        attachee.FloatLine(12014, triggerer);
        SetGlobalFlag(37, true);
        if ((StoryState <= 1))
        {
            StoryState = 2;
        }

        foreach (var pc in GameSystems.Party.PartyMembers)
        {
            if ((pc.HasReputation(18)))
            {
                pc.RemoveReputation(18);
            }
        }

        attachee.FloatLine(12014, triggerer);
        PartyLeader.AddReputation(15);
        if ((GetGlobalFlag(340)))
        {
            foreach (var obj in ObjList.ListVicinity(attachee.GetLocation(), ObjectListFilter.OLC_PC))
            {
                if ((Utilities.is_safe_to_talk(attachee, obj)))
                {
                    SetGlobalFlag(834, true);
                    obj.BeginDialog(attachee, 370);
                    attachee.FloatLine(12014, triggerer);
                }
            }
        }
        else if ((!GetGlobalFlag(62)))
        {
            foreach (var obj in ObjList.ListVicinity(attachee.GetLocation(), ObjectListFilter.OLC_PC))
            {
                if ((Utilities.is_safe_to_talk(attachee, obj)))
                {
                    SetGlobalFlag(834, true);
                    obj.BeginDialog(attachee, 390);
                    attachee.FloatLine(12014, triggerer);
                }
            }
        }

        return(RunDefault);
    }
예제 #30
0
    public static bool run_off(GameObject attachee, GameObject triggerer)
    {
        ScriptDaemon.record_time_stamp(425);
        foreach (var pc in GameSystems.Party.PartyMembers)
        {
            attachee.AIRemoveFromShitlist(pc);
            attachee.SetReaction(pc, 50);
        }

        attachee.RunOff();
        var obj_list = new List <GameObject>();

        using var firstList = ObjList.ListVicinity(attachee.GetLocation(), ObjectListFilter.OLC_NPC);
        obj_list.AddRange(firstList);
        foreach (var obj in ObjList.ListVicinity(attachee.GetLocation().OffsetTiles(-35, 0), ObjectListFilter.OLC_NPC))
        {
            if (!((obj_list).Contains(obj)))
            {
                obj_list.Add(obj);
            }
        }

        foreach (var obj in ObjList.ListVicinity(attachee.GetLocation().OffsetTiles(35, 0), ObjectListFilter.OLC_NPC))
        {
            if (!((obj_list).Contains(obj)))
            {
                obj_list.Add(obj);
            }
        }

        foreach (var obj in ObjList.ListVicinity(attachee.GetLocation().OffsetTiles(60, 0), ObjectListFilter.OLC_NPC))
        {
            if (!((obj_list).Contains(obj)))
            {
                obj_list.Add(obj);
            }
        }

        foreach (var obj in obj_list)
        {
            if ((14074..14078).Contains(obj.GetNameId()) && obj.GetStat(Stat.hp_current) >= 0 && obj.GetLeader() == null)
            {
                obj.RunOff();
                SetGlobalVar(756, GetGlobalVar(756) + 1);
                StartTimer(1000 + RandomRange(0, 200), () => destroy(obj), true);
            }
        }

        // if game.global_flags[277] == 0:
        // Raimol rats the party out to the traders
        // for obj in game.party:
        // if obj.name == 8050:
        // a = game.encounter_queue
        // b = 1
        // for enc_id in a:
        // if enc_id == 3000:
        // b = 0
        // if b == 1:
        // game.global_flags[420] = 1
        // game.encounter_queue.append(3000)
        return(RunDefault);
    }