- HP Conversion will fail when used at max SP. It should not display any errors to the client.
- Modified yet again the login procedure. The initial status_calc_pc is invoked when the variable registries arrive, but the initial LoadEndAck will not be parsed until the registries have arrived. In the rare case this happens, pc_reg_received will take care of invoking the LoadEndAck function itself. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9208 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
fe7ede9fc5
commit
bd25ce6f90
@ -4,6 +4,11 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
|||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2006/11/13
|
2006/11/13
|
||||||
|
* HP Conversion will fail when used at max SP. It should not display any
|
||||||
|
errors to the client. [Skotlex]
|
||||||
|
* Modified yet again the login procedure to enable character variables to
|
||||||
|
work on item scripts. It SHOULD work crashless now. Please report any
|
||||||
|
problems it may cause.
|
||||||
* Volcano/Deluge/Violent Gale are now interchangeable, in the sense that
|
* Volcano/Deluge/Violent Gale are now interchangeable, in the sense that
|
||||||
as long as one of these is out, casting any of the three will not consume
|
as long as one of these is out, casting any of the three will not consume
|
||||||
gems, and will use the remaining time of the previous one. In turn, Land
|
gems, and will use the remaining time of the previous one. In turn, Land
|
||||||
|
@ -8251,6 +8251,13 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
|
|||||||
if(sd->bl.prev != NULL)
|
if(sd->bl.prev != NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!sd->state.auth)
|
||||||
|
{ //Character loading is not complete yet!
|
||||||
|
//Let pc_reg_received reinvoke this when ready.
|
||||||
|
sd->state.connect_new = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (sd->state.rewarp)
|
if (sd->state.rewarp)
|
||||||
{ //Rewarp player.
|
{ //Rewarp player.
|
||||||
sd->state.rewarp = 0;
|
sd->state.rewarp = 0;
|
||||||
|
@ -137,6 +137,7 @@ void clif_sitting(struct map_session_data *sd);
|
|||||||
void clif_soundeffect(struct map_session_data *sd,struct block_list *bl,char *name,int type);
|
void clif_soundeffect(struct map_session_data *sd,struct block_list *bl,char *name,int type);
|
||||||
int clif_soundeffectall(struct block_list *bl, char *name, int type, int coverage);
|
int clif_soundeffectall(struct block_list *bl, char *name, int type, int coverage);
|
||||||
void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, int target_id, unsigned int tick);
|
void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, int target_id, unsigned int tick);
|
||||||
|
void clif_parse_LoadEndAck(int fd,struct map_session_data *sd);
|
||||||
|
|
||||||
// trade
|
// trade
|
||||||
int clif_traderequest(struct map_session_data *sd,char *name);
|
int clif_traderequest(struct map_session_data *sd,char *name);
|
||||||
|
19
src/map/pc.c
19
src/map/pc.c
@ -593,7 +593,6 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t
|
|||||||
} else
|
} else
|
||||||
sd->class_ = i;
|
sd->class_ = i;
|
||||||
//Initializations to null/0 unneeded since map_session_data was filled with 0 upon allocation.
|
//Initializations to null/0 unneeded since map_session_data was filled with 0 upon allocation.
|
||||||
// 基本的な初期化
|
|
||||||
sd->state.connect_new = 1;
|
sd->state.connect_new = 1;
|
||||||
|
|
||||||
sd->followtimer = -1; // [MouseJstr]
|
sd->followtimer = -1; // [MouseJstr]
|
||||||
@ -706,9 +705,6 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t
|
|||||||
sd->state.event_disconnect = 1;
|
sd->state.event_disconnect = 1;
|
||||||
sd->state.event_kill_mob = 1;
|
sd->state.event_kill_mob = 1;
|
||||||
|
|
||||||
status_calc_pc(sd,1);
|
|
||||||
|
|
||||||
sd->state.auth = 1;
|
|
||||||
{ //Add IP field
|
{ //Add IP field
|
||||||
unsigned char *ip = (unsigned char *) &session[sd->fd]->client_addr.sin_addr;
|
unsigned char *ip = (unsigned char *) &session[sd->fd]->client_addr.sin_addr;
|
||||||
if (pc_isGM(sd))
|
if (pc_isGM(sd))
|
||||||
@ -818,8 +814,6 @@ int pc_reg_received(struct map_session_data *sd)
|
|||||||
|
|
||||||
sd->change_level = pc_readglobalreg(sd,"jobchange_level");
|
sd->change_level = pc_readglobalreg(sd,"jobchange_level");
|
||||||
sd->die_counter = pc_readglobalreg(sd,"PC_DIE_COUNTER");
|
sd->die_counter = pc_readglobalreg(sd,"PC_DIE_COUNTER");
|
||||||
if (!sd->die_counter && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE)
|
|
||||||
status_calc_pc(sd, 0); //Check +10 to all stats bonus.
|
|
||||||
chrif_scdata_request(sd->status.account_id, sd->status.char_id);
|
chrif_scdata_request(sd->status.account_id, sd->status.char_id);
|
||||||
|
|
||||||
if (pc_checkskill(sd, TK_MISSION)) {
|
if (pc_checkskill(sd, TK_MISSION)) {
|
||||||
@ -848,7 +842,6 @@ int pc_reg_received(struct map_session_data *sd)
|
|||||||
if (i < sd->status.skill[sd->cloneskill_id].lv)
|
if (i < sd->status.skill[sd->cloneskill_id].lv)
|
||||||
sd->status.skill[sd->cloneskill_id].lv = i;
|
sd->status.skill[sd->cloneskill_id].lv = i;
|
||||||
sd->status.skill[sd->cloneskill_id].flag = 13; //cloneskill flag
|
sd->status.skill[sd->cloneskill_id].flag = 13; //cloneskill flag
|
||||||
clif_skillinfoblock(sd);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -871,8 +864,18 @@ int pc_reg_received(struct map_session_data *sd)
|
|||||||
sd->state.event_joblvup = 1;
|
sd->state.event_joblvup = 1;
|
||||||
sd->state.event_loadmap = 1;
|
sd->state.event_loadmap = 1;
|
||||||
}
|
}
|
||||||
|
//Weird... maybe registries were reloaded?
|
||||||
|
if (sd->state.auth)
|
||||||
|
return 0;
|
||||||
|
|
||||||
return 0;
|
status_calc_pc(sd,1);
|
||||||
|
sd->state.auth = 1;
|
||||||
|
if (!sd->state.connect_new && sd->fd)
|
||||||
|
{ //Character already loaded map! Gotta trigger LoadEndAck manually.
|
||||||
|
sd->state.connect_new = 1;
|
||||||
|
clif_parse_LoadEndAck(sd->fd, sd);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pc_calc_skillpoint(struct map_session_data* sd)
|
static int pc_calc_skillpoint(struct map_session_data* sd)
|
||||||
|
@ -8358,6 +8358,10 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PF_HPCONVERSION:
|
||||||
|
if (status->sp == status->max_sp)
|
||||||
|
return 0; //Unusable when at full SP.
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(type&2)){
|
if(!(type&2)){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user