nejiko Опубликовано 28 июля, 2013 Жалоба Поделиться Опубликовано 28 июля, 2013 Здравствуйте! Помогите,я в SRC части вовсе не понимаю,решил поставить модификацию,появились Error-ы!1)4> clif.c4>..\src\map\clif.c(15544): error C2065: USESKILL_FAIL_LEVEL: необъявленный идентификатор4>..\src\map\clif.c(15544): error C2198: clif_skill_fail: слишком мало аргументов для вызоваВот этот кусок! } else {clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0);return 0;}2)4> skill.c4>..\src\map\skill.c(10091): error C2065: USESKILL_FAIL_LEVEL: необъявленный идентификатор4>..\src\map\skill.c(10091): error C2198: clif_skill_fail: слишком мало аргументов для вызова4>..\src\map\skill.c(10104): error C2065: USESKILL_FAIL_LEVEL: необъявленный идентификатор4>..\src\map\skill.c(10104): error C2198: clif_skill_fail: слишком мало аргументов для вызова4> status.c nullpo_ret(sd);if(nameid <= 0) {clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0);return 0;}3)4> vending.c4>..\src\map\vending.c(224): error C2065: LOG_TYPE_VENDING: необъявленный идентификатор4>..\src\map\vending.c(224): warning C4047: функция: "char *" отличается по уровням косвенного обращения от "int"4>..\src\map\vending.c(224): warning C4024: log_zeny: различные типы для формального и фактического параметров 24>..\src\map\vending.c(241): error C2065: LOG_TYPE_VENDING: необъявленный идентификатор4>..\src\map\vending.c(241): warning C4047: функция: "char *" отличается по уровням косвенного обращения от "int"4>..\src\map\vending.c(241): warning C4024: log_zeny: различные типы для формального и фактического параметров 26> int_party.c //Logs (V)ending Zeny [Lupus]log_zeny(vsd, LOG_TYPE_VENDING, sd, (int)z);pc_payzeny(sd, (int)z);В итоге!========== Перестроение всех: успешно: 3, с ошибками: 1, пропущено: 5 ==========Афина: 3ceamЧто еще нужно говорите!Вот моя папка SRCВот модификация!Index: conf/battle/feature.conf===================================================================--- conf/battle/feature.conf (revision 15154)+++ conf/battle/feature.conf (working copy)@@ -26,3 +26,12 @@// Search stores (Note 1)// Requires: 2010-08-03aRagexeRE or laterfeature.search_stores: on++// Enable or disable extended vending system? (Note 1)+extended_vending: yes+// Show currency's name in vending board? (Note 1)+show_item_vending: yes+// Show more info about buying? (Note 1)+ex_vending_info: yes+// Item ID for Zeny. Set to 0 if you don't want use Zeny.+item_zeny: 30000\ No newline at end of fileIndex: conf/msg_athena.conf===================================================================--- conf/msg_athena.conf (revision 15154)+++ conf/msg_athena.conf (working copy)@@ -535,5 +535,16 @@//...650: Unknown Job+// Extended Vending system+700: You do not have enough CashPoint+701: You do not have enough items+702: Seller has not enough space in your inventory+703: Seller can not take all the item+704: You have selected: %s+705: You've opened %s's shop. Sale is carried out: %s+706: Current Currency: %s+707: %s has bought '%s' in the amount of %d. Revenue: %d %s+708: Full revenue from %s is %d %s+//Custom translationsimport: conf/import/msg_conf.txtIndex: db/item_db2.txt===================================================================--- db/item_db2.txt (revision 15154)+++ db/item_db2.txt (working copy)@@ -61,3 +61,6 @@//==================================================================//2338,Wedding_Dress,Wedding Dress,5,43000,,500,,0,,0,0xFFFFFFFE,7,0,16,,0,1,0,{},{ setoption Option_Wedding,1; },{ setoption Option_Wedding,0; }//7170,Tuxedo,Tuxedo,5,43000,,10,,0,,0,0xFFFFFFFE,7,1,16,,0,1,0,{},{ setoption Option_Wedding,1; },{ setoption Option_Wedding,0; }++// Vending system+30000,Zeny,Zeny,3,,10,10,,,,,,,,,,,,,{},{},{}\ No newline at end of fileIndex: db/item_vending.txt===================================================================--- db/item_vending.txt (revision 0)+++ db/item_vending.txt (working copy)@@ -0,0 +1,11 @@+// Specific items for Vending System+// Format: ItemID++// TCG Card+7227+// Mithril Coin+// 674+// Silver Coin+// 675+// Bronze Coin+// 673\ No newline at end of fileIndex: db/skill_db.txt===================================================================--- db/skill_db.txt (revision 15154)+++ db/skill_db.txt (working copy)@@ -83,7 +83,7 @@38,0,0,0,0,0,0,10,0,no,0,0,0,none,0, MC_OVERCHARGE,Overcharge39,1,0,0,0,0,0,10,0,no,0,0,0,none,0, MC_PUSHCART,Pushcart40,1,6,4,0,0x1,0,1,1,no,0,0,0,none,0, MC_IDENTIFY,Item Appraisal-41,1,6,4,0,0x1,0,10,1,no,0,0,0,none,0, MC_VENDING,Vending+41,1,6,4,0,0x1,0,11,1,no,0,0,0,none,0, MC_VENDING,Vending42,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0, MC_MAMMONITE,Mammonite43,0,0,0,0,0,0,10,0,no,0,0,0,none,0, AC_OWL,Owl's Eye44,0,0,0,0,0,0,10,0,no,0,0,0,none,0, AC_VULTURE,Vulture's EyeIndex: db/skill_tree.txt===================================================================--- db/skill_tree.txt (revision 15154)+++ db/skill_tree.txt (working copy)@@ -79,7 +79,7 @@5,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#5,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#5,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-5,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+5,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#5,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#5,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#5,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#@@ -210,7 +210,7 @@10,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#10,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#10,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-10,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+10,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#10,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#10,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#10,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#@@ -486,7 +486,7 @@18,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#18,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#18,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-18,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+18,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#18,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#18,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#18,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#@@ -658,7 +658,7 @@23,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#23,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#23,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-23,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+23,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#23,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#23,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#23,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#@@ -807,7 +807,7 @@4006,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#4006,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#4006,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-4006,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+4006,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#4006,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#4006,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#4006,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#@@ -955,7 +955,7 @@4011,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#4011,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#4011,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-4011,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+4011,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#4011,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#4011,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#4011,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#@@ -1276,7 +1276,7 @@4019,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#4019,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#4019,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-4019,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+4019,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#4019,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#4019,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#4019,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#@@ -1507,7 +1507,7 @@4028,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#4028,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#4028,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-4028,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+4028,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#4028,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#4028,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#4028,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#@@ -1642,7 +1642,7 @@4033,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#4033,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#4033,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-4033,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+4033,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#4033,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#4033,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#4033,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#@@ -1926,7 +1926,7 @@4041,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#4041,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#4041,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-4041,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+4041,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#4041,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#4041,153,1,0,0,0,0,0,0,0,0,0,0 //MC_CARTREVOLUTION#Cart Revolution#4041,154,1,0,0,0,0,0,0,0,0,0,0 //MC_CHANGECART#Change Cart#@@ -2095,7 +2095,7 @@4045,38,10,37,3,0,0,0,0,0,0,0,0 //MC_OVERCHARGE#Overcharge#4045,39,10,36,5,0,0,0,0,0,0,0,0 //MC_PUSHCART#Pushcart#4045,40,1,0,0,0,0,0,0,0,0,0,0 //MC_IDENTIFY#Item Appraisal#-4045,41,10,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#+4045,41,11,39,3,0,0,0,0,0,0,0,0 //MC_VENDING#Vending#4045,42,10,0,0,0,0,0,0,0,0,0,0 //MC_MAMMONITE#Mammonite#4045,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye#4045,44,10,43,3,0,0,0,0,0,0,0,0 //AC_VULTURE#Vulture's Eye#Index: src/map/battle.c===================================================================--- src/map/battle.c (revision 15154)+++ src/map/battle.c (working copy)@@ -4023,6 +4023,11 @@{ "bg_magic_attack_damage_rate", &battle_config.bg_magic_damage_rate, 60, 0, INT_MAX, },{ "bg_misc_attack_damage_rate", &battle_config.bg_misc_damage_rate, 60, 0, INT_MAX, },{ "bg_flee_penalty", &battle_config.bg_flee_penalty, 20, 0, INT_MAX, },+// Extended Vending system+ { "extended_vending", &battle_config.extended_vending, 1, 0, 1, },+ { "show_item_vending", &battle_config.show_item_vending, 1, 0, 1, },+ { "ex_vending_info", &battle_config.ex_vending_info, 1, 0, 1, },+ { "item_zeny", &battle_config.item_zeny, 0, 0, MAX_ITEMDB, },};Index: src/map/battle.h===================================================================--- src/map/battle.h (revision 15154)+++ src/map/battle.h (working copy)@@ -497,6 +497,12 @@int bg_magic_damage_rate;int bg_misc_damage_rate;int bg_flee_penalty;++ // Extended Vending system+ int extended_vending;+ int show_item_vending;+ int ex_vending_info;+ int item_zeny;} battle_config;void do_init_battle(void);Index: src/map/clif.c===================================================================--- src/map/clif.c (revision 15154)+++ src/map/clif.c (working copy)@@ -5280,7 +5280,24 @@clif_notify_playerchat(sd, buf);}+void clif_displaymessagecolor(struct map_session_data *sd, const char* msg, unsigned long color)+{+ int fd;+ unsigned short len = strlen(msg) + 1;+ nullpo_retv(sd);++ color = (color & 0x0000FF) << 16 | (color & 0x00FF00) | (color & 0xFF0000) >> 16; // RGB to BGR+ fd = sd->fd;+ WFIFOHEAD(fd, len+12);+ WFIFOW(fd,0) = 0x2C1;+ WFIFOW(fd,2) = len+12;+ WFIFOL(fd,4) = 0;+ WFIFOL(fd,8) = color;+ memcpy(WFIFOP(fd,12), msg, len);+ WFIFOSET(fd, WFIFOW(fd,2));+}+/// Send broadcast message in yellow or blue without font formatting (ZC_BROADCAST)./// 009a .W .?Bvoid clif_broadcast(struct block_list* bl, const char* mes, int len, int type, enum send_target target)@@ -11015,7 +11032,7 @@/// 01ae .Wvoid clif_parse_SelectArrow(int fd,struct map_session_data *sd){- if (sd->menuskill_id != AC_MAKINGARROW)+ if (sd->menuskill_id != AC_MAKINGARROW && sd->menuskill_id != MC_VENDING)return;if (pc_istrading(sd)) {//Make it fail to avoid shop exploits where you sell something different than you see.@@ -11023,7 +11040,14 @@sd->menuskill_val = sd->menuskill_id = 0;return;}- skill_arrow_create(sd,RFIFOW(fd,2));+ switch( sd->menuskill_id ) {+ case AC_MAKINGARROW:+ skill_arrow_create(sd,RFIFOW(fd,2));+ break;+ case MC_VENDING: // Extended Vending system+ skill_vending(sd,RFIFOW(fd,2));+ break;+ }sd->menuskill_val = sd->menuskill_id = 0;}@@ -11701,11 +11725,18 @@/// 1 = openvoid clif_parse_OpenVending(int fd, struct map_session_data* sd){+ struct item_data *item = itemdb_exists(sd->vend_loot);short len = (short)RFIFOW(fd,2) - 85;const char* message = (char*)RFIFOP(fd,4);bool flag = (bool)RFIFOB(fd,84);const uint8* data = (uint8*)RFIFOP(fd,85);+ char out_msg[1024];+ if(battle_config.extended_vending && battle_config.show_item_vending && sd->vend_loot && item->nameid != ITEMID_ZENY){+ memset(out_msg, '\0', sizeof(out_msg));+ strcat(strcat(strcat(strcat(out_msg,"["),item->jname),"] "),message);+ }+if( sd->sc.data[sC_NOCHAT] && sd->sc.data[sC_NOCHAT]->val1&MANNER_NOROOM )return;if( map[sd->bl.m].flag.novending ) {@@ -11719,7 +11750,10 @@if( message[0] == '\0' ) // invalid inputreturn;- vending_openvending(sd, message, flag, data, len/8);+ if(battle_config.extended_vending && battle_config.show_item_vending && sd->vend_loot && item->nameid != ITEMID_ZENY)+ vending_openvending(sd, out_msg, flag, data, len/8);+ else+ vending_openvending(sd, message, flag, data, len/8);}@@ -15778,7 +15812,43 @@ShowDump(RFIFOP(fd,0), packet_len);}+// Extended Vending system+int clif_vend(struct map_session_data *sd, int skill_lv)+{+ struct item_data *item;+ int c, i, d = 0;+ int fd;+ nullpo_ret(sd);++ fd = sd->fd;++ WFIFOHEAD(fd, 8 * 8 + 8);+ WFIFOW(fd,0) = 0x1ad;+ if(battle_config.item_zeny){+ WFIFOW(fd, d * 2 + 4) = ITEMID_ZENY;+ d++;+ }+ for( c = d, i = 0; i < ARRAYLENGTH(item_vend); i ++ ) {++ if((item = itemdb_exists(item_vend.itemid)) != NULL && item->nameid != ITEMID_ZENY){+ WFIFOW(fd, c * 2 + 4) = item->nameid;+ c++;+ }+ }+ if( c > 0 ) {+ sd->menuskill_id = MC_VENDING;+ sd->menuskill_val = skill_lv;+ WFIFOW(fd,2) = c * 2 + 4;+ WFIFOSET(fd, WFIFOW(fd, 2));+ } else {+ clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0);+ return 0;+ }++ return 1;+}+/// Main client packet processing functionstatic int clif_parse(int fd){Index: src/map/clif.h===================================================================--- src/map/clif.h (revision 15154)+++ src/map/clif.h (working copy)@@ -561,6 +561,7 @@void clif_notify_chat(struct block_list* bl, const char* message, send_target target);void clif_notify_playerchat(struct map_session_data* sd, const char* message);void clif_displaymessage(const int fd, const char* mes);+void clif_displaymessagecolor(struct map_session_data *sd, const char* msg, unsigned long color);void clif_displayformatted(struct map_session_data* sd, const char* fmt, ...);void clif_disp_onlyself(struct map_session_data *sd, const char *mes, int len);void clif_disp_message(struct block_list* src, const char* mes, int len, enum send_target target);@@ -719,4 +720,8 @@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);+// Extended Vending system+int clif_vend(struct map_session_data *sd, int skill_lv);+#define VEND_COLOR 0x00FFFF // Cyan+#endif /* _CLIF_H_ */Index: src/map/itemdb.c===================================================================--- src/map/itemdb.c (revision 15154)+++ src/map/itemdb.c (working copy)@@ -689,7 +689,29 @@return true;}+// Extended Vending system+static bool itemdb_read_vending(char* fields[], int columns, int current)+{+ struct item_data* id;+ int nameid;+ nameid = atoi(fields[0]);+ if( ( id = itemdb_exists(nameid) ) == NULL )+ {+ ShowWarning("itemdb_read_vending: Invalid item id %d.\n", nameid);+ return false;+ }++ if( id->type == IT_ARMOR || id->type == IT_WEAPON )+ {+ ShowWarning("itemdb_read_vending: item id %d cannot be equipment or weapon.\n", nameid);+ return false;+ }++ item_vend[current].itemid = nameid;+ return true;+}+/*======================================* Applies gender restrictions according to settings. [skotlex]*======================================*/@@ -1007,6 +1029,7 @@sv_readdb(db_path, "item_trade.txt", ',', 3, 3, -1, &itemdb_read_itemtrade);sv_readdb(db_path, "item_delay.txt", ',', 2, 2, MAX_ITEMDELAYS, &itemdb_read_itemdelay);sv_readdb(db_path, "item_buyingstore.txt", ',', 1, 1, -1, &itemdb_read_buyingstore);+ sv_readdb(db_path, "item_vending.txt", ',', 1, 1, ARRAYLENGTH(item_vend), &itemdb_read_vending); // Extended Vending system}/*==========================================@@ -1059,6 +1082,7 @@itemdb_other->clear(itemdb_other, itemdb_final_sub);memset(itemdb_array, 0, sizeof(itemdb_array));+ memset(item_vend,0,sizeof(item_vend)); // Extended Vending system// read new dataitemdb_read();Index: src/map/itemdb.h===================================================================--- src/map/itemdb.h (revision 15154)+++ src/map/itemdb.h (working copy)@@ -6,6 +6,9 @@#include "../common/mmo.h" // ITEM_NAME_LENGTH+// 32k array entries in array (the rest goes to the db)+#define MAX_ITEMDB 0x8000+#define MAX_RANDITEM 11000// The maximum number of item delays@@ -92,6 +95,12 @@int qty; //Counts amount of items in the group.};+struct s_item_vend {+ int itemid;+};++struct s_item_vend item_vend[MAX_INVENTORY];+struct item_data* itemdb_searchname(const char *name);int itemdb_searchname_array(struct item_data** data, int size, const char *str);struct item_data* itemdb_load(int nameid);@@ -149,4 +158,7 @@void do_final_itemdb(void);int do_init_itemdb(void);+// Extended Vending system+#define ITEMID_ZENY battle_config.item_zeny+#endif /* _ITEMDB_H_ */Index: src/map/pc.h===================================================================--- src/map/pc.h (revision 15154)+++ src/map/pc.h (working copy)@@ -424,6 +424,10 @@// temporary debugging of bug #3504const char* delunit_prevfile;int delunit_prevline;++ // Extended Vending system+ int vend_loot;+ int vend_lvl;};//Update this max as necessary. 55 is the value needed for Super Baby currentlyIndex: src/map/skill.c===================================================================--- src/map/skill.c (revision 15154)+++ src/map/skill.c (working copy)@@ -10,6 +10,7 @@#include "../common/utils.h"#include "../common/ers.h"+#include "atcommand.h" // get_atcommand_level()#include "skill.h"#include "map.h"#include "path.h"@@ -4332,8 +4333,40 @@{ //Prevent vending of GMs with unnecessary Level to trade/drop. [skotlex]if ( !pc_can_give_items(pc_isGM(sd)) )clif_skill_fail(sd,skillid,USESKILL_FAIL_LEVEL,0);- else- clif_openvendingreq(sd,2+skilllv);+ else {+ if(battle_config.extended_vending && skilllv > 10){+ struct item_data *item;++ char output[1024];+ int c = 0, i, d = 0;+ sd->vend_lvl = skilllv;++ if(battle_config.item_zeny)+ d++;++ for( c = d, i = 0; i < ARRAYLENGTH(item_vend); i ++ ) {+ if((item = itemdb_exists(item_vend.itemid)) != NULL && item->nameid != ITEMID_ZENY)+ c++;+ }+ if(c > 1)+ clif_vend(sd,sd->vend_lvl);+ else {+ if© {+ item = itemdb_exists(battle_config.item_zeny?battle_config.item_zeny:item_vend[0].itemid);+ sd->vend_loot = item->nameid;+ sprintf(output,msg_txt(706),itemdb_jname(sd->vend_loot));+ clif_displaymessagecolor(sd,output,VEND_COLOR);+ clif_openvendingreq(sd,1+sd->vend_lvl);+ } else {+ sd->vend_loot = 0;+ clif_openvendingreq(sd,1+sd->vend_lvl);+ }+ }+ } else {+ sd->vend_loot = 0;+ clif_openvendingreq(sd,2+skilllv);+ }+ }}break;@@ -10319,6 +10352,36 @@return 1;}+// Extended Vending system+int skill_vending(struct map_session_data *sd, int nameid)+{+ struct item_data *item;+ char output[1024];++ nullpo_ret(sd);++ if(nameid <= 0) {+ clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0);+ return 0;+ }++ if(nameid > MAX_ITEMDB)+ return 0;++ sd->vend_loot = nameid;+ item = itemdb_exists(nameid);+ sprintf(output,msg_txt(704),item->jname);+ clif_displaymessagecolor(sd,output,VEND_COLOR);++ if ( !pc_can_give_items(pc_isGM(sd)) )+ clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0);+ else {+ clif_openvendingreq(sd,2+sd->vend_lvl);+ }++ return 0;+}+/*==========================================**------------------------------------------*/Index: src/map/skill.h===================================================================--- src/map/skill.h (revision 15154)+++ src/map/skill.h (working copy)@@ -1548,4 +1548,7 @@UNT_MAX = 0x190};+// Extended Vending system+int skill_vending( struct map_session_data *sd, int nameid);+#endif /* _SKILL_H_ */Index: src/map/vending.c===================================================================--- src/map/vending.c (revision 15154)+++ src/map/vending.c (working copy)@@ -47,6 +47,7 @@void vending_vendinglistreq(struct map_session_data* sd, int id){struct map_session_data* vsd;+ char output[1024]; // Extended Vending systemnullpo_retv(sd);if( (vsd = map_id2sd(id)) == NULL )@@ -60,6 +61,12 @@return;}+ // Extended Vending system+ if(battle_config.extended_vending && vsd->vend_loot){+ sprintf(output,msg_txt(705),vsd->status.name, itemdb_jname(vsd->vend_loot));+ clif_displaymessagecolor(sd,output,VEND_COLOR);+ }+sd->vended_id = vsd->vender_id; // register vending uidclif_vendinglist(sd, id, vsd->vending);@@ -121,16 +128,57 @@vend_list = j;z += ((double)vsd->vending[j].value * (double)amount);- if( z > (double)sd->status.zeny || z < 0. || z > (double)MAX_ZENY )- {- clif_buyvending(sd, idx, amount, 1); // you don't have enough zeny- return;- }- if( z + (double)vsd->status.zeny > (double)MAX_ZENY && !battle_config.vending_over_max )- {- clif_buyvending(sd, idx, vsd->vending[j].amount, 4); // too much zeny = overflow- return;+ // Extended Vending system+ if(battle_config.extended_vending){+ if(vsd->vend_loot == ITEMID_ZENY || !vsd->vend_loot) {+ if( z > (double)sd->status.zeny || z < 0. || z > (double)MAX_ZENY )+ {+ //clif_buyvending(sd, idx, amount, 1); // you don't have enough zeny+ return;+ }+ if( z + (double)vsd->status.zeny > (double)MAX_ZENY && !battle_config.vending_over_max )+ {+ clif_buyvending(sd, idx, vsd->vending[j].amount, 4); // too much zeny = overflow+ return;+ }+ } else {+ int k, loot_count = 0, vsd_w = 0;+ for(k = 0; k < MAX_INVENTORY; k++)+ if(sd->status.inventory[k].nameid == vsd->vend_loot)+ loot_count += sd->status.inventory[k].amount;++ if( z > loot_count || z < 0)+ {+ clif_displaymessagecolor(sd,msg_txt(701),VEND_COLOR);+ return;+ }++ if(pc_inventoryblank(vsd) <= 0)+ {+ clif_displaymessagecolor(sd,msg_txt(702),VEND_COLOR);+ return;+ }++ vsd_w += itemdb_weight(vsd->vend_loot) * (int)z;++ if(vsd_w + vsd->weight > vsd->max_weight)+ {+ clif_displaymessagecolor(sd,msg_txt(703),VEND_COLOR);+ return;+ }+ }+ } else {+ if( z > (double)sd->status.zeny || z < 0. || z > (double)MAX_ZENY )+ {+ clif_buyvending(sd, idx, amount, 1); // you don't have enough zeny+ return;+ }+ if( z + (double)vsd->status.zeny > (double)MAX_ZENY && !battle_config.vending_over_max )+ {+ clif_buyvending(sd, idx, vsd->vending[j].amount, 4); // too much zeny = overflow+ return;+ }}w += itemdb_weight(vsd->status.cart[idx].nameid) * amount;if( w + sd->weight > sd->max_weight )@@ -167,20 +215,49 @@}}- //Logs (V)ending Zeny [Lupus]- log_zeny(vsd, LOG_TYPE_VENDING, sd, (int)z);+ // Extended Vending system+ if(battle_config.extended_vending){+ if(vsd->vend_loot == ITEMID_ZENY || !vsd->vend_loot) {+ //Logs (V)ending Zeny [Lupus]+ log_zeny(vsd, LOG_TYPE_VENDING, sd, (int)z);+ pc_payzeny(sd, (int)z);+ if( battle_config.vending_tax )+ z -= z * (battle_config.vending_tax/10000.);+ pc_getzeny(vsd, (int)z);+ } else {+ for( i = 0; i < MAX_INVENTORY; i++)+ if(sd->status.inventory.nameid == vsd->vend_loot)+ {+ struct item *item;+ item = &sd->status.inventory;+ pc_additem(vsd,item,(int)z);+ }+ pc_delitem(sd,pc_search_inventory(sd, vsd->vend_loot),(int)z,0,6);+ }+ } else {+ //Logs (V)ending Zeny [Lupus]+ log_zeny(vsd, LOG_TYPE_VENDING, sd, (int)z);+ pc_payzeny(sd, (int)z);+ if( battle_config.vending_tax )+ z -= z * (battle_config.vending_tax/10000.);- pc_payzeny(sd, (int)z);- if( battle_config.vending_tax )- z -= z * (battle_config.vending_tax/10000.);- pc_getzeny(vsd, (int)z);+ pc_getzeny(vsd, (int)z);+ }for( i = 0; i < count; i++ ){short amount = *(uint16*)(data + 4*i + 0);short idx = *(uint16*)(data + 4*i + 2);+ const char *item_name;++ double rev = 0.;idx -= 2;+ if(battle_config.ex_vending_info){ // Extended Vending system+ item_name = itemdb_jname(vsd->status.cart[idx].nameid);+ rev = ((double)vsd->vending[vend_list].value * (double)amount);+ }+//Logs sold (V)ending items [Lupus]log_pick(&vsd->bl, LOG_TYPE_VENDING, vsd->status.cart[idx].nameid, -amount, &vsd->status.cart[idx]);log_pick( &sd->bl, LOG_TYPE_VENDING, vsd->status.cart[idx].nameid, amount, &vsd->status.cart[idx]);@@ -195,11 +272,20 @@if( battle_config.buyer_name ){char temp[256];- sprintf(temp, msg_txt(265), sd->status.name);+ if(battle_config.ex_vending_info) // Extended Vending system+ sprintf(temp, msg_txt(707), sd->status.name, item_name, amount, (int)(rev -= rev * (battle_config.vending_tax/10000.)), vsd->vend_loot?itemdb_jname(vsd->vend_loot):"Zeny");+ else+ sprintf(temp, msg_txt(265), sd->status.name);clif_disp_onlyself(vsd,temp,strlen(temp));}}+ if(battle_config.ex_vending_info){ // Extended Vending system+ char temp[256];+ sprintf(temp, msg_txt(708), sd->status.name, (int)z, vsd->vend_loot?itemdb_jname(vsd->vend_loot):"Zeny");+ clif_disp_onlyself(vsd,temp,strlen(temp));+ }+// compact the vending listfor( i = 0, cursor = 0; i < vsd->vend_num; i++ ){Подскажите что делать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Nezdeshniy Опубликовано 28 июля, 2013 Жалоба Поделиться Опубликовано 28 июля, 2013 (изменено) Когда люди научатся читать что пишет компилятор или афина, ну он же пишет понятным языком что необъявлена переменная USESKILL_FAIL_LEVEL.У тебя используется переменная в clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0) MC_VENDING посмотри как именно она обьявлена, хотя в твоем случаи это может быть немного сложнее.Далее все ошибки по большей части связаны с необъявленой переменной.LOG_TYPE_VENDING - тоже надо обьявить, лично мне не могу сказать по примерам вашим куда стоит копать в плане обьявления идентификаторов лень дальше искать решение.Ну ладно, исходник сделан для афины revision 15154 если я не ошибаюсь, у вас не афина выход - качаем афину и смотрим в ней что и как реализовано в зависимости от ваших ошибок в часности ищем как обьявлены идентификаторы USESKILL_FAIL_LEVEL и LOG_TYPE_VENDING после смотрим на что именно изменили в вашем эмуляторе эти переменные либо добавляемесли их удалили и смотрим внимательно принцип реализации типа параметров, ну собственно это все, дальше либо сами либо за вас ктото исправит. Изменено 28 июля, 2013 пользователем Nezdeshniy Ссылка на комментарий Поделиться на другие сайты Поделиться
nejiko Опубликовано 28 июля, 2013 Автор Жалоба Поделиться Опубликовано 28 июля, 2013 Когда люди научатся читать что пишет компилятор или афина, ну он же пишет понятным языком что необъявлена переменная USESKILL_FAIL_LEVEL.У тебя используется переменная в clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0) MC_VENDING посмотри как именно она обьявлена, хотя в твоем случаи это может быть немного сложнее.Далее все ошибки по большей части связаны с необъявленой переменной.LOG_TYPE_VENDING - тоже надо обьявить, лично мне не могу сказать по примерам вашим куда стоит копать в плане обьявления идентификаторов лень дальше искать решение.Ну ладно, исходник сделан для афины revision 15154 если я не ошибаюсь, у вас не афина выход - качаем афину и смотрим в ней что и как реализовано в зависимости от ваших ошибок в часности ищем как обьявлены идентификаторы USESKILL_FAIL_LEVEL и LOG_TYPE_VENDING после смотрим на что именно изменили в вашем эмуляторе эти переменные либо добавляемесли их удалили и смотрим внимательно принцип реализации типа параметров, ну собственно это все, дальше либо сами либо за вас ктото исправит.Поясни где смотреть как она объявлена? Ссылка на комментарий Поделиться на другие сайты Поделиться
Nezdeshniy Опубликовано 28 июля, 2013 Жалоба Поделиться Опубликовано 28 июля, 2013 (изменено) Когда люди научатся читать что пишет компилятор или афина, ну он же пишет понятным языком что необъявлена переменная USESKILL_FAIL_LEVEL.У тебя используется переменная в clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0) MC_VENDING посмотри как именно она обьявлена, хотя в твоем случаи это может быть немного сложнее.Далее все ошибки по большей части связаны с необъявленой переменной.LOG_TYPE_VENDING - тоже надо обьявить, лично мне не могу сказать по примерам вашим куда стоит копать в плане обьявления идентификаторов лень дальше искать решение.Ну ладно, исходник сделан для афины revision 15154 если я не ошибаюсь, у вас не афина выход - качаем афину и смотрим в ней что и как реализовано в зависимости от ваших ошибок в часности ищем как обьявлены идентификаторы USESKILL_FAIL_LEVEL и LOG_TYPE_VENDING после смотрим на что именно изменили в вашем эмуляторе эти переменные либо добавляемесли их удалили и смотрим внимательно принцип реализации типа параметров, ну собственно это все, дальше либо сами либо за вас ктото исправит.Поясни где смотреть как она объявлена?Ну для начала проверить skill.h так как насколько я помню и надеюсь НЕ ошибаюсь именно там большая часть переменных хранится, а кроме этого в самом файле есть список подключаемых списков:#include "../common/utils.h"#include "../common/ers.h"+#include "atcommand.h" // get_atcommand_level()#include "skill.h"#include "map.h"#include "path.h"Если нету в первом значит где то там искать надо. Изменено 28 июля, 2013 пользователем Nezdeshniy Ссылка на комментарий Поделиться на другие сайты Поделиться
nejiko Опубликовано 28 июля, 2013 Автор Жалоба Поделиться Опубликовано 28 июля, 2013 у меня что-то 100% не совпадает даже если смотреть по msg_athena.conf650: Baby Shadow Chaser651: Expanded Super Novice652: Expanded Super Baby653: Kagerou654: Oboro655: Unknown Job// Extended Vending system700: You do not have enough CashPoint701: You do not have enough items702: Seller has not enough space in your inventory703: Seller can not take all the item704: You have selected: %s705: You've opened %s's shop. Sale is carried out: %s706: Current Currency: %s707: %s has bought '%s' in the amount of %d. Revenue: %d %s708: Full revenue from %s is %d %s// Dragon Mount700: You have mounted a Dragon.701: This player cannot mount a Dragon with his/her current job.702: This player's Dragon has been released.703: You cannot mount a Dragon while in disguise.// Ranger Warg704: You have obtained a Warg.705: This player cannot have a Warg with his/her current job.706: This player's Warg has been released.707: You cannot mount a Warg while in disguise.708: You cannot have a Warg and a Warg Mount at the same time.709: You cannot have a Warg while you have a Falcon Ссылка на комментарий Поделиться на другие сайты Поделиться
nejiko Опубликовано 28 июля, 2013 Автор Жалоба Поделиться Опубликовано 28 июля, 2013 вобщем тему клозет,я удалил модификацию,спасибо за помощь! Ссылка на комментарий Поделиться на другие сайты Поделиться
wl.illusion Опубликовано 28 июля, 2013 Жалоба Поделиться Опубликовано 28 июля, 2013 (изменено) Сборище нубов, я уже говорил, что версия 3ceam старьё, ну вы хотя бы скачайте ревизию для которой писался мод и сравните, что было изменено.Мне очень не нравятся нубоадмины, поэтому подсказка простая — сравните разницу в функциях у 3ceam и ревизии под которой писался мод.Удачного просвещения. Изменено 28 июля, 2013 пользователем wl.illusion Ссылка на комментарий Поделиться на другие сайты Поделиться
nejiko Опубликовано 28 июля, 2013 Автор Жалоба Поделиться Опубликовано 28 июля, 2013 проблема решена нашел патч такой системы под 3сеам от LilithВот кому нужна будет! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения