
// shidian.c 石殿 
// CODE BY SCATTER
// NEW WUDANG


inherit ROOM;
#include <room.h>
#include <ansi.h>
string look_shiliang();

void create()
{
        set("short", "石殿");
        set("long", @LONG
这是南岩上的石殿，就建在悬岩峭壁上，好象是镶嵌在千仞削壁之间。
石殿上接云天，下临绝涧，与南岩浑为一体，使人疑为神鬼斧神功。石殿绝
岩旁伸出一雕龙石梁（shiliang），翘首天柱峰。龙头上置小香炉，过去有
不少香客冒着生命危险上去烧香，俗称雕龙石梁为“龙头香”。
LONG
        );
        set("outdoors", "wudang");

        set("exits", ([
                "northdown" : __DIR__"nanyan",
        ]));
        
        set("item_desc", ([
                "shiliang" : "
放眼望去，只见石龙长近一丈，宽仅一尺，腾空欲飞。若轻功过人也可跃上一试
(jump shiliang)，但是石龙上似乎只能容身一人。\n",
        ]));

        set("cost", 6);
        setup();
}
void init()
{
        add_action("do_mianbi","面壁");
        add_action("do_mianbi","mianbi");
        add_action("do_jump", "jump");
}

int do_mianbi()
{

        object me, mengzhu, room, ob;
        int shen, ep, gain, shengain, pots, mylvl, myexp, myshen, npclvl, npcexp, npcshen, comexp, i;
        me = this_player();
        shen = me->query("shen");
        ep = me->query("combat_exp");


        if (me->query_temp("wudang/mianbib"))
                        return notify_fail("你刚面壁完，你不会头疼吗？\n等等再试一次吧！\n");

        if (me->is_busy() || me->query_temp("pending/exercising") || me->query_temp("exit_blocked"))
                return notify_fail("你现在正忙着呢。\n");

        if (me->query("jing") < 200 || me->query("jingli") < 200)
        return notify_fail("你觉得烦躁不安，难以聚精入定。\n");
        
        message_vision("$N面对着石梁跌坐静思，良久，似有所悟。\n", me);

        me->start_busy(8);
        me->set("jing",1);
        me->add("jingli", -200);

        if (shen > 100000 && shen > ep)
                {
                        gain = (200 + random((shen - ep) * 1000 / ep)) * 2;



                        if (me->query("family/family_name") != "武当派")
                                gain = gain/4;




                        me->add("combat_exp", gain);

            shengain = shen - ((shen - ep) / 2);    
            me->set("shen", shengain);
                        //pots = (gain * me->query_skill("taoism") / 80 + random(gain*me->query_skill("taoism")/60)) / 2;
                                                pots = (gain * 7 / 10) - random(60) + (me->query_skill("taoism") / 4);

                        if (me->query("family/family_name") == "武当派")
                                me->add("potential", pots);

                if ( me->query("potential") > me->query("max_potential") )
                {
                        me->set("potential", me->query("max_potential"));
                }



                log_file("/job/wudang_mianbi",me->query("name") + " (" + me->query("id") + ") 面壁获得 " + gain + " 点经验和 "+ pots + " 点浅能，和总共掉了 " + (shen - ep) / 2 +" 点正神"+ctime(time())+"\n");



    }
        
                else
                {
                        write("你的正神不够，你完全不能体会到任何东西！");
                }



				if(random(100) < 40)
				{

					myexp = me->query("combat_exp");
					myshen = me->query("shen");
					comexp = myexp * 10;
					for(i=0;comexp>i*i*i;i++)
						mylvl = i + 1;


					npclvl = mylvl * 8 / 10;
					npcexp = myexp + 5000;
					npcshen = myshen - myshen - myshen - (myshen / 2);


					ob=new("/kungfu/class/wudang/job_xx.c");

					ob->set("max_qi", 4000);
				ob->set("max_neili", 4000);
				ob->set("max_jingli", 4000);
				ob->set("max_jing", 4000);
	
				ob->set("wudang/id", me->query("id"));

				ob->set("combat_exp", npcexp);
				ob->set("shen", npcshen);
				ob->set_skill("force", npclvl);
		ob->set_skill("dodge", npclvl);
		ob->set_skill("parry", npclvl);
		ob->set_skill("sword", npclvl);
		ob->set_skill("cuff", npclvl);
		ob->set_skill("strike", npclvl);
		ob->set_skill("claw", npclvl);
		ob->set_skill("finger", npclvl);
		ob->set_skill("blade", npclvl);

		ob->set_skill("huoyan-dao", npclvl);
		ob->set_skill("jingang-chu", npclvl);
		ob->set_skill("liuhe-qiang", npclvl);
		ob->set_skill("longxiang-banruo", npclvl);
		ob->set_skill("mingwang-jian", npclvl);
		ob->set_skill("riyue-lun", npclvl);
		ob->set_skill("shenkongxing", npclvl);
		ob->set_skill("xue-dao", npclvl);

		ob->map_skill("blade", "xue-dao"); 
		ob->map_skill("force", "longxiang-banruo"); 
		ob->map_skill("parry", "huoyan-dao"); 
		ob->map_skill("strike", "huoyan-dao"); 
		ob->map_skill("dodge", "shenkongxing"); 

		ob->prepare_skill("strike", "huoyan-dao"); 

		ob->reincarnate();

					ob->move("/d/wudang/shidian");

					message_vision(HIR"突然从旁边跑出来一个邪派弟子！\n"NOR, me);
					message_vision(HIG"雪山弟子说到：臭道士！今天就是你的忌日了！拿命来！\n"NOR, me);


					ob->kill_ob(me);

				}






        me->add_temp("wudang/mianbib", 40);
                call_out("mianbi_busy", 1, me);
                return 1;
}

void mianbi_busy(object me)
{
        if(me->query_temp("wudang/mianbib") > 0)
        {
                me->add_temp("wudang/mianbib", -1);
                call_out("mianbi_busy", 1, me);
        }
        else
        {
                me->delete_temp("wudang/mianbib");
                return;
        }
}



int do_jump(string arg)
{
        object room;
        object me;
        int lv, cost;
        me=this_player();
        

        
        if (!arg || arg != "shiliang" ) return notify_fail("你要跳到哪里？\n");
        
        cost = (me->query_dex()*me->query_skill("dodge")/ me->query_con() )/10;
        if (cost < 10) cost= 10;
        if( me->query("jingli") < 30)
        return notify_fail("你已经精疲力竭了。\n");
        
        lv = me->query("int", 1)*2;
        if (me->query_skill("dodge") > 200) lv /=2;
        if (me->query_skill("dodge") > 300) lv /=3;
        if (me->query_skill("dodge") > 400) lv /=4;
        if (me->query_skill("dodge") > 500) lv /=5;
        
        if (me->query_skill("dodge", 1) < 20)
        return notify_fail("你轻功不够，此举动乃自杀无疑。\n");
        
        if (me->query_skill("dodge", 1) < 100 && random(150)==1)
        {
        me->add("jingli", -cost);
        message_vision("$N一个纵身飞向石梁，只见快跃上龙石梁时身子突然笔直的摔入深渊。\n", me);
        
        me->move(__DIR__"shijie1"); 
        tell_object(me,"你只觉得两耳生风，不断的往下坠，以被吓的不能自我。\n");
        message("vision", "只听得「砰」的一声巨响，" +me->name() 
                        +"撞在石阶上，摔得粉身碎骨，成了一团肉浆。\n", environment(me), me);
        me->set_temp("last_damage_from", "掉下龙石梁摔死了");
        me->receive_wound("qi", me->query("max_qi")+100);
        return 1;
        }
        if( !(room = find_object(__DIR__"long_shiliang")) )
        room = load_object(__DIR__"long_shiliang");
        
        if( room = find_object(__DIR__"long_shiliang") )
        if((int)room->query_temp("shiliang_trigger")==1 )
        {
        message_vision("$N一个纵身飞向石梁，身形甚是潇洒但猛然$N又飞了回来，满脸惊惶失措。", me) ;
        me -> move( __DIR__"long_shiliang");
        me -> move( __DIR__"shidian");
        me->add("jingli", -cost);  
        me->start_busy( 1 );
        me->improve_skill("dodge", lv+random(lv) );
        tell_object(me,"原来是你突然发现有个人影在龙石梁上，急中生智，空中\n"
                       "硬生生一个回身，飞了回来。");
       return 1 ;
    }
    room->set_temp("shiliang_trigger", 1);
    message_vision("$N当即施展轻功，一纵身跃上了石梁。\n", me );
    me->move(room) ;
    me->improve_skill("dodge", lv+random(lv) );
    me->add("jingli", -cost);  
    tell_object(me,"\n你提了一口真气，纵身跃上龙石梁，隐约觉得这一跃间自己的轻功有所进步。\n"  ) ;
    room->delete_temp("shiliang_trigger");
    me->start_busy( 1 );
    return 1 ;
}
