- UID
- 59213
- 閱讀權限
- 10
- 主題
- 1
- 帖子
- 4
- 精華
- 0
- A幣
- 0
- 在線時間
- 16 小時
- 最後登錄
- 2024-6-25
集團新軍
- 主題
- 1
- 帖子
- 4
- 精華
- 0
- 綜合社群主題發文量
- 3
- 電玩社群主題發文量
- 0
- 娛樂社群主題發文量
- 0
- 技術社群主題發文量
- 0
- 閱讀權限
- 10
- 註冊時間
- 2019-3-11
TA的每日心情 | 衰 2020-10-29 00:01 |
---|
簽到天數: 33 天 連續簽到: 0 天 [LV.5]常住居民I
|
本帖最後由 longay 於 2019-3-19 11:31 編輯
本篇使用白狐113作為示範
鑒於看到版上另一篇文章
來實做一下
首先,轉蛋機給予物品使用的函式是
gainGachaponItem(int itemid, int quantity);
先來查詢此function實際做的內容是甚麼
對於NPC內使用的函式多位於 NPCConversationManager裡
進而搜尋之後可以看到- public int gainGachaponItem(int id, int quantity) {
- return gainGachaponItem(id, quantity, c.getPlayer().getMap().getStreetName() + " - " + c.getPlayer().getMap().getMapName());
- }
- public int gainGachaponItem(int id, int quantity, final String msg) {
- try {
- if (!MapleItemInformationProvider.getInstance().itemExists(id)) {
- return -1;
- }
- final IItem item = MapleInventoryManipulator.addbyId_Gachapon(c, id, (short) quantity);
- if (item == null) {
- return -1;
- }
- final byte rareness = GameConstants.gachaponRareItem(item.getItemId());
- if (rareness > 0) {
- World.Broadcast.broadcastMessage(MaplePacketCreator.getGachaponMega("[" + msg + "] " + c.getPlayer().getName(), " : 從轉蛋機轉到了!", item, rareness,c.getChannel()-1).getBytes());
- }
- return item.getItemId();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return -1;
- }
複製代碼 在js裡呼叫的是- public int gainGachaponItem(int id, int quantity) {
- return gainGachaponItem(id, quantity, c.getPlayer().getMap().getStreetName() + " - " + c.getPlayer().getMap().getMapName());
- }
複製代碼 然而他這邊又回傳一個同名稱的function
也就是下面的那串
利用簡單的英文可以辨別出上綠廣的條件,rareness
這邊他為了查詢輸入的物品id是否為rareness
呼叫了這個function- GameConstants.gachaponRareItem(item.getItemId());
複製代碼 透過滑鼠右鍵 navigate->go to declaretion 可以直接查看這個function的實作內容(此為相當實用的操作方法)- public static byte gachaponRareItem(final int id) {
- switch (id) {
- case 2049100: // Chaos Scroll
- case 1102042: // Purple Adventurer Cape
- return 2;
- //1 = wedding msg o.o
- }
- return 0;
- }
複製代碼 很清楚的他直接透過switch 然後針對特定物品代碼return 2;
了解了背後在做甚麼後
這邊有兩個解決方案
一個是直接在他gachaponRareItem內添加你想要上廣的物品代碼
缺點是過於冗長,且後面的擴充刪減相當不便
因此接下來要實做的是能夠透過多一個boolean參數來決定是否為稀有物品(上廣)
有鑑於在原本的function直接添加新參數會導致其餘地方應用該function時少了新參數進而出錯
找到所有呼叫這個function的地方並做修改是有點不切實際而且耗費相當多時間的
所以選擇使用Overloaded function的原理來操作
這邊直接複製上方實際呼叫的 gainGachaponItem 在下方貼上
並修改為由於省去了上方的第一次回傳跟呼叫 缺少了msg 參數,我選擇直接刪除該參數並在原本使用的地方直接放入第一個函式的傳入值,之後添加新的參數boolean rare
然後修改上方判斷是否為稀有道具的判斷式,直接放入傳入的參數
至此大功告成
將來在js裡面應用時只需要用- gainGachaponItem(itemid, quantity, true);
複製代碼 即可讓該道具上廣。
有任何不夠清楚的地方歡迎討論
內容若有錯誤或者不夠乾淨,希望能夠指點,謝謝
內容歡迎轉載,轉載前請告知並附上原文
|
|