微信扫一扫 分享朋友圈

已有 2279 人浏览分享

[服務器疑問] 寵物撿東西時會卡住

[複製鏈接]

集團新軍

Rank: 1

1

威望

4

金錢

0

A幣
主題
1
帖子
1
精華
0
綜合社群主題發文量
0
電玩社群主題發文量
0
娛樂社群主題發文量
0
技術社群主題發文量
0
閱讀權限
10
註冊時間
2017-5-17
  • TA的每日心情

    2017-9-20 02:47
  • 簽到天數: 1 天

    連續簽到: 0 天

    [LV.1]初來乍到

    k543k5 發表於  2017-9-29 17:04:33 | 顯示全部樓層 | 閱讀模式
    就是寵物在撿取掉落物的途中人物會無法使用攻擊技能及施放輔助技能等
    在經過檢查後發現寵物撿取掉落物的控制是在InventoryHandler.java裡面的Pickup_Pet
    但是我還是搞不懂他無法同時攻擊以及寵物檢取道具為何會有衝突
    請問我要從哪裡下手或修改他才不會這樣呢?
    共收到 0 A幣
    打賞榜
    暫無
    暫無
    暫無
    暫無
    ----
    暫無
    ----
    暫無
    ----
    暫無
    ----

    站長

    Rank: 12Rank: 12Rank: 12

    1963

    威望

    3459

    金錢

    11

    A幣
    主題
    1324
    帖子
    2477
    精華
    3
    綜合社群主題發文量
    267
    電玩社群主題發文量
    1
    娛樂社群主題發文量
    4
    技術社群主題發文量
    31
    閱讀權限
    200
    註冊時間
    2013-1-28

    我是傳奇贊助感謝勳章精華作者勳章

  • TA的每日心情

    2024-11-9 23:41
  • 簽到天數: 397 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    TWAICL 發表於 2017-10-2 06:31:58 | 顯示全部樓層
    你這問題八成是SRC裡面有甚麼地方被設置某種裝備無法重複領取,本意可能不是要讓你不能撿道具,但出現BUG這樣,當然原因很多,好好檢查自己問題發生時你做了甚麼,一個正常的人物角色不可能突然出問題。

    集團新軍

    Rank: 1

    2

    威望

    6

    金錢

    0

    A幣
    主題
    0
    帖子
    2
    精華
    0
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    0
    閱讀權限
    10
    註冊時間
    2024-11-5

    該用戶從未簽到

    kevingod2012 發表於 2024-11-9 02:03:09 | 顯示全部樓層
    確實,在InventoryHandler.java裡面的Pickup_Pet語法的倒數幾行有
    MapleInventoryManipulator.addFromDrop(c, mapitem.getItem(), true, mapitem.getDropper() instanceof MapleMonster);
                        removeItem_Pet(chr, mapitem, petz);

    在我的case裡,要將addFromDrop改成pet_addFromDrop,不過,此時我的MapleInventoryManipulator並沒有pet_addFromDrop這個方法,因此要先在server裡的MapleInventoryManipulator.java增加pet_addFromDrop的語法,如下



    public static boolean pet_addFromDrop(final MapleClient c, IItem item, final boolean show, final boolean enhance) {
            final MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();

            if (ii.isPickupRestricted(item.getItemId()) && c.getPlayer().haveItem(item.getItemId(), 1, true, false)) {
                c.getSession().write(MaplePacketCreator.getInventoryFull());
                c.getSession().write(MaplePacketCreator.showItemUnavailable());
                return false;
            }
            final int before = c.getPlayer().itemQuantity(item.getItemId());
            short quantity = item.getQuantity();
            final MapleInventoryType type = GameConstants.getInventoryType(item.getItemId());

            if (!type.equals(MapleInventoryType.EQUIP)) {
                final short slotMax = ii.getSlotMax(c, item.getItemId());
                final List<IItem> existing = c.getPlayer().getInventory(type).listById(item.getItemId());
                if (!GameConstants.isRechargable(item.getItemId())) {
                    if (quantity <= 0) { //wth
                        c.getSession().write(MaplePacketCreator.getInventoryFull());
                        c.getSession().write(MaplePacketCreator.showItemUnavailable());
                        return false;
                    }
                    if (existing.size() > 0) { // first update all existing slots to slotMax
                        Iterator<IItem> i = existing.iterator();
                        while (quantity > 0) {
                            if (i.hasNext()) {
                                final Item eItem = (Item) i.next();
                                final short oldQ = eItem.getQuantity();
                                if (oldQ < slotMax && item.getOwner().equals(eItem.getOwner()) && item.getExpiration() == eItem.getExpiration()) {
                                    final short newQ = (short) Math.min(oldQ + quantity, slotMax);
                                    quantity -= (newQ - oldQ);
                                    eItem.setQuantity(newQ);
                                    c.getSession().write(MaplePacketCreator.updateInventorySlot(type, eItem, false));
                                }
                            } else {
                                break;
                            }
                        }
                    }
                    // add new slots if there is still something left
                    while (quantity > 0) {
                        final short newQ = (short) Math.min(quantity, slotMax);
                        quantity -= newQ;
                        final Item nItem = new Item(item.getItemId(), (byte) 0, newQ, item.getFlag());
                        nItem.setExpiration(item.getExpiration());
                        nItem.setOwner(item.getOwner());
                        nItem.setPet(item.getPet());
                        short newSlot = c.getPlayer().getInventory(type).addItem(nItem);
                        if (newSlot == -1) {
                            c.getSession().write(MaplePacketCreator.getInventoryFull());
                            c.getSession().write(MaplePacketCreator.getShowInventoryFull());
                            item.setQuantity((short) (quantity + newQ));
                            return false;
                        }
                        c.getSession().write(MaplePacketCreator.addInventorySlot(type, nItem, false));
                    }
                } else {
                    // Throwing Stars and Bullets - Add all into one slot regardless of quantity.
                    final Item nItem = new Item(item.getItemId(), (byte) 0, quantity, item.getFlag());
                    nItem.setExpiration(item.getExpiration());
                    nItem.setOwner(item.getOwner());
                    nItem.setPet(item.getPet());
                    final short newSlot = c.getPlayer().getInventory(type).addItem(nItem);
                    if (newSlot == -1) {
                        c.getSession().write(MaplePacketCreator.getInventoryFull());
                        c.getSession().write(MaplePacketCreator.getShowInventoryFull());
                        return false;
                    }
                    c.getSession().write(MaplePacketCreator.addInventorySlot(type, nItem));
                    c.getSession().write(MaplePacketCreator.enableActions());
                }
            } else if (quantity == 1) {
                if (enhance) {
                    item = checkEnhanced(item, c.getPlayer());
                }
                final short newSlot = c.getPlayer().getInventory(type).addItem(item);

                if (newSlot == -1) {
                    c.getSession().write(MaplePacketCreator.getInventoryFull());
                    c.getSession().write(MaplePacketCreator.getShowInventoryFull());
                    return false;
                }
                c.getSession().write(MaplePacketCreator.addInventorySlot(type, item, false));
            } else {
                throw new RuntimeException("Trying to create equip with non-one quantity");
            }
            if (item.getQuantity() >= 50 && GameConstants.isUpgradeScroll(item.getItemId())) {
                c.setMonitored(true);
            }
            if (before == 0) {
                switch (item.getItemId()) {
                    case AramiaFireWorks.KEG_ID:
                        c.getPlayer().dropMessage(5, "You have gained a Powder Keg, you can give this in to Aramia of Henesys.");
                        break;
                    case AramiaFireWorks.SUN_ID:
                        c.getPlayer().dropMessage(5, "You have gained a Warm Sun, you can give this in to Maple Tree Hill through @joyce.");
                        break;
                    case AramiaFireWorks.DEC_ID:
                        c.getPlayer().dropMessage(5, "You have gained a Tree Decoration, you can give this in to White Christmas Hill through @joyce.");
                        break;
                }
            }
            c.getPlayer().havePartyQuest(item.getItemId());
            if (show) {
                c.getSession().write(MaplePacketCreator.getShowItemGain(item.getItemId(), item.getQuantity()));
            }
            return true;
        }


    之後再去InventoryHandler.java裡面的Pickup_Pet的倒數幾行將addFromDrop改成pet_addFromDrop (如下),問題應該就解決了

    MapleInventoryManipulator.pet_addFromDrop(c, mapitem.getItem(), true, mapitem.getDropper() instanceof MapleMonster);
                        removeItem_Pet(chr, mapitem, petz);

    您需要登錄後才可以回帖 登錄 | 註冊會員

    本版積分規則

    1

    發文

    4

    金錢

    0

    A幣

    ----------榮譽勳章----------

    熱門推薦
    圖文推薦
    • 聯繫我們

    小黑屋|AICL社群娛樂集團

    GMT+8, 2024-11-21 23:49 , 網路刷新 0.099165 秒 .

    歡迎來到 AICL網路社群

    版權AICL社群所有 2011-2021.

    Total:123 Today:213 Online:322