/*
Created by waiwai@2009/01/12 改制用于XYJ
在原XYJ文件的基础上,尽量不动原系统底层情况下进行。 当铺永远是低买高卖,这点应该体现。
将本文件CP至/std/room/目录下 然后在/include/globals.h中加入: #define HOCKSHOP_NEW
\
然后仅将长安和开封的当铺房间文件中的:inherit HOCKSHOP; 改为:inherit HOCKSHOP_NEW;
以下两点是必须修改(仅指修改为HOCKSHOP_NEW的当铺):
1、所有当铺老板文件顶部inherit NPC;
下面加入:int is_hock_boss() { return 1; }
2、在/std/room.c中,顶部的int query_max_items() {return 30;} 下面加入:int is_room() { return 1; }
以下几点可酌情修改:
1、所有动态名字的文件,文件顶部加入: int is_random_name() { return 1; } 如果具有no_sell或者无价值可以不加。
2、在/feature/food.c顶部void init() 上面加入:int is_food() { return 1; }
3、增加收购种类,可以比如单独在/d/city/dangpu.c中顶部的 void create () 上面加入:
int is_add_pawn_num() { return 100; }
加入后长安的当铺就是200个种类了,其它的还是100个。
4、can_sell参数可以随意设定一个不能卖的物品可以卖掉。 除了特殊的或者具有no_sell的
5、统一将look paizi一类的改为look sign且不写入房间,避免存盘 后无法修改,凡是想要可以look sign的房间,仅需在房间文件顶 部加入:
int look_sign() { return 1; }
1
巫师可以使用sell -d <物品id>清除当铺中某一种卖品。 */
#include
inherit ROOM; inherit F_SAVE;
int do_sellt(object ob, object me, string boss_name); int do_listhock();
mapping pawned_objects = ([]);
int is_hockshop_room() { return 1; } string money_num(int amount); string log_time();
string filter_color(string arg); string log_id(object ob); int money_all_inv(object me); int color_len(string str);
/* 收购价和原值的比率 */ #define sell_rate
/* 收购后卖出价比率 */ #define to_sell_rate 0.9
/* 可以保存的物品种类基础最大量 */ #define CAN_SAVE_OBJECT 100 #define BUSY_MESSAGE #define ERR_FILE_ZERO
/* 可以保存的单个物品个数最大数量 */ static int max_items = 999; /* 具有操作权限的最低巫师等级 */
// 设定为5在XYJ中指仅可admin权限有权操作 static int Wiz_L = 5;
/* 价值小于 1 两银子的物品当铺不收 */ static int min_value = 100;
string domain_hock_file(string file) {
\你现在忙得很,无法做任何事情。\\n\HIR\文件载入错误,请向管理员反馈。\\n\0.7
2
}
string domain;
if(sscanf(file, \
return domain; else
if(sscanf(file, \
return domain; else
if(sscanf(file, \
return domain;
return 0;
/* 收购种类多样性 */ int rdm_obj_num() { }
/* 是否有BOSS */
object have_hock_boss(object room) {
inv=deep_inventory(room); i=sizeof(inv); while(i--) { }
if(!inv[i] || !inv[i]->is_hock_boss()) continue; flag++; obj=inv[i]; if(!room) return 0; object *inv, obj; int i, flag=0; return tol; if(f)
tol+=f;
f=this_object()->is_add_pawn_num(); tol=CAN_SAVE_OBJECT; int tol, f;
3
}
void init() { }
/* 该当铺存放文件路径和名称 */ string query_save_file() { }
void setup() {
::setup();
seteuid(getuid()); return file;
if(file_size(file)==-1)
assure_file(file);
file=DATA_DIR+\name = base_name(this_object()); if(name[0..0] == \
name = name[1..];
name = replace_string(name,\string name, file;
add_action(\add_action(\
add_action(\add_action(\add_action(\return obj; if(!living(obj)) { }
write(obj->name()+\目前的状态无法办理业务。\\n\return 0; if(flag<1) { }
write(\当铺掌柜不在,无法进行交易。\\n\return 0;
4
}
restore();
/* 获取当票 */
int do_givestamps(string arg) {
if(!stamp_ob) {
stamp_ob = new(\
/* 系统中所有NEW的地方,必须做此判断 */ if(!stamp_ob) { }
stamp_ob->move(me,1);
write(name+\不耐烦的看了你一眼,身上有一张还要?\\n\
write(\当票文件出错,请联络巫师解决。\\n\return 1;
stamp_ob=present(\/* 这里控制存入即可控制典当的地点 */ if(efile!=\
return notify_fail(\这里尚未开放典当业务。\\n\efile=domain_hock_file(r_file); name=boss->query(\
////////////////////////////////////////////////////////
r_file=base_name(this_object()); boss=have_hock_boss(this_object()); if(!boss) return 1; // 禁止冒充BOSS
if(boss->query(\ }
write(query(\当前法定持牌人不在,无法进行交易。\\n\return 1;
////////////////////////////////////////////////////////
if(me->is_busy()) return notify_fail(BUSY_MESSAGE); me=this_player();
object stamp_ob, me, boss; string efile, name, r_file;
} else {
5

