// Function from file: disposal-unit.dm
        public void expel(Obj_Structure_Disposalholder H = null)
        {
            dynamic     T      = null;
            Tile        target = null;
            Ent_Dynamic AM     = null;

            T = GlobalFuncs.get_turf(this);
            GlobalFuncs.playsound(this, "sound/machines/hiss.ogg", 50, 0, 0);

            if (H != null)
            {
                foreach (dynamic _a in Lang13.Enumerate(H, typeof(Ent_Dynamic)))
                {
                    AM = _a;

                    target = GlobalFuncs.get_offset_target_turf(this.loc, Rand13.Int(5) - Rand13.Int(5), Rand13.Int(5) - Rand13.Int(5));
                    AM.forceMove(T);
                    AM.pipe_eject(0);
                    AM.throw_at_fast(target, 5, 1);
                }
                H.vent_gas(this.loc);
                GlobalFuncs.qdel(H);
            }
            return;
        }
Exemple #2
0
        // Function from file: disposal-structures.dm
        public void expel(Obj_Structure_Disposalholder H = null)
        {
            dynamic     T  = null;
            Ent_Dynamic AM = null;

            T = GlobalFuncs.get_turf(this);
            Icon13.Flick("outlet-open", this);

            if (this.start_eject + 30 < Game13.time)
            {
                this.start_eject = Game13.time;
                GlobalFuncs.playsound(this, "sound/machines/warning-buzzer.ogg", 50, 0, 0);
                Task13.Sleep(20);
                GlobalFuncs.playsound(this, "sound/machines/hiss.ogg", 50, 0, 0);
            }
            else
            {
                Task13.Sleep(20);
            }

            if (H != null)
            {
                foreach (dynamic _a in Lang13.Enumerate(H, typeof(Ent_Dynamic)))
                {
                    AM = _a;

                    AM.forceMove(T);
                    AM.pipe_eject(this.dir);
                    AM.throw_at_fast(this.target, this.eject_range, 1);
                }
                H.vent_gas(T);
                GlobalFuncs.qdel(H);
            }
            return;
        }
Exemple #3
0
        // Function from file: mass_driver.dm
        public void drive(dynamic amount = null)
        {
            int         O_limit = 0;
            dynamic     target  = null;
            Ent_Dynamic O       = null;


            if ((this.stat & 3) != 0)
            {
                return;
            }
            this.f_use_power(500);
            target = GlobalFuncs.get_edge_target_turf(this, this.dir);

            foreach (dynamic _a in Lang13.Enumerate(this.loc, typeof(Ent_Dynamic)))
            {
                O = _a;


                if (!Lang13.Bool(O.anchored) || O is Obj_Mecha)
                {
                    O_limit++;

                    if (O_limit >= 20)
                    {
                        this.audible_message("<span class='notice'>" + this + " lets out a screech, it doesn't seem to be able to handle the load.</span>");
                        break;
                    }
                    this.f_use_power(500);
                    O.throw_at_fast(target, this.drive_range * (this.power ?? 0), this.power);
                }
            }
            Icon13.Flick("mass_driver1", this);
            return;
        }
Exemple #4
0
        // Function from file: recipes.dm
        public void goonchem_vortex(dynamic T = null, bool setting_type = false, int range = 0)
        {
            Ent_Dynamic X            = null;
            int         distance     = 0;
            double?     moving_power = null;
            dynamic     throw_target = null;
            double?     i            = null;
            double?     i2           = null;


            foreach (dynamic _a in Lang13.Enumerate(Map13.FetchInRangeExcludeThis(T, range), typeof(Ent_Dynamic)))
            {
                X = _a;


                if (X is Obj_Effect)
                {
                    continue;
                }

                if (!Lang13.Bool(X.anchored))
                {
                    distance     = Map13.GetDistance(X, T);
                    moving_power = Num13.MaxInt(range - distance, 1);

                    if ((moving_power ?? 0) > 2)
                    {
                        if (setting_type)
                        {
                            throw_target = GlobalFuncs.get_edge_target_turf(X, Map13.GetDistance(X, Map13.GetStepAway(X, T, null)));
                            X.throw_at_fast(throw_target, moving_power, 1);
                        }
                        else
                        {
                            X.throw_at_fast(T, moving_power, 1);
                        }
                    }
                    else
                    {
                        Task13.Schedule(0, (Task13.Closure)(() => {
                            if (setting_type)
                            {
                                i = null;
                                i = 0;

                                while ((i ?? 0) < (moving_power ?? 0))
                                {
                                    Task13.Sleep(2);
                                    Map13.StepAway(X, T, null);

                                    if (!false)
                                    {
                                        break;
                                    }
                                    i++;
                                }
                            }
                            else
                            {
                                i2 = null;
                                i2 = 0;

                                while ((i2 ?? 0) < (moving_power ?? 0))
                                {
                                    Task13.Sleep(2);
                                    Map13.StepTowardsSimple(X, T);

                                    if (!false)
                                    {
                                        break;
                                    }
                                    i2++;
                                }
                            }
                            return;
                        }));
                    }
                }
            }
            return;
        }
        // Function from file: experimentor.dm
        public void experiment(double?exp = null, dynamic exp_on = null)
        {
            dynamic    chosenchem       = null;
            dynamic    criticalReaction = null;
            Mob_Living m        = null;
            dynamic    target   = null;
            dynamic    throwing = null;
            dynamic    T        = null;
            Obj_Effect_Decal_Cleanable_Greenglow reagentdecal = null;
            string   savedName = null;
            dynamic  newPath   = null;
            dynamic  CG        = null;
            Reagents R         = null;
            EffectSystem_SmokeSpread_Chem smoke = null;
            Reagents R2 = null;
            EffectSystem_SmokeSpread_Chem smoke2 = null;
            Obj_Item_Weapon_ReagentContainers_Food_Drinks_Coffee C = null;
            dynamic start = null;
            dynamic M     = null;
            dynamic MT    = null;
            Obj_Item_Projectile_Magic_Fireball FB = null;
            GasMixture env                  = null;
            double     transfer_moles       = 0;
            GasMixture removed              = null;
            double?    heat_capacity        = null;
            Mob_Living m2                   = null;
            Obj_Machinery_Vending_Coffee C2 = null;
            Reagents R3 = null;
            EffectSystem_SmokeSpread_Chem smoke3 = null;
            GasMixture env2                 = null;
            double     transfer_moles2      = 0;
            GasMixture removed2             = null;
            double?    heat_capacity2       = null;
            EffectSystem_SmokeSpread smoke4 = null;
            dynamic     material            = null;
            Ent_Dynamic AM         = null;
            ByTable     throwAt    = null;
            Ent_Dynamic AM2        = null;
            int?        counter    = null;
            Ent_Dynamic cast       = null;
            dynamic     a          = null;
            dynamic     b          = null;
            dynamic     R4         = null;
            int         globalMalf = 0;
            Mob_Living  m3         = null;
            ByTable     reqs       = null;
            dynamic     T2         = null;

            this.recentlyExperimented = true;
            this.icon_state           = "h_lathe_wloop";
            criticalReaction          = Lang13.FindIn(exp_on, (this.critical_items != null ? GlobalVars.TRUE : GlobalVars.FALSE));

            if (exp == 1)
            {
                this.visible_message("" + this + " prods at " + exp_on + " with mechanical arms.");

                if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction))
                {
                    this.visible_message("" + exp_on + " is gripped in just the right way, enhancing its focus.");
                    this.badThingCoeff++;
                }

                if (Rand13.PercentChance(((int)(20 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='danger'>" + this + " malfunctions and destroys " + exp_on + ", lashing its arms out at nearby people!</span>");

                    foreach (dynamic _a in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 1), typeof(Mob_Living)))
                    {
                        m = _a;

                        m.apply_damage(15, "brute", Rand13.Pick(new object [] { "head", "chest", "groin" }));
                        this.investigate_log("Experimentor dealt minor brute to " + m + ".", "experimentor");
                    }
                    this.ejectItem(GlobalVars.TRUE);
                }

                if (Rand13.PercentChance(((int)(35 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='warning'>" + this + " malfunctions!</span>");
                    exp = 6;
                }

                if (Rand13.PercentChance(((int)(50 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='danger'>" + this + " malfunctions, throwing the " + exp_on + "!</span>");
                    target = Lang13.FindIn(typeof(Mob_Living), Map13.FetchInViewExcludeThis(this, 7));

                    if (Lang13.Bool(target))
                    {
                        throwing = this.loaded_item;
                        this.investigate_log("Experimentor has thrown " + this.loaded_item + " at " + target, "experimentor");
                        this.ejectItem();

                        if (Lang13.Bool(throwing))
                        {
                            ((Ent_Dynamic)throwing).throw_at(target, 10, 1);
                        }
                    }
                }
            }

            if (exp == 2)
            {
                this.visible_message("<span class='danger'>" + this + " reflects radioactive rays at " + exp_on + "!</span>");

                if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction))
                {
                    this.visible_message("" + exp_on + " has activated an unknown subroutine!");
                    this.cloneMode  = GlobalVars.TRUE;
                    this.cloneCount = this.badThingCoeff;
                    this.investigate_log("Experimentor has made a clone of " + exp_on, "experimentor");
                    this.ejectItem();
                }

                if (Rand13.PercentChance(((int)(20 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='danger'>" + this + " malfunctions, melting " + exp_on + " and leaking radiation!</span>");
                    GlobalFuncs.radiation_pulse(GlobalFuncs.get_turf(this), 1, 1, 25, true);
                    this.ejectItem(GlobalVars.TRUE);
                }

                if (Rand13.PercentChance(((int)(35 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='warning'>" + this + " malfunctions, spewing toxic waste!</span>");

                    foreach (dynamic _b in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 1)))
                    {
                        T = _b;


                        if (!T.density)
                        {
                            if (Rand13.PercentChance(95))
                            {
                                reagentdecal = new Obj_Effect_Decal_Cleanable_Greenglow(T);
                                reagentdecal.reagents.add_reagent("radium", 7);
                            }
                        }
                    }
                }

                if (Rand13.PercentChance(((int)(50 - this.badThingCoeff))))
                {
                    savedName = "" + exp_on;
                    this.ejectItem(GlobalVars.TRUE);
                    newPath          = this.pickWeighted(this.valid_items);
                    this.loaded_item = Lang13.Call(newPath, this);
                    this.visible_message("<span class='warning'>" + this + " malfunctions, transforming " + savedName + " into " + this.loaded_item + "!</span>");
                    this.investigate_log("Experimentor has transformed " + savedName + " into " + this.loaded_item, "experimentor");

                    if (this.loaded_item is Obj_Item_Weapon_Grenade_ChemGrenade)
                    {
                        CG = this.loaded_item;
                        ((Obj_Item_Weapon_Grenade)CG).prime();
                    }
                    this.ejectItem();
                }
            }

            if (exp == 3)
            {
                this.visible_message("<span class='warning'>" + this + " fills its chamber with gas, " + exp_on + " included.</span>");

                if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction))
                {
                    this.visible_message("" + exp_on + " achieves the perfect mix!");
                    new Obj_Item_Stack_Sheet_Mineral_Plasma(GlobalFuncs.get_turf(Rand13.PickFromTable(Map13.FetchInViewExcludeThis(this, 1))));
                }

                if (Rand13.PercentChance(((int)(20 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='danger'>" + this + " destroys " + exp_on + ", leaking dangerous gas!</span>");
                    chosenchem = Rand13.Pick(new object [] { "carbon", "radium", "toxin", "condensedcapsaicin", "mushroomhallucinogen", "space_drugs", "ethanol", "beepskysmash" });
                    R          = new Reagents(50);
                    R.my_atom  = this;
                    R.add_reagent(chosenchem, 50);
                    this.investigate_log("Experimentor has released " + chosenchem + " smoke.", "experimentor");
                    smoke = new EffectSystem_SmokeSpread_Chem();
                    smoke.set_up(R, 0, this);
                    GlobalFuncs.playsound(this.loc, "sound/effects/smoke.ogg", 50, 1, -3);
                    smoke.start();
                    GlobalFuncs.qdel(R);
                    this.ejectItem(GlobalVars.TRUE);
                }

                if (Rand13.PercentChance(((int)(20 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='danger'>" + this + "'s chemical chamber has sprung a leak!</span>");
                    chosenchem = Rand13.Pick(new object [] { "mutationtoxin", "nanomachines", "sacid" });
                    R2         = new Reagents(50);
                    R2.my_atom = this;
                    R2.add_reagent(chosenchem, 50);
                    smoke2 = new EffectSystem_SmokeSpread_Chem();
                    smoke2.set_up(R2, 0, this);
                    GlobalFuncs.playsound(this.loc, "sound/effects/smoke.ogg", 50, 1, -3);
                    smoke2.start();
                    GlobalFuncs.qdel(R2);
                    this.ejectItem(GlobalVars.TRUE);
                    this.warn_admins(Task13.User, "" + chosenchem + " smoke");
                    this.investigate_log("Experimentor has released <font color='red'>" + chosenchem + "</font> smoke!", "experimentor");
                }

                if (Rand13.PercentChance(((int)(35 - this.badThingCoeff))))
                {
                    this.visible_message("" + this + " malfunctions, spewing harmless gas.");
                    this.throwSmoke(this.loc);
                }

                if (Rand13.PercentChance(((int)(50 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='warning'>" + this + " melts " + exp_on + ", ionizing the air around it!</span>");
                    GlobalFuncs.empulse(this.loc, 4, 6);
                    this.investigate_log("Experimentor has generated an Electromagnetic Pulse.", "experimentor");
                    this.ejectItem(GlobalVars.TRUE);
                }
            }

            if (exp == 4)
            {
                this.visible_message("" + this + " raises " + exp_on + "'s temperature.");

                if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction))
                {
                    this.visible_message("<span class='warning'>" + this + "'s emergency coolant system gives off a small ding!</span>");
                    GlobalFuncs.playsound(this.loc, "sound/machines/ding.ogg", 50, 1);
                    C          = new Obj_Item_Weapon_ReagentContainers_Food_Drinks_Coffee(GlobalFuncs.get_turf(Rand13.PickFromTable(Map13.FetchInViewExcludeThis(this, 1))));
                    chosenchem = Rand13.Pick(new object [] { "plasma", "capsaicin", "ethanol" });
                    C.reagents.remove_any(25);
                    C.reagents.add_reagent(chosenchem, 50);
                    C.name = "Cup of Suspicious Liquid";
                    C.desc = "It has a large hazard symbol printed on the side in fading ink.";
                    this.investigate_log("Experimentor has made a cup of " + chosenchem + " coffee.", "experimentor");
                }

                if (Rand13.PercentChance(((int)(20 - this.badThingCoeff))))
                {
                    start = GlobalFuncs.get_turf(this);
                    M     = Lang13.FindIn(typeof(Mob_Living), Map13.FetchInView(3, this));
                    MT    = GlobalFuncs.get_turf(M);

                    if (Lang13.Bool(MT))
                    {
                        this.visible_message("<span class='danger'>" + this + " dangerously overheats, launching a flaming fuel orb!</span>");
                        this.investigate_log("Experimentor has launched a <font color='red'>fireball</font> at " + M + "!", "experimentor");
                        FB          = new Obj_Item_Projectile_Magic_Fireball(start);
                        FB.original = MT;
                        FB.current  = start;
                        FB.yo       = Convert.ToDouble(MT.y - start.y);
                        FB.xo       = Convert.ToDouble(MT.x - start.x);
                        FB.fire();
                    }
                }

                if (Rand13.PercentChance(((int)(35 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='danger'>" + this + " malfunctions, melting " + exp_on + " and releasing a burst of flame!</span>");
                    GlobalFuncs.explosion(this.loc, -1, 0, 0, 0, 0, null, 2);
                    this.investigate_log("Experimentor started a fire.", "experimentor");
                    this.ejectItem(GlobalVars.TRUE);
                }

                if (Rand13.PercentChance(((int)(50 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='warning'>" + this + " malfunctions, melting " + exp_on + " and leaking hot air!</span>");
                    env            = this.loc.return_air();
                    transfer_moles = env.total_moles() * 0.25;
                    removed        = env.remove(transfer_moles);

                    if (removed != null)
                    {
                        heat_capacity = removed.heat_capacity();

                        if (heat_capacity == 0 || heat_capacity == null)
                        {
                            heat_capacity = 1;
                        }
                        removed.temperature = Num13.MinInt(Convert.ToInt32((removed.temperature * heat_capacity + 100000) / heat_capacity), 1000);
                    }
                    env.merge(removed);
                    this.air_update_turf();
                    this.investigate_log("Experimentor has released hot air.", "experimentor");
                    this.ejectItem(GlobalVars.TRUE);
                }

                if (Rand13.PercentChance(((int)(50 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='warning'>" + this + " malfunctions, activating its emergency coolant systems!</span>");
                    this.throwSmoke(this.loc);

                    foreach (dynamic _c in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 1), typeof(Mob_Living)))
                    {
                        m2 = _c;

                        m2.apply_damage(5, "burn", Rand13.Pick(new object [] { "head", "chest", "groin" }));
                        this.investigate_log("Experimentor has dealt minor burn damage to " + m2, "experimentor");
                    }
                    this.ejectItem();
                }
            }

            if (exp == 5)
            {
                this.visible_message("" + this + " lowers " + exp_on + "'s temperature.");

                if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction))
                {
                    this.visible_message("<span class='warning'>" + this + "'s emergency coolant system gives off a small ding!</span>");
                    C2 = new Obj_Machinery_Vending_Coffee(GlobalFuncs.get_turf(Rand13.PickFromTable(Map13.FetchInViewExcludeThis(this, 1))));
                    GlobalFuncs.playsound(this.loc, "sound/machines/ding.ogg", 50, 1);
                    chosenchem = Rand13.Pick(new object [] { "uranium", "frostoil", "ephedrine" });
                    C2.reagents.remove_any(25);
                    C2.reagents.add_reagent(chosenchem, 50);
                    C2.name = "Cup of Suspicious Liquid";
                    C2.desc = "It has a large hazard symbol printed on the side in fading ink.";
                    this.investigate_log("Experimentor has made a cup of " + chosenchem + " coffee.", "experimentor");
                }

                if (Rand13.PercentChance(((int)(20 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='danger'>" + this + " malfunctions, shattering " + exp_on + " and releasing a dangerous cloud of coolant!</span>");
                    R3         = new Reagents(50);
                    R3.my_atom = this;
                    R3.add_reagent("frostoil", 50);
                    this.investigate_log("Experimentor has released frostoil gas.", "experimentor");
                    smoke3 = new EffectSystem_SmokeSpread_Chem();
                    smoke3.set_up(R3, 0, this);
                    GlobalFuncs.playsound(this.loc, "sound/effects/smoke.ogg", 50, 1, -3);
                    smoke3.start();
                    GlobalFuncs.qdel(R3);
                    this.ejectItem(GlobalVars.TRUE);
                }

                if (Rand13.PercentChance(((int)(35 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='warning'>" + this + " malfunctions, shattering " + exp_on + " and leaking cold air!</span>");
                    env2            = this.loc.return_air();
                    transfer_moles2 = env2.total_moles() * 0.25;
                    removed2        = env2.remove(transfer_moles2);

                    if (removed2 != null)
                    {
                        heat_capacity2 = removed2.heat_capacity();

                        if (heat_capacity2 == 0 || heat_capacity2 == null)
                        {
                            heat_capacity2 = 1;
                        }
                        removed2.temperature = (removed2.temperature * heat_capacity2 - 75000) / heat_capacity2;
                    }
                    env2.merge(removed2);
                    this.air_update_turf();
                    this.investigate_log("Experimentor has released cold air.", "experimentor");
                    this.ejectItem(GlobalVars.TRUE);
                }

                if (Rand13.PercentChance(((int)(50 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='warning'>" + this + " malfunctions, releasing a flurry of chilly air as " + exp_on + " pops out!</span>");
                    smoke4 = new EffectSystem_SmokeSpread();
                    smoke4.set_up(0, this.loc);
                    smoke4.start();
                    this.ejectItem();
                }
            }

            if (exp == 6)
            {
                this.visible_message("<span class='warning'>" + exp_on + " activates the crushing mechanism, " + exp_on + " is destroyed!</span>");

                if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction))
                {
                    this.visible_message("<span class='warning'>" + this + "'s crushing mechanism slowly and smoothly descends, flattening the " + exp_on + "!</span>");
                    new Obj_Item_Stack_Sheet_Plasteel(GlobalFuncs.get_turf(Rand13.PickFromTable(Map13.FetchInViewExcludeThis(this, 1))));
                }

                if (this.linked_console.linked_lathe != null)
                {
                    foreach (dynamic _d in Lang13.Enumerate(exp_on.materials))
                    {
                        material = _d;

                        ((MaterialContainer)((dynamic)this.linked_console.linked_lathe).materials).insert_amount(Num13.MinInt(Convert.ToInt32(((dynamic)this.linked_console.linked_lathe).materials.max_amount - ((dynamic)this.linked_console.linked_lathe).materials.total_amount), Convert.ToInt32(exp_on.materials[material])), material);
                    }
                }

                if (Rand13.PercentChance(((int)(20 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='danger'>" + this + "'s crusher goes way too many levels too high, crushing right through space-time!</span>");
                    GlobalFuncs.playsound(this.loc, "sound/effects/supermatter.ogg", 50, 1, -3);
                    this.investigate_log("Experimentor has triggered the 'throw things' reaction.", "experimentor");

                    foreach (dynamic _e in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 7), typeof(Ent_Dynamic)))
                    {
                        AM = _e;


                        if (!Lang13.Bool(AM.anchored))
                        {
                            AM.throw_at_fast(this, 10, 1);
                        }
                    }
                }

                if (Rand13.PercentChance(((int)(35 - this.badThingCoeff))))
                {
                    this.visible_message("<span class='danger'>" + this + "'s crusher goes one level too high, crushing right into space-time!</span>");
                    GlobalFuncs.playsound(this.loc, "sound/effects/supermatter.ogg", 50, 1, -3);
                    this.investigate_log("Experimentor has triggered the 'minor throw things' reaction.", "experimentor");
                    throwAt = new ByTable();

                    foreach (dynamic _f in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 7), typeof(Ent_Dynamic)))
                    {
                        AM2 = _f;


                        if (!Lang13.Bool(AM2.anchored))
                        {
                            throwAt.Add(AM2);
                        }
                    }
                    counter = null;
                    counter = 1;

                    while ((counter ?? 0) < throwAt.len)
                    {
                        cast = throwAt[counter];
                        cast.throw_at_fast(Rand13.PickFromTable(throwAt), 10, 1);
                        counter++;
                    }
                }
                this.ejectItem(GlobalVars.TRUE);
            }

            if (exp == 8)
            {
                a = Rand13.Pick(new object [] { "rumbles", "shakes", "vibrates", "shudders" });
                b = Rand13.Pick(new object [] { "crushes", "spins", "viscerates", "smashes", "insults" });
                this.visible_message("<span class='warning'>" + exp_on + " " + a + ", and " + b + ", the experiment was a failure.</span>");
            }

            if (exp == 7)
            {
                this.visible_message("" + this + " scans the " + exp_on + ", revealing its true nature!");
                GlobalFuncs.playsound(this.loc, "sound/effects/supermatter.ogg", 50, 3, -1);
                R4 = this.loaded_item;
                R4.reveal();
                this.investigate_log("Experimentor has revealed a relic with <span class='danger'>" + R4.realProc + "</span> effect.", "experimentor");
                this.ejectItem();
            }

            if (Rand13.PercentChance(((int)(20 - this.badThingCoeff))))
            {
                globalMalf = Rand13.Int(1, 100);

                if (globalMalf < 15)
                {
                    this.visible_message("<span class='warning'>" + this + "'s onboard detection system has malfunctioned!</span>");
                    this.item_reactions["" + exp_on.type] = Rand13.Pick(new object [] { 1, 2, 3, 4, 5, 6 });
                    this.ejectItem();
                }

                if (globalMalf > 16 && globalMalf < 35)
                {
                    this.visible_message("<span class='warning'>" + this + " melts " + exp_on + ", ian-izing the air around it!</span>");
                    this.throwSmoke(this.loc);

                    if (Lang13.Bool(this.trackedIan))
                    {
                        this.throwSmoke(this.trackedIan.loc);
                        this.trackedIan.loc = this.loc;
                        this.investigate_log("Experimentor has stolen Ian!", "experimentor");
                    }
                    else
                    {
                        new Mob_Living_SimpleAnimal_Pet_Dog_Corgi(this.loc);
                        this.investigate_log("Experimentor has spawned a new corgi.", "experimentor");
                    }
                    this.ejectItem(GlobalVars.TRUE);
                }

                if (globalMalf > 36 && globalMalf < 50)
                {
                    this.visible_message("<span class='warning'>" + this + " improves " + exp_on + ", drawing the life essence of those nearby!</span>");

                    foreach (dynamic _g in Lang13.Enumerate(Map13.FetchInView(this, 4), typeof(Mob_Living)))
                    {
                        m3 = _g;

                        m3.WriteMsg("<span class='danger'>You feel your flesh being torn from you, mists of blood drifting to " + this + "!</span>");
                        m3.apply_damage(50, "brute", "chest");
                        this.investigate_log("Experimentor has taken 50 brute a blood sacrifice from " + m3, "experimentor");
                    }
                    reqs = this.ConvertReqString2List(exp_on.origin_tech);

                    foreach (dynamic _h in Lang13.Enumerate(reqs))
                    {
                        T2 = _h;

                        reqs[T2] = reqs[T2] + 1;
                    }
                    exp_on.origin_tech = String13.MakeUrlParams(reqs);
                    this.investigate_log("Experimentor has set the origin tech of " + exp_on + " to " + exp_on.origin_tech, "experimentor");
                }

                if (globalMalf > 51 && globalMalf < 75)
                {
                    this.visible_message("<span class='warning'>" + this + " encounters a run-time error!</span>");
                    this.throwSmoke(this.loc);

                    if (Lang13.Bool(this.trackedRuntime))
                    {
                        this.throwSmoke(this.trackedRuntime.loc);
                        this.trackedRuntime.loc = this.loc;
                        this.investigate_log("Experimentor has stolen Runtime!", "experimentor");
                    }
                    else
                    {
                        new Mob_Living_SimpleAnimal_Pet_Cat(this.loc);
                        this.investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", "experimentor");
                    }
                    this.ejectItem(GlobalVars.TRUE);
                }

                if (globalMalf > 76)
                {
                    this.visible_message("<span class='warning'>" + this + " begins to smoke and hiss, shaking violently!</span>");
                    this.f_use_power(500000);
                    this.investigate_log("Experimentor has drained power from its APC", "experimentor");
                }
            }
            Task13.Schedule(((int)(this.resetTime)), (Task13.Closure)(() => {
                this.icon_state           = "h_lathe";
                this.recentlyExperimented = false;
                return;
            }));
            return;
        }
Exemple #6
0
        // Function from file: wizard.dm
        public override bool cast(dynamic targets = null, dynamic thearea = null, dynamic user = null)
        {
            thearea = thearea ?? Task13.User;

            ByTable            thrownatoms    = null;
            dynamic            throwtarget    = null;
            int                distfromcaster = 0;
            dynamic            T            = null;
            Ent_Dynamic        AM           = null;
            Ent_Dynamic        AM2          = null;
            Obj_Effect_Overlay targeteffect = null;
            Ent_Dynamic        M            = null;
            Ent_Dynamic        M2           = null;

            thrownatoms = new ByTable();
            this.playMagSound();

            foreach (dynamic _b in Lang13.Enumerate(targets))
            {
                T = _b;


                foreach (dynamic _a in Lang13.Enumerate(T, typeof(Ent_Dynamic)))
                {
                    AM = _a;

                    thrownatoms.Add(AM);
                }
            }

            foreach (dynamic _c in Lang13.Enumerate(thrownatoms, typeof(Ent_Dynamic)))
            {
                AM2 = _c;


                if (AM2 == thearea || Lang13.Bool(AM2.anchored))
                {
                    continue;
                }
                targeteffect = new Obj_Effect_Overlay()
                {
                    icon          = "icons/effects/effects.dmi",
                    icon_state    = "shieldsparkles",
                    mouse_opacity = 0,
                    density       = false
                };
                targeteffect.icon_state = this.animation;
                AM2.overlays.Add(targeteffect);
                throwtarget    = GlobalFuncs.get_edge_target_turf(thearea, Map13.GetDistance(thearea, Map13.GetStepAway(AM2, thearea, null)));
                distfromcaster = Map13.GetDistance(thearea, AM2);
                Task13.Schedule(10, (Task13.Closure)(() => {
                    AM2.overlays.Remove(targeteffect);
                    GlobalFuncs.qdel(targeteffect);
                    return;
                }));

                if (distfromcaster == 0)
                {
                    if (AM2 is Mob_Living)
                    {
                        M = AM2;
                        ((dynamic)M).Weaken(5);
                        ((dynamic)M).adjustBruteLoss(5);
                        ((dynamic)M).WriteMsg("<span class='userdanger'>You're slammed into the floor by " + thearea + "!</span>");
                    }
                }
                else
                {
                    if (AM2 is Mob_Living)
                    {
                        M2 = AM2;
                        ((dynamic)M2).Weaken(2);
                        ((dynamic)M2).WriteMsg("<span class='userdanger'>You're thrown back by " + thearea + "!</span>");
                    }
                    AM2.throw_at_fast(throwtarget, Num13.MaxInt(3, Num13.MinInt(this.maxthrow - Num13.MaxInt(0, Num13.MinInt(distfromcaster - 2, distfromcaster)), this.maxthrow)), 1, thearea);
                }
            }
            return(false);
        }
        // Function from file: disposal-structures.dm
        public void expel(dynamic H = null, dynamic T = null, int?direction = null)
        {
            dynamic     target = null;
            dynamic     myturf = null;
            Ent_Dynamic AM     = null;
            Ent_Dynamic AM2    = null;


            if (T is Tile_Simulated_Floor)
            {
                myturf = T;

                if (Lang13.Bool(myturf.builtin_tile))
                {
                    myturf.builtin_tile.loc = T;
                    myturf.builtin_tile     = null;
                }
                ((Tile_Simulated_Floor)myturf).make_plating();
            }

            if (Lang13.Bool(direction))
            {
                if (T is Tile_Space)
                {
                    target = GlobalFuncs.get_edge_target_turf(T, direction);
                }
                else
                {
                    target = GlobalFuncs.get_ranged_target_turf(T, direction, 10);
                }
                GlobalFuncs.playsound(this, "sound/machines/hiss.ogg", 50, 0, 0);

                if (Lang13.Bool(H))
                {
                    foreach (dynamic _a in Lang13.Enumerate(H, typeof(Ent_Dynamic)))
                    {
                        AM = _a;

                        AM.forceMove(this.loc);
                        AM.pipe_eject(direction);
                        AM.throw_at_fast(target, 10, 1);
                    }
                }
            }
            else
            {
                GlobalFuncs.playsound(this, "sound/machines/hiss.ogg", 50, 0, 0);

                if (Lang13.Bool(H))
                {
                    foreach (dynamic _b in Lang13.Enumerate(H, typeof(Ent_Dynamic)))
                    {
                        AM2 = _b;

                        target = GlobalFuncs.get_offset_target_turf(T, Rand13.Int(5) - Rand13.Int(5), Rand13.Int(5) - Rand13.Int(5));
                        AM2.forceMove(this.loc);
                        AM2.pipe_eject(0);
                        AM2.throw_at_fast(target, 5, 1);
                    }
                }
            }
            ((Obj_Structure_Disposalholder)H).vent_gas(T);
            GlobalFuncs.qdel(H);
            return;
        }
Exemple #8
0
        // Function from file: blob_reagents.dm
        public void reagent_vortex(dynamic M = null, int setting_type = 0, double?reac_volume = null)
        {
            dynamic     pull         = null;
            int         range_power  = 0;
            Ent_Dynamic X            = null;
            Ent_Dynamic L            = null;
            double?     distance     = null;
            int         moving_power = 0;
            dynamic     throw_target = null;
            double?     throw_range  = null;
            double      i            = 0;
            double      i2           = 0;


            if (Lang13.Bool(M))
            {
                pull        = GlobalFuncs.get_turf(M);
                range_power = Num13.MaxInt(1, Num13.MinInt(((int)(Num13.Round((reac_volume ?? 0) / 5, 1))), 5));

                foreach (dynamic _c in Lang13.Enumerate(Map13.FetchInRange(pull, range_power), typeof(Ent_Dynamic)))
                {
                    X = _c;


                    if (X is Obj_Effect)
                    {
                        continue;
                    }

                    if (X is Mob_Living)
                    {
                        L = X;

                        if (Lang13.Bool(((dynamic)L).faction.Contains("blob")))
                        {
                            continue;
                        }
                    }

                    if (!Lang13.Bool(X.anchored))
                    {
                        distance     = Map13.GetDistance(X, pull);
                        moving_power = Num13.MaxInt(((int)(range_power - (distance ?? 0))), 1);

                        if (moving_power > 2)
                        {
                            if (setting_type != 0)
                            {
                                throw_target = GlobalFuncs.get_edge_target_turf(X, Map13.GetDistance(X, Map13.GetStepAway(X, pull, null)));
                                throw_range  = 5 - (distance ?? 0);
                                X.throw_at_fast(throw_target, throw_range, 1);
                            }
                            else
                            {
                                X.throw_at_fast(pull, distance, 1);
                            }
                        }
                        else
                        {
                            Task13.Schedule(0, (Task13.Closure)(() => {
                                if (setting_type != 0)
                                {
                                    foreach (dynamic _a in Lang13.IterateRange(0, moving_power - 1))
                                    {
                                        i = _a;

                                        Task13.Sleep(2);
                                        Map13.StepAway(X, pull, null);

                                        if (!false)
                                        {
                                            break;
                                        }
                                    }
                                }
                                else
                                {
                                    foreach (dynamic _b in Lang13.IterateRange(0, moving_power - 1))
                                    {
                                        i2 = _b;

                                        Task13.Sleep(2);
                                        Map13.StepTowardsSimple(X, pull);

                                        if (!false)
                                        {
                                            break;
                                        }
                                    }
                                }
                                return;
                            }));
                        }
                    }
                }
            }
            return;
        }