示例#1
0
    private static void ThrowDamageThing(PlayerStats player)
    {
        if (MapManager.map[Targeting.Position.x, Targeting.Position.y].item == null && MapManager.map[Targeting.Position.x, Targeting.Position.y].isWalkable && MapManager.map[Targeting.Position.x, Targeting.Position.y].enemy == null && MapManager.map[Targeting.Position.x, Targeting.Position.y].type != "Door")
        {
            MapManager.map[Targeting.Position.x, Targeting.Position.y].item     = Info.CurrentItem.gameObject;
            MapManager.map[Targeting.Position.x, Targeting.Position.y].baseChar = Info.CurrentItem.iso.I_symbol;
            if (ColorUtility.TryParseHtmlString(Info.CurrentItem.iso.I_color, out Color color))
            {
                MapManager.map[Targeting.Position.x, Targeting.Position.y].exploredColor = color;
            }
        }
        else
        {
            foreach (var p in MapUtility.GetSimpleNeighbours(Targeting.Position))
            {
                if (MapManager.map[p.x, p.y].item == null && MapManager.map[p.x, p.y].isWalkable && MapManager.map[p.x, p.y].enemy == null && MapManager.map[p.x, p.y].type != "Door")
                {
                    MapManager.map[p.x, p.y].item = Info.CurrentItem.gameObject;
                    MapManager.map[Targeting.Position.x, Targeting.Position.y].baseChar = Info.CurrentItem.iso.I_symbol;
                    if (ColorUtility.TryParseHtmlString(Info.CurrentItem.iso.I_color, out Color color))
                    {
                        MapManager.map[Targeting.Position.x, Targeting.Position.y].exploredColor = color;
                    }
                    break;
                }
            }
        }
        if (MapManager.map[Targeting.Position.x, Targeting.Position.y].enemy == null)
        {
            return;
        }
        var enemy = MapManager.map[Targeting.Position.x, Targeting.Position.y].enemy;
        var npc   = enemy.GetComponent <RoamingNPC>();
        int roll  = UnityEngine.Random.Range(1, 101);

        int calcRoll;

        calcRoll = (roll + player.__dexterity - npc.dex - npc.AC) -
                   Mathf.Max(Mathf.Abs(PlayerMovement.playerMovement.position.x - Targeting.Position.x),
                             Mathf.Abs(PlayerMovement.playerMovement.position.x - Targeting.Position.x));

        if (roll <= 20)
        {
            MissEnemyWakeUp(npc);
            return;
        }
        int damage = 0;

        if (calcRoll > 50 || roll >= 80) //Do we hit?
        {
            damage = Info.GetDamage();
            DealDamageToEnemy(npc, damage);
        }
        else //WE MISSED BUT WE WAKE UP ENEMY
        {
            MissEnemyWakeUp(npc);
        }
    }