Added proper checks to adoption processing (followup to r12428).

Cleaned up some code / fixed some typos.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12432 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
ultramage 2008-03-25 09:56:18 +00:00
parent 88243637cc
commit 9c07918456
11 changed files with 82 additions and 55 deletions

View File

@ -42,7 +42,7 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
flags so that they closely match jA's (for easier comparisons).
- Fixed code that allowed placing of skill unit cells on 'gaps'.
- Fixed code that prevented successful casting of land skills on 'gaps'
(officially it's possbile, even though they will not deploy entirely).
(officially it's possible, even though they will not deploy entirely).
2008/03/07
* Script induced status changes can now be reduced by stats/cards (but
only trigger rate is reduced, not duration).

View File

@ -2967,7 +2967,7 @@ capacity, and 0 otherwise. It is important to see if a player can carry the
items you expect to give them, failing to do that may open your script up to
abuse or create some very unfair errors.
This fucntion, in addition to checking to see if the player is capable of
This function, in addition to checking to see if the player is capable of
holding a set amount of items, also ensures the player has room in their
inventory for the item(s) they will be receciving.
@ -6130,7 +6130,7 @@ invoking character.
---------------------------------------
*homshuffle
*homshuffle;
This will recalculate the homunculus stats acording to its level, of the
current invoking character.

View File

@ -525,7 +525,7 @@ Date Added
* Changed name from "Pharacon" to "Phracon" in refine.txt. [Samuray22]
- Thanks to Barron-Monster.
2007/07/26
* Rev 10917 Added Cash Shop item fucntions. (/other/CashShop_Functions.txt) [L0ne_W0lf]
* Rev 10917 Added Cash Shop item functions. (/other/CashShop_Functions.txt) [L0ne_W0lf]
2007/07/24
* Changed name from "Emvertacon" to "Emveretarcon" in refine.txt. [Samuray22]
- Thanks to Barron-Monster.

View File

@ -27,7 +27,7 @@
//= 1.1 Fixed checkitems for ale, fixed ale prize(gives the correct one now). [Kisuka]
//= 1.2 Optimized. Uses only one variable now. [L0ne_W0lf]
//= Corrected EXP rewards, and some typos.
//= 1.3 Corrected random in item fuction. [L0ne_W0lf]
//= 1.3 Corrected random in item function. [L0ne_W0lf]
//============================================================
prt_fild05,170,286,4 script Anxious Leprechaun#8pday 954,{

View File

@ -317,7 +317,7 @@ job_sword1,223,167,2 script Mae#swd_1_success 92,{
end;
}
// Examination Course Fucntions
// Examination Course Functions
//============================================================
function script F_JobSwdMedic {
percentheal 100,0;

View File

@ -32,7 +32,7 @@
//= 2.07 Added TK_Q variable clear. 2.08 Added NINJ_Q variable clear [Lupus]
//= 2.09 Cleared F_ClearGarbage [Lupus]
//= 2.10 Added F_CheckMaxCount to check count of carrid items. [L0ne_w0lf]
//= 2.10a Removed fuction F_CheckMaxCount. Not needed. [L0ne_W0lf]
//= 2.10a Removed function F_CheckMaxCount. Not needed. [L0ne_W0lf]
//= 2.11 Updated function Job_Change to jobchange based on Upper value. [Paradox924X]
//============================================================

View File

@ -2345,7 +2345,7 @@ int parse_fromlogin(int fd)
{
WFIFOHEAD(i,3);
WFIFOW(i,0) = 0x81;
WFIFOB(i,2) = 2;
WFIFOB(i,2) = 2; // "Someone has already logged in with this id"
WFIFOSET(i,3);
break;
}
@ -3257,12 +3257,18 @@ int parse_char(int fd)
{
// request to connect
// 0065 <account id>.L <login id1>.L <login id2>.L <???>.W <sex>.B
case 0x65:
if (RFIFOREST(fd) < 17)
return 0;
{
int account_id = RFIFOL(fd,2);
int login_id1 = RFIFOL(fd,6);
int login_id2 = RFIFOL(fd,10);
int sex = RFIFOB(fd,16);
int GM_value;
ShowInfo("request connect - account_id:%d/login_id1:%d/login_id2:%d\n", RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10));
ShowInfo("request connect - account_id:%d/login_id1:%d/login_id2:%d\n", account_id, login_id1, login_id2);
if (sd) {
//Received again auth packet for already authentified account?? Discard it.
@ -3271,24 +3277,24 @@ int parse_char(int fd)
RFIFOSKIP(fd,17);
break;
}
if ((GM_value = isGM(RFIFOL(fd,2))))
ShowInfo("Account Logged On; Account ID: %d (GM level %d).\n", RFIFOL(fd,2), GM_value);
if( (GM_value = isGM(account_id)) != 0 )
ShowInfo("Account Logged On; Account ID: %d (GM level %d).\n", account_id, GM_value);
else
ShowInfo("Account Logged On; Account ID: %d.\n", RFIFOL(fd,2));
ShowInfo("Account Logged On; Account ID: %d.\n", account_id);
CREATE(session[fd]->session_data, struct char_session_data, 1);
sd = (struct char_session_data*)session[fd]->session_data;
strncpy(sd->email, "no mail", 40); // put here a mail without '@' to refuse deletion if we don't receive the e-mail
sd->connect_until_time = 0; // unknown or unlimited (not displaying on map-server)
sd->account_id = RFIFOL(fd,2);
sd->login_id1 = RFIFOL(fd,6);
sd->login_id2 = RFIFOL(fd,10);
sd->sex = RFIFOB(fd,16);
sd->account_id = account_id;
sd->login_id1 = login_id1;
sd->login_id2 = login_id2;
sd->sex = sex;
sd->auth = false; // not authed yet
// send back account_id
WFIFOHEAD(fd,4);
WFIFOL(fd,0) = RFIFOL(fd,2);
WFIFOL(fd,0) = account_id;
WFIFOSET(fd,4);
// search authentification

View File

@ -1943,7 +1943,7 @@ int parse_fromlogin(int fd)
{
WFIFOHEAD(i,3);
WFIFOW(i,0) = 0x81;
WFIFOB(i,2) = 2;
WFIFOB(i,2) = 2; // "Someone has already logged in with this id"
WFIFOSET(i,3);
}
else //Shouldn't happen, but just in case.
@ -2871,11 +2871,17 @@ int parse_char(int fd)
{
// request to connect
// 0065 <account id>.L <login id1>.L <login id2>.L <???>.W <sex>.B
case 0x65:
if (RFIFOREST(fd) < 17)
return 0;
{
ShowInfo("request connect - account_id:%d/login_id1:%d/login_id2:%d\n", RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10));
int account_id = RFIFOL(fd,2);
int login_id1 = RFIFOL(fd,6);
int login_id2 = RFIFOL(fd,10);
int sex = RFIFOB(fd,16);
ShowInfo("request connect - account_id:%d/login_id1:%d/login_id2:%d\n", account_id, login_id1, login_id2);
if (sd) {
//Received again auth packet for already authentified account?? Discard it.
//TODO: Perhaps log this as a hack attempt?
@ -2887,15 +2893,15 @@ int parse_char(int fd)
CREATE(session[fd]->session_data, struct char_session_data, 1);
sd = (struct char_session_data*)session[fd]->session_data;
sd->connect_until_time = 0; // unknown or unlimited (not displaying on map-server)
sd->account_id = RFIFOL(fd,2);
sd->login_id1 = RFIFOL(fd,6);
sd->login_id2 = RFIFOL(fd,10);
sd->sex = RFIFOB(fd,16);
sd->account_id = account_id;
sd->login_id1 = login_id1;
sd->login_id2 = login_id2;
sd->sex = sex;
sd->auth = false; // not authed yet
// send back account_id
WFIFOHEAD(fd,4);
WFIFOL(fd,0) = RFIFOL(fd,2);
WFIFOL(fd,0) = account_id;
WFIFOSET(fd,4);
// search authentification

View File

@ -1151,7 +1151,9 @@ int mmo_auth(struct mmo_account* account, int fd)
if( login_config.online_check )
{
struct online_login_data* data = idb_get(online_db,auth_dat[i].account_id);
if( data && data->char_server > -1 )
if( data )
{// account is already marked as online!
if( data->char_server > -1 )
{
//Request char servers to kick this account out. [Skotlex]
uint8 buf[8];
@ -1163,6 +1165,9 @@ int mmo_auth(struct mmo_account* account, int fd)
data->waiting_disconnect = add_timer(gettick()+30000, waiting_disconnect_timer, auth_dat[i].account_id, 0);
return 3; // Rejected
}
else
; // the client disconnects after doing auth, so can't really kick it... need some form of expiration timer
}
}
ShowNotice("Authentication accepted (account: %s, id: %d, ip: %s)\n", account->userid, auth_dat[i].account_id, ip);
@ -1274,7 +1279,7 @@ int parse_fromchar(int fd)
auth_fifo[i].login_id2 == login_id2 &&
auth_fifo[i].sex == sex &&
auth_fifo[i].ip == ip_ &&
!auth_fifo[i].delflag );
auth_fifo[i].delflag == 0 );
if( i == AUTH_FIFO_SIZE || account_id <= 0 )
{// authentication not found

View File

@ -553,9 +553,10 @@ int mmo_auth(struct mmo_account* account, int fd)
if( login_config.online_check )
{
struct online_login_data* data = idb_get(online_db, account->account_id);
if( data && data->char_server > -1 )
{
//Request char servers to kick this account out. [Skotlex]
if( data )
{// account is already marked as online!
if( data->char_server > -1 )
{// Request char servers to kick this account out. [Skotlex]
uint8 buf[8];
ShowNotice("User '%s' is already online - Rejected.\n", account->userid);
WBUFW(buf,0) = 0x2734;
@ -565,6 +566,10 @@ int mmo_auth(struct mmo_account* account, int fd)
data->waiting_disconnect = add_timer(gettick()+30000, waiting_disconnect_timer, account->account_id, 0);
return 3; // Rejected
}
else
; // the client disconnects after doing auth, so can't really kick it... need some form of expiration timer
}
}
account->login_id1 = rand();
@ -667,7 +672,7 @@ int parse_fromchar(int fd)
auth_fifo[i].login_id2 == login_id2 &&
auth_fifo[i].sex == sex &&
auth_fifo[i].ip == ip_ &&
!auth_fifo[i].delflag );
auth_fifo[i].delflag == 0 );
if( i == AUTH_FIFO_SIZE || account_id <= 0 )
{// authentication not found

View File

@ -12065,16 +12065,21 @@ void clif_parse_Adopt_request(int fd, struct map_session_data *sd)
void clif_parse_Adopt_reply(int fd, struct map_session_data *sd)
{
struct map_session_data *p1_sd = map_id2sd(RFIFOL(fd,2)), *p2_sd = map_id2sd(RFIFOL(fd,6));
int result = RFIFOL(fd,10), pid = sd->adopt_invite;
int p1_id = RFIFOL(fd,2);
int p2_id = RFIFOL(fd,6);
int result = RFIFOL(fd,10);
struct map_session_data* p1_sd = map_id2sd(p1_id);
struct map_session_data* p2_sd = map_id2sd(p2_id);
int pid = sd->adopt_invite;
sd->adopt_invite = 0;
if( !p1_sd )
return; // Parent is not online
if( pid != p1_sd->status.account_id || !result )
return; // Not the same sender | Reply No
if( p1_sd == NULL || p2_sd == NULL )
return; // Both players need to be online
if( pid != p1_sd->status.account_id || p2_id != p1_sd->status.partner_id )
return; // Incorrect values
if( result == 0 )
return; // Rejected
pc_adoption(p1_sd, p2_sd, sd);
}