Пример #1
0
    // 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;
    }
Пример #2
0
    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;
    }
Пример #3
0
    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;
    }
Пример #4
0
    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;
    }
Пример #5
0
    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;
    }
Пример #6
0
 public void SetController(CRController controller)
 {
     _abilityBehaviour = controller.GetComponent<CRAbilityBehaviour>();
 }