Exemple #1
0
 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();
     }
 }
Exemple #2
0
    public void Spawn(GameObject a_prefab, DatabasePlayer a_dbPlayer)
    {
        Vector3 position = Vector3.zero;

        if (a_dbPlayer.x == 0f && 0f == a_dbPlayer.y)
        {
            a_dbPlayer.karma = 200;
            ServerTutorial tutorial = m_server.GetTutorial();
            if (null != tutorial)
            {
                position = tutorial.StartTutorial();
            }
        }
        else
        {
            position.x = a_dbPlayer.x;
            position.z = a_dbPlayer.y;
        }
        position.y = 0f;
        m_pid      = a_dbPlayer.pid;
        GameObject gameObject = (GameObject)Object.Instantiate(a_prefab, position, Quaternion.identity);

        m_char            = gameObject.GetComponent <ControlledChar>();
        m_health          = a_dbPlayer.health;
        m_energy          = a_dbPlayer.energy;
        m_karma           = a_dbPlayer.karma;
        m_lastUpdateKarma = a_dbPlayer.karma;
        m_xp        = a_dbPlayer.xp;
        m_condition = a_dbPlayer.condition;
        m_gold      = a_dbPlayer.gold;
        m_partyId   = a_dbPlayer.partyId;
        m_partyRank = a_dbPlayer.partyRank;
        RecalculateRank();
        if (m_health == 0f)
        {
            m_respawnTime = Time.time;
        }
        m_char.Init(this);
        m_inventory = new ItemContainer(5, 4, 0, m_sql.PidToCid(m_pid), m_sql, this);
        m_buildMan.IgnoreBedCollision(m_pid, m_char.collider);
    }
    public void SetControlledChar(ControlledChar chara, int port)
    {
        switch (chara)
        {
        case ControlledChar.BoxerA:
            ports[0] = port;
            break;

        case ControlledChar.NurseA:
            ports[1] = port;
            break;

        case ControlledChar.BoxerB:
            ports[2] = port;
            break;

        case ControlledChar.NurseB:
            ports[3] = port;
            break;
        }
    }
Exemple #4
0
    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);
        }
    }
Exemple #5
0
 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;
     }
 }
Exemple #6
0
 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;
         }
     }
 }