示例#1
0
        public static string Apply(object[] parameters)
        {
            Actor actor = (Actor)parameters[0];

            Effects.ZoneEffect.ZoneEffectTemplate affected = (Effects.ZoneEffect.ZoneEffectTemplate)parameters[1];
            //Actor sacrifiedSummon = parameters[2] as Actor;
            string criteria = (string)parameters[3];

            mysql.spells  spell  = (mysql.spells)parameters[4];
            Actor.effects effect = (Actor.effects)parameters[5];
            bool          cd     = (bool)parameters[6];

            ///////////////////////////////////////////////////////////

            //Battle _battle = Battle.Battles.Find(f => f.IdBattle == spellCaster.idBattle);

            Misc.Criteria.Handlers.Icriteria ci = Misc.Criteria.Handlers.translation.translate(criteria);
            object[] parameters1 = new object[1];
            parameters1[0] = criteria;
            int value = Convert.ToInt32(ci.Apply(parameters1));

            // un evenement dois être créer pour gérer tous seul si le max pdv a été franchie grace au variable d'accessibilité get, set
            affected.AffectedActor.originalPm += value;
            affected.AffectedActor.currentPm  += value;
            string buffer = affected.AffectedActor.Pseudo + ":" + value + ":" + affected.AffectedActor.originalPm + ":pm";

            //// ajout du sort dans la liste des envoutements visibles pour les joueurs concernés
            if (actor.BuffsList.Exists(f => f.SortID == spell.spellID && !f.system))
            {
                // sort trouvé
                Actor.Buff piEnv = actor.BuffsList.Find(f => f.SortID == spell.spellID && !f.system);
                piEnv.playerRoxed.Add("null");
            }
            else
            {
                // ajout du sort dans les envoutements
                Actor.Buff piEnv1 = new Actor.Buff
                {
                    SortID           = spell.spellID,
                    title            = spell.spellName,
                    Debuffable       = true,
                    VisibleToPlayers = true,
                    relanceInterval  = spell.relanceInterval,
                    BuffState        = Enums.Buff.State.Fin,
                    relanceParTour   = spell.relanceParTour,
                    system           = false,
                    Duration         = effect.duration,
                    Cd     = cd,
                    Player = actor.Pseudo
                };
                piEnv1.playerRoxed.Add("null");
                piEnv1.Bonus.originalPm = value;
                actor.BuffsList.Add(piEnv1);
            }

            return(buffer);
        }
示例#2
0
        // decodage de la chaine des effets
        // effect base # effect id # target(separed by / if many) # element # duraion # delay # zoneSize # zoneExtensible # handToHandDistance # min # max # flag1 # flag2 # flag3 | (separator between effects)
        public static List <Actor.effects> effects_decoder(int spellID, int level)
        {
            mysql.spells         info_sort  = (DataBase.DataTables.spells as List <mysql.spells>).Find(f => f.spellID == spellID && f.level == level);
            List <Actor.effects> Alleffects = new List <Actor.effects>();

            if (info_sort.extraDataEffect == null || info_sort.extraDataEffect == "")
            {
                return(Alleffects);
            }

            int cnt = info_sort.extraDataEffect.Split('|').Length;

            for (int c = 0; c < cnt; c++)
            {
                Actor.effects effect      = new Actor.effects();
                string[]      effect_data = info_sort.extraDataEffect.Split('|')[c].Split('#');

                Enums.Effect.effects_base effect_base;
                Enum.TryParse(effect_data[0], out effect_base);

                effect.base_effect = effect_base;

                effect.effect_id = Convert.ToInt32(effect_data[1]);
                string[] targets_data = effect_data[2].Split('/');
                for (int c2 = 0; c2 < targets_data.Length; c2++)
                {
                    Enums.spell_effect_target.targets target;
                    Enum.TryParse(targets_data[c2], out target);
                    effect.targets.Add(target);
                }
                Enums.Chakra.Element element;
                Enum.TryParse(effect_data[3], out element);

                effect.duration           = Convert.ToInt32(effect_data[4]);
                effect.delay              = Convert.ToInt32(effect_data[5]);
                effect.zoneSize           = Convert.ToInt32(effect_data[6]);
                effect.zoneExtensible     = Convert.ToBoolean(effect_data[7]);
                effect.handToHandDistance = Convert.ToInt32(effect_data[8]);
                effect.min   = Convert.ToInt32(effect_data[9]);
                effect.max   = Convert.ToInt32(effect_data[10]);
                effect.flag1 = effect_data[11];
                effect.flag2 = effect_data[12];
                effect.flag3 = effect_data[13];

                Alleffects.Add(effect);
            }

            return(Alleffects);
        }
示例#3
0
        // contrôles auxiliaires specifique à l'effet en cours
        public static bool Apply(object[] parameters)
        {
            // params = im, spellPos, spellID
            NetIncomingMessage im = parameters[0] as NetIncomingMessage;
            Point spellPos        = parameters[1] as Point;
            int   spellID         = (int)parameters[2];

            Battle _battle = Battle.Battles.Find(f => f.IdBattle == (im.SenderConnection.Tag as Actor).idBattle);
            Actor  pi      = _battle.AllPlayersByOrder.Find(f => f.Pseudo == (im.SenderConnection.Tag as Actor).Pseudo);

            Actor.SpellsInformations spell_player_state = (im.SenderConnection.Tag as Actor).sorts.Find(f => f.SpellId == spellID);
            mysql.spells             spell_template     = (DataBase.DataTables.spells as List <mysql.spells>).Find(f => f.spellID == spellID && f.level == spell_player_state.Level);

            Point playerPos      = pi.map_position;
            Actor playerTargeted = _battle.AllPlayersByOrder.Find(f => f.map_position.X == spellPos.X && f.map_position.Y == spellPos.Y);

            #region check si la case centrale est bien une invocation avec les critères demandés
            // il faut que le sort sois lancé sur l'une des invocations du joueur en cours
            // on cherche si le joueur a une invocation sur le terrain
            Actor piInvoked = _battle.AllPlayersByOrder.Find(f => f.Pseudo.IndexOf("$") != -1 && f.Pseudo.Substring(0, f.Pseudo.IndexOf("$")) == pi.Pseudo && f.map_position.X == spellPos.X && f.map_position.Y == spellPos.Y);
            if (piInvoked == null)
            {
                return(false);
            }

            // check si l'idForSummon est bien celui du flag1
            // on cherche parmis les effet celui du killSummonToBoost pour soustraire le flag1
            Actor.effects effect = spell_player_state.effect.Find(f => f.base_effect.ToString() == "killSummonToBoost");
            if (effect != null)
            {
                int idForSummon = 0;
                if (!int.TryParse(effect.flag1, out idForSummon))
                {
                    return(false);
                }

                if (piInvoked.summonID != idForSummon)
                {
                    return(false);
                }
            }
            #endregion

            return(true);
        }
示例#4
0
        public static string Apply(object[] parameters)
        {
            // flag 1 = id de la classe qui se trouve dans la table Classes afin de soustraire les caractèristique de l'invocation
            // flag 2 = caracteristique a booster
            // flag 3 = valeur
            Actor spellCaster = parameters[0] as Actor;
            List <Effects.ZoneEffect.ZoneEffectTemplate> affectedPlayers = parameters[1] as List <Effects.ZoneEffect.ZoneEffectTemplate>;
            int spellID = (int)parameters[2];

            Actor.effects effect   = parameters[3] as Actor.effects;
            bool          cd       = Convert.ToBoolean(parameters[4]);
            Point         spellPos = parameters[5] as Point;

            mysql.spells spell = (DataBase.DataTables.spells as List <mysql.spells>).Find(f => f.spellID == spellID);
            //NetConnection nim = MainClass.netServer.Connections.Find(f => f.Tag != null && (f.Tag as PlayerInfo).Pseudo == spellCaster.Pseudo);

            Actor.SpellsInformations infos_sorts    = spellCaster.sorts.Find(f => f.SpellId == spellID);
            mysql.spells             spell_Template = (DataBase.DataTables.spells as List <mysql.spells>).Find(f => f.spellID == spellID && f.level == infos_sorts.Level);

            Battle _battle = Battle.Battles.Find(f => f.IdBattle == spellCaster.idBattle);

            ////////////////////////////////////////////////////////////////////////
            Enums.Buff.Name pState = (Enums.Buff.Name)Enum.Parse(typeof(Enums.Buff.Name), effect.flag1);

            //string DotonString = ""
            foreach (ZoneEffect.ZoneEffectTemplate affected in affectedPlayers)
            {
                affected.AffectedActor.BuffState.Add(pState);

                // on augemente la puissance des personnages dans la zone
                //spellCaster.doton += sorts.sort(sortID).isbl[spellLvl - 1].piBonus.doton;
                //DotonString += spellCaster.Pseudo + ":" + sorts.sort(sortID).isbl[spellLvl - 1].piBonus.doton + ":" + pi.doton;

                //string dom = "typeRox:etat:sinnin|cd:" + cdAllowed + "|chakra:neutre|deadList:" + playerDead + "|" + DotonString;
            }


            string buffer = "typeRox:etat:sinnin|cd:" + cd + "|chakra:neutre|deadList:|";

            return(buffer);
        }
示例#5
0
文件: summon.cs 项目: melharfi/Nova
        public static void Apply(object[] parameters)
        {
            Actor spellCaster = parameters[0] as Actor;
            List <Effects.ZoneEffect.ZoneEffectTemplate> affectedPlayers = parameters[1] as List <Effects.ZoneEffect.ZoneEffectTemplate>;
            int spellID = (int)parameters[2];

            Actor.effects effect   = parameters[3] as Actor.effects;
            bool          cd       = Convert.ToBoolean(parameters[4]);
            Point         spellPos = parameters[5] as Point;

            Actor.SpellsInformations infos_sorts    = spellCaster.sorts.Find(f => f.SpellId == spellID);
            mysql.spells             spell_Template = (DataBase.DataTables.spells as List <mysql.spells>).Find(f => f.spellID == spellID && f.level == infos_sorts.Level);

            Battle _battle = Battle.Battles.Find(f => f.IdBattle == spellCaster.idBattle);

            //// ajout du sort dans la liste des envoutements systeme
            if (spellCaster.BuffsList.Exists(f => f.SortID == spellID && f.system))
            {
                // sort trouvé
                Actor.Buff piEnv = spellCaster.BuffsList.Find(f => f.SortID == spellID && f.system);
                piEnv.playerRoxed.Add("null");
            }
            else
            {
                // ajout du sort dans les envoutements
                Actor.Buff piEnv1 = new Actor.Buff();
                piEnv1.SortID           = spellID;
                piEnv1.title            = spell_Template.spellName;
                piEnv1.Debuffable       = false;
                piEnv1.VisibleToPlayers = false;
                piEnv1.playerRoxed.Add("null");         // pas la paine d'ajouter le nom d'un adversaire vus que le sort tap en zone, et na pas l'option relanceParJoueur
                piEnv1.relanceInterval = spell_Template.relanceInterval;
                piEnv1.BuffState       = Enums.Buff.State.Fin;
                piEnv1.relanceParTour  = spell_Template.relanceParTour;
                piEnv1.system          = true;
                piEnv1.Cd     = cd;
                piEnv1.Player = spellCaster.Pseudo;
                spellCaster.BuffsList.Add(piEnv1);
            }
        }
示例#6
0
        public static string Apply(object[] parameters)
        {
            Actor spellCaster = parameters[0] as Actor;
            //Effects.ZoneEffect.zoneEffectTemplate affected = parameters[1] as Effects.ZoneEffect.zoneEffectTemplate;
            List <Effects.ZoneEffect.ZoneEffectTemplate> affectedPlayers = parameters[1] as List <Effects.ZoneEffect.ZoneEffectTemplate>;
            int spellID = (int)parameters[2];

            Actor.effects effect   = parameters[3] as Actor.effects;
            bool          cd       = Convert.ToBoolean(parameters[4]);
            Point         spellPos = parameters[5] as Point;

            Actor.SpellsInformations infos_sorts    = spellCaster.sorts.Find(f => f.SpellId == spellID);
            mysql.spells             spell_Template = (DataBase.DataTables.spells as List <mysql.spells>).Find(f => f.spellID == spellID && f.level == infos_sorts.Level);

            Battle _battle = Battle.Battles.Find(f => f.IdBattle == spellCaster.idBattle);

            // mise en randome du dom sort
            Random rnd = new Random();
            int    jet = rnd.Next(effect.min, effect.max + 1 + ((cd == true) ? spell_Template.cdDomBonnus : 0));

            int element = 0, equipedElement = 0, elementChakraLevel = 0, domElementFix = 0, resiElementFix = 0, resiElementPercent = 0;

            string buffer = "";

            // si aucun joueur n'est attribué, on envoie comme meme une cmd vide dans la partie dédié, pour que au moin en entre dans la boucle foreach
            if (affectedPlayers.Count() == 0)
            {
                ZoneEffect.ZoneEffectTemplate zet = new ZoneEffect.ZoneEffectTemplate();
                zet.AffectedActor = null;
                affectedPlayers.Add(zet);
            }

            foreach (ZoneEffect.ZoneEffectTemplate affected in affectedPlayers)
            {
                if (spell_Template.element.ToLower() == Enums.Chakra.Element.doton.ToString())
                {
                    element            = spellCaster.doton;
                    equipedElement     = spellCaster.equipedDoton;
                    elementChakraLevel = spellCaster.dotonChakraLevel;
                    domElementFix      = spellCaster.domDotonFix;
                    if (affected.AffectedActor != null)
                    {
                        resiElementFix     = affected.AffectedActor.resiDotonFix;
                        resiElementPercent = affected.AffectedActor.resiDotonPercent;
                    }
                }
                else if (spell_Template.element.ToLower() == Enums.Chakra.Element.futon.ToString())
                {
                    element            = spellCaster.futon;
                    equipedElement     = spellCaster.equipedFuton;
                    elementChakraLevel = spellCaster.futonChakraLevel;
                    domElementFix      = spellCaster.domFutonFix;
                    if (affected.AffectedActor != null)
                    {
                        resiElementFix     = affected.AffectedActor.resiFutonFix;
                        resiElementPercent = affected.AffectedActor.resiFutonPercent;
                    }
                }
                else if (spell_Template.element.ToLower() == Enums.Chakra.Element.katon.ToString())
                {
                    element            = spellCaster.katon;
                    equipedElement     = spellCaster.equipedKaton;
                    elementChakraLevel = spellCaster.katonChakraLevel;
                    domElementFix      = spellCaster.domKatonFix;
                    if (affected.AffectedActor != null)
                    {
                        resiElementFix     = affected.AffectedActor.resiKatonFix;
                        resiElementPercent = affected.AffectedActor.resiKatonPercent;
                    }
                }
                else if (spell_Template.element.ToLower() == Enums.Chakra.Element.raiton.ToString())
                {
                    element            = spellCaster.raiton;
                    equipedElement     = spellCaster.equipedRaiton;
                    elementChakraLevel = spellCaster.raitonChakraLevel;
                    domElementFix      = spellCaster.domRaitonFix;
                    if (affected.AffectedActor != null)
                    {
                        resiElementFix     = affected.AffectedActor.resiRaitonFix;
                        resiElementPercent = affected.AffectedActor.resiRaitonPercent;
                    }
                }
                else if (spell_Template.element.ToLower() == Enums.Chakra.Element.suiton.ToString())
                {
                    element            = spellCaster.suiton;
                    equipedElement     = spellCaster.equipedSuiton;
                    elementChakraLevel = spellCaster.suitonChakraLevel;
                    domElementFix      = spellCaster.domSuitonFix;
                    if (affected.AffectedActor != null)
                    {
                        resiElementFix     = affected.AffectedActor.resiSuitonFix;
                        resiElementPercent = affected.AffectedActor.resiSuitonPercent;
                    }
                }

                int dammage = (100 + element + equipedElement + spellCaster.power + spellCaster.equipedPower);
                dammage = (int)(jet * dammage) / 100;
                dammage = (int)(dammage * (1 + (0.1 * elementChakraLevel)));
                dammage = dammage + domElementFix + spellCaster.domFix;

                if (affected.AffectedActor != null)
                {
                    dammage *= affected.Pertinance / 100;                // pour les sort qui tape en zone, tant que c proche du centre tant que le rox est meilleur

                    // déduire les resistances du joueur
                    dammage -= ((dammage * resiElementPercent) / 100);
                    dammage -= affected.AffectedActor.resiFix - resiElementFix;

                    // application des dom sur le personnage
                    affected.AffectedActor.currentHealth -= dammage;
                    affected.AffectedActor.maxHealth     -= (dammage * 5) / 100;
                }

                // determiner si le ou les joueurs est/sont mort et si le combat est terminé, séparé par : s'il sagit de plusieurs
                string playerDead = "";
                if (affected.AffectedActor != null && affected.AffectedActor.currentHealth <= 0)
                {
                    //recalibrage des pdv a 0 pour eviter tout future problème
                    // joueur KO
                    affected.AffectedActor.currentHealth = 0;
                    playerDead = affected.AffectedActor.Pseudo;

                    // retirer le joueur de la liste des joueurs en vie
                    _battle.DeadPlayers.Add((Actor)(_battle.AllPlayersByOrder.Find(f => f.Pseudo == affected.AffectedActor.Pseudo)).Clone());
                    _battle.AllPlayersByOrder.RemoveAll(f => f.Pseudo == affected.AffectedActor.Pseudo);
                    _battle.SideA.RemoveAll(f => f.Pseudo == affected.AffectedActor.Pseudo);
                    _battle.SideB.RemoveAll(f => f.Pseudo == affected.AffectedActor.Pseudo);
                }

                ////////////////////////////////////////////////
                /// a verifier si le joueur est immunisé contre les dom ou autre pour un futur sort
                /// ////////////////////////////////////////////
                if (dammage < 0)
                {
                    dammage = 0;
                }

                // typerox peux etre rox(déduction),heal(augementation)
                buffer += "typeRox:rox|jet:" + jet + "|cd:" + cd + "|chakra:" + spell_Template.element + "|dom:" + dammage + "|deadList:" + playerDead + "|" + ((affected.AffectedActor != null) ? affected.AffectedActor.Pseudo : "null") + "#";
            }
            if (buffer != "")
            {
                buffer = buffer.Substring(0, buffer.Length - 1);
            }

            return(buffer);
        }
示例#7
0
        public static Actor Apply(Actor spellCaster, mysql.summon summon, mysql.spells spell_Template, Actor.effects effect)
        {
            // si la classe PlayerInfo est modifié comme l'ajout d'un nouveau champ, il faut ajouter son attribution ici
            Actor pi = new Actor();

            pi.blocage           = MnemonicStatsDispatcher.Int_Apply(summon.blocage, spellCaster.blocage);
            pi.cd                = MnemonicStatsDispatcher.Int_Apply(summon.cd, spellCaster.cd);
            pi.BuffsList         = new List <Actor.Buff>();
            pi.maxHealth         = MnemonicStatsDispatcher.Int_Apply(summon.TotalPdv, spellCaster.maxHealth);
            pi.currentHealth     = MnemonicStatsDispatcher.Int_Apply(summon.TotalPdv, spellCaster.maxHealth);
            pi.currentPc         = MnemonicStatsDispatcher.Int_Apply(summon.pc, spellCaster.originalPc);
            pi.currentPm         = MnemonicStatsDispatcher.Int_Apply(summon.pm, spellCaster.originalPm);
            pi.classeName        = spellCaster.classeName;
            pi.domDotonFix       = MnemonicStatsDispatcher.Int_Apply(summon.domDotonFix, spellCaster.domDotonFix);
            pi.domFix            = MnemonicStatsDispatcher.Int_Apply(summon.domFix, spellCaster.domFix);
            pi.domFutonFix       = MnemonicStatsDispatcher.Int_Apply(summon.domFutonFix, spellCaster.domFutonFix);
            pi.domKatonFix       = MnemonicStatsDispatcher.Int_Apply(summon.domKatonFix, spellCaster.domKatonFix);
            pi.domRaitonFix      = MnemonicStatsDispatcher.Int_Apply(summon.domRaitonFix, spellCaster.domRaitonFix);
            pi.domSuitonFix      = MnemonicStatsDispatcher.Int_Apply(summon.domSuitonFix, spellCaster.domSuitonFix);
            pi.doton             = MnemonicStatsDispatcher.Int_Apply(summon.doton, spellCaster.doton);
            pi.dodgeCD           = MnemonicStatsDispatcher.Int_Apply(summon.dodgeCD, spellCaster.dodgeCD);
            pi.dodgePC           = MnemonicStatsDispatcher.Int_Apply(summon.dodgePC, spellCaster.dodgePC);
            pi.dodgePE           = MnemonicStatsDispatcher.Int_Apply(summon.dodgePE, spellCaster.dodgePE);
            pi.dodgePM           = MnemonicStatsDispatcher.Int_Apply(summon.dodgePM, spellCaster.dodgePM);
            pi.escape            = MnemonicStatsDispatcher.Int_Apply(summon.escape, spellCaster.escape);
            pi.futon             = MnemonicStatsDispatcher.Int_Apply(summon.futon, spellCaster.futon);
            pi.idBattle          = spellCaster.idBattle;
            pi.summons           = MnemonicStatsDispatcher.Int_Apply(summon.summons, spellCaster.summons);
            pi.katon             = MnemonicStatsDispatcher.Int_Apply(summon.katon, spellCaster.katon);
            pi.level             = spell_Template.level;
            pi.maskColorString   = MnemonicStatsDispatcher.Str_Apply(summon.MaskColors, spellCaster.maskColorString);
            pi.map               = spellCaster.map;
            pi.directionLook     = 0;
            pi.originalPc        = MnemonicStatsDispatcher.Int_Apply(summon.pc, spellCaster.originalPc);
            pi.originalPm        = MnemonicStatsDispatcher.Int_Apply(summon.pm, spellCaster.originalPm);
            pi.owner             = spellCaster.Pseudo;
            pi.pe                = MnemonicStatsDispatcher.Int_Apply(summon.pe, spellCaster.pe);
            pi.Pseudo            = MnemonicStatsDispatcher.Str_Apply(summon.name, spellCaster.Pseudo);;
            pi.raiton            = MnemonicStatsDispatcher.Int_Apply(summon.raiton, spellCaster.raiton);
            pi.resiDotonFix      = MnemonicStatsDispatcher.Int_Apply(summon.resiDotonFix, spellCaster.resiDotonFix);
            pi.resiDotonPercent  = MnemonicStatsDispatcher.Int_Apply(summon.resiDotonPercent, spellCaster.resiDotonPercent);
            pi.resiFix           = MnemonicStatsDispatcher.Int_Apply(summon.resiFix, spellCaster.resiFix);
            pi.resiFutonFix      = MnemonicStatsDispatcher.Int_Apply(summon.resiFutonFix, spellCaster.resiFutonFix);
            pi.resiFutonPercent  = MnemonicStatsDispatcher.Int_Apply(summon.resiFix, spellCaster.resiFix);
            pi.resiKatonFix      = MnemonicStatsDispatcher.Int_Apply(summon.resiKatonFix, spellCaster.resiKatonFix);
            pi.resiKatonPercent  = MnemonicStatsDispatcher.Int_Apply(summon.resiKatonPercent, spellCaster.resiKatonPercent);
            pi.resiRaitonFix     = MnemonicStatsDispatcher.Int_Apply(summon.resiRaitonFix, spellCaster.resiRaitonFix);
            pi.resiRaitonPercent = MnemonicStatsDispatcher.Int_Apply(summon.resiRaitonPercent, spellCaster.resiRaitonPercent);
            pi.resiSuitonFix     = MnemonicStatsDispatcher.Int_Apply(summon.resiSuitonFix, spellCaster.resiSuitonFix);
            pi.resiSuitonPercent = MnemonicStatsDispatcher.Int_Apply(summon.resiFix, spellCaster.resiFix);
            pi.removeCD          = MnemonicStatsDispatcher.Int_Apply(summon.retraitCD, spellCaster.removeCD);
            pi.removePC          = MnemonicStatsDispatcher.Int_Apply(summon.retraitPC, spellCaster.removePC);
            pi.removePE          = MnemonicStatsDispatcher.Int_Apply(summon.retraitPE, spellCaster.removePE);
            pi.removePM          = MnemonicStatsDispatcher.Int_Apply(summon.retraitPM, spellCaster.removePM);
            pi.sexe              = spellCaster.sexe;

            for (int cnt = 0; cnt < summon.sorts.Split('/').Length; cnt++)
            {
                string tmp_data = summon.sorts.Split('/')[cnt];
                Actor.SpellsInformations _info_sorts = new Actor.SpellsInformations();
                _info_sorts.SpellId    = Convert.ToInt32(tmp_data.Split(':')[0]);
                _info_sorts.SpellPlace = Convert.ToInt32(tmp_data.Split(':')[1]);
                _info_sorts.Level      = Convert.ToInt32(tmp_data.Split(':')[2]);
                _info_sorts.SpellColor = Convert.ToInt32(tmp_data.Split(':')[3]);
                _info_sorts.effect     = Cryptography.crypted_data.effects_decoder(_info_sorts.SpellId, _info_sorts.Level);
                pi.sorts.Add(_info_sorts);
            }

            pi.species   = Species.Name.Summon;
            pi.suiton    = MnemonicStatsDispatcher.Int_Apply(summon.suiton, spellCaster.suiton);
            pi.maxHealth = MnemonicStatsDispatcher.Int_Apply(summon.TotalPdv, spellCaster.maxHealth);
            pi.teamSide  = spellCaster.teamSide;
            int.TryParse(effect.flag2, out pi.summonID);
            pi.visible = true;

            return(pi);
        }
示例#8
0
        public static void Apply(object[] parameters)
        {
            Actor spellCaster = parameters[0] as Actor;
            List <Effects.ZoneEffect.ZoneEffectTemplate> affectedPlayers = parameters[1] as List <Effects.ZoneEffect.ZoneEffectTemplate>;
            int spellID = (int)parameters[2];

            Actor.effects effect   = parameters[3] as Actor.effects;
            bool          cd       = Convert.ToBoolean(parameters[4]);
            Point         spellPos = parameters[5] as Point;

            Actor.SpellsInformations infos_sorts    = spellCaster.sorts.Find(f => f.SpellId == spellID);
            mysql.spells             spell_Template = (DataBase.DataTables.spells as List <mysql.spells>).Find(f => f.spellID == spellID && f.level == infos_sorts.Level);

            Battle _battle = Battle.Battles.Find(f => f.IdBattle == spellCaster.idBattle);

            #region inscription dans les envoutements
            //// ajout du sort dans la liste des envoutements systeme "non debufable"
            if (spellCaster.BuffsList.Exists(f => f.SortID == spellID && f.system))
            {
                // sort trouvé
                Actor.Buff piEnv = spellCaster.BuffsList.Find(f => f.SortID == spellID && f.system);
                foreach (Effects.ZoneEffect.ZoneEffectTemplate affectedPlayerTemplate in affectedPlayers)
                {
                    if (affectedPlayerTemplate.AffectedActor != null)
                    {
                        piEnv.playerRoxed.Add(affectedPlayerTemplate.AffectedActor.Pseudo);
                    }
                    else
                    {
                        piEnv.playerRoxed.Add("null");
                    }
                }
            }
            else
            {
                // ajout du sort dans les envoutements
                Actor.Buff piEnv1 = new Actor.Buff();
                piEnv1.SortID           = spellID;
                piEnv1.title            = spell_Template.spellName;
                piEnv1.Debuffable       = false;
                piEnv1.VisibleToPlayers = false;
                if (affectedPlayers.Count > 0)
                {
                    foreach (Effects.ZoneEffect.ZoneEffectTemplate affectedPlayerTemplate in affectedPlayers)
                    {
                        if (affectedPlayerTemplate.AffectedActor != null)
                        {
                            piEnv1.playerRoxed.Add(affectedPlayerTemplate.AffectedActor.Pseudo);
                        }
                        else
                        {
                            piEnv1.playerRoxed.Add("null");
                        }
                    }
                }
                else
                {
                    piEnv1.playerRoxed.Add("null");
                }
                piEnv1.relanceInterval = spell_Template.relanceInterval;
                piEnv1.BuffState       = Enums.Buff.State.Fin;
                piEnv1.relanceParTour  = spell_Template.relanceParTour;
                piEnv1.system          = true;
                piEnv1.Cd     = cd;
                piEnv1.Player = spellCaster.Pseudo;
                spellCaster.BuffsList.Add(piEnv1);
            }
            #endregion
        }
示例#9
0
        public static string Apply(object[] parameters)
        {
            // flag 1 = id de la classe qui se trouve dans la table Classes afin de soustraire les caractèristique de l'invocation
            // flag 2 = caracteristique a booster
            // flag 3 = valeur
            Actor spellCaster = parameters[0] as Actor;
            List <Effects.ZoneEffect.ZoneEffectTemplate> affectedPlayers = parameters[1] as List <Effects.ZoneEffect.ZoneEffectTemplate>;
            int spellID = (int)parameters[2];

            Actor.effects effect   = parameters[3] as Actor.effects;
            bool          cd       = Convert.ToBoolean(parameters[4]);
            Point         spellPos = parameters[5] as Point;

            mysql.spells spell = (DataBase.DataTables.spells as List <mysql.spells>).Find(f => f.spellID == spellID);
            //NetConnection nim = MainClass.netServer.Connections.Find(f => f.Tag != null && (f.Tag as PlayerInfo).Pseudo == spellCaster.Pseudo);

            //Actor.SpellsInformations infos_sorts = spellCaster.sorts.Find(f => f.sortID == spellID);
            //mysql.spells spell_Template = (DataBase.DataTables.spells as List<mysql.spells>).Find(f => f.spellID == spellID && f.level == infos_sorts.level);

            Battle _battle = Battle.Battles.Find(f => f.IdBattle == spellCaster.idBattle);
            ////////////////////////////////////////////////////////////////////////

            int summonID = Convert.ToInt32(effect.flag1);

            // si sacrifiedSummon est null alors il y à un problème puisque l'invocation dois exister, et que les ancien controle faite n'ont pas vérifier s'il y avais une invoc ou pas, a voir SERVER.Effects.EffectBase.killSummonToBoost pourquoi elle na pas vérifier
            Actor sacrifiedSummon = affectedPlayers.Find(f => f.AffectedActor.summonID == summonID && f.AffectedActor.owner == spellCaster.Pseudo && f.AffectedActor.species == Species.Name.Summon).AffectedActor;

            // elimination de l'invocation qui se trouve dans la liste affected
            affectedPlayers.RemoveAll(f => f.AffectedActor.summonID == summonID && f.AffectedActor.owner == spellCaster.Pseudo && f.AffectedActor.species == Species.Name.Summon);

            string Segment = "";

            foreach (ZoneEffect.ZoneEffectTemplate zet in affectedPlayers)
            {
                Type feature = Type.GetType("SERVER.Features.Handlers." + effect.flag2);
                if (feature != null)
                {
                    System.Reflection.MethodInfo featureHandler = feature.GetMethod("Apply");
                    if (featureHandler != null)
                    {
                        object[] featureParameters = new object[7];
                        featureParameters[0] = spellCaster;
                        featureParameters[1] = zet;
                        featureParameters[2] = sacrifiedSummon;
                        featureParameters[3] = effect.flag3;
                        featureParameters[4] = spell;
                        featureParameters[5] = effect;
                        featureParameters[6] = cd;

                        Segment += featureHandler.Invoke(null, new object[] { featureParameters }) + "/";
                    }
                    else
                    {
                        Console.WriteLine("There's no methode called 'Apply' for character feature called '" + effect.flag2 + "'");
                    }
                }
                else
                {
                    Console.WriteLine("There's no handler for '" + effect.flag2 + "' character feature in SERVER.Features.Handlers");
                }
            }

            if (Segment != "")
            {
                Segment = Segment.Substring(0, Segment.Length - 1);
            }
            else
            {
                Segment = "null";
            }

            // supression de l'invocation
            // retirer le joueur de la liste des joueurs en vie
            string playerDead = sacrifiedSummon.Pseudo;

            _battle.DeadPlayers.Add((Actor)(_battle.AllPlayersByOrder.Find(f => f.Pseudo == sacrifiedSummon.Pseudo)).Clone());
            _battle.AllPlayersByOrder.RemoveAll(f => f.Pseudo == sacrifiedSummon.Pseudo);
            _battle.SideA.RemoveAll(f => f.Pseudo == sacrifiedSummon.Pseudo);
            _battle.SideB.RemoveAll(f => f.Pseudo == sacrifiedSummon.Pseudo);

            string buffer = "typeRox:desinvocation|cd:" + cd + "|chakra:neutre|deadList:" + playerDead + "|" + Segment;

            return(buffer);
        }
示例#10
0
文件: summon.cs 项目: melharfi/Nova
        public static string Apply(object[] parameters)
        {
            // flag1 = id des states qui se trouve dans la table summon
            // flag2 = idForSummon

            Actor spellCaster = parameters[0] as Actor;
            List <Effects.ZoneEffect.ZoneEffectTemplate> affectedPlayers = parameters[1] as List <Effects.ZoneEffect.ZoneEffectTemplate>;
            int spellID = (int)parameters[2];

            Actor.effects effect   = parameters[3] as Actor.effects;
            bool          cd       = Convert.ToBoolean(parameters[4]);
            Point         spellPos = parameters[5] as Point;

            Actor.SpellsInformations infos_sorts    = spellCaster.sorts.Find(f => f.SpellId == spellID);
            mysql.spells             spell_Template = (DataBase.DataTables.spells as List <mysql.spells>).Find(f => f.spellID == spellID && f.level == infos_sorts.Level);
            Battle _battle = Battle.Battles.Find(f => f.IdBattle == spellCaster.idBattle);

            Lidgren.Network.NetConnection nim = MainClass.netServer.Connections.Find(f => (f.Tag as Actor).Pseudo == spellCaster.Pseudo);

            // check si le joueur a assez de point d'invocation, pour cela, on dois calculer combiens d'invoc il a déja invoqué
            int sumOfInvoc = _battle.AllPlayersByOrder.FindAll(f => f.Pseudo.IndexOf(spellCaster.Pseudo + "$") != -1).Count;

            if (spellCaster.summons <= sumOfInvoc)
            {
                // pas assez de point d'invocation
                CommonCode.SendMessage("cmd•spellNotEnoughInvoc", nim, true);
                Console.WriteLine("<--cmd•spellNotEnoughInvoc to " + spellCaster.Pseudo);
                return("");
            }

            int isAllowedSpellArea = Fight.spellsChecker.isAllowedSpellArea(spell_Template.pe, spellCaster.map_position, spellCaster, _battle, spellPos, 0, false, true);

            if (isAllowedSpellArea == 0)
            {
                // spell autorisé
            }
            else if (isAllowedSpellArea == 1)
            {
                // spell non autorisé, case obstacle
                CommonCode.SendMessage("cmd•spellTileNotAllowed", nim, true);
                Console.WriteLine("<--cmd•spellTileNotAllowed to " + spellCaster.Pseudo);
                return("");
            }
            else if (isAllowedSpellArea == 2)
            {
                // spell non autorisé, pas de porté
                CommonCode.SendMessage("cmd•spellPointNotEnoughPe", nim, true);
                return("");
            }
            else if (isAllowedSpellArea == -1)
            {
                // impossible de determiner la direction, normalement ca deverai le deviner
                return("");
            }

            // creation d'un clone
            mysql.summon _summon = (DataBase.DataTables.summon as List <mysql.summon>).Find(f => f.template_id == Convert.ToInt32(effect.flag1));
            Actor        __clone_jutsu_naruto = Summon.StatsDispatcher.Apply(spellCaster, _summon, spell_Template, effect);

            // creation d'un id aleatoire pour l'invocation
            string rndStr = "";

            // check si le nom de l'invoc est déja dans la liste des joueurs pour eviter un doublons
            while (true)
            {
                rndStr = CommonCode.ReturnRandomId();
                if (!_battle.AllPlayersByOrder.Exists(f => f.Pseudo == __clone_jutsu_naruto.Pseudo + "$" + rndStr))
                {
                    break;
                }
            }

            __clone_jutsu_naruto.Pseudo       = __clone_jutsu_naruto.Pseudo + "$" + rndStr; // separateur entre le nom et le id de l'invocation
            __clone_jutsu_naruto.map_position = spellPos;


            // insert dans la liste
            int index = _battle.AllPlayersByOrder.FindIndex(f => f.Pseudo == spellCaster.Pseudo);

            _battle.AllPlayersByOrder.Insert(index + 1, __clone_jutsu_naruto);

            string buffer = "";

            // conversion des rawdata sort en base64
            string encryptedSpellsRaw = Cryptography.Algo.Encoding.Base64Encode(_summon.sorts);

            //rawData = "typeRox:addInvoc|name:x|cd:x|totalPdv:x";
            string piRaw = __clone_jutsu_naruto.Pseudo + ":" + __clone_jutsu_naruto.classeName + ":" + __clone_jutsu_naruto.spirit + ":" + __clone_jutsu_naruto.spiritLvl.ToString() + ":" + __clone_jutsu_naruto.Pvp.ToString() + ":" + __clone_jutsu_naruto.hiddenVillage + ":" + __clone_jutsu_naruto.maskColorString + ":" + __clone_jutsu_naruto.directionLook.ToString() + ":" + __clone_jutsu_naruto.level.ToString() + ":" + __clone_jutsu_naruto.map + ":" + __clone_jutsu_naruto.officialRang.ToString() + ":" + __clone_jutsu_naruto.currentHealth.ToString() + ":" + __clone_jutsu_naruto.maxHealth.ToString() + ":" + __clone_jutsu_naruto.doton.ToString() + ":" + __clone_jutsu_naruto.katon.ToString() + ":" + __clone_jutsu_naruto.futon.ToString() + ":" + __clone_jutsu_naruto.raiton.ToString() + ":" + __clone_jutsu_naruto.suiton.ToString() + ":" + /*MainClass.chakralvl2*/ 0 + ":" + /*MainClass.chakralvl3*/ 0 + ":" + /*MainClass.chakralvl4*/ 0 + ":" + /*MainClass.chakralvl5*/ 0 + ":" + /*MainClass.chakralvl6*/ 0 + ":" + /*pi.usingDoton.ToString()*/ 0 + ":" + /*pi.usingKaton.ToString()*/ 0 + ":" + /*pi.usingFuton.ToString()*/ 0 + ":" + /*pi.usingRaiton.ToString()*/ 0 + ":" + /*pi.usingSuiton.ToString()*/ 0 + ":" + /*pi.dotonEquiped.ToString()*/ 0 + ":" + /*pi.katonEquiped.ToString()*/ 0 + ":" + /*pi.futonEquiped.ToString()*/ 0 + ":" + /*pi.raitonEquiped.ToString()*/ 0 + ":" + /*pi.suitonEquiped.ToString()*/ 0 + ":" + __clone_jutsu_naruto.originalPc.ToString() + ":" + __clone_jutsu_naruto.originalPm.ToString() + ":" + __clone_jutsu_naruto.pe.ToString() + ":" + __clone_jutsu_naruto.cd.ToString() + ":" + __clone_jutsu_naruto.summons.ToString() + ":" + __clone_jutsu_naruto.initiative.ToString() + ":" + __clone_jutsu_naruto.resiDotonPercent.ToString() + ":" + __clone_jutsu_naruto.resiKatonPercent.ToString() + ":" + __clone_jutsu_naruto.resiFutonPercent.ToString() + ":" + __clone_jutsu_naruto.resiRaitonPercent.ToString() + ":" + __clone_jutsu_naruto.resiSuitonPercent.ToString() + ":" + __clone_jutsu_naruto.dodgePC.ToString() + ":" + __clone_jutsu_naruto.dodgePM.ToString() + ":" + __clone_jutsu_naruto.dodgePE.ToString() + ":" + __clone_jutsu_naruto.dodgeCD.ToString() + ":" + __clone_jutsu_naruto.removePC.ToString() + ":" + __clone_jutsu_naruto.removePM.ToString() + ":" + __clone_jutsu_naruto.removePE.ToString() + ":" + __clone_jutsu_naruto.removeCD.ToString() + ":" + __clone_jutsu_naruto.escape.ToString() + ":" + __clone_jutsu_naruto.blocage.ToString() + ":" + encryptedSpellsRaw + ":" + __clone_jutsu_naruto.resiDotonFix + ":" + __clone_jutsu_naruto.resiKatonFix + ":" + __clone_jutsu_naruto.resiFutonFix + ":" + __clone_jutsu_naruto.resiRaitonFix + ":" + __clone_jutsu_naruto.resiSuitonFix + ":" + __clone_jutsu_naruto.resiFix + ":" + __clone_jutsu_naruto.domDotonFix + ":" + __clone_jutsu_naruto.domKatonFix + ":" + __clone_jutsu_naruto.domFutonFix + ":" + __clone_jutsu_naruto.domRaitonFix + ":" + __clone_jutsu_naruto.domSuitonFix + ":" + __clone_jutsu_naruto.domFix + ":" + __clone_jutsu_naruto.power + ":" + __clone_jutsu_naruto.equipedPower;

            buffer = "typeRox:addInvoc|" + piRaw + "|cd:" + cd;

            return(buffer);
        }