private string _wayPointString; //ex 10,8:10,9 ...10 = x et 8 = y et : séparateur entre les points public void Fetch(string[] commandStrings) { #region _actorPseudo = commandStrings[1]; _wayPointString = commandStrings[2]; //verification si le joueur en question se trouve dans la liste des joueurs, si non c'est qu'il ya une désynchronisation avec le serveur, donc nous envoyer une cmd de réctification if (CommonCode.AllActorsInMap.Exists(f => ((Actor)f.tag).pseudo == _actorPseudo)) { CommonCode.blockNetFlow = true; CommonCode.ChatMsgFormat("S", "null", "blockNetFlow8 = true"); Bmp ibPlayer = CommonCode.AllActorsInMap.Find(f => ((Actor)f.tag).pseudo == _actorPseudo); string[] tmpWayPointData = _wayPointString.Split(':'); List <Point> wayPointList = tmpWayPointData.Select(t => new Point(Convert.ToInt32(t.Split(',')[0]), Convert.ToInt32(t.Split(',')[1]))).ToList(); //mouvement du personnage avec un thread if (MMORPG.Battle.state == Enums.battleState.state.idle) { ((Actor)ibPlayer.tag).animatedAction = (wayPointList.Count > 5) ? Enums.AnimatedActions.Name.run : Enums.AnimatedActions.Name.walk; ((Actor)ibPlayer.tag).wayPoint = wayPointList; Thread tAnimAction = new Thread(() => CommonCode.AnimAction(ibPlayer, wayPointList, ((wayPointList.Count > 5) ? 20 : 35))); tAnimAction.Start(); } else { MMORPG.Battle.AllPlayersByOrder.Find(f => f.pseudo == _actorPseudo).animatedAction = (wayPointList.Count > 5) ? Enums.AnimatedActions.Name.run : Enums.AnimatedActions.Name.walk; MMORPG.Battle.AllPlayersByOrder.Find(f => f.pseudo == _actorPseudo).wayPoint = wayPointList; // s'il s'agit de notre pérsonnage, il faut supprimer les cases qui représente la portés de notre sort if (((Actor)ibPlayer.tag).pseudo == CommonCode.MyPlayerInfo.instance.pseudo) { // effacement de tous les chemain tracés avant if (MMORPG.Battle.state == Enums.battleState.state.started) { for (int cntGfxBgr = Manager.manager.GfxBgrList.Count - 1; cntGfxBgr > 0; cntGfxBgr--) { if (Manager.manager.GfxBgrList[cntGfxBgr].Name() == "__wayPointRec") { Rec rec = (Rec)Manager.manager.GfxBgrList[cntGfxBgr]; rec.visible = false; rec.Child.Clear(); Manager.manager.GfxBgrList.RemoveAt(cntGfxBgr); } } } } // decrementation des pm2 Thread tAnimAction = new Thread(() => CommonCode.AnimAction(ibPlayer, wayPointList, 20)); MMORPG.Battle.AllPlayersByOrder.Find(f => f.pseudo == _actorPseudo).animatedAction = wayPointList.Count > 5 ? Enums.AnimatedActions.Name.run : Enums.AnimatedActions.Name.walk; tAnimAction.Start(); } } #endregion }
public void Fetch(string[] commandStrings) { #region // le serveur na pas autorisé notre waypoint parsqu'il est bloqué par unjoueur mais il a renvoyé un waypoint jusqu'a l'obstacle int blockedPlayerInPos = int.Parse(commandStrings[1]); // decrementation du waypoint jusqu'a la pos valide MMORPG.Battle.AllPlayersByOrder.Find(f => f.pseudo == CommonCode.MyPlayerInfo.instance.pseudo).wayPoint.RemoveRange(Convert.ToInt32(blockedPlayerInPos), MMORPG.Battle.AllPlayersByOrder.Find(f => f.pseudo == CommonCode.MyPlayerInfo.instance.pseudo).wayPoint.Count - Convert.ToInt32(blockedPlayerInPos)); // effacement de tous les chemain tracés avant List <IGfx> bgrL = Manager.manager.GfxBgrList.FindAll(f => f.Name() == "__wayPointRec"); for (int cntGfxBgr = bgrL.Count - 1; cntGfxBgr > 0; cntGfxBgr--) { ((Rec)bgrL[cntGfxBgr]).visible = false; ((Rec)bgrL[cntGfxBgr]).Child.Clear(); Manager.manager.GfxBgrList.Remove(bgrL[cntGfxBgr]); } Thread tAnimAction = new Thread(() => CommonCode.AnimAction(CommonCode.MyPlayerInfo.instance.ibPlayer, MMORPG.Battle.AllPlayersByOrder.Find(f => f.pseudo == CommonCode.MyPlayerInfo.instance.pseudo).wayPoint, 20)); MMORPG.Battle.AllPlayersByOrder.Find(f => f.pseudo == CommonCode.MyPlayerInfo.instance.pseudo).animatedAction = Enums.AnimatedActions.Name.run; tAnimAction.Start(); #endregion }
public void Fetch(string[] commandStrings) { #region MapData // commandStrings[1] = pseudo#classe#pvp:spirit:spiritLvl#village#MaskColors#map_position#orientation#level#action#waypoint#TotalPdv#CurrentPdv#rang | separateur entre plusieurs joueurs // pvp=0 donc mode pvp off, si pvp = 1 mode pvp on string[] playersInfos = commandStrings[1].Split('|'); foreach (string t in playersInfos) { string[] states = t.Split('#'); string actorName = states[0]; Enums.ActorClass.ClassName className = (Enums.ActorClass.ClassName)Enum.Parse(typeof(Enums.ActorClass.ClassName), states[1]); bool pvpEnabled = states[2].Split(':')[0] == "1"; Enums.Spirit.Name spirit = (Enums.Spirit.Name)Enum.Parse(typeof(Enums.Spirit.Name), states[2].Split(':')[1]); int spiritLevel = int.Parse(states[2].Split(':')[2]); Enums.HiddenVillage.Names hiddenVillage = (Enums.HiddenVillage.Names)Enum.Parse(typeof(Enums.HiddenVillage.Names), states[3]); string maskColors = states[4]; Point mapPoint = new Point(int.Parse(states[5].Split('/')[0]), int.Parse(states[5].Split('/')[1])); int orientation = int.Parse(states[6]); int level = int.Parse(states[7]); Enums.AnimatedActions.Name action = (Enums.AnimatedActions.Name)Enum.Parse(typeof(Enums.AnimatedActions.Name), states[8]); string waypoint = states[9]; int maxHealth = int.Parse(states[10]); int currentHealth = int.Parse(states[11]); // cette valeur n'est pas utilisé dans le jeu puisque le rang n'est pas encore affiché, il faut prévoir un truc pour montrer les rang de chaque joueur, ou pas si le rang dois etre caché, ptet que le rang est caché mais permet d'afficher le joueur avec un ora spécial Enums.Rang.official officialRang = (Enums.Rang.official)Enum.Parse(typeof(Enums.Rang.official), states[12]); // supprimer tout les anciennes instances qui correspond a ce joueur pour eviter un doublons ou une erreur de la part du serveur ou client s'il n'envoie pas la cmd de deconnexion du joeur au abonnés if (CommonCode.AllActorsInMap.Count(i => ((Actor)i.tag).pseudo == actorName) > 0) { Bmp allPlayers = CommonCode.AllActorsInMap.Find(f => ((Actor)f.tag).pseudo == actorName); allPlayers.visible = false; CommonCode.AllActorsInMap.Remove(allPlayers); CommonCode.AllActorsInMap.RemoveAll(i => ((Actor)i.tag).pseudo == actorName); } // affichage du personnage + position + orientation Bmp ibPlayers = new Bmp(@"gfx\general\classes\" + className + ".dat", Point.Empty, "Player_" + actorName, Manager.TypeGfx.Obj, true, 1, SpriteSheet.GetSpriteSheet(className.ToString(), CommonCode.ConvertToClockWizeOrientation(orientation))); ibPlayers.point = new Point((mapPoint.X * 30) + 15 - (ibPlayers.rectangle.Width / 2), (mapPoint.Y * 30) - (ibPlayers.rectangle.Height) + 15); ibPlayers.MouseOver += CommonCode.ibPlayers_MouseOver; ibPlayers.MouseOut += CommonCode.ibPlayers_MouseOut; ibPlayers.MouseMove += CommonCode.CursorHand_MouseMove; ibPlayers.MouseClic += CommonCode.ibPlayers_MouseClic; CommonCode.VerticalSyncZindex(ibPlayers); ibPlayers.TypeGfx = Manager.TypeGfx.Obj; Manager.manager.GfxObjList.Add(ibPlayers); ibPlayers.tag = CommonCode.MyPlayerInfo.instance.pseudo != actorName ? new Actor(actorName, level, !pvpEnabled ? Enums.Spirit.Name.neutral : spirit, className, pvpEnabled, !pvpEnabled ? 0 : spiritLevel, hiddenVillage, maskColors, orientation, action, waypoint) : CommonCode.MyPlayerInfo.instance.ibPlayer.tag; Actor actor = (Actor)ibPlayers.tag; actor.realPosition = mapPoint; actor.officialRang = officialRang; // affichage des ailles if (actor.pvpEnabled) { if (actor.spirit != Enums.Spirit.Name.neutral) { Bmp _spirit = new Bmp(@"gfx\general\obj\2\" + actor.spirit + @"\" + actor.spiritLevel + ".dat", Point.Empty, "spirit_" + ibPlayers.name, Manager.TypeGfx.Obj, false, 1); _spirit.point = new Point((ibPlayers.rectangle.Width / 2) - (_spirit.rectangle.Width / 2), -_spirit.rectangle.Height); ibPlayers.Child.Add(_spirit); Txt lPseudo = new Txt(actor.pseudo, Point.Empty, "lPseudo_" + ibPlayers.name, Manager.TypeGfx.Obj, false, new Font("Verdana", 10, FontStyle.Regular), Brushes.Red); lPseudo.point = new Point((ibPlayers.rectangle.Width / 2) - (TextRenderer.MeasureText(lPseudo.Text, lPseudo.font).Width / 2) + 5, -_spirit.rectangle.Height - 15); ibPlayers.Child.Add(lPseudo); Txt lLvlSpirit = new Txt(actor.spiritLevel.ToString(), Point.Empty, "lLvlSpirit_" + ibPlayers.name, Manager.TypeGfx.Obj, false, new Font("Verdana", 10, FontStyle.Bold), Brushes.Red); lLvlSpirit.point = new Point((ibPlayers.rectangle.Width / 2) - (TextRenderer.MeasureText(lLvlSpirit.Text, lLvlSpirit.font).Width / 2) + 2, -_spirit.rectangle.Y - (_spirit.rectangle.Height / 2) - (TextRenderer.MeasureText(lLvlSpirit.Text, lLvlSpirit.font).Height / 2)); ibPlayers.Child.Add(lLvlSpirit); Bmp village = new Bmp(@"gfx\general\obj\1\pays_thumbs.dat", Point.Empty, "village_" + actor.hiddenVillage, Manager.TypeGfx.Obj, false, 1, SpriteSheet.GetSpriteSheet("pays_" + actor.hiddenVillage + "_thumbs", 0)); village.point = new Point((ibPlayers.rectangle.Width / 2) - (village.rectangle.Width / 2), lPseudo.point.Y - village.rectangle.Height + 2); ibPlayers.Child.Add(village); } } else { Txt lPseudo = new Txt(actor.pseudo, Point.Empty, "lPseudo_" + ibPlayers.name, Manager.TypeGfx.Obj, false, new Font("Verdana", 10, FontStyle.Regular), Brushes.Red); lPseudo.point = new Point((ibPlayers.rectangle.Width / 2) - (TextRenderer.MeasureText(lPseudo.Text, lPseudo.font).Width / 2) + 5, -15); ibPlayers.Child.Add(lPseudo); Bmp village = new Bmp(@"gfx\general\obj\1\pays_thumbs.dat", Point.Empty, "village_" + actor.hiddenVillage, Manager.TypeGfx.Obj, false, 1, SpriteSheet.GetSpriteSheet("pays_" + actor.hiddenVillage + "_thumbs", 0)); village.point = new Point((ibPlayers.rectangle.Width / 2) - (village.rectangle.Width / 2), lPseudo.point.Y - village.rectangle.Height + 2); ibPlayers.Child.Add(village); } // coloriage du personnage et attachement du maskColor au personnage CommonCode.ApplyMaskColorToClasse(ibPlayers); // pointeur vers l'image ibplayer de notre joueur s'il s'agit de son personnage if (CommonCode.MyPlayerInfo.instance.pseudo == actor.pseudo) { CommonCode.MyPlayerInfo.instance.ibPlayer = ibPlayers; } // ajout du personnage dans la liste des joueurs CommonCode.AllActorsInMap.Add(ibPlayers); // lancement de l'animation de mouvement si le joueur a un waypoint if (actor.wayPoint.Count > 0) { //mouvement du personnage // thread a part Thread tAnimAction = new Thread(() => CommonCode.AnimAction(ibPlayers, actor.wayPoint, actor.wayPoint.Count > 5 ? 20 : 50)); tAnimAction.Start(); } // affectation des pdv actor.maxHealth = maxHealth; actor.currentHealth = currentHealth; } #endregion }