作者laechan (小太保)
看板mud_sanc
标题Re: [公告] 种族抗性也实装了!
时间Tue Aug 2 21:38:32 2011
※ 引述《hlead (希多)》之铭言:
: 嗯,所以就是 防御等级 专门做给 种类 的意思罗!
: 然後 抗性 是对应 啪数 !
: 意思是表格要改成:
: static mapping RACE_ANTI=(["stoneman" :({"physics/2","shot/2"}),
: "elf" :({"magic/2"}),
: "devil" :({"magic/2"}),
: "dragonman" :({"magic/2","shot/1","physics/1"}),
: "human" :({"psychic/2"}) ]);
: 之类的。请玩家建议看看吧!
: 种类有:物理(physics) 魔法(magic) 念力(psychic) 远击(shot)
: 必中(stick) 气(air)
你可以宣告为两层 mapping 会比较方便。
mapping 的 if(! 判断规则是这样的。
比方 RACE_ANTI = ([]), 那至少可以做 if(RACE_ANTI["xxx"]) 这样
的判断,它不会出问题。但是底下就会出问题..
if(RACE_ANTI["xxx"]["ooo"])
因为它会默认「RACE_ANTI 应该有 key」,所以 if(RACE_ANTI["xxx"])
不会有问题,但是你若直接判断到第二层的话就会出问题,改法如下..
if(RACE_ANTI["xxx"]) // 先判断有没有第一层
if(RACE_ANTI["xxx"]["ooo"]) // 这时才判断有没有第二层
而一行可以解决的方法如下..
if(!undefinedp(RACE_ANTI["xxx"]["ooo"])) // 不过我很少这样写
因为你的 RACE_ANTI 只定义五个种族,所以只要有第一层,第二
层就至少可以做 if 判断,所以你可以这样做..
static mapping RACE_ANTI=([
"stoneman" :(["physics":2,"shot":2]),
.
.
]);
然後在判断上就这样做..
if(RACE_ANTI[race]) // 这样就可以直接判断有没有第一层
{
xx1=(int)RACE_ANTI[race]["physics"]; // 这样没有第二层时该数值就是 0
xx2=(int)RACE_ANTI[race]["shot"];
}
这样就可以少做那一行 sscanf 的程式段。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.3.82
1F:→ hlead :其实我不确定能不能两层...所以才这样做的.avert 08/02 21:51
2F:→ hlead :嗯。了解。纳入下次修改时再顺便改.. 08/02 21:52