142 lines
4.6 KiB
C++
142 lines
4.6 KiB
C++
// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
|
|
// For more information, see LICENCE in the main folder
|
|
|
|
#ifndef ACCOUNT_HPP
|
|
#define ACCOUNT_HPP
|
|
|
|
#include <string>
|
|
|
|
#include "../common/cbasetypes.hpp"
|
|
#include "../common/mmo.hpp" // ACCOUNT_REG2_NUM
|
|
#include "../config/core.hpp"
|
|
|
|
typedef struct AccountDB AccountDB;
|
|
typedef struct AccountDBIterator AccountDBIterator;
|
|
|
|
|
|
// standard engines
|
|
AccountDB* account_db_sql(void);
|
|
|
|
struct mmo_account {
|
|
uint32 account_id;
|
|
char userid[NAME_LENGTH];
|
|
char pass[32+1]; // 23+1 for plaintext, 32+1 for md5-ed passwords
|
|
char sex; // gender (M/F/S)
|
|
char email[49+1]; // e-mail (by default: a@a.com)
|
|
unsigned int group_id; // player group id
|
|
uint8 char_slots; // this accounts maximum character slots (maximum is limited to MAX_CHARS define in char server)
|
|
unsigned int state; // packet 0x006a value + 1 (0: compte OK)
|
|
time_t unban_time; // (timestamp): ban time limit of the account (0 = no ban)
|
|
time_t expiration_time; // (timestamp): validity limit of the account (0 = unlimited)
|
|
unsigned int logincount;// number of successful auth attempts
|
|
char lastlogin[24]; // date+time of last successful login
|
|
char last_ip[16]; // save of last IP of connection
|
|
char birthdate[10+1]; // assigned birth date (format: YYYY-MM-DD)
|
|
char pincode[PINCODE_LENGTH+1]; // pincode system
|
|
time_t pincode_change; // (timestamp): last time of pincode change
|
|
std::string deletion_passcode; // Stores code for deleting character based on char_deletion_code config
|
|
#ifdef VIP_ENABLE
|
|
int old_group;
|
|
time_t vip_time;
|
|
#endif
|
|
};
|
|
|
|
|
|
struct AccountDBIterator {
|
|
/// Destroys this iterator, releasing all allocated memory (including itself).
|
|
///
|
|
/// @param self Iterator
|
|
void (*destroy)(AccountDBIterator* self);
|
|
|
|
/// Fetches the next account in the database.
|
|
/// Fills acc with the account data.
|
|
/// @param self Iterator
|
|
/// @param acc Account data
|
|
/// @return true if successful
|
|
bool (*next)(AccountDBIterator* self, struct mmo_account* acc);
|
|
};
|
|
|
|
|
|
struct AccountDB {
|
|
/// Initializes this database, making it ready for use.
|
|
/// Call this after setting the properties.
|
|
///
|
|
/// @param self Database
|
|
/// @return true if successful
|
|
bool (*init)(AccountDB* self);
|
|
|
|
/// Destroys this database, releasing all allocated memory (including itself).
|
|
///
|
|
/// @param self Database
|
|
void (*destroy)(AccountDB* self);
|
|
|
|
/// Gets a property from this database.
|
|
/// These read-only properties must be implemented:
|
|
///
|
|
/// @param self Database
|
|
/// @param key Property name
|
|
/// @param buf Buffer for the value
|
|
/// @param buflen Buffer length
|
|
/// @return true if successful
|
|
bool (*get_property)(AccountDB* self, const char* key, char* buf, size_t buflen);
|
|
|
|
/// Sets a property in this database.
|
|
///
|
|
/// @param self Database
|
|
/// @param key Property name
|
|
/// @param value Property value
|
|
/// @return true if successful
|
|
bool (*set_property)(AccountDB* self, const char* key, const char* value);
|
|
|
|
/// Creates a new account in this database.
|
|
/// If acc->account_id is not -1, the provided value will be used.
|
|
/// Otherwise the account_id will be auto-generated and written to acc->account_id.
|
|
///
|
|
/// @param self Database
|
|
/// @param acc Account data
|
|
/// @return true if successful
|
|
bool (*create)(AccountDB* self, struct mmo_account* acc);
|
|
|
|
/// Removes an account from this database.
|
|
///
|
|
/// @param self Database
|
|
/// @param account_id Account id
|
|
/// @return true if successful
|
|
bool (*remove)(AccountDB* self, const uint32 account_id);
|
|
|
|
/// Modifies the data of an existing account.
|
|
/// Uses acc->account_id to identify the account.
|
|
///
|
|
/// @param self Database
|
|
/// @param acc Account data
|
|
/// @return true if successful
|
|
bool (*save)(AccountDB* self, const struct mmo_account* acc);
|
|
|
|
/// Finds an account with account_id and copies it to acc.
|
|
///
|
|
/// @param self Database
|
|
/// @param acc Pointer that receives the account data
|
|
/// @param account_id Target account id
|
|
/// @return true if successful
|
|
bool (*load_num)(AccountDB* self, struct mmo_account* acc, const uint32 account_id);
|
|
|
|
/// Finds an account with userid and copies it to acc.
|
|
///
|
|
/// @param self Database
|
|
/// @param acc Pointer that receives the account data
|
|
/// @param userid Target username
|
|
/// @return true if successful
|
|
bool (*load_str)(AccountDB* self, struct mmo_account* acc, const char* userid);
|
|
|
|
/// Returns a new forward iterator.
|
|
///
|
|
/// @param self Database
|
|
/// @return Iterator
|
|
AccountDBIterator* (*iterator)(AccountDB* self);
|
|
};
|
|
|
|
void mmo_send_global_accreg(AccountDB* self, int fd, int account_id, int char_id);
|
|
void mmo_save_global_accreg(AccountDB* self, int fd, int account_id, int char_id);
|
|
|
|
#endif /* ACCOUNT_HPP */
|