示例#1
0
        // Function from file: revenant_abilities.dm
        public override bool cast(dynamic targets = null, dynamic thearea = null, dynamic user = null)
        {
            thearea = thearea ?? Task13.User;

            dynamic                   T           = null;
            Mob_Living                mob         = null;
            Mob_Living                H           = null;
            bool                      blightfound = false;
            Disease_Revblight         blight      = null;
            Obj_Effect_Spacevine      vine        = null;
            Obj_Effect_Glowshroom     shroom      = null;
            Obj_Machinery_Hydroponics tray        = null;


            if (this.attempt_cast(thearea))
            {
                foreach (dynamic _f in Lang13.Enumerate(targets))
                {
                    T = _f;

                    Task13.Schedule(0, (Task13.Closure)(() => {
                        foreach (dynamic _b in Lang13.Enumerate(T.contents, typeof(Mob_Living)))
                        {
                            mob = _b;


                            if (mob == thearea)
                            {
                                continue;
                            }
                            GlobalFuncs.PoolOrNew(typeof(Obj_Effect_Overlay_Temp_Revenant), mob.loc);

                            if (mob is Mob_Living_Carbon)
                            {
                                if (mob is Mob_Living_Carbon_Human)
                                {
                                    H = mob;

                                    if (Lang13.Bool(((dynamic)H).dna) && Lang13.Bool(((dynamic)H).dna.species))
                                    {
                                        ((Species)((dynamic)H).dna.species).handle_mutant_bodyparts(H, "#1d2953");
                                        ((Species)((dynamic)H).dna.species).handle_hair(H, "#1d2953");
                                        ((Species)((dynamic)H).dna.species).update_color(H, "#1d2953");
                                        Task13.Schedule(20, (Task13.Closure)(() => {
                                            if (H != null && Lang13.Bool(((dynamic)H).dna) && Lang13.Bool(((dynamic)H).dna.species))
                                            {
                                                ((Species)((dynamic)H).dna.species).handle_mutant_bodyparts(H);
                                                ((Species)((dynamic)H).dna.species).handle_hair(H);
                                                ((Species)((dynamic)H).dna.species).update_color(H);
                                            }
                                            return;
                                        }));
                                    }
                                    blightfound = false;

                                    foreach (dynamic _a in Lang13.Enumerate(H.viruses, typeof(Disease_Revblight)))
                                    {
                                        blight = _a;

                                        blightfound = true;

                                        if ((blight.stage ?? 0) < 5)
                                        {
                                            blight.stage++;
                                        }
                                    }

                                    if (!blightfound)
                                    {
                                        H.AddDisease(new Disease_Revblight());
                                        H.WriteMsg("<span class='revenminor'>You feel " + Rand13.Pick(new object [] { "suddenly sick", "a surge of nausea", "like your skin is <span class='italics'>wrong</span>" }) + ".</span>");
                                    }
                                }
                                else if (mob.reagents != null)
                                {
                                    mob.reagents.add_reagent("plasma", 5);
                                }
                            }
                            else
                            {
                                mob.adjustToxLoss(5);
                            }
                        }

                        foreach (dynamic _c in Lang13.Enumerate(T.contents, typeof(Obj_Effect_Spacevine)))
                        {
                            vine = _c;

                            vine.color = "#823abb";
                            GlobalFuncs.PoolOrNew(typeof(Obj_Effect_Overlay_Temp_Revenant), vine.loc);
                            Task13.Schedule(20, (Task13.Closure)(() => {
                                if (vine != null)
                                {
                                    GlobalFuncs.qdel(vine);
                                }
                                return;
                            }));
                        }

                        foreach (dynamic _d in Lang13.Enumerate(T.contents, typeof(Obj_Effect_Glowshroom)))
                        {
                            shroom = _d;

                            shroom.color = "#823abb";
                            GlobalFuncs.PoolOrNew(typeof(Obj_Effect_Overlay_Temp_Revenant), shroom.loc);
                            Task13.Schedule(20, (Task13.Closure)(() => {
                                if (shroom != null)
                                {
                                    GlobalFuncs.qdel(shroom);
                                }
                                return;
                            }));
                        }

                        foreach (dynamic _e in Lang13.Enumerate(T.contents, typeof(Obj_Machinery_Hydroponics)))
                        {
                            tray = _e;

                            GlobalFuncs.PoolOrNew(typeof(Obj_Effect_Overlay_Temp_Revenant), tray.loc);
                            tray.pestlevel = Rand13.Int(8, 10);
                            tray.weedlevel = Rand13.Int(8, 10);
                            tray.toxic     = Rand13.Int(45, 55);
                        }
                        return;
                    }));
                }
            }
            return(false);
        }