【mud】xyj450巫师搭建场景实战

修改前下载https://download.csdn.net/download/viviliving/11632564

修改后下载https://download.csdn.net/download/viviliving/11632536

大学时看到大家玩mud,感觉很奇怪,

怎么那个多人对着满屏字母津津有味呢?

mud现在玩的人很少了,大量的字符交互太累,没有几个人能耐心的敲字母了。

以前看了mud编程,感觉很复杂,一堆东西,看完了也没弄出个一二三四

最近看了个帖子灵感一来,在xyj450的基础上改了改,

把原来的长安场景屏蔽掉,只留一个小小的长安乐坊,屏蔽其他出口,新增一些房间,然后把房间之间连接起来

大家参考玩一玩,学习一下,希望看着这些lpc源代码,能自己写一些新的场景和文字小游戏内嵌到长安乐坊里

修改登录后

                               X   X    X              X          X

   ●○●○●○●○●○●○●○●○●○●○●○●○●X   XXXXXXXX
   ○                       ○XX       XX
   ●         西 游 记         ●X        XX
   ○                       ○ X       XX
   ● A Journey to the West ●XXX      XX
   ○                       ○XX  XXXXXXX
   ●○●○●○●○●○●○●○●○●○●○●○●○●XX  XX   X
       XX  XX XX  XX             X X XX  X              XX  XX
          西游记巫师协会版权所有X             XX  XX
    Version 2.01 Copyright 1996-1998 by XYJ Wiz GroupXX  XX
       XXX        XX           XX  X XX  XX             XX XXX
        天籁妙,山水雅,醉露为酒玉为花。        XXX XX     X
        若人问我归何处,彩云深处是我家。       XXX  XX     X
       XX         XX           XX X XXX XXX             X   XXXXXXXXX
     有任何意见,请 email 给 darky(liux@fengyun.hit.edu.cn) XXX
       网页地址: http://www.xiyouji.org
             http://www.nease.net/~xiyoujib
       玩家之窗: http://129.7.2.109:6969      

          总站地址:xiyouji.org 6666se try Ctrl-RETURN]
       [提示:如果按RETURN键后系统没有响应,请试 Ctrl-RETURN]
     ★【西游记】总 站:209.83.132.67   6666★
     ★【西游记】大连站:202.118.66.15   6666★/big5):
     ★【西游记】北京站:168.160.225.39  6666★
     ★【西游记】珠海站:202.96.132.48   6666★
     ★【西游记】厦门站:202.101.106.246 6666★
     ★【西游记】杭州站:202.96.102.6    6666★
     ★【西游记】哈尔滨:202.118.226.88  6666★


西游记已经运行了十五秒。

目前共有1位玩家在线上。本站共有0位巫师、0位玩家,以及1位在尝试连线。

鉴于学生的主要任务是学习,本游戏不欢迎中小学生来玩。
您是否是中小学学生或年龄更小?(yes/no)
您的英文名字:(新玩家请选择一个您喜欢的名字)这个名字已经被注册,请输入相应密码:
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
你发现事情不大对了,但是又说不上来。
目前权限:(player)


***  help 也许对你很有用。

***  注意:
为维护和发展本游戏,巫师有时需要监听玩家。所以希望
不要在游戏中谈论不想被别人知道的私事,以免出现尴尬
局面。

你发现事情不大对了,但是又说不上来。
长安乐坊 -

    这里是长安城一家有名的娱乐场所。
        当夜幕降临后,  这里就格外热闹。
    进进出出的客人有达官贵人,南来北往的商旅,浪迹天涯的游子,三五成群的兵士,有时也能看见一些作俗客打扮的僧人或道士。
    ==============================
    二楼:色子
    三楼:竹签
    四楼:龟房
    五楼:斗鸡
    六楼:大小点
    七楼:诗社
    八楼:拱猪
    ==============================

    这里唯一的出口是 up。
  南城客栈留言板(Board) [ 没有任何留言 ]
  大木桌(Table)
  鹅绒靠背躺椅(Chair)
  鹅绒扶手躺椅(Chair)
>
> > 二楼:乐府骰点 -

    乐坊楼上显得格外热闹,
        走廊里人来人往,
        几间屋子里人声嘈杂,
        骨骰钱币落盘的声音不绝。
        看样子,客人们赌得正欢呢。

    这里明显的出口是 down、west 和 up。
  青漆兽脚案(Table)
  小镶玉桌(Table)
  圆兽脚案(Table)
> 三楼:乐府摇签 -

    乐坊楼上显得格外热闹,
        走廊里人来人往,
        几间屋子里人声嘈杂,
        竹签落地的声音不绝。
        看样子,客人们赌得正欢呢。
    这里明显的出口是 down、east 和 up。
  紫漆仙桌(Table)
  圆木桌(Table)
  大镶玉桌(Table)
> 四楼:乐府龟兔赛跑 -

    乐坊楼上显得格外热闹,
        走廊里人来人往,
        几间屋子里人声嘈杂,
        龟龟加油喝彩的声音不绝。
        看样子,客人们赌得正欢呢。
    这里明显的出口是 down、north 和 up。
  黑镶玉案(Table)
  小木案(Table)
  黑镶玉桌(Table)
> 五楼:乐府斗鸡 -

    乐坊楼上显得格外热闹,
        走廊里人来人往,
        几间屋子里人声嘈杂,
        斗鸡的声音不绝。
        看样子,客人们赌得正欢呢。
    这里明显的出口是 down、south 和 up。
  大镶玉桌(Table)
  大兽脚桌(Table)
  青漆镶玉桌(Table)
> 六楼:乐府大小点 -

    乐坊楼上显得格外热闹,
        走廊里人来人往,
        几间屋子里人声嘈杂,
        斗鸡的声音不绝。
        看样子,客人们赌得正欢呢。
    这里明显的出口是 down、west 和 up。
  圆木案(Table)
  圆木案(Table)
  黑镶玉案(Table)
> 酸秀才高声朗读道:

    杜甫:阁夜

    岁暮阴阳催短景  天涯霜雪霁寒霄
    五更鼓角声悲壮  三峡星河影动摇
    野哭千家闻战伐  夷歌数处起渔樵
    卧龙跃马终黄土  人事音书漫寂寥


七楼:乐府诗社 -

                高楼之上,
                满城繁华尽收眼底。
                文人骚客都喜欢在这里品茶吟诗,          谈古论今,
                你瞧,不知谁在茶桌上刚刚写好一首诗(poem)。
                里边柜台上新贴了张启事(qishi),你不由得走过去看了几眼。

    这里明显的出口是 up 和 down。
  茶博士(Cha boshi)
  酸秀才(Suan xiucai)
  白漆仙桌(Table)
> 八楼:乐府红心大战 -

        这是一间宽敞明亮的大厅,
        厅的正中间是一根圆形的柱子。
        柱子上贴满了各种广告:有换房的,有卖家具的,
        但其中最多的还是找打牌搭档的广告。
        厅的东南西北各有个门,
        里面传出“拱啊!”“毙了!” 等的叫声。
    这里明显的出口是 north 和 down。
  柱子(Zhuzi) [ 没有任何留言 ]
>

修改代码思路如下:

源代码部分

kezhan.c

//changan city

inherit ROOM;

void create ()
{
        set ("short", "长安乐坊");
        set ("long", @LONG

    这里是长安城一家有名的娱乐场所。
	当夜幕降临后,	这里就格外热闹。
    进进出出的客人有达官贵人,南来北往的商旅,浪迹天涯的游子,三五成群的兵士,有时也能看见一些作俗客打扮的僧人或道士。
    ==============================
    二楼:色子
    三楼:竹签
    四楼:龟房
    五楼:斗鸡
    六楼:大小点
    七楼:诗社
    八楼:拱猪
    ==============================
    
LONG);

        //set("item_desc", ([" *** " : " *** ", ]));

        set("exits", 
        ([ //sizeof() == 4
                "up" : __DIR__"clubup1",
                //"east" : __DIR__"xuanwu-n2",
        ]));

        set("objects", 
        ([ //sizeof() == 1
//                __DIR__"npc/libai" : 1,
                "/d/obj/misc/tables" : 1,
                "/d/obj/misc/chairs" : 2,
        ]));


//        set("outdoors", "changan");
	set("no_clean_up", 0);
        setup();
        call_other("/obj/board/nancheng_b", "???");
	replace_program(ROOM);
}

club.c

//changan city

inherit ROOM;

void create ()
{
        set ("short", "长安乐坊");
        set ("long", @LONG

    这里是长安城一家有名的娱乐场所。
	当夜幕降临后,	这里就格外热闹。
    进进出出的客人有达官贵人,南来北往的商旅,浪迹天涯的游子,三五成群的兵士,有时也能看见一些作俗客打扮的僧人或道士。
    ==============================
    二楼:色子
    三楼:竹签
    四楼:龟房
    五楼:斗鸡
    六楼:大小点
    七楼:诗社
    八楼:拱猪
    ==============================
LONG);

        //set("item_desc", ([" *** " : " *** ", ]));

        set("exits", 
        ([ //sizeof() == 4
                "up" : __DIR__"clubup1",
                //"east" : __DIR__"xuanwu-n2",
        ]));

        set("objects", 
        ([ //sizeof() == 1
//                __DIR__"npc/libai" : 1,
                "/d/obj/misc/tables" : 1,
                "/d/obj/misc/chairs" : 2,
        ]));


//        set("outdoors", "changan");
	set("no_clean_up", 0);
        setup();
  call_other("/obj/board/nancheng_b", "???");
	replace_program(ROOM);
}

clubup1.c

//changan city

inherit ROOM;

void create ()
{
        set ("short", "二楼:乐府骰点");
        set ("long", @LONG

    乐坊楼上显得格外热闹,
	走廊里人来人往,
	几间屋子里人声嘈杂,
	骨骰钱币落盘的声音不绝。
	看样子,客人们赌得正欢呢。
		
LONG);

        //set("item_desc", ([" *** " : " *** ", ]));

        set("exits", 
        ([ //sizeof() == 4
              //  "up" : __DIR__"clubpoem",
                	  "up" : __DIR__"clubup2",
    		"west" : __DIR__"duchang1",
    	//	"east" : __DIR__"duchang2",
    	//	"north" : __DIR__"duchang3",
    	//	"south" : __DIR__"duchang4",
    		"down" : __DIR__"club",
        ]));

        set("objects", 
        ([ //sizeof() == 1
//                __DIR__"npc/libai" : 1,
                "/d/obj/misc/tables" : 3,
        ]));


//        set("outdoors", "changan");
	set("no_clean_up", 0);
        setup();
	replace_program(ROOM);
}

clubup2.c

//changan city

inherit ROOM;

void create ()
{
        set ("short", "三楼:乐府摇签");
        set ("long", @LONG

    乐坊楼上显得格外热闹,
	走廊里人来人往,
	几间屋子里人声嘈杂,
	竹签落地的声音不绝。
	看样子,客人们赌得正欢呢。
LONG);

        //set("item_desc", ([" *** " : " *** ", ]));

        set("exits", 
        ([ //sizeof() == 4
              //  "up" : __DIR__"clubpoem",
                	  "up" : __DIR__"clubup3",
    	//	"west" : __DIR__"duchang1",
    		"east" : __DIR__"duchang2",
    	//	"north" : __DIR__"duchang3",
    	//	"south" : __DIR__"duchang4",
    		"down" : __DIR__"clubup1",
        ]));

        set("objects", 
        ([ //sizeof() == 1
//                __DIR__"npc/libai" : 1,
                "/d/obj/misc/tables" : 3,
        ]));


//        set("outdoors", "changan");
	set("no_clean_up", 0);
        setup();
	replace_program(ROOM);
}

clubup5.c

//changan city

inherit ROOM;

void create ()
{
        set ("short", "六楼:乐府大小点");
        set ("long", @LONG

    乐坊楼上显得格外热闹,
	走廊里人来人往,
	几间屋子里人声嘈杂,
	斗鸡的声音不绝。
	看样子,客人们赌得正欢呢。
LONG);

        //set("item_desc", ([" *** " : " *** ", ]));

        set("exits", 
        ([ //sizeof() == 4
              //  "up" : __DIR__"clubpoem",
                	  "up" : __DIR__"clubpoem",
    	"west" : __DIR__"shaizi-room",
    	//	"east" : __DIR__"duchang2",
    	//	"north" : __DIR__"duchang3",
    //	"south" : __DIR__"duchang4",
    		"down" : __DIR__"clubup4",
        ]));

        set("objects", 
        ([ //sizeof() == 1
//                __DIR__"npc/libai" : 1,
                "/d/obj/misc/tables" : 3,
        ]));


//        set("outdoors", "changan");
	set("no_clean_up", 0);
        setup();
	replace_program(ROOM);
}

clubpoem.c

// Room: /u/mon/poem/clubpoem by mon@xyj 7/25/97
inherit ROOM;
#include <ansi.h>;

int POEMS=319;

string author,title,*poem;
string author1,title1,*poem1;
int length,length1,running;
string current,current_all,last,last_all;
string curr_show;
int index,chance;
int poem_index,answerd,ans_curr,ans_last;

void new_poem();
void copy_to_old();
void do_test();
void do_init(object me);
void poem_reward(object me,string arg);
void poem_reward1(object me);
void poem_penalty(object me);
int find_newline();
string mixup(string str);
string enscript(string arg);


void create ()
{
  set ("short", "七楼:乐府诗社");
  set ("long", @LONG

		高楼之上,
		满城繁华尽收眼底。
		文人骚客都喜欢在这里品茶吟诗,		谈古论今,
		你瞧,不知谁在茶桌上刚刚写好一首诗(poem)。
		里边柜台上新贴了张启事(qishi),你不由得走过去看了几眼。

LONG);

  set("exits", ([ /* sizeof() == 1 */
  "down" : __DIR__"clubup5",
  //"west" : __DIR__"shaizi-room",
  //"east" : __DIR__"puke-room",
  "up": __DIR__"club3",
]));

  set("objects", ([
    __DIR__"npc/teawaiter": 1,
    __DIR__"npc/suanxiucai": 1,
    //__DIR__"npc/gongsun": 1,
    "/d/obj/misc/tables" : 1,
  ]));

  setup();

  remove_call_out("do_test");
  poem_index=1;
  running=0;

}

void init()
{   
     add_action("do_answer","answer");
     add_action("do_look","look");
     
     call_out("do_init",1,this_player());

     if(running==0) {
       running=1;
       new_poem();
       copy_to_old();
       new_poem();
       call_out("do_test",2);
     }
}

void do_init(object me)
{ 
    return;
}

int do_answer(string arg)
{ 
    object me=this_player(),ob;

    if(!arg) return notify_fail("回答什么?\n");
    
    if(me->is_busy())
      return notify_fail("你上一个动作还没有完成。\n");

    if( living(me) ) me->receive_damage("sen",5+random(15));

    if(objectp(ob=present("cha boshi",this_object()))
       && living(ob)) {
    switch(random(2)) {
     case 0: message_vision("$N说道:是..."+arg+"?\n",me);
             break;
     case 1: message_vision("$N答道:"+arg+"?\n",me);
             break;
    }
    arg=replace_string(arg," ","");
    arg=replace_string(arg,",","");
    arg=replace_string(arg,",","");
    if(arg==current&&strlen(current)>2) {
      if(ans_curr==1) {
       write("别人已经回答过这句诗了。\n");
       return 1;
      }
      ans_curr=1;
      
      //change to a new poem once this one is answered.
      index=length-1;

      me->set_temp("poem/index",poem_index);
      poem_reward(me,current_all);
    } else if(arg==last&&strlen(last)>2) {
      if(ans_last==1) {
       write("别人已经回答过这句诗了。\n");
       return 1;
      }
      ans_last=1;
      poem_reward(me,last_all);
    } else {
      message_vision("茶博士摇了摇头:好象不对吧?\n",me);
      me->add_temp("poem/wrong",1);
      if(me->query_temp("poem/wrong")>10) poem_penalty(me);
    }
    } else {
      write("现在没有人裁判对错了... :(\n");
    }
    return 1;
}

void poem_penalty(object me)
{
    me->set("sen",-1);
    me->set_temp("poem/wrong",0);

    return;
}

void poem_reward(object me,string arg)
{
    me->set_temp("poem/wrong",0);
    message_vision("茶博士点头道:“"+arg+"”不错!不错!\n",me);
    poem_reward1(me);
}

void poem_reward1(object me)
{  
	int dx,pot,lite;
    switch(random(3)) {
     case 0: dx=4+random(6);
             me->add("combat_exp",dx);
	     write("你的道行增加了!\n");
	     break;
     case 1: pot=3+random(4);
	     if(me->query("potential")+pot-me->query("learned_points")<=100)
               me->add("potential",pot);
             write("你的潜能增加了!\n");
	     break;
     case 2: lite=4+random(6);
             me->improve_skill("literate",lite);
	     write("你的读书识字进步了!\n");
	     break;
    }
    me->add("poem_answered",1);
    dx=me->query("poem_answered");
}

void do_test()
{  
   int newt;
   object ob;
   string first,second,quest;

   if(objectp(ob=present("cha boshi",this_object()))
          && living(ob)) {
   if(strlen(current)>2&&ans_curr==0) {
     last=current;
     last_all=current_all;
     ans_last=0;
   }
   
   newt=0;
   while(newt==0) {
    if(!find_newline()) {
     copy_to_old();
     new_poem();
    } else {
      if(sscanf(poem[index],"%s  %s",first,second)==2 &&
       !sscanf(poem[index],"%*s[") && 
       !sscanf(poem[index],"%*s(") &&
       !sscanf(poem[index],"%*s□") ) {
         if(strlen(first)>2&&strlen(second)>2) {
	   newt=1;
         } 
      }
    }
   }

   first=replace_string(first," ","");
   second=replace_string(second," ","");
   current_all=first+"  "+second;
   ans_curr=0;

   if(strlen(first)>=14 && random(3)==0) {
     quest=first;
   } else if (strlen(second)>=14 && random(2)==0) {
     quest=second;
   } else {
     quest=first+second;
   }
     current=replace_string(quest,",","");  // the answer
     quest=mixup(quest);   // the question
     curr_show=quest;
     switch(random(1)) {
       case 0: 
         tell_room(this_object(),
	   "茶博士提笔在墙上写道:"+quest+"\n");
         break;
     }
   }

   call_out("do_test",60);
   return;
}

string mixup(string str)
{
   int len=strlen(str)/2,i,j,k,l;
   string ans;

   for(i=1;i<=random(2)+1;i++) {
     j=random(len);
     k=random(len);
     if(j==k) {
       k++;
       if(k>=len) k=0;
     }
     if(j>k) {
       l=k; k=j; j=l;
     } // so j<k
     j=j+j; k=k+k;
     if(j>0) ans=str[0..j-1]; 
     else ans="";
     ans+=str[k..k+1]+str[j+2..k-1]+str[j..j+1];
     if(k<len+len-2) ans+=str[k+2..len+len-1];
     str=ans;
   }
   return str;
}

int do_look(string arg)
{   int i;

    if(!arg) return 0;
 
    if(arg=="poem") {
     write("\n\n    "+author1+":"+title1+"\n");
     for (i=0;i<length1;i++) {
      write("    "+poem1[i]+"\n");
     }
     write("\n\n\n");
     write("当前题目:   "+curr_show+"\n\n");
     return 1;
    } else if(arg=="qishi") {
      write("\n"+@LONG
           本社新增猜诗游戏,由茶博士将一句诗词的若干字
       颠倒次序,写在墙上。能准确答出(answer)原句者为胜。

       例如:茶博士提笔在墙上写道:离离原上草一荣一枯岁
       你应该回答:answer 离离原上草一岁一枯荣
LONG);
      write("\n\n");
     return 1;
    } else return 0;

}

void copy_to_old()
{    int i;
     object ob;

     author1=author;
     title1=title;
     length1=length;
     poem1=({});
     last="";
     for (i=0;i<length;i++)
       poem1+=({poem[i]});

     if(objectp(ob=present("suan xiucai",this_object()))
       && random(2)==0 && living(ob)) {
       message_vision(({ob->name()+"摇头晃脑地吟诵道:",
        ob->name()+"高声朗读道:",
        ob->name()+"仿佛在自言自语:"})[random(3)]+"\n",ob);
       message_vision("\n    "+author1+":"+title1+"\n",ob);
       for (i=0;i<length1;i++) {
         message_vision("    "+poem1[i]+"\n",ob);
       }
       message_vision("\n\n",ob);
     }

     return;
}

void new_poem()
{   string filename,buf;
    int i,j,k;

    length=0;
    while (length==0) {
    while((k=(1+random(POEMS)))==poem_index);
    filename="/d/ourhome/honglou/poem/poem"+k;
    buf=read_file(filename,1,1);
    sscanf(buf,"%s:%s",author,title);
    i=0;
    j=0;
    poem=({});
    while(buf=read_file(filename,2+i,1)) {
      if(strlen(buf)>2) {
        buf=replace_string(buf,"\n","");
        poem+=({buf});
	j++;
      }
      i++;
    }
    length=j;
    }
    poem_index=k;
    answerd=0;
    index=-1;
    chance=3*100/(1+length);
    if(length<3) {
      chance=100;
    }
    return;
}

int find_newline()
{
   index++;
   while(index<length) {
     if(random(100)<chance) {
       return 1;
     } else index++;
   }
   return 0;
}

string enscript(string arg)
{    string result;
     string *color=({BLK,RED,GRN,YEL,BLU,MAG,CYN,WHT,
                     HIR,HIG,HIY,HIB,HBRED,HBGRN,HBYEL,
		     HBBLU,HBMAG,BBLK,BRED,BGRN});
     int len,i;

     len=sizeof(color);
     result="";
     i=sizeof(arg);
     while(i>2) {
       if(random(2)==0) {
         result=color[random(len)]+NOR+arg[i-2..i-1]+result;
       } else {
         result=arg[i-2..i-1]+result;
       }
       i-=2;
     }
     result=NOR+arg[0..1]+result;

     return result;
}

shaizi-room.c出口部分,与楼层对应

	set("exits", 
	([ //sizeof() == 4
		//"south" : __DIR__"xiaomuwu",
		//"north" : __DIR__"chufang",
		//"west" : __DIR__"duchang2",
		"east" : __DIR__"clubup5",
		//"up" : __DIR__"***",
		//"down" : __DIR__"***",
	]));

其他duchang1.c duchang2.c duchang3.c duchang4.c出口部分改成对应楼层,不然跑回老场景了,进外太空了

  set("exits", ([ /* sizeof() == 1 */
    "east" : __DIR__"clubup1",
  ]));

修改前后的mudxyj的压缩包再我的资源里都有,大家找找 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值