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

            dynamic           target = null;
            Mob               victim = null;
            dynamic           caster = null;
            dynamic           V      = null;
            dynamic           V2     = null;
            Mob_Dead_Observer ghost  = null;
            dynamic           V3     = null;
            dynamic           V4     = null;


            if (!(targets.len != 0))
            {
                thearea.WriteMsg("<span class='warning'>No mind found!</span>");
                return(false);
            }

            if (targets.len > 1)
            {
                thearea.WriteMsg("<span class='warning'>Too many minds! You're not a hive damnit!</span>");
                return(false);
            }
            target = targets[1];

            if (!Map13.FetchInViewExcludeThis(null, this.range).Contains(target) && !Lang13.Bool(user))
            {
                thearea.WriteMsg("<span class='warning'>They are too far away!</span>");
                return(false);
            }

            if (Convert.ToInt32(target.stat) == 2)
            {
                thearea.WriteMsg("<span class='warning'>You don't particularly want to be dead!</span>");
                return(false);
            }

            if (!Lang13.Bool(target.key) || !Lang13.Bool(target.mind))
            {
                thearea.WriteMsg("<span class='warning'>They appear to be catatonic! Not even magic can affect their vacant mind.</span>");
                return(false);
            }

            if (Lang13.Bool(thearea.suiciding))
            {
                thearea.WriteMsg("<span class='warning'>You're killing yourself! You can't concentrate enough to do this!</span>");
                return(false);
            }

            if (this.protected_roles.Contains(target.mind.special_role) || String13.CompareIgnoreCase("@", String13.SubStr(target.key, 1, 2)))
            {
                thearea.WriteMsg("<span class='warning'>Their mind is resisting your spell!</span>");
                return(false);
            }
            victim = target;
            caster = thearea;

            if (caster.mind.special_verbs.len != 0)
            {
                foreach (dynamic _a in Lang13.Enumerate(caster.mind.special_verbs))
                {
                    V = _a;

                    caster.verbs -= V;
                }
            }

            if (victim.mind.special_verbs.len != 0)
            {
                foreach (dynamic _b in Lang13.Enumerate(victim.mind.special_verbs))
                {
                    V2 = _b;

                    victim.verbs.Remove(V2);
                }
            }
            ghost = victim.ghostize(false);
            ((Mind)caster.mind).transfer_to(victim);

            if (victim.mind.special_verbs.len != 0)
            {
                foreach (dynamic _c in Lang13.Enumerate(caster.mind.special_verbs))
                {
                    V3 = _c;

                    caster.verbs += V3;
                }
            }
            ghost.mind.transfer_to(caster);

            if (Lang13.Bool(ghost.key))
            {
                caster.key = ghost.key;
            }
            GlobalFuncs.qdel(ghost);

            if (caster.mind.special_verbs.len != 0)
            {
                foreach (dynamic _d in Lang13.Enumerate(caster.mind.special_verbs))
                {
                    V4 = _d;

                    caster.verbs += V4;
                }
            }
            ((Mob)caster).Paralyse(this.paralysis_amount_caster);
            victim.Paralyse(this.paralysis_amount_victim);
            caster.WriteMsg(new Sound("sound/magic/MandSwap.ogg"));
            victim.WriteMsg(new Sound("sound/magic/MandSwap.ogg"));
            return(false);
        }