Index: map/pc.h =================================================================== --- map/pc.h (revision 17327) +++ map/pc.h (working copy) @@ -515,6 +515,12 @@ const char* delunit_prevfile; int delunit_prevline; + /** + * Extended Vending system [Lilith] + **/ + int vend_loot; + int vend_lvl; + }; //Update this max as necessary. 55 is the value needed for Super Baby currently Index: map/clif.c =================================================================== --- map/clif.c (revision 17327) +++ map/clif.c (working copy) @@ -5478,6 +5478,7 @@ aFree(buf); } + /*========================================== * Displays a message on a 'bl' to all it's nearby clients * 008d .W L (ZC_NOTIFY_CHAT) @@ -8790,7 +8791,6 @@ WFIFOSET(fd, WFIFOW(fd, 2)); } - /// Display msgstringtable.txt string (ZC_MSG). /// 0291 .W void clif_msg(struct map_session_data* sd, unsigned short id) @@ -11246,6 +11246,9 @@ case GC_POISONINGWEAPON: skill_poisoningweapon(sd,RFIFOW(fd,2)); break; + case MC_VENDING: // Extended Vending system [Lilith] + skill_vending(sd,RFIFOW(fd,2)); + break; case NC_MAGICDECOY: skill_magicdecoy(sd,RFIFOW(fd,2)); break; @@ -11902,13 +11905,20 @@ /// 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( !flag ) sd->state.prevend = 0; + + if(battle_config.extended_vending && battle_config.show_item_vending && sd->vend_loot){ + 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; @@ -11924,7 +11934,10 @@ if( message[0] == '\0' ) // invalid input return; - vending_openvending(sd, message, data, len/8); + if(battle_config.extended_vending && battle_config.show_item_vending && sd->vend_loot) + vending_openvending(sd, out_msg, data, len/8); + else + vending_openvending(sd, message, data, len/8); } @@ -16203,6 +16216,50 @@ WFIFOSET(fd, packet_len(0x7e2)); #endif } + + +/** + * Extended Vending system [Lilith] + **/ +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++; + } + if(battle_config.item_cash){ + WFIFOW(fd, d * 2 + 4) = ITEMID_CASH; + d++; + } + for( c = d, i = 0; i < ARRAYLENGTH(item_vend); i ++ ) { + if((item = itemdb_exists(item_vend[i].itemid)) != NULL && + item->nameid != ITEMID_ZENY && item->nameid != ITEMID_CASH){ + 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; +} + /*========================================== * used by SC_AUTOSHADOWSPELL * RFIFOL(fd,2) - flag (currently not used) Index: map/clif.h =================================================================== --- map/clif.h (revision 17327) +++ map/clif.h (working copy) @@ -783,4 +783,11 @@ #define clif_menuskill_clear(sd) (sd)->menuskill_id = (sd)->menuskill_val = (sd)->menuskill_val2 = 0; +/** + * Extended Vending system [Lilith] + **/ +int clif_vend(struct map_session_data *sd, int skill_lv); +#define VEND_COLOR 0x00FFFF // Cyan + + #endif /* _CLIF_H_ */ Index: map/itemdb.c =================================================================== --- map/itemdb.c (revision 17327) +++ map/itemdb.c (working copy) @@ -927,8 +927,33 @@ return; } +/** + * Extended Vending system [Lilith] + **/ +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] *======================================*/ @@ -1341,6 +1366,7 @@ sv_readdb(db_path, "item_delay.txt", ',', 2, 2, -1, &itemdb_read_itemdelay); sv_readdb(db_path, "item_stack.txt", ',', 3, 3, -1, &itemdb_read_stack); sv_readdb(db_path, DBPATH"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 [Lilith] sv_readdb(db_path, "item_nouse.txt", ',', 3, 3, -1, &itemdb_read_nouse); itemdb_uid_load(); @@ -1410,6 +1436,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 [Lilith] // read new data itemdb_read(); Index: map/itemdb.h =================================================================== --- map/itemdb.h (revision 17327) +++ map/itemdb.h (working copy) @@ -165,6 +165,11 @@ bool isRef;/* whether this struct is a reference or the master */ }; +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); @@ -236,4 +241,10 @@ void do_final_itemdb(void); int do_init_itemdb(void); +/** + * Extended Vending system [Lilith] + **/ +#define ITEMID_ZENY battle_config.item_zeny +#define ITEMID_CASH battle_config.item_cash + #endif /* _ITEMDB_H_ */ Index: map/skill.c =================================================================== --- map/skill.c (revision 17327) +++ map/skill.c (working copy) @@ -6219,12 +6219,46 @@ case MC_VENDING: if(sd) - { //Prevent vending of GMs with unnecessary Level to trade/drop. [Skotlex] - if ( !pc_can_give_items(sd) ) - clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); - else { - sd->state.prevend = 1; - clif_openvendingreq(sd,2+skill_lv); + { + if ( !pc_can_give_items(sd) ) //Prevent vending of GMs with unnecessary Level to trade/drop. [Skotlex] + clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0); + else { // Extended Vending system [Lilith] + if(battle_config.extended_vending){ + struct item_data *item; + char output[1024]; + int c = 0, i, d = 0; + + sd->vend_lvl = skill_lv; + if(battle_config.item_zeny) + d++; + if(battle_config.item_cash) + d++; + for( c = d, i = 0; i < ARRAYLENGTH(item_vend); i ++ ) { + if((item = itemdb_exists(item_vend[i].itemid)) != NULL && + item->nameid != ITEMID_ZENY && item->nameid != ITEMID_CASH) + c++; + } + + if(c > 1) + clif_vend(sd,sd->vend_lvl); + else { + sd->state.prevend = 1; + if(c) { + item = itemdb_exists(battle_config.item_zeny?battle_config.item_zeny:battle_config.item_cash?battle_config.item_cash:item_vend[0].itemid); + sd->vend_loot = item->nameid; + sprintf(output,msg_txt(sd,706),itemdb_jname(sd->vend_loot)); + clif_colormes(sd,VEND_COLOR,output); + clif_openvendingreq(sd,2+sd->vend_lvl); + } else { + sd->vend_loot = 0; + clif_openvendingreq(sd,2+sd->vend_lvl); + } + } + } else { + sd->vend_loot = 0; + sd->state.prevend = 1; + clif_openvendingreq(sd,2+skill_lv); + } } } break; @@ -15732,6 +15766,40 @@ } /** + * Extended Vending system [Lilith] + **/ +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(sd,704),item->jname); + clif_colormes(sd,VEND_COLOR,output); + + if ( !pc_can_give_items(sd) ) + clif_skill_fail(sd,MC_VENDING,USESKILL_FAIL_LEVEL,0); + else { + sd->state.prevend = 1; + clif_openvendingreq(sd,2+sd->vend_lvl); + } + + return 0; +} + +/** * @see DBApply */ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap) Index: map/skill.h =================================================================== --- map/skill.h (revision 17327) +++ map/skill.h (working copy) @@ -66,7 +66,7 @@ INF2_GUILD_ONLY = 0x0800, INF2_NO_ENEMY = 0x1000, INF2_NOLP = 0x2000, // Spells that can ignore Land Protector - INF2_CHORUS_SKILL = 0x4000, // Chorus skill + INF2_CHORUS_SKILL = 0x4000, // Chorus skill }; //Walk intervals at which chase-skills are attempted to be triggered. @@ -1900,4 +1900,9 @@ void skill_combo_toogle_inf(struct block_list* bl, uint16 skill_id, int inf); void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int tick); +/** + * Extended Vending system [Lilith] + **/ +int skill_vending( struct map_session_data *sd, int nameid); + #endif /* _SKILL_H_ */ Index: map/vending.c =================================================================== --- map/vending.c (revision 17327) +++ map/vending.c (working copy) @@ -48,6 +48,7 @@ void vending_vendinglistreq(struct map_session_data* sd, int id) { struct map_session_data* vsd; + char output[1024]; // Extended Vending system [Lilith] nullpo_retv(sd); if( (vsd = map_id2sd(id)) == NULL ) @@ -61,6 +62,14 @@ return; } + /** + * Extended Vending system [Lilith] + **/ + if(battle_config.extended_vending && vsd->vend_loot){ + sprintf(output,msg_txt(sd,705),vsd->status.name, itemdb_jname(vsd->vend_loot)); + clif_colormes(sd,VEND_COLOR,output); + } + sd->vended_id = vsd->vender_id; // register vending uid clif_vendinglist(sd, id, vsd->vending); @@ -122,15 +131,62 @@ 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 [Lilith] + **/ + 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 if(vsd->vend_loot == ITEMID_CASH){ + if(z > sd->cashPoints || z < 0. || z > (double)MAX_ZENY ) { + clif_colormes(sd,VEND_COLOR,msg_txt(sd,700)); + 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_colormes(sd,VEND_COLOR,msg_txt(sd,701)); + return; + } + if(pc_inventoryblank(vsd) <= 0) + { + clif_colormes(sd,VEND_COLOR,msg_txt(sd,702)); + return; + } + vsd_w += itemdb_weight(vsd->vend_loot) * (int)z; + if(vsd_w + vsd->weight > vsd->max_weight) + { + clif_colormes(sd,VEND_COLOR,msg_txt(sd,703)); + 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; @@ -167,18 +223,55 @@ return; //too many items } } + + /** + * Extended Vending system [Lilith] + **/ + if(battle_config.extended_vending){ + if(vsd->vend_loot == ITEMID_ZENY || !vsd->vend_loot) { + + //Logs (V)ending Zeny [Lupus] + + pc_payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd); + if( battle_config.vending_tax ) + z -= z * (battle_config.vending_tax/10000.); + pc_getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd); + + } else if(vsd->vend_loot == ITEMID_CASH) { + pc_paycash(sd,(int)z,0,LOG_TYPE_COMMAND); + pc_getcash(vsd,(int)z,0,LOG_TYPE_COMMAND); + } 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, LOG_TYPE_VENDING); + } + pc_delitem(sd,pc_search_inventory(sd, vsd->vend_loot),(int)z,0,6, LOG_TYPE_VENDING); + + } + } else { + //Logs (V)ending Zeny [Lupus] + pc_payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd); + if( battle_config.vending_tax ) + z -= z * (battle_config.vending_tax/10000.); + pc_getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd); + } - pc_payzeny(sd, (int)z, LOG_TYPE_VENDING, vsd); - if( battle_config.vending_tax ) - z -= z * (battle_config.vending_tax/10000.); - pc_getzeny(vsd, (int)z, LOG_TYPE_VENDING, sd); - 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 [Lilith] + item_name = itemdb_jname(vsd->status.cart[idx].nameid); + rev = ((double)vsd->vending[vend_list[i]].value * (double)amount); + } + // vending item pc_additem(sd, &vsd->status.cart[idx], amount, LOG_TYPE_VENDING); vsd->vending[vend_list[i]].amount -= amount; @@ -189,11 +282,20 @@ if( battle_config.buyer_name ) { char temp[256]; - sprintf(temp, msg_txt(sd,265), sd->status.name); + if(battle_config.ex_vending_info) // Extended Vending system [Lilith] + sprintf(temp, msg_txt(sd,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(sd,265), sd->status.name); clif_disp_onlyself(vsd,temp,strlen(temp)); } } + if(battle_config.ex_vending_info){ // Extended Vending system [Lilith] + char temp[256]; + sprintf(temp, msg_txt(sd,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++ ) { Index: map/battleground.h =================================================================== --- map/battleground.h (revision 17327) +++ map/battleground.h (working copy) @@ -7,7 +7,7 @@ #include "../common/mmo.h" // struct party #include "guild.h" -#define MAX_BG_MEMBERS 30 +#define MAX_BG_MEMBERS 200 struct battleground_member_data { unsigned short x, y; Index: map/mob.h =================================================================== --- map/mob.h (revision 17327) +++ map/mob.h (working copy) @@ -16,7 +16,7 @@ // Change this to increase the table size in your mob_db to accomodate a larger mob database. // Be sure to note that IDs 4001 to 4048 are reserved for advanced/baby/expanded classes. // Notice that the last 1000 entries are used for player clones, so always set this to desired value +1000 -#define MAX_MOB_DB 5000 +#define MAX_MOB_DB 10000 //The number of drops all mobs have and the max drop-slot that the steal skill will attempt to steal from. #define MAX_MOB_DROP 10 Index: map/script.c =================================================================== --- map/script.c (revision 17327) +++ map/script.c (working copy) @@ -17678,6 +17678,81 @@ return 0; } +// createbgid , , , , ; +BUILDIN_FUNC(createbgid) { + unsigned int bg_id; + if ( ( bg_id = bg_create( mapindex_name2id( script_getstr(st,2) ), script_getnum(st,3), script_getnum(st,4), script_getstr(st,5), script_getstr(st,6) ) ) > 0 ) + script_pushint( st, bg_id ); + else + script_pushint( st, 0 ); + return 0; +} + +// setbgid {, }; +// setbgid {, }; +BUILDIN_FUNC(setbgid) { + unsigned int bg_id = script_getnum(st,2); + struct battleground_data *bg = bg_team_search( bg_id ); + struct map_session_data *sd; + if ( script_hasdata( st, 3 ) ) { + if ( data_isstring( script_getdata(st,3) ) ) + sd = map_nick2sd( script_getstr(st,3) ); + else + sd = map_id2sd( script_getnum(st,3) ); + } else + sd = script_rid2sd(st); + if ( !sd ) { + script_pushint( st, -3 ); // player no attach + return 0; + } + if ( !bg && bg_id > 0 ) { + script_pushint( st, -1 ); // battleground team haven't created + return 0; + } + if ( bg_id && sd->bg_id == bg_id ) { + script_pushint( st, -5 ); // the player has already join this battleground team + return 0; + } + if ( sd->bg_id ) + bg_team_leave( sd, 0 ); + if ( bg_id == 0 ) { + script_pushint( st, 0 ); + return 0; + } + if ( !bg_team_join( bg_id, sd ) ) + script_pushint( st, -2 ); // cannot join anymore, because has reached MAX_BG_MEMBERS + else + script_pushint( st, bg_id ); + return 0; +} + +// getbgusers ; +BUILDIN_FUNC(getbgusers) { + struct battleground_data *bg = bg_team_search( script_getnum(st,2) ); + int i; + if ( !bg ) { + script_pushint( st, -1 ); + return 0; + } + for ( i = 0; bg->members[i].sd; i++ ) + mapreg_setreg( reference_uid( add_str("$@arenamembers"), i ), bg->members[i].sd->bl.id ); + mapreg_setreg( add_str("$@arenamembersnum"), i ); + script_pushint( st, i ); + return 0; +} + +// bg_kickall ; +BUILDIN_FUNC(bg_kickall) { + struct battleground_data *bg = bg_team_search( script_getnum(st,2) ); + int i; + if ( bg ) { + for ( i = 0; bg->members[i].sd; i++ ) + bg_team_leave( bg->members[i].sd , 0 ); + } + return 0; +} + + // declarations that were supposed to be exported from npc_chat.c #ifdef PCRE_SUPPORT BUILDIN_FUNC(defpattern); @@ -18144,5 +18219,9 @@ BUILDIN_DEF(checkquest, "i?"), BUILDIN_DEF(changequest, "ii"), BUILDIN_DEF(showevent, "ii"), + BUILDIN_DEF(createbgid,"siiss"), + BUILDIN_DEF(setbgid,"i?"), + BUILDIN_DEF(getbgusers,"i"), + BUILDIN_DEF(bg_kickall,"i"), {NULL,NULL,NULL}, -}; +}; \ No newline at end of file Index: map/battle.c =================================================================== --- map/battle.c (revision 17327) +++ map/battle.c (working copy) @@ -5931,6 +5931,11 @@ { "atcommand_max_stat_bypass", &battle_config.atcommand_max_stat_bypass, 0, 0, 100, }, { "skill_amotion_leniency", &battle_config.skill_amotion_leniency, 90, 0, 300 }, { "mvp_tomb_enabled", &battle_config.mvp_tomb_enabled, 1, 0, 1 }, + { "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, }, + { "item_cash", &battle_config.item_cash, 0, 0, MAX_ITEMDB, }, { "feature.atcommand_suggestions", &battle_config.atcommand_suggestions_enabled, 0, 0, 1 }, { "min_npc_vendchat_distance", &battle_config.min_npc_vendchat_distance, 3, 0, 100 }, { "atcommand_mobinfo_type", &battle_config.atcommand_mobinfo_type, 0, 0, 1 }, Index: map/battle.h =================================================================== --- map/battle.h (revision 17327) +++ map/battle.h (working copy) @@ -488,6 +488,12 @@ int item_enabled_npc; int item_onfloor; // Whether to drop an undroppable item on the map or destroy it if inventory is full. int bowling_bash_area; + int extended_vending; + int show_item_vending; + int ex_vending_info; + int item_zeny; + int item_cash; + } battle_config; void do_init_battle(void); Index: map/map.h =================================================================== --- map/map.h (revision 17327) +++ map/map.h (working copy) @@ -44,7 +44,7 @@ #define NATURAL_HEAL_INTERVAL 500 #define MIN_FLOORITEM 2 #define MAX_FLOORITEM START_ACCOUNT_NUM -#define MAX_LEVEL 160 +#define MAX_LEVEL 175 #define MAX_DROP_PER_MAP 48 #define MAX_IGNORE_LIST 20 // official is 14 #define MAX_VENDING 12 Index: common/mmo.h =================================================================== --- common/mmo.h (revision 17327) +++ common/mmo.h (working copy) @@ -47,7 +47,7 @@ // 20120307 - 2012-03-07aRagexeRE+ - 0x970 #ifndef PACKETVER - #define PACKETVER 20120410 + #define PACKETVER 20130320 //#define PACKETVER 20130320 //#define PACKETVER 20111116 #endif @@ -81,9 +81,9 @@ #define MAX_ZENY 1000000000 #define MAX_FAME 1000000000 #define MAX_CART 100 -#define MAX_SKILL 3100 +#define MAX_SKILL 5100 #define GLOBAL_REG_NUM 256 // max permanent character variables per char -#define ACCOUNT_REG_NUM 64 // max permanent local account variables per account +#define ACCOUNT_REG_NUM 256 // max permanent local account variables per account #define ACCOUNT_REG2_NUM 16 // max permanent global account variables per account //Should hold the max of GLOBAL/ACCOUNT/ACCOUNT2 (needed for some arrays that hold all three) #define MAX_REG_NUM 256 @@ -100,7 +100,7 @@ #define MAX_GUILDSKILL 15 // increased max guild skills because of new skills [Sara-chan] #define MAX_GUILDLEVEL 50 #define MAX_GUARDIANS 8 //Local max per castle. [Skotlex] -#define MAX_QUEST_DB 2400 //Max quests that the server will load +#define MAX_QUEST_DB 10000 //Max quests that the server will load #define MAX_QUEST_OBJECTIVES 3 //Max quest objectives for a quest // for produce Index: common/msg_conf.h =================================================================== --- common/msg_conf.h (revision 17327) +++ common/msg_conf.h (working copy) @@ -22,7 +22,7 @@ // Multilanguage System. // Define which languages to enable (bitmask). // 0xFF will enable all, while 0x00 will enable English only. -#define LANG_ENABLE 0x00 +#define LANG_ENABLE 0x40 //read msg in table const char* _msg_txt(int msg_number,int size, char ** msg_table); Index: config/core.h =================================================================== --- config/core.h (revision 17327) +++ config/core.h (working copy) @@ -29,7 +29,7 @@ /// Uncomment to disable rAthena's anonymous stat report /// We kindly ask you to consider keeping it enabled, it helps us improve rAthena. -//#define STATS_OPT_OUT +//define STATS_OPT_OUT /// uncomment to enable query_sql script command and mysql logs to function on it's own thread /// be aware this feature is under tests and you should use at your own risk, we however Index: config/renewal.h =================================================================== --- config/renewal.h (revision 17327) +++ config/renewal.h (working copy) @@ -34,7 +34,7 @@ /// leave this line to enable renewal item drop rate algorithms /// while enabled a special modified based on the difference between the player and monster level is applied /// based on the http://irowiki.org/wiki/Drop_System#Level_Factor table -#define RENEWAL_DROP +/// #define RENEWAL_DROP /// renewal exp rate algorithms /// (disable by commenting the line)