Перейти к содержанию

Vending за TCG | Помогите при компиле баги!


Рекомендуемые сообщения

Здравствуйте! Помогите,я в SRC части вовсе не понимаю,решил поставить модификацию,появились Error-ы!

1)

4> clif.c

4>..\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.c

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: необъявленный идентификатор

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.c

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

4>..\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: различные типы для формального и фактического параметров 2

6> 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 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 .W .?B

void clif_broadcast(struct block_list* bl, const char* mes, int len, int type, enum send_target target)

@@ -11015,7 +11032,7 @@

/// 01ae .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.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.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 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 = 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 list

for( i = 0, cursor = 0; i < vsd->vend_num; i++ )

{

Подскажите что делать?

Ссылка на комментарий
Поделиться на другие сайты

Когда люди научатся читать что пишет компилятор или афина, ну он же пишет понятным языком что необъявлена переменная 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
Ссылка на комментарий
Поделиться на другие сайты

Когда люди научатся читать что пишет компилятор или афина, ну он же пишет понятным языком что необъявлена переменная 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 после смотрим на что именно изменили в вашем эмуляторе эти переменные либо добавляемесли их удалили и смотрим внимательно принцип реализации типа параметров, ну собственно это все, дальше либо сами либо за вас ктото исправит.

Поясни где смотреть как она объявлена?

Ссылка на комментарий
Поделиться на другие сайты

Когда люди научатся читать что пишет компилятор или афина, ну он же пишет понятным языком что необъявлена переменная 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"

Если нету в первом значит где то там искать надо.

Изменено пользователем Nezdeshniy
Ссылка на комментарий
Поделиться на другие сайты

у меня что-то 100% не совпадает даже если смотреть по msg_athena.conf


650: Baby Shadow Chaser
651: Expanded Super Novice
652: Expanded Super Baby
653: Kagerou
654: Oboro
655: 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
// Dragon Mount
700: 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 Warg
704: 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

Ссылка на комментарий
Поделиться на другие сайты

Сборище нубов, я уже говорил, что версия 3ceam старьё, ну вы хотя бы скачайте ревизию для которой писался мод и сравните, что было изменено.

Мне очень не нравятся нубоадмины, поэтому подсказка простая — сравните разницу в функциях у 3ceam и ревизии под которой писался мод.

Удачного просвещения.

Изменено пользователем wl.illusion
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика