示例#1
0
        public virtual bool canCast(NubiaPlayer from, bool checkCondition)
        {
            //Console.WriteLine("CanCast de SortNubia: "+Nom);
            if (Owner == null)
            {
                return(false);
            }

            if (!CheckCondition() && checkCondition)
            {
                Owner.PrivateOverheadMessage(MessageType.Emote, 2117, true, "Toute les conditions ne sont pas rempli pour ce sort", Owner.NetState);
                return(false);
            }
            //TODO: Compétences de magie
            if (/*from.getValueFor( categorie ) < miniCategorie
                || from.getValueFor( competence ) < miniCompetence
                || from.Skills[skill].Base < miniSkill
                ||*/from.ManaMax < chakra)
            {
                Owner.PrivateOverheadMessage(MessageType.System, 0, true, "Il vous manque de la puissance ou des connaissances pour ce sort", Owner.NetState);
                return(false);
            }

            if (from.Mana < chakra)
            {
                Owner.PrivateOverheadMessage(MessageType.System, 0, true, "Vous manquez de Chakra", Owner.NetState);
                m_disturb = MagieDisturb.Mana;
                return(false);
            }

            return(true);
        }
示例#2
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();

            m_owner      = (NubiaPlayer)reader.ReadMobile();
            m_createur   = reader.ReadString();
            m_name       = reader.ReadString();
            m_time       = reader.ReadDouble();
            m_timeToCast = reader.ReadDouble();

            m_maitrise = reader.ReadDouble();
            m_distance = reader.ReadInt();
            m_energie  = (SortEnergie)reader.ReadInt();
            //	m_skill = (SkillName)reader.ReadInt();
            m_emote = reader.ReadString();

            m_couleur = (MagieColor)reader.ReadInt();
            m_state   = (MagieState)reader.ReadInt();
            m_disturb = (MagieDisturb)reader.ReadInt();

            m_condition = (MagieCondition)reader.ReadInt();
            m_Object    = (Item)reader.ReadItem();
            m_Mobile    = (Mobile)reader.ReadMobile();
            m_SortNubia = (SortNubia)reader.ReadItem();

            if (m_owner != null)
            {
                m_owner.Magie.addSort(this);
            }

            //Console.WriteLine("Deserialize SortNubia: " +Nom);
        }
示例#3
0
 public bool isDisturb()
 {
     if (disturb != MagieDisturb.None)
     {
         Owner.PrivateOverheadMessage(MessageType.System, 1645, true, SortNubiaHelper.GetDisturbMessage(disturb), Owner.NetState);
         m_state   = MagieState.None;
         m_disturb = MagieDisturb.None;
         return(true);
     }
     return(false);
 }
示例#4
0
        public static string GetDisturbMessage(MagieDisturb dis)
        {
            switch (dis)
            {
            case MagieDisturb.SortNubia: return("Interruption de votre SortNubia"); break;

            case MagieDisturb.Mort: return(""); break;

            case MagieDisturb.Mouvement: return("Vous perdez votre concentration"); break;

            case MagieDisturb.Mana: return("Vous n'avez plus assez de chakra"); break;
            }
            return("Interruption pour cause inconnu");
        }
示例#5
0
        public virtual void EndSortNubia()         //Pour les timers général sur le timer Turn du Konoha Player
        {
            //Console.WriteLine("End de SortNubia: "+Nom);
            m_state   = MagieState.None;
            m_disturb = MagieDisturb.None;

            if (Owner == null)
            {
                return;
            }
            //Fin des fils
            for (int i = 0; i < Owner.Magie.Sorts.Count; i++)
            {
                if (Owner.Magie.Sorts[i] is SortNubia)
                {
                    SortNubia jut = Owner.Magie.Sorts[i] as SortNubia;
                    if (jut.SortNubiaPere == this)
                    {
                        jut.EndSortNubia();
                    }
                }
            }
        }
示例#6
0
        public virtual bool Cast()
        {
            //Console.WriteLine("Cast de SortNubia: "+Nom);
            LastUse = DateTime.Now;

            if (m_owner == null)
            {
                return(false);
            }

            if (m_owner.Mana < chakra && !(m_owner.AccessLevel >= AccessLevel.GameMaster))
            {
                m_disturb = MagieDisturb.Mana;
            }

            if (!(m_owner.AccessLevel >= AccessLevel.GameMaster))
            {
                m_owner.Mana -= chakra;
            }

            if (isDisturb())
            {
                return(false);
            }

            m_state = MagieState.WaitEnd;

            if (mustCrier)
            {
                m_owner.PublicOverheadMessage(MessageType.Regular, 0, true, Nom + "!");
                //m_owner.Say(Nom+"!");
            }
            else
            {
                m_owner.SendMessage("Vous executez votre sort: " + Nom);
            }


            if (m_owner.AccessLevel >= AccessLevel.GameMaster)
            {
                Maitrise = 120.0;
            }

            if (Maitrise >= 120.0)
            {
                return(true);
            }

            double tempo = Maitrise;

            if (Utility.RandomMinMax(0, (int)Maitrise) < 50)
            {
                if (Maitrise > 80)
                {
                    m_maitrise += (double)((double)Utility.RandomMinMax(10, 5) / 10.0);
                }
                else if (Maitrise > 70)
                {
                    m_maitrise += (double)((double)Utility.RandomMinMax(20, 10) / 10.0);
                }
                else if (Maitrise > 60)
                {
                    m_maitrise += (double)((double)Utility.RandomMinMax(40, 20) / 10.0);
                }
                else if (Maitrise > 50)
                {
                    m_maitrise += (double)((double)Utility.RandomMinMax(70, 100) / 10.0);
                }
                else
                {
                    m_maitrise += (double)((double)Utility.RandomMinMax(100, 150) / 10.0);
                }
            }

            if (tempo < Maitrise)
            {
                Owner.SendMessage("Maitrise de " + m_name + ": " + m_maitrise + " %");
            }
            return(true);
        }
示例#7
0
        public virtual void StartCast()
        {
            if (Owner == null)
            {
                Console.WriteLine("WARNING: Aucun owner pour le SortNubia " + Nom);
                return;
            }
            NubiaPlayer from = Owner as NubiaPlayer;

            //Console.WriteLine("Debut de SortNubia: "+Nom);
            //	Console.WriteLine("State: "+sta

            if (!isFinish())
            {
                from.PrivateOverheadMessage(MessageType.System, 0, true, "Vous mettez fin au effet du sort", from.NetState);
                EndSortNubia();
                return;
            }
            if (from.isTransfo && (!(this is SortNubiaTao) && !(from.BodyValue == 400 || from.BodyValue == 401)))
            {
                if (!(condition == MagieCondition.SortNubia && SortNubiaPere == from.GetTransfo()))
                {
                    from.PrivateOverheadMessage(MessageType.System, 0, true, "Vous êtes transformé", from.NetState);
                    return;
                }
            }
            if (!timeStateOk() && !InCast() && !(from.AccessLevel >= AccessLevel.GameMaster))
            {
                from.PrivateOverheadMessage(MessageType.System, 0, true, "Vous ne pouvez pas encore utilser cette technique", from.NetState);
                //EndSortNubia();
                return;
            }
            if (!checkForOtherCast() && !(from.AccessLevel >= AccessLevel.GameMaster))
            {
                from.PrivateOverheadMessage(MessageType.System, 0, true, "Vous être en train d'executez un SortNubia", from.NetState);
                //EndSortNubia();
                return;
            }
            if (!canCast(Owner) && !(from.AccessLevel >= AccessLevel.GameMaster))
            {
                return;
            }

            //Private/public Regular/Spell
            //from.PublicOverheadMessage(  MessageType.Emote, 0,true, "*Forme une série de signes*");
            if (isGestuel)
            {
                from.Emote("*Forme une série de signes*");
                from.FixedParticles(0x376A, 1, (int)m_timeToCast * 13, 0x251D, from.ChakraColor, 0, EffectLayer.Waist);
            }
            else
            {
                from.SendMessage("Vous préparez une technique sans gestuel");
            }

            m_disturb = MagieDisturb.None;
            m_state   = MagieState.InCast;
            InternalTimer timer = new InternalTimer(true, this, (m_timeToCast / 2.0));

            timer.Start();
        }
示例#8
0
 public void doMoveDisturb()
 {
     m_disturb = MagieDisturb.Mouvement;
 }