************************************************************************
以下为当票文件:
// Created by waiwai@2009/01/12 改制用于XYJ /*
典当方式为先收手续费的方式,如果估值后低于1两 黄金,就按一两收取。 */
#include
inherit ITEM; inherit F_SAVE;
// 当品数量最大可以几个 #define CAN_MAX_PAWNS
// 每件当品保留时限
#define PAWNS_LOST_TIME 86400*7
// 最低收费
#define MIN_PAY_MONEY
void restore_waste();
string Middle_name(string name, int raw);
void create() {
set(\set(\set(\张\set(\set(\if (clonep()) { }
set(\set_default_object(__FILE__);
set_name(\当票\set_weight(10); restore_waste();
10000 10
26
}
string query_save_file() { }
void setup() { }
void des_wait() { }
void init() {
/* 必须的环境判断 */
if( this_player()==environment() ) {
add_action(\add_action(\/* 如果不在活物身上就des */
if(!environment()->is_character()) { }
des_wait(); return;
call_out(\::setup();
seteuid(getuid()); restore(); return file;
if(file_size(file)==-1)
assure_file(file);
file=DATA_DIR+\if(!id) return 0;
if(!id) id=query(\id=query(\string id, file;
27
} /*
}
add_action(\call_out(\
需要注意的是类似游戏中单一性的物品,比如法宝,是应该禁止被典当的。 */
int do_pawns(string arg) {
////////////////////////////////////////////////////////
boss=HOCKSHOP_NEW->have_hock_boss(env); if(!boss) return 1; // 禁止冒充BOSS
if(boss->query(\
write(query(\当前法定持牌人不在,无法进行交易。\\n\if(!env->is_hockshop_room())
return notify_fail(\典当你得去当铺。\\n\room_file=base_name(env);
efile=HOCKSHOP_NEW->domain_hock_file(room_file); env=environment(me); if(me->is_busy() )
return notify_fail(\你现在正忙着呢。\\n\me=this_player();
object ob, me, env, boss; int value; mixed no_sell;
mapping *pawns, pawn, dbase; int i, v, tol=0, amount=0; string id, room_file, efile; string name, file; string *sell_msg = ({ });
\破破烂烂,一文不值\\质地低劣,难看之极\\又脏又破,臭气熏天\
28
}
return 1;
name=boss->query(\
////////////////////////////////////////////////////////
/* 这里控制存入即可控制典当的地点 */ if(efile!=\
return notify_fail(\这里尚未开放典当业务。\\n\
if( !arg || !(ob = present(arg, me)) )
return notify_fail(\你要典当什么物品?\\n\
if( ob->query(\return notify_fail(\你要当「钱」?\\n\if( ob->query(\
return notify_fail(name+\说道:冰的东西我们这里没法存放。\\n\
if(ob==this_object())
file=base_name(ob);
if(file->query_amount() && file->query_amount()>1) { }
value = ob->query(\amount=ob->query_amount(); if(amount>0) {
if(value>ob->query(\ }
v=value*10/100;
/* no_sell的未必就不能pawn,这样设置是可以相对灵活 */ // 对于某些你想允许典当的,可以设置为can_pawn if(!ob->query(\
if( !value || value < 10)
return notify_fail(\这\数量不足,恐怕不值钱!message(\┋HOCKSHOP_QC┋Pawn:ROOM(%s),%s\\n\\n\
base_name(this_object()), base_name(ob)), users());
return notify_fail(\系统禁止\这类物品的典当。return notify_fail(name+\说道:将当票典当了,你确实有创意。\\n\
\\n\
\\n\
29
}
return notify_fail(\这样东西不值钱。\\n\
no_sell = ob->query(\if(no_sell) { }
if (stringp(no_sell))
return notify_fail((string)no_sell);
return notify_fail(\这样东西不能典当。\\n\
if(value v=MIN_PAY_MONEY; /* 此处两种方式的目的是,在某些时候query是可以被临时set的 */ if(ob->query(\ return notify_fail(ob->name()+\不允许典当。\\n\ if(ob->is_character() || ob->is_corpse() || ob->query_unique() || return notify_fail(ob->name()+\不能被典当。\\n\ ob->query(\ pawns = query(\id=getuid(me); i = sizeof(pawns); if(i>0) { if(!query(\ return notify_fail(name()+\是假货不能使用。\\n\ query(\ if(query(\ } while (i--) { if(pawns[i][\seteuid(ROOT_UID); rm(DATA_DIR+\seteuid(getuid()); des_wait(); write(\你不是这张当票的合法持有人。\\n\return 1; 30

