作者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