#include <ansi.h>

inherit F_CLEAN_UP;
void create() { seteuid(getuid()); }

int main(object me, string arg)
{
  int i,have_throw;
  int my_throw_level,enemy_dex_level,my_exp,enemy_exp,diff;
  string *limbs,ob,who;
  object obj,throw,enemy;
  
  if(!arg)  
       return notify_fail("命令格式:throw <暗器> at <生物>\n");

  if(sscanf(arg,"%s at %s",ob,who)!=2)
       return notify_fail("命令格式:throw <暗器> at <生物>\n");
 
  if( !objectp(enemy = present(who, environment(me))) )
       return notify_fail("你想用暗器射谁？\n");

  if( !enemy->is_character() )
return notify_fail("那并不是生物。\n");

  if( !living(enemy))
       return notify_fail(enemy->name() + "都已经这样了，你还用得着暗算吗？\n");

  if( !obj = present(ob, me) )
       return notify_fail("你想用什么射？\n");
  
  if( obj->query_temp("prick"))
       return notify_fail("这样暗器还插在身上呢！\n");

  if( enemy == me)
       return notify_fail("自杀的好方法多的。\n");

  if( me->is_busy())
       return notify_fail("你正忙着呢!\n");

  if(environment(me)->query("no_fight")==1)
       return notify_fail("这里不许战斗!\n");

  if((string)obj->query("skill_type") != "throwing")
       return notify_fail("你只能用暗器伤人。\n");

if( me->query("gin") < 60 )
       return notify_fail("你先歇息一会儿吧。\n");


  have_throw=(int)obj->query_amount();
  if(have_throw < 1)
       return notify_fail("这样暗器已经用完了。\n");

  obj->add_amount(-1);
  throw=new(base_name(obj));
  throw->set_amount(1);
  me->start_busy(2);

  my_throw_level=(int)me->query_skill("throwing",1);
  enemy_dex_level=(int)enemy->query_skill("dodge",1)+enemy->query_skill("throwing",1);
  my_exp=(int)me->query("combat_exp");
  enemy_exp=(int)enemy->query("combat_exp");
  diff=(my_throw_level-enemy_dex_level);
  if(diff < 1) 
  diff=5;
  if(enemy_exp <(my_exp*3/2+diff))
        {
        message_vision(HIW "$N抬手就是一枚"+(string)obj->query("name")+"向$n射去！\n" NOR, me,enemy);
limbs = enemy->query("limbs");
     message_vision(HIR"结果" + obj->name() + "正中$N的"+limbs[random(sizeof(limbs))] + "。\n"NOR, enemy);

        throw->prick(enemy);
        enemy->add("kee",-(my_throw_level*2+50));
        if(me->query("force_factor")!=0)
                {
                enemy->receive_damage("kee",me->query("force_factor"));
                me->add("force",-me->query("force_factor"));
                }
        COMBAT_D->report_status(enemy, 1);
        enemy->kill_ob(me);
        }
  else  {
        message_vision(HIW "$N抬手就是一枚"+(string)obj->query("name")+"向$n射去！\n" NOR, me,enemy);
        if ((int)enemy->query_skill("throwing")>=30)
         {    
          message_vision(HIM "$N挥挥手将"+(string)obj->query("name")+"收入怀中！\n" NOR,enemy);
          throw->move(enemy);
         }
        else
         {
           message_vision(HIC "$N一个侧身将"+(string)obj->query("name")+"避了过去！\n" NOR,enemy);
write((string)obj->query("name")+"“嗤”一声不知道飞到那里去了。\n");
           destruct(throw);
         }
        }
   if(my_throw_level>=200) my_throw_level=190;
   me->add("gin",-(200-my_throw_level));
  return 1;
}

