Example #1
0
        public static bool TalentAddCount(GameClient client, int count)
        {
            TalentData talentData = client.ClientData.MyTalentData;
            bool       result;

            if (!talentData.IsOpen)
            {
                result = false;
            }
            else if (!TalentManager.DBTalentModify(client.ClientData.RoleID, count, 0L, 0L, false, client.ClientData.ZoneID, client.ServerId))
            {
                result = false;
            }
            else
            {
                talentData.TotalCount = count;
                GlobalEventSource.getInstance().fireEvent(new OrnamentGoalEventObject(client, OrnamentGoalType.OGT_Talent, new int[0]));
                result = true;
            }
            return(result);
        }
Example #2
0
        private static int TalentAddExp(GameClient client)
        {
            int result;

            if (!GlobalNew.IsGongNengOpened(client, GongNengIDs.Talent, false))
            {
                result = TalentResultType.EnoOpen;
            }
            else if (GameFuncControlManager.IsGameFuncDisabled(GameFuncType.System1Dot6))
            {
                result = TalentResultType.EnoOpen;
            }
            else if (client.ClientData.Experience <= 0L)
            {
                result = TalentResultType.EnoExp;
            }
            else
            {
                TalentData talentData  = client.ClientData.MyTalentData;
                int        talentCount = (talentData.TotalCount <= 0) ? 1 : (talentData.TotalCount + 1);
                if (!TalentManager._TalentExpList.ContainsKey(talentCount))
                {
                    result = TalentResultType.EnoOpenPoint;
                }
                else
                {
                    TalentExpInfo expInfo = TalentManager._TalentExpList[talentCount];
                    int           level   = client.ClientData.ChangeLifeCount * 100 + client.ClientData.Level;
                    if (level < expInfo.RoleLevel)
                    {
                        result = TalentResultType.EnoOpenPoint;
                    }
                    else
                    {
                        long needExp = expInfo.Exp - talentData.Exp;
                        long exp     = 0L;
                        long expRole = client.ClientData.Experience;
                        bool isUp    = false;
                        long expAdd;
                        if (needExp <= expRole)
                        {
                            isUp   = true;
                            expAdd = needExp;
                        }
                        else
                        {
                            exp = talentData.Exp + expRole;
                            talentCount--;
                            expAdd = expRole;
                        }
                        if (!TalentManager.DBTalentModify(client.ClientData.RoleID, talentCount, exp, expAdd, isUp, client.ClientData.ZoneID, client.ServerId))
                        {
                            result = TalentResultType.EFail;
                        }
                        else
                        {
                            if (isUp)
                            {
                                talentData.Exp = exp;
                                talentData.TotalCount++;
                                client.ClientData.Experience -= needExp;
                            }
                            else
                            {
                                talentData.Exp = exp;
                                client.ClientData.Experience -= expRole;
                            }
                            GameManager.ClientMgr.NotifySelfExperience(Global._TCPManager.MySocketListener, Global._TCPManager.TcpOutPacketPool, client, -exp);
                            GlobalEventSource.getInstance().fireEvent(new OrnamentGoalEventObject(client, OrnamentGoalType.OGT_Talent, new int[0]));
                            if (isUp)
                            {
                                result = TalentResultType.Success;
                            }
                            else
                            {
                                result = TalentResultType.SuccessHalf;
                            }
                        }
                    }
                }
            }
            return(result);
        }