public bool Check(Unit caster, SkillCaster casterCaster, BaseUnit target, SkillCastTarget targetCaster, SkillObject skillObject) { var res = true; switch (Kind) { case PlotConditionType.Distance: //var dist = MathUtil.CalculateDistance(caster.Position, target.Position); var dist = 10; res = dist >= Param1 && dist <= Param2; break; case PlotConditionType.BuffTag: res = target.Effects.CheckBuffs(SkillManager.Instance.GetBuffsByTagId((uint)Param1)); break; case PlotConditionType.Unk6: res = false; //TODO break; case PlotConditionType.Unk7: res = false; //TODO break; } return(NotCondition ? !res : res); }
public void Execute(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time, int Value1, int Value2, int Value3, int Value4) { if (caster is Character character) { character.DisabledSetPosition = true; character.SendPacket( new SCLoadInstancePacket( 1, character.WorldPosition.ZoneId, character.WorldPosition.X, character.WorldPosition.Y, character.WorldPosition.Z, 0, 0, 0 ) ); character.InstanceId = 1; // TODO .... character.Position = character.WorldPosition.Clone(); character.WorldPosition = null; } }
public void Execute(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time, int Value1, int Value2, int Value3, int Value4) { var owner = (Character)caster; var skillData = (SkillItem)casterObj; var itemInfo = owner.Inventory.GetItem(skillData.ItemId); if (itemInfo == null || itemInfo.Count <= 0) { return; } var tasks = new List <ItemTask> { InventoryHelper.GetTaskAndRemoveItem(owner, itemInfo, 1) }; owner.BmPoint += Value1; owner.SendPacket(new SCBmPointPacket(owner.BmPoint)); owner.SendPacket(new SCItemTaskSuccessPacket(ItemTaskType.SkillReagents, tasks, new List <ulong>())); // TODO - LOYALT IS ACCOUNT WIDE }
void IStage.Enter() { _DatumPosition = _Player.GetPosition(); _Player.Aid(); _Caster = SkillCaster.Build(ACTOR_STATUS_TYPE.AID); _TimeCounter.Reset(); }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("InteractionEffect, {0}", WorldInteraction); var classType = Type.GetType("AAEmu.Game.Models.Game.World.Interactions." + WorldInteraction); if (classType == null) { _log.Error("InteractionEffect, Unknown world interaction: {0}", WorldInteraction); return; } _log.Debug("InteractionEffect, Action: {0}", classType); // TODO help to debug... var action = (IWorldInteraction)Activator.CreateInstance(classType); action.Execute(caster, casterObj, target, targetObj, skill.Template.Id); if (caster is Character character) { character.Quests.OnInteraction(WorldInteraction); } }
public CastTask(Skill skill, Unit caster, SkillCaster casterCaster, BaseUnit target, SkillCastTarget targetCaster, SkillObject skillObject) : base(skill) { _caster = caster; _casterCaster = casterCaster; _target = target; _targetCaster = targetCaster; _skillObject = skillObject; }
// Use this for initialization private void Start() { _agent = GetComponent <NavMeshAgent>(); _skillCaster = GetComponent <SkillCaster>(); _AIControl = GetComponent <EnemyCharacter>(); _characterStats = GetComponent <CharacterStats>(); InvokeRepeating("Check", 0f, checkFrequency); }
public SCUnitHealedPacket(CastAction castAction, SkillCaster skillCaster, uint targetId, byte type, int value) : base(0x0a1, 1) { _castAction = castAction; _skillCaster = skillCaster; _targetId = targetId; _type = type; _value = value; }
public void Execute(Unit caster, SkillCaster casterCaster, BaseUnit target, SkillCastTarget targetCaster, uint skillId) { if (target is House house && caster is Character character) { HousingManager.Instance.Demolish(character.Connection, house); } }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("CraftEffect, {0}", WorldInteraction); var wiGroup = WorldManager.Instance.GetWorldInteractionGroup((uint)WorldInteraction); if (caster is Character character) { switch (wiGroup) { case WorldInteractionGroup.Craft: character.Craft.EndCraft(); break; case WorldInteractionGroup.Collect: break; case WorldInteractionGroup.Building when target is House house: // TODO not done, debug only if (house.Template.BuildSteps.Count == 0) { house.CurrentStep = -1; } else { house.AddBuildAction(); } character.BroadcastPacket( new SCHouseBuildProgressPacket( house.TlId, house.ModelId, house.AllAction, house.CurrentStep == -1 ? house.AllAction : house.CurrentAction ), true ); if (house.CurrentStep == -1) { var doodads = house.AttachedDoodads.ToArray(); foreach (var doodad in doodads) { doodad.Spawn(); } } break; default: _log.Warn("CraftEffect, {0} not have wi group", WorldInteraction); break; } character.Quests.OnInteraction(WorldInteraction); } }
public SCSkillFiredPacket(uint id, ushort tl, SkillCaster caster, SkillCastTarget target, Skill skill, SkillObject skillObject) : base(0x09b, 1) { _id = id; _tl = tl; _caster = caster; _target = target; _skill = skill; _skillObject = skillObject; }
public ApplySkillTask(Skill skill, Unit caster, SkillCaster casterCaster, BaseUnit target, SkillCastTarget targetCaster, SkillObject skillObject) { _skill = skill; _caster = caster; _casterCaster = casterCaster; _target = target; _targetCaster = targetCaster; _skillObject = skillObject; }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { Character character = (Character)caster; character.Craft.EndCraft(); _log.Debug("CraftEffect"); }
public SCUnitDamagedPacket(CastAction castAction, SkillCaster skillCaster, uint casterId, uint targetId, int damage) : base(0x0a0, 1) { _castAction = castAction; _skillCaster = skillCaster; _casterId = casterId; _targetId = targetId; _damage = damage; }
public SCSkillStartedPacket(uint id, ushort tl, SkillCaster caster, SkillCastTarget target, Skill skill, SkillObject skillObject) : base(SCOffsets.SCSkillStartedPacket, 5) { _id = id; _tl = tl; _caster = caster; _target = target; _skill = skill; _skillObject = skillObject; }
public PlotTask(Skill skill, Unit caster, SkillCaster casterCaster, BaseUnit target, SkillCastTarget targetCaster, SkillObject skillObject, PlotNextEvent nextEvent) : base(skill) { _caster = caster; _casterCaster = casterCaster; _target = target; _targetCaster = targetCaster; _skillObject = skillObject; _nextEvent = nextEvent; }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { var portalInfo = (SkillObjectUnk1)skillObject; var portalOwner = (Character)caster; _log.Debug("OpenPortalEffect, Owner: {0}, PortalId: {1}", portalOwner.Name, portalInfo.Id); PortalManager.Instance.OpenPortal(portalOwner, portalInfo); // TODO - Use Distance }
private void Awake() { Instance = this; LoadIcon(); Caster = new SkillCaster(); //角色拥有的测试技能 TotalSkills = GetTestSkills(); }
public BattleCasterStatus(ISoulBinder binder, Entity player, IMapFinder map, SkillCaster caster) { _CastTimer = new TimeCounter(); _Attacked = new HashSet<Guid>(); _Binder = binder; _Player = player; _Map = map; _Caster = caster; _MoveController = new MoveController(player); }
/// <summary> /// 释放技能 /// </summary> /// <param name="index">技能索引</param> public void Cast(int index) { // 技能组配置 SkillGroupCfg cfg = ConfigManager.instance.GetSkillGroupCfg(_cfg.ID, index); // 技能基础配置 SkillBasicCfg basicCfg = ConfigManager.instance.GetSkillBasicCfg(cfg.ID); // 技能发射器 SkillCaster skillCaster = _skillCasters[cfg.ID]; // 战斗界面 //BattleWnd battleWnd = UIManager.instance.Get<BattleWnd>(); //if (basicCfg.NeedTarget && _lockedTarget == null) //{ // battleWnd.ShowTips("需要一个目标"); // return; //} //if (basicCfg.NeedTarget && _lockedTarget != null && basicCfg.AffectSide == AffectSide.Enemy && _lockedTarget.side == side) //{ // battleWnd.ShowTips("非法目标"); // return; //} //if (basicCfg.NeedTarget && _lockedTarget != null && basicCfg.AffectSide == AffectSide.Friend && _lockedTarget.side != side) //{ // battleWnd.ShowTips("非法目标"); // return; //} //if (!skillCaster.cooldown) //{ // battleWnd.ShowTips("这个法术还没有准备好"); // return; //} //if (basicCfg.NeedTarget && _lockedTarget != null && Vector3.Distance(_transform.position, _lockedTarget.position) >= basicCfg.MaxRange) //{ // battleWnd.ShowTips("不在攻击范围之内"); // return; //} skillCaster.Cast(); // 施法者播放动画 Attack(basicCfg); // 播放特效 if (basicCfg.CastEffect != null) { SkillManager.instance.PlayEffect(basicCfg.CastEffect, position, forward); } }
public PlotTask(Skill skill, Unit caster, SkillCaster casterCaster, BaseUnit target, SkillCastTarget targetCaster, SkillObject skillObject, PlotNextEvent nextEvent, Dictionary <uint, int> counter) : base(skill) { _caster = caster; _casterCaster = casterCaster; _target = target; _targetCaster = targetCaster; _skillObject = skillObject; _nextEvent = nextEvent; _counter = counter; }
public void Execute(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time, int Value1, int Value2, int Value3, int Value4) { var owner = (Character)caster; var skillData = (SkillItem)casterObj; _log.Warn("SlaveCall"); SlaveManager.Instance.Create(owner, skillData); }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("AcceptQuestEffect"); if (target is Character character) { character.Quests.Add(QuestId); } }
public void Execute(Unit caster, SkillCaster casterCaster, BaseUnit target, SkillCastTarget targetCaster, uint skillId) { if (target is Doodad doodad) { var func = DoodadManager.Instance.GetFunc(doodad.FuncGroupId, skillId); if (func == null) { return; } func.Use(caster, doodad, skillId); } }
public SkillStateBase(Engine.Utility.StateMachine <ISkillPart> machine, ISkillPart skillpart) { m_Statemachine = machine; m_SkillPart = skillpart; if (skillpart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART) { PlayerSkillPart skill = skillpart as PlayerSkillPart; m_isMainPlayer = SkillSystem.GetClientGlobal().IsMainPlayer(skill.GetMaster()); m_caster = skill.Caster; } }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("RestoreManaEffect"); if (!(target is Unit)) { return; } var trg = (Unit)target; var min = 0; var max = 0; if (UseFixedValue) { min += FixedMin; max += FixedMax; } var unk = 0f; var unk2 = 1f; var skillLevel = 1; if (skill != null) { skillLevel = (skill.Level - 1) * skill.Template.LevelStep + skill.Template.AbilityLevel; if (skillLevel >= skill.Template.AbilityLevel) { unk = 0.15f * (skillLevel - skill.Template.AbilityLevel + 1); } unk2 = (1 + unk) * 1.3f; } if (UseLevelValue) { var levelMd = (unk + 1) * LevelMd; min += (int)(caster.LevelDps * levelMd + 0.5f); max += (int)((((skillLevel - 1) * 0.020408163f * (LevelVaEnd - LevelVaStart) + LevelVaStart) * 0.0099999998f + 1f) * caster.LevelDps * levelMd + 0.5f); } // TODO ... // min += (int)((caster.MDps + caster.MDpsInc) * 0.001f * unk2 + 0.5f); // max += (int)((caster.MDps + caster.MDpsInc) * 0.001f * unk2 + 0.5f); var value = Rand.Next(min, max); trg.BroadcastPacket(new SCUnitHealedPacket(castObj, casterObj, trg.ObjId, 1, value), true); trg.Mp += value; trg.Mp = Math.Min(trg.Mp, trg.MaxMp); trg.BroadcastPacket(new SCUnitPointsPacket(trg.ObjId, trg.Hp, trg.Mp), true); }
/// <summary> /// 释放技能 /// </summary> /// <param name="caster"></param> public override void Cast(SkillCaster caster) { caster.Cast(); // 施法者播放动画 Attack(caster.SkillBasicCfg); // 播放特效 if (caster.SkillBasicCfg.CastEffect != null) { SkillManager.instance.PlayEffect(caster.SkillBasicCfg.CastEffect, position, forward); } }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { if (RequireBuffId > 0 && !target.Effects.CheckBuff(RequireBuffId)) { return; //TODO send error? } if (target.Effects.CheckBuffImmune(Id)) { return; //TODO error of immune? } target.Effects.AddEffect(new Effect(target, caster, casterObj, this, skill, time)); }
public override void Read(PacketStream stream) { var skillId = stream.ReadUInt32(); var skillCasterType = stream.ReadByte(); // кто применяет var skillCaster = SkillCaster.GetByType((SkillCasterType)skillCasterType); skillCaster.Read(stream); var skillCastTargetType = stream.ReadByte(); // на кого применяют var skillCastTarget = SkillCastTarget.GetByType((SkillCastTargetType)skillCastTargetType); skillCastTarget.Read(stream); var flag = stream.ReadByte(); var flagType = flag & 15; var skillObject = SkillObject.GetByType((SkillObjectType)flagType); if (flagType > 0) { skillObject.Read(stream); } _log.Debug("StartSkill: Id {0}, flag {1}", skillId, flag); if (SkillManager.Instance.IsDefaultSkill(skillId) || SkillManager.Instance.IsCommonSkill(skillId)) { var skill = new Skill(SkillManager.Instance.GetSkillTemplate(skillId)); // TODO переделать... skill.Use(Connection.ActiveChar, skillCaster, skillCastTarget, skillObject); } else if (skillCaster is SkillItem) { var item = Connection.ActiveChar.Inventory.GetItem(((SkillItem)skillCaster).ItemId); if (item == null || skillId != item.Template.UseSkillId) { return; } Connection.ActiveChar.Quests.OnItemUse(item); var skill = new Skill(SkillManager.Instance.GetSkillTemplate(skillId)); skill.Use(Connection.ActiveChar, skillCaster, skillCastTarget, skillObject); } else if (Connection.ActiveChar.Skills.Skills.ContainsKey(skillId)) { var skill = Connection.ActiveChar.Skills.Skills[skillId]; skill.Use(Connection.ActiveChar, skillCaster, skillCastTarget, skillObject); } else { _log.Warn("StartSkill: Id {0}, undefined use type", skillId); } }
/// <summary> /// Updates the skill references. /// </summary> /// <param name="skillCaster">The skill caster component of the local player</param> public void UpdateSkills(SkillCaster skillCaster) { for (int i = 0; i < _skillIcons.Length; i++) { _skillIcons[i].skill = skillCaster.skills[i + 1]; // Set skill reference _skillIcons[i].GetComponent <Image>().sprite = _skillIcons[i].skill.skillIcon; // Set icon _skillIcons[i].transform.Find("Keybind").GetComponent <Text>().text = SkillNumToString(i + 1); // Set keybind } if (Input.GetJoystickNames().Length > 0) { AdjustControllerText(); } }
/// <summary> /// 追击 /// </summary> public void Chase() { SkillCaster caster = GetSkillCaster(); if (caster == null) { Vector3 targetPosition = _host.lockedTarget.position + (_host.position - _host.lockedTarget.position).normalized * 1f; _host.Move(targetPosition); } else { _host.Cast(caster); } }
/// <summary> /// 获取已经冷却完成的且满足施法范围的技能发射器 /// </summary> /// <returns></returns> public SkillCaster GetSkillCaster() { SkillCaster caster = null; foreach (SkillCaster c in _host.skillCasters.Values) { float distance = Vector3.Distance(_host.position, _host.lockedTarget.position); if (c.cooldown && distance <= c.maxRange) { caster = c; } } return(caster); }
public void GetPositionTest() { var data = new SkillData(); data.Total = 10.0f; /*data.Roots = new[] { new Vector2(0,0), new Vector2(1,0), };*/ var skill = new SkillCaster(data , null); var pos1 = skill.GetPosition(0); var pos2 = skill.GetPosition(1); Assert.AreEqual(0, pos1.X); Assert.AreEqual(0, pos1.Y); Assert.AreEqual(0.1f, pos2.X); Assert.AreEqual(0.1f, pos2.Y); }
public float GetTrunSpeed() { if (_MoveController != null) { var status = _Entiry.GetStatus(); var skill = Resource.Instance.FindSkill(status); var caster = new SkillCaster(skill, new Determination(skill)); return caster.GetTurnRight(); } return 0; }
private void _ToCast(SkillCaster caster) { var status = new BattleCasterStatus(_Binder, _Player, _Map , caster); status.NextEvent += _ToCast; status.BattleIdleEvent += _ToBattle; status.DisarmEvent += _ToDone; _SetStatus(status); }
void ICastSkill.Cast(ACTOR_STATUS_TYPE skill) { if (_Overdraft) return; _NextCaster = _Caster.FindNext(skill); }
private void _ToKnockout() { var skill = Resource.Instance.FindSkill(ACTOR_STATUS_TYPE.KNOCKOUT1); var caster = new SkillCaster(skill, new Determination(skill)); var stage = new BattleCasterStatus(_Binder, _Player, _Map, caster); stage.BattleIdleEvent += _ToBattle; stage.NextEvent += _ToCast; _SetStatus(stage); }