LoginServer support via database for max createable Chars per acct, and ceteran EXP bonus display requires SQL update.

This commit is contained in:
Devn00b 2022-11-26 13:13:38 -08:00
parent e7000037b4
commit d2eb5f23d8
3 changed files with 43 additions and 3 deletions

View file

@ -1001,3 +1001,39 @@ void LoginDatabase::UpdateAccountIPAddress(int32 account_id, int32 address){
Query query;
query.RunQuery2(Q_UPDATE, "update account set ip_address='%s' where id=%lu", inet_ntoa(in), account_id);
}
//devn00b: There is no rulesystem for login, so im going to use login_config for future things like this.
//devn00b: Returns the number of characters a player may create per account. This should be set by server owners -> login,
//devn00b: However, better semi-working for now than not working at all.
//devn00b: TODO: EQ2World sends max char per acct.
int8 LoginDatabase::GetMaxCharsSetting() {
//live defaults to 7 for GOLD members.
int8 max_chars = 7;
Query query;
MYSQL_ROW row;
MYSQL_RES* result = query.RunQuery2(Q_SELECT, "select config_value from login_config where config_name='max_characters_per_account'");
if (result && mysql_num_rows(result) == 1) {
row = mysql_fetch_row(result);
if (row[0])
max_chars = atoi(row[0]);
}
//if nothing else return the default.
return max_chars;
}
//TODO: EQ2World sends the servers max level for each server so we can do this correctly.
int16 LoginDatabase::GetAccountBonus(int32 acct_id) {
int32 bonus = 0;
Query query;
MYSQL_ROW row;
//pull all characters greater than the max level setting in the login_config table.
MYSQL_RES* result = query.RunQuery2(Q_SELECT, "SELECT COUNT(id) FROM login_characters WHERE LEVEL >= (SELECT config_value FROM login_config WHERE config_name='max_level_for_vet_reward') AND account_id=%i", acct_id);
if (result && mysql_num_rows(result) == 1) {
row = mysql_fetch_row(result);
if(row[0])
bonus = atoi(row[0]);
}
return bonus;
}

View file

@ -84,6 +84,8 @@ public:
void SetServerEquipmentAppearances(int32 server_id, map<int32, LoginEquipmentUpdate> equip_updates); // JohnAdams: login appearances
int32 GetLoginCharacterIDFromWorldCharID(int32 server_id, int32 char_id); // JohnAdams: login appearances
void RemoveDeletedCharacterData();
int8 GetMaxCharsSetting();
int16 GetAccountBonus(int32 acct_id);
DatabaseNew dbLogin;
};
#endif

View file

@ -6,9 +6,11 @@
*/
#include "PacketHeaders.h"
#include "../common/MiscFunctions.h"
#include "LoginDatabase.h"
#include "LWorld.h"
extern LWorldList world_list;
extern LoginDatabase database;
void LS_DeleteCharacterRequest::loadData(EQApplicationPacket* packet){
InitializeLoadData(packet->pBuffer, packet->size);
@ -27,7 +29,7 @@ EQ2Packet* LS_CharSelectList::serialize(int16 version){
account_info.account_id = account_id;
account_info.unknown1 = 0xFFFFFFFF;
account_info.unknown2 = 0;
account_info.maxchars = 10;
account_info.maxchars = 7; //live has a max of 7 on gold accounts base.
account_info.unknown4 = 0;
AddData(account_info);
}
@ -36,12 +38,12 @@ EQ2Packet* LS_CharSelectList::serialize(int16 version){
account_info.account_id = account_id;
account_info.unknown1 = 0xFFFFFFFF;
account_info.unknown2 = 0;
account_info.maxchars = 30; //devn00b:Corrected unknown and increased maxchars from 10 to 30.
account_info.maxchars = database.GetMaxCharsSetting();
account_info.unknown4 = 0;
for (int i = 0; i < 3; i++)
account_info.unknown5[i] = 0xFFFFFFFF;
account_info.unknown5[3] = 0;
account_info.vet_adv_bonus = 1;
account_info.vet_adv_bonus = database.GetAccountBonus(account_id);
account_info.vet_trade_bonus = 0;
AddData(account_info);
}