Example #1
0
    private IEnumerator Win(Monster.Meta meta)
    {
        dungeon_move.touch_input.block_count++;
        dungeon.data.current_room.monster = null;
        GameManager.Instance.player.enemy_slain_count++;

        int  prevPlayerLevel = GameManager.Instance.player.level;
        Stat stat            = GameManager.Instance.player.stats;
        int  rewardCoin      = meta.reward.coin + (int)Random.Range(-meta.reward.coin * 0.1f, meta.reward.coin * 0.1f);

        rewardCoin += (int)(rewardCoin * 0.1f * dungeon.level);
        int bonusCoin = (int)(rewardCoin * stat.GetStat(StatType.CoinBonus) / 100.0f);
        int rewardExp = meta.reward.exp + (int)Random.Range(-meta.reward.exp * 0.1f, meta.reward.exp * 0.1f);

        rewardExp += (int)(rewardExp * 0.1f * dungeon.level);
        int bonusExp = (int)(rewardExp * stat.GetStat(StatType.ExpBonus) / 100.0f);

        GameManager.Instance.player.ChangeCoin(rewardCoin + bonusCoin, false);
        GameManager.Instance.player.AddExp(rewardExp + bonusExp);

        GameManager.Instance.player.collect_coin_count += rewardCoin + bonusCoin;
        GameManager.Instance.player.total_exp          += rewardExp + bonusExp;

        if (meta.reward_item_chance > Random.Range(0.0f, 100.0f))
        {
            if ("" == meta.reward.item_id)
            {
                dungeon.data.current_room.item = EquipItemManager.Instance.GetRandomMeta();
            }
            else
            {
                dungeon.data.current_room.item = ItemManager.Instance.FindMeta <Item.Meta>(meta.reward.item_id);
            }
        }

        Database.Execute(Database.Type.UserData, "UPDATE user_data SET player_coin=" + GameManager.Instance.player.coin);
        ProgressManager.Instance.Update(ProgressType.EnemiesSlain, meta.id, 1);

        CreateCoins(rewardCoin + bonusCoin);

        for (int i = prevPlayerLevel; i < GameManager.Instance.player.level; i++)
        {
            yield return(player_exp.SetCurrent(player_exp.max, 0.3f));

            player_exp.max = GameManager.Instance.player.meta.GetMaxExp(i);
            yield return(player_exp.SetCurrent(0.0f, 0.0f));
        }

        player_exp.max        = GameManager.Instance.player.meta.GetMaxExp(GameManager.Instance.player.level);
        player_exp.current    = GameManager.Instance.player.exp;
        player_health.max     = GameManager.Instance.player.max_health;
        player_health.current = GameManager.Instance.player.cur_health;

        string battleResult = "";

        battleResult += GameText.GetText("DUNGEON/BATTLE/DEFEATED", "You", meta.name) + "\n";
        battleResult += "Coins : +" + rewardCoin + (0 < bonusCoin ? "(" + bonusCoin + " bonus)" : "") + "\n";
        battleResult += "Exp : +" + rewardExp + (0 < bonusExp ? "(" + bonusExp + " bonus)" : "") + "\n";
        if (prevPlayerLevel < GameManager.Instance.player.level)
        {
            battleResult += "Level : " + prevPlayerLevel + " -> " + GameManager.Instance.player.level + "\n";
        }

        yield return(GameManager.Instance.ui_textbox.Write(battleResult, false));

        mini_map.CurrentPosition(dungeon.data.current_room.id);
        dungeon_move.touch_input.block_count--;
    }