Skip to content

Commit

Permalink
Remove some duplicate code
Browse files Browse the repository at this point in the history
  • Loading branch information
lighta committed Mar 15, 2015
1 parent d1eeda3 commit d92a8df
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 85 deletions.
94 changes: 41 additions & 53 deletions src/char/char_clif.c
Expand Up @@ -367,9 +367,9 @@ void chclif_char_delete2_cancel_ack(int fd, uint32 char_id, uint32 result) {

// CH: <0827>.W <char id>.L
int chclif_parse_char_delete2_req(int fd, struct char_session_data* sd) {
FIFOSD_CHECK(6)
{
uint32 char_id, i;
FIFOSD_CHECK(6)
{
uint32 char_id, i;
char* data;
time_t delete_date;

Expand Down Expand Up @@ -557,15 +557,9 @@ int chclif_parse_maplogin(int fd){
strcmp(l_user, charserv_config.userid) != 0 ||
strcmp(l_pass, charserv_config.passwd) != 0 )
{
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x2af9;
WFIFOB(fd,2) = 3;
WFIFOSET(fd,3);
chmapif_connectack(fd, 3); //fail
} else {
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x2af9;
WFIFOB(fd,2) = 0;
WFIFOSET(fd,3);
chmapif_connectack(fd, 0); //success

map_server[i].fd = fd;
map_server[i].ip = ntohl(RFIFOL(fd,54));
Expand Down Expand Up @@ -619,25 +613,21 @@ int chclif_parse_reqtoconnect(int fd, struct char_session_data* sd,uint32 ipl){
WFIFOL(fd,0) = account_id;
WFIFOSET(fd,4);

if( runflag != CHARSERVER_ST_RUNNING )
{
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x6c;
WFIFOB(fd,2) = 0;// rejected from server
WFIFOSET(fd,3);
if( runflag != CHARSERVER_ST_RUNNING ) {
chclif_reject(fd, 0); // rejected from server
return 1;
}

// search authentification
node = (struct auth_node*)idb_get(auth_db, account_id);
if( node != NULL &&
node->account_id == account_id &&
node->account_id == account_id &&
node->login_id1 == login_id1 &&
node->login_id2 == login_id2 /*&&
node->ip == ipl*/ )
{// authentication found (coming from map server)
sd->version = node->version;
idb_remove(auth_db, account_id);
sd->version = node->version;
idb_remove(auth_db, account_id);
char_auth_ok(fd, sd);
}
else
Expand All @@ -653,10 +643,7 @@ int chclif_parse_reqtoconnect(int fd, struct char_session_data* sd,uint32 ipl){
WFIFOL(login_fd,19) = fd;
WFIFOSET(login_fd,23);
} else { // if no login-server, we must refuse connection
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x6c;
WFIFOB(fd,2) = 0;
WFIFOSET(fd,3);
chclif_reject(fd, 0); // rejected from server
}
}
}
Expand Down Expand Up @@ -694,10 +681,7 @@ int chclif_parse_charselect(int fd, struct char_session_data* sd,uint32 ipl){
{ //Not found?? May be forged packet.
Sql_ShowDebug(sql_handle);
Sql_FreeResult(sql_handle);
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x6c;
WFIFOB(fd,2) = 0; // rejected from server
WFIFOSET(fd,3);
chclif_reject(fd, 0); // rejected from server
return 1;
}

Expand All @@ -706,19 +690,13 @@ int chclif_parse_charselect(int fd, struct char_session_data* sd,uint32 ipl){

// Prevent select a char while retrieving guild bound items
if (sd->flag&1) {
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x6c;
WFIFOB(fd,2) = 0; // rejected from server
WFIFOSET(fd,3);
chclif_reject(fd, 0); // rejected from server
return 1;
}

/* client doesn't let it get to this point if you're banned, so its a forged packet */
if( sd->found_char[slot] == char_id && sd->unban_time[slot] > time(NULL) ) {
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x6c;
WFIFOB(fd,2) = 0; // rejected from server
WFIFOSET(fd,3);
chclif_reject(fd, 0); // rejected from server
return 1;
}

Expand All @@ -727,11 +705,8 @@ int chclif_parse_charselect(int fd, struct char_session_data* sd,uint32 ipl){
if( !char_mmo_char_fromsql(char_id, &char_dat, true) ) { /* failed? set it back offline */
char_set_char_offline(char_id, sd->account_id);
/* failed to load something. REJECT! */
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x6c;
WFIFOB(fd,2) = 0;
WFIFOSET(fd,3);
return 1;/* jump off this boat */
chclif_reject(fd, 0); /* jump off this boat */
return 1;
}

//Have to switch over to the DB instance otherwise data won't propagate [Kevin]
Expand Down Expand Up @@ -880,6 +855,20 @@ int chclif_parse_createnewchar(int fd, struct char_session_data* sd,int cmd){
return 1;
}

/**
* Inform client that his deletion request was refused
* 0x70 <ErrorCode>B HC_REFUSE_DELETECHAR
* @param fd
* @param ErrorCode
* 00 = Incorrect Email address
*/
void chclif_refuse_delchar(int fd, uint8 errCode){
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x70;
WFIFOB(fd,2) = errCode;
WFIFOSET(fd,3);
}

int chclif_parse_delchar(int fd,struct char_session_data* sd, int cmd){
if (cmd == 0x68) FIFOSD_CHECK(46)
else if (cmd == 0x1fb) FIFOSD_CHECK(56)
Expand All @@ -899,21 +888,15 @@ int chclif_parse_delchar(int fd,struct char_session_data* sd, int cmd){
strcmp("a@a.com", sd->email) || //it is not default email, or
(strcmp("a@a.com", email) && strcmp("", email)) //email sent does not matches default
)) { //Fail
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x70;
WFIFOB(fd,2) = 0; // 00 = Incorrect Email address
WFIFOSET(fd,3);
chclif_refuse_delchar(fd,0); // 00 = Incorrect Email address
return 1;
}

// check if this char exists
ARR_FIND( 0, MAX_CHARS, i, sd->found_char[i] == cid );
if( i == MAX_CHARS )
{ // Such a character does not exist in the account
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x70;
WFIFOB(fd,2) = 0;
WFIFOSET(fd,3);
chclif_refuse_delchar(fd,0);
return 1;
}

Expand All @@ -927,10 +910,7 @@ int chclif_parse_delchar(int fd,struct char_session_data* sd, int cmd){
//can't delete the char
//either SQL error or can't delete by some CONFIG conditions
//del fail
WFIFOHEAD(fd,3);
WFIFOW(fd, 0) = 0x70;
WFIFOB(fd, 2) = 0;
WFIFOSET(fd, 3);
chclif_refuse_delchar(fd,0);
return 1;
}
/* Char successfully deleted.*/
Expand Down Expand Up @@ -1089,6 +1069,14 @@ int chclif_ack_captcha(int fd){
return 1;
}

// R 06C <ErrorCode>B HEADER_HC_REFUSE_ENTER
void chclif_reject(int fd, uint8 errCode){
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x6c;
WFIFOB(fd,2) = errCode;// rejected from server
WFIFOSET(fd,3);
}

// R 07e5 <?>.w <aid>.l
int chclif_parse_reqcaptcha(int fd){
//FIFOSD_CHECK(8)
Expand Down
2 changes: 2 additions & 0 deletions src/char/char_clif.h
Expand Up @@ -22,6 +22,8 @@ int chclif_parse_pincode_check( int fd, struct char_session_data* sd );
int chclif_parse_pincode_change( int fd, struct char_session_data* sd );
int chclif_parse_pincode_setnew( int fd, struct char_session_data* sd );

void chclif_reject(int fd, uint8 errCode);
void chclif_refuse_delchar(int fd, uint8 errCode);
void chclif_charlist_notify( int fd, struct char_session_data* sd );
void chclif_block_character( int fd, struct char_session_data* sd );
int chclif_mmo_send006b(int fd, struct char_session_data* sd);
Expand Down
10 changes: 2 additions & 8 deletions src/char/char_logif.c
Expand Up @@ -281,10 +281,7 @@ int chlogif_parse_ackaccreq(int fd, struct char_session_data* sd){
char_auth_ok(client_fd, sd);
break;
case 1:// auth failed
WFIFOHEAD(client_fd,3);
WFIFOW(client_fd,0) = 0x6c;
WFIFOB(client_fd,2) = 0;// rejected from server
WFIFOSET(client_fd,3);
chclif_reject(client_fd,0); // rejected from server
break;
}
}
Expand Down Expand Up @@ -324,10 +321,7 @@ int chlogif_parse_reqaccdata(int fd, struct char_session_data* sd){
(charserv_config.max_connect_user == 0 && sd->group_id != charserv_config.gm_allow_group) ||
( charserv_config.max_connect_user > 0 && char_count_users() >= charserv_config.max_connect_user && sd->group_id != charserv_config.gm_allow_group ) ) {
// refuse connection (over populated)
WFIFOHEAD(u_fd,3);
WFIFOW(u_fd,0) = 0x6c;
WFIFOW(u_fd,2) = 0;
WFIFOSET(u_fd,3);
chclif_reject(u_fd,0);
} else {
// send characters to player
chclif_mmo_char_send(u_fd, sd);
Expand Down
64 changes: 44 additions & 20 deletions src/char/char_mapif.c
Expand Up @@ -425,6 +425,20 @@ int chmapif_parse_reqsavechar(int fd, int id){
return 1;
}

/**
* Inform mapserv of a new character selection request
* @param fd : FD link tomapserv
* @param aid : Player account id
* @param res : result, 0=not ok, 1=ok
*/
void chmapif_charselres(int fd, uint32 aid, uint8 res){
WFIFOHEAD(fd,7);
WFIFOW(fd,0) = 0x2b03;
WFIFOL(fd,2) = aid;
WFIFOB(fd,6) = res;
WFIFOSET(fd,7);
}

/**
* Player Requesting char-select from map_serv
* @param fd: wich fd to parse from
Expand All @@ -442,11 +456,7 @@ int chmapif_parse_authok(int fd){
RFIFOSKIP(fd,19);

if( runflag != CHARSERVER_ST_RUNNING ){
WFIFOHEAD(fd,7);
WFIFOW(fd,0) = 0x2b03;
WFIFOL(fd,2) = account_id;
WFIFOB(fd,6) = 0;// not ok
WFIFOSET(fd,7);
chmapif_charselres(fd,account_id,0);
}else{
struct auth_node* node;
DBMap* auth_db = char_get_authdb();
Expand All @@ -473,12 +483,7 @@ int chmapif_parse_authok(int fd){
character->pincode_success = true;
}
}

WFIFOHEAD(fd,7);
WFIFOW(fd,0) = 0x2b03;
WFIFOL(fd,2) = account_id;
WFIFOB(fd,6) = 1;// ok
WFIFOSET(fd,7);
chmapif_charselres(fd,account_id,1);
}
}
return 1;
Expand Down Expand Up @@ -565,6 +570,20 @@ int chmapif_parse_req_skillcooldown(int fd){
return 1;
}

/**
* Inform the mapserv, of a change mapserv request
* @param fd :Link to mapserv
* @param nok : 0=accepted or no=1
*/
void chmapif_changemapserv_ack(int fd, bool nok){
WFIFOHEAD(fd,30);
WFIFOW(fd,0) = 0x2b06;
memcpy(WFIFOP(fd,2), RFIFOP(fd,2), 28);
if(nok)
WFIFOL(fd,6) = 0; //Set login1 to 0.(not ok)
WFIFOSET(fd,30);
}

/**
* Player requesting to change map-serv
* @param fd: wich fd to parse from
Expand Down Expand Up @@ -624,16 +643,9 @@ int chmapif_parse_reqchangemapserv(int fd){
data->server = map_id; //Update server where char is.

//Reply with an ack.
WFIFOHEAD(fd,30);
WFIFOW(fd,0) = 0x2b06;
memcpy(WFIFOP(fd,2), RFIFOP(fd,2), 28);
WFIFOSET(fd,30);
chmapif_changemapserv_ack(fd,0);
} else { //Reply with nak
WFIFOHEAD(fd,30);
WFIFOW(fd,0) = 0x2b06;
memcpy(WFIFOP(fd,2), RFIFOP(fd,2), 28);
WFIFOL(fd,6) = 0; //Set login1 to 0.
WFIFOSET(fd,30);
chmapif_changemapserv_ack(fd,1);
}
RFIFOSKIP(fd,39);
}
Expand Down Expand Up @@ -1397,6 +1409,18 @@ int chmapif_bonus_script_save(int fd) {
return 1;
}

/**
* Inform the mapserv wheater his login attemp to us was a success or not
* @param fd : file descriptor to parse, (link to mapserv)
* @param errCode 0:success, 3:fail
*/
void chmapif_connectack(int fd, uint8 errCode){
WFIFOHEAD(fd,3);
WFIFOW(fd,0) = 0x2af9;
WFIFOB(fd,2) = errCode;
WFIFOSET(fd,3);
}

/**
* Entry point from map-server to char-server.
* Function that checks incoming command, then splits it to the correct handler.
Expand Down
4 changes: 4 additions & 0 deletions src/char/char_mapif.h
Expand Up @@ -54,6 +54,10 @@ int chmapif_parse_reqcharunban(int fd);
int chmapif_bonus_script_get(int fd);
int chmapif_bonus_script_save(int fd);

void chmapif_connectack(int fd, uint8 errCode);
void chmapif_charselres(int fd, uint32 aid, uint8 res);
void chmapif_changemapserv_ack(int fd, bool nok);

int chmapif_parse(int fd);
int chmapif_init(int fd);
void chmapif_server_init(int id);
Expand Down
13 changes: 9 additions & 4 deletions src/map/chrif.c
Expand Up @@ -454,7 +454,7 @@ int chrif_changemapserver(struct map_session_data* sd, uint32 ip, uint16 port) {
return 0;
}

/// map-server change request acknowledgement (positive or negative)
/// map-server change (mapserv) request acknowledgement (positive or negative)
/// R 2b06 <account_id>.L <login_id1>.L <login_id2>.L <char_id>.L <map_index>.W <x>.W <y>.W <ip>.L <port>.W
int chrif_changemapserverack(uint32 account_id, int login_id1, int login_id2, uint32 char_id, short map_index, short x, short y, uint32 ip, uint16 port) {
struct auth_node *node;
Expand All @@ -474,9 +474,14 @@ int chrif_changemapserverack(uint32 account_id, int login_id1, int login_id2, ui
return 0;
}

/*==========================================
*
*------------------------------------------*/
/**
* Does the char_serv have validate our connection to him ?
* If yes then
* - Send all our mapname to charserv
* - Retrieve guild castle
* - Do OnInterIfInit and OnInterIfInitOnce on all npc
* 0x2af9 <errCode>B
*/
int chrif_connectack(int fd) {
static bool char_init_done = false;

Expand Down

0 comments on commit d92a8df

Please sign in to comment.