Популярный пост Incubus Опубликовано 25 марта, 2012 Популярный пост Жалоба Поделиться Опубликовано 25 марта, 2012 (изменено) Команда упрощает покупку расхода путем сохранения их в наборы и закупки всего набора.Пополнять набор можно только в городе.Сохранение набора: вводим команду @restock new:<имя набора> и в течении 30 секунд открываем магазин.Покупаем расход и он сохраняется у вас в наборе.@restock select выбор и пополнение набора@restock info информация о наборах@restock del удаляет выбранный наборIndex: atcommand.c===================================================================--- atcommand.c (revision 15066)+++ atcommand.c (working copy)@@ -8561,13 +8563,155 @@return 0;}+ACMD_FUNC(restock)+{+ char new[20], menu[1024];+ char* data;+ int info = 1, del = 1, i=0;+ size_t len;++ memset(new, '\0', sizeof(new));+ memset(menu, '\0', sizeof(menu));+ memset(sd->restock_name, '\0', sizeof(sd->restock_name));++ if(sscanf(message, "new: %s", new) == 1)+ {+ if(sd->restock.timer > 0)+ delete_timer(sd->restock.timer, restock);+ if( SQL_ERROR == Sql_Query(mmysql_handle,"SELECT name FROM restock WHERE char_id = '%d' GROUP BY name",sd->status.char_id) )+ {+ Sql_ShowDebug(mmysql_handle);+ Sql_Free(mmysql_handle);+ return 0;+ }+ while( SQL_SUCCESS == Sql_NextRow(mmysql_handle) )+ {+ Sql_GetData(mmysql_handle, 0, &data, &len);+ if(strcmp(data,new) == 0)+ {+ clif_displaymessage(fd,"Такой набор уже существует.");+ return 0;+ }+ i++;+ }+ Sql_FreeResult(mmysql_handle);++ if( i > 9)+ {+ clif_displaymessage(fd,"У тебя максимальное количество наборов(10).");+ return 0;+ }++ strcpy(sd->restock_name,new);+ clif_displaymessage(fd,"У тебя есть 30 секунд.");+ sd->restock.timer = add_timer(gettick()+30000, restock, sd->bl.id, 0);+ } else+ if(strcmp(message,"select") == 0 || (info = strcmp(message,"info")) == 0 || (del = strcmp(message,"del")) == 0)+ {+ i=0;++ sd->state.restock = (!del)?3:(!info)?2:1;+ if( SQL_ERROR == Sql_Query(mmysql_handle,"SELECT name FROM restock WHERE char_id = '%d' GROUP BY name",sd->status.char_id))+ {+ Sql_ShowDebug(mmysql_handle);+ Sql_FreeResult(mmysql_handle);+ return 0;+ }++ while( SQL_SUCCESS == Sql_NextRow(mmysql_handle) )+ {+ if(i++ > 0)+ strcat(menu,":");+ Sql_GetData(mmysql_handle, 0, &data, &len);+ strcat(menu,data);+ }+ Sql_FreeResult(mmysql_handle);+ clif_scriptmenu(sd, 0,menu);+ }+ else+ {+ clif_displaymessage(sd->fd,"Для создания набора введи @restock new:<name> и в течении 30 сек открой магазин.");+ clif_displaymessage(sd->fd,"@restock select - для пополнения запасов.");+ clif_displaymessage(sd->fd,"@restock info - показывает информацию о наборах.");+ clif_displaymessage(sd->fd,"@restock del - удаляет выбранный набор.");+ }+ return 0;+}+/*==========================================* atcommand_info[] structure definition*------------------------------------------*/AtCommandInfo atcommand_info[] = {+ {"restock", 0,40, atcommand_restock },{ "rura", 40,40, atcommand_mapmove },{ "warp", 40,40, atcommand_mapmove },{ "mapmove", 40,40, atcommand_mapmove }, // + /mmIndex: clif.c===================================================================--- clif.c (revision 15066)+++ clif.c (working copy)@@ -1700,10 +1700,19 @@void clif_buylist(struct map_session_data *sd, struct npc_data *nd){int fd,i,c;-+nullpo_retv(sd);nullpo_retv(nd);++ memset(sd->restock.name, '\0', sizeof(sd->restock.name));+ if(sd->restock.timer > 0)+ {+ strcpy(sd->restock.name, sd->restock_name);+ delete_timer(sd->restock.timer, restock);+ sd->restock.timer = INVALID_TIMER;+ }+fd = sd->fd;WFIFOHEAD(fd, 4 + nd->u.shop.count * 11);WFIFOW(fd,0) = 0xc6;@@ -1888,6 +1897,7 @@int slen = strlen(mes) + 9;struct block_list *bl = NULL;+ if(!sd->state.restock)if (!sd->state.using_fake_npc && (npcid == fake_nd->bl.id || ((bl = map_id2bl(npcid)) && (bl->m!=sd->bl.m || bl->x<sd->bl.x-AREA_SIZE-1 || bl->x>sd->bl.x+AREA_SIZE+1 || bl->y<sd->bl.y-AREA_SIZE-1 || bl->y>sd->bl.y+AREA_SIZE+1))))@@ -1896,7 +1906,7 @@WFIFOHEAD(fd, slen);WFIFOW(fd,0)=0xb7;WFIFOW(fd,2)=slen;- WFIFOL(fd,4)=npcid;+ WFIFOL(fd,4)=(sd->state.restock?0:npcid);memcpy((char*)WFIFOP(fd,8), mes, slen-8);WFIFOSET(fd,WFIFOW(fd,2));}@@ -10806,11 +10935,137 @@return;}idx = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]);skill_weaponrefine(sd, idx-2);sd->menuskill_val = sd->menuskill_id = 0;}+int restock(int tid, unsigned int tick, int id, intptr data)+{+ struct map_session_data* sd = map_id2sd(id);++ memset(sd->restock_name, '\0', sizeof(sd->restock_name));+ if(strcmp(sd->restock.name,"") == 0)+ clif_displaymessage(sd->fd,"Чтобы сохранить набор - еще раз введите команду @restock new:<name>");+ sd->restock.timer = INVALID_TIMER;+ return 0;+}+void clif_restock(struct map_session_data *sd, uint8 select)+{+ int i = 0;+ char nabors[10][20];+ char* data;+ size_t len;+ if(select < 255)+ {+ if( SQL_ERROR == Sql_Query(mmysql_handle,"SELECT name FROM restock WHERE char_id = '%d' GROUP BY name",sd->status.char_id) )+ {+ Sql_ShowDebug(mmysql_handle);+ Sql_FreeResult(mmysql_handle);+ return;+ }+ while( SQL_SUCCESS == Sql_NextRow(mmysql_handle) )+ {+ Sql_GetData(mmysql_handle, 0, &data, &len);+ strcpy(&nabors[i++][20],data);+ }+ Sql_FreeResult(mmysql_handle);++ {+ int nameid[20], amount[20], price[20], k, i=0;+ char output[200];+ struct item_data *item;+ struct item it;++ memset(output, '\0', sizeof(output));++ if( SQL_ERROR == Sql_Query(mmysql_handle,"SELECT item_id,amount,price FROM restock WHERE char_id = '%d' AND name = '%s'",sd->status.char_id,&nabors[select-1][20]) )+ {+ Sql_ShowDebug(mmysql_handle);+ Sql_Free(mmysql_handle);+ return;+ }+ while( SQL_SUCCESS == Sql_NextRow(mmysql_handle) )+ {+ Sql_GetData(mmysql_handle, 0, &data, NULL); nameid[i] = atoi(data);+ Sql_GetData(mmysql_handle, 1, &data, NULL); amount[i] = atoi(data);+ Sql_GetData(mmysql_handle, 2, &data, NULL); price[i++] = atoi(data);+ }+ Sql_FreeResult(mmysql_handle);++ switch(sd->state.restock)+ {+ case 1:+ for( i = 0; item = itemdb_exists(nameid[i]); i++)+ {+ for(k = 0; k < MAX_INVENTORY; k++)+ {+ if(sd->status.inventory[k].nameid == nameid[i])+ if(sd->status.inventory[k].amount < amount[i])+ amount[i] -= sd->status.inventory[k].amount;+ else+ amount[i] = 0;+ }+ ++ if((amount[i] > 0) && (price[i]*amount[i] < sd->status.zeny) && (item->weight*amount[i] + sd->weight < sd->max_weight))+ {+ memset(&it, 0, sizeof(it));+ it.nameid = nameid[i];+ it.identify = 1;+ pc_additem(sd,&it,amount[i]);+ pc_payzeny(sd,price[i]*amount[i]);+ }+ }+ break;++ case 2:+ {+ int count = 0;+ sprintf(output,"-------------- %s --------------",&nabors[select-1][20]);+ clif_displaymessage(sd->fd,output);+ for( i = 0; item = itemdb_exists(nameid[i]); i++)+ {+ count +=amount[i]*price[i];+ sprintf(output,"%s [ %d шт. ] - %d zeny",item->jname,amount[i],price[i]);+ clif_displaymessage(sd->fd,output);+ }+ clif_displaymessage(sd->fd," ");+ sprintf(output,"Общая цена: %d zeny",count);+ clif_displaymessage(sd->fd,output);+ clif_displaymessage(sd->fd,"-------------------------------------");+ }+ break;++ case 3:+ if( SQL_ERROR == Sql_Query(mmysql_handle,"DELETE FROM restock WHERE char_id = '%d' AND name = '%s'",sd->status.char_id,&nabors[select-1][20]) )+ {+ Sql_ShowDebug(mmysql_handle);+ Sql_Free(mmysql_handle);+ return;+ }+ sprintf(output,"Набор %s удален",&nabors[select-1][20]);+ clif_displaymessage(sd->fd,output);+ break;+ }+ }+ }+ sd->state.restock = 0;+ clif_scriptclose(sd, 0);+}+/// Answer to script menu dialog (CZ_CHOOSE_MENU)./// 00b8 <npc id>.L <choice>.B/// choice:@@ -10823,16 +11078,21 @@int npc_id = RFIFOL(fd,2);uint8 select = RFIFOB(fd,6);- if( (select > sd->npc_menu && select != 0xff) || select == 0 )+ if(!sd->state.restock){- TBL_NPC* nd = map_id2nd(npc_id);- ShowWarning("Invalid menu selection on npc %d:'%s' - got %d, valid range is [%d..%d] (player AID:%d, CID:%d, name:'%s')!\n", npc_id, (nd)?nd->name:"invalid npc id", select, 1, sd->npc_menu, sd->bl.id, sd->status.char_id, sd->status.name);- clif_GM_kick(NULL,sd);- return;+ if( (select > sd->npc_menu && select != 0xff) || select == 0 )+ {+ TBL_NPC* nd = map_id2nd(npc_id);+ ShowWarning("Invalid menu selection on npc %d:'%s' - got %d, valid range is [%d..%d] (player AID:%d, CID:%d, name:'%s')!\n", npc_id, (nd)?nd->name:"invalid npc id", select, 1, sd->npc_menu, sd->bl.id, sd->status.char_id, sd->status.name);+ clif_GM_kick(NULL,sd);+ return;+ }++ sd->npc_menu = select;+ npc_scriptcont(sd,npc_id);}-- sd->npc_menu = select;- npc_scriptcont(sd,npc_id);+ else+ clif_restock(sd,select);}\ No newline at end of fileIndex: clif.h===================================================================--- clif.h (revision 15066)+++ clif.h (working copy)@@ -714,4 +714,7 @@void clif_open_search_store_info(struct map_session_data* sd);void clif_search_store_info_click_ack(struct map_session_data* sd, short x, short y);+int restock(int tid, unsigned int tick, int id, intptr data);#endif /* _CLIF_H_ */Index: npc.c===================================================================--- npc.c (revision 15066)+++ npc.c (working copy)@@ -1264,7 +1264,7 @@{struct npc_data* nd;double z;- int i,j,w,skill,new_;+ int k,i,j,w,skill,new_;nullpo_retr(3, sd);nullpo_retr(3, item_list);@@ -1279,7 +1279,7 @@w = 0;new_ = 0;// process entries in buy list, one by one- for( i = 0; i < n; ++i )+ for( k = i = 0; i < n; ++i ){int nameid, amount, value;@@ -1323,11 +1323,19 @@case ADDITEM_OVERAMOUNT: return 2;}-++ if(strcmp(sd->restock.name,"") != 0)+ {+ sd->restock.nameid[k] = nameid;+ sd->restock.amount[k] = amount;+ sd->restock.price[k++] = value;+ }+value = pc_modifybuyvalue(sd,value);z += (double)value * amount;w += itemdb_weight(nameid) * amount;+}if( nd->master_nd != NULL ) //Script-based shops.@@ -1362,7 +1370,22 @@log_pick_pc(sd, LOG_TYPE_NPC, item_tmp.nameid, amount, NULL);//Logs}-++ if(strcmp(sd->restock.name,"") != 0)+ {+ for( i = 0; sd->restock.nameid[i]; i++)+ if( SQL_ERROR == Sql_Query(mmysql_handle,"INSERT restock (`char_id`,`name`,`item_id`,`amount`,`price`) VALUES('%d','%s','%d','%d','%d')",+ sd->status.char_id,sd->restock.name,sd->restock.nameid[i],sd->restock.amount[i],sd->restock.price[i]) )+ {+ Sql_ShowDebug(mmysql_handle);+ Sql_Free(mmysql_handle);+ return 0;+ }+ memset(&sd->restock,0,sizeof(sd->restock));+ clif_displaymessage(sd->fd,"Набор сохранен.");+ }+// custom merchant shop exp bonusif( battle_config.shop_exp > 0 && z > 0 && (skill = pc_checkskill(sd,MC_DISCOUNT)) > 0 ){Index: pc.h===================================================================--- pc.h (revision 15066)+++ pc.h (working copy)@@ -137,6 +137,8 @@unsigned short autolootid; // [Zephyrus]unsigned short autobonus; //flag to indicate if an autobonus is activated. [Inkfish]struct guild *gmaster_flag;+ unsigned int restock :3;} state;struct {unsigned char no_weapon_damage, no_magic_damage, no_misc_damage;@@ -423,8 +425,18 @@// temporary debugging of bug #3504const char* delunit_prevfile;int delunit_prevline;++ struct {+ int timer, nameid[20], amount[20], price[20];+ char name[20];+ } restock;++ char restock_name[20];+};-+//Update this max as necessary. 55 is the value needed for Super Baby currently#define MAX_SKILL_TREE 55//Total number of classes (for data storage)DROP TABLE IF EXISTS `имя базы`.`restock`;CREATE TABLE `имя базы`.`restock` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `char_id` int(10) unsigned NOT NULL, `name` varchar(45) NOT NULL, `item_id` int(10) unsigned NOT NULL DEFAULT '0', `amount` int(10) unsigned NOT NULL DEFAULT '0', `price` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=cp1251; Изменено 19 января, 2013 пользователем Incubus вынес описание за хайд 25 Ссылка на комментарий Поделиться на другие сайты Поделиться
nomn Опубликовано 25 марта, 2012 Жалоба Поделиться Опубликовано 25 марта, 2012 Как всегда радуешь.Зени взимаются за пополнение? Ссылка на комментарий Поделиться на другие сайты Поделиться
Incubus Опубликовано 25 марта, 2012 Автор Жалоба Поделиться Опубликовано 25 марта, 2012 Да, по стоимости что и покупал при сохранении набора. 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
kadze Опубликовано 25 марта, 2012 Жалоба Поделиться Опубликовано 25 марта, 2012 У вас у самих нету столько сообщений ... хайд опустите хотя бы до 150...а то я в первый раз не скопировал диф Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 25 марта, 2012 Жалоба Поделиться Опубликовано 25 марта, 2012 Спасибо, забираю. Как всегда что-то полезное! Ссылка на комментарий Поделиться на другие сайты Поделиться
Renegade Bastard Опубликовано 25 марта, 2012 Жалоба Поделиться Опубликовано 25 марта, 2012 Инкубус конечно няшечка, но 200 постов флудить как-то западло.. "Я слишком стар для этого дерьма" (с) 3 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Incubus Опубликовано 26 марта, 2012 Автор Жалоба Поделиться Опубликовано 26 марта, 2012 У вас у самих нету столько сообщений ... хайд опустите хотя бы до 150...а то я в первый раз не скопировал диф Ну ты облажался, шанс то был . Тебе осталось то всего ничего нафлудить. Инкубус конечно няшечка, но 200 постов флудить как-то западло.. "Я слишком стар для этого дерьма" (с) Может пора тебе свой статус отрабатывать? А серьезно, если очень нужно, пиши в личку. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
kadze Опубликовано 26 марта, 2012 Жалоба Поделиться Опубликовано 26 марта, 2012 Ну ты облажался, шанс то был . Тебе осталось то всего ничего нафлудить. Не думал,что ты будешь издеваться Ссылка на комментарий Поделиться на другие сайты Поделиться
Renegade Bastard Опубликовано 26 марта, 2012 Жалоба Поделиться Опубликовано 26 марта, 2012 Может пора тебе свой статус отрабатывать? Эт не я, это мне Дис поставил Ссылка на комментарий Поделиться на другие сайты Поделиться
botka4aet Опубликовано 27 марта, 2012 Жалоба Поделиться Опубликовано 27 марта, 2012 Боты теперь вообще зажиреют Спасибку тыкнул, но себе ставить не буду Ссылка на комментарий Поделиться на другие сайты Поделиться
next Опубликовано 19 августа, 2012 Жалоба Поделиться Опубликовано 19 августа, 2012 Дайте кто-либо сорцы в PM. Не флудер, и никогда им не был. Но команда очень полезная! Ссылка на комментарий Поделиться на другие сайты Поделиться
Break Опубликовано 28 августа, 2012 Жалоба Поделиться Опубликовано 28 августа, 2012 (изменено) Дайте кто-либо сорцы в PM. Не флудер, и никогда им не был. Но команда очень полезная! + и снизьте хайд хотя бы до 50 сообщений Изменено 28 августа, 2012 пользователем mrboob 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
unknown Опубликовано 2 ноября, 2012 Жалоба Поделиться Опубликовано 2 ноября, 2012 Буду благодарен, скиньте в личку. Спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
EtherealRo Опубликовано 19 января, 2013 Жалоба Поделиться Опубликовано 19 января, 2013 пере залейте плизз Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 20 января, 2013 Жалоба Поделиться Опубликовано 20 января, 2013 А скопировать никак? И ручками добавить? Ссылка на комментарий Поделиться на другие сайты Поделиться
Frend Опубликовано 20 января, 2013 Жалоба Поделиться Опубликовано 20 января, 2013 оу инкубус спасиб Ссылка на комментарий Поделиться на другие сайты Поделиться
unknown Опубликовано 3 сентября, 2013 Жалоба Поделиться Опубликовано 3 сентября, 2013 (изменено) 1>..\src\map\clif.c(11418): error C2198: pc_additem: слишком мало аргументов для вызова1>..\src\map\clif.c(11419): error C2198: pc_payzeny: слишком мало аргументов для вызова1>..\src\map\clif.c(11484): error C2198: npc_scriptcont: слишком мало аргументов для вызова pc_additem(sd,&it,amount[i]); pc_payzeny(sd,price[i]*amount[i]);npc_scriptcont(sd,npc_id);Хелп рА 17++++ Изменено 3 сентября, 2013 пользователем unknown Ссылка на комментарий Поделиться на другие сайты Поделиться
Functor Опубликовано 3 сентября, 2013 Жалоба Поделиться Опубликовано 3 сентября, 2013 Пробуйте:pc_additem(sd, &it, amount[i], LOG_TYPE_NONE);pc_payzeny(sd, price[i]*amount[i], LOG_TYPE_PICKDROP_PLAYER, NULL);npc_scriptcont(sd, npc_id, false); 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
unknown Опубликовано 3 сентября, 2013 Жалоба Поделиться Опубликовано 3 сентября, 2013 Пробуйте:pc_additem(sd, &it, amount[i], LOG_TYPE_NONE);pc_payzeny(sd, price[i]*amount[i], LOG_TYPE_PICKDROP_PLAYER, NULL);npc_scriptcont(sd, npc_id, false);Спасибо за оперативность и ответ.Все работает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Svisha Опубликовано 15 сентября, 2013 Жалоба Поделиться Опубликовано 15 сентября, 2013 (изменено) сам поправил Изменено 16 сентября, 2013 пользователем Svisha Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения