Автор: nomn: Дата: 05.31.2009
By HAWK (Remedy).
Index: E:/Files Ragnarok/разрареные афины/ea trunk 11.04.09 ver 13667/src/map/atcommand.c
===================================================================
--- E:/Files Ragnarok/разрареные афины/ea trunk 11.04.09 ver 13667/src/map/atcommand.c (revision 13667)
+++ E:/Files Ragnarok/разрареные афины/ea trunk 11.04.09 ver 13667/src/map/atcommand.c (working copy)
@@ -4207,6 +4207,94 @@
return 0;
}
+int atcommand_ab(const int fd, struct map_session_data* sd, const char* command, const char* message)
+{
+ int i,j,k;
+ int f_weight=0;
+ double f_price=0;
+ struct block_list *bl=(struct block_list *)sd;
+ struct s_autobuy ab[MAX_AUTOBUY];
+ struct item_data *item_data;
+ char out_msg[1024], output[1024], out_tmp[200], out_tmp1[200];
+ char s_title[CHATROOM_TITLE_SIZE];
+
+ nullpo_retr(-1, sd);
+ if (sd->status.base_level < 25){
+ clif_displaymessage (fd, "Для автоскупки минимальный базовый уровень персонажа должен быть не менее 25!");
+ return -1;
+ }
+
+ memset(&ab,'\',sizeof(ab));
+
+ // Проверка введенной строки парметров - как минимум три первые должны содержать изначально корректные значения!
+ if (!message || !*message || (
+ sscanf(message, "%d,%d,%d:%d,%d,%d:%d,%d,%d:%d,%d,%d:%d,%d,%d:%d,%d,%d", &ab[0].id, &ab[0].amount, &ab[0].price,
+ &ab[1].id, &ab[1].amount, &ab[1].price, &ab[2].id, &ab[2].amount, &ab[2].price, &ab[3].id, &ab[3].amount, &ab[3].price,
+ &ab[4].id, &ab[4].amount, &ab[4].price, &ab[5].id, &ab[5].amount, &ab[5].price) <3
+ )) {
+ clif_displaymessage(fd, "Пожалуйста, укажите данные от 1 до 6 позиций в формате: @ab ItemID1, ItemCount1, ItemPrice1: ItemID2, ItemCount2, ItemPrice2...: ItemID6, ItemCount6, ItemPrice6");
+ return -1;
+ }
+
+ memset(output, '\', sizeof(output));
+ memset(out_msg, '\', sizeof(out_msg));
+ memset(out_tmp1, '\', sizeof(out_tmp1));
+ memset(out_tmp, '\', sizeof(out_tmp));
+ strcat(output, "B");
+ strcat(out_msg, "B");
+ sd->autobuy_num = 0;
+ for (i=0,j=0; i < MAX_AUTOBUY; i++) {
+ if (ab.id<=0 || ab.amount<=0 || ab.price<=0 || ((item_data = itemdb_exists(ab.id)) == NULL))
+ continue;
+ f_weight += itemdb_weight(ab.id)*ab.amount;
+ f_price += ((double)ab.price*(double)ab.amount);
+ if (item_data->slot) {
+ sprintf(out_tmp1," > %s[%d] - %dz ",item_data->jname,item_data->slot,ab.price);
+ sprintf(out_tmp," > %s[%d](%d шт):%dz ",item_data->jname,item_data->slot,ab.amount,ab.price);
+ }else{
+ sprintf(out_tmp1,"%s - %dz ",item_data->jname,ab.price);
+ sprintf(out_tmp,"%s(%d шт):%dz ",item_data->jname,ab.amount,ab.price);
+ }
+ strcat(output, out_tmp1);
+ strcat(out_msg, out_tmp);
+ sd->autobuy[j].id = ab.id;
+ sd->autobuy[j].amount = ab.amount;
+ sd->autobuy[j].price = ab.price;
+ j++;
+ }
+
+ if (!j)
+ {
+ clif_displaymessage(fd, "Указаны некорректные данные! Проверьте указываемые данные.");
+ return -1;
+ }
+
+ for (i=0; i < j-1; i++)
+ for (k=i+1; k < j; k++)
+ if (sd->autobuy.id == sd->autobuy[k].id) {
+ clif_displaymessage(fd, "Наименование товара не должно повторяться!");
+ return -1;
+ }
+
+ if( f_weight + sd->weight > sd->max_weight )
+ {
+ clif_displaymessage(fd, "Вы не сможете унести столько веса после скупки!");
+ return -1;
+ }
+ if( f_price > (double)sd->status.zeny || f_price < 0. || f_price > (double)MAX_ZENY )
+ {
+ sprintf(out_tmp1,"Вы не сможете заплатить за весь указанный товар! Требуется %dz.",(int)f_price);
+ clif_displaymessage(fd, out_tmp1);
+ return -1;
+ }
+
+ sd->autobuy_num = j;
+ clif_announce(bl, out_msg, (int)strlen(out_msg)+1, strtol("0x04f6f9", (char **)NULL, 0), (int)3);
+ safestrncpy(s_title, output, min((int)strlen(output)+1,CHATROOM_TITLE_SIZE));
+ chat_createpcchat(sd, s_title, "", 20, 1, 1);
+ return 0;
+}
+
/*==========================================
* @mapinfo
компилим и наслаждаемся.