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; } }
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()); }
//表示した時に呼んで初期化 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; }
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); }
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"); }
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); } }
/// <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); }
//コンストラクタ 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; }
/// <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); }
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"); }
//テキスト更新 //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); }
/// <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); }
//ステータス表示(敵) 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); }
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); }
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()); } }