summaryrefslogtreecommitdiff
path: root/src/char/inter.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/char/inter.c')
-rw-r--r--src/char/inter.c582
1 files changed, 305 insertions, 277 deletions
diff --git a/src/char/inter.c b/src/char/inter.c
index df2920aa0..5ac065f23 100644
--- a/src/char/inter.c
+++ b/src/char/inter.c
@@ -13,6 +13,7 @@
#include <sys/stat.h> // for stat/lstat/fstat - [Dekamaster/Ultimate GM Tool]
#include "char.h"
+#include "geoip.h"
#include "int_auction.h"
#include "int_elemental.h"
#include "int_guild.h"
@@ -23,6 +24,7 @@
#include "int_pet.h"
#include "int_quest.h"
#include "int_storage.h"
+#include "mapif.h"
#include "../common/cbasetypes.h"
#include "../common/db.h"
#include "../common/malloc.h"
@@ -35,8 +37,7 @@
#define WISDATA_TTL (60*1000) //Wis data Time To Live (60 seconds)
#define WISDELLIST_MAX 256 // Number of elements in the list Delete data Wis
-
-Sql* sql_handle = NULL;
+struct inter_interface inter_s;
int char_server_port = 3306;
char char_server_ip[32] = "127.0.0.1";
@@ -72,7 +73,7 @@ static int wis_dellist[WISDELLIST_MAX], wis_delnum;
#define MAX_JOB_NAMES 150
static char* msg_table[MAX_JOB_NAMES]; // messages 550 ~ 699 are job names
-const char* msg_txt(int msg_number) {
+const char* inter_msg_txt(int msg_number) {
msg_number -= 550;
if (msg_number >= 0 && msg_number < MAX_JOB_NAMES &&
msg_table[msg_number] != NULL && msg_table[msg_number][0] != '\0')
@@ -84,14 +85,15 @@ const char* msg_txt(int msg_number) {
/**
* Reads Message Data.
*
- * This is a modified version of the mapserver's msg_config_read to
+ * This is a modified version of the mapserver's inter->msg_config_read to
* only read messages with IDs between 550 and 550+MAX_JOB_NAMES.
*
* @param[in] cfg_name configuration filename to read.
* @param[in] allow_override whether to allow duplicate message IDs to override the original value.
* @return success state.
*/
-bool msg_config_read(const char *cfg_name, bool allow_override) {
+bool inter_msg_config_read(const char *cfg_name, bool allow_override)
+{
int msg_number;
char line[1024], w1[1024], w2[1024];
FILE *fp;
@@ -112,7 +114,7 @@ bool msg_config_read(const char *cfg_name, bool allow_override) {
continue;
if (strcmpi(w1, "import") == 0)
- msg_config_read(w2, true);
+ inter->msg_config_read(w2, true);
else {
msg_number = atoi(w1);
if( msg_number < 550 || msg_number > (550+MAX_JOB_NAMES) )
@@ -141,13 +143,15 @@ bool msg_config_read(const char *cfg_name, bool allow_override) {
/*==========================================
* Cleanup Message Data
*------------------------------------------*/
-void do_final_msg(void) {
+void inter_do_final_msg(void)
+{
int i;
for (i = 0; i < MAX_JOB_NAMES; i++)
aFree(msg_table[i]);
}
/* from pc.c due to @accinfo. any ideas to replace this crap are more than welcome. */
-const char* job_name(int class_) {
+const char* inter_job_name(int class_)
+{
switch (class_) {
case JOB_NOVICE: // 550
case JOB_SWORDMAN: // 551
@@ -156,7 +160,7 @@ const char* job_name(int class_) {
case JOB_ACOLYTE: // 554
case JOB_MERCHANT: // 555
case JOB_THIEF: // 556
- return msg_txt(550 - JOB_NOVICE+class_);
+ return inter->msg_txt(550 - JOB_NOVICE+class_);
case JOB_KNIGHT: // 557
case JOB_PRIEST: // 558
@@ -164,10 +168,10 @@ const char* job_name(int class_) {
case JOB_BLACKSMITH: // 560
case JOB_HUNTER: // 561
case JOB_ASSASSIN: // 562
- return msg_txt(557 - JOB_KNIGHT+class_);
+ return inter->msg_txt(557 - JOB_KNIGHT+class_);
case JOB_KNIGHT2:
- return msg_txt(557);
+ return inter->msg_txt(557);
case JOB_CRUSADER: // 563
case JOB_MONK: // 564
@@ -176,20 +180,20 @@ const char* job_name(int class_) {
case JOB_ALCHEMIST: // 567
case JOB_BARD: // 568
case JOB_DANCER: // 569
- return msg_txt(563 - JOB_CRUSADER+class_);
+ return inter->msg_txt(563 - JOB_CRUSADER+class_);
case JOB_CRUSADER2:
- return msg_txt(563);
+ return inter->msg_txt(563);
case JOB_WEDDING: // 570
case JOB_SUPER_NOVICE: // 571
case JOB_GUNSLINGER: // 572
case JOB_NINJA: // 573
case JOB_XMAS: // 574
- return msg_txt(570 - JOB_WEDDING+class_);
+ return inter->msg_txt(570 - JOB_WEDDING+class_);
case JOB_SUMMER:
- return msg_txt(621);
+ return inter->msg_txt(621);
case JOB_NOVICE_HIGH: // 575
case JOB_SWORDMAN_HIGH: // 576
@@ -198,7 +202,7 @@ const char* job_name(int class_) {
case JOB_ACOLYTE_HIGH: // 579
case JOB_MERCHANT_HIGH: // 580
case JOB_THIEF_HIGH: // 581
- return msg_txt(575 - JOB_NOVICE_HIGH+class_);
+ return inter->msg_txt(575 - JOB_NOVICE_HIGH+class_);
case JOB_LORD_KNIGHT: // 582
case JOB_HIGH_PRIEST: // 583
@@ -206,10 +210,10 @@ const char* job_name(int class_) {
case JOB_WHITESMITH: // 585
case JOB_SNIPER: // 586
case JOB_ASSASSIN_CROSS: // 587
- return msg_txt(582 - JOB_LORD_KNIGHT+class_);
+ return inter->msg_txt(582 - JOB_LORD_KNIGHT+class_);
case JOB_LORD_KNIGHT2:
- return msg_txt(582);
+ return inter->msg_txt(582);
case JOB_PALADIN: // 588
case JOB_CHAMPION: // 589
@@ -218,10 +222,10 @@ const char* job_name(int class_) {
case JOB_CREATOR: // 592
case JOB_CLOWN: // 593
case JOB_GYPSY: // 594
- return msg_txt(588 - JOB_PALADIN + class_);
+ return inter->msg_txt(588 - JOB_PALADIN + class_);
case JOB_PALADIN2:
- return msg_txt(588);
+ return inter->msg_txt(588);
case JOB_BABY: // 595
case JOB_BABY_SWORDMAN: // 596
@@ -230,7 +234,7 @@ const char* job_name(int class_) {
case JOB_BABY_ACOLYTE: // 599
case JOB_BABY_MERCHANT: // 600
case JOB_BABY_THIEF: // 601
- return msg_txt(595 - JOB_BABY + class_);
+ return inter->msg_txt(595 - JOB_BABY + class_);
case JOB_BABY_KNIGHT: // 602
case JOB_BABY_PRIEST: // 603
@@ -238,10 +242,10 @@ const char* job_name(int class_) {
case JOB_BABY_BLACKSMITH: // 605
case JOB_BABY_HUNTER: // 606
case JOB_BABY_ASSASSIN: // 607
- return msg_txt(602 - JOB_BABY_KNIGHT + class_);
+ return inter->msg_txt(602 - JOB_BABY_KNIGHT + class_);
case JOB_BABY_KNIGHT2:
- return msg_txt(602);
+ return inter->msg_txt(602);
case JOB_BABY_CRUSADER: // 608
case JOB_BABY_MONK: // 609
@@ -250,26 +254,26 @@ const char* job_name(int class_) {
case JOB_BABY_ALCHEMIST: // 612
case JOB_BABY_BARD: // 613
case JOB_BABY_DANCER: // 614
- return msg_txt(608 - JOB_BABY_CRUSADER + class_);
+ return inter->msg_txt(608 - JOB_BABY_CRUSADER + class_);
case JOB_BABY_CRUSADER2:
- return msg_txt(608);
+ return inter->msg_txt(608);
case JOB_SUPER_BABY:
- return msg_txt(615);
+ return inter->msg_txt(615);
case JOB_TAEKWON:
- return msg_txt(616);
+ return inter->msg_txt(616);
case JOB_STAR_GLADIATOR:
case JOB_STAR_GLADIATOR2:
- return msg_txt(617);
+ return inter->msg_txt(617);
case JOB_SOUL_LINKER:
- return msg_txt(618);
+ return inter->msg_txt(618);
case JOB_GANGSI: // 622
case JOB_DEATH_KNIGHT: // 623
case JOB_DARK_COLLECTOR: // 624
- return msg_txt(622 - JOB_GANGSI+class_);
+ return inter->msg_txt(622 - JOB_GANGSI+class_);
case JOB_RUNE_KNIGHT: // 625
case JOB_WARLOCK: // 626
@@ -277,7 +281,7 @@ const char* job_name(int class_) {
case JOB_ARCH_BISHOP: // 628
case JOB_MECHANIC: // 629
case JOB_GUILLOTINE_CROSS: // 630
- return msg_txt(625 - JOB_RUNE_KNIGHT+class_);
+ return inter->msg_txt(625 - JOB_RUNE_KNIGHT+class_);
case JOB_RUNE_KNIGHT_T: // 656
case JOB_WARLOCK_T: // 657
@@ -285,7 +289,7 @@ const char* job_name(int class_) {
case JOB_ARCH_BISHOP_T: // 659
case JOB_MECHANIC_T: // 660
case JOB_GUILLOTINE_CROSS_T: // 661
- return msg_txt(656 - JOB_RUNE_KNIGHT_T+class_);
+ return inter->msg_txt(656 - JOB_RUNE_KNIGHT_T+class_);
case JOB_ROYAL_GUARD: // 631
case JOB_SORCERER: // 632
@@ -294,7 +298,7 @@ const char* job_name(int class_) {
case JOB_SURA: // 635
case JOB_GENETIC: // 636
case JOB_SHADOW_CHASER: // 637
- return msg_txt(631 - JOB_ROYAL_GUARD+class_);
+ return inter->msg_txt(631 - JOB_ROYAL_GUARD+class_);
case JOB_ROYAL_GUARD_T: // 662
case JOB_SORCERER_T: // 663
@@ -303,31 +307,31 @@ const char* job_name(int class_) {
case JOB_SURA_T: // 666
case JOB_GENETIC_T: // 667
case JOB_SHADOW_CHASER_T: // 668
- return msg_txt(662 - JOB_ROYAL_GUARD_T+class_);
+ return inter->msg_txt(662 - JOB_ROYAL_GUARD_T+class_);
case JOB_RUNE_KNIGHT2:
- return msg_txt(625);
+ return inter->msg_txt(625);
case JOB_RUNE_KNIGHT_T2:
- return msg_txt(656);
+ return inter->msg_txt(656);
case JOB_ROYAL_GUARD2:
- return msg_txt(631);
+ return inter->msg_txt(631);
case JOB_ROYAL_GUARD_T2:
- return msg_txt(662);
+ return inter->msg_txt(662);
case JOB_RANGER2:
- return msg_txt(627);
+ return inter->msg_txt(627);
case JOB_RANGER_T2:
- return msg_txt(658);
+ return inter->msg_txt(658);
case JOB_MECHANIC2:
- return msg_txt(629);
+ return inter->msg_txt(629);
case JOB_MECHANIC_T2:
- return msg_txt(660);
+ return inter->msg_txt(660);
case JOB_BABY_RUNE: // 638
case JOB_BABY_WARLOCK: // 639
@@ -342,33 +346,33 @@ const char* job_name(int class_) {
case JOB_BABY_SURA: // 648
case JOB_BABY_GENETIC: // 649
case JOB_BABY_CHASER: // 650
- return msg_txt(638 - JOB_BABY_RUNE+class_);
+ return inter->msg_txt(638 - JOB_BABY_RUNE+class_);
case JOB_BABY_RUNE2:
- return msg_txt(638);
+ return inter->msg_txt(638);
case JOB_BABY_GUARD2:
- return msg_txt(644);
+ return inter->msg_txt(644);
case JOB_BABY_RANGER2:
- return msg_txt(640);
+ return inter->msg_txt(640);
case JOB_BABY_MECHANIC2:
- return msg_txt(642);
+ return inter->msg_txt(642);
case JOB_SUPER_NOVICE_E: // 651
case JOB_SUPER_BABY_E: // 652
- return msg_txt(651 - JOB_SUPER_NOVICE_E+class_);
+ return inter->msg_txt(651 - JOB_SUPER_NOVICE_E+class_);
case JOB_KAGEROU: // 653
case JOB_OBORO: // 654
- return msg_txt(653 - JOB_KAGEROU+class_);
+ return inter->msg_txt(653 - JOB_KAGEROU+class_);
case JOB_REBELLION:
- return msg_txt(655);
+ return inter->msg_txt(655);
default:
- return msg_txt(620); // "Unknown Job"
+ return inter->msg_txt(620); // "Unknown Job"
}
}
@@ -403,27 +407,21 @@ const char * geoip_countryname[GEOIP_MAX_COUNTRIES] = {"Unknown","Asia/Pacific R
"Virgin Islands, British","Virgin Islands, U.S.","Vietnam","Vanuatu","Wallis and Futuna","Samoa","Yemen","Mayotte","Serbia","South Africa",
"Zambia","Montenegro","Zimbabwe","Anonymous Proxy","Satellite Provider","Other","Aland Islands","Guernsey","Isle of Man","Jersey",
"Saint Barthelemy", "Saint Martin", "Bonaire, Saint Eustatius and Saba", "South Sudan"};
-/**
- * GeoIP information
- **/
-struct s_geoip {
- unsigned char *cache; // GeoIP.dat information see geoip_init()
- bool active;
-} geoip;
/* [Dekamaster/Nightroad] */
/* WHY NOT A DBMAP: There are millions of entries in GeoIP and it has its own algorithm to go quickly through them, a DBMap wouldn't be efficient */
-const char* geoip_getcountry(uint32 ipnum){
+const char* geoip_getcountry(uint32 ipnum)
+{
int depth;
unsigned int x;
const unsigned char *buf;
unsigned int offset = 0;
- if( geoip.active == false )
+ if( geoip->data->active == false )
return geoip_countryname[0];
for (depth = 31; depth >= 0; depth--) {
- buf = geoip.cache + (long)6 *offset;
+ buf = geoip->data->cache + (long)6 *offset;
if (ipnum & (1 << depth)) {
/* Take the right-hand branch */
x = (buf[3*1 + 0] << (0*8))
@@ -455,16 +453,17 @@ const char* geoip_getcountry(uint32 ipnum){
* Disables GeoIP
* frees geoip.cache
**/
-void geoip_final(bool shutdown) {
- if (geoip.cache) {
- aFree(geoip.cache);
- geoip.cache = NULL;
+void geoip_final(bool shutdown)
+{
+ if (geoip->data->cache) {
+ aFree(geoip->data->cache);
+ geoip->data->cache = NULL;
}
- if (geoip.active) {
+ if (geoip->data->active) {
if (!shutdown)
ShowStatus("GeoIP "CL_RED"disabled"CL_RESET".\n");
- geoip.active = false;
+ geoip->data->active = false;
}
}
@@ -473,32 +472,33 @@ void geoip_final(bool shutdown) {
* geoip.cache should be freed after use!
* http://dev.maxmind.com/geoip/legacy/geolite/
**/
-void geoip_init(void) {
+void geoip_init(void)
+{
int i, fno;
char db_type = 1;
unsigned char delim[3];
struct stat bufa;
FILE *db;
- geoip.active = true;
+ geoip->data->active = true;
db = fopen("./db/GeoIP.dat","rb");
if (db == NULL) {
ShowError("geoip_readdb: Error reading GeoIP.dat!\n");
- geoip_final(false);
+ geoip->final(false);
return;
}
fno = fileno(db);
if (fstat(fno, &bufa) < 0) {
ShowError("geoip_readdb: Error stating GeoIP.dat! Error %d\n", errno);
- geoip_final(false);
+ geoip->final(false);
return;
}
- geoip.cache = aMalloc( (sizeof(geoip.cache) * bufa.st_size) );
- if (fread(geoip.cache, sizeof(unsigned char), bufa.st_size, db) != bufa.st_size) {
+ geoip->data->cache = aMalloc( (sizeof(geoip->data->cache) * bufa.st_size) );
+ if (fread(geoip->data->cache, sizeof(unsigned char), bufa.st_size, db) != bufa.st_size) {
ShowError("geoip_cache: Couldn't read all elements!\n");
fclose(db);
- geoip_final(false);
+ geoip->final(false);
return;
}
@@ -527,7 +527,7 @@ void geoip_init(void) {
else
ShowError("geoip_init(): GeoIP is corrupted!\n");
- geoip_final(false);
+ geoip->final(false);
return;
}
ShowStatus("Finished Reading "CL_GREEN"GeoIP"CL_RESET" Database.\n");
@@ -537,7 +537,8 @@ void geoip_init(void) {
* Argument-list version of inter_msg_to_fd
* @see inter_msg_to_fd
*/
-void inter_vmsg_to_fd(int fd, int u_fd, int aid, char* msg, va_list ap) {
+void inter_vmsg_to_fd(int fd, int u_fd, int aid, char* msg, va_list ap)
+{
char msg_out[512];
va_list apcopy;
int len = 1;/* yes we start at 1 */
@@ -569,15 +570,17 @@ void inter_vmsg_to_fd(int fd, int u_fd, int aid, char* msg, va_list ap) {
* @param ... Additional parameters for (v)sprinf
*/
void inter_msg_to_fd(int fd, int u_fd, int aid, char *msg, ...) __attribute__((format(printf, 4, 5)));
-void inter_msg_to_fd(int fd, int u_fd, int aid, char *msg, ...) {
+void inter_msg_to_fd(int fd, int u_fd, int aid, char *msg, ...)
+{
va_list ap;
va_start(ap,msg);
- inter_vmsg_to_fd(fd, u_fd, aid, msg, ap);
+ inter->vmsg_to_fd(fd, u_fd, aid, msg, ap);
va_end(ap);
}
/* [Dekamaster/Nightroad] */
-void mapif_parse_accinfo(int fd) {
+void mapif_parse_accinfo(int fd)
+{
int u_fd = RFIFOL(fd,2), aid = RFIFOL(fd,6), castergroup = RFIFOL(fd,10);
char query[NAME_LENGTH], query_esq[NAME_LENGTH*2+1];
int account_id;
@@ -585,43 +588,43 @@ void mapif_parse_accinfo(int fd) {
safestrncpy(query, (char*) RFIFOP(fd,14), NAME_LENGTH);
- SQL->EscapeString(sql_handle, query_esq, query);
+ SQL->EscapeString(inter->sql_handle, query_esq, query);
account_id = atoi(query);
if (account_id < START_ACCOUNT_NUM) { // is string
- if ( SQL_ERROR == SQL->Query(sql_handle, "SELECT `account_id`,`name`,`class`,`base_level`,`job_level`,`online` FROM `%s` WHERE `name` LIKE '%s' LIMIT 10", char_db, query_esq)
- || SQL->NumRows(sql_handle) == 0 ) {
- if( SQL->NumRows(sql_handle) == 0 ) {
- inter_msg_to_fd(fd, u_fd, aid, "No matches were found for your criteria, '%s'",query);
+ if ( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `account_id`,`name`,`class`,`base_level`,`job_level`,`online` FROM `%s` WHERE `name` LIKE '%s' LIMIT 10", char_db, query_esq)
+ || SQL->NumRows(inter->sql_handle) == 0 ) {
+ if( SQL->NumRows(inter->sql_handle) == 0 ) {
+ inter->msg_to_fd(fd, u_fd, aid, "No matches were found for your criteria, '%s'",query);
} else {
- Sql_ShowDebug(sql_handle);
- inter_msg_to_fd(fd, u_fd, aid, "An error occurred, bother your admin about it.");
+ Sql_ShowDebug(inter->sql_handle);
+ inter->msg_to_fd(fd, u_fd, aid, "An error occurred, bother your admin about it.");
}
- SQL->FreeResult(sql_handle);
+ SQL->FreeResult(inter->sql_handle);
return;
} else {
- if( SQL->NumRows(sql_handle) == 1 ) {//we found a perfect match
- SQL->NextRow(sql_handle);
- SQL->GetData(sql_handle, 0, &data, NULL); account_id = atoi(data);
- SQL->FreeResult(sql_handle);
+ if( SQL->NumRows(inter->sql_handle) == 1 ) {//we found a perfect match
+ SQL->NextRow(inter->sql_handle);
+ SQL->GetData(inter->sql_handle, 0, &data, NULL); account_id = atoi(data);
+ SQL->FreeResult(inter->sql_handle);
} else {// more than one, listing... [Dekamaster/Nightroad]
- inter_msg_to_fd(fd, u_fd, aid, "Your query returned the following %d results, please be more specific...",(int)SQL->NumRows(sql_handle));
- while ( SQL_SUCCESS == SQL->NextRow(sql_handle) ) {
+ inter->msg_to_fd(fd, u_fd, aid, "Your query returned the following %d results, please be more specific...",(int)SQL->NumRows(inter->sql_handle));
+ while ( SQL_SUCCESS == SQL->NextRow(inter->sql_handle) ) {
int class_;
short base_level, job_level, online;
char name[NAME_LENGTH];
- SQL->GetData(sql_handle, 0, &data, NULL); account_id = atoi(data);
- SQL->GetData(sql_handle, 1, &data, NULL); safestrncpy(name, data, sizeof(name));
- SQL->GetData(sql_handle, 2, &data, NULL); class_ = atoi(data);
- SQL->GetData(sql_handle, 3, &data, NULL); base_level = atoi(data);
- SQL->GetData(sql_handle, 4, &data, NULL); job_level = atoi(data);
- SQL->GetData(sql_handle, 5, &data, NULL); online = atoi(data);
+ SQL->GetData(inter->sql_handle, 0, &data, NULL); account_id = atoi(data);
+ SQL->GetData(inter->sql_handle, 1, &data, NULL); safestrncpy(name, data, sizeof(name));
+ SQL->GetData(inter->sql_handle, 2, &data, NULL); class_ = atoi(data);
+ SQL->GetData(inter->sql_handle, 3, &data, NULL); base_level = atoi(data);
+ SQL->GetData(inter->sql_handle, 4, &data, NULL); job_level = atoi(data);
+ SQL->GetData(inter->sql_handle, 5, &data, NULL); online = atoi(data);
- inter_msg_to_fd(fd, u_fd, aid, "[AID: %d] %s | %s | Level: %d/%d | %s", account_id, name, job_name(class_), base_level, job_level, online?"Online":"Offline");
+ inter->msg_to_fd(fd, u_fd, aid, "[AID: %d] %s | %s | Level: %d/%d | %s", account_id, name, inter->job_name(class_), base_level, job_level, online?"Online":"Offline");
}
- SQL->FreeResult(sql_handle);
+ SQL->FreeResult(inter->sql_handle);
return;
}
}
@@ -630,63 +633,65 @@ void mapif_parse_accinfo(int fd) {
/* it will only get here if we have a single match */
/* and we will send packet with account id to login server asking for account info */
if( account_id ) {
- mapif_on_parse_accinfo(account_id, u_fd, aid, castergroup, fd);
+ mapif->on_parse_accinfo(account_id, u_fd, aid, castergroup, fd);
}
return;
}
-void mapif_parse_accinfo2(bool success, int map_fd, int u_fd, int u_aid, int account_id, const char *userid, const char *user_pass, const char *email, const char *last_ip, const char *lastlogin, const char *pin_code, const char *birthdate, int group_id, int logincount, int state) {
+void mapif_parse_accinfo2(bool success, int map_fd, int u_fd, int u_aid, int account_id, const char *userid, const char *user_pass,
+ const char *email, const char *last_ip, const char *lastlogin, const char *pin_code, const char *birthdate, int group_id, int logincount, int state)
+{
if (map_fd <= 0 || !session_isActive(map_fd))
return; // check if we have a valid fd
if (!success) {
- inter_msg_to_fd(map_fd, u_fd, u_aid, "No account with ID '%d' was found.", account_id);
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "No account with ID '%d' was found.", account_id);
return;
}
- inter_msg_to_fd(map_fd, u_fd, u_aid, "-- Account %d --", account_id);
- inter_msg_to_fd(map_fd, u_fd, u_aid, "User: %s | GM Group: %d | State: %d", userid, group_id, state);
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "-- Account %d --", account_id);
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "User: %s | GM Group: %d | State: %d", userid, group_id, state);
if (user_pass && *user_pass != '\0') { /* password is only received if your gm level is greater than the one you're searching for */
if (pin_code && *pin_code != '\0')
- inter_msg_to_fd(map_fd, u_fd, u_aid, "Password: %s (PIN:%s)", user_pass, pin_code);
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "Password: %s (PIN:%s)", user_pass, pin_code);
else
- inter_msg_to_fd(map_fd, u_fd, u_aid, "Password: %s", user_pass );
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "Password: %s", user_pass );
}
- inter_msg_to_fd(map_fd, u_fd, u_aid, "Account e-mail: %s | Birthdate: %s", email, birthdate);
- inter_msg_to_fd(map_fd, u_fd, u_aid, "Last IP: %s (%s)", last_ip, geoip_getcountry(str2ip(last_ip)));
- inter_msg_to_fd(map_fd, u_fd, u_aid, "This user has logged %d times, the last time were at %s", logincount, lastlogin);
- inter_msg_to_fd(map_fd, u_fd, u_aid, "-- Character Details --");
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "Account e-mail: %s | Birthdate: %s", email, birthdate);
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "Last IP: %s (%s)", last_ip, geoip->getcountry(str2ip(last_ip)));
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "This user has logged %d times, the last time were at %s", logincount, lastlogin);
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "-- Character Details --");
- if ( SQL_ERROR == SQL->Query(sql_handle, "SELECT `char_id`, `name`, `char_num`, `class`, `base_level`, `job_level`, `online` "
+ if ( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `char_id`, `name`, `char_num`, `class`, `base_level`, `job_level`, `online` "
"FROM `%s` WHERE `account_id` = '%d' ORDER BY `char_num` LIMIT %d", char_db, account_id, MAX_CHARS)
- || SQL->NumRows(sql_handle) == 0 ) {
- if (SQL->NumRows(sql_handle) == 0) {
- inter_msg_to_fd(map_fd, u_fd, u_aid, "This account doesn't have characters.");
+ || SQL->NumRows(inter->sql_handle) == 0 ) {
+ if (SQL->NumRows(inter->sql_handle) == 0) {
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "This account doesn't have characters.");
} else {
- inter_msg_to_fd(map_fd, u_fd, u_aid, "An error occurred, bother your admin about it.");
- Sql_ShowDebug(sql_handle);
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "An error occurred, bother your admin about it.");
+ Sql_ShowDebug(inter->sql_handle);
}
} else {
- while ( SQL_SUCCESS == SQL->NextRow(sql_handle) ) {
+ while ( SQL_SUCCESS == SQL->NextRow(inter->sql_handle) ) {
char *data;
int char_id, class_;
short char_num, base_level, job_level, online;
char name[NAME_LENGTH];
- SQL->GetData(sql_handle, 0, &data, NULL); char_id = atoi(data);
- SQL->GetData(sql_handle, 1, &data, NULL); safestrncpy(name, data, sizeof(name));
- SQL->GetData(sql_handle, 2, &data, NULL); char_num = atoi(data);
- SQL->GetData(sql_handle, 3, &data, NULL); class_ = atoi(data);
- SQL->GetData(sql_handle, 4, &data, NULL); base_level = atoi(data);
- SQL->GetData(sql_handle, 5, &data, NULL); job_level = atoi(data);
- SQL->GetData(sql_handle, 6, &data, NULL); online = atoi(data);
+ SQL->GetData(inter->sql_handle, 0, &data, NULL); char_id = atoi(data);
+ SQL->GetData(inter->sql_handle, 1, &data, NULL); safestrncpy(name, data, sizeof(name));
+ SQL->GetData(inter->sql_handle, 2, &data, NULL); char_num = atoi(data);
+ SQL->GetData(inter->sql_handle, 3, &data, NULL); class_ = atoi(data);
+ SQL->GetData(inter->sql_handle, 4, &data, NULL); base_level = atoi(data);
+ SQL->GetData(inter->sql_handle, 5, &data, NULL); job_level = atoi(data);
+ SQL->GetData(inter->sql_handle, 6, &data, NULL); online = atoi(data);
- inter_msg_to_fd(map_fd, u_fd, u_aid, "[Slot/CID: %d/%d] %s | %s | Level: %d/%d | %s", char_num, char_id, name, job_name(class_), base_level, job_level, online?"On":"Off");
+ inter->msg_to_fd(map_fd, u_fd, u_aid, "[Slot/CID: %d/%d] %s | %s | Level: %d/%d | %s", char_num, char_id, name, inter->job_name(class_), base_level, job_level, online?"On":"Off");
}
}
- SQL->FreeResult(sql_handle);
+ SQL->FreeResult(inter->sql_handle);
return;
}
@@ -696,48 +701,49 @@ void mapif_parse_accinfo2(bool success, int map_fd, int u_fd, int u_aid, int acc
* @param val either str or int, depending on type
* @param type false when int, true otherwise
**/
-void inter_savereg(int account_id, int char_id, const char *key, unsigned int index, intptr_t val, bool is_string) {
+void inter_savereg(int account_id, int char_id, const char *key, unsigned int index, intptr_t val, bool is_string)
+{
/* to login server we go! */
if( key[0] == '#' && key[1] == '#' ) {/* global account reg */
- if( session_isValid(login_fd) )
- global_accreg_to_login_add(key,index,val,is_string);
+ if( session_isValid(chr->login_fd) )
+ chr->global_accreg_to_login_add(key,index,val,is_string);
else {
ShowError("Login server unavailable, cant perform update on '%s' variable for AID:%d CID:%d\n",key,account_id,char_id);
}
} else if ( key[0] == '#' ) {/* local account reg */
if( is_string ) {
if( val ) {
- if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%s')", acc_reg_str_db, account_id, key, index, (char*)val) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%s')", acc_reg_str_db, account_id, key, index, (char*)val) )
+ Sql_ShowDebug(inter->sql_handle);
} else {
- if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", acc_reg_str_db, account_id, key, index) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `account_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", acc_reg_str_db, account_id, key, index) )
+ Sql_ShowDebug(inter->sql_handle);
}
} else {
if( val ) {
- if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%d')", acc_reg_num_db, account_id, key, index, (int)val) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%d')", acc_reg_num_db, account_id, key, index, (int)val) )
+ Sql_ShowDebug(inter->sql_handle);
} else {
- if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `account_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", acc_reg_num_db, account_id, key, index) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `account_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", acc_reg_num_db, account_id, key, index) )
+ Sql_ShowDebug(inter->sql_handle);
}
}
} else { /* char reg */
if( is_string ) {
if( val ) {
- if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`char_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%s')", char_reg_str_db, char_id, key, index, (char*)val) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "REPLACE INTO `%s` (`char_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%s')", char_reg_str_db, char_id, key, index, (char*)val) )
+ Sql_ShowDebug(inter->sql_handle);
} else {
- if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", char_reg_str_db, char_id, key, index) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", char_reg_str_db, char_id, key, index) )
+ Sql_ShowDebug(inter->sql_handle);
}
} else {
if( val ) {
- if( SQL_ERROR == SQL->Query(sql_handle, "REPLACE INTO `%s` (`char_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%d')", char_reg_num_db, char_id, key, index, (int)val) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "REPLACE INTO `%s` (`char_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%d')", char_reg_num_db, char_id, key, index, (int)val) )
+ Sql_ShowDebug(inter->sql_handle);
} else {
- if( SQL_ERROR == SQL->Query(sql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", char_reg_num_db, char_id, key, index) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "DELETE FROM `%s` WHERE `char_id` = '%d' AND `key` = '%s' AND `index` = '%u' LIMIT 1", char_reg_num_db, char_id, key, index) )
+ Sql_ShowDebug(inter->sql_handle);
}
}
}
@@ -753,18 +759,18 @@ int inter_accreg_fromsql(int account_id,int char_id, int fd, int type)
switch( type ) {
case 3: //char reg
- if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `char_id`='%d'", char_reg_str_db, char_id) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `char_id`='%d'", char_reg_str_db, char_id) )
+ Sql_ShowDebug(inter->sql_handle);
break;
case 2: //account reg
- if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `account_id`='%d'", acc_reg_str_db, account_id) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `account_id`='%d'", acc_reg_str_db, account_id) )
+ Sql_ShowDebug(inter->sql_handle);
break;
case 1: //account2 reg
- ShowError("inter_accreg_fromsql: Char server shouldn't handle type 1 registry values (##). That is the login server's work!\n");
+ ShowError("inter->accreg_fromsql: Char server shouldn't handle type 1 registry values (##). That is the login server's work!\n");
return 0;
default:
- ShowError("inter_accreg_fromsql: Invalid type %d\n", type);
+ ShowError("inter->accreg_fromsql: Invalid type %d\n", type);
return 0;
}
@@ -784,9 +790,9 @@ int inter_accreg_fromsql(int account_id,int char_id, int fd, int type)
* str type
* { keyLength(B), key(<keyLength>), index(L), valLength(B), val(<valLength>) }
**/
- while ( SQL_SUCCESS == SQL->NextRow(sql_handle) ) {
+ while ( SQL_SUCCESS == SQL->NextRow(inter->sql_handle) ) {
- SQL->GetData(sql_handle, 0, &data, NULL);
+ SQL->GetData(inter->sql_handle, 0, &data, NULL);
len = strlen(data)+1;
WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 32 */
@@ -795,12 +801,12 @@ int inter_accreg_fromsql(int account_id,int char_id, int fd, int type)
safestrncpy((char*)WFIFOP(fd,plen), data, len);
plen += len;
- SQL->GetData(sql_handle, 1, &data, NULL);
+ SQL->GetData(inter->sql_handle, 1, &data, NULL);
WFIFOL(fd, plen) = (unsigned int)atol(data);
plen += 4;
- SQL->GetData(sql_handle, 2, &data, NULL);
+ SQL->GetData(inter->sql_handle, 2, &data, NULL);
len = strlen(data)+1;
WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 254 */
@@ -832,19 +838,19 @@ int inter_accreg_fromsql(int account_id,int char_id, int fd, int type)
WFIFOW(fd, 2) = plen;
WFIFOSET(fd, plen);
- SQL->FreeResult(sql_handle);
+ SQL->FreeResult(inter->sql_handle);
switch( type ) {
case 3: //char reg
- if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `char_id`='%d'", char_reg_num_db, char_id) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `char_id`='%d'", char_reg_num_db, char_id) )
+ Sql_ShowDebug(inter->sql_handle);
break;
case 2: //account reg
- if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `account_id`='%d'", acc_reg_num_db, account_id) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `key`, `index`, `value` FROM `%s` WHERE `account_id`='%d'", acc_reg_num_db, account_id) )
+ Sql_ShowDebug(inter->sql_handle);
break;
case 1: //account2 reg
- ShowError("inter_accreg_fromsql: Char server shouldn't handle type 1 registry values (##). That is the login server's work!\n");
+ ShowError("inter->accreg_fromsql: Char server shouldn't handle type 1 registry values (##). That is the login server's work!\n");
return 0;
}
@@ -864,9 +870,9 @@ int inter_accreg_fromsql(int account_id,int char_id, int fd, int type)
* int type
* { keyLength(B), key(<keyLength>), index(L), value(L) }
**/
- while ( SQL_SUCCESS == SQL->NextRow(sql_handle) ) {
+ while ( SQL_SUCCESS == SQL->NextRow(inter->sql_handle) ) {
- SQL->GetData(sql_handle, 0, &data, NULL);
+ SQL->GetData(inter->sql_handle, 0, &data, NULL);
len = strlen(data)+1;
WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 32 */
@@ -875,12 +881,12 @@ int inter_accreg_fromsql(int account_id,int char_id, int fd, int type)
safestrncpy((char*)WFIFOP(fd,plen), data, len);
plen += len;
- SQL->GetData(sql_handle, 1, &data, NULL);
+ SQL->GetData(inter->sql_handle, 1, &data, NULL);
WFIFOL(fd, plen) = (unsigned int)atol(data);
plen += 4;
- SQL->GetData(sql_handle, 2, &data, NULL);
+ SQL->GetData(inter->sql_handle, 2, &data, NULL);
WFIFOL(fd, plen) = atoi(data);
plen += 4;
@@ -909,7 +915,7 @@ int inter_accreg_fromsql(int account_id,int char_id, int fd, int type)
WFIFOW(fd, 2) = plen;
WFIFOSET(fd, plen);
- SQL->FreeResult(sql_handle);
+ SQL->FreeResult(inter->sql_handle);
return 1;
}
@@ -956,7 +962,7 @@ static int inter_config_read(const char* cfgName)
else if(!strcmpi(w1,"log_inter"))
log_inter = atoi(w2);
else if(!strcmpi(w1,"import"))
- inter_config_read(w2);
+ inter->config_read(w2);
}
fclose(fp);
@@ -969,7 +975,8 @@ static int inter_config_read(const char* cfgName)
* Save interlog into sql (arglist version)
* @see inter_log
*/
-int inter_vlog(char* fmt, va_list ap) {
+int inter_vlog(char* fmt, va_list ap)
+{
char str[255];
char esc_str[sizeof(str)*2+1];// escaped str
va_list apcopy;
@@ -978,9 +985,9 @@ int inter_vlog(char* fmt, va_list ap) {
vsnprintf(str, sizeof(str), fmt, apcopy);
va_end(apcopy);
- SQL->EscapeStringLen(sql_handle, esc_str, str, strnlen(str, sizeof(str)));
- if( SQL_ERROR == SQL->Query(sql_handle, "INSERT INTO `%s` (`time`, `log`) VALUES (NOW(), '%s')", interlog_db, esc_str) )
- Sql_ShowDebug(sql_handle);
+ SQL->EscapeStringLen(inter->sql_handle, esc_str, str, strnlen(str, sizeof(str)));
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` (`time`, `log`) VALUES (NOW(), '%s')", interlog_db, esc_str) )
+ Sql_ShowDebug(inter->sql_handle);
return 0;
}
@@ -991,12 +998,13 @@ int inter_vlog(char* fmt, va_list ap) {
* @param ... Additional (printf-like) arguments
* @return Always 0 // FIXME
*/
-int inter_log(char* fmt, ...) {
+int inter_log(char* fmt, ...)
+{
va_list ap;
int ret;
va_start(ap,fmt);
- ret = inter_vlog(fmt, ap);
+ ret = inter->vlog(fmt, ap);
va_end(ap);
return ret;
@@ -1007,36 +1015,36 @@ int inter_init_sql(const char *file)
{
//int i;
- inter_config_read(file);
+ inter->config_read(file);
//DB connection initialized
- sql_handle = SQL->Malloc();
+ inter->sql_handle = SQL->Malloc();
ShowInfo("Connect Character DB server.... (Character Server)\n");
- if( SQL_ERROR == SQL->Connect(sql_handle, char_server_id, char_server_pw, char_server_ip, (uint16)char_server_port, char_server_db) )
+ if( SQL_ERROR == SQL->Connect(inter->sql_handle, char_server_id, char_server_pw, char_server_ip, (uint16)char_server_port, char_server_db) )
{
- Sql_ShowDebug(sql_handle);
- SQL->Free(sql_handle);
+ Sql_ShowDebug(inter->sql_handle);
+ SQL->Free(inter->sql_handle);
exit(EXIT_FAILURE);
}
if( *default_codepage ) {
- if( SQL_ERROR == SQL->SetEncoding(sql_handle, default_codepage) )
- Sql_ShowDebug(sql_handle);
+ if( SQL_ERROR == SQL->SetEncoding(inter->sql_handle, default_codepage) )
+ Sql_ShowDebug(inter->sql_handle);
}
wis_db = idb_alloc(DB_OPT_RELEASE_DATA);
- inter_guild_sql_init();
- inter_storage_sql_init();
- inter_party_sql_init();
- inter_pet_sql_init();
- inter_homunculus_sql_init();
- inter_mercenary_sql_init();
- inter_elemental_sql_init();
- inter_mail_sql_init();
- inter_auction_sql_init();
-
- geoip_init();
- msg_config_read("conf/messages.conf", false);
+ inter_guild->sql_init();
+ inter_storage->sql_init();
+ inter_party->sql_init();
+ inter_pet->sql_init();
+ inter_homunculus->sql_init();
+ inter_mercenary->sql_init();
+ inter_elemental->sql_init();
+ inter_mail->sql_init();
+ inter_auction->sql_init();
+
+ geoip->init();
+ inter->msg_config_read("conf/messages.conf", false);
return 0;
}
@@ -1045,18 +1053,18 @@ void inter_final(void)
{
wis_db->destroy(wis_db, NULL);
- inter_guild_sql_final();
- inter_storage_sql_final();
- inter_party_sql_final();
- inter_pet_sql_final();
- inter_homunculus_sql_final();
- inter_mercenary_sql_final();
- inter_elemental_sql_final();
- inter_mail_sql_final();
- inter_auction_sql_final();
-
- geoip_final(true);
- do_final_msg();
+ inter_guild->sql_final();
+ inter_storage->sql_final();
+ inter_party->sql_final();
+ inter_pet->sql_final();
+ inter_homunculus->sql_final();
+ inter_mercenary->sql_final();
+ inter_elemental->sql_final();
+ inter_mail->sql_final();
+ inter_auction->sql_final();
+
+ geoip->final(true);
+ inter->do_final_msg();
return;
}
@@ -1081,7 +1089,7 @@ int mapif_broadcast(unsigned char *mes, int len, unsigned int fontColor, short f
WBUFW(buf,12) = fontAlign;
WBUFW(buf,14) = fontY;
memcpy(WBUFP(buf,16), mes, len - 16);
- mapif_sendallwos(sfd, buf, len);
+ mapif->sendallwos(sfd, buf, len);
if (buf)
aFree(buf);
@@ -1100,20 +1108,24 @@ int mapif_wis_message(struct WisData *wd)
memcpy(WBUFP(buf, 8), wd->src, NAME_LENGTH);
memcpy(WBUFP(buf,32), wd->dst, NAME_LENGTH);
memcpy(WBUFP(buf,56), wd->msg, wd->len);
- wd->count = mapif_sendall(buf,WBUFW(buf,2));
+ wd->count = mapif->sendall(buf,WBUFW(buf,2));
return 0;
}
-// Wis sending result
-int mapif_wis_end(struct WisData *wd, int flag)
+void mapif_wis_response(int fd, unsigned char *src, int flag)
{
unsigned char buf[27];
-
WBUFW(buf, 0)=0x3802;
- memcpy(WBUFP(buf, 2),wd->src,24);
+ memcpy(WBUFP(buf, 2),src,24);
WBUFB(buf,26)=flag;
- mapif_send(wd->fd,buf,27);
+ mapif->send(fd,buf,27);
+}
+
+// Wis sending result
+int mapif_wis_end(struct WisData *wd, int flag)
+{
+ mapif->wis_response(wd->fd, wd->src, flag);
return 0;
}
@@ -1121,12 +1133,13 @@ int mapif_wis_end(struct WisData *wd, int flag)
//static void mapif_account_reg(int fd, unsigned char *src)
//{
// WBUFW(src,0)=0x3804; //NOTE: writing to RFIFO
-// mapif_sendallwos(fd, src, WBUFW(src,2));
+// mapif->sendallwos(fd, src, WBUFW(src,2));
//}
// Send the requested account_reg
-int mapif_account_reg_reply(int fd,int account_id,int char_id, int type) {
- inter_accreg_fromsql(account_id,char_id,fd,type);
+int mapif_account_reg_reply(int fd,int account_id,int char_id, int type)
+{
+ inter->accreg_fromsql(account_id,char_id,fd,type);
return 0;
}
@@ -1151,7 +1164,7 @@ int mapif_disconnectplayer(int fd, int account_id, int char_id, int reason)
* Existence check of WISP data
* @see DBApply
*/
-int check_ttl_wisdata_sub(DBKey key, DBData *data, va_list ap)
+int inter_check_ttl_wisdata_sub(DBKey key, DBData *data, va_list ap)
{
int64 tick;
struct WisData *wd = DB->data2ptr(data);
@@ -1163,19 +1176,19 @@ int check_ttl_wisdata_sub(DBKey key, DBData *data, va_list ap)
return 0;
}
-int check_ttl_wisdata(void)
+int inter_check_ttl_wisdata(void)
{
int64 tick = timer->gettick();
int i;
do {
wis_delnum = 0;
- wis_db->foreach(wis_db, check_ttl_wisdata_sub, tick);
+ wis_db->foreach(wis_db, inter->check_ttl_wisdata_sub, tick);
for(i = 0; i < wis_delnum; i++) {
struct WisData *wd = (struct WisData*)idb_get(wis_db, wis_dellist[i]);
ShowWarning("inter: wis data id=%d time out : from %s to %s\n", wd->id, wd->src, wd->dst);
// removed. not send information after a timeout. Just no answer for the player
- //mapif_wis_end(wd, 1); // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
+ //mapif->wis_end(wd, 1); // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
idb_remove(wis_db, wd->id);
}
} while(wis_delnum >= WISDELLIST_MAX);
@@ -1188,7 +1201,7 @@ int check_ttl_wisdata(void)
// broadcast sending
int mapif_parse_broadcast(int fd)
{
- mapif_broadcast(RFIFOP(fd,16), RFIFOW(fd,2), RFIFOL(fd,4), RFIFOW(fd,8), RFIFOW(fd,10), RFIFOW(fd,12), RFIFOW(fd,14), fd);
+ mapif->broadcast(RFIFOP(fd,16), RFIFOW(fd,2), RFIFOL(fd,4), RFIFOW(fd,8), RFIFOW(fd,10), RFIFOW(fd,12), RFIFOW(fd,14), fd);
return 0;
}
@@ -1216,41 +1229,32 @@ int mapif_parse_WisRequest(int fd)
safestrncpy(name, (char*)RFIFOP(fd,28), NAME_LENGTH); //Received name may be too large and not contain \0! [Skotlex]
- SQL->EscapeStringLen(sql_handle, esc_name, name, strnlen(name, NAME_LENGTH));
- if( SQL_ERROR == SQL->Query(sql_handle, "SELECT `name` FROM `%s` WHERE `name`='%s'", char_db, esc_name) )
- Sql_ShowDebug(sql_handle);
+ SQL->EscapeStringLen(inter->sql_handle, esc_name, name, strnlen(name, NAME_LENGTH));
+ if( SQL_ERROR == SQL->Query(inter->sql_handle, "SELECT `name` FROM `%s` WHERE `name`='%s'", char_db, esc_name) )
+ Sql_ShowDebug(inter->sql_handle);
// search if character exists before to ask all map-servers
- if( SQL_SUCCESS != SQL->NextRow(sql_handle) )
+ if( SQL_SUCCESS != SQL->NextRow(inter->sql_handle) )
{
- unsigned char buf[27];
- WBUFW(buf, 0) = 0x3802;
- memcpy(WBUFP(buf, 2), RFIFOP(fd, 4), NAME_LENGTH);
- WBUFB(buf,26) = 1; // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
- mapif_send(fd, buf, 27);
+ mapif->wis_response(fd, RFIFOP(fd, 4), 1);
}
else
{// Character exists. So, ask all map-servers
// to be sure of the correct name, rewrite it
- SQL->GetData(sql_handle, 0, &data, &len);
+ SQL->GetData(inter->sql_handle, 0, &data, &len);
memset(name, 0, NAME_LENGTH);
memcpy(name, data, min(len, NAME_LENGTH));
// if source is destination, don't ask other servers.
if( strncmp((const char*)RFIFOP(fd,4), name, NAME_LENGTH) == 0 )
{
- uint8 buf[27];
- WBUFW(buf, 0) = 0x3802;
- memcpy(WBUFP(buf, 2), RFIFOP(fd, 4), NAME_LENGTH);
- WBUFB(buf,26) = 1; // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
- mapif_send(fd, buf, 27);
+ mapif->wis_response(fd, RFIFOP(fd, 4), 1);
}
else
{
-
CREATE(wd, struct WisData, 1);
// Whether the failure of previous wisp/page transmission (timeout)
- check_ttl_wisdata();
+ inter->check_ttl_wisdata();
wd->id = ++wisid;
wd->fd = fd;
@@ -1260,11 +1264,11 @@ int mapif_parse_WisRequest(int fd)
memcpy(wd->msg, RFIFOP(fd,52), wd->len);
wd->tick = timer->gettick();
idb_put(wis_db, wd->id, wd);
- mapif_wis_message(wd);
+ mapif->wis_message(wd);
}
}
- SQL->FreeResult(sql_handle);
+ SQL->FreeResult(inter->sql_handle);
return 0;
}
@@ -1282,7 +1286,7 @@ int mapif_parse_WisReply(int fd)
return 0; // This wisp was probably suppress before, because it was timeout of because of target was found on another map-server
if ((--wd->count) <= 0 || flag != 1) {
- mapif_wis_end(wd, flag); // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
+ mapif->wis_end(wd, flag); // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
idb_remove(wis_db, id);
}
@@ -1296,7 +1300,7 @@ int mapif_parse_WisToGM(int fd)
memcpy(WBUFP(buf,0), RFIFOP(fd,0), RFIFOW(fd,2));
WBUFW(buf, 0) = 0x3803;
- mapif_sendall(buf, RFIFOW(fd,2));
+ mapif->sendall(buf, RFIFOW(fd,2));
return 0;
}
@@ -1310,10 +1314,10 @@ int mapif_parse_Registry(int fd)
int cursor = 14, i;
char key[32], sval[254];
unsigned int index;
- bool isLoginActive = session_isActive(login_fd);
+ bool isLoginActive = session_isActive(chr->login_fd);
if( isLoginActive )
- global_accreg_to_login_start(account_id,char_id);
+ chr->global_accreg_to_login_start(account_id,char_id);
for(i = 0; i < count; i++) {
safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor));
@@ -1325,31 +1329,31 @@ int mapif_parse_Registry(int fd)
switch (RFIFOB(fd, cursor++)) {
/* int */
case 0:
- inter_savereg(account_id,char_id,key,index,RFIFOL(fd, cursor),false);
+ inter->savereg(account_id,char_id,key,index,RFIFOL(fd, cursor),false);
cursor += 4;
break;
case 1:
- inter_savereg(account_id,char_id,key,index,0,false);
+ inter->savereg(account_id,char_id,key,index,0,false);
break;
/* str */
case 2:
safestrncpy(sval, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor));
cursor += RFIFOB(fd, cursor) + 1;
- inter_savereg(account_id,char_id,key,index,(intptr_t)sval,true);
+ inter->savereg(account_id,char_id,key,index,(intptr_t)sval,true);
break;
case 3:
- inter_savereg(account_id,char_id,key,index,0,true);
+ inter->savereg(account_id,char_id,key,index,0,true);
break;
default:
- ShowError("mapif_parse_Registry: unknown type %d\n",RFIFOB(fd, cursor - 1));
+ ShowError("mapif->parse_Registry: unknown type %d\n",RFIFOB(fd, cursor - 1));
return 1;
}
}
if( isLoginActive )
- global_accreg_to_login_send();
+ chr->global_accreg_to_login_send();
}
return 0;
}
@@ -1358,15 +1362,15 @@ int mapif_parse_Registry(int fd)
int mapif_parse_RegistryRequest(int fd)
{
//Load Char Registry
- if (RFIFOB(fd,12)) mapif_account_reg_reply(fd,RFIFOL(fd,2),RFIFOL(fd,6),3);
+ if (RFIFOB(fd,12)) mapif->account_reg_reply(fd,RFIFOL(fd,2),RFIFOL(fd,6),3);
//Load Account Registry
- if (RFIFOB(fd,11)) mapif_account_reg_reply(fd,RFIFOL(fd,2),RFIFOL(fd,6),2);
+ if (RFIFOB(fd,11)) mapif->account_reg_reply(fd,RFIFOL(fd,2),RFIFOL(fd,6),2);
//Ask Login Server for Account2 values.
- if (RFIFOB(fd,10)) request_accreg2(RFIFOL(fd,2),RFIFOL(fd,6));
+ if (RFIFOB(fd,10)) chr->request_accreg2(RFIFOL(fd,2),RFIFOL(fd,6));
return 1;
}
-static void mapif_namechange_ack(int fd, int account_id, int char_id, int type, int flag, char *name)
+void mapif_namechange_ack(int fd, int account_id, int char_id, int type, int flag, const char *const name)
{
WFIFOHEAD(fd, NAME_LENGTH+13);
WFIFOW(fd, 0) = 0x3806;
@@ -1393,13 +1397,13 @@ int mapif_parse_NameChangeRequest(int fd)
if (char_name_option == 1) { // only letters/symbols in char_name_letters are authorized
for (i = 0; i < NAME_LENGTH && name[i]; i++)
if (strchr(char_name_letters, name[i]) == NULL) {
- mapif_namechange_ack(fd, account_id, char_id, type, 0, name);
+ mapif->namechange_ack(fd, account_id, char_id, type, 0, name);
return 0;
}
} else if (char_name_option == 2) { // letters/symbols in char_name_letters are forbidden
for (i = 0; i < NAME_LENGTH && name[i]; i++)
if (strchr(char_name_letters, name[i]) != NULL) {
- mapif_namechange_ack(fd, account_id, char_id, type, 0, name);
+ mapif->namechange_ack(fd, account_id, char_id, type, 0, name);
return 0;
}
}
@@ -1408,7 +1412,7 @@ int mapif_parse_NameChangeRequest(int fd)
//updated here, because changing it on the map won't make it be saved [Skotlex]
//name allowed.
- mapif_namechange_ack(fd, account_id, char_id, type, 1, name);
+ mapif->namechange_ack(fd, account_id, char_id, type, 1, name);
return 0;
}
@@ -1443,30 +1447,30 @@ int inter_parse_frommap(int fd)
return 0;
// Check packet length
- if((len = inter_check_length(fd, inter_recv_packet_length[cmd - 0x3000])) == 0)
+ if((len = inter->check_length(fd, inter_recv_packet_length[cmd - 0x3000])) == 0)
return 2;
switch(cmd) {
- case 0x3000: mapif_parse_broadcast(fd); break;
- case 0x3001: mapif_parse_WisRequest(fd); break;
- case 0x3002: mapif_parse_WisReply(fd); break;
- case 0x3003: mapif_parse_WisToGM(fd); break;
- case 0x3004: mapif_parse_Registry(fd); break;
- case 0x3005: mapif_parse_RegistryRequest(fd); break;
- case 0x3006: mapif_parse_NameChangeRequest(fd); break;
- case 0x3007: mapif_parse_accinfo(fd); break;
+ case 0x3000: mapif->parse_broadcast(fd); break;
+ case 0x3001: mapif->parse_WisRequest(fd); break;
+ case 0x3002: mapif->parse_WisReply(fd); break;
+ case 0x3003: mapif->parse_WisToGM(fd); break;
+ case 0x3004: mapif->parse_Registry(fd); break;
+ case 0x3005: mapif->parse_RegistryRequest(fd); break;
+ case 0x3006: mapif->parse_NameChangeRequest(fd); break;
+ case 0x3007: mapif->parse_accinfo(fd); break;
/* 0x3008 is used by the report stuff */
default:
- if( inter_party_parse_frommap(fd)
- || inter_guild_parse_frommap(fd)
- || inter_storage_parse_frommap(fd)
- || inter_pet_parse_frommap(fd)
- || inter_homunculus_parse_frommap(fd)
- || inter_mercenary_parse_frommap(fd)
- || inter_elemental_parse_frommap(fd)
- || inter_mail_parse_frommap(fd)
- || inter_auction_parse_frommap(fd)
- || inter_quest_parse_frommap(fd)
+ if( inter_party->parse_frommap(fd)
+ || inter_guild->parse_frommap(fd)
+ || inter_storage->parse_frommap(fd)
+ || inter_pet->parse_frommap(fd)
+ || inter_homunculus->parse_frommap(fd)
+ || inter_mercenary->parse_frommap(fd)
+ || inter_elemental->parse_frommap(fd)
+ || inter_mail->parse_frommap(fd)
+ || inter_auction->parse_frommap(fd)
+ || inter_quest->parse_frommap(fd)
)
break;
else
@@ -1477,4 +1481,28 @@ int inter_parse_frommap(int fd)
return 1;
}
-
+void inter_defaults(void)
+{
+ inter = &inter_s;
+
+ inter->sql_handle = NULL;
+
+ inter->msg_txt = inter_msg_txt;
+ inter->msg_config_read = inter_msg_config_read;
+ inter->do_final_msg = inter_do_final_msg;
+ inter->job_name = inter_job_name;
+ inter->vmsg_to_fd = inter_vmsg_to_fd;
+ inter->msg_to_fd = inter_msg_to_fd;
+ inter->savereg = inter_savereg;
+ inter->accreg_fromsql = inter_accreg_fromsql;
+ inter->config_read = inter_config_read;
+ inter->vlog = inter_vlog;
+ inter->log = inter_log;
+ inter->init_sql = inter_init_sql;
+ inter->mapif_init = inter_mapif_init;
+ inter->check_ttl_wisdata_sub = inter_check_ttl_wisdata_sub;
+ inter->check_ttl_wisdata = inter->check_ttl_wisdata;
+ inter->check_length = inter_check_length;
+ inter->parse_frommap = inter_parse_frommap;
+ inter->final = inter_final;
+}