ltblue@tx 发表于 2015-4-10 09:02:25

关于失落的信笺的代码

这个是单机书剑里的代码,2004年的......



// loseletter.c
//
// Created by mxzhao 2004/03/22

#include <ansi.h>
#include <job_mul.h>

inherit ITEM;

#define BASE_EXP   300
#define BASE_POT        400
#define BASE_MONEY        100

#define RAND_EXP   200
#define RAND_POT        600
#define RAND_MONEY        200

#define GET_EXP(exp)                (exp = (BASE_EXP + random(RAND_EXP)) * LOSELETTER_JOB_MUL/100)
#define GET_POT(pot)                (pot = (BASE_POT + random(RAND_POT)) * LOSELETTER_JOB_MUL/100)
#define GET_MONEY(money)        (money = BASE_MONEY + random(RAND_MONEY))
#define GET_ITEM(obj)                (obj = new(bonus_items))

string do_look();
private int set_addressee();
private int do_send(string arg);

string *bonus_items = ({
        "/clone/medicine/renshen-guo",
});


void create()
{
        set_name(YEL"失落的信笺"NOR, ({ "letter", "xin", "lose letter" }));

        set_weight(10);

        if(clonep())
        {
                set_default_object(__FILE__);
        }
        else
        {
                set("unit", "封");
                set("value", 0);
                set("material", "paper");
                set("no_drop",1);
        }

        set("long", (: do_look :));

        set_addressee();

        setup();
}

void init()
{
        object me = this_player();

        if (!query("bearer"))
        {
                message_vision("$N得到了一封" + name() + "。\n", me);
                set("bearer", me->query("id"));
        }

        if (me->query("id") == query("bearer"))
        {
                if (me->query("id") == query("addressee"))
                {
                        set_addressee();
                }
               
                if (query("addressee"))
                {
                        add_action("do_send", "songxin");
                }
        }

        if (!query("calldest"))
        {
                set("calldest", 1);
                call_out("dest", random(300) + 300);
        }
}

string do_look()
{
        object ob;

        string str = "这是一封大理国镇南王府送出的书信。\n"
                "信封纸色蜡黄,信舌用火漆封着。\n";

        string target = query("addressee");

        if (target && objectp(ob = find_player(target)))
        {
                str += "信封上写着:" + ob->short(1)
                        + "\n看来是很重要的信笺,要抓紧时间把它送去。\n";
        }
        else
        {
                str += "信封上的字迹模糊不清,不知何人遗落到此处。\n";
        }

        return str;
}

private int set_addressee()
{
        object *list = filter_array(users(),
                (: $1->query("combat_exp") > 100000
                && !wizardp($1)
                && environment($1)
                :));

        list -= ({ this_player() });

        if(sizeof(list) == 0)
        {
                delete("addressee");
                return 0;
        }

        set("addressee", list->query("id"));

        return 1;
}

private int do_send(string arg)
{
        int exp, pot, money;
        int obexp, obpot, obmoney;

        object ob, obj, obobj;
        object me = this_player();

        if ( !arg || !objectp(ob = present(arg, environment(me))))
        {
                return notify_fail("你要送给谁?\n");
        }

        if ( query("addressee") != arg )
        {
                return notify_fail("这封信不是送给这个人的。\n");
        }

        if ( me->is_busy() || me->is_fighting() )
        {
                return notify_fail("你正忙着呢。\n");
        }


        if ( !living(ob) )
        {
                return notify_fail("看清楚点,那是活人吗?!\n");
        }

        if ( !userp(ob) )
        {
                return notify_fail("嘿嘿,想作弊?!\n");
        }

        me->add_busy(random(2));

        message_vision("$n将" + name() + "交给了$N。\n", ob, me);

        if (random(10)==0)
        {
                message_vision("$N狐疑地看着$n:「这信怎么落到你的手上?」\n"
                        "$N上下打量了$n两眼:「你当真没有偷拆来看过?"
                        + RANK_D->query_self(ob) + "可是有隐私权的。」\n", ob, me);
               
                EMOTE_D->do_emote(ob, "liar");

                message_vision("$N越想越生气,暴打了$n一顿,打得$n遍体鳞伤。\n", ob, me);

                GET_EXP(exp);

                exp = random(exp/2);

                tell_object(me, "你被" + ob->name() + "打成重伤,经验下降了"
                        + chinese_number(exp) + "点。\n");

                exp = -exp;

                //me->add("combat_exp", exp);
                me->add_exp_combat(exp, ob, "丢失的信", 1);

                EMOTE_D->do_emote(me, "wuwu", me->query("id"));
        }
        else
        {
                int itemp;

                EMOTE_D->do_emote(ob, "touch", me->query("id"));

                message_vision("过了一会儿,$N才说道:「我等侯段王爷的消息多时,"
                        "正在踌躇为何音讯全无,真是多谢这位"
                        + RANK_D->query_respect(me) + "。」\n", ob, me);
               
                switch (random(100)%5)
                {
                case 0:
                        itemp = random(10) + 1;
                        message_vision("$N拆开信笺看了看,喜道:「我在大理国购买的福利彩票中了"
                                + chinese_number(itemp) + "等奖啦!!!」\n", ob, me);
                        EMOTE_D->do_emote(ob, "yeah");

                        GET_MONEY(money);
                        money /= itemp;
                        money *= 10000;
                        me->add("balance", money);

                        GET_MONEY(obmoney);
                        obmoney /= itemp;
                        obmoney *= 10000;
                        ob->add("balance", obmoney);

                        tell_object(ob, "你获得了大理国福利彩票滚动奖金"
                                + MONEY_D->money_str(obmoney) + ",奖金已汇入你的账户。\n");

                        tell_object(me, "为了感谢你的拾「信」不昧," + ob->name()
                                + "给你的账户汇入了" + MONEY_D->money_str(money) + "。\n");
                        break;
                case 1:
                        itemp = random(100) + 1;
                        message_vision("$N拆开信笺,上面写着:「您所购买的大理国天龙股份最近下跌了"
                                + chinese_number(itemp) + "个百分点!!!」\n", ob);
                        EMOTE_D->do_emote(ob, "xbc");
                        message_vision("$N说道:「多谢这位" + RANK_D->query_respect(me)
                                + "送信给我,我要赶紧去补仓了。」\n", ob);

                        GET_POT(pot);
                        pot = pot*itemp/100;
                        if (pot < 0)
                        {
                                pot = 0;
                        }
                        me->add("potential", pot);

                        tell_object(me, "你擦了擦额头上的汗,心想:「幸亏我没买那破股票,"
                                "看这小子赔得本都快没了,还在那儿穷装。」\n"
                                "你觉得自己特英明神武,顿时心胸舒畅,增加了"
                                + chinese_number(pot) + "点潜能。\n");
                        break;
                case 2:
                        message_vision("$N拆开信笺看了看,大喜道:「我因为送信勤恳,"
                                "已经被评选为大理年度劳动模范了!」\n", ob);

                        EMOTE_D->do_emote(ob, "touch");

                        message_vision("$N说道:「多谢这位" + RANK_D->query_respect(me)
                                + "送信给我。」\n", ob);

                        GET_EXP(exp);
                        GET_POT(pot);
                               
                        //me->add("combat_exp", exp);
                        exp = me->add_exp_combat(exp, ob, "丢失的信", 1);
                       
                        me->add("potential", pot);

                        GET_EXP(obexp);
                        GET_POT(obpot);
                        //ob->add("combat_exp", obexp);
                        obexp = ob->add_exp_combat(obexp, me, "丢失的信", 1);
                        ob->add("potential", obpot);

                        tell_object(ob, "你被评选为大理年度劳动模范,获得了"
                                + chinese_number(obexp) + "点经验," + chinese_number(obpot) + "点潜能。\n");
                       
                        tell_object(me, "你心想自己拾「信」不昧,在此基础上再加把劲,"
                                "来年兴许也能评为光荣的劳动模范,不由精神大为振奋。\n"
                                "你获得了" + chinese_number(exp) + "点经验,"
                                + chinese_number(pot) + "点潜能。\n");
                        break;
                case 3:
                        message_vision("$N拆开信笺,皱眉读道:「您给大理国所投简历,"
                                "已经我大理人事局第一次筛选而拒绝!\n"
                                "您妄图行贿大理人事领导的行为已被彻查,贿物送回,"
                                "我国保留追究法律责任权力……」\n", ob);
                       
                        EMOTE_D->do_emote(ob, "wait");

                        GET_ITEM(obj);

                        message_vision("$N恶狠狠得瞪了$n一眼,气鼓鼓的把信笺内封的贿赂用品『"
                                + obj->name() + "』扔在地上。\n", ob, me);

                        GET_EXP(obexp);
                        GET_POT(obpot);
                        //ob->add("combat_exp", obexp);
                        obexp = ob->add_exp_combat(obexp, me, "丢失的信", 1);
                        ob->add("potential", obpot);

                        tell_object(ob, "你行贿求职失败,卧薪尝胆,重练武学,获得了"
                                + chinese_number(obexp) + "点经验," + chinese_number(obpot) + "点潜能。\n");

                        tell_object(me, "你捡到了" + ob->name() + "扔掉的『" + obj->name() + "』。\n");

                        obj->move(me);
                        break;
                case 4:
                        message_vision("$N拆开信笺,却惊讶的发现,里面还有一封信笺。\n"
                                "$N不由一笑:「一定是哪个大头虾把给别人的信笺错装进给我的信封里了。」\n", ob, me);

                        new(__FILE__)->move(ob);

                        EMOTE_D->do_emote(ob, "thank ", me->query("id"));

                        GET_EXP(exp);
                        GET_POT(pot);
                       
                        //me->add("combat_exp", exp);
                        exp = me->add_exp_combat(exp, ob, "丢失的信", 1);
                        me->add("potential", pot);
                       
                        tell_object(me, "你因为自己拾「信」不昧,获得了"
                                + chinese_number(exp) + "点经验," + chinese_number(pot) + "点潜能。\n");
                default:
                        break;
                }
        }

        log_file("job/loseletter",
                strip(sprintf("%s(%s)送" + name() + "给%s(%s),"
                "奖励%s点经验%s点潜能%s,物品:%s。\n",
                me->query("name"),
                me->query("id"),
                ob->query("name"),
                ob->query("id"),
                chinese_number(exp),
                chinese_number(pot),
                MONEY_D->money_str(money),
                objectp(obj)?obj->name():"无"
                )),
                me );
       
        if (obexp>0 || obpot>0 || obmoney>0 || objectp(obobj))
        {
                log_file("job/loseletter",
                        strip(sprintf("%s(%s)从%s(%s)处收到" + name() + ","
                        "奖励%s点经验%s点潜能%s,物品:%s。\n",
                        ob->query("name"),
                        ob->query("id"),
                        me->query("name"),
                        me->query("id"),
                        chinese_number(obexp),
                        chinese_number(obpot),
                        MONEY_D->money_str(obmoney),
                        objectp(obobj)?obobj->name():"无"
                        )),
                        me );
        }

        destruct(this_object());
        return 1;
}

void dest()
{
        object ob = environment(this_object());
        if (userp(ob))
        {
                tell_object(ob, "你想来想去,事不关己,高高挂起,何必为他人苦苦奔波。\n"
                        "你乘人不注意,偷偷把" + this_object()->name() + "扔进了路边的草丛。\n");
        }

        destruct(this_object());
}

ltblue@tx 发表于 2015-4-10 09:04:48

可以看到,整体来讲,变化不是特别大,主要的内容都有了,改变的恐怕只是概率吧?
这里被打傻的概率高达1/10,但貌似那时候被打傻是件倒霉的事,因为没有解密机会的概念
其他的各项结果,当年事5种,概率均分,目前估计也没什么变化吧?
关于失败时间,当年好像是5-10分钟,目前估计也没什么区别
只是关键的”打傻“概率貌似还没有

recollec@tx 发表于 2015-4-10 09:09:40

? 那个时候就有这个玩意了?

juvair@ts 发表于 2015-4-10 14:03:37

文盲飘过,表示不懂   

ltblue@tx 发表于 2015-4-10 14:13:48

recollec@tx 发表于 2015-4-10 09:09 static/image/common/back.gif
? 那个时候就有这个玩意了?

看代码来说,的确是很早了

mytls@ts 发表于 2015-4-16 16:30:01

应该是很早的,居然还有天龙股票一说                     

shenm@tx 发表于 2015-4-21 12:52:25

不懂,绑定,大家努力破解了ll就可以不玩了!

mifeng@tx 发表于 2015-4-26 20:10:38

现在概率没有这么高吧,有1/250就不错了:lol:lol

hotdoor@tx 发表于 2015-11-3 20:50:46

学习了                           
页: [1]
查看完整版本: 关于失落的信笺的代码