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); }
// 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); }
// 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); }
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); }
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); } }
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); }
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); }
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 }
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); }
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); }