/// <summary> /// 投げる効果(誰かに当たった時) /// </summary> private bool ThrowActionEffect(ManageDungeon dun, PlayerCharacter player, BaseCharacter target) { switch (BType) { case BallType.Fire: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Bomb); int damage = FireBallFixDamage + Mathf.FloorToInt(player.BaseAttack * 2); AttackState atState = target.AddDamage(damage); //ボールエフェクト EffectFireBallLanding.CreateObject(target).Play(); //ダメージエフェクト EffectDamage d = EffectDamage.CreateObject(target); d.SetText(damage.ToString(), AttackState.Hit); d.Play(); //ヒットメッセージ DisplayInformation.Info.AddMessage( target.GetMessageAttackHit(damage)); //対象が死亡したら if (atState == AttackState.Death) { if (target.Type == ObjectType.Player) { ScoreInformation.Info.CauseDeath = string.Format(CommonConst.DeathMessage.Item, this.DisplayNameNormal); ScoreInformation.Info.CauseDeathType = DeathCouseType.Item; } DisplayInformation.Info.AddMessage( target.GetMessageDeath(target.HaveExperience)); player.Death(target, player.AttackInfo); target.DeathAction(dun); } break; case BallType.Gyro: SoundInformation.Sound.Play(SoundInformation.SoundType.BucketFall); //ターゲットが吹き飛ぶ先のポイントを取得 bool isWall; MapPoint point = dun.GetBlow(target.CurrentPoint, Direction, out isWall); //対象のポイントが取得できなければ if (CommonFunction.IsNull(point) == true) { } //対象ポイントが取得できればそこに移動 else { if (typeof(BaseEnemyCharacter) == target.GetType()) { ((BaseEnemyCharacter)target).MoveState = EnemySearchState.FightPlayer; } DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.BlowCharacter, target.DisplayNameInMessage)); target.BlowDirection = Direction; target.BlowPoint = point; target.MoveSpeed = CommonConst.SystemValue.MoveSpeedDash; dun.MoveCharacter(point, target); //対象に衝突ダメージ if (isWall == true) { target.BlowAfterDamage = GyroFixDamage; } //吹っ飛び先に誰かがいた場合 MapPoint vector = CommonFunction.CharacterDirectionVector[Direction]; MapPoint next = MapPoint.Get(point.X + vector.X, point.Y + vector.Y); BaseCharacter second = dun.CharacterMap.Get(point.X, point.Y); if (CommonFunction.IsNull(second) == false) { second.BlowAfterDamage = GyroFixDamage; second.BlowPoint = second.CurrentPoint; } } break; case BallType.Change: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); if (typeof(BaseEnemyCharacter) == target.GetType()) { ((BaseEnemyCharacter)target).MoveState = EnemySearchState.FightPlayer; } //ターゲットとプレイヤーの場所を交換 EffectSmoke.CreateObject(target).Play(); EffectSmoke.CreateObject(player).Play(); MapPoint tarp = target.CurrentPoint; target.SetPosition(player.CurrentPoint.X, player.CurrentPoint.Y); player.SetPosition(tarp.X, tarp.Y); DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.ChangePoint, target.DisplayNameInMessage)); break; case BallType.Pickoff: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //対象に混乱を付与 int result = target.AddStateAbnormal((int)StateAbnormal.Confusion); //対象が混乱になったらメッセージを表示 if (result != 0) { EffectSmoke.CreateObject(target).Play(); DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Confusion, target)); } break; case BallType.Bean: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //対象に麻痺を付与 int bresult = target.AddStateAbnormal((int)StateAbnormal.Palalysis); //対象が麻痺になったらメッセージを表示 if (bresult != 0) { EffectSmoke.CreateObject(target).Play(); DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Palalysis, target)); } break; case BallType.Decoy: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //対象にデコイを付与 int dresult = target.AddStateAbnormal((int)StateAbnormal.Decoy); //対象がデコイになったらメッセージを表示 if (dresult != 0) { EffectSmoke.CreateObject(target).Play(); DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Decoy, target)); } break; case BallType.Slow: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //対象にスローを付与 int sresult = target.AddStateAbnormal((int)StateAbnormal.Slow); //対象がスローになったらメッセージを表示 if (sresult != 0) { EffectSmoke.CreateObject(target).Play(); DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Slow, target)); } break; //ナックル case BallType.Knuckle: List <BallType> blist = new List <BallType>(); foreach (BallType val in Enum.GetValues(typeof(BallType))) { blist.Add(val); } blist.Remove(BallType.Knuckle); blist.Remove(BallType.Handmaid); //ナックル以外の効果をランダムで取得 BallType temp = blist[UnityEngine.Random.Range(0, blist.Count)]; BallBase b = new BallBase(); b.CurrentPoint = CurrentPoint; b.Direction = Direction; b.BType = temp; //効果を発動 b.ThrowActionEffect(dun, player, target); break; case BallType.Trap: TrapBreaker(dun, player); break; case BallType.Handmaid: //ヒットエフェクト EffectFireBallLanding.CreateObject(target).Play(); //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.AttackHit); //範囲拡大がついているとき int plus; float cf; int dist = 0; if (CommonFunction.HasOptionType(this.Options, OptionType.Wildfire, out plus, out cf) == true) { dist = plus; } dun.SetUpCharacterMap(); List <BaseCharacter> targets = dun.GetNearCharacters(target.CurrentPoint, dist, true); foreach (BaseCharacter t in targets) { //int damage2 = FireBallFixDamage + Mathf.FloorToInt(player.BaseAttack * 2); int damage2 = Mathf.FloorToInt((15 + player.BaseAttack) / (target.CurrentPoint.DistanceAbs(t.CurrentPoint) + 1)); //効果増幅があったら if (CommonFunction.HasOptionType(this.Options, OptionType.EffectUp, out plus, out cf) == true) { damage2 = damage2 + plus * (int)cf; } //効果縮小があったら if (CommonFunction.HasOptionType(this.Options, OptionType.EffectDown, out plus, out cf) == true) { damage2 = damage2 - plus * (int)cf; } //ダメージ増減30% float rand = 0.3f; if (CommonFunction.HasOptionType(this.Options, OptionType.EffectStabile, out plus, out cf) == true) { rand -= cf * plus; } else if (CommonFunction.HasOptionType(this.Options, OptionType.EffectNotStabile, out plus, out cf) == true) { rand += cf * plus; } damage2 += Mathf.CeilToInt(UnityEngine.Random.Range(-rand * damage2, rand * damage2)); //通常ダメージの場合 if (CommonFunction.HasOptionType(this.Options, OptionType.ReverceDamage) == false) { AttackState atState2 = t.AddDamage(damage2); //ダメージエフェクト EffectDamage d2 = EffectDamage.CreateObject(t); d2.SetText(damage2.ToString(), AttackState.Hit); d2.Play(); //ヒットメッセージ DisplayInformation.Info.AddMessage( t.GetMessageAttackHit(damage2)); //対象が死亡したら if (atState2 == AttackState.Death) { DisplayInformation.Info.AddMessage( t.GetMessageDeath(t.HaveExperience)); if (t.Type == ObjectType.Player) { ScoreInformation.Info.CauseDeath = string.Format(CommonConst.DeathMessage.Item, this.DisplayNameNormal); ScoreInformation.Info.CauseDeathType = DeathCouseType.Item; t.Death(); } else { if (IsExp == true) { player.Death(t, player.AttackInfo); } else { t.Death(); } } t.DeathAction(dun); } } //基本効果反転 else { t.RecoverHp(damage2); //ヒットエフェクト EffetHitShockWave.CreateObject(t).Play(); //ダメージエフェクト EffectDamage d2 = EffectDamage.CreateObject(t); d2.SetText(damage2.ToString(), AttackState.Heal); d2.Play(); //ヒットメッセージ DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.RecoverHp, t.DisplayNameInMessage)); } } //状態異常の付与 EffectAbnormal(targets); //火柱があれば火柱を立てる if (CommonFunction.HasOptionType(this.Options, OptionType.CatchingFire) == true) { dun.SetUpTrapMap(); if (CommonFunction.IsNull(dun.TrapMap.Get(CurrentPoint)) == true) { BaseTrap trap = TableTrap.GetTrap(CommonConst.ObjNo.Ember); trap.Options = CommonFunction.CloneOptions(this.Options); trap.IsVisible = true; trap.SetThisDisplayTrap(CurrentPoint.X, CurrentPoint.Y); dun.AddNewTrap(trap); DisplayInformation.Info.AddMessage( CommonConst.Message.TrapEmber); } } break; case BallType.Fumble: //対象のレベルが2以上ならレベルを下げる if (target.Level > 1) { if (target.Type == ObjectType.Enemy) { BaseEnemyCharacter enemy = ((BaseEnemyCharacter)target); enemy.Level--; TableEnemy.SetLevel(enemy, enemy.Level, DisplayInformation.Info.Floor, DungeonInformation.Info.EnemyHpProb, DungeonInformation.Info.EnemyAtkProb, DungeonInformation.Info.EnemyExpProb, DungeonInformation.Info.StartProbHp, DungeonInformation.Info.StartProbAtk, DungeonInformation.Info.StartProbExp); DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.LevelDownPlayer, enemy.DisplayNameInMessage)); EffectBadSmoke.CreateObject(enemy).Play(); } } break; case BallType.Winning: if (target.Type == ObjectType.Enemy) { BaseEnemyCharacter enemy = ((BaseEnemyCharacter)target); enemy.Level++; TableEnemy.SetLevel(enemy, enemy.Level, DisplayInformation.Info.Floor, DungeonInformation.Info.EnemyHpProb, DungeonInformation.Info.EnemyAtkProb, DungeonInformation.Info.EnemyExpProb, DungeonInformation.Info.StartProbHp, DungeonInformation.Info.StartProbAtk, DungeonInformation.Info.StartProbExp); DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.LevelUpPlayer, enemy.DisplayNameInMessage)); EffectFlareCore.CreateObject(enemy).Play(); } break; case BallType.Four: if (target.Type == ObjectType.Enemy) { BaseEnemyCharacter enemy = ((BaseEnemyCharacter)target); if (enemy.IsFourBallCount() == true) { int dam = Mathf.CeilToInt(enemy.MaxHp); AttackState atstate = target.AddDamage(dam); //ボールエフェクト EffetHitShockWave.CreateObject(enemy).Play(); //ダメージエフェクト EffectDamage dt = EffectDamage.CreateObject(target); dt.SetText(dam.ToString(), AttackState.Hit); dt.Play(); //ヒットメッセージ DisplayInformation.Info.AddMessage( target.GetMessageAttackHit(dam)); SoundInformation.Sound.Play(SoundInformation.SoundType.AttackHit); //対象が死亡したら if (atstate == AttackState.Death) { if (target.Type == ObjectType.Player) { ScoreInformation.Info.CauseDeath = string.Format(CommonConst.DeathMessage.Item, this.DisplayNameNormal); ScoreInformation.Info.CauseDeathType = DeathCouseType.Item; } DisplayInformation.Info.AddMessage( target.GetMessageDeath(target.HaveExperience)); player.Death(target, player.AttackInfo); target.DeathAction(dun); } } else { SoundInformation.Sound.Play(SoundInformation.SoundType.AttackHit); //ボールエフェクト EffetHitShockWave.CreateObject(enemy).Play(); } } break; case BallType.Emery: if (target.Type == ObjectType.Enemy) { BaseEnemyCharacter enemy = ((BaseEnemyCharacter)target); if (enemy.IsBoss() == false) { GameStateInformation.Info.EmeryTarget = target.ObjNo; DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.EmeryCharacter, target.DisplayNameInMessage)); List <BaseCharacter> emeryies = dun.Characters.FindAll(i => i.ObjNo == target.ObjNo); SoundInformation.Sound.Play(SoundInformation.SoundType.Summon); foreach (BaseCharacter c in emeryies) { EffectSmoke.CreateObject(c, false).Play(); dun.RemoveCharacter(c); ManageDungeon.KillObjectNow(c); } } } break; } Options = null; return(true); }
/// <summary> /// 使う全般 /// </summary> public bool CommonUseItem(BaseCharacter player) { //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Recover); //満腹度の回復 if (SatRecoverPoint > 0) { if (typeof(PlayerCharacter) == player.GetType()) { ((PlayerCharacter)player).AddSatiety(SatRecoverPoint); if (((PlayerCharacter)player).IsSatietyMax == true) { DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.RecoverSatietyMax)); } else { DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.RecoverSatiety)); } } } //HPの回復 if (HpRecoverPoint > 0) { player.RecoverHp(HpRecoverPoint); DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.RecoverHp, player.DisplayNameInMessage)); //回復エフェクト EffectDamage d = EffectDamage.CreateObject(player); d.SetText(HpRecoverPoint.ToString(), AttackState.Heal); d.Play(); } //状態の回復 if (StatusRecoverTarget != 0) { foreach (StateAbnormal val in CommonFunction.StateAbnormals) { //対象の状態異常を含んでいなければ無視 if ((StatusRecoverTarget & (int)val) == 0) { continue; } //状態異常の回復に成功したら int ret = player.RecoverState((int)val); if (ret != 0) { player.RemoveAbnormalObject(val); DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.RecoverState, CommonFunction.StateNames[val])); } } } //状態異常の付与 if (StatusBadTarget != 0) { int state = player.AddStateAbnormal(StatusBadTarget); bool isBad = false; foreach (StateAbnormal val in CommonFunction.StateAbnormals) { if ((state & (int)val) != 0) { DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(val, player)); if (CommonFunction.BadAbnormals.Contains(val)) { isBad = true; } } } if (state != 0) { if (isBad == true) { EffectBadSmoke.CreateObject(player).Play(); //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); } else { EffectSmoke.CreateObject(player).Play(); } } } return(true); }
public virtual AttackState Attack(ManageDungeon dun, BaseCharacter target, BaseCharacter attacker, int power, AttackInformation atinf) { int damage = 0; atinf.AddTarget(target); //声を鳴らす atinf.AddVoice(attacker.VoiceAttack()); //攻撃の命中判定 if (CommonFunction.IsRandom(WeaponDexterity) == true) { //行動タイプを設定 atinf.SetBehType(BehaviorType.Attack); //命中したら atinf.AddHit(target, true); //声を鳴らす atinf.AddVoice(target.VoiceDefence()); //サウンドを鳴らす atinf.AddSound(GetAttackHitSound()); BaseOption[] atoptions = attacker.Options; BaseOption[] tgoptions = target.Options; //与ダメージを計算 damage = CalcDamage(dun, attacker, target, power, atoptions, tgoptions, 1); //スコア関連値の更新 if (target.Type == ObjectType.Enemy) { TotalDamage += damage; if (ScoreInformation.Info.MostUseWeaponDamage < TotalDamage) { ScoreInformation.Info.MostUseWeaponDamage = TotalDamage; ScoreInformation.Info.MostUseWeaponName = DisplayNameNormal; } ScoreInformation.Info.AddScore(damage); } //atinf.AddDamage(target.Name, damage); ////ヒットメッセージ //atinf.AddMessage( // target.GetMessageAttackHit(this.DisplayNameInMessage, damage)); ////ダメージ判定 //AttackState atState = target.AddDamage(damage); //ダメージ追加 AttackState atState = CommonFunction.AddDamage(atinf, attacker, target, damage); //ガラスアイテム判定 WeaponBase atw = attacker.EquipWeapon; foreach (BaseOption op in atw.Options) { if (op.IsBreak() == true) { atinf.AddSound(SoundInformation.SoundType.Break); atinf.AddMessage( string.Format(CommonConst.Message.BreakItem, atw.DisplayNameInMessage)); atw.ForceRemoveEquip(attacker); PlayerCharacter.RemoveItem(atw); } } ShieldBase tgs = target.EquipShield; foreach (BaseOption op in tgs.Options) { if (op.IsBreak() == true) { atinf.AddSound(SoundInformation.SoundType.Break); atinf.AddMessage( string.Format(CommonConst.Message.BreakItem, tgs.DisplayNameInMessage)); tgs.ForceRemoveEquip(target); PlayerCharacter.RemoveItem(tgs); } } //対象が死亡したら if (atState == AttackState.Death) { atinf.AddKillList(target); atinf.AddMessage( target.GetMessageDeath(target.HaveExperience)); } else { //atinf.IsDeath.Add(target.Name, false); addabnormal.Clear(); prevents.Clear(); foreach (StateAbnormal val in CommonFunction.StateAbnormals) { prevents.Add(val, 0); addabnormal.Add(val, AddAbnormalProb[val]); } int opab = 0; //オプションの付加値設定 foreach (BaseOption o in atoptions) { int ab = o.SetAbnormalAttack(addabnormal); opab = opab | ab; } int tarabn = AddAbnormal | opab; if (tarabn != 0) { //オプションによる状態異常の取得 //foreach (StateAbnormal val in CommonFunction.StateAbnormals) //{ // addabnormal.Add(val, 0); //} //オプションの抵抗値設定 foreach (BaseOption o in tgoptions) { o.SetAbnormalPrevent(prevents); } int abn = 0; //状態異常の付与 foreach (StateAbnormal val in CommonFunction.StateAbnormals) { int abnormal = (int)val & tarabn; //対象の状態異常を処理 if (abnormal != 0) { //float prob = prevents[val] > AddAbnormalProb[val] ? prevents[val] : AddAbnormalProb[val]; //状態異常付与が成功したとき if (CommonFunction.IsRandom(addabnormal[val]) == true) { //抵抗に成功したとき if (CommonFunction.IsRandom(prevents[val]) == true) { } else { int addstate = target.AddStateAbnormal(abnormal); if (addstate != 0) { abn += abnormal; //atinf.AddAbnormal(target, abnormal); atinf.AddMessage( CommonFunction.GetAbnormalMessage(val, target)); } } } } } if (abn != 0) { atinf.AddEffect(EffectBadSmoke.CreateObject(target)); atinf.AddAbnormal(target, abn); } } } //エフェクトをかける this.AttackEffect(target, attacker, damage.ToString(), AttackState.Hit, atinf); return(atState); } else { //外れた場合 atinf.AddHit(target, false); EffectDamage d = EffectDamage.CreateObject(target); d.SetText("Miss", AttackState.Miss); atinf.AddEffect(d); atinf.AddSound(GetAttackMissSound()); atinf.AddMessage( target.GetMessageAttackMiss()); return(AttackState.Miss); } }
public bool Invocate(ManageDungeon dun) { if (IsInvocation == false) { return(false); } IsActive = true; IsInvocation = false; int bresult; //オプションによるトラップ回避 float t = 0; foreach (BaseOption o in Target.Options) { t += o.DexTrap(); } if (CommonFunction.IsRandom(t) == true) { DisplayInformation.Info.AddMessage(CommonConst.Message.DexTrap); Target = null; return(false); } //スコア値の更新 DungeonHistoryInformation.Info.iTrapInvokeCount++; //サウンドを鳴らす if (Target.Type == ObjectType.Player) { VoiceInformation.Voice.Play(PlayerInformation.Info.PType, VoiceInformation.Voice.PlayRandomDefence()); } bool result = false; //効果発動 switch (TType) { case TrapType.Bomb: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Bomb); //エフェクトの発動 EffectBigBang.CreateObject(this).Play(); //ダメージ処理 int damage = Mathf.CeilToInt(Target.CurrentHp / PerPlayerDamage); AttackState atState = Target.AddDamage(damage); //プレイヤーが死亡したら if (atState == AttackState.Death) { DisplayInformation.Info.AddMessage( Target.GetMessageDeath(Target.HaveExperience)); ScoreInformation.Info.CauseDeath = string.Format(CommonConst.DeathMessage.Trap, DisplayNameNormal); ScoreInformation.Info.CauseDeathType = DeathCouseType.Trap; Target.Death(); Target.DeathAction(dun); } //ダメージエフェクト EffectDamage d = EffectDamage.CreateObject(Target); d.SetText(damage.ToString(), AttackState.Hit); d.Play(); //ヒットメッセージ DisplayInformation.Info.AddMessage( Target.GetMessageAttackHit(damage)); //周辺キャラのダメージ処理 dun.SetUpCharacterMap(); List <BaseCharacter> list = dun.GetNearCharacters(this.CurrentPoint, 1); foreach (BaseCharacter c in list) { atState = c.AddDamage(CommonNumber); EffectDamage d2 = EffectDamage.CreateObject(c); d2.SetText(CommonNumber.ToString(), AttackState.Hit); d2.Play(); //対象が死亡したら if (atState == AttackState.Death) { DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.DeathCommon, c.DisplayNameInMessage)); c.Death(); c.DeathAction(dun); } } result = true; break; case TrapType.ColorMonitor: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //エフェクトの発動 EffectColorMonitor.CreateObject(this).Play(); //効果 bresult = Target.AddStateAbnormal((int)StateAbnormal.StiffShoulder); //対象が異常になったらメッセージを表示 if (bresult != 0) { DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.StiffShoulder, Target)); } result = true; break; case TrapType.Cyclone: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Cyclone); //エフェクトの発動 EffectCyclone.CreateObject(Target).Play(); //メッセージの出力 DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.TrapCyclone2, Target.DisplayNameInMessage)); //効果 result = true; break; case TrapType.Electric: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.ElectricTrap); //エフェクトの発動 EffectThunder.CreateObject(Target).Play(); BaseItem[] equips = PlayerCharacter.ItemList.FindAll(i => i.IsEquip == true).ToArray(); if (equips.Length > 0) { foreach (BaseItem i in equips) { i.ForceRemoveEquip(Target); } DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.TrapEquipRemove, Target.DisplayNameInMessage)); } result = true; break; case TrapType.Mud: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //エフェクトの発動 EffectBadSmoke.CreateObject(Target).Play(); //効果 bresult = Target.AddStateAbnormal((int)StateAbnormal.Slow); //対象が異常になったらメッセージを表示 if (bresult != 0) { DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Slow, Target)); } result = true; break; case TrapType.Palalysis: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //エフェクトの発動 EffectBadSmoke.CreateObject(Target).Play(); //効果 bresult = Target.AddStateAbnormal((int)StateAbnormal.Palalysis); //対象が異常になったらメッセージを表示 if (bresult != 0) { DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Palalysis, Target)); } result = true; break; case TrapType.Photo: if (Target.Type == ObjectType.Player) { //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //エフェクトの発動 EffectBadSmoke.CreateObject(Target).Play(); //メッセージの出力 DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.TrapCroquette2, Target.DisplayNameInMessage)); ((PlayerCharacter)Target).ReduceSatiety(CommonNumber); result = true; } break; case TrapType.Poison: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //エフェクトの発動 EffectBadSmoke.CreateObject(Target).Play(); //効果 bresult = Target.AddStateAbnormal((int)StateAbnormal.Poison); //対象が異常になったらメッセージを表示 if (bresult != 0) { DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Poison, Target)); } result = true; break; case TrapType.DeadlyPoison: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //エフェクトの発動 EffectBadSmoke.CreateObject(Target).Play(); //効果 bresult = Target.AddStateAbnormal((int)StateAbnormal.DeadlyPoison); //対象が異常になったらメッセージを表示 if (bresult != 0) { DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.DeadlyPoison, Target)); } result = true; break; case TrapType.Rotation: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Rotation); //エフェクトの発動 EffectRotation.CreateObject(Target).Play(); //効果 bresult = Target.AddStateAbnormal((int)StateAbnormal.Confusion); //対象が異常になったらメッセージを表示 if (bresult != 0) { EffectSmoke.CreateObject(Target); DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Confusion, Target)); } result = true; break; case TrapType.SandStorm: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Cyclone); //エフェクトの発動 EffectSandStorm.CreateObject(Target).Play(); //効果 bresult = Target.AddStateAbnormal((int)StateAbnormal.Dark); //対象が異常になったらメッセージを表示 if (bresult != 0) { DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Dark, Target)); } result = true; break; case TrapType.Song: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //エフェクトの発動 EffectBadSmoke.CreateObject(Target).Play(); //効果 bresult = Target.AddStateAbnormal((int)StateAbnormal.Sleep); //対象が異常になったらメッセージを表示 if (bresult != 0) { DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Sleep, Target)); } result = true; break; case TrapType.Summon: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Summon); //エフェクトの発動 EffectSummon.CreateObject(Target).Play(); int cnt = CommonFunction.ConvergenceRandom(CountStart, ProbStart, ProbReduce); for (int i = 0; i < cnt; i++) { dun.SetUpCharacterMap(); //敵の出現地点を取得 MapPoint mp = dun.GetCharacterEmptyTarget(Target.CurrentPoint); if (CommonFunction.IsNull(mp) == true) { break; } int enemytype = TableEnemyMap.GetValue(dun.DungeonObjNo, DisplayInformation.Info.Floor); uint rand = CommonFunction.GetRandomUInt32(); BaseEnemyCharacter enemy = TableEnemyIncidence.GetEnemy(enemytype, rand, DisplayInformation.Info.Floor); enemy.SetCharacterDisplayObject(mp.X, mp.Y); dun.AddNewCharacter(enemy); } DisplayInformation.Info.AddMessage( CommonConst.Message.TrapSummon); result = true; break; case TrapType.TheFly: if (Target.Type == ObjectType.Player) { //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //エフェクトの発動 EffectBadSmoke.CreateObject(Target).Play(); BaseItem[] foods = PlayerCharacter.ItemList.FindAll(i => i.IType == ItemType.Food).ToArray(); if (foods.Length > 0) { foreach (BaseItem i in foods) { PlayerCharacter.RemoveItem(i); ((PlayerCharacter)Target).AddItem(TableFood.GetItem(CommonConst.ObjNo.FlyCroquette), i.SortNo); } //メッセージの出力 DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.TrapFly2)); } result = true; } break; case TrapType.WaterBucket: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.BucketFall); //エフェクトの発動 EffectWaterBucket.CreateObject(Target).Play(); //効果 bresult = Target.AddStateAbnormal((int)StateAbnormal.Reticent); //対象が異常になったらメッセージを表示 if (bresult != 0) { DisplayInformation.Info.AddMessage( CommonFunction.GetAbnormalMessage(StateAbnormal.Reticent, Target)); } result = true; break; //花粉 case TrapType.Pollen: //サウンドを鳴らす SoundInformation.Sound.Play(SoundInformation.SoundType.Smoke); //エフェクトの発動 EffectSmoke d3 = EffectSmoke.CreateObject(Target); d3.SetColor(Color.yellow); d3.Play(); //力減少 Target.ReducePower((ushort)CommonNumber); //メッセージの出力 DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.TrapPllen2, Target.DisplayNameInMessage)); result = true; break; case TrapType.Ember: //ダメージ処理 int damage2 = CommonNumber; //通常ダメージの場合 if (CommonFunction.HasOptionType(this.Options, OptionType.ReverceDamage) == false) { AttackState atState2 = Target.AddDamage(damage2); //ダメージエフェクト EffectDamage d4 = EffectDamage.CreateObject(Target); d4.SetText(damage2.ToString(), AttackState.Hit); d4.Play(); DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.TrapDamage, Target.DisplayNameInMessage, this.DisplayNameInMessage, damage2)); //対象が死亡したら if (atState2 == AttackState.Death) { DisplayInformation.Info.AddMessage( Target.GetMessageDeath(Target.HaveExperience)); if (Target.Type == ObjectType.Player) { ScoreInformation.Info.CauseDeath = string.Format(CommonConst.DeathMessage.Trap, DisplayNameNormal); ScoreInformation.Info.CauseDeathType = DeathCouseType.Trap; } Target.Death(); Target.DeathAction(dun); } } //反転回復の場合 else { Target.RecoverHp(damage2); //ダメージエフェクト EffectDamage d4 = EffectDamage.CreateObject(Target); d4.SetText(damage2.ToString(), AttackState.Heal); d4.Play(); DisplayInformation.Info.AddMessage( string.Format(CommonConst.Message.TrapRecover, Target.DisplayNameInMessage, this.DisplayNameInMessage, damage2)); } break; } Target = null; return(result); }