首页 > 白马西风 > 挖钢玉石
2007
11-17

挖钢玉石

传奇3私服挖钢玉矿石并合成钢玉石

#define ORE_NAME    "钢玉矿石"

int process_ore()
{
   int      i, j;
   int      quality;
   int      total_num;
   int      total_quality;
   array    ore_list;
   mapping  my = me();
   mapping  mc;
   mapping  ob;
   mapping  npc;

   total_num     = 0;
   total_quality = 0;

   mc       = my["carry"];
   ore_list = allocate_array(sizeof(my_storage_info) + sizeof(mc));
   close_to_npc("storer", &npc);
   for (i = sizeof(mc) - 1; i >= 0; i--)
   {
       ob = mc[i];

       if (ob["item_class"] == ITEM_MINE)
       {
            if (get_mine_treatment(ob) == ITEM_STORED)
               store(-i, npc);
           continue;                
       }
   }
   get_storage_info(npc, storage_password);
   if (! is_array(my_storage_info))
       my_storage_info = ({ });
   for ( i = 0; i < sizeof(my_storage_info); i++)
   {
       if (! is_mapping(ob = my_storage_info[i]))
           continue;

       if (ob["name"] == ORE_NAME)
       {
           ore_list[total_num++] = ob;
           total_quality += ob["quality"];
       }
   }
   refresh_inv();
   while (! is_mapping(my = me()) || ! my["got_inventory"])
       sleep(1);
   mc       = my["carry"];
   for ( i = 0; i < sizeof(mc); i++)
   {
       if (! is_mapping(ob = mc[i]))
           continue;

       if (ob["name"] == ORE_NAME)
       {
           ore_list[total_num++] = ob;
           total_quality += ob["quality"];
       }
   }

   if (total_num < 10 || total_quality < 95000)
       return 0;
   for (i = 0; i < total_num - 1; i++)
   {
       for (j = total_num - 1; j > i; j--)
       {
           if (ore_list[j]["quality"] < ore_list[j - 1]["quality"])
           {
               ob = ore_list[j];
               ore_list[j] = ore_list[j - 1];
               ore_list[j - 1] = ob;
           }
       }
   }
   printf("After sort %d)\n", total_num);
   quality = 0;
   for (i = 0; i < 10; i++)
   {
       quality += ore_list[i]["quality"];
       ore_list[i]["will_use"] = 1;
   }
   for (i = 9, j = 0; i >= 0; i--, j++)
   {
       if (quality >= 95000)
           break;

       quality -= ore_list[i]["quality"];
       ore_list[i]["will_use"] = 0;

       while (1)
       {
           if (quality + ore_list[total_num - 1 - j]["quality"] <= 95000)
               break;
           else
           if (quality + ore_list[total_num - 1 - j]["quality"] >= 95000 &&
               quality + ore_list[total_num - 1 - j - 1]["quality"] < 95000)
               break;
           else
               j++;
       }
       printf("Replace %d with %d ,", i, total_num - 1 - j);
       quality += ore_list[total_num - 1 - j]["quality"];
       ore_list[total_num - 1 - j]["will_use"] = 1;
       printf("Selected ore %d)\n", quality);
   }

   if (quality < 95000 || quality > 100000)
       return 0;
   for (i = 0, j = 0; i < total_num; i++)
   {
       if (ore_list[i]["will_use"])
       {
           take(ore_list[i]["id"], 1, npc);
           clear_command();
       }
   }

   return 1;
}
int on_post_prepare_for_quest()
{
   tell_user("开始自动合成钢玉矿石");

   do
   {
       if (! process_ore())
       {
           tell_user("没有合适的矿石");
           return 0;
       }
       if (! goto_city_ex("边境城市", 0, 0, 6) ||
           ! run_close_to(422, 262, 6))
       {
           tell_user("靠近啊彬失败");
           return 0;
       }
       talk_to("啊彬");
       talk_to("啊彬", "制作钢玉石");
       talk_to("啊彬", "收集完所需材料");
       talk_to("啊彬", "关闭");

   } while (1);
}
void buy_weapon(){
       string npc;
       goto_city("毒蛇山谷",0,0);
       close_to_npc("weapon",&npc);
       talk_to(npc);
       talk_to(npc, "@buy");
       int k=0;int wp_buied;
       for(;;i++){
         show_inv("风之鹤嘴锄", i);
         do{
           printf("%O\n",current_npc_inv_page[k]["durability"]);
           if(current_npc_inv_page[k]["durability"]==30000){
             buy(current_npc_inv_page[k]["id"],1,npc);
             wp_buied=1;break;}
             k++;
           }while(k<10);
         if(wp_buied){equip("风之鹤嘴锄");break;}
       }
   goto_city("边境城市",0,0);
   start_quest();
}
int on_prepare_for_quest()
{
   if(me()["equip"][1]["max_durability"]>14000)
   return 0;
   else
   tell_user("武器持久过低,前往毒蛇更换\n");
   stop_quest();
   create_thread("chang_weapon", "buy_weapon");
   return 0;
}
#define DROP_QUAL 16
#define GET_QUAL(x)        (((x) + 500) / 1000)

void on_new_carried(mapping item)
{
   int i;
   mapping my = me();
   mapping mc;
   mapping myitem;
   string  item_name;
   int item_quality;
   // 取得包裹信息
   mc = my["carry"];
   for (i = sizeof(mc) - 1; i >= 0; i--)
   {
           myitem = mc[i];
   
           item_quality = GET_QUAL(myitem["quality"]);

       if (myitem["item_class"] == ITEM_MINE
            && item_quality <= DROP_QUAL)
       {
           item_name = myitem["name"];
           // 矿物,判断处理方法
           //printf("scan:%s(%d)\n", item_name, get_mine_treatment(myitem));
           if (item_name == "紫水晶" || item_name == "石榴石" || item_name == "金刚石")
           {                
               printf("%s丢弃:%s(%d)\n\n", ctime(),item_name, myitem["id"]);
               drop (myitem["id"]);
           }          
           continue;    
       }
   }
}

觉得文章有用,微信打赏一元。



留下一个回复

你的email不会被公开。