關於GVG類特定地圖限制攻速問題
在status.c中的void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag)找到這段
if(flag&SCB_ASPD) {
然後把其中的這段
status->amotion = cap_value(amotion,battle_config.max_aspd,2000);
替換成
if( map_flag_gvg(bl->m) )
status->amotion = cap_value(amotion,battle_config.gvg_max_aspd,2000);
else if(map.flag.pvp)
status->amotion = cap_value(amotion,battle_config.pvp_max_aspd,2000);
else if( map.flag.battleground )
status->amotion = cap_value(amotion,battle_config.bg_max_aspd,2000);
else
status->amotion = cap_value(amotion,battle_config.max_aspd,2000);
改成這樣的話,去PVP地圖,必須把武器脫了,在穿上就有限制攻速的效果了,同樣從PVP出來,回到正常地圖也需要這樣才能變回到正確的攻速
我想改成去了PVP就可以自動修改攻速的設定
已經在battle.c里學battle_config.max_aspd里把其他max_aspd設定好了
battle_config.gvg_max_aspd = 2000 - battle_config.gvg_max_aspd*10;
battle_config.pvp_max_aspd = 2000 - battle_config.pvp_max_aspd*10;
battle_config.bg_max_aspd = 2000 - battle_config.bg_max_aspd*10;
不知道哪裡還需要設置的,我是根據battle_config.max_aspd和battle_config.gvg_flee_penalty來寫的
求指點下,修改哪裡可以實現換地圖也可以變化攻速.. 本帖最後由 sinya 於 2012-6-14 11:44 PM 編輯
BUILDIN_FUNC(CalcCharStat)
{
TBL_PC *sd;
if( script_hasdata(st,2) )
sd=map_id2sd(script_getnum(st,2)); // <Account ID>
else
sd=script_rid2sd(st); // Attached player
if(sd==NULL){
script_pushint(st,-1);
return 0;
}
status_calc_pc(sd,0);
return 0;
}
BUILDIN_DEF(CalcCharStat,"?"),
試試這個 在OnPCLoadMapEvent更新狀態
OnPCLoadMapEvent:
if(getmapflg(mf_gvg)) CalcCharStat;
end;
status_calc_pc
在你這個裏面看到這個,突然想到
之前改的時候也在這個裏面看到了判斷攻速限制的
但因為少了struct block_list *bl;這部份定義
map_flag_gvg(bl->m)不符合要求
但自定義一下bl,又警告說沒設置初值
隨便設置了個初值0,人物進遊戲,map_sql就當機重啟 不多說了,爬文吧
http://okayro.com/thread-217882-1-4.html
頁:
[1]