diff --git a/conf/login_athena.conf b/conf/login_athena.conf index 8529a3e014..a5bbd2917b 100644 --- a/conf/login_athena.conf +++ b/conf/login_athena.conf @@ -98,8 +98,8 @@ chars_per_account: 0 // Increase the value of MAX_CHARS if you want to increase vip_char_increase. // Note: The amount of VIP characters = MAX_CHARS - chars_per_account. // Note 2: This setting must be set after chars_per_account. -// Default: 6 -vip_char_increase: 6 +// -1 will default to MAX_CHAR_VIP (src/config/core.h) +vip_char_increase: -1 // Create accounts with limited time? // -1: new accounts are created with unlimited time (default) diff --git a/src/char/char_clif.c b/src/char/char_clif.c index 7341260a62..d7f0373444 100644 --- a/src/char/char_clif.c +++ b/src/char/char_clif.c @@ -336,8 +336,8 @@ int chclif_mmo_send006b(int fd, struct char_session_data* sd){ WFIFOW(fd,0) = 0x6b; if(newvers){ //20100413 WFIFOB(fd,4) = MAX_CHARS; // Max slots. - WFIFOB(fd,5) = sd->char_slots; // Available slots. (PremiumStartSlot) - WFIFOB(fd,6) = MAX_CHARS; // Premium slots. (Any existent chars past sd->char_slots but within MAX_CHARS will show a 'Premium Service' in red) + WFIFOB(fd,5) = MIN_CHARS; // Available slots. (PremiumStartSlot) + WFIFOB(fd,6) = MIN_CHARS+sd->chars_vip; // Premium slots. (Any existent chars past sd->char_slots but within MAX_CHARS will show a 'Premium Service' in red) } memset(WFIFOP(fd,4 + offset), 0, 20); // unknown bytes j+=char_mmo_chars_fromsql(sd, WFIFOP(fd,j)); @@ -356,11 +356,11 @@ void chclif_mmo_send082d(int fd, struct char_session_data* sd) { WFIFOHEAD(fd,29); WFIFOW(fd,0) = 0x82d; WFIFOW(fd,2) = 29; - WFIFOB(fd,4) = sd->char_slots; - WFIFOB(fd,5) = MAX_CHARS - sd->char_slots; - WFIFOB(fd,6) = MAX_CHARS - sd->char_slots; - WFIFOB(fd,7) = sd->char_slots; - WFIFOB(fd,8) = sd->char_slots; + WFIFOB(fd,4) = MIN_CHARS; // normal_slot + WFIFOB(fd,5) = sd->chars_vip; // premium_slot + WFIFOB(fd,6) = sd->chars_billing; // billing_slot + WFIFOB(fd,7) = sd->char_slots; // producible_slot + WFIFOB(fd,8) = MAX_CHARS; // valid_slot memset(WFIFOP(fd,9), 0, 20); // unused bytes WFIFOSET(fd,29); } diff --git a/src/char/char_logif.c b/src/char/char_logif.c index a4e4748739..a1206ff20a 100644 --- a/src/char/char_logif.c +++ b/src/char/char_logif.c @@ -332,6 +332,10 @@ int chlogif_parse_ackaccreq(int fd, struct char_session_data* sd){ return 1; } +/** + * Receive account data from login-server + * AH 0x2717 .L .40B .L .B .11B .5B .L .B .B .B + **/ int chlogif_parse_reqaccdata(int fd, struct char_session_data* sd){ int u_fd; //user fd if (RFIFOREST(fd) < 75) diff --git a/src/login/login.c b/src/login/login.c index 8060f30eb8..39b5e38e0d 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -655,10 +655,15 @@ bool login_config_read(const char* cfgName, bool normal) { else if(strcmpi(w1,"vip_group")==0) login_config.vip_sys.group = cap_value(atoi(w2),0,99); else if(strcmpi(w1,"vip_char_increase")==0) { - if(login_config.vip_sys.char_increase > (unsigned int) MAX_CHARS-login_config.char_per_account) + if (atoi(w2) == -1) + login_config.vip_sys.char_increase = MAX_CHAR_VIP; + else + login_config.vip_sys.char_increase = atoi(w2); + if (login_config.vip_sys.char_increase > (unsigned int) MAX_CHARS-login_config.char_per_account) { ShowWarning("vip_char_increase too high, can only go up to %d, according to your char_per_account config %d\n", MAX_CHARS-login_config.char_per_account,login_config.char_per_account); - login_config.vip_sys.char_increase = cap_value(atoi(w2),0,MAX_CHARS-login_config.char_per_account); + login_config.vip_sys.char_increase = MAX_CHARS-login_config.char_per_account; + } } #endif else if(!strcmpi(w1, "import")) diff --git a/src/login/loginchrif.c b/src/login/loginchrif.c index 6a8373b81e..5f674a6484 100644 --- a/src/login/loginchrif.c +++ b/src/login/loginchrif.c @@ -163,7 +163,7 @@ int logchrif_send_accdata(int fd, uint32 aid) { char birthdate[10+1] = ""; char pincode[PINCODE_LENGTH+1]; char isvip = false; - uint8 char_slots = MIN_CHARS, char_vip = 0; + uint8 char_slots = MIN_CHARS, char_vip = 0, char_billing = 0; AccountDB* accounts = login_get_accounts_db(); memset(pincode,0,PINCODE_LENGTH+1); @@ -183,6 +183,7 @@ int logchrif_send_accdata(int fd, uint32 aid) { char_slots = login_config.char_per_account + char_vip; } else char_slots = login_config.char_per_account; + char_billing = MAX_CHAR_BILLING; //TODO create a config for this #endif } @@ -198,7 +199,7 @@ int logchrif_send_accdata(int fd, uint32 aid) { WFIFOL(fd,68) = (uint32)acc.pincode_change; WFIFOB(fd,72) = isvip; WFIFOB(fd,73) = char_vip; - WFIFOB(fd,74) = MAX_CHAR_BILLING; //TODO create a config for this + WFIFOB(fd,74) = char_billing; WFIFOSET(fd,75); return 1; }