public override void Execute(float deltaTime) { if (this.m_body.GetState() == eBodyBaseState.none && null != this.m_server) { if (this.m_masterPlayer == null) { this.PickupNearestFood(); } else { Vector3 position = this.m_masterPlayer.GetPosition(); float sqrMagnitude = (base.transform.position - position).sqrMagnitude; if (Time.time > this.m_resetAttackTime) { Transform victim = this.m_masterPlayer.GetVictim(); if (null != victim && (victim.position - position).sqrMagnitude < 200f && !this.m_server.IsInSpecialArea(victim.position, eAreaType.noPvp)) { ControlledChar component = victim.GetComponent <ControlledChar>(); if (null == component || (component.GetServerPlayer() != null && !component.GetServerPlayer().IsSaint())) { this.SetAggressor(this.m_masterPlayer.GetVictim()); } } else if (sqrMagnitude > 900f) { this.m_masterPlayer = null; } else if (sqrMagnitude > 16f && Time.time > this.m_nextFollowUpdate) { this.m_body.GoTo(position); this.m_nextFollowUpdate = Time.time + 0.5f; } } else if (sqrMagnitude > 300f) { this.ResetAttack(); } } } if (this.m_resetAttackTime > 0f && Time.time > this.m_resetAttackTime) { this.ResetAttack(); } }
private void CalculateXpAndKarma(Transform a_victim, float a_weaponDamage) { if (!(null != a_victim) || !(0f < a_weaponDamage)) { return; } ServerNpc serverNpc = (a_victim.gameObject.layer != 9) ? null : a_victim.GetComponent <ServerNpc>(); if (null == serverNpc) { if (a_victim.gameObject.layer == 13) { ServerPlayer serverPlayer = null; ControlledChar component = a_victim.GetComponent <ControlledChar>(); serverPlayer = ((!(null != component)) ? null : component.GetServerPlayer()); if (serverPlayer == null || serverPlayer.IsSaint()) { return; } if (8f < serverPlayer.m_karma) { float num = a_weaponDamage * 0.5f * (serverPlayer.m_karma / 200f); if (IsSaint()) { num = Mathf.Max(2.5f, num); } ChangeKarmaBy(0f - num); } else if (IsSaint()) { ChangeKarmaBy(-2.5f); } } else if (a_victim.gameObject.layer == 19) { ServerBuilding component2 = a_victim.GetComponent <ServerBuilding>(); if (null != component2 && m_pid != component2.GetOwnerId() && IsSaint()) { ChangeKarmaBy(-2.5f); } } else { if (a_victim.gameObject.layer != 11) { return; } ServerVehicle component3 = a_victim.GetComponent <ServerVehicle>(); if (null != component3 && 0 < component3.GetPassengerCount()) { float num2 = a_weaponDamage * 0.25f; if (IsSaint()) { num2 = Mathf.Max(2.5f, num2); } ChangeKarmaBy(0f - num2); } } return; } int handItem = serverNpc.GetHandItem(); float num3 = Mathf.Min(serverNpc.GetLastHealth(), a_weaponDamage); float num4 = num3 * 0.2f + Items.GetWeaponXpMultiplier(handItem) * (num3 * 0.01f); if (!(0f < num4)) { return; } bool flag = true; for (int i = 0; i < m_killXp.Count; i++) { KillXp killXp = m_killXp[i]; if (killXp.player == null) { KillXp killXp2 = m_killXp[i]; if (serverNpc == killXp2.npc) { KillXp value = m_killXp[i]; value.xp += num4; value.deletetime = Time.time + 20f; m_killXp[i] = value; flag = false; break; } } } if (flag) { KillXp item = new KillXp(null, serverNpc, num4, Time.time + 20f); m_killXp.Add(item); } }
private void HandleEnemy() { if (!(null != m_enemy)) { return; } if (m_isHappy && m_handItemDef.damage > 5f) { float a_sqrDist = 10000f; Vector3 vector = (!(m_dontAttackTime < Time.time)) ? Vector3.zero : GetAttackDir(ref a_sqrDist); if (Vector3.zero != vector) { base.transform.rotation = Quaternion.LookRotation(vector); Idle(); if (Time.time > m_nextAttackTime) { Transform a_target = m_enemy; Raycaster.Attack(base.transform, m_handItemDef, m_enemy.transform.position, ref a_target); if (m_handItemDef.ammoItemType > 0 && null != a_target && a_target != m_enemy) { m_dontAttackTime = Time.time + Random.Range(3f, 6f); } if (a_target == m_enemy && m_causeCondition != eCondition.none) { ControlledChar component = m_enemy.GetComponent <ControlledChar>(); ServerPlayer serverPlayer = (!(null != component)) ? null : component.GetServerPlayer(); if (serverPlayer != null) { serverPlayer.SetCondition(m_causeCondition, true); } } m_nextAttackTime = Time.time + m_handItemDef.attackdur * attachDurMultip; } m_state = eBodyBaseState.attacking; } else if (m_approach) { if (Time.time > m_nextRepositionTime) { GoTo(m_enemy.position); m_nextRepositionTime = Time.time + 0.05f + Mathf.Clamp01(a_sqrDist / 200f); } } else { m_enemy = null; GoTo(m_homePos); } } else if (Time.time > m_nextRepositionTime) { Vector3 normalized = (base.transform.position - m_enemy.position).normalized; Vector3 vector2 = base.transform.position + normalized * 10f; if (0.8f > Util.GetTerrainHeight(vector2) || Random.Range(0, 5) == 0) { float y = (Random.Range(0, 2) != 0) ? 90f : (-90f); vector2 = base.transform.position + Quaternion.Euler(0f, y, 0f) * normalized * 10f; } GoTo(vector2); m_nextRepositionTime = Time.time + 1f; } }
private void HandleEnemy() { if (null != this.m_enemy) { if (this.m_isHappy && this.m_handItemDef.damage > 5f) { float num = 10000f; Vector3 vector = (this.m_dontAttackTime >= Time.time) ? Vector3.zero : this.GetAttackDir(ref num); if (Vector3.zero != vector) { base.transform.rotation = Quaternion.LookRotation(vector); this.Idle(); if (Time.time > this.m_nextAttackTime) { Transform enemy = this.m_enemy; Raycaster.Attack(base.transform, this.m_handItemDef, this.m_enemy.transform.position, ref enemy); if (this.m_handItemDef.ammoItemType > 0 && null != enemy && enemy != this.m_enemy) { this.m_dontAttackTime = Time.time + UnityEngine.Random.Range(3f, 6f); } if (enemy == this.m_enemy && this.m_causeCondition != eCondition.none) { ControlledChar component = this.m_enemy.GetComponent <ControlledChar>(); ServerPlayer serverPlayer = (!(null != component)) ? null : component.GetServerPlayer(); if (serverPlayer != null) { serverPlayer.SetCondition(this.m_causeCondition, true); } } this.m_nextAttackTime = Time.time + this.m_handItemDef.attackdur * this.attachDurMultip; } this.m_state = eBodyBaseState.attacking; } else if (this.m_approach) { if (Time.time > this.m_nextRepositionTime) { this.GoTo(this.m_enemy.position); this.m_nextRepositionTime = Time.time + 0.05f + Mathf.Clamp01(num / 200f); } } else { this.m_enemy = null; this.GoTo(this.m_homePos); } } else if (Time.time > this.m_nextRepositionTime) { Vector3 normalized = (base.transform.position - this.m_enemy.position).normalized; Vector3 vector2 = base.transform.position + normalized * 10f; if (0.8f > Util.GetTerrainHeight(vector2) || UnityEngine.Random.Range(0, 5) == 0) { float y = (UnityEngine.Random.Range(0, 2) != 0) ? 90f : -90f; vector2 = base.transform.position + Quaternion.Euler(0f, y, 0f) * normalized * 10f; } this.GoTo(vector2); this.m_nextRepositionTime = Time.time + 1f; } } }