我說明一下大致的做法。
首先,我剛剛看線上有 242 位玩家角色。
mapping allskill=([]);
mixed usr=users(),skills=({});
object ppl;
string msg="",sk;
對每一個玩家的每一個技能做登錄:
foreach(ppl in usr)
{
if((int)ppl->query("level")<1) continue;
skills=keys((mapping)ppl->query("skill"));
foreach(sk in skills)
if((int)allskill[sk]<ppl->query("skill/"+sk))
allskill[sk]=((int)ppl->query("skill/"+sk)/100)*100;
}
然後再做列表:
skills=keys(allskill);
foreach(sk in skills)
msg+=sprintf("%-30s : %4d\n",sk,allskill[sk]);
this_player()->more(explode(msg,"\n"),1,1);
底下是以 running code 產生的列表結果
holyball spell : 9900
girl fist : 9900
int control : 1000
zulai fist : 9900
holywar : 3000
air fist : 100
deadly-shiv : 2000
funeral-wind : 100
pen : 9900
sky-killer : 600
steal : 1000
seal spell : 900
war-dragon axe : 9900
holybell : 3000
swordmaster : 2000
goldfield : 1500
stone-force : 1000
blade heart : 9900
wind spell : 1600
thunder spell : 3100
icefire wand : 9900
time control : 900
bakunetsu-arm : 100
snow hands : 9900
burnbloom canto : 4900
pacify spell : 1000
pactio : 100
shutskill : 1000
blizzard : 100
shadow fist : 9900
return lance : 9900
hammer : 9900
firelance : 2400
enchant : 1500
lancemaaster : 2000
sankalekouken : 9900
dragon-recipe : 1000
body control : 1000
overload lance : 9900
flyinsky blade : 1000
longsee spell : 1500
windlance : 2400
creator-key : 1500
shuttindie : 100
waver : 100
watershield : 1000
lift-sprink : 1000
pray : 3000
burn-city lance : 9900
knight heart : 9900
gate : 2600
rainbow slash : 9900
syukuchi : 200
talent-arouse : 1500
clerical heart : 9900
biotech : 2000
sneak : 4000
magic-cycle : 1000
alchemist : 1000
holy body : 3000
parry : 9900
daggermaster : 2000
drafight_power : 100
wildnerve : 100
wu-lin axe : 9900
chuck-lance : 2000
wand : 9900
pkdog rodmaster : 1000
4-season slash : 2000
4->1 slash : 500
thief heart : 9900
magnum_punch : 3000
leadership : 1500
glamorous : 2400
explorer : 100
detoxify : 1000
evilmonster : 100
barefist : 9900
affliction : 9900
blader heart : 9900
absorb : 1600
gigabrake : 100
devilpower : 1000
ride skill : 4000
battle dagger : 9900
bless : 9900
grieffing : 1000
starlight wand : 9900
encasement : 100
cleanse : 9900
cyclone hands : 9900
dragoon : 100
interchange : 100
confine spell : 3000
evil-war axe : 1000
kamekameha : 900
fire axe : 9900
fixskill : 1000
ridespurt : 1000
drink fist : 9900
magic heart : 9900
devil-light : 1000
return spell : 3000
disaster-wall : 3000
colder fist : 2000
damage : 9900
duality-unite : 3000
sanctuary : 3000
kaioken : 1000
fighting-air : 600
runes : 9000
berserk : 100
earthaxe : 1000
sagepower : 1700
handpower : 200
bow : 9900
burning hands : 9900
dark-fog : 100
sunset blade : 9900
snow-moon blade : 9900
6-cold blade : 9900
counter : 200
burnperfume : 2400
hellfire : 900
evil destroy : 2000
hakendisdulu : 500
gy-rod : 2400
swallow-mai : 9900
bousou : 100
shooter : 9900
sand hands : 9900
legendary : 2000
frozen-orb : 3000
whip : 9900
claw : 9900
powerup : 3000
armor spell : 1500
wild heart : 500
entrench : 3000
sacramenti : 3000
snow-flower : 500
spiriten : 100
axe : 9900
atfield : 9900
hafe blade : 9900
illusion spell : 1500
sword : 9900
speed-cast : 3000
literature : 1500
crack slash : 100
greencloud fist : 2900
myskill : 9900
tissuell : 1500
whirl-shield : 1000
swimskill : 100
harp : 1000
japan blade : 1000
dragon fist : 9900
pure power : 3000
light wall : 100
magnificat : 3000
vitality spell : 1500
pkdog rod : 9900
thunder guard : 1000
fister heart : 9900
bigcross : 900
dragon-paw fist : 9900
slasher heart : 9900
holy power : 3000
phoenix-recipe : 1000
holy shield : 3000
vapor calligraphy : 2000
lance : 9900
cyclone-air : 600
moon ray : 600
shield : 2400
earth spell : 2000
rideto : 100
fosan foot : 9900
ice spell : 3000
feather fist : 2000
vampire touch : 300
heavry : 4200
sleep-cloud : 100
lightning blade : 9900
taichi fist : 9900
soulin fist : 9900
firecloud fist : 2000
axemaster : 2400
SM : 9900
knight slash : 9900
furiousaxe : 2400
tyoumabaka : 100
round-on : 200
dagger : 9900
angry-fire : 100
justice heart : 900
abanlance : 2400
sleep spell : 1500
avan slash : 1200
staff : 9900
drafight : 1000
multi-attack : 2000
thunder fist : 2000
wind fist : 9900
riot-supressing rod : 9900
burnedge chapter : 9900
backstab : 2000
heal spell : 3000
6-vessels swordray : 9900
flying-sky blade : 100
fighter heart : 9900
egingin : 500
shadow teeth : 9900
blademaster : 2400
king-road : 9900
magic missile : 9900
hardskill : 100
stigmata : 3000
nine-sword : 200
spirit-melody : 1000
light spell : 3000
adventure heart : 9900
light aura : 3000
gamble : 500
god-damn : 3000
powershield : 1500
weaponmaker : 500
toothstab : 9900
drift volume : 9900
silence spell : 1000
gun : 9900
destroy spell : 600
electric hands : 9900
lancemaster : 2400
dragonsword : 1000
float spell : 1500
blood-feast : 1000
earthquake : 1000
fire spell : 3000
bloody-scraid : 900
dash : 100
crazydragon blade : 900
judo : 9900
water-lotus slash : 9900
rod : 9900
fly-cloud wand : 9900
blade : 9900
life-sprink : 9900
phantom-strike : 2400
kendo : 9900
violent-shout : 2000
detoxify spell : 1500
buddha-seal fist : 1100
wudon slash : 9900
ragnarok : 3000
elf-wings : 100
watou blade : 1000
flower rod : 9900
multi-cast : 3000
dodge : 4000
rodmaster : 2400
know-maze : 100
encourage : 3000
目前似乎共 26x 個技能,實際上登錄於 skill_stat.c 的技能
數則是 25x 個,扣掉部份「我身上的」錯誤技能,差不多match
(沒記錯的話上限值 400 個左右,以前最高曾到 45x 個然後就
發生 error,因此才大砍冗餘技能,目前技能量則在安全的水位)
當然實際上這麼做會有問題的,以進階法師來說不是所有的進階
法師都把技能練到滿了,因此上面部份技能還需修正。
但是大部份都是對的,這時就可利用這一特性,「只需手動修正
幾個錯的即可」。
這東西將來會寫成 /open/cmds/database.c,並寫一個專門的指
令來控制這個房間,再讓 skills 指令讀取這個物件來取得資料
Laechan