duno 发表于 2009-5-4 01:20:33

[模块]随身物品信息

Inventory 模块 管理随身物品
数据结构
Inventory.items   随身物品数组,以id为key,value结构为{name=大砍刀,id={dakan dao,dao,blade},num=1},num为数量
           其中id项为数组,对应此一物品的所有id
Inventory.wield   装备武器,Inventory.wield左手,右手
Inventory.wear    衣服盔甲,数组,每一元素结构{name=衣服,id=cloth}
辅助功能
按id划分物品,给出每种id的物品数量
接口
function Inventory.CheckItems ()
    更新Inventory数据,从新获取随身物品信息
function Inventory.ShowItems ()
    将Inventory数据打印到output
function Inventory.GetPartition (types)
    按指定types划分随身物品
    参数为数组,每一元素对应一种物品id,如sword,blade,armor
使用
a) 首先调用Inventory.CheckItems (),获取随身物品信息
  此时Inventory下items,wield,wear域数据被填充
  可通过访问以上三域获取物品信息,如确定 卖东西,买鱼饵,金疮药 等的数量
b) 划分随身物品
  根据随身物品全id划分物品
  调用Inventory.GetPartition (types), 参数形如{sword,blade,shu}的数组
  返回对应每一id的物品数量,形如{sword=1,blade=1,shu=2}
  如有若干把sword,若干把blade需要鉴定时,可使用本函数,获取每种物品的数量,然后遍历
  这种划分结果是无交集的,当一个物品计入一种id时,就不会再计入其他种类,有需要可自行修改
  

duno 发表于 2009-5-4 01:28:21

Log举例,这里没有手动输入任何东西,仅仅是三次函数调用
最后的划分partition中
 一把大砍刀一把钢刀划入blade项
 两把青锋剑一把长剑划入sword项
 一本法华经,一本道德经划入shu项

call Inventory.CheckItems()
i
id
say inventory off
你身上带著下列这些东西(负重 62%):
钢刀(Blade)
长剑(Changjian)
法华经(Shu)
九十七文铜板(Coin)
二十一两白银(Silver)
二两黄金(Gold)
道德经(Shu)
二把青锋剑(Qingfeng sword)
北侠战甲(Pkuxkx zhanjia)
大砍刀(Dakan dao)
侠客行战靴(Xkx shoes)
布衣(Cloth)
-------------------------------------------
你右手拿着:大砍刀(Dakan dao)
你左手拿着:青锋剑(Qingfeng sword)
-------------------------------------------
你身上穿着:
北侠战甲(Pkuxkx zhanjia)
侠客行战靴(Xkx shoes)
布衣(Cloth)
> 你(你)身上携带物品的别称如下(右方) :
钢刀               = blade
长剑               = changjian, sword
法华经               = shu, book
铜板   = coin, coins, coin_money
白银 = silver, ingot, silver_money
黄金 = gold, ingot, gold_money
道德经               = shu, book
青锋剑               = qingfeng sword, jian, sword
北侠战甲             = pkuxkx zhanjia, zhanjia, armor
大砍刀               = dakan dao, dao, blade
侠客行战靴 = xkx shoes, shoes
布衣               = cloth
> 你说道:「inventory off」
>
call Inventory.ShowItems ()
***   List Items***
1 = 1钢刀 blade
2 = 1长剑 changjian; sword
3 = 1法华经 shu; book
4 = 97铜板 coin; coins; coin_money
5 = 21白银 silver; ingot; silver_money
6 = 2黄金 gold; ingot; gold_money
7 = 1道德经 shu; book
8 = 2青锋剑 qingfeng sword; jian; sword
9 = 1北侠战甲 pkuxkx zhanjia; zhanjia; armor
10 = 1大砍刀 dakan dao; dao; blade
11 = 1侠客行战靴 xkx shoes; shoes
12 = 1布衣 cloth
***   List Wield***
左 = 青锋剑 qingfeng sword
右 = 大砍刀 dakan dao
***   List Wear   ***
1 = 北侠战甲 pkuxkx zhanjia
2 = 侠客行战靴 xkx shoes
3 = 布衣 cloth

call Inventory.CheckItems({"sword","blade","shu"})
***   List Partition   ***
blade = 2
sword = 3
shu = 2

ddid 发表于 2009-5-4 02:48:45

能导出成插件不?

duno 发表于 2009-5-4 22:57:22

我觉得require更简洁 囧
把一下两行加入你的scrips文件就行了

require "inventory_v2"        --引用库文件,顶楼的附件
Inventory.CheckItems()--check物品信息

script 类型用lua

maper 发表于 2009-8-18 10:29:11

真是好东西啊!
最近在写自动处理身上物品的机器人,这个很有参考价值!ttk_00
页: [1]
查看完整版本: [模块]随身物品信息