Jump to content

nejiko

Members
  • Posts

    7
  • Joined

  • Last visited

Profile Information

  • Gender
    Male

Recent Profile Visitors

2130 profile views

nejiko's Achievements

Poring

Poring (1/15)

0

Reputation

  1. 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
  2. ясно,а никто не расскажет? Открываем ollydbg ....что дальше?
  3. Здравствуйте народ! Есть ли способ реализовать цветные ники для еА??
  4. 1) какая строчка что именно снижать? 2)где в сорсах?? оружие не помагает! 3)сменил на все типы джобов не помагает! 4) все МВП варпаются! 5)гляну!
  5. У меня скопилось много вопросов которые я хотел бы решить! 1) на хай рейте получился передамаг Азуры! хочу сказать что искун с меня плохой!! что нашёл так 2 темы первая и вторая если нашёл то что нужно прокоментируйте как убрать передамаг?! 2) Как увеличить еффект хилла у скилла Санки(у пристов)??! 3)почему когда ставлю Вальккирия Брони такой тип 0xFFFFFFFF её не могут одеть ни Гансы ни Нины??! 4) увеличил в mob_db.txt ХП МВП монстрам получилась трабла! когда дамажишь по нему его через 2 секунды толи варпает толи выкидует??! (стоит мод полоска ХП у мобов так там показывает полоска либо красной либо вообще нету хп! я не понимаю! пробовал менять mvp_hp_rate: 100 таже ситуация! 5) когда в mmo.h пишу вместимость кафры не 600, а 1000 вес у игроков равен 0 но кафра так же и показывает 600??! вроде всё прошу всех не флудить! возможно нубские вопросы! и ищу плохо!но хотел бы получить помощи от вас! Афина 3ceam! нужна какето ещё информация спрашивайте! Зарание спасибо!
  6. Вобщем суть вопроса ясна в заглавии! тоесть новой профы в Ренивал! up
×
×
  • Create New...