Beispiel #1
0
    public void UpdateText(Enemy enemy)
    {
        JobStatusDto statusDto = enemy.job.statusDto;

        this.nameText.text = enemy.name;

        this.lvNum.text = enemy.lv.ToString();

        this.hp.text = (enemy.hp + statusDto.jobHp).ToString();

        this.job.text = enemy.job.jobName.ToString();

        this.exp.text = "0";

        this.maxHp.text = string.Format("/  {0}", (enemy.maxhp + statusDto.jobHp).ToString());

        //210518 現状、ボス以外に顔アイコン表示は無いのでボスのみアイコン表示
        if (enemy.isBoss)
        {
            image.enabled = true;
            image.sprite  = Resources.Load <Sprite>("Image/Charactors/" + enemy.pathName + "/status");
        }
        else
        {
            image.enabled = false;
        }
    }
Beispiel #2
0
    public void UpdateText(Job job)
    {
        JobStatusDto statusDto = job.statusDto;

        this.jobName.text   = job.jobName.ToString();
        this.jobDetail.text = job.jobName.GetStringValue();

        //クラスチェンジ要求レベル
        if (job.jobLevel == JobLevel.ADEPT)
        {
            this.lvRequired.text = "10";
        }
        else if (job.jobLevel == JobLevel.MASTER)
        {
            this.lvRequired.text = "20";
        }
        else
        {
            //中級職以外は渡されないので、ここに入ると実装ミス
            this.lvRequired.text = "0";
        }

        this.hp.text   = string.Format("{0}{1}", getOperand(statusDto.jobHp), statusDto.jobHp.ToString());
        this.latk.text = string.Format("{0}{1}", getOperand(statusDto.jobLatk), statusDto.jobLatk.ToString());
        this.catk.text = string.Format("{0}{1}", getOperand(statusDto.jobCatk), statusDto.jobCatk.ToString());
        this.agi.text  = string.Format("{0}{1}", getOperand(statusDto.jobAgi), statusDto.jobAgi.ToString());
        this.dex.text  = string.Format("{0}{1}", getOperand(statusDto.jobDex), statusDto.jobDex.ToString());
        this.luk.text  = string.Format("{0}{1}", getOperand(statusDto.jobLuk), statusDto.jobLuk.ToString());
        this.ldef.text = string.Format("{0}{1}", getOperand(statusDto.jobLdef), statusDto.jobLdef.ToString());
        this.cdef.text = string.Format("{0}{1}", getOperand(statusDto.jobCdef), statusDto.jobCdef.ToString());
    }
Beispiel #3
0
    //表示した時に呼んで初期化
    public void Init(Unit unit)
    {
        JobStatusDto statusDto = unit.job.statusDto;

        this.name.text = unit.name;
        this.job.text  = unit.job.jobName.ToString();
        this.lv.text   = unit.lv.ToString();
        this.hp.text   = (unit.maxhp + statusDto.jobHp).ToString();
        this.latk.text = (unit.latk + statusDto.jobLatk).ToString();
        this.catk.text = (unit.catk + statusDto.jobCatk).ToString();
        this.agi.text  = (unit.agi + statusDto.jobAgi).ToString();
        this.dex.text  = (unit.dex + statusDto.jobDex).ToString();
        this.luk.text  = (unit.luk + statusDto.jobLuk).ToString();
        this.ldef.text = (unit.ldef + statusDto.jobLdef).ToString();
        this.cdef.text = (unit.cdef + statusDto.jobCdef).ToString();

        //一旦全て非表示にする
        hpUp.enabled   = false;
        latkUp.enabled = false;
        catkUp.enabled = false;
        agiUp.enabled  = false;
        dexUp.enabled  = false;
        lukUp.enabled  = false;
        ldefUp.enabled = false;
        cdefUp.enabled = false;
    }
Beispiel #4
0
        public async Task <string> UpdateJobStatus(long jobId, JobStatusType status)
        {
            var job = new JobStatusDto()
            {
                JobId     = jobId,
                JobStatus = (int)status
            };

            return(await _httpClient.SendDataAsync($"{_apiBaseUrl}/status", job));
        }
        public void ChangeStatus(JobStatusDto input)
        {
            int Id = Convert.ToInt32(input.Id);

            var query = _jobstatustenantRepository
                        .GetAll().Where(c => c.Id == Id && c.Tenant == _abpSession.TenantId)
                        .FirstOrDefault();

            query.isActive = input.IsActive;

            _jobstatustenantRepository.Update(query);
        }
Beispiel #6
0
        public async Task UpdateJobStatus_Success()
        {
            var job = new JobStatusDto()
            {
                JobId     = 10,
                JobStatus = 4
            };
            var submisisionService = GetService();
            var result             = await submisisionService.UpdateJobStatus(10, JobStatusType.Completed);

            result.Should().Be("1");
        }
Beispiel #7
0
        public async Task <long> RunPublishAsync(long jobId, CancellationToken cancellationToken = default(CancellationToken))
        {
            JobStatusDto statusDto = new JobStatusDto()
            {
                JobId     = jobId,
                JobStatus = 1
            };

            string url = $"{_jobApiUrl}/1";

            var result = _httpClientService.SendDataAsync(url, statusDto, cancellationToken);

            return(jobId);
        }
        public async Task ReSubmitFailedJobAsync(long jobId, CancellationToken cancellationToken = default(CancellationToken))
        {
            var oldJob = await _httpClientService.GetAsync <FileUploadJob>($"{_baseUrl}/api/job/{jobId}", cancellationToken);

            if (oldJob.CollectionName.Contains(Constants.DASSubmission))
            {
                // For DAS jobs, issue a clone command
                await _httpClientService.SendDataAsync($"{_baseUrl}/api/job/clone-job", jobId, cancellationToken);
            }
            else
            {
                // For all others, reset the status back to 1
                var jobStatusDto = new JobStatusDto(jobId, Convert.ToInt32(JobStatusType.Ready));
                await _httpClientService.SendDataAsync($"{_baseUrl}/api/job/{JobStatusType.Ready}", jobStatusDto, cancellationToken);
            }
        }
Beispiel #9
0
    /// <summary>
    /// 210216 仲間を回復する値を求める 効果量のみ求めるので内容が少ない
    /// </summary>
    public HealParameterDTO CalculateHealParameter(Unit unit, Weapon healRod, Unit targetUnit)
    {
        HealParameterDTO healParameterDTO = new HealParameterDTO();

        JobStatusDto jobstatusDto = unit.job.statusDto;
        int          unitMaxHp    = unit.maxhp + jobstatusDto.jobHp;
        int          unitLatk     = unit.latk + jobstatusDto.jobLatk;

        //必要な値はHPと遠攻 不要な値は使用しないでバフを受ける
        StatusDto        buffedStatus     = new StatusDto(unitMaxHp, unitLatk, 0, 0, 0, 0, 0, 0);
        StatusCalculator statusCalculator = new StatusCalculator();

        //武器、装飾品、スキルのバフ反映 最大値を上回らないようにして返される
        buffedStatus = statusCalculator.GetBuffedStatus(buffedStatus, unit.name, unit.equipWeapon, unit.equipAccessory, unit.job.skills, false);
        unitMaxHp    = buffedStatus.hp;
        unitLatk     = buffedStatus.latk;


        //戦闘にも使用するので本クラスに値を設定しておく
        healAmount = unitLatk + healRod.attack;

        //210226 スキル「癒し手」
        if (unit.job.skills.Contains(Skill.癒し手))
        {
            healAmount += 10;
        }

        //表示用DTO
        healParameterDTO.unitName  = unit.name;
        healParameterDTO.unitHp    = unit.hp;
        healParameterDTO.unitMaxHp = unitMaxHp;

        //Attackと表記してしまっているが回復量
        healParameterDTO.healAmount      = healAmount;
        healParameterDTO.unitHealRodName = healRod.name;

        //回復対象のステータスも設定する
        JobStatusDto TargetjobstatusDto = targetUnit.job.statusDto;

        healParameterDTO.targetName  = targetUnit.name;
        healParameterDTO.targetHp    = targetUnit.hp;
        healParameterDTO.targetMaxHp = statusCalculator.CalcHpBuff(targetUnit.maxhp + TargetjobstatusDto.jobHp, targetUnit.job.skills);



        return(healParameterDTO);
    }
        public async Task <bool> FailJob(int jobId, CancellationToken cancellationToken, string username = null, DifferentiatorPath?differentiator = null)
        {
            var dto = new JobStatusDto()
            {
                JobId             = jobId,
                ContinueToFailJob = true,
                JobStatus         = (int)JobStatusType.Failed,
            };

            var response = await _baseHttpClientService.SendDataAsyncRawResponse($"{_baseUrl}/api/job/status", dto, cancellationToken, username, differentiator);

            if (!response.IsSuccess)
            {
                _logger.LogError($"Web Operations. Error occured failing job: {jobId}");
            }

            return(response.IsSuccess);
        }
Beispiel #11
0
    //コンストラクタ
    public Job(JobName jobname, JobLevel jobLevel, List <Skill> skills, List <JobName> classChangeDestination,
               List <WeaponType> weaponTypes, JobStatusDto statusDto, GrowthRateDto growthRateDto, int move)
    {
        this.jobName = jobname;

        this.jobLevel = jobLevel;

        this.skills = skills;

        this.classChangeDestination = classChangeDestination;

        this.weaponTypes = weaponTypes;

        //ステータス
        this.statusDto = statusDto;

        //成長率補正
        this.growthRateDto = growthRateDto;

        this.move = move;
    }
Beispiel #12
0
    /// <summary>
    /// 210222 2人分のUnitOutline表示
    /// </summary>
    /// <param name="unit">交換元ユニット</param>
    /// <param name="targetUnit">交換先ユニット</param>
    public void Init(Unit unit, Unit targetUnit, StatusManager statusManager)
    {
        //アイテム以外のUnitOutline
        JobStatusDto statusDto       = unit.job.statusDto;
        JobStatusDto targetStatusDto = targetUnit.job.statusDto;

        //名前
        this.unitNameText.text   = unit.name;
        this.targetNameText.text = targetUnit.name;

        //レベル
        this.unitLv.text   = unit.lv.ToString();
        this.targetLv.text = targetUnit.lv.ToString();

        //HP
        this.unitHp.text   = (unit.hp + statusDto.jobHp).ToString();
        this.targetHp.text = (targetUnit.hp + targetStatusDto.jobHp).ToString();

        //職業
        this.unitJob.text   = unit.job.jobName.ToString();
        this.targetJob.text = targetUnit.job.jobName.ToString();

        //経験値
        this.unitExp.text   = unit.exp.ToString();
        this.targetExp.text = targetUnit.exp.ToString();

        //HP
        this.unitMaxHp.text   = string.Format("/  {0}", (unit.maxhp + statusDto.jobHp).ToString());
        this.targetMaxHp.text = string.Format("/  {0}", (targetUnit.maxhp + targetStatusDto.jobHp).ToString());

        //画像
        this.image.sprite       = Resources.Load <Sprite>("Image/Charactors/" + unit.pathName + "/status");
        this.targetImage.sprite = Resources.Load <Sprite>("Image/Charactors/" + targetUnit.pathName + "/status");

        //2人のアイテム一覧を作成する
        CreateItemButton(unit, unitItemWindow, statusManager);
        CreateItemButton(targetUnit, targetItemWindow, statusManager);
    }
Beispiel #13
0
    public void UpdateText(Unit unit)
    {
        StatusCalculator statusCalc = new StatusCalculator();

        JobStatusDto statusDto = unit.job.statusDto;

        this.nameText.text = unit.name;

        this.lvNum.text = unit.lv.ToString();

        this.hp.text = unit.hp.ToString();

        this.job.text = unit.job.jobName.ToString();

        this.exp.text = unit.exp.ToString();

        //威風堂々等、HPバフも有り得るので
        int maxHp = statusCalc.CalcHpBuff(unit.maxhp + statusDto.jobHp, unit.job.skills);;

        this.maxHp.text = string.Format("/  {0}", (maxHp).ToString());

        this.image.sprite = Resources.Load <Sprite>("Image/Charactors/" + unit.pathName + "/status");
    }
Beispiel #14
0
    //テキスト更新
    //200719 職業のステータスを反映
    public void updateText(Unit unit)
    {
        //職業補正を取得
        JobStatusDto jobStatusDto = unit.job.statusDto;

        //名前、レベル、職業、移動力
        this.name.text  = unit.name;
        this.race.text  = unit.race.GetStringValue();
        this.lvNum.text = unit.lv.ToString();
        this.job.text   = unit.job.jobName.ToString();
        this.exp.text   = unit.exp.ToString();
        this.move.text  = unit.job.move.ToString();

        //210226移動力計算と文字の色変更
        StatusCalculator statusCalculator = new StatusCalculator();

        int move = statusCalculator.calcMove(unit);

        this.move.text = move.ToString();

        //経験値ゲージ
        this.expGauge.maxValue = 100;
        this.expGauge.value    = unit.exp;

        //ステータス ユニット基礎値と職業補正の合算を表示する
        int hp   = unit.maxhp + jobStatusDto.jobHp;
        int latk = unit.latk + jobStatusDto.jobLatk;
        int catk = unit.catk + jobStatusDto.jobCatk;
        int agi  = unit.agi + jobStatusDto.jobAgi;
        int dex  = unit.dex + jobStatusDto.jobDex;
        int luk  = unit.luk + jobStatusDto.jobLuk;
        int ldef = unit.ldef + jobStatusDto.jobLdef;
        int cdef = unit.cdef + jobStatusDto.jobCdef;

        //キャラの画像を取得
        statusImage.enabled     = true;
        this.statusImage.sprite = Resources.Load <Sprite>("Image/Charactors/" + unit.pathName + "/status");

        //武器レベルを反映
        this.shotLevel.text   = unit.shotLevel.GetStringValue();
        this.laserLevel.text  = unit.laserLevel.GetStringValue();
        this.strikeLevel.text = unit.strikeLevel.GetStringValue();
        this.healLevel.text   = unit.healLevel.GetStringValue();

        //210218 やっと技能経験値を表示するように設定した
        shotGauge.value   = unit.shotExp;
        laserGauge.value  = unit.laserExp;
        strikeGauge.value = unit.strikeExp;
        healGauge.value   = unit.healExp;

        //ゲージの必要経験値(maxValue)をスキルレベルより設定する
        shotGauge.maxValue   = unit.shotLevel.GetIntValue();
        laserGauge.maxValue  = unit.laserLevel.GetIntValue();
        strikeGauge.maxValue = unit.strikeLevel.GetIntValue();
        healGauge.maxValue   = unit.healLevel.GetIntValue();



        if (move != unit.job.move)
        {
            //バフが掛かってたら色変更
            this.move.color = highLightColor;
        }
        else
        {
            this.move.color = Color.white;
        }

        //スキルレベルがNONEかSの場合はゲージ自体を表示しない
        if (unit.shotLevel == SkillLevel.NONE || unit.shotLevel == SkillLevel.S)
        {
            shotGaugeFrame.SetActive(false);
        }
        else
        {
            shotGaugeFrame.SetActive(true);
        }
        if (unit.laserLevel == SkillLevel.NONE || unit.laserLevel == SkillLevel.S)
        {
            laserGaugeFrame.SetActive(false);
        }
        else
        {
            laserGaugeFrame.SetActive(true);
        }
        if (unit.strikeLevel == SkillLevel.NONE || unit.strikeLevel == SkillLevel.S)
        {
            strikeGaugeFrame.SetActive(false);
        }
        else
        {
            strikeGaugeFrame.SetActive(true);
        }
        if (unit.healLevel == SkillLevel.NONE || unit.healLevel == SkillLevel.S)
        {
            healGaugeFrame.SetActive(false);
        }
        else
        {
            healGaugeFrame.SetActive(true);
        }

        //210218 武器、装飾品による増加分を反映する スキルのバフもいずれ実装
        StatusDto normalStatus = new StatusDto(hp, latk, catk, agi, dex, ldef, cdef, luk);

        //武器、装飾品、スキルのバフ反映 最大値を上回らないようにして返される
        bool isberserk = false;

        if (unit.hp != statusCalculator.CalcHpBuff(hp, unit.job.skills) && unit.job.skills.Contains(Skill.狂化))
        {
            isberserk = true;
        }
        StatusDto buffedStatus = statusCalculator.GetBuffedStatus(normalStatus, unit.name, unit.equipWeapon, unit.equipAccessory, unit.job.skills, isberserk);

        GetStatus(normalStatus, buffedStatus);
    }
Beispiel #15
0
    /// <summary>
    /// ユニット、敵、武器を受け取るとダメージ、命中率などを計算してDTOに詰めて返してくれる
    /// </summary>
    /// <param name="unit">ユニット名</param>
    /// <param name="unitWeapon">ユニットの武器</param>
    /// <param name="unitCell">ユニットの地形</param>
    /// <param name="enemy">敵</param>
    /// <param name="enemyCell">敵の地形</param>
    /// <param name="isPlayerAttack">プレイヤーからの攻撃か</param>
    /// <returns></returns>
    public BattleParameterDTO CalculateBattleParameter(Unit unit, Weapon unitWeapon, Main_Cell unitCell, Enemy enemy, Main_Cell enemyCell,
                                                       bool isPlayerAttack)
    {
        //戻り値を詰めるクラス
        BattleParameterDTO battleParameterDTO = new BattleParameterDTO();

        //職業ステータス補正が入ったクラス
        JobStatusDto jobstatusDto = unit.job.statusDto;

        //スキル「狂化」判定 ステータスに反映するので最初に判定
        bool isUnitBerserk  = false;
        bool isEnemyBerserk = false;

        bool isCloseAttack; //近接攻撃フラグ

        ///ユニットの計算

        //210218 ステータスと職業による基礎値の計算 他に装備品補正、バフ、デバフ、スキル判定が必要
        int unitMaxHp = unit.maxhp + jobstatusDto.jobHp;
        int unitLatk  = unit.latk + jobstatusDto.jobLatk;
        int unitCatk  = unit.catk + jobstatusDto.jobCatk;
        int unitDex   = unit.dex + jobstatusDto.jobDex;
        int unitAgi   = unit.agi + jobstatusDto.jobAgi;
        int unitLuk   = unit.luk + jobstatusDto.jobLuk;
        int unitLdef  = unit.ldef + jobstatusDto.jobLdef;
        int unitCdef  = unit.cdef + jobstatusDto.jobCdef;

        //210218 バフを反映する処理を追加
        StatusDto        buffedStatus     = new StatusDto(unitMaxHp, unitLatk, unitCatk, unitAgi, unitDex, unitLdef, unitCdef, unitLuk);
        StatusCalculator statusCalculator = new StatusCalculator();

        //スキル「狂化」判定
        if (unit.hp != statusCalculator.CalcHpBuff(unitMaxHp, unit.job.skills) && unit.job.skills.Contains(Skill.狂化))
        {
            isUnitBerserk = true;
        }

        //武器、装飾品、スキルのバフ反映 最大値を上回らないようにして返される
        buffedStatus = statusCalculator.GetBuffedStatus(buffedStatus, unit.name, unit.equipWeapon, unit.equipAccessory, unit.job.skills, isUnitBerserk);

        //値を更新
        unitMaxHp    = buffedStatus.hp;
        unitLatk     = buffedStatus.latk;
        unitCatk     = buffedStatus.catk;
        unitDex      = buffedStatus.dex;
        this.unitDex = buffedStatus.dex;
        unitAgi      = buffedStatus.agi;

        //スキル発動計算の為DTOにもセット
        unitLuk      = buffedStatus.luk;
        this.unitLuk = buffedStatus.luk;

        unitLdef = buffedStatus.ldef;
        unitCdef = buffedStatus.cdef;

        ///敵の計算

        //210227 敵のステータスも上級職補正等は職業から取得する用に変更
        JobStatusDto enemyJobStatusDto = enemy.job.statusDto;

        //210218 ステータスと職業による基礎値の計算 他に装備品補正、バフ、デバフ、スキル判定が必要
        int enemyMaxHp = enemy.maxhp + enemyJobStatusDto.jobHp;
        int enemyLatk  = enemy.latk + enemyJobStatusDto.jobLatk;
        int enemyCatk  = enemy.catk + enemyJobStatusDto.jobCatk;
        int enemyDex   = enemy.dex + enemyJobStatusDto.jobDex;
        int enemyAgi   = enemy.agi + enemyJobStatusDto.jobAgi;
        int enemyLuk   = enemy.luk + enemyJobStatusDto.jobLuk;
        int enemyLdef  = enemy.ldef + enemyJobStatusDto.jobLdef;
        int enemyCdef  = enemy.cdef + enemyJobStatusDto.jobCdef;

        //210218 敵のバフを反映する処理
        StatusDto enemyBuffedStatus = new StatusDto(enemyMaxHp, enemyLatk, enemyCatk, enemyAgi, enemyDex, enemyLdef, enemyCdef, enemyLuk);

        //スキル「狂化」判定
        if (enemy.hp != statusCalculator.CalcHpBuff(enemyMaxHp, enemy.job.skills) && enemy.job.skills.Contains(Skill.狂化))
        {
            isEnemyBerserk = true;
        }

        //武器、装飾品、スキルのバフ反映 最大値を上回らないようにして返される
        enemyBuffedStatus = statusCalculator.GetBuffedStatus(enemyBuffedStatus, enemy.name, enemy.equipWeapon, enemy.equipAccessory, enemy.job.skills, isEnemyBerserk);

        //値を更新
        enemyMaxHp    = enemyBuffedStatus.hp;
        enemyLatk     = enemyBuffedStatus.latk;
        enemyCatk     = enemyBuffedStatus.catk;
        enemyDex      = enemyBuffedStatus.dex;
        this.enemyDex = enemyBuffedStatus.dex;
        enemyAgi      = enemyBuffedStatus.agi;

        //スキル発動計算の為DTOにもセット
        enemyLuk      = enemyBuffedStatus.luk;
        this.enemyLuk = enemyBuffedStatus.luk;

        enemyLdef = enemyBuffedStatus.ldef;
        enemyCdef = enemyBuffedStatus.cdef;



        //210226 自分から攻撃した場合、ダメージが上がるスキル
        //これはステータス画面には表示しないのでstatusCalculator不使用
        //プレイヤーから攻撃した時
        if (isPlayerAttack)
        {
            if (unit.job.skills.Contains(Skill.飛燕の一撃))
            {
                unitAgi += 5;
                Debug.Log($"{unit.name}スキル{Skill.飛燕の一撃} 速さ+5");
            }
            if (unit.job.skills.Contains(Skill.金剛の一撃))
            {
                unitCdef += 10;
                Debug.Log($"{unit.name}スキル{Skill.金剛の一撃} 近防-10");
            }
            if (unit.job.skills.Contains(Skill.鬼神の一撃))
            {
                unitCatk += 6;
                Debug.Log($"{unit.name}スキル{Skill.鬼神の一撃} 近攻+6");
            }
            if (unit.job.skills.Contains(Skill.魔女の一撃))
            {
                unitLatk += 6;
                Debug.Log($"{unit.name}スキル{Skill.魔女の一撃} 遠攻+6");
            }
        }
        else
        {
            //敵の〇〇の一撃判定
            if (enemy.job.skills.Contains(Skill.飛燕の一撃))
            {
                enemyAgi += 5;
                Debug.Log($"{unit.name}スキル{Skill.飛燕の一撃} 速さ+5");
            }
            if (enemy.job.skills.Contains(Skill.金剛の一撃))
            {
                enemyCdef += 10;
                Debug.Log($"{unit.name}スキル{Skill.金剛の一撃} 近防-10");
            }
            if (enemy.job.skills.Contains(Skill.鬼神の一撃))
            {
                enemyCatk += 6;
                Debug.Log($"{unit.name}スキル{Skill.鬼神の一撃} 近攻+6");
            }
            if (enemy.job.skills.Contains(Skill.魔女の一撃))
            {
                enemyLatk += 6;
                Debug.Log($"{unit.name}スキル{Skill.魔女の一撃} 遠攻+6");
            }
        }

        //慧眼の一撃(命中率上がるやつ)はまた別の場所で実装


        //210219 地形効果を味方、敵のセルから取得
        int unitTerrainHit;
        int unitTerrainDef;

        //通常は有り得ないが、セルが無ければ0
        if (unitCell == null)
        {
            Debug.Log("ERROR:ユニットの居るセルの情報が有りません");
            unitTerrainHit = 0;
            unitTerrainDef = 0;
        }
        else
        {
            unitTerrainHit = unitCell.AvoidRate;
            unitTerrainDef = unitCell.Defence;
        }

        int enemyTerrainHit;
        int enemyTerrainDef;

        if (enemyCell == null)
        {
            Debug.Log("ERROR:敵の居るセル情報が有りません");
            enemyTerrainHit = 0;
            enemyTerrainDef = 0;
        }
        else
        {
            enemyTerrainHit = enemyCell.AvoidRate;
            enemyTerrainDef = enemyCell.Defence;
        }

        //スキル判定 目隠し 攻撃を受けた時、回避+20%、守備+2
        bool isUnitBlind  = false;
        bool isEnemyBlind = false;

        if (!isPlayerAttack && unit.job.skills.Contains(Skill.目隠し))
        {
            Debug.Log($"{unit.name} スキル :{Skill.目隠し.ToString()}, {Skill.目隠し.GetStringValue()}");
            isEnemyBlind = true;
        }
        if (isPlayerAttack && enemy.job.skills.Contains(Skill.目隠し))
        {
            Debug.Log($"{enemy.name} スキル :{Skill.目隠し.ToString()}, {Skill.目隠し.GetStringValue()}");
            isUnitBlind = true;
        }



        //210220 攻撃可否を確認
        //座標の絶対値の合計が距離で、その値が武器の射程距離以下なら反撃可能となる
        //射程距離が1の場合、武器が近距離攻撃可能の場合は反撃可能となる
        //距離を取得
        int distance = Mathf.Abs(unitCell.X - enemyCell.X) + Mathf.Abs(unitCell.Y - enemyCell.Y);

        Debug.Log($"ユニットと敵との距離:{distance}");
        Debug.Log($"ユニット:X={unitCell.X},Y={unitCell.Y} 敵:X={enemyCell.X},Y={enemyCell.Y}");

        //近距離攻撃か遠距離か判定
        isCloseAttack = (distance == 1) ? true : false;
        Debug.Log($"近距離攻撃か:{isCloseAttack}");

        //武器の射程距離が距離よりも少ない場合は攻撃不可
        if (unitWeapon.range < distance)
        {
            isUnitAttackable = false;
        }
        else if (distance == 1 && !unitWeapon.isCloseAttack)
        {
            //武器の射程距離内だが、射程が1で近距離攻撃可能ではない場合
            //(射程2以上の武器は、近距離攻撃フラグが無い場合は近距離攻撃出来ない)
            isUnitAttackable = false;
        }
        else
        {
            isUnitAttackable = true;
        }

        //天狗のカメラは反撃不可
        if (enemy.equipWeapon.name == "天狗のカメラ" && !isPlayerAttack)
        {
            isUnitAttackable = false;
        }

        battleParameterDTO.isUnitAttackable = isUnitAttackable;
        Debug.Log($"ユニットの攻撃可否:{battleParameterDTO.isUnitAttackable}");

        //敵の攻撃可否判定 プレイヤーと同じ
        if (enemy.equipWeapon.range < distance)
        {
            isEnemyAttackable = false;
        }
        else if (distance == 1 && !enemy.equipWeapon.isCloseAttack)
        {
            isEnemyAttackable = false;
        }
        else
        {
            isEnemyAttackable = true;
        }

        if (unit.equipWeapon.name == "天狗のカメラ" && isPlayerAttack)
        {
            //ユニットの武器が天狗のカメラ、かつ文ちゃんから攻撃した場合
            isEnemyAttackable = false;
        }

        battleParameterDTO.isEnemyAttackable = isEnemyAttackable;
        Debug.Log($"敵の攻撃可否:{battleParameterDTO.isEnemyAttackable}");



        ///攻撃力計算
        //TODO 武器を持っていない状態で攻撃される場合を考慮する
        int unitWeaponAttack = unitWeapon.attack;

        //NONE以外の場合は何かしら特効対象が有るということ
        //かつ武器の特効対象と敵の種族が一致した場合は特効
        if (unitWeapon.slayer != RaceType.NONE &&
            unitWeapon.slayer == enemy.race)
        {
            //武器威力を3倍にして特効フラグを立てる 特効時は文字の色が変わる
            unitWeaponAttack *= 3;
            battleParameterDTO.isUnitAttackSlayer = true;
        }

        //210301 攻撃力計算 遠距離、近距離の概念を反映
        int unitRefAttack = isCloseAttack ? unitCatk : unitLatk;
        int enemydef      = isCloseAttack ? enemyCdef : enemyLdef;

        //力+武器威力*特効なら3倍 - 敵防御 - 地形効果
        unitAttack = (unitRefAttack + unitWeaponAttack) - enemydef - enemyTerrainDef;

        //スキル目隠し 敵の回避+20、守備+2
        if (isUnitBlind)
        {
            unitAttack -= 2;
        }

        //スキル「密室の守り」自分が地形効果0以外の場所で戦闘時、受けるダメージ-3
        if ((enemyTerrainHit != 0 || enemyTerrainDef != 0) && enemy.job.skills.Contains(Skill.密室の守り))
        {
            unitAttack -= 3;
            Debug.Log($"{enemy.name}: スキル{Skill.密室の守り} 効果{Skill.密室の守り.GetStringValue()}");
        }

        //スキル「死線」 敵に与えるダメージ+10、敵から受けるダメージ+10
        if (unit.job.skills.Contains(Skill.死線))
        {
            //ユニットが持っていれば攻撃力アップ
            unitAttack += 10;
            Debug.Log($"{unit.name}: スキル{Skill.死線} 効果{Skill.死線.GetStringValue()}");
        }
        if (enemy.job.skills.Contains(Skill.死線))
        {
            //敵が持っていれば受けるダメージアップ
            unitAttack += 10;
            Debug.Log($"{enemy.name}: スキル{Skill.死線} 効果{Skill.死線.GetStringValue()}");
        }

        //0~100の間に訂正
        unitAttack = CorrectParameter(unitAttack);
        battleParameterDTO.unitAttack = unitAttack;

        //敵の攻撃力計算 プレイヤーと同じ
        //TODO 敵は武器を持っていない可能性が有るけどまだ考慮してない
        if (enemy.equipWeapon != null)
        {
            //敵も特効の計算
            int enemyWeaponAttack = enemy.equipWeapon.attack;

            if (enemy.equipWeapon.slayer != RaceType.NONE &&
                enemy.equipWeapon.slayer == unit.race)
            {
                enemyWeaponAttack *= 3;
                battleParameterDTO.isEnemyAttackSlayer = true;
            }

            int enemyRefAttack = isCloseAttack ? enemyCatk : enemyLatk;
            int unitdef        = isCloseAttack ? unitCdef : unitLdef;
            enemyAttack = (enemyRefAttack + enemyWeaponAttack) - unitdef - unitTerrainDef;

            //スキル目隠し 敵の回避+20、守備+2
            if (isEnemyBlind)
            {
                enemyAttack -= 2;
            }

            //スキル「密室の守り」自分が地形効果0以外の場所で戦闘時、受けるダメージ-3
            if ((unitTerrainHit != 0 || unitTerrainDef != 0) && unit.job.skills.Contains(Skill.密室の守り))
            {
                enemyAttack -= 3;
                Debug.Log($"{unit.name}: スキル{Skill.密室の守り} 効果{Skill.密室の守り.GetStringValue()}");
            }

            //スキル「死線」
            if (unit.job.skills.Contains(Skill.死線))
            {
                enemyAttack += 10;
                Debug.Log($"{unit.name}: スキル{Skill.死線} 効果{Skill.死線.GetStringValue()}");
            }
            if (enemy.job.skills.Contains(Skill.死線))
            {
                enemyAttack += 10;
                Debug.Log($"{enemy.name}: スキル{Skill.死線} 効果{Skill.死線.GetStringValue()}");
            }


            battleParameterDTO.enemyAttack = CorrectParameter(enemyAttack);
        }


        ///命中率計算
        //物理命中率=物理命中-敵物理回避-地形効果
        //3すくみの乗っていない命中率計算 まだマイナス、100%以上になってもよい
        unitHitRate = (unitDex + unitWeapon.hitRate) - enemyAgi - enemyTerrainHit;

        //敵が武器を持っていれば、敵の命中率計算
        if (enemy.equipWeapon != null)
        {
            enemyHitRate = (enemyDex + enemy.equipWeapon.hitRate) - unitAgi - unitTerrainHit;
        }
        else
        {
            //無ければUI表示は「-」となり参照されることは無いが一旦0
            enemyHitRate = 0;
        }

        //210226 スキル「一撃離脱反映」自分から攻撃時、回避+30
        //プレイヤーの一撃離脱反映
        if (isPlayerAttack && unit.job.skills.Contains(Skill.一撃離脱))
        {
            enemyHitRate -= 30;
            Debug.Log($"{unit.name}: スキル{Skill.一撃離脱} 回避+30");
        }
        else if (!isPlayerAttack && enemy.job.skills.Contains(Skill.一撃離脱))
        {
            //敵の一撃離脱反映
            unitHitRate -= 30;
            Debug.Log($"{enemy.name}: スキル{Skill.一撃離脱} 回避+30");
        }

        //スキル「慧眼の一撃」判定 自分から攻撃時命中+40%
        if (isPlayerAttack && unit.job.skills.Contains(Skill.慧眼の一撃))
        {
            unitHitRate += 40;
            Debug.Log($"{unit.name}: スキル{Skill.慧眼の一撃} 命中+40");
        }
        else if (!isPlayerAttack && enemy.job.skills.Contains(Skill.慧眼の一撃))
        {
            enemyHitRate += 40;
            Debug.Log($"{enemy.name}: スキル{Skill.慧眼の一撃} 命中+40");
        }

        //スキル「自信満々」HPが100%の時命中・回避+15
        if (unitMaxHp == unit.hp)
        {
            if (unit.job.skills.Contains(Skill.自信満々))
            {
                enemyHitRate -= 15;
                unitHitRate  += 15;
                Debug.Log($"{unit.name}: スキル{Skill.自信満々} 命中・回避+15");
            }
            if (unit.job.skills.Contains(Skill.完璧主義))
            {
                enemyHitRate -= 15;
                unitHitRate  += 15;
                Debug.Log($"{unit.name}: スキル{Skill.完璧主義} 命中・回避+15");
            }
        }

        if (enemyMaxHp == enemy.hp)
        {
            if (enemy.job.skills.Contains(Skill.自信満々))
            {
                enemyHitRate += 15;
                unitHitRate  -= 15;
                Debug.Log($"{unit.name}: スキル{Skill.自信満々} 命中・回避+15");
            }
            if (unit.job.skills.Contains(Skill.完璧主義))
            {
                enemyHitRate += 15;
                unitHitRate  -= 15;
                Debug.Log($"{enemy.name}: スキル{Skill.完璧主義} 命中・回避+15");
            }
        }

        //スキル「狂気の瞳」 無条件で回避+20
        if (unit.job.skills.Contains(Skill.狂気の瞳))
        {
            enemyHitRate -= 20;
            Debug.Log($"{unit.name}: スキル{Skill.狂気の瞳} 効果{Skill.狂気の瞳.GetStringValue()}");
        }
        if (enemy.job.skills.Contains(Skill.狂気の瞳))
        {
            unitHitRate -= 20;
            Debug.Log($"{enemy.name}: スキル{Skill.狂気の瞳} 効果{Skill.狂気の瞳.GetStringValue()}");
        }

        //スキル「狂化」 命中率 - 10%
        if (isUnitBerserk)
        {
            unitHitRate -= 10;
            Debug.Log($"{unit.name}: スキル{Skill.狂化} 効果{Skill.狂化.GetStringValue()}");
        }
        if (isEnemyBerserk)
        {
            enemyHitRate -= 10;
            Debug.Log($"{enemy.name}: スキル{Skill.狂化} 効果{Skill.狂化.GetStringValue()}");
        }

        //スキル「目隠し」判定  敵の回避+20、守備+2
        if (isUnitBlind)
        {
            unitHitRate -= 20;
        }
        else if (isEnemyBlind)
        {
            enemyHitRate -= 20;
        }

        //戻り値に計算した値を設定
        battleParameterDTO.unitHitRate  = unitHitRate;
        battleParameterDTO.enemyHitRate = enemyHitRate;

        battleParameterDTO.unitWeapon  = unitWeapon;
        battleParameterDTO.enemyWeapon = enemy.equipWeapon;



        //3すくみ補正を含めた攻撃力、命中率の補正
        battleParameterDTO.affinity = BattleWeaponAffinity.EQUAL;
        if (enemy.equipWeapon != null)
        {
            battleParameterDTO = getWeaponAffinity(battleParameterDTO);
        }

        ///必殺率計算
        ///必殺率=(技+幸運)/2+武器の必殺 - 敵の幸運
        unitCriticalRate = (unitDex + unitLuk) / 2 + unitWeapon.criticalRate - enemyLuk;

        //210226 スキル「蒐集家」反映
        if (SkillUtil.isCollector(unit))
        {
            unitCriticalRate += 10;
        }

        //210227 スキル「必殺」
        if (unit.job.skills.Contains(Skill.必殺))
        {
            unitCriticalRate += 15;
            Debug.Log($"{unit.name}: スキル{Skill.必殺} 効果{Skill.必殺.GetStringValue()}");
        }

        //スキル「狂化」
        if (isUnitBerserk)
        {
            unitCriticalRate += 20;
            Debug.Log($"{unit.name}: スキル{Skill.狂化} 効果{Skill.狂化.GetStringValue()}");
        }



        unitCriticalRate = CorrectParameter(unitCriticalRate);
        battleParameterDTO.unitCriticalRate = unitCriticalRate;

        if (enemy.equipWeapon != null)
        {
            enemyCriticalRate = (enemyDex + enemyLuk) / 2 + enemy.equipWeapon.criticalRate - unitLuk;

            //敵の「蒐集家」判定
            if (SkillUtil.isCollector(enemy))
            {
                enemyCriticalRate += 10;
            }

            //210227 スキル「必殺」
            if (enemy.job.skills.Contains(Skill.必殺))
            {
                enemyCriticalRate += 15;
                Debug.Log($"{enemy.name}: スキル{Skill.必殺} 効果{Skill.必殺.GetStringValue()}");
            }

            if (isEnemyBerserk)
            {
                enemyCriticalRate += 20;
                Debug.Log($"{enemy.name}: スキル{Skill.狂化} 効果{Skill.狂化.GetStringValue()}");
            }

            enemyCriticalRate = CorrectParameter(enemyCriticalRate);
            battleParameterDTO.enemyCiritcalRate = enemyCriticalRate;
        }

        ///追撃の計算 追撃は攻速差4以上 攻速 = 速さ-{武器の重さ-(力/5)}
        ///勇者武器は今はガン無視で
        int unitAttackSpeed  = unitAgi - unitWeapon.delay;
        int enemyAttackSpeed = enemyAgi;

        if (enemy.equipWeapon != null)
        {
            enemyAttackSpeed -= enemy.equipWeapon.delay;
        }

        unitChaseFlag  = false;
        enemyChaseFlag = false;

        //ユニットも敵も追撃可能という状況は有り得ないのでelse
        //210220 追撃不可武器を作成
        if ((unitAttackSpeed - enemyAttackSpeed) >= 4 && unitWeapon.isChaseInvalid == false)
        {
            unitChaseFlag = true;
        }
        else if ((enemyAttackSpeed - unitAttackSpeed) >= 4 && enemy.equipWeapon.isChaseInvalid == false)
        {
            enemyChaseFlag = true;
        }

        //自分か敵が宵闇の守りを持っていれば互いに追撃不可
        if (unit.job.skills.Contains(Skill.宵闇の守り) || enemy.job.skills.Contains(Skill.宵闇の守り))
        {
            Debug.Log($"スキル{Skill.宵闇の守り}発動 : 互いに追撃不可");
            unitChaseFlag  = false;
            enemyChaseFlag = false;
        }

        //スキル「切り返し」実装 一旦、宵闇の守りより優先度高い
        if (!isPlayerAttack && unit.job.skills.Contains(Skill.切り返し))
        {
            //敵から攻撃された時
            unitChaseFlag = true;
            Debug.Log($"{unit.name}: スキル{Skill.切り返し} 効果{Skill.切り返し.GetStringValue()}");
        }
        else if (isPlayerAttack && enemy.job.skills.Contains(Skill.切り返し))
        {
            //敵を攻撃した時
            enemyChaseFlag = true;
            Debug.Log($"{enemy.name}: スキル{Skill.切り返し} 効果{Skill.切り返し.GetStringValue()}");
        }



        battleParameterDTO.unitName       = unit.name;
        battleParameterDTO.enemyName      = enemy.name;
        battleParameterDTO.unitWeaponName = unitWeapon.name;

        //210220 雑に勇者フラグをDTOに入れる
        //自分から攻撃した場合のみ2回攻撃なので、そうでなければフラグを倒してしまう
        if (unitWeapon.isYuusha && isPlayerAttack)
        {
            battleParameterDTO.isUnitYuusha = true;
        }
        else
        {
            battleParameterDTO.isUnitYuusha = false;
        }

        if (enemy.equipWeapon != null)
        {
            battleParameterDTO.enemyWeaponName = enemy.equipWeapon.name;

            if (enemy.equipWeapon.isYuusha && !isPlayerAttack)
            {
                battleParameterDTO.isEnemyYuusha = true;
            }
            else
            {
                battleParameterDTO.isEnemyYuusha = false;
            }
        }

        battleParameterDTO.unitHp     = unit.hp;
        battleParameterDTO.unitMaxHp  = unitMaxHp;
        battleParameterDTO.enemyHp    = enemy.hp;
        battleParameterDTO.enemyMaxHp = enemyMaxHp;

        battleParameterDTO.unitChaseFlag  = unitChaseFlag;
        battleParameterDTO.enemyChaseFlag = enemyChaseFlag;



        Debug.Log("unitAttackSpeed" + unitAttackSpeed.ToString());
        Debug.Log("enemyAttackSpeed" + enemyAttackSpeed.ToString());

        return(battleParameterDTO);
    }
Beispiel #16
0
    //ステータス表示(敵)
    public void updateText(Enemy enemy)
    {
        //職業補正を取得
        JobStatusDto jobStatusDto = enemy.job.statusDto;

        //名前、レベル、職業、移動力
        this.name.text  = enemy.name;
        this.race.text  = enemy.race.GetStringValue();
        this.lvNum.text = enemy.lv.ToString();
        this.job.text   = enemy.job.jobName.ToString();
        this.exp.text   = "-";  //敵に経験値やレベルアップは存在しない
        this.move.text  = enemy.job.move.ToString();

        //210226移動力計算と文字の色変更
        StatusCalculator statusCalculator = new StatusCalculator();

        int move = statusCalculator.calcMove(enemy);

        this.move.text = move.ToString();

        //経験値ゲージ
        this.expGauge.maxValue = 100;
        this.expGauge.value    = 0; //敵に経験値やレベルアップは存在しない

        //ステータス ユニット基礎値と職業補正の合算を表示する
        int hp   = enemy.maxhp + jobStatusDto.jobHp;
        int latk = enemy.latk + jobStatusDto.jobLatk;
        int catk = enemy.catk + jobStatusDto.jobCatk;
        int agi  = enemy.agi + jobStatusDto.jobAgi;
        int dex  = enemy.dex + jobStatusDto.jobDex;
        int luk  = enemy.luk + jobStatusDto.jobLuk;
        int ldef = enemy.ldef + jobStatusDto.jobLdef;
        int cdef = enemy.cdef + jobStatusDto.jobCdef;

        //キャラの画像を取得
        if (enemy.isBoss)
        {
            statusImage.enabled     = true;
            this.statusImage.sprite = Resources.Load <Sprite>("Image/Charactors/" + enemy.pathName + "/status");
        }
        else
        {
            statusImage.enabled = false;
        }

        //武器レベルを反映
        this.shotLevel.text   = enemy.shotLevel.GetStringValue();
        this.laserLevel.text  = enemy.laserLevel.GetStringValue();
        this.strikeLevel.text = enemy.strikeLevel.GetStringValue();
        this.healLevel.text   = enemy.healLevel.GetStringValue();

        //敵に技能経験値は存在しないので、ゲージ自体非表示
        shotGaugeFrame.SetActive(false);
        laserGaugeFrame.SetActive(false);
        strikeGaugeFrame.SetActive(false);
        healGaugeFrame.SetActive(false);

        if (move != enemy.job.move)
        {
            //バフが掛かってたら色変更
            this.move.color = highLightColor;
        }
        else
        {
            this.move.color = Color.white;
        }


        //210218 武器、装飾品による増加分を反映する スキルのバフもいずれ実装
        StatusDto normalStatus = new StatusDto(hp, latk, catk, agi, dex, ldef, cdef, luk);

        //武器、装飾品、スキルのバフ反映 最大値を上回らないようにして返される
        bool isberserk = false;

        if (enemy.hp != statusCalculator.CalcHpBuff(hp, enemy.job.skills) && enemy.job.skills.Contains(Skill.狂化))
        {
            isberserk = true;
        }
        StatusDto buffedStatus = statusCalculator.GetBuffedStatus(normalStatus, enemy.name, enemy.equipWeapon, enemy.equipAccessory, enemy.job.skills, isberserk);

        GetStatus(normalStatus, buffedStatus);
    }
Beispiel #17
0
 public async Task ReSubmitFailedJobAsync(long jobId, CancellationToken cancellationToken = default(CancellationToken))
 {
     var jobStatusDto = new JobStatusDto(jobId, Convert.ToInt32(JobStatusType.Ready));
     await _httpClientService.SendDataAsync($"{_baseUrl}/api/job/{JobStatusType.Ready}", jobStatusDto, cancellationToken);
 }
Beispiel #18
0
        public ActionResult Post([FromBody] JobStatusDto jobStatusDto)
        {
            if (jobStatusDto == null)
            {
                _logger.LogError($"Job Post request received with empty data for JobStatusDto");
                return(BadRequest());
            }

            _logger.LogInfo("Post for job received for job: {@jobStatusDto} ", new[] { jobStatusDto });

            if (jobStatusDto.JobId == 0)
            {
                _logger.LogWarning("Job Post request received with empty data");
                return(BadRequest());
            }

            if (!Enum.IsDefined(typeof(JobStatusType), jobStatusDto.JobStatus))
            {
                _logger.LogWarning($"Job Post request received with bad status {jobStatusDto.JobStatus}");
                return(BadRequest("Status is not a valid value"));
            }

            try
            {
                var job = _jobManager.GetJobById(jobStatusDto.JobId);
                if (job == null)
                {
                    _logger.LogError($"JobId {jobStatusDto.JobId} is not valid for job status update");
                    return(BadRequest("Invalid job Id"));
                }

                FileUploadJob metaData = _fileUploadJobManager.GetJobById(jobStatusDto.JobId);

                // If we are changing from Waiting to Ready, it means processing should go to second stage
                if (job.Status == JobStatusType.Waiting &&
                    (JobStatusType)jobStatusDto.JobStatus == JobStatusType.Ready)
                {
                    _fileUploadJobManager.UpdateJobStage(job.JobId, !metaData.IsFirstStage);
                }

                bool result = _jobManager.UpdateJobStatus(job.JobId, (JobStatusType)jobStatusDto.JobStatus);

                if (result)
                {
                    _logger.LogInfo($"Successfully updated job status for job Id: {jobStatusDto.JobId}");

                    // Todo: Remove this block of code at some point, it's to make cross loading work when we send a message, but we won't receive a response from the other system.
                    if (job.CrossLoadingStatus == null)
                    {
                        return(Ok());
                    }

                    if ((JobStatusType)jobStatusDto.JobStatus != JobStatusType.Completed)
                    {
                        return(Ok());
                    }

                    if (metaData.IsFirstStage)
                    {
                        return(Ok());
                    }

                    result = _jobManager.UpdateCrossLoadingStatus(job.JobId, JobStatusType.Completed);

                    if (result)
                    {
                        _logger.LogInfo($"Successfully updated cross loading job status for job Id: {jobStatusDto.JobId}");
                        return(Ok());
                    }

                    _logger.LogWarning($"Update cross loading status failed for job Id: {jobStatusDto.JobId}");
                    return(BadRequest());
                }

                _logger.LogWarning($"Update status failed for job Id: {jobStatusDto.JobId}");
                return(BadRequest());
            }
            catch (Exception ex)
            {
                _logger.LogError("Post for job failed for job: {@jobStatusDto}", ex, new[] { jobStatusDto });

                return(BadRequest());
            }
        }