static gchar* make_simple_trans_line (Account *acc, Transaction *trans, Split *split, CsvExportInfo *info) { gboolean t_void = xaccTransGetVoidStatus (trans); gchar *result = begin_trans_string (trans, info); result = add_account_name (result, acc, NULL, TRUE, info); result = add_number (result, trans, info); result = add_description (result, trans, info); result = add_category (result, split, TRUE, info); result = add_reconcile (result, split, info); result = add_amount (result, split, t_void, TRUE, TRANS_SIMPLE, info); result = add_amount (result, split, t_void, FALSE, TRANS_SIMPLE, info); result = add_rate (result, split, t_void, info); return result; }
int do_pour(string arg) { string me, what; object ob; function f; if( !arg || sscanf(arg, "%s in %s", me, what)!=2 || !id(me) ) return notify_fail("指令格式: pour <药粉> in <物品>\n"); ob = present(what, this_player()); if( !ob ) return notify_fail("你身上没有 " + what + " 这样东西。\n"); if( !ob->query("liquid/remaining") ) return notify_fail(ob->name() + "里什麽也没有,先装些水酒才能溶化药粉。\n"); // We let call other to call the "master copy" of the object in case the // powder object got destructed after used up. f = (: call_other, base_name(this_object()), "effect_in_liquid" :); ob->set("liquid/drink_func", bind(f, ob)); message_vision("$N将一些" + name() + "倒进" + ob->name() + ",摇晃了几下。\n", this_player()); add_amount(-1); return 1; }
static gchar* make_complex_split_line (Transaction *trans, Split *split, CsvExportInfo *info) { gboolean t_void = xaccTransGetVoidStatus (trans); gchar *result = begin_split_string (trans, split, t_void, info); result = add_memo (result, split, info); result = add_account_name (result, NULL, split, TRUE, info); result = add_account_name (result, NULL, split, FALSE, info); result = add_line_type (result, SPLIT_LINE, info); result = add_action (result,split, SPLIT_LINE, info); result = add_reconcile (result, split, info); result = add_amount (result, split, t_void, TRUE, SPLIT_LINE, info); result = add_comm_mnemonic (result, trans, split, info); result = add_comm_namespace (result, trans, split, info); result = add_amount (result, split, t_void, FALSE, SPLIT_LINE, info); result = add_price (result, split, t_void, info); return result; }
int do_apply(string arg) { string ob_name,target_name,TYPE; object me=this_player(); object ob,target; if( !arg ) return 0; if( me->query_temp("unconcious") ) return 0; arg=lower_case(arg); if( sscanf(arg, "%s at %s", ob_name, target_name)==2 ) { if( !target = present(target_name,environment(me)) ) return notify_fail("����û�� " + target_name + "��\n"); } else { ob_name=arg; target=me; } if( !ob = present(ob_name,me) ) return 0; if( ob != this_object() ) return 0; if( target->query_temp("medicine/bandaged") ) return notify_fail("���Ƚ������������Ϳҩ��\n"); if( ob->query("cure_type")!="outheal") return notify_fail("����ҩ�����������\n"); TYPE=ob->query("cure_heal_type"); if( !target->is_character() || target->is_corpse() ) return notify_fail("�����һ�㣬�Dz����ǻ��\n"); if( target->query(TYPE) >= target->query("max_"+TYPE) ) return notify_fail((target=me?"��":target->name())+"��û�����Ե��˿ڡ�\n"); if( me->is_fighting() || target->is_fighting() ) return notify_fail("ս��������ҩ��\n"); message_vision( "[32m$Nϸ�ĵİ�$n����"+ (target==me?"�Լ�":target->name()) +"�����ϡ�[0m\n" ,me,ob); target->set_temp("medicine/plaster_power",ob->query("medicine_power")); target->set_temp("medicine/plaster_times",ob->query("medicine_times")); target->set_temp("medicine/type",TYPE); add_amount(-1); return 1; }
static gchar* make_complex_trans_line (Account *acc, Transaction *trans, Split *split, CsvExportInfo *info) { gboolean t_void = xaccTransGetVoidStatus (trans); gchar *result = begin_trans_string (trans, info); result = add_type (result, trans, info); result = add_second_date (result, trans, info); result = add_account_name (result, acc, NULL, FALSE, info); result = add_number (result, trans, info); result = add_description (result, trans, info); result = add_notes (result, trans, info); result = add_memo (result, split, info); result = add_category (result, split, TRUE, info); result = add_category (result, split, FALSE, info); result = add_line_type (result, TRANS_COMPLEX, info); result = add_action (result,split, TRANS_COMPLEX, info); result = add_reconcile (result, split, info); result = add_amount (result, split, t_void, TRUE, TRANS_COMPLEX, info); result = add_comm_mnemonic (result, trans, NULL, info); result = add_comm_namespace (result, trans, NULL, info); result = add_trans_eol (result, info); return result; }
int do_eat(string arg) { object ob,me=this_player(); int medicine_power,tmp,player_con=me->query("con"),power,value;//�������й� string TYPE; if( !arg ) return 0; arg=lower_case(arg); if( !ob = present(arg,me) ) return 0; if( ob != this_object() ) return 0; if( me->query_temp("unconcious") ) return 0; medicine_power = ob->query("medicine_power"); TYPE = ob->query("cure_"+ob->query("cure_type")+"_type"); if( ob->query("cure_type")=="outheal") return notify_fail("����ҩ������(apply)�����ܳԡ�\n"); if( me->is_busy() ) return notify_fail("����һ��������û����ɡ�\n"); switch( ob->query("cure_type") ) { case "poison" : //�ⶾ //һֻֻ�ܽ�һ��״̬��...... player_con=player_con*3; power= ob->query("medicine_sick"); //ҩ�Ե�ֵ power= power-player_con; if(power > 40) power = 40; me->add( "status",power); tmp=me->query("status"); if( tmp >= 1000 ) { write("���ҩ����, ������ܲ�ס���ε��ˡ�\n"); me->unconcious(); } else { if( tmp < 400 ) tmp = 0; else tmp-=400; if(me->query_condition(TYPE)) { me->apply_condition(TYPE,me->query_condition(TYPE)-medicine_power); if( me->query_condition(TYPE) < 0 ) me->clear_condition(TYPE); } else return notify_fail("��û�ж��������ҩ ?\n"); } break; case "heal" : //kee(1)����С������ player_con=player_con*3; power= ob->query("medicine_sick"); //ҩ�Ե�ֵ power= power-player_con; if(power > 40) power = 40; me->add( "status",power); tmp=me->query("status"); if( tmp >= 1000 ) { write("���ҩ����, ������ܲ�ס���ε��ˡ�\n"); me->unconcious(); } else { if( tmp < 400 ) tmp = 0; else tmp-=400; me->receive_heal(TYPE, medicine_power*( 1000-tmp )/1000+random(10)-5); } me->add_temp("fight",1); break; case "heal_kee" : //kee(2)���鵤 player_con=player_con*2; power= ob->query("medicine_sick"); //ҩ�Ե�ֵ power= power-player_con; if(power > 70) power = 70; me->add( "status",power); tmp=me->query("status"); if( tmp >= 1000 ) { write("���ҩ����, ������ܲ�ס���ε��ˡ�\n"); me->unconcious(); } else { if( tmp < 400 ) tmp = 0; else tmp-=400; value=me->query("max_kee"); me->set("kee",value); } me->add_temp("fight",1); break; case "force" : //force ѩ���� player_con=player_con*3; power= ob->query("medicine_sick"); //ҩ�Ե�ֵ power= power-player_con; if(power > 40) power = 40; me->add( "status",power); tmp=me->query("status"); if( tmp >= 1000 ) { write("���ҩ����, ������ܲ�ס���ε��ˡ�\n"); me->unconcious(); } else { if( tmp < 400 ) tmp = 0; else tmp-=400; me->add("force",500); value=me->query("max_force"); if(me->query("force") > value) me->set("force",value); } me->add_temp("fight",1); break; case "atman" : //atman ̫������ player_con=player_con*3; power= ob->query("medicine_sick"); //ҩ�Ե�ֵ power= power-player_con; if(power > 40) power = 40; me->add( "status",power); tmp=me->query("status"); if( tmp >= 1000 ) { write("���ҩ����, ������ܲ�ס���ε��ˡ�\n"); me->unconcious(); } else { if( tmp < 400 ) tmp = 0; else tmp-=400; me->add("atman",300); value=me->query("max_atman"); if(me->query("atman") > value) me->set("atman",value); } me->add_temp("fight",1); break; case "mana" : //mana �Žڷ����� player_con=player_con*3; power= ob->query("medicine_sick"); //ҩ�Ե�ֵ power= power-player_con; if(power > 40) power = 40; me->add( "status",power); tmp=me->query("status"); if( tmp >= 1000 ) { write("���ҩ����, ������ܲ�ס���ε��ˡ�\n"); me->unconcious(); } else { if( tmp < 400 ) tmp = 0; else tmp-=400; me->add("mana",300); value=me->query("max_mana"); if(me->query("mana") > value) me->set("mana",value); } me->add_temp("fight",1); break; case "all_atats" : //all_stats ���鵤 �������״̬ player_con=player_con*1; power= ob->query("medicine_sick"); //ҩ�Ե�ֵ power= power-player_con; if(power > 80) power = 80; me->add( "status",power); tmp=me->query("status"); if( tmp >= 1000 ) { write("���ҩ����, ������ܲ�ס���ε��ˡ�\n"); me->unconcious(); } else { if( tmp < 400 ) tmp = 0; else tmp-=400; TYPE="burn"; me->clear_condition(TYPE); //���� TYPE="blade"; me->clear_condition(TYPE); //���� TYPE="u-stial"; me->clear_condition(TYPE); //���� TYPE="cold"; me->clear_condition(TYPE); //���� TYPE="hart"; me->clear_condition(TYPE); //���� TYPE="star-stial"; me->clear_condition(TYPE); //���� TYPE="blockade"; me->clear_condition(TYPE); //Ѩ������ } me->add_temp("fight",1); break; case "all_poison" : //all_poison ���鵤 player_con=player_con*2; power= ob->query("medicine_sick"); //ҩ�Ե�ֵ power= power-player_con; if(power > 70) power = 70; me->add( "status",power); tmp=me->query("status"); if( tmp >= 1000 ) { write("���ҩ����, ������ܲ�ס���ε��ˡ�\n"); me->unconcious(); } else { if( tmp < 400 ) tmp = 0; else tmp-=400; TYPE="five_poison"; me->clear_condition(TYPE); TYPE="rose_poison"; me->clear_condition(TYPE); TYPE="dark_poison"; me->clear_condition(TYPE); TYPE="fire_poison"; me->clear_condition(TYPE); TYPE="snake_poison"; me->clear_condition(TYPE); TYPE="flower_poison"; me->clear_condition(TYPE); } me->add_temp("fight",1); break; case "sick" : me->add("status",-medicine_power); if( me->query("status") < 0 ) me->set("status",0); break; default : error("F_MEDICINE:û������ cure_type��\n"); } message_vision((query("eat_msg")?query("eat_msg"): "[32m$N������$n֮����һ�ᣬ���Ͽ������ö��ˡ�[0m\n"),me,ob); add_amount(-1); return 1; }