public void addThreat(CRController source, float threat) { int i=0; for (; i<_enemies.Count; i++) { Enemy enemy = _enemies[i]; if (enemy.controller == source) { enemy.threat = enemy.threat + threat; _enemies[i] = enemy; break; } } if (i >= _enemies.Count) { Enemy enemy = new Enemy(); enemy.controller = source; enemy.threat = threat; _enemies.Add(enemy); } else { if (i > 0 && _enemies[i].threat > _enemies[i-1].threat) { Enemy tmp = _enemies[i]; _enemies[i] = _enemies[i-1]; _enemies[i-1] = tmp; } } updateTarget(); }
// 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 void IndexTest() { var controller = new CRController(); var result = controller.Index(); Assert.IsInstanceOfType(result, typeof(ViewResult)); }
// Update is called once per frame public override CRCombatResult execute(CRController source, CRController target) { CRWeaponItem weapon = null; CRItem item = source.creature.equipment.GetItem((int)CREquipSlot.PRIMARY); if (item is CRWeaponItem) { weapon = (CRWeaponItem)item; } Dictionary<CRCombatEvent, float> chances = new Dictionary<CRCombatEvent, float>(); chances.Add(CRCombatEvent.MISS, -25.0f); CRCombatResult result = CRCombatManager.ResolveMelee(source.creature.offence, weapon, multiplier, bonus, target.creature.defence, chances); result.threat = result.amount * threatMultipler; result.attacker = source; result.defender = target; result.message = message; result.singularMessage = singularMessage; return result; }
public override void use(CRController source, CRAbility ability, CRController target) { _source = source; _target = target; _ability = ability; }
// 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; GameObject obj = Instantiate(effect, target.transform.position, Quaternion.identity) as GameObject; obj.transform.parent = target.transform; CREffect e = obj.GetComponent<CREffect>(); target.creature.effectManager.AddEffect(source, e); CROverTime[] timed = (CROverTime[])e.GetComponents<CROverTime>(); foreach (CROverTime time in timed) { time.Begin(source, target); } result.singularMessage = e.singularMessage; result.message = e.message; result.threat = e.threat; return result; }
// Update is called once per frame public override CRCombatResult execute(CRController source, CRController target) { CRCombatResult result = new CRCombatResult(); result.combatEvent = CRCombatEvent.HIT; result.combatType = CRCombatType.MAGIC; result.attacker = source; result.defender = target; CRResource resource = target.creature.attributeManager.GetResource(type); if (resource) { float bonus = 0; if (source.offence) { bonus = Mathf.Clamp(source.offence.magic / 14.0f * coefficient, 0, amount); } float damage = Mathf.CeilToInt(amount + bonus); result.amount = damage; result.threat = damage * threatMultipler; if (type != CRResourceType.HEALTH) resource.Consume(damage); } return result; }
public void AddEffect(CRController source, CREffect effect) { if (effect.rolling) { effect.Apply(_creature); return; } if (effect.category == CREffectCategory.UNIQUE) { string key = effect.name; if (_uniqueEffects.ContainsKey(source)) { Dictionary<string, CREffect> effects = _uniqueEffects[source]; if (effects.ContainsKey(key)) { CREffect e = effects[key]; if (e) { e.SendMessage("Expire", CRExpirationReason.OVERWRITE, SendMessageOptions.DontRequireReceiver); } effects.Remove(key); effects.Add(key, effect); } else { effects.Add(key, effect); } } else { Dictionary<string, CREffect> effects = new Dictionary<string, CREffect>(); effects.Add(key, effect); _uniqueEffects.Add(source, effects); } effect.Apply(_creature); } /// temp, keep our array clean List<string> expired = new List<string>(); foreach (KeyValuePair<string, CREffect> kv in _uniqueEffects[source]) { if (kv.Value.expired()) expired.Add(kv.Key); } foreach (string ex in expired) { _uniqueEffects[source].Remove(ex); } }
void Awake() { _animator = GetComponentInChildren<Animator>(); _agent = GetComponentInChildren<Agent>(); _controller = GetComponent<CRController>(); if(_animator && _animator.layerCount >= 2) _animator.SetLayerWeight(1, 1); }
public override void use(CRController source, CRAbility ability, CRController target) { _source = source; _target = target; _ability = ability; transform.parent = _source.transform; }
public void attack(CRController target) { if (target == _controller) return; _auto = true; _target = target; }
public void attack(CRController target) { stop(); _commands.Enqueue(new CRSpawn( new ICRCommand[] { new CRFollow(_movementBehaviour, target.transform), new CRAttack(_attackBehaviour, target) } )); }
void Update() { if (_controller.isIdle()) { if (_target) _target.deaggro(this); _target = null; } }
void Start() { _slider = GetComponent<UISlider>(); _controller = CRUtility.GetComponentInParent<CRController>(transform); _health = _controller.creature.attributeManager.GetResource(CRResourceType.HEALTH); _foreground = transform.FindChild("Foreground").GetComponent<UISlicedSprite>(); _conditionManager = _controller.creature.conditionManager; }
void OnDisable() { foreach (NPCBehaviour behaviour in GetComponents<NPCBehaviour>()) behaviour.enabled = false; if (_target) _target.deaggro(this); _target = null; }
void BindUI(CRController controller) { UIResource[] uiresources = (UIResource[])GameObject.FindWithTag("UI Root").GetComponentsInChildren<UIResource>(); foreach (UIResource uiresource in uiresources) { CRResource resource = controller.creature.attributeManager.GetResource(uiresource.type); if (resource) uiresource.SetResource(resource); else uiresource.gameObject.SetActive(false); } UIExperience uiexperience = (UIExperience)GameObject.FindWithTag("UI Root").GetComponentInChildren<UIExperience>(); if (uiexperience) { uiexperience.SetController(controller); } UICastBar uicastbar = (UICastBar)GameObject.FindWithTag("UI Root").GetComponentInChildren<UICastBar>(); if (uicastbar) { uicastbar.SetController(controller); } UIButtonMessage respawnbutton = (UIButtonMessage)GameObject.FindWithTag("UI Root").transform.FindChild("Root/Dead/Button").GetComponent<UIButtonMessage>(); if (respawnbutton) { respawnbutton.target = controller.gameObject; respawnbutton.functionName = "NetworkRespawn"; } UIAbilityBar abilitybar = (UIAbilityBar)GameObject.FindWithTag("UI Root").GetComponentInChildren<UIAbilityBar>(); if (abilitybar) { CRAbilityManager abilityManager = controller.creature.abilityManager; CRAbility[] abilities = abilityManager.GetAbilities(); abilitybar.SetAbilityBehaviour(controller.abilityBehaviour); for (int i=0; i<abilities.Length; i++) { if (null != abilities[i]) { abilitybar.SetAbility(i, abilities[i]); } } } }
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; }
void die() { _controller.stop(); foreach (NPCBehaviour behaviour in GetComponents<NPCBehaviour>()) behaviour.enabled = false; if (_target) _target.deaggro(this); _target = null; }
// Use this for initialization void Start() { _creature = GetComponentInChildren<CRCreature>(); _binding = GetComponent<CRControllerBinding>(); _controller = GetComponent<CRController>(); _guiInventory = GetComponentInChildren<GUIInventory>(); _guiEquipment = GetComponentInChildren<GUIEquipment>(); _guiInventory.enabled = toggleInventory; _guiEquipment.enabled = toggleInventory; }
void foundTarget(CRController other) { if (other) { if (_target) _target.deaggro(this); _target = other; _target.aggro(this); _controller.attack(_target); } }
public void stop() { if (Network.isServer) { if (_animator) { _animator.SetBool("Attack", false); _animator.SetBool("CancelAttack", true); } } _auto = false; _target = null; }
public static void Attack(CRController attacker, CRWeaponItem weapon, float multiplier, CRController defender) { // can't attack if we have no offence if (!attacker.creature.offence) return; int n = 1; float trip = attacker.creature.offence.tripleChance(attacker.creature.level) * 0.01f; float dbl = attacker.creature.offence.doubleChance(attacker.creature.level) * 0.01f; float v = Random.Range(0, 1.0f); if ( v < trip) { n = 3; } else if ( v < trip + dbl) { n = 2; } for (int i=0; i<n; i++) { CRCombatResult result = CRCombatManager.ResolveMelee(attacker.creature.offence, weapon, multiplier, 0, defender.creature.defence); result.attacker = attacker; result.defender = defender; Messenger<CRCombatResult>.Broadcast("CombatResult", result); if (result.amount > 0) { defender.BroadcastMessage("takeDamage", result); if (defender.creature.isDead()) { attacker.SendMessage("gainExperience", defender.creature.level * defender.creature.level * 500); break; } } NPCThreat threat = result.defender.GetComponent<NPCThreat>(); if (threat) threat.addThreat(result.attacker, result.threat); } }
// Update is called once per frame public override CRCombatResult execute(CRController source, CRController target) { CRCombatResult result = new CRCombatResult(); result.combatType = CRCombatType.MAGIC; result.combatEvent = CRCombatEvent.EFFECT; result.threat = amount; result.attacker = source; result.defender = target; result.message = message; result.singularMessage = singularMessage; return result; }
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 removeTarget(CRController target) { int i=0; for (; i<_enemies.Count; i++) { Enemy enemy = _enemies[i]; if (enemy.controller == target) { _enemies.RemoveAt(i); updateTarget(); return true; } } updateTarget(); return false; }
public CRLoot(CRController controller, CRController target) { _controller = controller; _target = target; }
void Awake() { _controller = GetComponent<CRController>(); _agent = GetComponentInChildren<Agent>(); }
public override void use(CRController source, CRAbility ability, CRController target) { CRCombatManager.Cast(source, ability, target); Destroy(gameObject); }
public static void Cast(CRController source, CRAbility ability, CRController target) { GameObject go = GameObject.Instantiate(ability.action) as GameObject; go.transform.parent = target.transform; go.transform.localPosition = Vector3.zero; if (Network.isServer) { CRCombatAction[] actions = (CRCombatAction[])go.GetComponentsInChildren<CRCombatAction>(); foreach (CRCombatAction action in actions) { ResloveCombatAction(source, action, target); } } }
public static void ResloveCombatAction(CRController source, CRCombatAction action, CRController target) { CRCombatResult result = action.execute(source, target); if (result.threat == Mathf.NegativeInfinity) { target.wipeThreat(); } Messenger<CRCombatResult>.Broadcast("CombatResult", result); NPCThreat threat = result.defender.GetComponent<NPCThreat>(); if (threat) { threat.addThreat(result.attacker, result.threat); } if (result.combatEvent == CRCombatEvent.HIT) { if (result.amount > 0) { result.defender.BroadcastMessage("takeDamage", result); if (result.defender.creature.isDead()) { result.attacker.SendMessage("gainExperience", result.defender.creature.level * result.defender.creature.level * 500); } } } else if (result.combatEvent == CRCombatEvent.HEAL) { target.passThreat(source, result.threat); } }