예제 #1
0
        public void Fetch(string[] commandStrings)
        {
            // vérifier la chronologie des infos commandStrings
            #region commencement du combat en mode initialisation "préparation"
            if (MMORPG.Battle.state == Enums.battleState.state.idle)
            {
                // cmd[8] dois correspondre a BattleType selon la cmd, mais ici ca coincide avec BattleState ?!!
                string[] playersData    = commandStrings[1].Split('|');
                string[] startPositions = commandStrings[2].Split('|');
                MMORPG.Battle.TimeLeftLabel.tag = commandStrings[3]; // cmd[4] = max timeleft
                MMORPG.Battle.BattleType        = commandStrings[4]; // il faut changer BattleTypede string à Enum
                Enums.battleState.state battleState = (Enums.battleState.state)Enum.Parse(typeof(Enums.battleState.state), commandStrings[4]);
                List <string>           sideA       = commandStrings[5].Split('#').ToList();
                List <string>           sideB       = commandStrings[6].Split('#').ToList();
                // il reste 3 autres variable que le client ne prend pas en charge a voir pourquoi

                MMORPG.Battle.state = battleState;
                // il y a 2 affectation a ce variable MMORPG.Battle.state ici et dans la ligne 781, a verifier si cette valeur change lors du passage entre ces 2 lignes
                //StartDuelBattleResponseMessage
                //pseudo#classe#level#village#MaskColors#TotalPdv#CurrentPdv#rang|pseudo#classe#level#village                    //#MaskColors#TotalPdv#CurrentPdv#rang
                //ValidePos
                //waitTime
                //BattleType
                //sideA(p1t1#position1t1X,position1t1Y)
                //sideB(p1t2#position1t2X,position1t2Y)

                //pos du sideA comme 10/5#15/5
                //pos du sideB comme 10/5#15/5#13/3 séparés par #

                // effacement du menu tamisé
                // effacer le menu de demande de défie SI le menu vraiment affiché, au cas ou un défie est lancé avec un PNJ, il ya pas de menu tamisé vus qu'on attend pas que le joueur accepte ou pas
                if (CommonCode.annulerChallengeMeDlg != null)
                {
                    CommonCode.annulerChallengeMeDlg.visible = false;
                    Manager.manager.GfxTopList.Remove(CommonCode.annulerChallengeMeDlg);
                    // supression du case a coché
                    if (Manager.manager.mainForm.Controls.Find("ignorerCB", false).Count() != 0)
                    {
                        Manager.manager.mainForm.Controls.Find("ignorerCB", false)[0].Visible = false;
                        Manager.manager.mainForm.Controls.Find("ignorerCB", false)[0]         = null;
                        Manager.manager.mainForm.Controls.Remove(Manager.manager.mainForm.Controls.Find("ignorerCB", false)[0]);
                    }
                    CommonCode.annulerChallengeMeDlg.Child.Clear();
                    CommonCode.annulerChallengeMeDlg = null;
                }
                else if (CommonCode.annulerChallengeHimDlg != null)
                {
                    // effacement du rec parent de la liste graphics
                    CommonCode.annulerChallengeHimDlg.visible = false;
                    Manager.manager.GfxTopList.Remove(CommonCode.annulerChallengeHimDlg);
                    CommonCode.annulerChallengeHimDlg.Child.Clear();
                    CommonCode.annulerChallengeHimDlg = null;
                }

                // supression des joueurs present dans le map
                List <Bmp> allPlayersExceptChallenged = CommonCode.AllActorsInMap.FindAll(f => (f.tag as Actor).pseudo != CommonCode.ChallengeTo && (f.tag as Actor).pseudo != CommonCode.MyPlayerInfo.instance.pseudo);
                for (int cnt = allPlayersExceptChallenged.Count; cnt > 0; cnt--)
                {
                    allPlayersExceptChallenged[cnt - 1].visible = false;
                    CommonCode.AllActorsInMap.Remove(allPlayersExceptChallenged[cnt - 1]);
                    allPlayersExceptChallenged.RemoveAt(cnt - 1);
                }
                CommonCode.annulerChallengeHimDlg = null;
                CommonCode.annulerChallengeMeDlg  = null;
                CommonCode.ChallengeTo            = "";

                // initialisation du combat
                // affichage des joueurs

                //pseudo#classe#level#village#MaskColors#TotalPdv#CurrentPdv#rang#initiative#doton#katon
                //#futon#raiton#siuton#usingDoton#usingKaton#usingFuton#usingRaiton#usingSuiton#equipedDoton#equipedKaton
                //#equipedFuton#equipedRaiton#suitonEquiped#pc#pm#pe#cd#invoc#resiDoton#resiKaton
                //#resiFuton#resiRaiton#resiSuiton#esquivePC#esquivePM#esquivePE#esquiveCD#retraitCD#retraitPM#retraitPE
                //#retraitCD#evasion#blocage
                // | séparateur entre les teams, / séparateur entre les membres d'une meme team

                //////////////  Team A ////////////////////////////
                for (int cnt = 0; cnt < playersData[0].Split(':').Count(); cnt++)
                {
                    string[] states = playersData[0].Split(':');

                    /////////// dispatch states
                    string actorName = states[0];
                    Enums.ActorClass.ClassName className = (Enums.ActorClass.ClassName)Enum.Parse(typeof(Enums.ActorClass.ClassName), states[1]);
                    int level = int.Parse(states[2]);
                    Enums.HiddenVillage.Names hiddenVillage = (Enums.HiddenVillage.Names)Enum.Parse(typeof(Enums.HiddenVillage.Names), states[3]);
                    string              maskColorsString    = states[4];
                    string[]            maskColors          = states[4].Split('/');
                    int                 maxHealth           = int.Parse(states[5]);
                    int                 currentHealth       = int.Parse(states[6]);
                    Enums.Rang.official officialRang        = (Enums.Rang.official)Enum.Parse(typeof(Enums.Rang.official), states[7]);
                    int                 initiative          = int.Parse(states[8]);
                    int                 doton             = int.Parse(states[9]);
                    int                 katon             = int.Parse(states[10]);
                    int                 futon             = int.Parse(states[11]);
                    int                 raiton            = int.Parse(states[12]);
                    int                 suiton            = int.Parse(states[13]);
                    int                 usingDoton        = int.Parse(states[14]);
                    int                 usingKaton        = int.Parse(states[15]);
                    int                 usingFuton        = int.Parse(states[16]);
                    int                 usingRaiton       = int.Parse(states[17]);
                    int                 usingSuiton       = int.Parse(states[18]);
                    int                 equipedDoton      = int.Parse(states[19]);
                    int                 equipedKaton      = int.Parse(states[20]);
                    int                 equipedFuton      = int.Parse(states[21]);
                    int                 equipedRaiton     = int.Parse(states[22]);
                    int                 equipedSuiton     = int.Parse(states[23]);
                    int                 originalPc        = int.Parse(states[24]);
                    int                 originalPm        = int.Parse(states[25]);
                    int                 pe                = int.Parse(states[26]);
                    int                 cd                = int.Parse(states[27]);
                    int                 summons           = int.Parse(states[28]);
                    int                 resiDotonPercent  = int.Parse(states[29]);
                    int                 resiKatonPercent  = int.Parse(states[30]);
                    int                 resiFutonPercent  = int.Parse(states[31]);
                    int                 resiRaitonPercent = int.Parse(states[32]);
                    int                 resiSuitonPercent = int.Parse(states[33]);
                    int                 dodgePc           = int.Parse(states[34]);
                    int                 dodgePm           = int.Parse(states[35]);
                    int                 dodgePe           = int.Parse(states[36]);
                    int                 dodgeCd           = int.Parse(states[37]);
                    int                 removePc          = int.Parse(states[38]);
                    int                 removePm          = int.Parse(states[39]);
                    int                 removePe          = int.Parse(states[40]);
                    int                 removeCd          = int.Parse(states[41]);
                    int                 escape            = int.Parse(states[42]);
                    int                 blocage           = int.Parse(states[43]);
                    Enums.Species.Name  species           = (Enums.Species.Name)Enum.Parse(typeof(Enums.Species.Name), states[44]);
                    int                 orientation       = int.Parse(states[45]);
                    //////////////////////////////////////////////////////////

                    Actor pit1 = new Actor();
                    pit1.teamSide        = Enums.Team.Side.A;
                    pit1.pseudo          = actorName;
                    pit1.className       = className;
                    pit1.level           = level;
                    pit1.hiddenVillage   = hiddenVillage;
                    pit1.maskColorString = maskColorsString;
                    pit1.maxHealth       = maxHealth;
                    pit1.currentHealth   = currentHealth;
                    pit1.officialRang    = officialRang;
                    pit1.initiative      = initiative;
                    pit1.doton           = doton;
                    pit1.katon           = futon;
                    pit1.futon           = futon;
                    pit1.raiton          = raiton;
                    pit1.suiton          = suiton;
                    pit1.usingDoton      = usingDoton;
                    pit1.usingFuton      = usingFuton;
                    pit1.usingKaton      = usingKaton;
                    pit1.usingRaiton     = usingRaiton;
                    pit1.usingSuiton     = usingSuiton;
                    pit1.equipedDoton    = equipedDoton;
                    pit1.equipedKaton    = equipedKaton;
                    pit1.equipedFuton    = equipedFuton;
                    pit1.equipedRaiton   = equipedRaiton;
                    pit1.equipedSuiton   = equipedSuiton;
                    pit1.originalPc      = originalPc;
                    pit1.originalPm      = originalPm;
                    pit1.pe                = pe;
                    pit1.cd                = cd;
                    pit1.summons           = summons;
                    pit1.resiDotonPercent  = resiDotonPercent;
                    pit1.resiKatonPercent  = resiKatonPercent;
                    pit1.resiFutonPercent  = resiFutonPercent;
                    pit1.resiRaitonPercent = resiRaitonPercent;
                    pit1.resiSuitonPercent = resiSuitonPercent;
                    pit1.dodgePc           = dodgePc;
                    pit1.dodgePm           = dodgePm;
                    pit1.dodgePe           = dodgePe;
                    pit1.dodgeCd           = dodgeCd;
                    pit1.removePc          = removePc;
                    pit1.removePm          = removePm;
                    pit1.removePe          = removePe;
                    pit1.removeCd          = removeCd;
                    pit1.escape            = escape;
                    pit1.blocage           = blocage;
                    pit1.species           = species;
                    pit1.directionLook     = orientation;

                    // si le joueur n'est pas humain comme PNJ, alors il faut créer à nouveau l'image ou dupliquer celle déja présante sur la map, ou meme utiliser celle sur la map
                    if (pit1.species != Enums.Species.Name.Human)
                    {
                        // le joueur étant déja supprimé de la liste common1.AllPlayers lors du nétoyage de l'ecran pour le combat, il faut recréer le pointeur, cad l'ajouter a la liste
                        // j'ai intentionnelement laissé le joueur se supprimer au lieu de faire une exeption pour garder un code uniforme et qui dépand pas des situations, donc vaux mieux recréer le pointeur
                        Bmp __pnj = new Bmp(@"gfx\general\classes\" + pit1.className + ".dat", Point.Empty, "__pnj", Manager.TypeGfx.Obj, true, 1, SpriteSheet.GetSpriteSheet(pit1.className.ToString(), 0));
                        __pnj.MouseMove += CommonCode.CursorHand_MouseMove;
                        __pnj.MouseOver += CommonCode.ibPlayers_MouseOver;
                        __pnj.MouseOut  += CommonCode.ibPlayers_MouseOut;
                        __pnj.tag        = pit1;
                        CommonCode.AllActorsInMap.Add(__pnj);
                        CommonCode.VerticalSyncZindex(__pnj);
                        Manager.manager.GfxObjList.Add(__pnj);
                    }
                    else if (pit1.species == Enums.Species.Name.Summon)
                    {
                        // le joueur étant déja supprimé de la liste common1.AllPlayers lors du nétoyage de l'ecran pour le combat, il faut recréer le pointeur, cad l'ajouter a la liste
                        // j'ai intentionnelement laissé le joueur se supprimer au lieu de faire une exeption pour garder un code uniforme et qui dépand pas des situations, donc vaux mieux recréer le pointeur
                        Bmp __invok = new Bmp(@"gfx\general\classes\" + pit1.className + ".dat", Point.Empty, "__pnj", Manager.TypeGfx.Obj, true, 1, SpriteSheet.GetSpriteSheet(pit1.className.ToString(), 0));
                        __invok.MouseMove += CommonCode.CursorHand_MouseMove;
                        __invok.MouseOver += CommonCode.ibPlayers_MouseOver;
                        __invok.MouseOut  += CommonCode.ibPlayers_MouseOut;
                        __invok.tag        = pit1;
                        CommonCode.AllActorsInMap.Add(__invok);
                        CommonCode.VerticalSyncZindex(__invok);
                        Manager.manager.GfxObjList.Add(__invok);
                    }

                    pit1.ibPlayer = CommonCode.AllActorsInMap.Find(f => (f.tag as Actor).pseudo == pit1.pseudo);
                    (pit1.ibPlayer.tag as Actor).directionLook = pit1.directionLook;
                    CommonCode.AdjustPositionAndDirection(pit1.ibPlayer, pit1.ibPlayer.point);     // remet le joueur bien aligné sur la grille et lui applique un mask de couleur

                    MMORPG.Battle.SideA.Add(pit1);
                }

                ///////////////////// Team B ///////////////////////////////////
                for (int cnt = 0; cnt < playersData[1].Split(':').Count(); cnt++)
                {
                    string[] states = playersData[1].Split(':');

                    /////////// dispatch states
                    string actorName = states[0];
                    Enums.ActorClass.ClassName className = (Enums.ActorClass.ClassName)Enum.Parse(typeof(Enums.ActorClass.ClassName), states[1]);
                    int level = int.Parse(states[2]);
                    Enums.HiddenVillage.Names hiddenVillage = (Enums.HiddenVillage.Names)Enum.Parse(typeof(Enums.HiddenVillage.Names), states[3]);
                    string              maskColorsString    = states[4];
                    string[]            maskColors          = states[4].Split('/');
                    int                 maxHealth           = int.Parse(states[5]);
                    int                 currentHealth       = int.Parse(states[6]);
                    Enums.Rang.official officialRang        = (Enums.Rang.official)Enum.Parse(typeof(Enums.Rang.official), states[7]);
                    int                 initiative          = int.Parse(states[8]);
                    int                 doton             = int.Parse(states[9]);
                    int                 katon             = int.Parse(states[10]);
                    int                 futon             = int.Parse(states[11]);
                    int                 raiton            = int.Parse(states[12]);
                    int                 suiton            = int.Parse(states[13]);
                    int                 usingDoton        = int.Parse(states[14]);
                    int                 usingKaton        = int.Parse(states[15]);
                    int                 usingFuton        = int.Parse(states[16]);
                    int                 usingRaiton       = int.Parse(states[17]);
                    int                 usingSuiton       = int.Parse(states[18]);
                    int                 equipedDoton      = int.Parse(states[19]);
                    int                 equipedKaton      = int.Parse(states[20]);
                    int                 equipedFuton      = int.Parse(states[21]);
                    int                 equipedRaiton     = int.Parse(states[22]);
                    int                 equipedSuiton     = int.Parse(states[23]);
                    int                 originalPc        = int.Parse(states[24]);
                    int                 originalPm        = int.Parse(states[25]);
                    int                 pe                = int.Parse(states[26]);
                    int                 cd                = int.Parse(states[27]);
                    int                 summons           = int.Parse(states[28]);
                    int                 resiDotonPercent  = int.Parse(states[29]);
                    int                 resiKatonPercent  = int.Parse(states[30]);
                    int                 resiFutonPercent  = int.Parse(states[31]);
                    int                 resiRaitonPercent = int.Parse(states[32]);
                    int                 resiSuitonPercent = int.Parse(states[33]);
                    int                 dodgePc           = int.Parse(states[34]);
                    int                 dodgePm           = int.Parse(states[35]);
                    int                 dodgePe           = int.Parse(states[36]);
                    int                 dodgeCd           = int.Parse(states[37]);
                    int                 removePc          = int.Parse(states[38]);
                    int                 removePm          = int.Parse(states[39]);
                    int                 removePe          = int.Parse(states[40]);
                    int                 removeCd          = int.Parse(states[41]);
                    int                 escape            = int.Parse(states[42]);
                    int                 blocage           = int.Parse(states[43]);
                    Enums.Species.Name  species           = (Enums.Species.Name)Enum.Parse(typeof(Enums.Species.Name), states[44]);
                    int                 orientation       = int.Parse(states[45]);
                    //////////////////////////////////////////////////////

                    Actor pit2 = new Actor();
                    pit2.teamSide        = Enums.Team.Side.A;
                    pit2.pseudo          = actorName;
                    pit2.className       = className;
                    pit2.level           = level;
                    pit2.hiddenVillage   = hiddenVillage;
                    pit2.maskColorString = maskColorsString;
                    pit2.maxHealth       = maxHealth;
                    pit2.currentHealth   = currentHealth;
                    pit2.officialRang    = officialRang;
                    pit2.initiative      = initiative;
                    pit2.doton           = doton;
                    pit2.katon           = futon;
                    pit2.futon           = futon;
                    pit2.raiton          = raiton;
                    pit2.suiton          = suiton;
                    pit2.usingDoton      = usingDoton;
                    pit2.usingFuton      = usingFuton;
                    pit2.usingKaton      = usingKaton;
                    pit2.usingRaiton     = usingRaiton;
                    pit2.usingSuiton     = usingSuiton;
                    pit2.equipedDoton    = equipedDoton;
                    pit2.equipedKaton    = equipedKaton;
                    pit2.equipedFuton    = equipedFuton;
                    pit2.equipedRaiton   = equipedRaiton;
                    pit2.equipedSuiton   = equipedSuiton;
                    pit2.originalPc      = originalPc;
                    pit2.originalPm      = originalPm;
                    pit2.pe                = pe;
                    pit2.cd                = cd;
                    pit2.summons           = summons;
                    pit2.resiDotonPercent  = resiDotonPercent;
                    pit2.resiKatonPercent  = resiKatonPercent;
                    pit2.resiFutonPercent  = resiFutonPercent;
                    pit2.resiRaitonPercent = resiRaitonPercent;
                    pit2.resiSuitonPercent = resiSuitonPercent;
                    pit2.dodgePc           = dodgePc;
                    pit2.dodgePm           = dodgePm;
                    pit2.dodgePe           = dodgePe;
                    pit2.dodgeCd           = dodgeCd;
                    pit2.removePc          = removePc;
                    pit2.removePm          = removePm;
                    pit2.removePe          = removePe;
                    pit2.removeCd          = removeCd;
                    pit2.escape            = escape;
                    pit2.blocage           = blocage;
                    pit2.species           = species;
                    pit2.directionLook     = orientation;

                    // si le joueur n'est humain comme PNJ, alors il faut créer à nouveau l'image ou dupliquer celle déja présante sur la map, ou meme utiliser celle sur la map
                    if (pit2.species == Enums.Species.Name.Pnj)
                    {
                        // le joueur étant déja supprimé de la liste common1.AllPlayers lors du nétoyage de l'ecran pour le combat, il faut recréer le pointeur, cad l'ajouter a la liste
                        // j'ai intentionnelement laissé le joueur se supprimer au lieu de faire une exeption pour garder un code uniforme et qui dépand pas des situations, donc vaux mieux recréer le pointeur
                        Bmp __pnj = new Bmp(@"gfx\general\classes\" + pit2.className + ".dat", Point.Empty, "__pnj", Manager.TypeGfx.Obj, true, 1, SpriteSheet.GetSpriteSheet(pit2.className.ToString(), 0));
                        __pnj.MouseMove += CommonCode.CursorHand_MouseMove;
                        __pnj.MouseOver += CommonCode.ibPlayers_MouseOver;
                        __pnj.MouseOut  += CommonCode.ibPlayers_MouseOut;
                        __pnj.tag        = pit2;
                        CommonCode.AllActorsInMap.Add(__pnj);
                        CommonCode.VerticalSyncZindex(__pnj);
                        Manager.manager.GfxObjList.Add(__pnj);
                    }
                    else if (pit2.species == Enums.Species.Name.Summon)
                    {
                        // le joueur étant déja supprimé de la liste common1.AllPlayers lors du nétoyage de l'ecran pour le combat, il faut recréer le pointeur, cad l'ajouter a la liste
                        // j'ai intentionnelement laissé le joueur se supprimer au lieu de faire une exeption pour garder un code uniforme et qui dépand pas des situations, donc vaux mieux recréer le pointeur
                        Bmp __invok = new Bmp(@"gfx\general\classes\" + pit2.className + ".dat", Point.Empty, "__pnj", Manager.TypeGfx.Obj, true, 1, SpriteSheet.GetSpriteSheet(pit2.className.ToString(), 0));
                        __invok.MouseMove += CommonCode.CursorHand_MouseMove;
                        __invok.MouseOver += CommonCode.ibPlayers_MouseOver;
                        __invok.MouseOut  += CommonCode.ibPlayers_MouseOut;
                        __invok.tag        = pit2;
                        CommonCode.AllActorsInMap.Add(__invok);
                        CommonCode.VerticalSyncZindex(__invok);
                        Manager.manager.GfxObjList.Add(__invok);
                    }

                    pit2.ibPlayer = CommonCode.AllActorsInMap.Find(f => (f.tag as Actor).pseudo == pit2.pseudo);
                    (pit2.ibPlayer.tag as Actor).directionLook = pit2.directionLook;
                    CommonCode.AdjustPositionAndDirection(pit2.ibPlayer, pit2.ibPlayer.point);

                    MMORPG.Battle.SideB.Add(pit2);
                }
                ///////////////////////////////////////////////////////////////////

                // affichage des positions valide pour les 2 teams
                string[] dataT1 = startPositions[0].Split('#');
                for (int cnt1 = 0; cnt1 < dataT1.Count(); cnt1++)
                {
                    string[] data1 = dataT1[cnt1].Split('/');
                    MMORPG.Battle.ValidePosT1.Add(new Point(Convert.ToInt16(data1[0]) * 30, Convert.ToInt16(data1[1]) * 30));
                }

                string[] dataT2 = startPositions[1].Split('#');
                for (int cnt1 = 0; cnt1 < dataT2.Count(); cnt1++)
                {
                    string[] data1 = dataT2[cnt1].Split('/');
                    MMORPG.Battle.ValidePosT2.Add(new Point(Convert.ToInt16(data1[0]) * 30, Convert.ToInt16(data1[1]) * 30));
                }



                // dessin des positions valides dans le map
                MMORPG.Battle.DrawBattleValidePos();

                // image du chronometre timeout
                Bmp Chrono_TimeOut = new Bmp(@"gfx\general\obj\1\all1.dat", new Point(ScreenManager.WindowWidth - 100, 50), "Chrono_TimeOut", Manager.TypeGfx.Top, true, 1, SpriteSheet.GetSpriteSheet("_Main_option", 23));
                Manager.manager.GfxTopList.Add(Chrono_TimeOut);

                //timer de temps restant
                MMORPG.Battle.TimeLeftLabel.zindex = Chrono_TimeOut.zindex + 1;
                Manager.manager.GfxTopList.Add(MMORPG.Battle.TimeLeftLabel);

                //lancement du thread du la barre de progression du timeleft
                Thread timeLeftT = new Thread(new ThreadStart(CommonCode.timeLeftForBattle));


                timeLeftT.Start();



                for (int cnt = 0; cnt < sideA.Count; cnt++)
                {
                    Bmp   bmp = CommonCode.AllActorsInMap.Find(f => (f.tag as Actor).pseudo == sideA[cnt].Split('|')[0]);
                    Point p   = new Point(Convert.ToInt16(sideA[cnt].Split('|')[1].Split('/')[0]), Convert.ToInt16(sideA[cnt].Split('|')[1].Split('/')[1]));
                    bmp.point = new Point((p.X * 30) + 15 - (bmp.rectangle.Width / 2), (p.Y * 30) + 15 - bmp.rectangle.Height);
                    CommonCode.ApplyMaskColorToClasse(bmp);
                    (bmp.tag as Actor).realPosition = p;
                    Actor piib = MMORPG.Battle.SideA.Find(f => f.pseudo == sideA[cnt].Split('|')[0]);
                    piib.realPosition = p;
                    CommonCode.VerticalSyncZindex(bmp);
                }

                for (int cnt = 0; cnt < sideB.Count; cnt++)
                {
                    Bmp   bmp = CommonCode.AllActorsInMap.Find(f => (f.tag as Actor).pseudo == sideB[cnt].Split('|')[0]);
                    Point p   = new Point(Convert.ToInt16(sideB[cnt].Split('|')[1].Split('/')[0]), Convert.ToInt16(sideB[cnt].Split('|')[1].Split('/')[1]));
                    bmp.point = new Point((p.X * 30) + 15 - (bmp.rectangle.Width / 2), (p.Y * 30) + 15 - bmp.rectangle.Height);
                    CommonCode.ApplyMaskColorToClasse(bmp);
                    (bmp.tag as Actor).realPosition = p;
                    Actor piib = MMORPG.Battle.SideB.Find(f => f.pseudo == sideB[cnt].Split('|')[0]);
                    piib.realPosition = p;
                    CommonCode.VerticalSyncZindex(bmp);
                }
                MMORPG.Battle.state = battleState;

                // il faut ajouter les 2 bouton, pour quiter le combat et pour valider sa position
                HudHandle._passer_La_Main_btn       = new Bmp(@"gfx\general\obj\1\all1.dat", new Point(HudHandle.ChatTextBox.Location.X + HudHandle.ChatTextBox.Width + 50, 578), "_passer_La_Main_btn", Manager.TypeGfx.Top, true, 1, SpriteSheet.GetSpriteSheet("_Main_option", 25));
                HudHandle._passer_La_Main_btn.point = new Point(HudHandle.HealthBarRec1.point.X - HudHandle._passer_La_Main_btn.rectangle.Size.Width - 10, ScreenManager.WindowHeight - HudHandle._passer_La_Main_btn.rectangle.Height - 3);
                HudHandle._passer_La_Main_btn.EscapeGfxWhileMouseMove = true;
                HudHandle._passer_La_Main_btn.EscapeGfxWhileMouseClic = true;
                HudHandle._passer_La_Main_btn.MouseMove += CommonCode.CursorHand_MouseMove;
                HudHandle._passer_La_Main_btn.MouseOut  += CommonCode.CursorDefault_MouseOut;
                HudHandle._passer_La_Main_btn.MouseClic += _passer_La_Main_btn_MouseClic;
                Manager.manager.GfxTopList.Add(HudHandle._passer_La_Main_btn);

                // label pour passer la main
                Txt _passer_La_Main_Lbl = new Txt(CommonCode.TranslateText(110), new Point(0, 2), "_passer_La_Main_Lbl", Manager.TypeGfx.Top, true, new Font("verdana", 9), Brushes.Yellow);
                _passer_La_Main_Lbl.point.X = 5 + (HudHandle._passer_La_Main_btn.rectangle.Width - TextRenderer.MeasureText(_passer_La_Main_Lbl.Text, _passer_La_Main_Lbl.font).Width) / 2;
                HudHandle._passer_La_Main_btn.Child.Add(_passer_La_Main_Lbl);

                // bouton pour quiter le combat
                HudHandle._quiter_le_combat            = new Bmp(@"gfx\general\obj\1\all1.dat", new Point(HudHandle.ChatTextBox.Location.X + HudHandle.ChatTextBox.Width + 30, 580), "_quiter_le_combat", Manager.TypeGfx.Top, true, 1, SpriteSheet.GetSpriteSheet("_Main_option", 26));
                HudHandle._quiter_le_combat.point      = new Point(HudHandle._passer_La_Main_btn.point.X - HudHandle._quiter_le_combat.rectangle.Width + 5, ScreenManager.WindowHeight - HudHandle._quiter_le_combat.rectangle.Height - 3);
                HudHandle._quiter_le_combat.MouseMove += CommonCode.CursorHand_MouseMove;
                HudHandle._quiter_le_combat.MouseOut  += CommonCode.CursorDefault_MouseOut;
                HudHandle._quiter_le_combat.MouseClic += _quiter_le_combat_MouseClic;
                Manager.manager.GfxTopList.Add(HudHandle._quiter_le_combat);
            }
            #endregion
        }
예제 #2
0
        public void Fetch(string[] commandStrings)
        {
            /*SelectActorGrantedResponseMessage•
             * string buffer = actor.Pseudo + "#" + actor.ClasseName + "#" + actor.Spirit + "#" +
             * actor.SpiritLvl.ToString() + "#" + actor.Pvp.ToString() + "#" + actor.village + "#" + actor.MaskColors + "#" +
             * actor.Orientation.ToString() + "#" + actor.Level.ToString() + "#" + actor.map + "#" + actor.rang.ToString() +
             * "#" + actor.currentHealth.ToString() + "#" + actor.totalHealth.ToString() + "#" + actor.xp.ToString() +
             * "#" + totalXp + "#" + actor.doton.ToString() + "#" + actor.katon.ToString() + "#" +
             * actor.futon.ToString() + "#" + actor.raiton.ToString() + "#" + actor.suiton.ToString() + "#" +
             * MainClass.chakralvl2 + "#" + MainClass.chakralvl3 + "#" + MainClass.chakralvl4 + "#" +
             * MainClass.chakralvl5 + "#" + MainClass.chakralvl6 + "#" + actor.usingDoton.ToString() + "#" +
             * actor.usingKaton.ToString() + "#" + actor.usingFuton.ToString() + "#" + actor.usingRaiton.ToString() +
             * "#" + actor.usingSuiton.ToString() + "#" + actor.equipedDoton.ToString() + "#" +
             * actor.equipedKaton.ToString() + "#" + actor.equipedFuton.ToString() + "#" +
             * actor.equipedRaiton.ToString() + "#" + actor.suitonEquiped.ToString() + "#" +
             * actor.original_Pc.ToString() + "#" + actor.original_Pm.ToString() + "#" + actor.pe.ToString() + "#" +
             * actor.cd.ToString() + "#" + actor.invoc.ToString() + "#" + actor.Initiative.ToString() + "#" +
             * actor.job1 + "#" + actor.job2 + "#" + actor.specialite1 + "#" +
             * actor.specialite2 + "#" + actor.TotalPoid.ToString() + "#" + actor.CurrentPoid.ToString() +
             * "#" + actor.Ryo.ToString() + "#" + actor.resiDotonPercent.ToString() + "#" +
             * actor.resiKatonPercent.ToString() + "#" + actor.resiFutonPercent.ToString() + "#" +
             * actor.resiRaitonPercent.ToString() + "#" + actor.resiSuitonPercent.ToString() + "#" +
             * actor.dodgePC.ToString() + "#" + actor.dodgePM.ToString() + "#" + actor.dodgePE.ToString() + "#" +
             * actor.dodgeCD.ToString() + "#" + actor.removePC.ToString() + "#" + actor.removePM.ToString() + "#" +
             * actor.removePE.ToString() + "#" + actor.removeCD.ToString() + "#" + actor.escape.ToString() + "#" +
             * actor.blocage.ToString() + "#" + _sorts + "#" + actor.resiDotonFix + "#" + actor.resiKatonFix + "#" +
             * actor.resiFutonFix + "#" + actor.resiRaitonFix + "#" + actor.resiSuitonFix + "#" + actor.resiFix + "#" +
             * actor.domDotonFix + "#" + actor.domKatonFix + "#" + actor.domFutonFix + "#" + actor.domRaitonFix + "#" +
             * actor.domSuitonFix + "#" + actor.domFix + "#" + actor.power + "#" + actor.powerEquiped +
             * "•" + quete +
             * "•inBattle•"
             + actor.spellPointLeft;
             */
            #region reception des données du joueur qui a été selectionné dans la liste des joueurs

            // cmd[2] = Pseudo#ClasseName#Spirit#SpiritLvl#Pvp#village#MaskColors#Orientation#Level#map#rang#CurrentPdv#totalPdv#CurrentXP#TotalXp#doton#katon#futon#raiton#suiton#chakralvl2#chakralvl3#chakralvl4#chakralvl5#chakralvl6#usingDoton#usingKaton#usingFuton#usingRaiton#usingSuiton#equipedDoton#equipedKaton#equipedFuton#equipedRaiton#suitonEquiped#pc#pm#pe#cd#invoc#Initiative#job1#job2#specialite1#specialite2#TotalPoid#CurrentPoid#Ryo#resiDoton#resiKaton#resiFuton#resiRaiton#resiSuiton#evasion#blockage#sorts#resiDotonFix#resiKatonFix#resiFutonFix#resiRaitonFix#resiSuitonFix#resiFix#domDotonFix#domKatonFix#domFutonFix#domRaitonFix#domSuitonFix#domFix#puissance#puissanceEquiped
            string[] playerData = commandStrings[1].Split('#');

            string actorName = playerData[0];
            Enums.ActorClass.ClassName className = (Enums.ActorClass.ClassName)Enum.Parse(typeof(Enums.ActorClass.ClassName), playerData[1]);
            Enums.Spirit.Name          spirit    = (Enums.Spirit.Name)Enum.Parse(typeof(Enums.Spirit.Name), playerData[2]);
            int  spiritLevel = int.Parse(playerData[3]);
            bool pvpEnabled  = bool.Parse(playerData[4]);
            Enums.HiddenVillage.Names hiddenVillage = (Enums.HiddenVillage.Names)Enum.Parse(typeof(Enums.HiddenVillage.Names), playerData[5]);
            string              maskColorsString    = playerData[6];
            string[]            maskColors          = playerData[6].Split('/');
            int                 orientation         = int.Parse(playerData[7]);
            int                 level             = int.Parse(playerData[8]);
            string              map               = playerData[9];
            Enums.Rang.official officialRang      = (Enums.Rang.official)Enum.Parse(typeof(Enums.Rang.official), playerData[10]);
            int                 currentHealth     = int.Parse(playerData[11]);
            int                 maxHealth         = int.Parse(playerData[12]);
            int                 currentXp         = int.Parse(playerData[13]);
            int                 maxXp             = int.Parse(playerData[14]);
            int                 doton             = int.Parse(playerData[15]);
            int                 katon             = int.Parse(playerData[16]);
            int                 futon             = int.Parse(playerData[17]);
            int                 raiton            = int.Parse(playerData[18]);
            int                 suiton            = int.Parse(playerData[19]);
            int                 chakra1Level      = int.Parse(playerData[20]);
            int                 chakra2Level      = int.Parse(playerData[21]);
            int                 chakra3Level      = int.Parse(playerData[22]);
            int                 chakra4Level      = int.Parse(playerData[23]);
            int                 chakra5Level      = int.Parse(playerData[24]);
            int                 usingDoton        = int.Parse(playerData[25]);
            int                 usingKaton        = int.Parse(playerData[26]);
            int                 usingFuton        = int.Parse(playerData[27]);
            int                 usingRaiton       = int.Parse(playerData[28]);
            int                 usingSuiton       = int.Parse(playerData[29]);
            int                 equipedDoton      = int.Parse(playerData[30]);
            int                 equipedKaton      = int.Parse(playerData[31]);
            int                 equipedFuton      = int.Parse(playerData[32]);
            int                 equipedRaiton     = int.Parse(playerData[33]);
            int                 equipedSuiton     = int.Parse(playerData[34]);
            int                 originalPc        = int.Parse(playerData[35]);
            int                 originalPm        = int.Parse(playerData[36]);
            int                 pe                = int.Parse(playerData[37]);
            int                 cd                = int.Parse(playerData[38]);
            int                 summon            = int.Parse(playerData[39]);
            int                 initiative        = int.Parse(playerData[40]);
            string              job1              = playerData[41];
            string              job2              = playerData[42];
            string              specialty1        = playerData[43];
            string              specialty2        = playerData[44];
            int                 maxWeight         = int.Parse(playerData[45]);
            int                 currentWeight     = int.Parse(playerData[46]);
            int                 ryo               = int.Parse(playerData[47]);
            int                 resiDotonPercent  = int.Parse(playerData[48]);
            int                 resiKatonPercent  = int.Parse(playerData[49]);
            int                 resiFutonPercent  = int.Parse(playerData[50]);
            int                 resiRaitonPercent = int.Parse(playerData[51]);
            int                 resiSuitonPercent = int.Parse(playerData[52]);
            int                 dodgePc           = int.Parse(playerData[53]);
            int                 dodgePm           = int.Parse(playerData[54]);
            int                 dodgePe           = int.Parse(playerData[55]);
            int                 dodgeCd           = int.Parse(playerData[56]);
            int                 removePc          = int.Parse(playerData[57]);
            int                 removePm          = int.Parse(playerData[58]);
            int                 removePe          = int.Parse(playerData[59]);
            int                 removeCd          = int.Parse(playerData[60]);
            int                 escape            = int.Parse(playerData[61]);
            int                 blocage           = int.Parse(playerData[62]);
            string              spells            = playerData[63];
            int                 resiDotonFix      = int.Parse(playerData[64]);
            int                 resiKatonFix      = int.Parse(playerData[65]);
            int                 resiFutonFix      = int.Parse(playerData[66]);
            int                 resiRaitonFix     = int.Parse(playerData[67]);
            int                 resiSuitonFix     = int.Parse(playerData[68]);
            int                 resiFix           = int.Parse(playerData[69]);
            int                 domDotonFix       = int.Parse(playerData[70]);
            int                 domKatonFix       = int.Parse(playerData[71]);
            int                 domFutonFix       = int.Parse(playerData[72]);
            int                 domRaitonFix      = int.Parse(playerData[73]);
            int                 domSuitonFix      = int.Parse(playerData[74]);
            int                 domFix            = int.Parse(playerData[75]);
            int                 power             = int.Parse(playerData[76]);
            int                 equipedPower      = int.Parse(playerData[77]);

            string quest = commandStrings[2];

            bool inBattle = bool.Parse(commandStrings[3]);      // ce variable est controlé dans chaque map "Start + _0_0_0" pour voir si le joueur est en combat, c'est au niveau des map que le system decoReco fonction, il faut penser a retirer ce systeme des map et de le mettre ici, voir map Start "if (CommonCode.MyPlayerInfo.instance.Event == "inBattle")" et map _0_0_0

            int spellPointLeft = int.Parse(commandStrings[4]);

            new System.Threading.Thread((() =>
            {
                // on affiche une fenetre de chargement
                // compteur pour voir si le temps passé est sufisant pour voir le chargement, si non on oblige le joueur a patienter le reste du temps détérminé pour l'animation qui est de 300 miliseconds
                Benchmark.Start();
                Bmp loadingParent = new Bmp(@"gfx\general\artwork\loading\" + className + ".dat", new Point(0, 0), "__loadingParent", Manager.TypeGfx.Bgr, true, 1);
                loadingParent.zindex = 100;
                Manager.manager.GfxTopList.Add(loadingParent);

                // barre de chargement
                Bmp loadingGif = new Bmp(@"gfx\general\obj\1\loading1.dat", Point.Empty, "__loadingGif", Manager.TypeGfx.Bgr, true);
                loadingGif.point = new Point((ScreenManager.WindowWidth / 2) - (loadingGif.rectangle.Width / 2), ScreenManager.WindowHeight - 50);
                loadingParent.Child.Add(loadingGif);

                Txt loadingLabel = new Txt(CommonCode.TranslateText(187), Point.Empty, "__loadingLabel", Manager.TypeGfx.Top, true, new Font("Verdana", 10, FontStyle.Bold), Brushes.White);
                loadingLabel.point = new Point((ScreenManager.WindowWidth / 2) - (TextRenderer.MeasureText(loadingLabel.Text, loadingLabel.font).Width / 2), 610);
                loadingParent.Child.Add(loadingLabel);

                Anim LoadingSystemStart = new Anim(15, 1);
                for (int cnt = 0; cnt < 15; cnt++)
                {
                    LoadingSystemStart.AddCell(@"gfx\general\obj\1\LoadingSystem.dat", 0, 300 + (cnt * 12), 550, 25 + (cnt * 2), 25 + (cnt * 2), 0.1F * (Convert.ToSingle(cnt)), 15);
                }
                LoadingSystemStart.AddCell(@"gfx\general\obj\1\LoadingSystem.dat", 0, 300 + (15 * 12), 550, 25 + (15 * 2), 25 + (15 * 2), 0.1F * (Convert.ToSingle(15)), 15);
                LoadingSystemStart.Ini(Manager.TypeGfx.Top, "__LoadingSystemStart", true);
                LoadingSystemStart.AutoResetAnim = false;
                LoadingSystemStart.Start();
                loadingParent.Child.Add(LoadingSystemStart);

                /////////////////////////////////////////////////////////////
                CommonCode.MyPlayerInfo.instance.ibPlayer = new Bmp();
                CommonCode.MyPlayerInfo.instance.ibPlayer.tag = new Actor();
                Actor actor = (Actor)CommonCode.MyPlayerInfo.instance.ibPlayer.tag;
                actor.pseudo = actorName;
                actor.className = className;
                actor.spirit = spirit;
                actor.spiritLevel = spiritLevel;
                actor.pvpEnabled = pvpEnabled;
                actor.hiddenVillage = hiddenVillage;
                actor.maskColorString = maskColorsString;
                actor.directionLook = orientation;
                actor.level = level;
                actor.map = map;
                actor.officialRang = officialRang;
                actor.currentHealth = currentHealth;
                actor.maxHealth = maxHealth;
                actor.currentXp = currentXp;
                actor.maxXp = maxXp;
                actor.doton = doton;
                actor.katon = katon;
                actor.futon = futon;
                actor.raiton = raiton;
                actor.suiton = suiton;

                // association des données des chakralvl2,3,4,5
                CommonCode.chakra1Level = chakra1Level;
                CommonCode.chakra2Level = chakra2Level;
                CommonCode.chakra3Level = chakra3Level;
                CommonCode.chakra4Level = chakra4Level;
                CommonCode.chakra5Level = chakra5Level;

                actor.usingDoton = usingDoton;
                actor.usingKaton = usingKaton;
                actor.usingFuton = usingFuton;
                actor.usingRaiton = usingRaiton;
                actor.usingSuiton = usingSuiton;
                actor.equipedDoton = equipedDoton;
                actor.equipedKaton = equipedKaton;
                actor.equipedFuton = equipedFuton;
                actor.equipedRaiton = equipedRaiton;
                actor.equipedSuiton = equipedSuiton;
                actor.originalPc = originalPc;
                actor.originalPm = originalPm;
                actor.pe = pe;
                actor.cd = cd;
                actor.summons = summon;
                actor.initiative = initiative;
                actor.job1 = job1;
                actor.job2 = job2;
                actor.specialty1 = specialty1;
                actor.specialty2 = specialty2;
                actor.maxWeight = maxWeight;
                actor.currentWeight = currentWeight;
                actor.ryo = ryo;
                actor.resiDotonPercent = resiDotonPercent;
                actor.resiKatonPercent = resiKatonPercent;
                actor.resiFutonPercent = resiFutonPercent;
                actor.resiRaitonPercent = resiRaitonPercent;
                actor.resiSuitonPercent = resiSuitonPercent;
                actor.dodgePc = dodgePc;
                actor.dodgePm = dodgePm;
                actor.dodgePe = dodgePe;
                actor.dodgeCd = dodgeCd;
                actor.removePc = removePc;
                actor.removePm = removePm;
                actor.removePe = removePe;
                actor.removeCd = removeCd;
                actor.escape = escape;
                actor.blocage = blocage;

                string _sorts = spells;
                if (_sorts != "")
                {
                    for (int cnt = 0; cnt < _sorts.Split('|').Length; cnt++)
                    {
                        string tmp_data = _sorts.Split('|')[cnt];
                        Actor.SpellsInformations _info_sorts = new Actor.SpellsInformations();
                        _info_sorts.sortID = Convert.ToInt32(tmp_data.Split(':')[0]);
                        _info_sorts.emplacement = Convert.ToInt32(tmp_data.Split(':')[1]);
                        _info_sorts.level = Convert.ToInt32(tmp_data.Split(':')[2]);
                        _info_sorts.colorSort = Convert.ToInt32(tmp_data.Split(':')[3]);
                        actor.spells.Add(_info_sorts);
                    }
                }
                actor.resiDotonFix = resiDotonFix;
                actor.resiKatonFix = resiKatonFix;
                actor.resiFutonFix = resiFutonFix;
                actor.resiRaitonFix = resiRaitonFix;
                actor.resiSuitonFix = resiSuitonFix;
                actor.resiFix = resiFix;

                // supression des sorts s'il sont déja été affiché avant
                if (HudHandle.all_sorts.Child.Count > 0)
                {
                    HudHandle.all_sorts.Child.Clear();
                }

                // affichage des sorts
                foreach (Actor.SpellsInformations t in actor.spells)
                {
                    Bmp __spell = new Bmp(@"gfx\general\obj\1\spells.dat", new Point(MMORPG.spells.spellPositions[t.emplacement].X, MMORPG.spells.spellPositions[t.emplacement].Y), "__spell", Manager.TypeGfx.Top, true, 1, SpriteSheet.GetSpriteSheet(t.sortID + "_spell", 0));
                    // attachement des infos du sort au tag de l'image
                    __spell.tag = t;
                    __spell.MouseMove += MMORPG.Battle.__spell_MouseMove;
                    __spell.MouseOut += CommonCode.CursorDefault_MouseOut;
                    __spell.MouseClic += MMORPG.Battle.__spell_MouseClic;
                    HudHandle.all_sorts.Child.Add(__spell);
                }

                actor.domDotonFix = domDotonFix;
                actor.domKatonFix = domKatonFix;
                actor.domFutonFix = domFutonFix;
                actor.domRaitonFix = domRaitonFix;
                actor.domSuitonFix = domSuitonFix;
                actor.domFix = domFix;
                actor.power = power;
                actor.equipedPower = equipedPower;
                CommonCode.CurMap = actor.map;

                Benchmark.End();
                System.Threading.Thread.Sleep(225);
                loadingLabel.Text = CommonCode.TranslateText(188);
                loadingLabel.point = new Point((ScreenManager.WindowWidth / 2) - (TextRenderer.MeasureText(loadingLabel.Text, loadingLabel.font).Width / 2), 610);

                ////////////////// mode designe
                LoadingSystemStart.Visible(false);
                loadingParent.Child.Remove(LoadingSystemStart);

                Anim LoadingSystemEnd = new Anim(15, 1);
                for (int cnt = 0; cnt < 15; cnt++)
                {
                    LoadingSystemEnd.AddCell(@"gfx\general\obj\1\LoadingSystem.dat", 0, LoadingSystemStart.img.point.X + (cnt * 12), 550, 25 + ((15 - cnt) * 2), 25 + ((15 - cnt) * 2), 0.1F * (Convert.ToSingle(15 - cnt)), 15);
                }

                LoadingSystemEnd.Ini(Manager.TypeGfx.Top, "__LoadingSystemEnd", true);
                LoadingSystemEnd.AutoResetAnim = false;
                LoadingSystemEnd.Start();
                loadingParent.Child.Add(LoadingSystemEnd);

                Anim LoadingGfxStart = new Anim(15, 1);
                for (int cnt = 0; cnt < 15; cnt++)
                {
                    LoadingGfxStart.AddCell(@"gfx\general\obj\1\GrayPaletteColor.dat", 0, 300 + (cnt * 12), 550, 25 + (cnt * 2), 25 + (cnt * 2), 0.1F * (Convert.ToSingle(cnt)), 15);
                }
                LoadingGfxStart.AddCell(@"gfx\general\obj\1\paletteColor.dat", 0, 300 + (15 * 12), 550, 25 + (15 * 2), 25 + (15 * 2), 0.1F * (Convert.ToSingle(15)), 15);
                LoadingGfxStart.Ini(Manager.TypeGfx.Top, "__paletteColor", true);
                LoadingGfxStart.AutoResetAnim = false;
                LoadingGfxStart.Start();
                loadingParent.Child.Add(LoadingGfxStart);

                loadingLabel.Text = CommonCode.TranslateText(189);
                loadingLabel.point = new Point((ScreenManager.WindowWidth / 2) - (TextRenderer.MeasureText(loadingLabel.Text, loadingLabel.font).Width / 2), 610);

                ///////////////// affichage des composants du tableau stats
                // affichage de l'avatar
                MenuStats.ThumbsAvatar = new Bmp(@"gfx\general\classes\" + actor.className + ".dat", new Point(15, 10), "ThumbsAvatar", Manager.TypeGfx.Top, true, 1, SpriteSheet.GetSpriteSheet("avatar_" + actor.className, 0));
                MenuStats.ThumbsAvatar.tag = CommonCode.MyPlayerInfo.instance.ibPlayer.tag;
                CommonCode.ApplyMaskColorToClasse(MenuStats.ThumbsAvatar);
                MenuStats.StatsImg.Child.Add(MenuStats.ThumbsAvatar);

                // affichage du nom du personnage
                MenuStats.StatsPlayerName.Text = actor.pseudo[0].ToString().ToUpper() + actor.pseudo.Substring(1, actor.pseudo.Length - 1);

                // level
                MenuStats.StatsLevel.Text = CommonCode.TranslateText(50) + " " + actor.level;

                // affichage du rang général
                MenuStats.Rang.Text = CommonCode.officialRangToCurrentLangTranslation(actor.officialRang);

                // affichage du level Pvp
                MenuStats.LevelPvp.Text = actor.spiritLevel.ToString();

                // affichage du grade Pvp
                if (spirit != Enums.Spirit.Name.neutral)
                {
                    MenuStats.GradePvp = new Bmp(@"gfx\general\obj\2\" + actor.spirit + @"\" + MenuStats.LevelPvp.Text + ".dat", new Point(276 + (15 - Convert.ToInt16(MenuStats.LevelPvp.Text)), 2), new Size(40 + Convert.ToInt16(MenuStats.LevelPvp.Text), 20 + Convert.ToInt16(MenuStats.LevelPvp.Text)), "PlayerStats." + actor.spirit, Manager.TypeGfx.Top, true, 1);
                    MenuStats.StatsImg.Child.Add(MenuStats.GradePvp);
                }

                // update des pdv,Pc
                HudHandle.UpdateHealth();
                HudHandle.UpdatePc();
                HudHandle.UpdatePm();

                MenuStats.Flag = new Bmp(@"gfx\general\obj\1\pays_thumbs.dat", new Point(240, 8), "__Flag", Manager.TypeGfx.Top, true, 1, SpriteSheet.GetSpriteSheet("pays_" + actor.hiddenVillage + "_thumbs", 0));
                MenuStats.StatsImg.Child.Add(MenuStats.Flag);
                MenuStats.LFlag.Text = playerData[5];
                MenuStats.Fusion1.Text = CommonCode.TranslateText(75);
                MenuStats.Fusion2.Text = CommonCode.TranslateText(75);
                MenuStats.NiveauGaugeTxt.Text = CommonCode.TranslateText(50) + " " + actor.level;

                // NiveauGaugeRecPercent, barre de progression du niveau
                // calcule du pourcentage du niveau en progression
                int CurrentProgressLevel = actor.currentXp;
                int TotalProgressLevel = actor.maxXp;
                int PercentProgressLevel;

                if (TotalProgressLevel != 0)
                {
                    PercentProgressLevel = (CurrentProgressLevel * 100) / TotalProgressLevel;
                }
                else
                {
                    PercentProgressLevel = 100;
                }

                MenuStats.NiveauGaugeRecPercent.size.Width = (258 * PercentProgressLevel) / 100;

                // affichage du label progression lvl
                MenuStats.NiveauGaugeTxtCurrent.Text = CurrentProgressLevel + "/" + TotalProgressLevel + " (" + PercentProgressLevel + "%)";
                MenuStats.NiveauGaugeTxtCurrent.point = new Point(MenuStats.NiveauGaugeRec2.point.X + (MenuStats.NiveauGaugeRec2.size.Width / 2) - (TextRenderer.MeasureText(MenuStats.NiveauGaugeTxtCurrent.Text, MenuStats.NiveauGaugeTxtCurrent.font).Width / 2), MenuStats.NiveauGaugeRec2.point.Y);

                // raffrechissement du text pour des mesures de changement de langue
                MenuStats.AffiniteElementaireTxt.Text = CommonCode.TranslateText(76);
                MenuStats.terreStats.Text = "(" + CommonCode.TranslateText(77) + ")";
                MenuStats.FeuStats.Text = "(" + CommonCode.TranslateText(78) + ")";
                MenuStats.VentStats.Text = "(" + CommonCode.TranslateText(79) + ")";
                MenuStats.FoudreStats.Text = "(" + CommonCode.TranslateText(80) + ")";
                MenuStats.EauStats.Text = "(" + CommonCode.TranslateText(81) + ")";

                MenuStats.TerrePuissance.Text = "(" + actor.doton + "+" + actor.equipedDoton + ")=" + (actor.doton + actor.equipedDoton);
                MenuStats.FeuPuissance.Text = "(" + actor.katon + "+" + actor.equipedKaton + ")=" + (actor.katon + actor.equipedKaton);
                MenuStats.VentPuissance.Text = "(" + actor.futon + "+" + actor.equipedFuton + ")=" + (actor.futon + actor.equipedFuton);
                MenuStats.FoudrePuissance.Text = "(" + actor.raiton + "+" + actor.equipedRaiton + ")=" + (actor.raiton + actor.equipedRaiton);
                MenuStats.EauPuissance.Text = "(" + actor.suiton + "+" + actor.equipedSuiton + ")=" + (actor.suiton + actor.equipedSuiton);

                MenuStats.Lvl1RegleTxt.Text = CommonCode.TranslateText(82);
                MenuStats.Lvl2RegleTxt.Text = CommonCode.TranslateText(83);
                MenuStats.Lvl3RegleTxt.Text = CommonCode.TranslateText(84);
                MenuStats.Lvl4RegleTxt.Text = CommonCode.TranslateText(85);
                MenuStats.Lvl5RegleTxt.Text = CommonCode.TranslateText(86);
                MenuStats.Lvl6RegleTxt.Text = CommonCode.TranslateText(87);

                // affichage de la gauge lvl chakra selon les points
                MenuStats.Lvl2ReglePts.Text = CommonCode.chakra1Level.ToString();
                MenuStats.Lvl3ReglePts.Text = CommonCode.chakra2Level.ToString();
                MenuStats.Lvl4ReglePts.Text = CommonCode.chakra3Level.ToString();
                MenuStats.Lvl5ReglePts.Text = CommonCode.chakra4Level.ToString();
                MenuStats.Lvl6ReglePts.Text = CommonCode.chakra5Level.ToString();

                // modification du lvl de l'utilisation de l'element
                CommonCode.UpdateUsingElement(Enums.Chakra.Element.doton, actor.usingDoton);
                CommonCode.UpdateUsingElement(Enums.Chakra.Element.katon, actor.usingKaton);
                CommonCode.UpdateUsingElement(Enums.Chakra.Element.futon, actor.usingFuton);
                CommonCode.UpdateUsingElement(Enums.Chakra.Element.raiton, actor.usingRaiton);
                CommonCode.UpdateUsingElement(Enums.Chakra.Element.suiton, actor.equipedSuiton);

                MenuStats.DotonLvl.Text = actor.usingDoton.ToString();
                MenuStats.KatonLvl.Text = actor.usingKaton.ToString();
                MenuStats.FutonLvl.Text = actor.usingFuton.ToString();
                MenuStats.RaitonLvl.Text = actor.usingRaiton.ToString();
                MenuStats.SuitonLvl.Text = actor.usingSuiton.ToString();

                // bar de vie selon les pdv 11 current, 12 total
                int _maxHealth = actor.maxHealth;
                int _currentHealth = actor.currentHealth;
                int X = 0;
                if (_maxHealth != 0)
                {
                    X = (_currentHealth * 100) / _maxHealth;
                }
                MenuStats.VieBar.size.Width = (236 * X) / 100;

                // point de vie dans Menustats
                MenuStats.VieLabel.Text = CommonCode.TranslateText(88);
                MenuStats.ViePts.Text = _currentHealth.ToString() + " / " + _maxHealth + " (" + X + "%)";
                MenuStats.PC.Text = actor.originalPc.ToString();
                MenuStats.PM.Text = actor.originalPm.ToString();
                MenuStats.PE.Text = actor.pe.ToString();
                MenuStats.CD.Text = actor.cd.ToString();
                MenuStats.Invoc.Text = actor.summons.ToString();
                MenuStats.Initiative.Text = actor.initiative.ToString();
                MenuStats.Puissance.Text = (actor.power + actor.equipedPower).ToString();
                MenuStats.DomFix.Text = actor.domFix.ToString();
                MenuStats.Job1Label.Text = CommonCode.TranslateText(95) + " 1";
                MenuStats.Specialite1Label.Text = CommonCode.TranslateText(96) + " 1";
                MenuStats.Job2Labe1.Text = CommonCode.TranslateText(95) + " 2";
                MenuStats.Specialite2Label.Text = CommonCode.TranslateText(96) + " 2";
                MenuStats.PoidLabel.Text = CommonCode.TranslateText(97);
                int TotalPoid = actor.maxWeight;
                int CurrentPoid = actor.currentWeight;
                int PercentPoid = (CurrentPoid * 100) / TotalPoid;
                MenuStats.PoidRec.size.Width = (116 * PercentPoid) / 100;
                MenuStats.Poid.Text = CurrentPoid + " / " + TotalPoid + " (" + PercentPoid + "%)";
                MenuStats.Poid.point.X = MenuStats.PoidRec.point.X + 58 - (TextRenderer.MeasureText(MenuStats.Poid.Text, MenuStats.Poid.font).Width / 2);
                MenuStats.Ryo.Text = CommonCode.MoneyThousendSeparation(actor.ryo.ToString());
                MenuStats.resiDotonTxt.Text = actor.resiDotonPercent.ToString() + "%";
                MenuStats.resiKatonTxt.Text = actor.resiKatonPercent.ToString() + "%";
                MenuStats.resiFutonTxt.Text = actor.resiFutonPercent.ToString() + "%";
                MenuStats.resiRaitonTxt.Text = actor.resiRaitonPercent.ToString() + "%";
                MenuStats.resiSuitonTxt.Text = actor.resiSuitonPercent.ToString() + "%";
                MenuStats.__esquivePC_Txt.Text = actor.dodgePc.ToString();
                MenuStats.__esquivePM_Txt.Text = actor.dodgePm.ToString();
                MenuStats.__retraitPC_Txt.Text = actor.removePc.ToString();
                MenuStats.__retraitPM_Txt.Text = actor.removePm.ToString();

                // quete
                // convertir la list de quete en string
                if (quest != "")
                {
                    for (int cnt = 0; cnt < quest.Split('/').Length; cnt++)
                    {
                        string quete = quest.Split('/')[cnt];
                        Actor.QuestInformations qi = new Actor.QuestInformations();
                        qi.nom_quete = quete.Split(':')[0];
                        qi.totalSteps = Convert.ToInt16(quete.Split(':')[1]);
                        qi.currentStep = Convert.ToInt16(quete.Split(':')[2]);
                        qi.submited = Convert.ToBoolean(quete.Split(':')[3]);
                        actor.Quests.Add(qi);
                    }
                }

                // verification si le joueur été en combat pour le rediriger vers ce joueur
                if (inBattle)
                {
                    CommonCode.MyPlayerInfo.instance.pseudo = actor.pseudo;
                    CommonCode.MyPlayerInfo.instance.Event = "inBattle";
                }

                actor.spellPointLeft = spellPointLeft;

                ///// effacement du menu loading
                loadingLabel.Text = CommonCode.TranslateText(190);
                loadingLabel.point = new Point((ScreenManager.WindowWidth / 2) - (TextRenderer.MeasureText(loadingLabel.Text, loadingLabel.font).Width / 2), 610);
                System.Threading.Thread.Sleep(2000);

                // changement de map
                Manager.manager.mainForm.BeginInvoke((Action)(() =>
                {
                    CommonCode.ChangeMap(actor.map);  // affichage du hud
                    Manager.manager.GfxTopList.Remove(loadingParent);
                }));

                //////////////////////// affichage du hud
                Manager.manager.mainForm.BeginInvoke((Action)(() =>
                {
                    //////////// menu des sorts
                    MainForm.drawSpellStatesMenuOnce();
                    HudHandle.HudVisibility(true);  // affichage du hud
                }));
            })).Start();
            #endregion
        }
예제 #3
0
        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
        }
        public void Fetch(string[] commandStrings)
        {
            Txt[] lPseudo    = MMORPG.GameStates.SelectPlayer.lPseudo;
            Txt[] lLvlPlayer = MMORPG.GameStates.SelectPlayer.lLvlPlayer;
            Txt[] lLvlSpirit = MMORPG.GameStates.SelectPlayer.lLvlSpirit;
            Bmp[] ibPlayers  = MMORPG.GameStates.SelectPlayer.ibPlayers;
            Bmp[] delete     = MMORPG.GameStates.SelectPlayer.delete;
            Bmp[] village    = MMORPG.GameStates.SelectPlayer.village;

            #region liste les joueurs que le joueur a crée
            string[] players = commandStrings[1].Split('|');

            for (int cnt = 0; cnt < players.Length; cnt++)
            {
                // pseudo,level,spirit,classe,pvp,spiritLvl,village,MaskColors,null,null

                string[]                   states           = players[cnt].Split('#');
                string                     actorName        = states[0];
                int                        level            = int.Parse(states[1]);
                Enums.Spirit.Name          spirit           = (Enums.Spirit.Name)Enum.Parse(typeof(Enums.Spirit.Name), states[2]);
                Enums.ActorClass.ClassName actorClass       = (Enums.ActorClass.ClassName)Enum.Parse(typeof(Enums.ActorClass.ClassName), states[3]);
                bool                       pvpEnabled       = Convert.ToBoolean(Convert.ToInt16(states[4]));
                int                        spiritLevel      = int.Parse(states[5]);
                Enums.HiddenVillage.Names  hiddenVillage    = (Enums.HiddenVillage.Names)Enum.Parse(typeof(Enums.HiddenVillage.Names), states[6]);
                string                     maskColorsString = states[7];
                // states 8 + 9 not used

                lPseudo[cnt].Text = actorName;
                ibPlayers[cnt].Child.Add(lPseudo[cnt]);

                lLvlPlayer[cnt].Text = CommonCode.TranslateText(50) + " " + level;


                ibPlayers[cnt].Child.Add(lLvlPlayer[cnt]);

                ibPlayers[cnt].ChangeBmp(@"gfx\general\classes\" + actorClass + ".dat", SpriteSheet.GetSpriteSheet(actorClass.ToString(), 0));
                Manager.manager.GfxObjList.Add(ibPlayers[cnt]);

                ibPlayers[cnt].tag = new Actor(actorName, level, spirit, actorClass, pvpEnabled, spiritLevel, hiddenVillage, maskColorsString, 0, Enums.AnimatedActions.Name.idle, "null");

                //////// alignement neutral ou ange ou demon
                if (spirit != Enums.Spirit.Name.neutral)
                {
                    Bmp spiritBmp = new Bmp(@"gfx\general\obj\2\" + spirit + @"\" + spiritLevel + ".dat", new Point(0, 0), "spirit." + actorName, Manager.TypeGfx.Obj, true, 1);
                    spiritBmp.point = new Point((ibPlayers[cnt].rectangle.Width / 2) - (spiritBmp.rectangle.Width / 2), -spiritBmp.rectangle.Height);
                    ibPlayers[cnt].Child.Add(spiritBmp);

                    lLvlPlayer[cnt].point = new Point((ibPlayers[cnt].rectangle.Width / 2) - ((TextRenderer.MeasureText(lLvlPlayer[cnt].Text, lLvlPlayer[cnt].font).Width) / 2), -spiritBmp.rectangle.Height - 15);
                    lPseudo[cnt].point    = new Point((ibPlayers[cnt].rectangle.Width / 2) - (TextRenderer.MeasureText(lPseudo[cnt].Text, lPseudo[cnt].font).Width / 2) + 5, lLvlPlayer[cnt].point.Y - 15);
                    lLvlSpirit[cnt].Text  = spiritLevel.ToString();
                    lLvlSpirit[cnt].point = new Point((ibPlayers[cnt].rectangle.Width / 2) - (TextRenderer.MeasureText(lLvlSpirit[cnt].Text, lLvlSpirit[cnt].font).Width / 2) + 2, -spiritBmp.rectangle.Y - (spiritBmp.rectangle.Height / 2) - (TextRenderer.MeasureText(lLvlSpirit[cnt].Text, lLvlSpirit[cnt].font).Height / 2));
                    ibPlayers[cnt].Child.Add(lLvlSpirit[cnt]);

                    if (pvpEnabled)
                    {
                        Bmp PvpOn = new Bmp(@"gfx\map\SelectPlayer\obj\1.dat", new Point(ibPlayers[cnt].point.X + (ibPlayers[cnt].rectangle.Width / 2) - 24, ibPlayers[cnt].point.Y + ibPlayers[cnt].rectangle.Height + 30), "PvpOn", Manager.TypeGfx.Obj, true, 1);
                        PvpOn.point = new Point((ibPlayers[cnt].rectangle.Width / 2) - (PvpOn.rectangle.Width / 2), ibPlayers[cnt].rectangle.Height + 30);
                        ibPlayers[cnt].Child.Add(PvpOn);
                    }
                }
                else
                {
                    lLvlPlayer[cnt].point = new Point((ibPlayers[cnt].rectangle.Width / 2) - ((TextRenderer.MeasureText(lLvlPlayer[cnt].Text, lLvlPlayer[cnt].font).Width) / 2), -20);
                    lPseudo[cnt].point    = new Point((ibPlayers[cnt].rectangle.Width / 2) - ((TextRenderer.MeasureText(states[0], lPseudo[cnt].font).Width) / 2) + 2, -35);
                }

                village[cnt]       = new Bmp(@"gfx\general\obj\1\pays_thumbs.dat", new Point(0, 0), "village " + hiddenVillage, Manager.TypeGfx.Obj, true, 1, SpriteSheet.GetSpriteSheet("pays_" + hiddenVillage + "_thumbs", 0));
                village[cnt].point = new Point((ibPlayers[cnt].rectangle.Width / 2) - (village[cnt].rectangle.Width / 2), lPseudo[cnt].point.Y - village[cnt].rectangle.Height);
                ibPlayers[cnt].Child.Add(village[cnt]);

                // coloriage du personnage
                CommonCode.ApplyMaskColorToClasse(ibPlayers[cnt]);

                delete[cnt].point   = new Point((ibPlayers[cnt].rectangle.Width / 2) - (delete[cnt].rectangle.Width / 2), village[cnt].point.Y - 20);
                delete[cnt].visible = true;

                ibPlayers[cnt].name = actorName;
            }
            #endregion
        }
예제 #5
0
        public void Fetch(string[] commandStrings)
        {
            #region
            // connexion d'un joueur
            // pseudo#classe#pvp:spirit:spiritLvl#village#MaskColors#map_position#orientation#level#action#waypoint   - separateur entre plusieurs joueurs
            // pvp=0 donc mode pvp off, si pvp = 1 mode pvp on
            string[] data = commandStrings[1].Split('#');

            string playerName = data[0];
            Enums.ActorClass.ClassName className = (Enums.ActorClass.ClassName)Enum.Parse(typeof(Enums.ActorClass.ClassName), data[1]);
            bool pvpEnabled          = bool.Parse(data[2].Split(':')[0]);
            Enums.Spirit.Name spirit = (Enums.Spirit.Name)Enum.Parse(typeof(Enums.Spirit.Name), data[2].Split(':')[1]);
            int spiritLevel          = int.Parse(data[2].Split(':')[2]);
            Enums.HiddenVillage.Names hiddenVillage = (Enums.HiddenVillage.Names)Enum.Parse(typeof(Enums.HiddenVillage.Names), data[3]);
            string   maskColorsString = data[4];
            string[] maskColors       = maskColorsString.Split('/');
            Point    mapPosition      = new Point(Convert.ToInt16(data[5].Split('/')[0]), Convert.ToInt16(data[5].Split('/')[1]));
            int      directionLook    = int.Parse(data[6]);
            int      level            = int.Parse(data[7]);
            Enums.AnimatedActions.Name animatedAction = (data[8] != "") ? (Enums.AnimatedActions.Name)Enum.Parse(typeof(Enums.AnimatedActions.Name), data[8]) : Enums.AnimatedActions.Name.idle;
            string waypoint = data[9];

            // verifier si le personnage est deja present pour ne pas créer un doublons, si par erreur le serveur n'envoie pas une cmd de deconnexion du client ou SessionZero
            if (CommonCode.AllActorsInMap.Exists(f => ((Actor)f.tag).pseudo == playerName && ((Actor)f.tag).pseudo != CommonCode.MyPlayerInfo.instance.pseudo))
            {
                Bmp tmpBmp = CommonCode.AllActorsInMap.Find(f => ((Actor)f.tag).pseudo == playerName);
                tmpBmp.visible = false;
                Manager.manager.GfxObjList.RemoveAll(f => f != null && f.GetType() == typeof(Bmp) && f.Tag() != null && f.Tag().GetType() == typeof(Actor) && ((Actor)f.Tag()).pseudo == playerName);
                CommonCode.AllActorsInMap.Remove(CommonCode.AllActorsInMap.Find(f => ((Actor)f.tag).pseudo == playerName));
            }

            // affichage du personnage + position + orientation
            Bmp ibPlayers = new Bmp(@"gfx\general\classes\" + className + ".dat", Point.Empty, "Player_" + playerName, 0, true, 1, SpriteSheet.GetSpriteSheet(className.ToString(), CommonCode.ConvertToClockWizeOrientation(directionLook)));
            ibPlayers.MouseOver += CommonCode.ibPlayers_MouseOver;
            ibPlayers.MouseOut  += CommonCode.ibPlayers_MouseOut;
            ibPlayers.MouseMove += CommonCode.CursorHand_MouseMove;
            ibPlayers.MouseClic += CommonCode.ibPlayers_MouseClic;
            Manager.manager.GfxObjList.Add(ibPlayers);

            // attachement des données
            ibPlayers.tag = new Actor(playerName, level, !pvpEnabled ? Enums.Spirit.Name.neutral : spirit, className, pvpEnabled, !pvpEnabled ? 0 : spiritLevel, hiddenVillage, maskColorsString, directionLook, animatedAction, waypoint);
            Actor pi = (Actor)ibPlayers.tag;
            pi.realPosition = mapPosition;

            CommonCode.AdjustPositionAndDirection(ibPlayers, new Point(mapPosition.X * 30, mapPosition.Y * 30));
            CommonCode.VerticalSyncZindex(ibPlayers);

            // affichage des ailles
            if (pi.pvpEnabled)
            {
                if (pi.spirit != Enums.Spirit.Name.neutral)
                {
                    Bmp spiritBmp = new Bmp(@"gfx\general\obj\2\" + pi.spirit + @"\" + pi.spiritLevel + ".dat", Point.Empty, "spirit_" + ibPlayers.name, Manager.TypeGfx.Obj, false, 1);
                    spiritBmp.point = new Point((ibPlayers.rectangle.Width / 2) - (spiritBmp.rectangle.Width / 2), -spiritBmp.rectangle.Height);
                    ibPlayers.Child.Add(spiritBmp);

                    Txt lPseudo = new Txt(pi.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, -spiritBmp.rectangle.Height - 15);
                    ibPlayers.Child.Add(lPseudo);

                    Txt lLvlSpirit = new Txt(pi.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, -spiritBmp.rectangle.Y - (spiritBmp.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_" + pi.hiddenVillage, Manager.TypeGfx.Obj, false, 1, SpriteSheet.GetSpriteSheet("pays_" + pi.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(pi.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_" + pi.hiddenVillage, Manager.TypeGfx.Obj, false, 1, SpriteSheet.GetSpriteSheet("pays_" + pi.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 selon le MaskColors
            if (maskColors[0] != "null")
            {
                Color tmpColor = Color.FromArgb(Convert.ToInt16(maskColors[0].Split('-')[0]), Convert.ToInt16(maskColors[0].Split('-')[1]), Convert.ToInt16(maskColors[0].Split('-')[2]));
                CommonCode.SetPixelToClass(className, tmpColor, 1, ibPlayers);
            }

            if (maskColors[1] != "null")
            {
                Color tmpColor = Color.FromArgb(Convert.ToInt16(maskColors[1].Split('-')[0]), Convert.ToInt16(maskColors[1].Split('-')[1]), Convert.ToInt16(maskColors[1].Split('-')[2]));
                CommonCode.SetPixelToClass(className, tmpColor, 2, ibPlayers);
            }

            if (maskColors[2] != "null")
            {
                Color tmpColor = Color.FromArgb(Convert.ToInt16(maskColors[2].Split('-')[0]), Convert.ToInt16(maskColors[2].Split('-')[1]), Convert.ToInt16(maskColors[2].Split('-')[2]));
                CommonCode.SetPixelToClass(className, tmpColor, 3, ibPlayers);
            }

            // ajout du joueur dans la liste des joueurs
            CommonCode.ApplyMaskColorToClasse(ibPlayers);
            CommonCode.AllActorsInMap.Add(ibPlayers);
            #endregion
        }