public static bool StartCastingSpell(PlayerStatus casterStatus, SpellStatus spellStatus) { if (s_currentCastType != 0) { Log.Error($"Tried to start casting a spell while current cast type is {s_currentCastType}", 59, "C:\\BuildAgents\\AgentB\\work\\cub_client_win64_develop\\client\\DofusCube.Unity\\Assets\\Core\\Code\\Fight\\FightCastManager.cs"); return(false); } SpellDefinition definition = spellStatus.definition; if (null == definition) { Log.Error("Tried to start casting a spell without a loaded definition.", 66, "C:\\BuildAgents\\AgentB\\work\\cub_client_win64_develop\\client\\DofusCube.Unity\\Assets\\Core\\Code\\Fight\\FightCastManager.cs"); return(false); } ICastTargetDefinition castTarget = definition.castTarget; if (castTarget == null) { Log.Error("Tried to cast a spell that has no cast target definition.", 73, "C:\\BuildAgents\\AgentB\\work\\cub_client_win64_develop\\client\\DofusCube.Unity\\Assets\\Core\\Code\\Fight\\FightCastManager.cs"); return(false); } CastTargetContext castTargetContext = castTarget.CreateCastTargetContext(FightStatus.local, casterStatus.id, DynamicValueHolderType.Spell, definition.get_id(), spellStatus.level, spellStatus.instanceId); IReadOnlyList <Cost> costs = definition.costs; int count = costs.Count; for (int i = 0; i < count; i++) { if (costs[i].CheckValidity(casterStatus, castTargetContext) != 0) { Log.Error("Tried to cast a spell but one cost requirement is not met.", 86, "C:\\BuildAgents\\AgentB\\work\\cub_client_win64_develop\\client\\DofusCube.Unity\\Assets\\Core\\Code\\Fight\\FightCastManager.cs"); return(false); } } FightMap current = FightMap.current; if (null != current) { FightMap fightMap = current; fightMap.onTargetChanged = (Action <Target?, CellObject>)Delegate.Combine(fightMap.onTargetChanged, new Action <Target?, CellObject>(OnSpellTargetChanged)); FightMap fightMap2 = current; fightMap2.onTargetSelected = (Action <Target?>)Delegate.Combine(fightMap2.onTargetSelected, new Action <Target?>(OnSpellTargetSelected)); current.SetTargetingPhase(castTarget.EnumerateTargets(castTargetContext)); } s_currentCastType = CurrentCastType.Spell; s_playerCasting = casterStatus; s_spellBeingCast = spellStatus; s_castTargetDefinition = castTarget; s_castTargetContext = castTargetContext; ShowSpellCostsPreview(); return(true); }
public static bool StartInvokingCompanion(PlayerStatus casterStatus, ReserveCompanionStatus companionStatus) { if (s_currentCastType != 0) { Log.Error($"Tried to start invoking a companion while current cast type is {s_currentCastType}", 208, "C:\\BuildAgents\\AgentB\\work\\cub_client_win64_develop\\client\\DofusCube.Unity\\Assets\\Core\\Code\\Fight\\FightCastManager.cs"); return(false); } CompanionDefinition definition = companionStatus.definition; if (null == definition) { Log.Error("Tried to start invoking a companion without a loaded definition.", 215, "C:\\BuildAgents\\AgentB\\work\\cub_client_win64_develop\\client\\DofusCube.Unity\\Assets\\Core\\Code\\Fight\\FightCastManager.cs"); return(false); } OneCastTargetContext castTargetContext = new OneCastTargetContext(FightStatus.local, casterStatus.id, DynamicValueHolderType.Companion, definition.get_id(), companionStatus.level, 0); FightMap current = FightMap.current; if (null != current) { ICoordSelector spawnLocation = definition.spawnLocation; if (spawnLocation == null) { Log.Error("Tried to start invoking a companion that has no spawn location.", 227, "C:\\BuildAgents\\AgentB\\work\\cub_client_win64_develop\\client\\DofusCube.Unity\\Assets\\Core\\Code\\Fight\\FightCastManager.cs"); return(false); } FightMap fightMap = current; fightMap.onTargetChanged = (Action <Target?, CellObject>)Delegate.Combine(fightMap.onTargetChanged, new Action <Target?, CellObject>(OnCompanionInvocationLocationChanged)); FightMap fightMap2 = current; fightMap2.onTargetSelected = (Action <Target?>)Delegate.Combine(fightMap2.onTargetSelected, new Action <Target?>(OnCompanionInvocationLocationSelected)); current.SetTargetingPhase(EnumerateCompanionAvailableLocations(spawnLocation, castTargetContext)); } s_currentCastType = CurrentCastType.Companion; s_playerCasting = casterStatus; s_companionBeingInvoked = companionStatus; s_castTargetContext = castTargetContext; ShowCompanionCostsPreview(); return(true); }