作者laechan (打死不投馬冏,李系咩安抓)
看板mud_sanc
標題[公會] adv lv 用到的程式段
時間Fri Jul 13 12:04:38 2007
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
1F:推 acylcat:會不會是氣劍指的影響啊? swordray 07/13 13:07
2F:推 hlead: if(tot_have<tot_need) <--這個比得很怪就是了= = 07/13 13:12
3F:推 hlead:(1+tot_need*100/max)這行不是寫tot_need就了嗎? 07/13 13:34