Пример #1
0
		public void Logout()
		{
			if (World.Initialized && ActiveCharacter != null)
				Logger.Log("Logging out MainPlayer. Setting ActiveCharacter = null.");
			PlayerID = 0;
			CharData = null;
			ActiveCharacter = null;
		}
Пример #2
0
		public bool SetActiveCharacter(PacketAPI api, int id)
		{
			if (World.Initialized && ActiveCharacter != null)
				Logger.Log("Setting Active Character to new ID {0}", id);
			CharRenderData activeData = CharData.FirstOrDefault(d => d.id == id);
			if (activeData == null)
				return false;
			ActiveCharacter = new Character(api, id, activeData);
			return true;
		}
Пример #3
0
        /// <summary>
        /// Construct a character renderer in-game
        /// </summary>
        /// <param name="charToRender">The character data that should be wrapped by this renderer</param>
        public EOCharacterRenderer(Character charToRender)
        {
            //this has been happening when shit gets disconnected due to invalid sequence or internal packet id
            if (charToRender == null)
            {
                EOGame.Instance.LostConnectionDialog();
                return;
            }

            spriteSheet = new EOSpriteSheet(charToRender);
            _char = charToRender;
            _data = charToRender.RenderData;
            Texture2D tmpSkin = spriteSheet.GetSkin(false, out m_skinSourceRect);
            if (_char != World.Instance.MainPlayer.ActiveCharacter)
            {
                drawArea = new Rectangle(
                    _char.OffsetX + 304 - World.Instance.MainPlayer.ActiveCharacter.OffsetX,
                    _char.OffsetY + 91 - World.Instance.MainPlayer.ActiveCharacter.OffsetY,
                    m_skinSourceRect.Width, m_skinSourceRect.Height); //set based on size of the sprite and location of charToRender
            }
            else
            {
                drawArea = new Rectangle((618 - m_skinSourceRect.Width) / 2 + 4, (298 - m_skinSourceRect.Height) / 2 - 29, m_skinSourceRect.Width, m_skinSourceRect.Height);
                noLocUpdate = true; //make sure not to update the drawArea rectangle in the update method
            }
            Data.SetUpdate(true);
            _prevKeyState = Keyboard.GetState();

            //get the top pixel!
            Color[] skinData = new Color[m_skinSourceRect.Width * m_skinSourceRect.Height];
            tmpSkin.GetData(0, m_skinSourceRect, skinData, 0, skinData.Length);
            int i = 0;
            while (i < skinData.Length && skinData[i].A == 0) i++;
            //account for adjustment in drawing the skin in the draw method
            TopPixel = (Data.gender == 0 ? 12 : 13) + (i == skinData.Length - 1 ? 0 : i / m_skinSourceRect.Height);

            m_chatBubble = new EOChatBubble(this);
            m_damageCounter = new DamageCounter(this, GetType());
        }
Пример #4
0
 public EOSpriteSheet(Character charToWatch)
 {
     charRef = charToWatch;
 }
Пример #5
0
        /// <summary>
        /// Construct a character renderer pre-game (character creation dialog, character list)
        /// </summary>
        /// <param name="drawLocation">Where to draw it</param>
        /// <param name="data">Render data to use for drawing</param>
        public EOCharacterRenderer(Vector2 drawLocation, CharRenderData data)
            : base(drawLocation, null)
        {
            noLocUpdate = true;
            _char = new Character(null, -1, data);
            spriteSheet = new EOSpriteSheet(_char);
            //when this is a part of a dialog, the drawareaoffset will be set accordingly and is used in the draw method
            //otherwise, it will just draw it at the absolute location specified by drawArea

            drawArea = new Rectangle((int) drawLocation.X, (int) drawLocation.Y, 1, 1);
            Data.SetUpdate(true);

            if (data.name.Length > 0)
            {
                //362, 167 abs loc
                levelLabel = new XNALabel(new Rectangle(-32, 75, 1, 1), "Microsoft Sans Serif", 8.75f)
                {
                    ForeColor = System.Drawing.Color.FromArgb(0xFF, 0xb4, 0xa0, 0x8c),
            // ReSharper disable SpecifyACultureInStringConversionExplicitly
                    Text = data.level.ToString()
            // ReSharper restore SpecifyACultureInStringConversionExplicitly
                };
                levelLabel.SetParent(this);

                //504, 93 abs loc
                nameLabel = new XNALabel(new Rectangle(104, 2, 89, 22), "Microsoft Sans Serif", 8.5f)
                {
                    ForeColor = System.Drawing.Color.FromArgb(0xFF, 0xb4, 0xa0, 0x8c),
                    Text = ((char) (data.name[0] - 32)) + data.name.Substring(1),
                    TextAlign = System.Drawing.ContentAlignment.MiddleCenter,
                    AutoSize = false
                };
                nameLabel.SetParent(this);

                adminGraphic = GFXLoader.TextureFromResource(GFXTypes.PreLoginUI, 22);
                if (data.admin == 1)
                {
                    adminRect = new Rectangle(252, 39, 17, 17);
                }
                else if (data.admin > 1)
                {
                    adminRect = new Rectangle(233, 39, 17, 17);
                }
                else
                {
                    adminRect = null;
                }
            }
        }
Пример #6
0
 public EOCharacterStats(XNAPanel parent)
     : base(null, null, parent)
 {
     c = World.Instance.MainPlayer.ActiveCharacter;
 }
Пример #7
0
 private Vector2 _getMiniMapDrawCoordinates(int x, int y, Character c)
 {
     return new Vector2((x * 13) - (y * 13) + 288 - (c.X * 13 - c.Y * 13), (y * 7) + (x * 7) + 144 - (c.Y * 7 + c.X * 7));
 }