Jump to content

nejiko

Members
  • Posts

    7
  • Joined

  • Last visited

Posts posted by nejiko

  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. 1) какая строчка что именно снижать?

    2)где в сорсах?? оружие не помагает!

    3)сменил на все типы джобов не помагает!

    4) все МВП варпаются!

    5)гляну!

  3. У меня скопилось много вопросов которые я хотел бы решить!

    1) на хай рейте получился передамаг Азуры! хочу сказать что искун с меня плохой!! что нашёл так 2 темы первая и вторая если нашёл то что нужно прокоментируйте как убрать передамаг?!

    2) Как увеличить еффект хилла у скилла Санки(у пристов)??!

    3)почему когда ставлю Вальккирия Брони такой тип 0xFFFFFFFF её не могут одеть ни Гансы ни Нины??!

    4) увеличил в mob_db.txt ХП МВП монстрам получилась трабла! когда дамажишь по нему его через 2 секунды толи варпает толи выкидует??! (стоит мод полоска ХП у мобов так там показывает полоска либо красной либо вообще нету хп! я не понимаю! пробовал менять mvp_hp_rate: 100 таже ситуация!

    5) когда в mmo.h пишу вместимость кафры не 600, а 1000 вес у игроков равен 0 но кафра так же и показывает 600??!

    вроде всё прошу всех не флудить! возможно нубские вопросы! и ищу плохо!но хотел бы получить помощи от вас!

    Афина 3ceam!

    нужна какето ещё информация спрашивайте!

    Зарание спасибо!

×
×
  • Create New...