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; } } }
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); } }
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); } } }
protected override void InitUIwindow() { base.InitUIwindow(); PlayerData = GameRoot.Instance.PlayerData; GuideConfigures = resourceService.GetGuideConfigures(PlayerData.guideid); DialogArray = GuideConfigures.dilogArr.Split('#'); DialogIndex = 1; SetDialog(); }
public AutoGuideConfigures GetGuideConfigures(int guideID) { AutoGuideConfigures guideConfigures = null; if (m_GuideDict.TryGetValue(guideID, out guideConfigures)) { return(guideConfigures); } return(null); }
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); }
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); } }
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(); } }