OK論壇

 找回密碼
 註冊
查看: 3605|回復: 1

[分享] 教您如何讓 bonus bMatk,n; 又可以使用~

[複製鏈接]
  • TA的每日心情
    開心
    2020-10-27 09:10 PM
  • 簽到天數: 2555 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

    發表於 2011-5-13 14:30:26 | 顯示全部樓層 |閱讀模式
    本帖最後由 he01204046 於 2011-5-13 02:33 PM 編輯

    新版的3CEAM老早都把bonus bMatk,n;這一項功能拿掉了...

    想讓他回來並不困難,來~按照教學一步一步教導。

    一、要新增這個,先要知道它的對應編號,打開DB中的const.txt

    然後搜尋bAtkRange 你會找到
    bAtkRange    1000
    bAtkEle    1001
    bDefEle    1002
    bCastrate    1003
    bMaxHPrate    1004
    bMaxSPrate    1005
    bUseSPrate    1006
    bAddEle    1007

    這一些的資料,這就是物品效果對應的編號
    在bAtkRange    1000的上面新增
    bMatk    999
    存檔,完成第一步驟。

    二、開啟源碼使用CTRL+F搜尋,將搜尋方式改為 整個方案 然後隨意搜尋物品效果後面的編號,在這裡我搜尋1018

    接下來就會看到map.h的檔案內有
    SP_ATTACKRANGE=1000,        SP_ATKELE,SP_DEFELE,        // 1000-1002
            SP_CASTRATE, SP_MAXHPRATE, SP_MAXSPRATE, SP_SPRATE, // 1003-1006
            SP_ADDELE, SP_ADDRACE, SP_ADDSIZE, SP_SUBELE, SP_SUBRACE, // 1007-1011
            SP_ADDEFF, SP_RESEFF,        // 1012-1013
            SP_BASE_ATK,SP_ASPD_RATE,SP_HP_RECOV_RATE,SP_SP_RECOV_RATE,SP_SPEED_RATE, // 1014-1018


    bingo~找到了,然後在SP_ATTACKRANGE=1000,的上面或前面新增SP_BASE_MAGIC=999,

    完成如下
    SP_BASE_MAGIC=999,SP_ATTACKRANGE=1000,        SP_ATKELE,SP_DEFELE,        // 1000-1002
            SP_CASTRATE, SP_MAXHPRATE, SP_MAXSPRATE, SP_SPRATE, // 1003-1006
            SP_ADDELE, SP_ADDRACE, SP_ADDSIZE, SP_SUBELE, SP_SUBRACE, // 1007-1011
            SP_ADDEFF, SP_RESEFF,        // 1012-1013
            SP_BASE_ATK,SP_ASPD_RATE,SP_HP_RECOV_RATE,SP_SP_RECOV_RATE,SP_SPEED_RATE, // 1014-1018


    三、再次開啟搜尋,搜尋SP_MATK_RATE找到pc.c裡面的
           case SP_MATK_RATE:
                    if(sd->state.lr_flag != 2)
                            sd->matk_rate += val;
                    break;

    ok,我們依樣畫葫蘆把他複製一份,貼在上面,並將SP_MATK_RATE改為SP_BASE_MAGIC以及matk_rate改為matk_base
            case SP_BASE_MAGIC:
                    if(sd->state.lr_flag != 2)
                            sd->matk_base += val;
                    break;

    這時候matk_base應該會出現報錯,說沒有定義,現在開啟pc.h檔案後,搜尋matk_rate,會找到
            int castrate,delayrate,hprate,sprate,dsprate;
            int hprecov_rate,sprecov_rate;
            int matk_rate;
            int critical_rate,hit_rate,flee_rate,flee2_rate,def_rate,def2_rate,mdef_rate,mdef2_rate;

    將紅色的部分複製一份,並貼到上方,改為下面藍色的
            int castrate,delayrate,hprate,sprate,dsprate;
            int hprecov_rate,sprecov_rate;
    int matk_base; //定義魔法傷害增加
            int matk_rate;
            int critical_rate,hit_rate,flee_rate,flee2_rate,def_rate,def2_rate,mdef_rate,mdef2_rate;

    這邊就是變數的定義,定義完畢後,剛剛的報錯就消失了~

    然後搜尋matk_rate找到status.c裡面的
            sd->dsprate = 100;
            sd->hprecov_rate = 100;
            sd->sprecov_rate = 100;
            sd->matk_rate = 100;

    看到紅色的那一段,一樣複製一份起來,貼在上方後,改成下面的藍色這樣
            sd->dsprate = 100;
            sd->hprecov_rate = 100;
            sd->sprecov_rate = 100;
    sd->matk_base = 0; //預設值
            sd->matk_rate = 100;

    這邊的設定是當有使用該效果的裝備,卸除後,將所增加的魔法傷害恢復為0,不改的話,當你穿脫一次裝備,魔法傷害就會累加一次唷~

    改完後,同樣的檔案繼續搜尋matk_rate找到
    1.         if( sd->matk_rate < 0 )
    2.                 sd->matk_rate = 0;
    3.         if( sd->matk_rate != 100 )
    4.         {
    5.                 status->matk_max = status->matk_max * sd->matk_rate / 100;
    6.                 status->matk_min = status->matk_min * sd->matk_rate / 100;
    7.         }
    複製代碼
    在下面新增如下方藍色的
            if( sd->matk_rate < 0 )
                    sd->matk_rate = 0;
            if( sd->matk_rate != 100 )
            {
                    status->matk_max = status->matk_max * sd->matk_rate / 100;
                    status->matk_min = status->matk_min * sd->matk_rate / 100;
            }
            status->matk_max = status->matk_max + sd->matk_base; //配合bMatk
            status->matk_min = status->matk_min + sd->matk_base; //配合bMatk

    這邊就是將剛剛的變數實際的加到人物欄上面顯示的最小和最大法術傷害上

    同個檔案繼續搜尋matk_rate找到
                    if( bl->type&BL_PC && sd->matk_rate != 100 )
                    {
                            //Bonuses from previous matk
                            status->matk_max = status->matk_max * sd->matk_rate/100;
                            status->matk_min = status->matk_min * sd->matk_rate/100;
                    }

    同樣的畫葫蘆~改為下面藍色的這樣
    if( bl->type&BL_PC && sd->matk_rate != 100 )
                    {
                            //Bonuses from previous matk
                            status->matk_max = status->matk_max * sd->matk_rate/100;
                            status->matk_min = status->matk_min * sd->matk_rate/100;
                    }
                    status->matk_max = status->matk_max + sd->matk_base;//配合bMatk
                    status->matk_min = status->matk_min + sd->matk_base;//配合bMatk

    OK,完成。

    評分

    參與人數 1積分 +10 收起 理由
    pan00017 + 10 我很贊同

    查看全部評分

    回復

    使用道具 舉報

  • TA的每日心情
    擦汗
    2014-8-13 07:23 AM
  • 簽到天數: 109 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2012-8-10 00:00:00 | 顯示全部樓層
    本帖最後由 sense 於 2013-1-26 04:18 PM 編輯


    經由測試後 ... Windows XP下召喚精靈會Crash是來自bMatk,因為我當初也是抄這裡 哈~

    1. if( bl->type&BL_PC && sd->matk_rate != 100 )
    2. {
    3.         //Bonuses from previous matk
    4.         status->matk_max = status->matk_max * sd->matk_rate/100;
    5.         status->matk_min = status->matk_min * sd->matk_rate/100;
    6. }
    7.         status->matk_max = status->matk_max + sd->matk_base;//配合bMatk
    8.         status->matk_min = status->matk_min + sd->matk_base;//配合bMatk
    複製代碼
    1. if( bl->type&BL_PC)
    2. {
    3.                 if (sd->matk_rate != 100)
    4.                 {
    5.                         //Bonuses from previous matk
    6.                         status->matk_max = status->matk_max * sd->matk_rate/100;
    7.                         status->matk_min = status->matk_min * sd->matk_rate/100;
    8.                 }
    9.                
    10.                 if (sd->matk_base)
    11.                 {
    12.                         //Card Bonus
    13.                         status->matk_max = status->matk_max + sd->matk_base;//配合bMatk
    14.                         status->matk_min = status->matk_min + sd->matk_base;//配合bMatk
    15.                 }
    16. }
    複製代碼
    原因是因為sd...

    如果是 魔物/傭兵/生命體/精靈 ... 等等等,sd是空的所以產生Crash,但神奇的是在Windows 7下卻可以安然無恙


    回復 支持 反對

    使用道具 舉報

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

    本版積分規則

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

    GMT+8, 2024-5-6 03:04 AM , Processed in 0.061756 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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