

nejiko
Members-
Posts
7 -
Joined
-
Last visited
Profile Information
-
Gender
Male
Recent Profile Visitors
2278 profile views
nejiko's Achievements

Poring (1/15)
0
Reputation
-
Hi peoples, i bad speak to English! I have problems to SRC Vending 11 lvl! 1) 4>..\src\map\clif.c(15546): error C2065: USESKILL_FAIL_LEVEL: необъявленный идентификатор 2) 4>..\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: необъявленный идентификатор 3) 4>..\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: различные типы для формального и фактического параметров 2 I have to 3ceam To mod: [spoiler]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 later feature.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 file Index: 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 translations import: conf/import/msg_conf.txt Index: 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 file Index: 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 file Index: 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,Overcharge 39,1,0,0,0,0,0,10,0,no,0,0,0,none,0, MC_PUSHCART,Pushcart 40,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,Vending 42,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0, MC_MAMMONITE,Mammonite 43,0,0,0,0,0,0,10,0,no,0,0,0,none,0, AC_OWL,Owl's Eye 44,0,0,0,0,0,0,10,0,no,0,0,0,none,0, AC_VULTURE,Vulture's Eye Index: 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 <packet len>.W <message>.?B void clif_broadcast(struct block_list* bl, const char* mes, int len, int type, enum send_target target) @@ -11015,7 +11032,7 @@ /// 01ae <name id>.W void 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 = open void 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 input return; - 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[i].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 function static 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 data itemdb_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 #3504 const 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 currently Index: 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[i].itemid)) != NULL && item->nameid != ITEMID_ZENY) + c++; + } + if(c > 1) + clif_vend(sd,sd->vend_lvl); + else { + if(c) { + 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 system nullpo_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 uid clif_vendinglist(sd, id, vsd->vending); @@ -121,16 +128,57 @@ vend_list[i] = 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[i].nameid == vsd->vend_loot) + { + struct item *item; + item = &sd->status.inventory[i]; + 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[i]].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 list for( i = 0, cursor = 0; i < vsd->vend_num; i++ ) { [/spoiler] Help me please!! up
-
ясно,а никто не расскажет? Открываем ollydbg ....что дальше?
-
Здравствуйте народ! Есть ли способ реализовать цветные ники для еА??
-
1) какая строчка что именно снижать? 2)где в сорсах?? оружие не помагает! 3)сменил на все типы джобов не помагает! 4) все МВП варпаются! 5)гляну!
-
У меня скопилось много вопросов которые я хотел бы решить! 1) на хай рейте получился передамаг Азуры! хочу сказать что искун с меня плохой!! что нашёл так 2 темы первая и вторая если нашёл то что нужно прокоментируйте как убрать передамаг?! 2) Как увеличить еффект хилла у скилла Санки(у пристов)??! 3)почему когда ставлю Вальккирия Брони такой тип 0xFFFFFFFF её не могут одеть ни Гансы ни Нины??! 4) увеличил в mob_db.txt ХП МВП монстрам получилась трабла! когда дамажишь по нему его через 2 секунды толи варпает толи выкидует??! (стоит мод полоска ХП у мобов так там показывает полоска либо красной либо вообще нету хп! я не понимаю! пробовал менять mvp_hp_rate: 100 таже ситуация! 5) когда в mmo.h пишу вместимость кафры не 600, а 1000 вес у игроков равен 0 но кафра так же и показывает 600??! вроде всё прошу всех не флудить! возможно нубские вопросы! и ищу плохо!но хотел бы получить помощи от вас! Афина 3ceam! нужна какето ещё информация спрашивайте! Зарание спасибо!
-
Вобщем суть вопроса ясна в заглавии! тоесть новой профы в Ренивал! up