⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exercise.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
字号:
// exercise.c
// snowman 15,12,98

#include <skill.h>

int exercising(object me);
int halt_exercise(object me);

int main(object me, string arg)
{
	string force;
	mapping msg;
	int exercise_cost, max;
	object where;

	max = (int)me->query("max_neili");
	seteuid(getuid());
	where = environment(me);
	
	if (where->query("pigging"))
		return notify_fail("你还是专心拱猪吧!\n");

	if (me->is_busy())
		return notify_fail("你现在正忙着呢。\n");
    if (me->is_exert()) return notify_fail("你正在使用"+me->query_exert()+"。\n");

	if( me->is_fighting() )
		return notify_fail("战斗中不能练内功,会走火入魔。\n");
	if( (int)me->query("qi") < 30 )
		return notify_fail("你现在气不够!\n");

	if( (int)me->query("jing") < 30 )
		return notify_fail("你现在精不够!\n");

    if (me->is_exert()) return notify_fail("你正在使用"+me->query_exert()+"。\n");
	if (where->query("sleep_room"))
		return notify_fail("卧室不能打坐,会影响别人休息。\n");

        if (where->query("no_fight"))
                return notify_fail("这里不准战斗,也不准打坐。\n");

        if( !(force = me->query_skill_mapped("force")) )
		return notify_fail("你必须先用 enable 选择你要用的特殊内功。\n");

	if( !arg || !sscanf(arg, "%d", exercise_cost))
		return notify_fail("你要花多少气练功?\n");
	if (exercise_cost < 10)
		return notify_fail("你无法控制内息运行到如此精细的程度!\n");

	if( (int)me->query("qi") < exercise_cost )
		return notify_fail("你没有那么多的气来产生内息运行全身经脉。\n");

	if( (int)me->query("jing") * 100 / (int)me->query("max_jing") < 70 )
		return notify_fail("你现在精不够,无法控制内息的流动!\n");

	me->receive_damage("qi", exercise_cost);
	msg = SKILL_D(force)->exercise_msg(me);
	if (!msg || undefinedp(msg["start_my_msg"]))
		write("你坐下来运气用功,一股内息开始在体内流动。\n");
	else
		write(msg["start_my_msg"]);

	me->set_temp("pending/exercise", 1);
	me->set_temp("exercise_cost", exercise_cost);
	if (!msg || undefinedp(msg["start_other_msg"]))
		tell_room(environment(me),
			me->name() + "盘膝坐下,开始运功打坐。\n", ({ me }));
	else
		tell_room(environment(me),
			msg["start_other_msg"], ({ me }));
	me->start_busy((: exercising :), (:halt_exercise:));
	return 1;
}

int exercising(object me)
{
	string force;
	mapping msg;
	int exercise_cost = (int)me->query_temp("exercise_cost");
	int neili_gain = 1 + (int)me->query_skill("force") / 15
		* (1 + (int)me->query_skill("force") / 100);    // changed by pishou

//	int exercise_cost = (int)me->query_temp("exercise_cost");
//        int neili_gain = 1 + (int)me->query_skill("force") / 10;
//        int max = (me->query_skill("force") * me->query("con")*2/3) + (me->query_skill("beiming-shengong", 1)*20);
//if players wanna get max_neili after force*10, the only way is drugs, quests and age :)
// yes, add some max_neili each year they grow up :)
// yuj please fix it if i made any mistake :)

        int max = me->query_skill("force")*10 + me->query("combat_exp")/1000;

        if (exercise_cost<0) neili_gain = neili_gain + exercise_cost;
//	if (neili_gain > exercise_cost) neili_gain = exercise_cost;
        if (exercise_cost < 1)
                return 0;

//	me->receive_damage("qi", neili_gain);
	me->add("neili", neili_gain);
	me->set_temp("exercise_cost", exercise_cost -= neili_gain);

	force = me->query_skill_mapped("force");
	if (force) msg = SKILL_D(force)->exercise_msg(me);
	if (exercise_cost > 0) {
		if (msg && !undefinedp(msg["exec_my_msg"]))
			tell_object(me, msg["exec_my_msg"]);
		if (!random(3) && msg && !undefinedp(msg["exec_other_msg"]))
			tell_room(environment(me), msg["exec_other_msg"], ({me}));
		return 1;
	}

	me->delete_temp("pending/exercise");
	if (!msg || undefinedp(msg["end_my_msg"]))
		tell_object(me, "你运功完毕,站了起来。\n");
	else
		tell_object(me, msg["end_my_msg"]);
	if (!msg || undefinedp(msg["end_other_msg"]))
		tell_room(environment(me),
			me->name()+"运功完毕,站了起来。\n", ({me}));
	else
		tell_room(environment(me),
			msg["end_other_msg"], ({me}));

	if (me->query("neili") < me->query("max_neili") * 2)
		return 0;
	if (me->query("max_neili") >= max){
		tell_object(me, "你的内力修为已经无法靠打坐来提升了。\n");
		me->set("neili", me->query("max_neili") * 2);
		return 0;
	        }
	me->set("neili", me->add("max_neili", 1));
	tell_object(me, "你的内力修为增加了!\n");
	return 0;
}

int halt_exercise(object me)
{
	string force;
	mapping msg;

	if (me->query("neili") > me->query("max_neili") * 2)
		me->set("neili", me->query("max_neili") * 2);
	me->delete_temp("pending/exercise");
	force = me->query_skill_mapped("force");
	if (force) msg = SKILL_D(force)->exercise_msg(me);
	if (!msg || undefinedp(msg["halt_msg"]))
		message_vision(
			"$N把正在运行的真气强行压回丹田,站了起来。\n", me);
	else
		message_vision(msg["halt_msg"], me);
	return 1;
}

int help(object me)
{
	write(@HELP
指令格式 : exercise|dazuo [<耗费「气」的量> 必须不少于 10]

运气练功,控制体内的气在各经脉间流动,藉以训练人体肌肉骨骼的耐
力、爆发力,并且用内力的形式将能量储备下来。
HELP
        );
        return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -