看板 mud_sanc 關於我們 聯絡資訊
adv lv 的關鍵程式碼部份如下... mixed skill_check(object user,object guild) { mixed names; string gname; int i,j,lv,max_lv,tot_have,tot_need,max; gname=guild->query("guild"); // slasher lv=user->query("guild/"+gname); // 玩家的 slasher 級數 max_lv=RANK_D->query_max_lv(gname); // slasher 最大工會級數: 25 names=keys(get_table(gname)); // 讀出該公會技能表存成陣列 for(i=0,j=sizeof(names);i<j;i++) { tot_need=user->query("skill/"+names[i]); // 玩家 slasher 某技能的技能值 if(tot_need>0) tot_have+=tot_need; // 做玩家身上所學 slasher 公會技能的累加 max+=max_skill(lv,(mixed)get_skinfo(gname,names[i])); // 同時做 slasher 公會各技能在公會技能表的上限值的累加 } // 簡單的說假設該公會只有 sword, swordmaster, swordray 三個技能 // tot_have 就是玩家有學這三個技能的話, 技能值總和 // max 就是設定在公會裡面這三個技能的最大值, 假設是 600/600/600 // 那 max 就是 1800 tot_need=max*(50+max_lv*lv/(1+max_lv))/100; // 然後 tot_need = 最大級數 x (50+最大級數x現有級數/(1+最大級數))/100 // = 至少技能要練滿 (50+某值)% 的意思 // 這個某值比方劍士練了 10 級, 10/25 = 40/100, 就是說 10 級的劍士要升 // 11 級, 需練滿劍士公會 50+40 = 90% 的技能 return ({tot_have,tot_need,max}); } // 升公會級數時的一般性判別 int general_limit(object user,object guild) { mixed tmp; string gname; int tot_have,tot_need,max,t,lv; tmp=skill_check(user,guild); // tmp = ({tot_have, tot_need, max}) gname=guild->query("guild"); tot_have=tmp[0]; tot_need=tmp[1]; max=tmp[2]; // 升公會級數時是否有將公會技能鍛練到一定程度的判別 if(tot_have<tot_need) { write(HIC"你的所有"+HIY+to_chinese(gname)+"公會技能"HIC"只學了"+ tot_have*100/max+"%,至少要學滿"+(1+tot_need*100/max)+ "%才能升公會級數歐!\n"NOR); return 1; } return 0; // 代表通過檢查 } hlead 你可自行檢查一下。 Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.131.221.223
acylcat:會不會是氣劍指的影響啊? swordray 07/13 13:07
hlead: if(tot_have<tot_need) <--這個比得很怪就是了= = 07/13 13:12
hlead:(1+tot_need*100/max)這行不是寫tot_need就了嗎? 07/13 13:34