// Update is called once per frame public override CRCombatResult execute(CRController source, CRController target) { CRCombatResult result = new CRCombatResult(); result.combatEvent = CRCombatEvent.EFFECT; result.combatType = CRCombatType.MAGIC; result.attacker = source; result.defender = target; /// if source does not have a minion if (null == source.minion) { GameObject go = GameObject.Instantiate(minionPrefab, transform.position, Quaternion.identity) as GameObject; ((NetworkNPCSpawner)FindObjectOfType(typeof(NetworkNPCSpawner))).ServerSpawn(go); NPCMinion minion = go.GetComponent<NPCMinion>(); minion.master = source; source.minion = minion; UIMinion ui = GameObject.FindWithTag("UI Root").GetComponentInChildren<UIMinion>(); if (ui) ui.SetMinion(minion); } else { NetworkChat.instance.send(source.GetComponent<NetworkPlayerInit>().owner, "You already have a minion.", 0); } return result; }
public override bool satisfied(CRController controller, CRController target) { CRResource resource = controller.creature.attributeManager.GetResource(type); if (!resource || resource.currentValue < amount) { NetworkChat.instance.send(controller.GetComponent<CRControllerBinding>().owner, "Not enough " + type.ToString().ToLower() + ".", 0); return false; } return true; }
public override bool satisfied(CRController controller, CRController target) { bool result = controller.creature.conditionManager.hasCondition(type); if (!result) { NetworkChat.instance.send(controller.GetComponent<CRControllerBinding>().owner, "You must be " + type.ToString().ToLower() + ".", 0); return false; } return true; }
public override bool satisfied(CRController controller, CRController target) { Vector3 cdir = (target.transform.position - controller.transform.position).normalized; Vector3 tdir = target.transform.forward; if (null != target.GetComponentInChildren<Agent>()) { tdir = target.GetComponentInChildren<Agent>().transform.forward; } bool result = Vector3.Angle(cdir, tdir) < 60.0f; if (!result) { NetworkChat.instance.send(controller.GetComponent<CRControllerBinding>().owner, "You must be behind your target.", 0); return false; } return true; }
public bool use(CRAbility ability, CRController target) { if (ability.targetType == CRAbilityTargetType.SELF) { target = _controller; } _target = target; _ability = ability; if (!ability) return false; if (!_gcd.IsDone()) { _ability = null; return false; } if (ability.onCooldown()) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Ability not ready yet.", 0); _ability = null; return false; } if (!_controller.creature.conditionManager.canCast()) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "You are silenced.", 0); _ability = null; return false; } CRResource resource = _controller.creature.attributeManager.GetResource(ability.resourceType); if (!resource || resource.currentValue < _ability.cost) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Not enough " + _ability.resourceType.ToString().ToLower() + ".", 0); _ability = null; return false; } if (_ability.requiresTarget() && _ability.targetType != CRAbilityTargetType.ALL) { int reputation = _controller.creature.faction.GetReputation(_target.creature.faction.type); if (_ability.targetType == CRAbilityTargetType.HOSTILE) { if (_controller == _target) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "You must target an enemy for that.", 0); _ability = null; return false; } if (reputation != CRFaction.HATED) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "You must target an enemy for that.", 0); _ability = null; return false; } } else { if (reputation != CRFaction.FRIENDLY) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "You must target a friend for that.", 0); _ability = null; return false; } } } if (_ability.requiresTarget()) { if (Vector3.Distance(transform.position, target.transform.position) > (GetComponent<NavMeshAgent>().radius + _target.GetComponent<NavMeshAgent>().radius) + 2.0f + ability.range) { _pathing = true; //NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Out of range.", 0); //_ability = null; return true; } if (target.creature.isDead()) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Target is dead.", 0); cancel(); return false; } } CRAbilityRequirement[] requirements = (CRAbilityRequirement[])ability.GetComponentsInChildren<CRAbilityRequirement>(); foreach (CRAbilityRequirement requirement in requirements) { if (!requirement.satisfied(_controller, _target)) { if (_controller.creature.conditionManager.hasCondition(CRConditionType.STEALTHED)) _controller.stop(); cancel(); return false; } } start(); return true; }
public void SetController(CRController controller) { _abilityBehaviour = controller.GetComponent<CRAbilityBehaviour>(); }