Ejemplo n.º 1
0
 private void _handleMessageOpen(OldPacket pkt)
 {
     if (OnStatusMessage != null)
     {
         OnStatusMessage(pkt.GetEndString());
     }
 }
Ejemplo n.º 2
0
        public bool ResetCharacterStatSkill()
        {
            OldPacket pkt = new OldPacket(PacketFamily.StatSkill, PacketAction.Junk);

            pkt.AddInt(1234); //shop ID, ignored by eoserv - eomain may require this to be correct
            return(!m_client.ConnectedAndInitialized || !Initialized || m_client.SendPacket(pkt));
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Handler for CHEST_AGREE packet, sent as update to other characters near a chest that was modified by another player
 /// </summary>
 private void _handleChestAgree(OldPacket pkt)
 {
     if (OnChestAgree != null)
     {
         OnChestAgree(new ChestData(pkt, false));
     }
 }
Ejemplo n.º 4
0
        private void _upgrade()
        {
            if (LockerUpgrades == 7)
            {
                EOMessageBox.Show(DialogResourceID.LOCKER_UPGRADE_IMPOSSIBLE, EODialogButtons.Ok, EOMessageBoxStyle.SmallDialogSmallHeader);
                return;
            }

            int           requiredGold = (LockerUpgrades + 1) * 1000;
            InventoryItem item         = OldWorld.Instance.MainPlayer.ActiveCharacter.Inventory.Find(i => i.ItemID == 1);

            if (item.Amount < requiredGold)
            {
                EOMessageBox.Show(DialogResourceID.WARNING_YOU_HAVE_NOT_ENOUGH, "gold", EODialogButtons.Ok, EOMessageBoxStyle.SmallDialogSmallHeader);
                return;
            }

            EOMessageBox.Show(DialogResourceID.LOCKER_UPGRADE_UNIT, $"{requiredGold} gold?", EODialogButtons.OkCancel,
                              EOMessageBoxStyle.SmallDialogSmallHeader,
                              (o, e) =>
            {
                if (e.Result == XNADialogResult.Cancel)
                {
                    return;
                }

                OldPacket pkt = new OldPacket(PacketFamily.Locker, PacketAction.Buy);
                OldWorld.Instance.Client.SendPacket(pkt);
            });
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Handles LOCKER_BUY from server when buying a locker unit upgrade
 /// </summary>
 /// <param name="pkt"></param>
 private void _handleLockerBuy(OldPacket pkt)
 {
     if (OnLockerUpgrade != null)
     {
         OnLockerUpgrade(pkt.GetInt(), pkt.GetChar()); //gold remaining, num upgrades
     }
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Handler for CHEST_OPEN packet, sent in response to main player opening a chest
 /// </summary>
 private void _handleChestOpen(OldPacket pkt)
 {
     if (OnChestOpened != null)
     {
         OnChestOpened(new ChestData(pkt, true));
     }
 }
Ejemplo n.º 7
0
        private void btnImportMultis_Click(object sender, EventArgs e)
        {
            string inp = Microsoft.VisualBasic.Interaction.InputBox("Paste the raw, colon-delimited packet data here: ", "Enter packet data");

            if (inp.Length == 0)
            {
                return;
            }

            inp = inp.Replace(":", "");
            if (inp.Length % 2 != 0)
            {
                return;
            }
            inp = inp.Substring(4);
            byte[] data = new byte[inp.Length / 2];
            for (int i = 0; i < inp.Length; i += 2)
            {
                data[i / 2] = Convert.ToByte(inp.Substring(i, 2), 16);
            }

            //no need to decrypt since it's init data
            OldPacket pkt = new OldPacket(data);

            pkt.Skip(3);
            txtDMulti.Text = pkt.GetByte().ToString();
            txtEMulti.Text = pkt.GetByte().ToString();
            _packetProcessActions.SetEncodeMultiples(pkt.Get()[5], pkt.Get()[6]);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Performas a synchronous request for the list of online players
        /// </summary>
        /// <param name="includeFullInfo">True if requesting the full information including Name, Title, Class, Guild, and Icon. False if requesting names only</param>
        /// <param name="list">The list of players represented by OnlineEntry objects</param>
        /// <returns>True if operation was successful, false otherwise.</returns>
        public bool RequestOnlinePlayers(bool includeFullInfo, out List <OnlineEntry> list)
        {
            list = null;
            if (!m_client.ConnectedAndInitialized || !Initialized)
            {
                return(false);
            }

            //wait for file if it is in process
            if (m_client.ExpectingFile && !m_init_responseEvent.WaitOne(Constants.ResponseFileTimeout))
            {
                return(false);
            }

            m_client.ExpectingPlayerList = true;
            OldPacket pkt = new OldPacket(PacketFamily.Players, includeFullInfo ? PacketAction.Request : PacketAction.List);

            if (!m_client.SendPacket(pkt))
            {
                return(false);
            }

            if (!m_init_responseEvent.WaitOne(Constants.ResponseTimeout))
            {
                return(false);
            }

            list = m_init_onlinePlayerList;

            return(true);
        }
Ejemplo n.º 9
0
        private void _handleSpellTargetGroup(OldPacket pkt)
        {
            if (OnCastSpellTargetGroup == null)
            {
                return;
            }

            short spellID         = pkt.GetShort();
            short fromPlayerID    = pkt.GetShort();
            short fromPlayerTP    = pkt.GetShort();
            short spellHealthGain = pkt.GetShort();

            var spellTargets = new List <GroupSpellTarget>();

            while (pkt.ReadPos != pkt.Length)
            {
                //malformed packet - eoserv puts 5 '255' bytes between party members
                if (pkt.GetBytes(5).Any(x => x != 255))
                {
                    return;
                }

                spellTargets.Add(new GroupSpellTarget(pkt));
            }

            OnCastSpellTargetGroup(spellID, fromPlayerID, fromPlayerTP, spellHealthGain, spellTargets);
        }
Ejemplo n.º 10
0
        //handlers

        private void _handleStatSkillOpen(OldPacket pkt)
        {
            if (OnSkillmasterOpen != null)
            {
                OnSkillmasterOpen(new SkillmasterData(pkt));
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Handles SHOP_CREATE from server, response to crafting an item
        /// </summary>
        private void _handleShopCreate(OldPacket pkt)
        {
            if (OnShopCraftItem == null)
            {
                return;
            }

            short itemID    = pkt.GetShort();
            byte  weight    = pkt.GetChar();
            byte  maxWeight = pkt.GetChar();

            List <InventoryItem> inventoryItems = new List <InventoryItem>(4);

            while (pkt.ReadPos != pkt.Length)
            {
                if (pkt.PeekShort() <= 0)
                {
                    break;
                }

                inventoryItems.Add(new InventoryItem(pkt.GetShort(), pkt.GetInt()));
            }

            OnShopCraftItem(itemID, weight, maxWeight, inventoryItems);
        }
Ejemplo n.º 12
0
 private void _handleItemReply(OldPacket pkt)
 {
     if (OnUseItem != null)
     {
         OnUseItem(new ItemUseData(pkt));
     }
 }
Ejemplo n.º 13
0
        /// <summary>
        /// Handler for NPC_REPLY packet, when NPC takes damage from an attack (spell cast or weapon) but is still alive
        /// </summary>
        private void _handleNPCReply(OldPacket pkt)
        {
            if (OnNPCTakeDamage == null)
            {
                return;
            }

            short spellID = -1;

            if (pkt.Family == PacketFamily.Cast)
            {
                spellID = pkt.GetShort();
            }

            short       fromPlayerID  = pkt.GetShort();
            EODirection fromDirection = (EODirection)pkt.GetChar();
            short       npcIndex      = pkt.GetShort();
            int         damageToNPC   = pkt.GetThree();
            int         npcPctHealth  = pkt.GetShort();

            short fromTP = -1;

            if (pkt.Family == PacketFamily.Cast)
            {
                fromTP = pkt.GetShort();
            }
            else if (pkt.GetChar() != 1) //some constant 1 in EOSERV
            {
                return;
            }

            OnNPCTakeDamage((byte)npcIndex, fromPlayerID, fromDirection, damageToNPC, npcPctHealth, spellID, fromTP);
        }
Ejemplo n.º 14
0
        internal PaperdollDisplayData(OldPacket pkt)
        {
            //need to be applied to the character that is passed to the dialog
            name    = pkt.GetBreakString();
            home    = pkt.GetBreakString();
            partner = pkt.GetBreakString();
            title   = pkt.GetBreakString();
            guild   = pkt.GetBreakString();
            rank    = pkt.GetBreakString();

            playerID = pkt.GetShort();
            clas     = pkt.GetChar();
            gender   = pkt.GetChar();

            if (pkt.GetChar() != 0)
            {
                throw new ArgumentException("Invalid/malformed packet", nameof(pkt));
            }

            paperdoll = new short[(int)EquipLocation.PAPERDOLL_MAX];
            for (int i = 0; i < (int)EquipLocation.PAPERDOLL_MAX; ++i)
            {
                paperdoll[i] = pkt.GetShort();
            }

            iconType = (PaperdollIconType)pkt.GetChar();
        }
Ejemplo n.º 15
0
        private void _handleSpellTargetOther(OldPacket pkt)
        {
            if (OnCastSpellTargetOther == null)
            {
                return;
            }

            short       targetPlayerID        = pkt.GetShort();
            short       sourcePlayerID        = pkt.GetShort();
            EODirection sourcePlayerDirection = (EODirection)pkt.GetChar();
            short       spellID             = pkt.GetShort();
            int         recoveredHP         = pkt.GetInt();
            byte        targetPercentHealth = pkt.GetChar();

            short targetPlayerCurrentHP = -1;

            if (pkt.ReadPos != pkt.Length) //include current hp for player if main player is the target
            {
                targetPlayerCurrentHP = pkt.GetShort();
            }

            OnCastSpellTargetOther(
                targetPlayerID,
                sourcePlayerID,
                sourcePlayerDirection,
                spellID,
                recoveredHP,
                targetPercentHealth,
                targetPlayerCurrentHP);
        }
Ejemplo n.º 16
0
 private void _handleMusicPlayer(OldPacket pkt)
 {
     if (OnPlaySoundEffect != null)
     {
         OnPlaySoundEffect(pkt.GetChar());
     }
 }
Ejemplo n.º 17
0
 private void _handleNPCJunk(OldPacket pkt)
 {
     if (OnRemoveChildNPCs != null)
     {
         OnRemoveChildNPCs(pkt.GetShort());
     }
 }
Ejemplo n.º 18
0
 //sent when your trade partner agrees
 private void _handleTradeAgree(OldPacket pkt)
 {
     if (OnTradeOtherPlayerAgree != null)
     {
         OnTradeOtherPlayerAgree(pkt.GetShort(), pkt.GetChar() != 0);
     }
 }
Ejemplo n.º 19
0
        private void _handleSpellTargetSelf(OldPacket pkt)
        {
            short fromPlayerID  = pkt.GetShort();
            short spellID       = pkt.GetShort();
            int   spellHP       = pkt.GetInt();
            byte  percentHealth = pkt.GetChar();

            if (pkt.ReadPos == pkt.Length)
            {
                //another player was the source of this packet

                if (OnOtherPlayerCastSpellSelf != null)
                {
                    OnOtherPlayerCastSpellSelf(fromPlayerID, spellID, spellHP, percentHealth);
                }

                return;
            }

            short characterHP = pkt.GetShort();
            short characterTP = pkt.GetShort();

            if (pkt.GetShort() != 1) //malformed packet! eoserv sends '1' here
            {
                return;
            }

            //main player was source of this packet
            if (OnCastSpellSelf != null)
            {
                OnCastSpellSelf(fromPlayerID, spellID, spellHP, percentHealth, characterHP, characterTP);
            }
        }
Ejemplo n.º 20
0
 private void _handleItemRemove(OldPacket pkt)
 {
     if (OnRemoveItemFromMap != null)
     {
         OnRemoveItemFromMap(pkt.GetShort());
     }
 }
Ejemplo n.º 21
0
        private void _sharedTradeDataProcess(OldPacket pkt, TradeUpdateEvent handler)
        {
            if (handler == null)
            {
                return;
            }

            short player1ID = pkt.GetShort();
            List <InventoryItem> player1Items = new List <InventoryItem>();

            while (pkt.PeekByte() != 255)
            {
                player1Items.Add(new InventoryItem(pkt.GetShort(), pkt.GetInt()));
            }
            pkt.Skip(1);

            short player2ID = pkt.GetShort();
            List <InventoryItem> player2Items = new List <InventoryItem>();

            while (pkt.PeekByte() != 255)
            {
                player2Items.Add(new InventoryItem(pkt.GetShort(), pkt.GetInt()));
            }
            pkt.Skip(1);

            handler(player1ID, player1Items, player2ID, player2Items);
        }
Ejemplo n.º 22
0
        private void _handleItemDrop(OldPacket pkt)
        {
            if (OnDropItem == null)
            {
                return;
            }
            short      _id             = pkt.GetShort();
            int        _amount         = pkt.GetThree();
            int        characterAmount = pkt.GetInt(); //amount remaining for the character
            OldMapItem item            = new OldMapItem
            {
                ItemID   = _id,
                Amount   = _amount,
                UniqueID = pkt.GetShort(),
                X        = pkt.GetChar(),
                Y        = pkt.GetChar(),
                //turn off drop protection since main player dropped it
                DropTime       = DateTime.Now.AddSeconds(-5),
                IsNPCDrop      = false,
                OwningPlayerID = 0                                                    //id of 0 means the currently logged in player owns it
            };
            byte characterWeight = pkt.GetChar(), characterMaxWeight = pkt.GetChar(); //character adjusted weights

            OnDropItem(characterAmount, characterWeight, characterMaxWeight, item);
        }
Ejemplo n.º 23
0
 private void _handleTradeClose(OldPacket pkt)
 {
     if (OnTradeCancel != null)
     {
         OnTradeCancel(pkt.GetShort());
     }
 }
Ejemplo n.º 24
0
 //reset character
 private void _handleStatSkillJunk(OldPacket pkt)
 {
     if (OnCharacterStatsReset != null)
     {
         OnCharacterStatsReset(new StatResetData(pkt));
     }
 }
Ejemplo n.º 25
0
 //sent in response to you agreeing
 private void _handleTradeSpec(OldPacket pkt)
 {
     if (OnTradeYouAgree != null)
     {
         OnTradeYouAgree(pkt.GetChar() != 0);
     }
 }
Ejemplo n.º 26
0
 //forgetting a skill
 private void _handleStatSkillRemove(OldPacket pkt)
 {
     //short - spell id
     if (OnSpellForget != null)
     {
         OnSpellForget(pkt.GetShort());
     }
 }
Ejemplo n.º 27
0
 //potion effect (only known use based on eoserv code)
 private void _handleEffectPlayer(OldPacket pkt)
 {
     if (OnEffectPotion != null)
     {
         OnEffectPotion(playerID: pkt.GetShort(),
                        effectID: pkt.GetThree());
     }
 }
Ejemplo n.º 28
0
 private void _handleRecoverAgree(OldPacket pkt)
 {
     //when a heal item is used by another player
     if (OnPlayerHeal != null)
     {
         OnPlayerHeal(pkt.GetShort(), pkt.GetInt(), pkt.GetChar()); //player id - hp gain - percent heal
     }
 }
Ejemplo n.º 29
0
        internal ItemUseData(OldPacket pkt)
        {
            type            = (ItemType)pkt.GetChar();
            itemID          = pkt.GetShort();
            characterAmount = pkt.GetInt();
            weight          = pkt.GetChar();
            maxWeight       = pkt.GetChar();

            hpGain    = hp = tp = 0;
            hairColor = 0;
            effect    = 0;

            curecurse_stats = null;
            expreward_stats = null;

            //format differs based on item type
            //(keeping this in order with how eoserv ITEM_USE handler is ordered
            switch (type)
            {
            case ItemType.Teleport: /*Warp packet handles the rest!*/ break;

            case ItemType.Heal:
            {
                hpGain = pkt.GetInt();
                hp     = pkt.GetShort();
                tp     = pkt.GetShort();
            }
            break;

            case ItemType.HairDye:
            {
                hairColor = pkt.GetChar();
            }
            break;

            case ItemType.Beer: /*No additional data*/ break;

            case ItemType.EffectPotion:
            {
                effect = pkt.GetShort();
            }
            break;

            case ItemType.CureCurse:
            {
                curecurse_stats = new CureCurseStats(pkt);
            }
            break;

            case ItemType.EXPReward:
            {
                //note: server packets may be incorrect at this point (src/handlers/Item.cpp) because of unused builder in eoserv
                //note: server also sends an ITEM_ACCEPT packet to surrounding players on level-up?
                expreward_stats = new LevelUpStats(pkt, true);
            }
            break;
            }
        }
Ejemplo n.º 30
0
 //timed spikes
 private void _handleEffectReport(OldPacket pkt)
 {
     pkt.GetChar(); //always 83 - sent from eoserv when Map::TimedSpikes is called
     //as of rev 487 this is not sent anywhere else. May need to update event handler if this changes.
     if (OnTimedSpike != null)
     {
         OnTimedSpike();
     }
 }