作者laechan (小太保)
看板mud_sanc
标题Re: [wizs]特殊设定与问题请教
时间Mon Sep 24 00:04:30 2007
如果要自由度高一点, 原则上就是让所有的影响都由撰写的
wiz 自定, 系统仅支援呼叫物件的部份。
例如你自订一个 control room 在你的区域..
~plain/area/xxx/room/poison_room.c
======================================================
inherit ROOM;
void special_effect(object ppl)
{
// 这里可做一些限定, 底下是范例
if(!environment(ppl)) return ;
if(ppl->query_temp("plain_check")) return ;
tell_object(ppl,HIM"你中毒了!!!(10000)"NOR"\n");
ppl->add("hp",-10000);
if(ppl->query("hp")<1)
ppl->die();
}
然後在系统档中设定一个定期呼叫的函数...
void check_special_effect(object ppl)
{
mapping effobs;
string keys_ob;
object ob;
// 原则上, 玩家若选择 quit, 应清除一切的影响
if(!effobs=(mapping)ppl->query_temp("special_effect")) return ;
foreach(keys_ob in keys(effobs))
{
if(!ob=effobs(keys_ob)) continue;
ob->special_effect(ppl);
}
return ;
}
然後在玩家档中设定一些函数...
void remove_special_effect(object ppl,string keys_ob)
{
if(!ppl) return ;
if(!ppl->query_temp("special_effect/"+keys_ob)) return ;
ppl->delete_temp("special_effect/"+keys_ob);
return ;
}
void add_special_effect(object ppl,string keys_ob,object ob)
{
if(!ppl) return ;
if(ppl->query_temp("special_effect/"+keys_ob)) return ;
ppl->set_temp("special_effect/"+keys_ob,ob);
return ;
}
它的概念跟护盾很像, 当玩家有护盾而怪物攻击玩家时,攻击函数
会去判断护盾存不存在,若存在,就由护盾物件去做实际的攻击抵
挡判断。
所以理论上我们同样可以设计一个物件,它专门用来判断玩家在一
定时间内会受的影响。
但理论上较佳的写法是,让同一个物件就能支援该区域所有的特殊
影响,这是比较佳的写法,我已经有底了。
总之,你们可以先试着写写看那个 control_room, 并且为每一种
影响设定函数,底下是例子..
~plain/area/xxx/room/control.c
===========================================================
inherit ROOM;
int plain_poison_effect(object ppl)
{
...
}
int plain_stat_effect(object ppl)
{
...
}
.
.
.
也就是每一种影响,它们的函数名各不相同,但是开头必须有 wiz
识别名。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.114.48.43
1F:推 amosdeus:是的 了解~ 09/24 00:47
2F:推 amosdeus:试做 /u/p/plain/pic_trans/concretize.c 09/24 02:40
3F:推 jor4153:玩家只有逼不得以才会选择quit.ㄆㄆ 09/24 06:27
4F:推 jor4153:我喜欢以游戏为主的想法来做区域的...ㄆㄆㄆ..加油! 09/24 06:30