OK論壇

 找回密碼
 註冊
查看: 2344|回復: 0

[教學] [講解]掉寶糖,經驗加倍書不會重複銷耗的問題

[複製鏈接]
  • TA的每日心情
    慵懶
    2013-7-11 12:09 AM
  • 簽到天數: 118 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2010-2-12 14:56:26 | 顯示全部樓層 |閱讀模式
    看過許多問題,問說為什麼多使用一次加倍書,掉寶糖會什麼不會減少數量

    原因在於map執行端


    請打開src\map\pc.c

    看到下列函數
    1. int pc_isUseitem(struct map_session_data *sd,int n)
    2. {
    3. struct item_data *item;
    4. int nameid;

    5. nullpo_retr(0, sd);

    6. item = sd->inventory_data[n];
    7. nameid = sd->status.inventory[n].nameid;

    8. if( item == NULL )
    9. return 0;
    10. //Not consumable item
    11. if( item->type != IT_HEALING && item->type != IT_USABLE )
    12. return 0;
    13. if( !item->script ) //if it has no script, you can't really consume it!
    14. return 0;

    15. switch( nameid )
    16. {
    17. case 605: // Anodyne
    18. if( map_flag_gvg(sd->bl.m) )
    19. return 0;
    20. case 606:
    21. if( pc_issit(sd) )
    22. return 0;
    23. break;
    24. case 601: // Fly Wing
    25. case 12212: // Giant Fly Wing
    26. if( map[sd->bl.m].flag.noteleport || map_flag_gvg(sd->bl.m) )
    27. {
    28. clif_skill_teleportmessage(sd,0);
    29. return 0;
    30. }
    31. case 602: // ButterFly Wing
    32. case 14527: // Dungeon Teleport Scroll
    33. case 14581: // Dungeon Teleport Scroll
    34. case 14582: // Yellow Butterfly Wing
    35. case 14583: // Green Butterfly Wing
    36. case 14584: // Red Butterfly Wing
    37. case 14585: // Blue Butterfly Wing
    38. case 14591: // Siege Teleport Scroll
    39. if( sd->duel_group && !battle_config.duel_allow_teleport )
    40. {
    41. clif_displaymessage(sd->fd, "Duel: Can't use this item in duel.");
    42. return 0;
    43. }
    44. if( nameid != 601 && nameid != 12212 && map[sd->bl.m].flag.noreturn )
    45. return 0;
    46. break;
    47. case 604: // Dead Branch
    48. case 12024: // Red Pouch
    49. case 12103: // Bloody Branch
    50. case 12109: // Poring Box
    51. if( map[sd->bl.m].flag.nobranch || map_flag_gvg(sd->bl.m) )
    52. return 0;
    53. break;
    54. case 12210: // Bubble Gum
    55. case 12264: // Comp Bubble Gum
    56. if( sd->sc.data[SC_ITEMBOOST] )
    57. return 0;
    58. break;
    59. case 12208: // Battle Manual
    60. case 12263: // Comp Battle Manual
    61. case 12312: // Thick Battle Manual
    62. case 12705: // Noble Nameplate
    63. case 14532: // Battle_Manual25
    64. case 14533: // Battle_Manual100
    65. case 14545: // Battle_Manual300
    66. if( sd->sc.data[SC_EXPBOOST] )
    67. return 0;
    68. break;
    69. case 14592: // JOB_Battle_Manual
    70. if( sd->sc.data[SC_JEXPBOOST] )
    71. return 0;
    72. break;

    73. // Mercenary Items

    74. case 12184: // Mercenary's Red Potion
    75. case 12185: // Mercenary's Blue Potion
    76. case 12241: // Mercenary's Concentration Potion
    77. case 12242: // Mercenary's Awakening Potion
    78. case 12243: // Mercenary's Berserk Potion
    79. if( sd->md == NULL || sd->md->db == NULL )
    80. return 0;
    81. if( sd->md->sc.data[SC_BERSERK] )
    82. return 0;
    83. if( nameid == 12242 && sd->md->db->lv < 40 )
    84. return 0;
    85. if( nameid == 12243 && sd->md->db->lv < 80 )
    86. return 0;
    87. break;
    88. }

    89. if( nameid >= 12153 && nameid <= 12182 && sd->md != NULL )
    90. return 0; // Mercenary Scrolls

    91. //added item_noequip.txt items check by Maya&[Lupus]
    92. if (
    93. (map[sd->bl.m].flag.pvp && item->flag.no_equip&1) || // PVP
    94. (map_flag_gvg(sd->bl.m) && item->flag.no_equip&2) || // GVG
    95. (map[sd->bl.m].flag.restricted && item->flag.no_equip&map[sd->bl.m].zone) // Zone restriction
    96. )
    97. return 0;

    98. //Gender check
    99. if(item->sex != 2 && sd->status.sex != item->sex)
    100. return 0;
    101. //Required level check
    102. if(item->elv && sd->status.base_level < (unsigned int)item->elv)
    103. return 0;

    104. //Not equipable by class. [Skotlex]
    105. if (!(
    106. (1<<(sd->class_&MAPID_BASEMASK)) &
    107. (item->class_base[sd->class_&JOBL_2_1?1:(sd->class_&JOBL_2_2?2:0)])
    108. ))
    109. return 0;

    110. //Not usable by upper class. [Skotlex]
    111. if(!(
    112. (1<<(sd->class_&JOBL_UPPER?1:(sd->class_&JOBL_BABY?2:0))) &
    113. item->class_upper
    114. ))
    115. return 0;

    116. //Dead Branch & Bloody Branch & Porings Box
    117. if((log_config.branch > 0) && (nameid == 604 || nameid == 12103 || nameid == 12109))
    118. log_branch(sd);

    119. return 1;
    120. }
    複製代碼



    switch( nameid )

    nameid就是物品ID

    至於為什麼不能重複使用掉寶糖的原因在這


    1. case 12264: // Comp Bubble Gum
    2. if( sd->sc.data[SC_ITEMBOOST] )//檢查玩家狀態,是否已經使用
    3. return 0;
    複製代碼
    回復

    使用道具 舉報

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

    本版積分規則

    Archiver|手機版|小黑屋|OK討論區

    GMT+8, 2024-5-5 11:39 AM , Processed in 0.063188 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回復 返回頂部 返回列表