public short CalculateEarnedHonor(CharacterFighter character) { short result; if (base.Draw) { result = 0; } else { if (character.OpposedTeam.AlignmentSide == AlignmentSideEnum.ALIGNMENT_NEUTRAL) { result = 0; } else { double num = (double)base.Winners.GetAllFightersWithLeavers().Sum((FightActor entry) => (int)entry.Level); double num2 = (double)base.Losers.GetAllFightersWithLeavers().Sum((FightActor entry) => (int)entry.Level); double num3 = System.Math.Floor(System.Math.Sqrt((double)character.Level) * 10.0 * (num2 / num)); if (base.Losers == character.Team) { num3 = -num3; } result = (short)num3; } } return(result); }
public void SendFighterDispositionInformations(CharacterFighter newFighter) { foreach (var fighter in this.Fighters.Where(x => x is CharacterFighter)) { var characterFighter = (CharacterFighter)fighter; var fighterClient = this.Map.GetClientFromCharacter(characterFighter.Character); if (fighterClient == null) { continue; } IdentifiedEntityDispositionInformations identifiedEntityDispositionInformations = new IdentifiedEntityDispositionInformations((int)newFighter.CellId, 1, (double)newFighter.Id); fighterClient.SendPacket(new GameEntitiesDispositionMessage(new List <IdentifiedEntityDispositionInformations>() { identifiedEntityDispositionInformations })); if (fighter is CharacterFighter) { fighterClient.SendPacket(new GameFightShowFighterMessage(newFighter.GetGameFightCharacterInformations())); } } }
protected override IEnumerable <IFightResult> GenerateLeaverResults(CharacterFighter leaver, out IFightResult leaverResult) { var rankLoose = CalculateRankLoose(leaver); leaverResult = null; var list = new List <IFightResult>(); foreach (var fighter in GetFightersAndLeavers().OfType <CharacterFighter>()) { var outcome = fighter.Team == leaver.Team ? FightOutcomeEnum.RESULT_LOST : FightOutcomeEnum.RESULT_VICTORY; var result = new ArenaFightResult(fighter, outcome, new FightLoot(), fighter == leaver ? rankLoose : 0, false); if (fighter == leaver) { leaverResult = result; } list.Add(result); } return(list); }
public ulong GetPvMExperience(CharacterFighter fighter) { var pMonstersList = new List <ExperienceFormulas.MonsterData>(); var pMembersList = new List <ExperienceFormulas.GroupMemberData>(); foreach (var monster in fighter.OposedTeam().GetFighters <BrainFighter>(false).FindAll(x => !x.IsSummon)) { pMonstersList.Add(new ExperienceFormulas.MonsterData(monster.Level, monster.Xp)); } foreach (var ally in fighter.Team.GetFighters <CharacterFighter>(false)) { pMembersList.Add(new ExperienceFormulas.GroupMemberData(ally.Level, false)); } ExperienceFormulas formulas = new ExperienceFormulas(); formulas.initXpFormula(new ExperienceFormulas.PlayerData(fighter.Level, fighter.Character.Record.Stats.Wisdom.Total(), (fighter.Character.ExpMultiplicator + fighter.Character.Map.SubArea.ExperienceRate) * WorldConfiguration.Instance.XpRate), pMonstersList, pMembersList, 0, 0); if (fighter.Team.GetFighters <PlayableFighter>(false).Count > 1) { return((ulong)formulas._xpGroup); } else { return((ulong)formulas._xpSolo); } }
private void OnFightEnded(Character character, CharacterFighter fighter) { var effect = Effects.OfType <EffectDice>().FirstOrDefault(x => x.EffectId == EffectsEnum.Effect_RemainingFights); if (effect == null) { return; } if (fighter.Fight.IsPvP) { Owner.Inventory.ApplyItemEffects(this, force: ItemEffectHandler.HandlerOperation.APPLY); } Invalidate(); if (!fighter.Fight.IsPvP) { if (--effect.Value <= 0) { Owner.Inventory.RemoveItem(this); } else { Owner.Inventory.RefreshItem(this); } } }
public void ToggleReady(CharacterFighter actor, bool ready = true) { if (!m_started) { return; } if (ready && m_fighters.Contains(actor)) { m_fighters.Remove(actor); } else if (!ready) { m_fighters.Add(actor); } if (m_fighters.Count != 0) { return; } if (m_timer != null) { m_timer.Dispose(); } NotifySuccess(); }
public static void SendGameFightResumeMessage(IPacketReceiver client, CharacterFighter fighter) { var slaves = fighter.Summons.Where(x => x.IsControlled()); if (slaves.Any()) { client.Send(new GameFightResumeWithSlavesMessage( fighter.Fight.GetBuffs().Select(entry => entry.GetFightDispellableEffectExtendedInformations()), fighter.Fight.GetTriggers().Select(entry => entry.GetGameActionMark(fighter)), fighter.Fight.TimeLine.RoundNumber, !fighter.Fight.IsStarted ? 0 : fighter.Fight.StartTime.GetUnixTimeStamp(), fighter.Fight.ActiveIdols.Select(x => x.GetNetworkIdol()), fighter.SpellHistory.GetCooldowns(), (sbyte)fighter.SummonedCount, (sbyte)fighter.BombsCount, slaves.Select(x => new GameFightResumeSlaveInfo(x.Id, x.SpellHistory.GetCooldowns(), (sbyte)x.SummonedCount, (sbyte)x.BombsCount)))); } else { client.Send(new GameFightResumeMessage( fighter.Fight.GetBuffs().Select(entry => entry.GetFightDispellableEffectExtendedInformations()), fighter.Fight.GetTriggers().Select(entry => entry.GetGameActionMark(fighter)), fighter.Fight.TimeLine.RoundNumber, !fighter.Fight.IsStarted ? 0 : fighter.Fight.StartTime.GetUnixTimeStamp(), fighter.Fight.ActiveIdols.Select(x => x.GetNetworkIdol()), fighter.SpellHistory.GetCooldowns(), (sbyte)fighter.SummonedCount, (sbyte)fighter.BombsCount)); } }
public short CalculateEarnedHonor(CharacterFighter character) { if (Draw) { return(0); } if (character.OpposedTeam.AlignmentSide == AlignmentSideEnum.ALIGNMENT_NEUTRAL) { return(0); } var winnersLevel = (double)Winners.GetAllFightersWithLeavers <CharacterFighter>().Sum(entry => entry.Level); var losersLevel = (double)Losers.GetAllFightersWithLeavers <CharacterFighter>().Sum(entry => entry.Level); var maxLosersLevel = winnersLevel + 15; var delta = Math.Floor(Math.Sqrt(character.Level) * 10 * ((losersLevel > maxLosersLevel ? maxLosersLevel : losersLevel) / winnersLevel)); if (Losers == character.Team) { delta = -delta; } return((short)delta); }
private ControlableMonsterFighter CreateSummon(CharacterFighter master) { MonsterRecord template = MonsterRecord.GetMonster(this.Effect.DiceMin); sbyte gradeId = (sbyte)(template.GradeExist(this.SpellLevel.Grade) ? this.SpellLevel.Grade : template.LastGrade().Id); return(new ControlableMonsterFighter(this.Source.Team, template, gradeId, master, this.CastPoint.CellId)); }
public void ToggleReady(CharacterFighter actor, bool ready = true) { if (this.m_started) { if (ready && this.m_fighters.Contains(actor)) { this.m_fighters.Remove(actor); } else { if (!ready) { this.m_fighters.Add(actor); } } if (this.m_fighters.Count == 0) { if (this.m_timer != null) { this.m_timer.Stop(); } this.NotifySuccess(); } } }
protected override void SendGameFightJoinMessage(CharacterFighter fighter) { var timer = IsStarted ? 0 : (int)GetPlacementTimeLeft(fighter).TotalMilliseconds / 100; ContextHandler.SendGameFightJoinMessage(fighter.Character.Client, CanCancelFight(), (fighter.Team == ChallengersTeam && IsAttackersPlacementPhase) || (fighter.Team == DefendersTeam && IsDefendersPlacementPhase), IsStarted, timer, FightType); }
protected override void OnPlayerReadyToLeave(CharacterFighter characterFighter) { base.OnPlayerReadyToLeave(characterFighter); if (characterFighter.Character.ArenaParty != null) { characterFighter.Character.LeaveParty(characterFighter.Character.ArenaParty); } }
public Leukide(Fighter source, SpellLevelRecord level, MapPoint castPoint, bool criticalHit) : base(source, level, castPoint, criticalHit) { this.Owner = (CharacterFighter)source; foreach (var enemy in this.Owner.OposedTeam().GetFighters()) { enemy.OnDamageTaken += this.Enemy_OnDamageTaken; } }
public short CalculateEarnedDishonor(CharacterFighter character) { if (Draw) { return(0); } return(character.OpposedTeam.AlignmentSide != AlignmentSideEnum.ALIGNMENT_NEUTRAL ? (short)0 : (short)1); }
private void SynchronizeSequence(CharacterFighter characterFighter) { List <NetworkMessage> messages = new List <NetworkMessage>(); messages.Add(characterFighter.GetFighterStatsListMessage()); messages.Add(this.GetGameFightSynchronizeMessage()); this.SendSequence(SequenceTypeEnum.SEQUENCE_TURN_START, messages, 70); }
public static SummonedFighter MakeControlableBrained(CharacterFighter source, ControlableMonsterFighter target) { target.Die(source); SummonedFighter fighter = new SummonedFighter(target.Template, target.GradeId, source, target.Team, target.CellId); source.Fight.AddSummon(fighter); return(fighter); }
private void OnFightEnded(Character character, CharacterFighter fighter) { if (!(fighter.Fight is FightPvM)) { return; } var count = fighter.OpposedTeam.Fighters.OfType <MonsterFighter>().Count(x => x.IsDead() && x.Monster.Template == Monster); Completion += count; }
public CompanionFighter(CompanionRecord template, CharacterFighter master, FightTeam team) : base(team) { this.Template = template; this.Master = master; this.Spells = Template.GetSpellItems(Master.Client.Character); this.Shortcuts = GenerateShortcuts(); if (this.Template.StartingSpellLevelId != 0) this.AutoCastSpell = SpellLevelRecord.GetLevel(Template.StartingSpellLevelId); this.ReadyToFight = true; }
public void ToggleReady(CharacterFighter fighter) { fighter.ReadyToSee = true; if (m_fight.GetAllCharacterFighters(true).FindAll(x => x.Available).All(x => x.ReadyToSee)) { // Action m_fight.OnCharacterFighters(x => x.Character.FighterInstance.ReadyToSee = false); m_timout_timer.Stop(); m_action(); } }
public void ToggleReady(CharacterFighter fighter) { fighter.ReadyToSee = true; if (m_fight.GetAllCharacterFighters(true).FindAll(x =>x.Available).All(x => x.ReadyToSee)) { // Action m_fight.OnCharacterFighters(x => x.Character.FighterInstance.ReadyToSee = false); m_timout_timer.Stop(); m_action(); } }
public static void HandleGameContextKickMessage(WorldClient client, GameContextKickMessage message) { if (client.Character.IsFighting() && client.Character.Fighter.IsTeamLeader()) { CharacterFighter oneFighter = client.Character.Fight.GetOneFighter <CharacterFighter>(message.targetId); if (oneFighter != null && oneFighter.Character.IsFighting() && client.Character.Fight == oneFighter.Character.Fight) { client.Character.Fight.KickFighter(oneFighter); } } }
public SummonedMonster AddTree(CharacterFighter source, Cell cell) { var characterSpell = source.Character.Spells.Where((spell) => spell.Template.Id == (int)SpellIdEnum.Tree).First(); var monsterGrade = Singleton <MonsterManager> .Instance.GetMonsterGrade((int)MonsterEnum.SADIDA_TREE, characterSpell.CurrentLevel); var tree = new SummonedMonster(this.Fight.GetNextContextualId(), this, source, monsterGrade, cell); this.AddFighter(tree); source.AddSummon(tree); return(tree); }
public KolizeumFight(Map Map, WorldClient Attacker, WorldClient Defender) : base(FightType.TYPE_KOLIZEUM, Map) { // Init du combat var AttFighter = new CharacterFighter(this, Attacker); var DefFighter = new CharacterFighter(this, Defender); Attacker.AddGameAction(new GameFight(AttFighter, this)); Defender.AddGameAction(new GameFight(DefFighter, this)); base.InitFight(AttFighter, DefFighter); }
public override bool Apply(Fighter[] targets) { CharacterFighter source = this.Source as CharacterFighter; if (source != null) { ushort value = this.Effect.RandomizeMinMax(); source.Character.AddKamas(value); source.Character.OnKamasGained(value); } return(true); }
public void AddSummon <T>(T fighter, CharacterFighter source) where T : Fighter, ISummon <CharacterFighter> { source.Team.AddFighter(fighter); if (fighter.InsertInTimeline()) { this.TimeLine.InsertFighter(fighter, TimeLine.Index + 1); } fighter.Initialize(); this.Send(new GameActionFightSummonMessage(0, source.Id, new GameFightFighterInformations[] { fighter.GetFightFighterInformations() })); if (fighter.InsertInTimeline()) { this.UpdateTimeLine(); } }
public bool Acknowledge(int id, CharacterFighter fighter) { if (id == Id) { if (!m_acknowledgedBy.Contains(fighter)) { m_acknowledgedBy.Add(fighter); } return(true); } return(Children.Any(x => x.Acknowledge(id, fighter))); }
private void Run(object state) { if (Started) { this.cancel(); return; } Started = true; team1.Remove(p1); team2.Remove(p2); p1.Send(new BasicNoOperationMessage()); p2.Send(new BasicNoOperationMessage()); var Fight = new KolizeumFight(map, p1.Client, p2.Client); map.AddFight(Fight); foreach (var Player in team1) { try { Player.Send(new BasicNoOperationMessage()); Logger.Error("Ini Player " + Player.Name); var Fighter = new CharacterFighter(Fight, Player.GetClient()); var FightAction = new GameFight(Fighter, Fight); Player.Client.AddGameAction(FightAction); Fight.JoinFightTeam(Fighter, Fight.GetTeam1(), false, -1, false); } catch (Exception e) { Logger.Error(e); } } foreach (var Player in team2) { try { Player.Send(new BasicNoOperationMessage()); Logger.Error("Ini Player " + Player.Name); //if (Prism.CurrentFight.CanJoin(Team, Client.GetCharacter())) var Fighter = new CharacterFighter(Fight, Player.GetClient()); var FightAction = new GameFight(Fighter, Fight); Player.Client.AddGameAction(FightAction); Fight.JoinFightTeam(Fighter, Fight.GetTeam2(), false, -1, false); } catch (Exception e) { Logger.Error(e); } } }
private void OnFightEnded(Character character, CharacterFighter fighter) { if (fighter.Fight.FightType == FightTypeEnum.FIGHT_TYPE_PvM) { if (fighter.HasWin()) { if (fighter.Fight.GetChallenges().Any(entry => entry.IsSuccessful)) { if (fighter.Fight.RedTeam.GetAllFighters().Sum(entry => entry.Level) < fighter.Fight.GetAllFighters().Sum(entry => entry.Level)) { // TODO : 1 challenge } if (fighter.Fight.Map.IsDungeonSpawn) { // TODO : check si c'est un boss } foreach (var item in fighter.Fight.BlueTeam.GetAllFighters <MonsterFighter>()) { var criterion = Singleton <AchievementManager> .Instance.TryGetCriterionByMonster(item.Monster.Template); if (criterion != null) { if (this.m_runningCriterions.ContainsKey(criterion)) { this.m_runningCriterions[criterion]++; } else { this.m_runningCriterions.Add(criterion, 1); } if (!this.ContainsCriterion(criterion.Criterion)) { if (criterion.Eval(this.Owner)) { this.AddCriterion(criterion); } } } } } } } }
public CharacterFighter CreateFighter(FightTeam team) { Look.UnsetAura(); RefreshOnMapInstance(); Map.Instance.RemoveClient(Client); Client.Send(new GameContextDestroyMessage()); Client.Send(new GameContextCreateMessage(2)); Client.Send(new GameFightStartingMessage((sbyte)team.Fight.FightType, 0, 1)); var fighter = new CharacterFighter(Client, team); FighterInstance = fighter; if (EquipedCompanion != null) { var cfighter = new CompanionFighter(EquipedCompanion, fighter, team); team.AddFighter(cfighter); } return(fighter); }
public FightResultPlayer(CharacterFighter fighter, TeamColorEnum winner) : base(fighter, winner) { this.PlayerLevel = fighter.Client.Character.Record.Level; if (fighter.Fight is FightPvM && winner == fighter.Team.TeamColor) { GeneratePVMLoot(); } if (fighter.Fight is FightArena && winner == fighter.Team.TeamColor) { GenerateArenaLoot(); } // if (fighter.Fight is FightAgression && winner == fighter.Team.TeamColor) { // add honor } }
public FightResultPlayer(CharacterFighter fighter, TeamColorEnum winner) : base(fighter, winner) { this.PlayerLevel = fighter.Client.Character.Record.Level; if (fighter.Fight is FightPvM && winner == fighter.Team.TeamColor) { GeneratePVMLoot(); } if (fighter.Fight is FightArena && winner == fighter.Team.TeamColor) { GenerateArenaLoot(); } // if (fighter.Fight is FightAgression && winner == fighter.Team.TeamColor) { // add honor } }
private void OnFightEnded(Character character, CharacterFighter fighter) { if (PetTemplate == null) { return; } bool update = false; if (!fighter.Fight.IsDeathTemporarily && fighter.Fight.Losers == fighter.Team && IsEquiped()) { LifePoints--; update = true; } if (fighter.Fight is FightPvM fightPvM) { foreach (var monster in fightPvM.MonsterTeam.Fighters.OfType <MonsterFighter>().Where(x => x.IsDead())) { var food = PetTemplate.Foods.FirstOrDefault(x => x.FoodType == FoodTypeEnum.MONSTER && x.FoodId == monster.Monster.Template.Id); if (food != null) { if (IncreaseCreatureKilledCount(monster.Monster.Template) % food.FoodQuantity == 0) { AddBonus(food); } Invalidate(); update = true; } } } if (update && LifePoints > 0) { Owner.Inventory.RefreshItem(this); } UpdateCorpulence(); }
public short CalculateEarnedDishonor(CharacterFighter character) { short result; if (base.Draw) { result = 0; } else { if (character.OpposedTeam.AlignmentSide != AlignmentSideEnum.ALIGNMENT_NEUTRAL) { result = 0; } else { result = 1; } } return(result); }
public CharacterFighter CreateFighter(FightTeam team) { Look.UnsetAura(); RefreshOnMapInstance(); Map.Instance.RemoveClient(Client); Client.Send(new GameContextDestroyMessage()); Client.Send(new GameContextCreateMessage(2)); Client.Send(new GameFightStartingMessage((sbyte)team.Fight.FightType, 0, 1)); var fighter = new CharacterFighter(Client, team); FighterInstance = fighter; if (EquipedCompanion != null) { var cfighter = new CompanionFighter(EquipedCompanion, fighter, team); team.AddFighter(cfighter); } return fighter; }