sleep.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 352 行
C
352 行
// sleep.c
// Dec.11 1997 by Venus
#include <ansi.h>;
#include <command.h>;
void wakeup(object me, object where);
int wakeup2(object me,object slept,object where);
int birth1(object me,object obj);
void birth2(object me, object where);
void del_sleeped(object me);
int main(object me, string arg)
{
object obj, old_target;
int i;
object *inv;
mapping fam;
object where = environment(me);
seteuid(getuid());
if ( (!(fam = me->query("family")) || fam["family_name"] != "丐帮")
&& !(where->query("sleep_room"))
|| (where->query("no_sleep_room")) )
return notify_fail("这里不是你能睡的地方!\n");
if (me->is_busy())
return notify_fail("你正忙着呢!\n");
if( me->is_fighting() )
return notify_fail("战斗中不能睡觉!\n");
if( !environment(me)->query("sleep_room"))
{
if( environment(me)->query("no_beg") &&
environment(me)->query("no_fight") &&
environment(me)->query("no_steal"))
return notify_fail(HIY"\n不要影响别人,还是找一个别的地方吧。\n"NOR);
}
if (where->query("hotel") && !(me->query_temp("rent_paid")))
{
message_vision(
"店小二从门外对$N大叫:把这里当避难所啊!先到一楼付钱后再来睡!\n",me);
return 1;
}
/* if ((time()-me->query("last_sleep"))<0)
return notify_fail("你刚睡过一觉,先活动活动吧。 \n");
if (me->query_temp("sleeped"))
return notify_fail("你刚在三分钟内睡过一觉,多睡对身体有害无益!\n");
if (me->query("marks/insleeping"))
{
me->set("marks/insleeping",0);
//me->set_temp("sleeped",1);
//call_out("del_sleeped", 179, me);
return notify_fail(
"由于你上次退出前没有在睡觉后满三分钟,只好现在开始补足。\n");
}
*/
if((!arg)||arg==(string)me->query("id"))
{
if (where->query("sleep_room"))
{
write("你往床上一躺,开始睡觉。\n");
write("不一会儿,你就进入了梦乡。\n");
me->set_leader(0);
me->start_busy(2);
me->set_temp("block_msg/all",1);
me->set("last_sleep",time());
message_vision(
"$N一歪身,倒在床上,不一会便鼾声大作,进入了梦乡。\n",me);
}
else {
write("你往地下角落一躺,开始睡觉。\n");
write("不一会儿,你就进入了梦乡。\n");
me->set_leader(0);
me->start_busy(2);
me->set_temp("block_msg/all",1);
me->set("last_sleep",time());
message_vision(
"$N往地下角落屈身一躺,不一会便鼾声大作,做起梦来。\n",me);
}
// where->set("no_fight", 1);
where->add_temp("sleeping_person", 1);
me->set("no_get", 1);
me->set("no_get_from", 1);
if (!(where->query("hotel")))
me->set_temp("sleeped",1);
else
{
me->delete_temp("rent_paid");
me->set_temp("sleeped",1);
}
me->disable_player("<睡梦中>");
call_out("wakeup",random(45 - me->query("con")) , me, where);
return 1;
}
if(!objectp(obj = present(arg, where)))
return notify_fail("你想跟谁一起睡?\n");
if( !obj->is_character() )
return notify_fail("?脑袋出毛病了?\n");
if( !userp(obj) )
return notify_fail("人家可不愿理你!\n");
//can't sleep with npc...
if(me->query("gender")==obj->query("gender"))
return notify_fail("?对方跟你可是同性呢...\n");
if( !living(obj) )
return notify_fail(obj->name() + "没法跟你睡了。\n");
if (!where->query("if_bed"))
return notify_fail("就在这里?不太好吧。\n");
if( (int)me->query("qi") * 100 / (int)me->query("max_qi") < 50 )
return notify_fail("你现在是心有余而力不足。\n");
if( obj->query_condition("huaiyun") > 0)
return notify_fail("搞笑啊?孕妇要注意宝宝安全,怎么能这样?忍一忍拉!\n");
if( me->query_condition("huaiyun") > 0)
return notify_fail("搞笑啊?孕妇要注意宝宝安全,怎么能这样?忍一忍拉!\n");
if( userp(obj) && (object)obj->query_temp("pending/sleep")!=me )
{
message_vision(RED "\n$N含情脉脉地对$n说:我...\n\n" NOR, me, obj);
if( objectp(old_target = me->query_temp("pending/sleep")) &&
!((string)old_target->query("id")==(string)obj->query("id")))
tell_object(old_target, YEL + me->name() + "改变主意不想跟你睡了。\n" NOR);
me->set_leader(0);
me->set_temp("pending/sleep", obj);
tell_object(obj, YEL "看来" + me->name() +
"("+(string)me->query("id")+")"+
"很想跟你...如果你愿意,请也下一次 sleep 指令。\n" NOR);
write(YEL "对方正在考虑中...\n" NOR);
return 1;
}
message_vision(RED "\n$N冲着$n会心地一笑,点了点头。\n\n" NOR, me, obj);
inv = all_inventory(me);
for(i=0; i<sizeof(inv); i++)
REMOVE_CMD->do_remove(me, inv[i]);
inv = all_inventory(obj);
for(i=0; i<sizeof(inv); i++)
REMOVE_CMD->do_remove(obj, inv[i]);
if(me->query("gender")=="男性")
{
tell_object(me, HIY "\n\n你搂着"+obj->query("name")+
"温软的身体,不由得心醉神迷...\n\n\n" NOR);
tell_object(obj, HIY "\n\n你躺在"+me->query("name")+
"的怀里,不由得心醉神迷...\n\n\n" NOR);
}
else
{
tell_object(obj, HIY "\n\n你搂着"+me->query("name")+
"温软的身体,不由得心醉神迷...\n\n\n" NOR);
tell_object(me, HIY "\n\n你躺在"+obj->query("name")+
"的怀里,不由得心醉神迷...\n\n\n" NOR);
}
me->set("last_sleep",time());
obj->set("last_sleep",time());
me->set_temp("block_msg/all",1);
obj->set_temp("block_msg/all",1);
message_vision(HIY "$N和$n钻入被中,搂在一起睡着了...\n\n\n" NOR,me,obj);
me->disable_player("<睡梦中>");
obj->disable_player("<睡梦中>");
call_out("wakeup2",random(45 - me->query("con")) + 10, me,obj, where);
call_out("wakeup2",random(45 - obj->query("con")) + 10, obj, me,where);
return 1;
}
void wakeup(object me,object where)
{
if(!me) return;
me->set("qi", me->query("eff_qi"));
me->set("jing", me->query("eff_jing"));
me->add("neili", me->query("max_neili")/2 - me->query("neili")/2 );
me->enable_player();
call_out("del_sleeped", 179, me);
message_vision("$N一觉醒来,精力充沛地活动了一下筋骨。\n",me);
me->set_leader(0);
me->set_temp("block_msg/all", 0);
write("你一觉醒来,只觉精力充沛。该活动一下了。\n");
while( environment(me)->is_character() )
me->move(environment(environment(me)));
// if (!where->query("sleep_room") && !where->query("hotel"))
// where->delete("no_fight");
if(!where) return;
where->add_temp("sleeping_person", -1);
me->delete("no_get");
me->delete("no_get_from");
}
int wakeup2(object me,object slept,object where)
{
int qi_cost;
object obj;
me->set("qi", me->query("eff_qi"));
me->set("jing", me->query("eff_jing"));
me->add("neili", me->query("max_neili")/2 - me->query("neili")/2 );
me->enable_player();
qi_cost=50+5*((int)me->query("str")-(int)me->query("con"));
if(qi_cost>(int)me->query("max_qi")/2)
qi_cost=(int)me->query("max_qi")/2+1;
me->add("qi", -qi_cost);
if (me->query("qi") <= 0) me->set("qi", 10);
while( environment(me)->is_character() )
me->move(environment(environment(me)));
if(me->query("gender")=="男性")
{
message_vision(HIY "$N醒了过来,似乎还沉浸在幸福之中。\n" NOR,me);
me->set_temp("block_msg/all", 0);
write("你醒了过来,似乎还沉浸在幸福之中。\n");
return 1;
}
else
{
// add bearing function here.
message_vision(HIY "$N醒了过来,脸上还挂着甜蜜的笑容。\n" NOR,me);
me->set_leader(0);
me->set_temp("block_msg/all", 0);
write("你醒了过来,脸上还挂着甜蜜的笑容。\n");
obj=slept;
if((int)(me->query("mud_age")/86400) < 6 || (int)(me->query("mud_age")/864000) < me->query("child"))
return 1;
if (obj!=slept )
{
if (!obj || !userp(obj) || !find_player(obj->query("id")))
{
message_vision(HIY "\n$N似乎觉得腹中一阵颤痛,旋即咬咬牙,弯着腰站了起来。\n"NOR, me);
write("\n丈夫都不在,怎么也不能把孩子生下来...\n");
}
else
{
message_vision(HIY "\n$N似乎觉得腹中一阵颤痛,旋即羞红着脸,咬咬牙站了起来。\n"NOR, me);
write("\n怎么会让他撞上了?...\n");
}
me->set("neili", me->query("neili")/2);
me->set("qi", me->query("qi")/2);
me->set("jing", me->query("jing")/2);
return 2;
}
else
{
if((int)(me->query("mud_age")/86400) < 6 || (int)(me->query("mud_age")/864000) < me->query("child"))
{
message_vision(HIY "\n$N忽觉腹中一阵颤动,不过马上又平静下来。\n"NOR,me);
return 1;
}
me->set_temp("is_bearing",1);
me->start(100);
obj->start(100);
if(me->query("gender")=="女性" && random(3)==1)
{
me->set("fuqi/father",obj->query("id"));
message_vision(HIY "\n$N忽觉腹中一阵颤动,赶紧拉住$n的手,柔声说道:要生了! \n" NOR, me,obj);
message("shout", HIR "【家有喜事】:"HIM"恭喜 "HIY""+ me->query("name") +"(" + me->query("id") +")"HIM"与"HIY""+ obj->query("name") +"(" + obj->query("id") +")"HIM"做了准父母。\n" NOR,users());
message_vision(HIY "\n$N突然觉得一阵做呕,旋即羞红着脸,咬咬牙想起了那个该死的。\n"NOR, me);
message_vision(HIM "\n$N怀孕了。赶快通知孩子的爸爸"+ me->query("fuqi/father") +"啊?...\n"NOR, me);
me->apply_condition("huaiyun",1200);
me->set("long", HIY "\n"+ obj->query("name") +""NOR"挺着个大肚子,一看就知道是怀孕了,混身散发出一股慈祥的母爱。\n"NOR);
me->set("makeloved",1);
obj->set("makeloved",1);
}
return 3;
}
}
}
int birth1(object me,object obj)
{
message_vision(HIY "\n$N已是大汗淋漓,一直都在呼天抢地,双手紧紧扣住$n的手不放。\n"+
"\n婴儿已经探出了头...\n"NOR,me,obj);
call_out("birth2",15,me,obj);
return 1;
}
void birth2(object me,object obj)
{
object baby;
int number;
message_vision(HIY "\n「哇」...,婴儿出世了!\n"+
"\n$N面色苍白,斜倚在床头,看看孩子满意地露出一丝微笑。\n"NOR, me);
me->set_leader(0);
me->start_busy(1);
obj->start_busy(1);
me->set("neili",0);
me->set("qi",0);
me->set("jing",0);
baby=new("/d/taohuacun/npc/baby");
baby->set("long", baby->query("long")+"这是"+obj->query("name")+"和"+me->query("name")+"的孩子。\n");
if (random(100)<50)
{
baby->set("gender","男性");
baby->set_name("小"+obj->query("name"),({"xiao "+obj->query("id"),"baby"}));
}
else
{
baby->set("gender","女性");
baby->set_name("小"+me->query("name"),({"xiao "+me->query("id"),"baby"}));
}
me->add("child",1);
obj->add("child",1);
baby->set("parents",({me->query("id"),obj->query("id")}));
number=me->query("child");
me->set("child_"+number+"/gender",baby->query("gender"));
me->set("child_"+number+"/long",baby->query("long"));
me->set("child_"+number+"/name",baby->query("name"));
me->set("child_"+number+"/id",({baby->query("id"),"baby"}));
me->set("child_"+number+"/parents",baby->query("parents"));
number=obj->query("child");
obj->set("child_"+number+"/gender",baby->query("gender"));
obj->set("child_"+number+"/long",baby->query("long"));
obj->set("child_"+number+"/name",baby->query("name"));
obj->set("child_"+number+"/id",({baby->query("id"),"baby"}));
obj->set("child_"+number+"/parents",baby->query("parents"));
me->delete_temp("is_bearing");
me->save();
obj->save();
//this needs to be put at the last since
//can only move the baby after it's parameters are set.
if(!baby->move(environment(me)))
baby->move(environment(environment(me)));
}
void del_sleeped(object me)
{
if (objectp(me) && me->query_temp("sleeped"))
me->delete_temp("sleeped");
}
int help(object me)
{
write(@HELP
指令格式 : sleep <人物>
顾名思义,这个指令是用来睡觉的。
HELP
);
return 1;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?