looksj.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 547 行 · 第 1/2 页
C
547 行
// look.c
#include <room.h>
#include <ansi.h>
#include <combat.h>
inherit F_CLEAN_UP;
int look_room(object me, object env, int night);
int look_item(object me, object obj);
int look_living(object me, object obj);
int look_room_item(object me, string arg);
string getper(object obj);
string tough_level(int power, int hide_level);
string gettof(object obj);
string getdam(object obj);
string getatt(object obj);
string getdef(object obj);
string getdog(object obj);
void create() { seteuid(getuid()); }
int main(object me, string arg)
{
object obj;
int result;
if (me)
return notify_fail("这个指令只能由系统执行。\n");
if( !arg ) result = look_room(me, environment(me), NATURE_D->is_night());
else if( (obj = present(arg, me)) || (obj = present(arg, environment(me)))) {
if( obj->is_character() ) result = look_living(me, obj);
else result = look_item(me, obj);
} else result = look_room_item(me, arg);
return result;
}
int look_room(object me, object env, int night)
{
int i;
object *inv;
mapping exits;
string str, *dirs;
if( !env ) {
write("你的四周灰蒙蒙地一片,什么也没有。\n");
return 1;
}
str = env->query("long");
// night ^_^ , added by snowman@SJ
if(env->query("no_light")
&& !env->query_night_light()
&& random(me->query_con()) < 35){
if(env->query("night_long")) str = env->query("night_long");
else str = "这里一片漆黑,你虽然睁大了眼睛仔细观看,可还是看不清楚周围的\n"+
"事物。一切都被笼罩在黑暗之中,伸手不见五指... \n";
}
else if(env->query("outdoors") && night
&& !env->query_night_light()
&& random(me->query_con()) < 35){
if(env->query("night_long")) str = env->query("night_long");
else str = "夜晚了,你虽然睁大了眼睛仔细观看,可还是看不清楚周围的事物。\n"+
"一切都被夜色所笼罩,连脚下的道路都模糊不清了... \n";
}
str = sprintf( "%s - %s\n %s%s",
env->query("short"),
wizardp(me)? file_name(env): "",
str,
env->query("outdoors")? NATURE_D->outdoor_room_description() : "" );
if( mapp(exits = env->query("exits")) ) {
dirs = sort_array(keys(exits), 1);
for(i=0; i<sizeof(dirs); i++)
if( (int)env->query_door(dirs[i], "status") & DOOR_CLOSED )
dirs[i] = 0;
dirs -= ({ 0 });
if( sizeof(dirs)==0 )
str += " 这里没有任何明显的出路。\n";
// night ^_^ , added by snowman@SJ
else if((env->query("outdoors") || env->query("no_light"))
&& night && !env->query_night_light()
&& random(me->query_con()) < 35){
i = random(sizeof(dirs));
if( random(me->query_con()) < 10) i = 0;
else if( random(me->query_con()) < 20) i = 1;
if( i <= 0 )
str += " 这里看不见任何明显的出路。\n";
else if( i == 1 )
str += " 这里看得见的唯一出口是 " + BOLD + dirs[i-1] + NOR + "。\n";
else str += sprintf(" 这里看得清的出口是 " + BOLD + "%s" + NOR + "。\n", implode(dirs[1..i], "、"));
}
// hehehe.....
else if( sizeof(dirs)==1 )
str += " 这里唯一的出口是 " + BOLD + dirs[0] + NOR + "。\n";
else str += sprintf(" 这里明显的出口是 " + BOLD + "%s" + NOR + " 和 " + BOLD + "%s" + NOR + "。\n",
implode(dirs[0..sizeof(dirs)-2], "、"), dirs[sizeof(dirs)-1]);
}
// str += env->door_description();
inv = all_inventory(env);
for(i=0; i<sizeof(inv); i++) {
if( inv[i]==me ) continue;
if( !me->visible(inv[i]) ) continue;
// night.
if((env->query("outdoors") || env->query("no_light"))
&& night
&& !env->query_night_light()
&& random(me->query_con()) < 35
&& !inv[i]->is_character()) continue;
// hehehehehehe.....
str += " " + inv[i]->short() + "\n";
}
write(str);
return 1;
}
int look_item(object me, object obj)
{
mixed *inv;
string prep;
write(obj->long());
inv = all_inventory(obj);
if( !obj->is_closed() && sizeof(inv)) {
switch( (string)obj->query("prep") ) {
case "on":
prep = "上";
break;
case "under":
prep = "下";
break;
case "behind":
prep = "后";
break;
case "inside":
prep = "里";
break;
default:
prep = "里";
break;
}
inv = map_array(inv, "inventory_look", this_object() );
message("vision", sprintf("%s面有:\n %s\n", prep,
implode(inv, "\n ") ), me);
}
return 1;
}
string getper(object obj)
{
int per, age;
string str;
per = obj->query_per();
age = obj->query("age");
if ((string) obj->query("gender") == "女性"){
if (per >= 40) str = "超凡脱俗,娇艳绝伦,貌如西子胜三分!\n";
else if (per >= 37){
if(obj->max_food_capacity() > 320)
str = "驻唇不涂一点红,回眸一笑百媚生!\n";
else str = "清丽绝俗,冰清玉洁,有如画中天仙!\n";
}
else if (per >= 33){
if(obj->max_food_capacity() > 320)
str = "容貌丰美,气质高雅,堪称人间仙子!\n";
else str = "容貌娇美,姣花照水,堪称人间仙子!\n";
}
else if (per >= 30){
if(obj->max_food_capacity() > 320)
str = "脸若银盆,眼如水杏,相貌绝美!\n";
else str = "美奂绝伦,一笑倾城,再笑倾国!\n";
}
else if (per >= 27) str = "羞花闭月,宛若天仙!\n";
else if (per >= 24) str = "花颜月貌,柔媚娇俏!\n";
else if (per >= 20) str = "楚楚动人,有几分姿色!\n";
else if (per >= 17) str = "相貌平庸,很是一般。\n";
else if (per >= 14) str = "五官挪位,貌似无盐。\n";
else str = "一塌糊涂,不是人样!\n";
} else {
if (per >= 40) str = "英姿勃发,一表人才,称为古往今来第一人!\n";
else if (per >= 37) str = "玉树临风,风流倜傥,堪称绝世美男!\n";
else if (per >= 33) str = "清秀俊雅,相貌非凡,真是人中龙凤!\n";
else if (per >= 30){
if(obj->max_food_capacity() < 160)
str = "貌似美女,脸若冠玉,弱不禁风!\n";
else str = "貌似潘安,容比宋玉,仪表堂堂!\n";
}
else if (per >= 27) str = "相貌出众,堪称美男!\n";
else if (per >= 24) str = "英俊潇洒,气质非凡。\n";
else if (per >= 20) str = "五官端正,相貌平平。\n";
else if (per >= 17) str = "五官不正,满脸麻子。\n";
else if (per >= 14) str = "牛眼驴唇,面目狰狞。\n";
else str = "有如雷公下凡,八戒返魂!\n";
}
return "长得" + str;
}
string gettof(object ob)
{
object weapon;
string skill_type;
int attack_points, hide_level;
mapping prepare;
if( objectp(weapon = ob->query_temp("weapon")) )
{
skill_type = weapon->query("skill_type");
}
else
{
prepare = ob->query_skill_prepare();
if (!sizeof(prepare)) skill_type = "unarmed";
else skill_type = keys(prepare)[0];
}
attack_points = COMBAT_D->skill_power(ob, skill_type, SKILL_USAGE_ATTACK);
if( intp(hide_level = ob->query_temp("hide_level")) && hide_level > 0)
return tough_level(attack_points/100, hide_level);
return tough_level(attack_points/100, 0);
}
string getatt(object ob)
{
object weapon;
string skill_type;
int attack_points, hide_level;
mapping prepare;
if( objectp(weapon = ob->query_temp("weapon")) )
{
skill_type = weapon->query("skill_type");
}
else
{
prepare = ob->query_skill_prepare();
if (!sizeof(prepare)) skill_type = "unarmed";
else skill_type = keys(prepare)[0];
}
attack_points = COMBAT_D->skill_power(ob, skill_type, SKILL_USAGE_ATTACK);
if( intp(hide_level = ob->query_temp("hide_level")) && hide_level > 0)
return tough_level(attack_points/100, hide_level);
return tough_level(attack_points/100, 0);
}
string getdef(object ob)
{
object weapon;
string skill_type;
int attack_points, hide_level;
mapping prepare;
if( objectp(weapon = ob->query_temp("weapon")) )
{
skill_type = weapon->query("skill_type");
}
else
{
prepare = ob->query_skill_prepare();
if (!sizeof(prepare)) skill_type = "unarmed";
else skill_type = keys(prepare)[0];
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?