public Command(Player sourcePlayer, Player destinationPlayer, object skillObject, ISkillBase usedSkill) : this()
 {
     SourcePlayer      = sourcePlayer;
     DestinationPlayer = destinationPlayer;
     SkillObject       = skillObject;
     UsedSkill         = usedSkill;
 }
Exemple #2
0
 public void DeleteCommonSkill(ISkillBase skill)
 {
     if (CommonSkills.Contains(skill))
     {
         CommonSkills.Remove(skill);
     }
 }
Exemple #3
0
 public void AddCommonSkill(ISkillBase skill)
 {
     if (!CommonSkills.Contains(skill))
     {
         CommonSkills.Add(skill);
     }
 }
        public void SkillClicked(SkillItem sitem)
        {
            UserCommand_View view = View as UserCommand_View;

            if (_SelectedPlayers.Count <= 0)
            {
                MessageBox.Show("플레이어를 먼저 선택하세요.", "실패");
                sitem.IsSelected = false;
                return;
            }
            int cost = view.CostCounter;

            int sitemCost;

            if (sitem.Skill.Type.HasFlag(SkillType.Basic))
            {
                sitemCost = 1;
            }
            else if (sitem.Skill.Type.HasFlag(SkillType.Ultimate))
            {
                sitemCost = 3;
            }
            else
            {
                sitemCost = 2;
            }
            if (_SelectedSkills.Contains(sitem.Skill))
            {
                _SelectedSkills.Remove(sitem.Skill);
                sitem.IsSelected = false;
                view.CostCounter = cost - sitemCost;
            }
            else
            {
                if (sitem.Skill.Type.HasFlag(SkillType.Ultimate))
                {
                    ISkillBase ultimate = _SelectedSkills.FirstOrDefault(x => x.Type.HasFlag(SkillType.Ultimate));
                    if (ultimate != null)
                    {
                        MessageBox.Show($"해당 플레이어는 이미 궁극기를 선택했습니다.({ultimate.Name})", "실패");
                        sitem.IsSelected = false;
                        return;
                    }
                }
                if (cost + sitemCost > 10)
                {
                    MessageBox.Show($"코스트 초과함. ({cost + sitemCost}/10)");
                    sitem.IsSelected = false;
                }
                else
                {
                    sitem.IsSelected = true;
                    _SelectedSkills.Add(sitem.Skill);
                    view.CostCounter = cost + sitemCost;
                }
            }
        }
Exemple #5
0
        public SkillItem(SkillType type, string name, double skillConst, int cooltime, string description, Func <IPlayer, IPlayer, object, bool> skillFunction) : this()
        {
            Skill = new BasicSkill()
            {
                Type = type, Name = name, ForceConst = skillConst, Cooltime = cooltime, Description = description, SkillFunction = skillFunction
            };

            Lab_Description.Text = Skill.Description;
            string result = Skill.Cooltime < 0 ? "패시브" : Skill.Cooltime.ToString() + "턴";

            result             = Skill.Cooltime >= 999 ? "궁극기" : result;
            Lab_Cooltime.Text  = result;
            Lab_SkillName.Text = Skill.Name;
            string typeText = "";

            if (Skill.Type.HasFlag(SkillType.Defence))
            {
                typeText = SkillType.Defence.ToString();
            }
            if (Skill.Type.HasFlag(SkillType.Offence))
            {
                typeText = SkillType.Offence.ToString();
            }
            if (Skill.Type.HasFlag(SkillType.Heal))
            {
                typeText = SkillType.Heal.ToString();
            }
            if (Skill.Type.HasFlag(SkillType.Basic))
            {
                typeText = SkillType.Basic.ToString();
            }
            Lab_SkillType.Text = typeText;

            Lab_SkillConst.Text = Skill.ForceConst < 0 ? "무제한" : Skill.ForceConst.ToString();
            if (Skill.Type.HasFlag(SkillType.Offence))
            {
                BackColor = Color.FromArgb(234, 153, 153);
            }
            if (Skill.Type.HasFlag(SkillType.Defence))
            {
                BackColor = Color.FromArgb(159, 197, 232);
            }
            if (Skill.Type.HasFlag(SkillType.Heal))
            {
                BackColor = Color.FromArgb(182, 215, 168);
            }
            if (Skill.Type.HasFlag(SkillType.Basic))
            {
                BackColor = Color.FromArgb(255, 229, 153);
            }
            if (Skill.Type.HasFlag(SkillType.Ultimate))
            {
                var font = Lab_SkillName.Font;
                Lab_SkillName.Font = new Font(font, FontStyle.Bold);
            }
        }
Exemple #6
0
        public ISkillBase GetSkillByName(string name)
        {
            ISkillBase result = null;

            try
            {
                result = _SkillList[name];
            }
            catch
            {
            }
            return(result);
        }
Exemple #7
0
        public void InitializeSkillset()
        {
            #region ------------------BasicSkills--------------------
            BasicSkill bs;
            // 이동
            bs = new BasicSkill()
            {
                Name = "이동", Cooltime = 5, ForceConst = -1, RangeType = "Point", RangeConst = null, Type = SkillType.Basic, UsedTurn = -999, Description = "마스레이드에서 이동 제한을 받지 않고, 원하는 마스로 이동할 수 있습니다."
            };
            bs.SetFunction((user, victim, obj) => {
                var p     = ((Point)obj);
                user.PosX = p.X;
                user.PosY = p.Y;
                return(true);
            });
            SkillList.Add(bs.Name, bs);
            // 자가회복
            bs = new BasicSkill()
            {
                Name = "자가회복", Cooltime = 6, ForceConst = 0.2, RangeType = "Ellipse", RangeConst = "3", Type = SkillType.Basic | SkillType.Heal, UsedTurn = -999, Description = "자신의 최대 체력의 20%만큼을 즉시 회복합니다."
            };
            bs.SetFunction((user, victim, obj) => {
                var inner           = SkillList["자가회복"];
                double amountOfHeal = user.MaxHp * inner.ForceConst;
                user.CurrentHp      = user.CurrentHp + amountOfHeal >= user.MaxHp ? user.MaxHp : user.CurrentHp + amountOfHeal;
                return(true);
            });
            SkillList.Add(bs.Name, bs);
            // 연속공격
            bs = new BasicSkill()
            {
                Name = "연속공격", Cooltime = 6, ForceConst = 2, RangeType = "Rectangle", RangeConst = "3,3:1,2", Type = SkillType.Basic | SkillType.Offence, UsedTurn = -999, Description = "다음 턴에 사용하는 스킬이 2회 적용됩니다."
            };
            bs.SetFunction((user, victim, obj) => {
                ISkillBase skill = obj as ISkillBase;
                BuffBase buff    = new BuffBase(user, BuffType.Buff, 1, 1, 1);
                buff.SetSkillFunction(skill.SkillFunction);
                user.Buffs.Add(buff);
                return(true);
            });
            SkillList.Add(bs.Name, bs);
            // 위력 증가
            bs = new BasicSkill()
            {
                Name = "위력 증가", Cooltime = 10, ForceConst = 3, RangeType = "Player", RangeConst = "Self", Type = SkillType.Basic | SkillType.Offence, UsedTurn = -999, Description = "시전 턴을 포함하여 3턴 간 위력이 3 증가합니다."
            };
            bs.SetFunction((user, victim, obj) => {
                var inner       = SkillList["위력 증가"];
                user.GiveConst += inner.ForceConst;
                BuffBase buff   = new BuffBase(user, BuffType.Buff, 3, 3, inner.ForceConst);
                buff.SetSkillFunction((IPlayer src, IPlayer dst, object buffObj) => {
                    src.GiveConst = src.GiveConst - inner.ForceConst < 0 ? 0 : src.GiveConst - inner.ForceConst;
                    return(true);
                });
                user.Buffs.Add(buff);
                return(true);
            });
            SkillList.Add(bs.Name, bs);
            // 방어력 증가
            bs = new BasicSkill()
            {
                Name = "방어력 증가", Cooltime = 10, ForceConst = 3, RangeType = "Player", RangeConst = "Self", Type = SkillType.Basic | SkillType.Defence, UsedTurn = -999, Description = "시전 턴을 포함하여 3턴 간 방어력이 3 증가합니다."
            };
            bs.SetFunction((user, victim, obj) => {
                var inner       = SkillList["방어력 증가"];
                user.HarmConst += inner.ForceConst;
                BuffBase buff   = new BuffBase(user, BuffType.Buff, 1, 1, inner.ForceConst);
                buff.SetSkillFunction((IPlayer src, IPlayer dst, object buffObj) => {
                    src.HarmConst = src.HarmConst - inner.ForceConst < 0 ? 0 : src.HarmConst - inner.ForceConst;
                    return(true);
                });
                user.Buffs.Add(buff);
                return(true);
            });
            SkillList.Add(bs.Name, bs);
            // 도발
            bs = new BasicSkill()
            {
                Name = "도발", Cooltime = 4, ForceConst = -1, RangeType = "Player", RangeConst = "Select", Type = SkillType.Basic | SkillType.Defence, UsedTurn = -999, Description = "대상의 어그로를 사용자 자신에게 향하도록 합니다. 다른 사람이 도발을 사용하거나, 자신이 사망하기 전까지 어그로는 자신에게 향하도록 유지됩니다."
            };
            bs.SetFunction((user, victim, obj) => {
                throw new NotImplementedException();
            });
            SkillList.Add(bs.Name, bs);
            // 주의 분산
            bs = new BasicSkill()
            {
                Name = "주의 분산", Cooltime = 4, ForceConst = -1, RangeType = "Player", RangeConst = "Select", Type = SkillType.Basic | SkillType.Defence, UsedTurn = -999, Description = "자신의 어그로를 대상자에게 즉시 부여합니다. 같은 턴에 여러 사람이 도발을 사용한 경우, 기피를 통해 어그로를 획득한 대상이 1순위 어그로를 획득하게 됩니다."
            };
            bs.SetFunction((user, victim, obj) => {
                throw new NotImplementedException();
            });
            SkillList.Add(bs.Name, bs);
            // 흡혈
            bs = new BasicSkill()
            {
                Name = "흡혈", Cooltime = -1, ForceConst = 3, RangeType = "Player", RangeConst = "Self", Type = SkillType.Basic | SkillType.Offence, UsedTurn = -999, Description = "DoT로 입힌 피해만큼 체력을 회복합니다."
            };
            bs.SetFunction((user, victim, obj) => {
                throw new NotImplementedException();
            });
            SkillList.Add(bs.Name, bs);
            // 전염
            bs = new BasicSkill()
            {
                Name = "전염", Cooltime = -1, ForceConst = -1, RangeType = "Player", RangeConst = "Self", Type = SkillType.Basic | SkillType.Offence | SkillType.Heal, UsedTurn = -999, Description = "DoT 및 HoT시전 시, 지정 대상 기준 범위 내의 다수 대상으로 확장합니다. 범위는 '공격범위' 스탯의 영향을 받습니다."
            };
            bs.SetFunction((user, victim, obj) => {
                throw new NotImplementedException();
            });
            SkillList.Add(bs.Name, bs);
            #endregion  // ------------------BasicSkills----------------------
            #region
            // 일반 공격
            bs = new BasicSkill()
            {
                Name = "일반 공격", Cooltime = 0, ForceConst = 80, RangeType = "Point", RangeConst = null, Type = SkillType.Offence, UsedTurn = -999, Description = "단일 대상에게 시전하는 일반 공격입니다."
            };
            bs.SetFunction((user, victim, obj) => {
                return(true);
            });
            SkillList.Add(bs.Name, bs);

            // 강공격
            bs = new BasicSkill()
            {
                Name = "강공격", Cooltime = 4, ForceConst = 200, RangeType = "Point", RangeConst = null, Type = SkillType.Offence, UsedTurn = -999, Description = "단일 대상에게 시전하는 강한 공격입니다."
            };
            bs.SetFunction((user, victim, obj) => {
                return(true);
            });
            SkillList.Add(bs.Name, bs);

            // 분산공격
            bs = new BasicSkill()
            {
                Name = "분산공격", Cooltime = 1, ForceConst = 50, RangeType = "Ellipse", RangeConst = "3", Type = SkillType.Offence, UsedTurn = -999, Description = "범위 내 다수 대상에게 시전하는 공격입니다. 범위는 '공격범위' 스탯의 영향을 받습니다."
            };
            bs.SetFunction((user, victim, obj) => {
                return(true);
            });
            SkillList.Add(bs.Name, bs);

            // DoT
            bs = new BasicSkill()
            {
                Name = "DoT", Cooltime = 2, ForceConst = 40, RangeType = "Player", RangeConst = "Select", Type = SkillType.Offence | SkillType.OffenceTick, UsedTurn = -999, Description = "단일 대상에게 시전 직후부터 3턴 간 데미지를 입힙니다."
            };
            bs.SetFunction((user, victim, obj) => {
                return(true);
            });
            SkillList.Add(bs.Name, bs);

            // 공격력 증가
            bs = new BasicSkill()
            {
                Name = "공격력 증가", Cooltime = 6, ForceConst = 3, RangeType = "Player", RangeConst = "Self", Type = SkillType.Offence, UsedTurn = -999, Description = "시전 턴을 포함하여 4턴 간 위력과 받는 피해량이 증가합니다."
            };
            bs.SetFunction((user, victim, obj) => {
                return(true);
            });
            SkillList.Add(bs.Name, bs);

            // 접근
            bs = new BasicSkill()
            {
                Name = "접근", Cooltime = 3, ForceConst = 50, RangeType = "Point", RangeConst = null, Type = SkillType.Offence, UsedTurn = -999, Description = "대상으로부터 10마스 이내의 거리에 있을 경우, 대상에게 바로 접근하며 공격을 가합니다."
            };
            bs.SetFunction((user, victim, obj) => {
                return(true);
            });
            SkillList.Add(bs.Name, bs);

            // 후퇴
            bs = new BasicSkill()
            {
                Name = "후퇴", Cooltime = 3, ForceConst = 50, RangeType = "Point", RangeConst = null, Type = SkillType.Offence, UsedTurn = -999, Description = "대상의 위치와 현재 위치를 기준으로 하여 직선거리로 10마스만큼 뒤로 이동합니다."
            };
            bs.SetFunction((user, victim, obj) => {
                return(true);
            });
            SkillList.Add(bs.Name, bs);

            // 단일대상-궁극기
            bs = new BasicSkill()
            {
                Name = "단일대상-궁극기", Cooltime = 999, ForceConst = 800, RangeType = "Player", RangeConst = "Select", Type = SkillType.Offence | SkillType.Ultimate, UsedTurn = -999, Description = "단일 대상에 대한 가장 강력한 공격을 가합니다. 해당 스킬은 전투 중 1회만 사용 가능하며, 사용 직후 2턴 간 커맨드 입력이 불가능해집니다."
            };
            bs.SetFunction((user, victim, obj) => {
                return(true);
            });
            SkillList.Add(bs.Name, bs);

            // 다수대상-궁극기
            bs = new BasicSkill()
            {
                Name = "다수대상-궁극기", Cooltime = 999, ForceConst = 400, RangeType = "Ellipse", RangeConst = "3", Type = SkillType.Offence | SkillType.Ultimate, UsedTurn = -999, Description = "다수 대상에 대한 가장 강력한 공격을 가합니다. 해당 스킬은 전투 중 1회만 사용 가능하며, 사용 직후 2턴 간 커맨드 입력이 불가능해집니다."
            };
            bs.SetFunction((user, victim, obj) => {
                return(true);
            });
            SkillList.Add(bs.Name, bs);
            #endregion  // ------------------Attack Skills--------------------
            #region ------------------Boss Skills--------------------
            #region 승리

            #endregion
            #endregion
        }
Exemple #8
0
 public void SetUltimate(ISkillBase skill)
 {
     UltimateSkill = skill;
 }
Exemple #9
0
 public void AddSkill(ISkillBase skill)
 {
     _CommonSkills.Add(skill);
 }