Пример #1
0
    private void CauculateNewData(PlayerData data, AutoGuideConfigures configures)
    {
        var cuurentExp   = data.experience;
        var restExp      = configures.exp;
        var currentLevel = data.level;



        while (true)
        {
            var levelUpNeedExp = Common.GetLevelUpExp(data.level) - cuurentExp;
            if (restExp >= levelUpNeedExp)
            {
                currentLevel += 1;
                cuurentExp    = 0;
                restExp      -= levelUpNeedExp;
            }
            else
            {
                data.experience += restExp;
                data.level       = currentLevel;
                break;
            }
        }
    }
Пример #2
0
    public void UpdateUI()
    {
        //根据玩家数据更新UI
        var data = GameRoot.Instance.PlayerData;

        //更新战斗力
        UpdateText(LevelText, data.level);
        UpdateText(FlightText, Common.GetFightPointByData(data));
        UpdateText(PowerText, "体力:" + data.power + "/" + Common.GetPowerLimit(data.level));
        PowerImage.fillAmount = data.power * 1.0f / Common.GetPowerLimit(data.level);
        UpdateText(NameText, data.name);

        #region 经验条
        //获取升级所需要的经验
        var levelUpExp        = Common.GetLevelUpExp(data.level);
        var cuurentPrecentage = (int)(data.experience * 1.0f / levelUpExp * 100);
        UpdateText(ExperienceText, cuurentPrecentage + "%");

        var index = cuurentPrecentage / 10;
        for (int i = 0; i < expRect.childCount; i++)
        {
            if (i < index)
            {
                expRect.GetChild(i).GetComponent <Image>().fillAmount = 1;
            }
            else if (i == index)
            {
                expRect.GetChild(i).GetComponent <Image>().fillAmount = cuurentPrecentage % 10 * 1.0f / 10;
            }
            else
            {
                expRect.GetChild(i).GetComponent <Image>().fillAmount = 0;
            }
        }

        GridLayoutGroup grid = expRect.GetComponent <GridLayoutGroup>();
        //首先获得当前UI针对标准尺寸的缩放比例
        //整个UI相对于在当前屏幕下的缩放比例
        var globalRate = 1.0f * Consts.ScreenStandHeight / Screen.height;
        //计算当前真实UI宽度
        var UIWidth = Screen.width * globalRate;
        //计算Cell宽度
        var cellWidth = (UIWidth - 560) / 10;
        grid.cellSize = new Vector2(cellWidth, 60);
        #endregion

        //设置自动任务的图片
        //玩家初始化的时候, 会默认创建guideid为1001
        guideConfigures = resourceService.GetGuideConfigures(data.guideid);
        if (guideConfigures != null)
        {
            //  根据npc的ID设置图片
            SetGuideButtonIcon(guideConfigures.npcID);
        }
        else
        {
            SetGuideButtonIcon(-1);
        }
    }
Пример #3
0
    private void LoadAutoGuideConfigure(string path)
    {
        var asset = Resources.Load <TextAsset>(path);

        if (asset == null)
        {
            Debug.Log("配置文件无法加载");
        }
        else
        {
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(asset.text);
            XmlNodeList list = xml.SelectSingleNode("root").ChildNodes;
            for (int i = 0; i < list.Count; i++)
            {
                var element = list[i] as XmlElement;
                if (element.GetAttributeNode("ID") == null)
                {
                    continue;
                }

                var autoGuide = new AutoGuideConfigures()
                {
                    ID = int.Parse(element.GetAttributeNode("ID").InnerText)
                };
                foreach (XmlElement item in list[i].ChildNodes)
                {
                    switch (item.Name)
                    {
                    case "npcID":
                        autoGuide.npcID = int.Parse(item.InnerText);
                        break;

                    case "dilogArr":
                        autoGuide.dilogArr = item.InnerText;
                        break;

                    case "actID":
                        autoGuide.actID = int.Parse(item.InnerText);
                        break;

                    case "coin":
                        autoGuide.coin = int.Parse(item.InnerText);
                        break;

                    case "exp":
                        autoGuide.exp = int.Parse(item.InnerText);
                        break;

                    default:
                        break;
                    }
                }

                m_GuideDict.Add(autoGuide.ID, autoGuide);
            }
        }
    }
Пример #4
0
 protected override void InitUIwindow()
 {
     base.InitUIwindow();
     PlayerData      = GameRoot.Instance.PlayerData;
     GuideConfigures = resourceService.GetGuideConfigures(PlayerData.guideid);
     DialogArray     = GuideConfigures.dilogArr.Split('#');
     DialogIndex     = 1;
     SetDialog();
 }
Пример #5
0
    public AutoGuideConfigures GetGuideConfigures(int guideID)
    {
        AutoGuideConfigures guideConfigures = null;

        if (m_GuideDict.TryGetValue(guideID, out guideConfigures))
        {
            return(guideConfigures);
        }
        return(null);
    }
Пример #6
0
    public void GuideRequest(MessagePack pack)
    {
        //获取到客户端发来的消息
        var clientData = pack.gameMessage.guideRequest;

        //根据session拿到玩家缓存
        var playerData = cacheService.GetPlayerDataBySession(pack.serverSession);

        //回复客户端的数据包
        var message = new GameMessage()
        {
            cmd = (int)CMD.GuideRespone
        };

        if (clientData.GuideID != playerData.guideid)
        {
            //发送错误码
            message.err = (int)ErrorCode.ServerDataError;
        }
        else
        {
            //更新服务器端的引导ID
            playerData.guideid += 1;

            //服务器需要拿到配置文件, 更新具体的数据
            AutoGuideConfigures configures = ConfigureService.Instance.GetGuideConfigures(clientData.GuideID);
            //计算获得任务奖励后的玩家数据
            //更新金币
            playerData.coin += configures.coin;
            CauculateNewData(playerData, configures);

            //更新数据库中的玩家数据.
            if (!cacheService.UpdatePlayerDataToDataBase(playerData.id, playerData))
            {
                message.err = (int)ErrorCode.UpdateDataBaseError;
            }
            else
            {
                message.guideRespond = new GuideRespond()
                {
                    GuideID   = playerData.guideid,
                    Coin      = playerData.coin,
                    Exprience = playerData.experience,
                    Level     = playerData.level
                };
            }
        }

        //发送给客户端
        pack.serverSession.SendMsg(message);
    }
Пример #7
0
    private void InitGuideConfigure()
    {
        XmlDocument xml = new XmlDocument();

        xml.Load(@"/Users/yiheng/Documents/Unity相关/DarkGod/Client/Assets/Resources/ResCfgs/guide.xml");
        XmlNodeList list = xml.SelectSingleNode("root").ChildNodes;

        for (int i = 0; i < list.Count; i++)
        {
            var element = list[i] as XmlElement;
            if (element.GetAttributeNode("ID") == null)
            {
                continue;
            }

            var autoGuide = new AutoGuideConfigures()
            {
                ID = int.Parse(element.GetAttributeNode("ID").InnerText)
            };
            foreach (XmlElement item in list[i].ChildNodes)
            {
                switch (item.Name)
                {
                case "coin":
                    autoGuide.coin = int.Parse(item.InnerText);
                    break;

                case "exp":
                    autoGuide.exp = int.Parse(item.InnerText);
                    break;

                default:
                    break;
                }
            }

            m_GuideDict.Add(autoGuide.ID, autoGuide);
        }
    }
Пример #8
0
    public void RunTask(AutoGuideConfigures guideConfigures)
    {
        if (guideConfigures != null)
        {
            autoGuide = guideConfigures;
        }
        //解析任务数据
        NavMesh.enabled = true;
        //如果不是-1, 说明是新手需要进行指导任务.
        if (guideConfigures.npcID != -1)
        {
            var distance = Vector3.Distance(playerController.transform.position, npcsPosArray[guideConfigures.npcID].position);


            //当两者距离过大时, 打开并设置导航
            if (distance > Consts.DistanceToNPC)
            {
                IsNavTask = true;
                // playerController.CameraFollow();
                NavMesh.enabled = true;
                NavMesh.SetDestination(npcsPosArray[guideConfigures.npcID].position);
                NavMesh.speed = Consts.PlayerSpeed;

                playerController.SetBlend(Consts.WalkBlend);
            }
            else//到达NPC跟前时, 关闭导航
            {
                IsNavTask = false;

                OpenGuideWindow();
            }
        }
        else
        {   //运行新手指导
            OpenGuideWindow();
        }
    }