public bool Promote(SubClasses sClass)
        {
            ISubclass iClass;

            if (!Professions.TryGetValue(sClass, out iClass) || iClass.Promotion >= iClass.Level)
            {
                return(false);
            }

            if (iClass.Promotion + 1 > 9)
            {
                return(false);                          // max level
            }
            iClass.Promotion += 1;
            if (!Save(iClass))
            {
                return(false);
            }

            var sPacket = new MsgSubPro();

            sPacket.Action   = SubClassActions.MARTIAL_PROMOTED;
            sPacket.Subclass = sClass;
            sPacket.WriteByte(iClass.Promotion, 7);
            m_pOwner.Send(sPacket);
            m_pOwner.RecalculateAttributes();
            return(true);
        }
        public void SendStudy()
        {
            var pMsg = new MsgSubPro
            {
                Action      = SubClassActions.UPDATE_STUDY,
                StudyPoints = m_pOwner.StudyPoints
            };

            m_pOwner.Send(pMsg);
        }
 public void LearnAll()
 {
     foreach (var prof in Professions.Values)
     {
         var pMsg = new MsgSubPro
         {
             Action   = SubClassActions.MARTIAL_PROMOTED,
             Subclass = prof.Class
         };
         pMsg.WriteByte(prof.Promotion, 7);
         m_pOwner.Send(pMsg);
     }
 }
        public void SendAll()
        {
            var pMsg = new MsgSubPro
            {
                Action      = SubClassActions.SHOW_GUI,
                StudyPoints = m_pOwner.StudyPoints
            };

            foreach (var prof in Professions.Values)
            {
                pMsg.Append(prof.Class, prof.Promotion, prof.Level);
            }
            m_pOwner.Send(pMsg);
        }
        public bool Create(SubClasses pType)
        {
            if (Professions.ContainsKey(pType))
            {
                return(false);
            }

            var dbClass = new DbSubclass
            {
                Class     = (byte)pType,
                Level     = 1,
                Promotion = 1,
                Userid    = m_pOwner.Identity
            };

            if (!Database.SubclassRepository.SaveOrUpdate(dbClass))
            {
                return(false);
            }

            var pClass = new ISubclass
            {
                Database  = dbClass,
                Class     = pType,
                Level     = 1,
                Promotion = 1
            };

            if (!Professions.TryAdd(pClass.Class, pClass))
            {
                return(false);
            }

            var pMsg = new MsgSubPro
            {
                Action   = SubClassActions.LEARN,
                Subclass = pType
            };

            m_pOwner.Send(pMsg);
            return(true);
        }
Exemple #6
0
        public static void HandleSubPro(Character pUser, MsgSubPro pMsg)
        {
            if (pUser.SubClass == null)
            {
                return;
            }
            switch (pMsg.Action)
            {
            case SubClassActions.SWITCH:
            {
                pUser.SubClass.Active(pMsg.Subclass);
                break;
            }

            case SubClassActions.REQUEST_UPLEV:
            {
                pUser.SubClass.Uplev(pMsg.Subclass);
                break;
            }

            case SubClassActions.MARTIAL_PROMOTED:
            {
                pUser.SubClass.Promote(pMsg.Subclass);
                break;
            }

            case SubClassActions.INFO:
            {
                pUser.SubClass.SendAll();
                break;
            }

            default:
                ServerKernel.Log.SaveLog(string.Format("Not handled [2320:{0}]", pMsg.Action), true, "sys");
                break;
            }
        }
        public bool Active(SubClasses sClass)
        {
            if (sClass == SubClasses.NONE)
            {
                var nsPacket = new MsgSubPro();
                nsPacket.Action   = SubClassActions.ACTIVATE;
                nsPacket.Subclass = 0;
                m_pOwner.Send(nsPacket);
                return(true);
            }

            if (!Professions.ContainsKey(sClass))
            {
                return(false);
            }

            m_pOwner.ActiveSubclass = sClass;
            var sPacket = new MsgSubPro();

            sPacket.Action   = SubClassActions.ACTIVATE;
            sPacket.Subclass = sClass;
            m_pOwner.Send(sPacket);
            return(true);
        }
        public bool Uplev(SubClasses sClass)
        {
            ISubclass iclass;

            if (!Professions.TryGetValue(sClass, out iclass))
            {
                return(false);
            }

            if (iclass.Level + 1 > 10)
            {
                return(false);                       // max level
            }
            switch (sClass)
            {
            case SubClasses.APOTHECARY:
            {
                if (!SpendStudy(LEVEL_STUDY_APOTHECARY[iclass.Level]))
                {
                    return(false);
                }
                break;
            }

            case SubClasses.CHI_MASTER:
            {
                if (!SpendStudy(LEVEL_STUDY_CHI_MASTER[iclass.Level]))
                {
                    return(false);
                }
                break;
            }

            case SubClasses.MARTIAL_ARTIST:
            {
                if (!SpendStudy(LEVEL_STUDY_MARTIAL_ARTIST[iclass.Level]))
                {
                    return(false);
                }
                break;
            }

            case SubClasses.PERFORMER:
            {
                if (!SpendStudy(LEVEL_STUDY_PERFORMER[iclass.Level]))
                {
                    return(false);
                }
                break;
            }

            case SubClasses.SAGE:
            {
                if (!SpendStudy(LEVEL_STUDY_SAGE[iclass.Level]))
                {
                    return(false);
                }
                break;
            }

            case SubClasses.WARLOCK:
            {
                if (!SpendStudy(LEVEL_STUDY_WARLOCK[iclass.Level]))
                {
                    return(false);
                }
                break;
            }

            case SubClasses.WRANGLER:
            {
                if (!SpendStudy(LEVEL_STUDY_WRANGLER[iclass.Level]))
                {
                    return(false);
                }
                break;
            }

            default:
                return(false);
            }

            iclass.Level += 1;
            if (!Save(iclass))
            {
                return(false);
            }
            var sPacket = new MsgSubPro();

            sPacket.Action   = SubClassActions.MARTIAL_UPLEV;
            sPacket.Subclass = sClass;
            m_pOwner.Send(sPacket);
            return(true);
        }