Beispiel #1
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);
        }
Beispiel #2
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);
        }
Beispiel #3
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);
        }
Beispiel #4
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);
            }
        }
Beispiel #5
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);
        }
Beispiel #6
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);
        }
Beispiel #7
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);
        }
Beispiel #8
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();
        }
Beispiel #9
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;
            }
        }
Beispiel #10
0
 //error learning a skill
 private void _handleStatSkillReply(OldPacket pkt)
 {
     //short - should always be SKILLMASTER_REMOVE_ITEMS (1) or SKILLMASTER_WRONG_CLASS (2)
     //short - character class
     if (OnSpellLearnError != null)
     {
         OnSpellLearnError((SkillMasterReply)pkt.GetShort(), pkt.GetShort());
     }
 }
Beispiel #11
0
 //skill point added to spell
 private void _handleStatSkillAccept(OldPacket pkt)
 {
     //short - character skill pts remaining
     //short - stat ID (spell ID)
     //short - spell level
     if (OnSpellTrain != null)
     {
         OnSpellTrain(pkt.GetShort(), pkt.GetShort(), pkt.GetShort());
     }
 }
Beispiel #12
0
        private void _handleSpellRequest(OldPacket pkt)
        {
            short fromPlayerID = pkt.GetShort();
            short spellID      = pkt.GetShort();

            if (OnOtherPlayerStartCastSpell != null)
            {
                OnOtherPlayerStartCastSpell(fromPlayerID, spellID);
            }
        }
Beispiel #13
0
 internal InProgressQuestData(OldPacket pkt)
 {
     _name        = pkt.GetBreakString();
     _description = pkt.GetBreakString();
     _icon        = (BookIcon)pkt.GetShort();
     _progress    = pkt.GetShort();
     _target      = pkt.GetShort();
     if (pkt.GetByte() != 255)
     {
         throw new ArgumentException("Malformed quest packet", nameof(pkt));
     }
 }
Beispiel #14
0
 internal LevelUpStats(OldPacket pkt, bool includeExp)
 {
     //includeExp will be false when leveling up from NPC, true from EXPReward
     //NPC handler happens slightly differently
     exp   = includeExp ? pkt.GetInt() : 0;
     level = pkt.GetChar();
     stat  = pkt.GetShort();
     skill = pkt.GetShort();
     maxhp = pkt.GetShort();
     maxtp = pkt.GetShort();
     maxsp = pkt.GetShort();
 }
Beispiel #15
0
        private void _handleTradeOpen(OldPacket pkt)
        {
            if (OnTradeOpen == null)
            {
                return;
            }

            short  player1ID   = pkt.GetShort();
            string player1Name = pkt.GetBreakString();
            short  player2ID   = pkt.GetShort();
            string player2Name = pkt.GetBreakString();

            OnTradeOpen(player1ID, player1Name, player2ID, player2Name);
        }
Beispiel #16
0
        private void _handleItemGet(OldPacket pkt)
        {
            if (OnGetItemFromMap == null)
            {
                return;
            }
            short uid         = pkt.GetShort();
            short id          = pkt.GetShort();
            int   amountTaken = pkt.GetThree();
            byte  weight      = pkt.GetChar();
            byte  maxWeight   = pkt.GetChar();

            OnGetItemFromMap(uid, id, amountTaken, weight, maxWeight);
        }
Beispiel #17
0
 internal CharacterLoginData(OldPacket pkt)
 {
     name      = pkt.GetBreakString();
     id        = pkt.GetInt();
     level     = pkt.GetChar();
     gender    = pkt.GetChar();
     hairstyle = pkt.GetChar();
     haircolor = pkt.GetChar();
     race      = pkt.GetChar();
     admin     = (AdminLevel)pkt.GetChar();
     boots     = pkt.GetShort();
     armor     = pkt.GetShort();
     hat       = pkt.GetShort();
     shield    = pkt.GetShort();
     weapon    = pkt.GetShort();
 }
Beispiel #18
0
 private void _handleNPCJunk(OldPacket pkt)
 {
     if (OnRemoveChildNPCs != null)
     {
         OnRemoveChildNPCs(pkt.GetShort());
     }
 }
Beispiel #19
0
 private void _handleTradeClose(OldPacket pkt)
 {
     if (OnTradeCancel != null)
     {
         OnTradeCancel(pkt.GetShort());
     }
 }
Beispiel #20
0
 //sent when your trade partner agrees
 private void _handleTradeAgree(OldPacket pkt)
 {
     if (OnTradeOtherPlayerAgree != null)
     {
         OnTradeOtherPlayerAgree(pkt.GetShort(), pkt.GetChar() != 0);
     }
 }
Beispiel #21
0
 private void _handleItemRemove(OldPacket pkt)
 {
     if (OnRemoveItemFromMap != null)
     {
         OnRemoveItemFromMap(pkt.GetShort());
     }
 }
Beispiel #22
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());
     }
 }
Beispiel #23
0
 //forgetting a skill
 private void _handleStatSkillRemove(OldPacket pkt)
 {
     //short - spell id
     if (OnSpellForget != null)
     {
         OnSpellForget(pkt.GetShort());
     }
 }
Beispiel #24
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
     }
 }
Beispiel #25
0
 //success learning a skill
 private void _handleStatSkillTake(OldPacket pkt)
 {
     //short - spell id
     //int - character gold remaining
     if (OnSpellLearnSuccess != null)
     {
         OnSpellLearnSuccess(pkt.GetShort(), pkt.GetInt());
     }
 }
Beispiel #26
0
        private void _handleEmotePlayer(OldPacket pkt)
        {
            short playerID = pkt.GetShort();
            Emote emote    = (Emote)pkt.GetChar();

            if (OnOtherPlayerEmote != null)
            {
                OnOtherPlayerEmote(playerID, emote);
            }
        }
Beispiel #27
0
 internal SkillmasterData(OldPacket pkt)
 {
     m_id     = pkt.GetShort();
     m_title  = pkt.GetBreakString();
     m_skills = new List <Skill>();
     while (pkt.ReadPos < pkt.Length)
     {
         m_skills.Add(new Skill(pkt));
     }
 }
Beispiel #28
0
        private void _handleTradeRequest(OldPacket pkt)
        {
            pkt.Skip(1); //something - will always be 123 from this client
            short  playerID = pkt.GetShort();
            string name     = pkt.GetEndString();

            if (OnTradeRequested != null)
            {
                OnTradeRequested(playerID, name);
            }
        }
Beispiel #29
0
        private void _handleItemAdd(OldPacket pkt)
        {
            if (OnDropItem == null)
            {
                return;
            }
            OldMapItem item = new OldMapItem
            {
                ItemID         = pkt.GetShort(),
                UniqueID       = pkt.GetShort(),
                Amount         = pkt.GetThree(),
                X              = pkt.GetChar(),
                Y              = pkt.GetChar(),
                DropTime       = DateTime.Now,
                IsNPCDrop      = false,
                OwningPlayerID = -1 //another player dropped. drop protection says "Item protected" w/o player name
            };

            OnDropItem(-1, 0, 0, item);
        }
Beispiel #30
0
        /// <summary>
        /// Handles LOCKER_GET from server for taking an item from locker
        /// </summary>
        private void _handleLockerGet(OldPacket pkt)
        {
            if (OnLockerItemChange == null)
            {
                return;
            }

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

            List <InventoryItem> items = new List <InventoryItem>();

            while (pkt.ReadPos != pkt.Length)
            {
                items.Add(new InventoryItem(pkt.GetShort(), pkt.GetThree()));
            }

            OnLockerItemChange(itemID, amount, weight, maxWeight, true, items);
        }