* Changes to Dissonance -- don't increment the timer again if the target has died
* Changed some nullpo checks back to normal null checks * Changed some nullpo checks to print some debug information * Added some sd checks before calling pc_blockskill * Added fix for SQL char's friend list updating * Fixed a crash if the player invited to join a guild is not online * Find the guild invitation sender first before clearing it git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1124 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
c54e7367f7
commit
3a2e00b268
@ -1,6 +1,17 @@
|
||||
Date Added
|
||||
|
||||
02/17
|
||||
* Added Shinomori's changes to Dissonance -- don't increment the timer again
|
||||
if the target has died [celest]
|
||||
* Changed some nullpo checks back to normal null checks -- in some situations
|
||||
it would be normal to get a NULL [celest]
|
||||
* Changed some nullpo checks to print some debug information [celest]
|
||||
* Added some sd checks before calling pc_blockskill [celest]
|
||||
* Added Dino9021's fix for SQL char's friend list updating [celest]
|
||||
* Fixed a crash if the player invited to join a guild is not online, thanks to
|
||||
Alex14 [celest]
|
||||
* Find the guild invitation sender first before clearing its ID [celest]
|
||||
|
||||
* Added 2 new script commands to support 2/15's cards patch... most of the
|
||||
effects in kRO should be available now ^^ [celest]
|
||||
|
||||
|
@ -622,24 +622,41 @@ int mmo_char_tosql(int char_id, struct mmo_charstatus *p){
|
||||
|
||||
// Friends list
|
||||
// account_id, friend_id0, name0, ...
|
||||
#if 0
|
||||
tmp_p += sprintf(tmp_p, "REPLACE INTO `%s` (`id`, `account_id`",friend_db);
|
||||
|
||||
tmp_p += sprintf(tmp_p, "REPLACE INTO `%s` (`id`, `account_id`",friend_db);
|
||||
diff = 0;
|
||||
|
||||
diff = 0;
|
||||
for (i=0;i<20;i++)
|
||||
tmp_p += sprintf(tmp_p, ", `friend_id%d`, `name%d`", i, i);
|
||||
|
||||
for (i=0;i<20;i++)
|
||||
tmp_p += sprintf(tmp_p, ", `friend_id%d`, `name%d`", i, i);
|
||||
tmp_p += sprintf(tmp_p, ") VALUES (NULL, '%d'", char_id);
|
||||
|
||||
tmp_p += sprintf(tmp_p, ") VALUES (NULL, '%d'", char_id);
|
||||
for (i=0;i<20;i++) {
|
||||
tmp_p += sprintf(tmp_p, ", '%d', '%s'", p->friend_id[i], p->friend_name[i]);
|
||||
if ((p->friend_id[i] != cp->friend_id[i]) ||
|
||||
strcmp(p->friend_name[i], cp->friend_name[i]))
|
||||
diff = 1;
|
||||
}
|
||||
|
||||
for (i=0;i<20;i++) {
|
||||
tmp_p += sprintf(tmp_p, ", '%d', '%s'", p->friend_id[i], p->friend_name[i]);
|
||||
if ((p->friend_id[i] != cp->friend_id[i]) ||
|
||||
strcmp(p->friend_name[i], cp->friend_name[i]))
|
||||
diff = 1;
|
||||
}
|
||||
tmp_p += sprintf(tmp_p, ")");
|
||||
#else // [Dino9021]
|
||||
tmp_p += sprintf(tmp_p, "UPDATE `%s` SET ",friend_db);
|
||||
|
||||
tmp_p += sprintf(tmp_p, ")");
|
||||
diff = 0;
|
||||
|
||||
for (i=0;i<20;i++) {
|
||||
if (i>0)
|
||||
tmp_p += sprintf(tmp_p, ", ");
|
||||
|
||||
tmp_p += sprintf(tmp_p, "`friend_id%d`='%d', `name%d`='%s'", i, p->friend_id[i], i, p->friend_name[i]);
|
||||
|
||||
if ((p->friend_id[i] != cp->friend_id[i]) || strcmp(p->friend_name[i], cp->friend_name[i]))
|
||||
diff = 1;
|
||||
}
|
||||
|
||||
tmp_p += sprintf(tmp_p, " where account_id='%d';", char_id);
|
||||
#endif
|
||||
|
||||
if (diff)
|
||||
mysql_query(&mysql_handle, tmp_sql);
|
||||
|
@ -581,17 +581,18 @@ int guild_member_added(int guild_id,int account_id,int char_id,int flag)
|
||||
if( (g=guild_search(guild_id))==NULL )
|
||||
return 0;
|
||||
|
||||
if((sd==NULL || sd->guild_invite==0) && flag==0){
|
||||
if(sd==NULL || sd->guild_invite==0){
|
||||
// キャラ側に登録できなかったため脱退要求を出す
|
||||
if(battle_config.error_log)
|
||||
printf("guild: member added error %d is not online\n",account_id);
|
||||
intif_guild_leave(guild_id,account_id,char_id,0,"**“o˜^ޏ”s**");
|
||||
if (flag == 0) {
|
||||
if(battle_config.error_log)
|
||||
printf("guild: member added error %d is not online\n",account_id);
|
||||
intif_guild_leave(guild_id,account_id,char_id,0,"**“o˜^ޏ”s**");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
sd->guild_invite=0;
|
||||
sd->guild_invite_account=0;
|
||||
|
||||
sd2=map_id2sd(sd->guild_invite_account);
|
||||
sd2 = map_id2sd(sd->guild_invite_account);
|
||||
sd->guild_invite = 0;
|
||||
sd->guild_invite_account = 0;
|
||||
|
||||
if(flag==1){ // 失敗
|
||||
if( sd2!=NULL )
|
||||
|
@ -3114,7 +3114,7 @@ static int pc_walk(int tid,unsigned int tick,int id,int data)
|
||||
int moveblock;
|
||||
int x,y,dx,dy;
|
||||
|
||||
nullpo_retr(0, (sd=map_id2sd(id)));
|
||||
nullpo_retr_f(0, (sd=map_id2sd(id)), "id=%d", id);
|
||||
|
||||
if(sd->walktimer != tid){
|
||||
if(battle_config.error_log)
|
||||
|
@ -2823,7 +2823,8 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
|
||||
clif_updatestatus(sd,SP_SP);
|
||||
}
|
||||
}
|
||||
pc_blockskill_start (sd, skillid, (skilllv < 5 ? 10000: 15000));
|
||||
if (sd)
|
||||
pc_blockskill_start (sd, skillid, (skilllv < 5 ? 10000: 15000));
|
||||
}
|
||||
break;
|
||||
|
||||
@ -3305,7 +3306,8 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
|
||||
case SM_ENDURE: /* インデュア */
|
||||
clif_skill_nodamage(src,bl,skillid,skilllv,1);
|
||||
status_change_start(bl,SkillStatusChangeTable[skillid],skilllv,0,0,0,skill_get_time(skillid,skilllv),0 );
|
||||
pc_blockskill_start (sd, skillid, 10000);
|
||||
if (sd)
|
||||
pc_blockskill_start (sd, skillid, 10000);
|
||||
break;
|
||||
|
||||
case SM_AUTOBERSERK: // Celest
|
||||
@ -5039,7 +5041,8 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil
|
||||
pc_movepos(sd,x,y);
|
||||
}else if( src->type==BL_MOB )
|
||||
mob_warp((struct mob_data *)src,-1,x,y,0);
|
||||
pc_blockskill_start (sd, MO_EXTREMITYFIST, 2000);
|
||||
if (sd)
|
||||
pc_blockskill_start (sd, MO_EXTREMITYFIST, 2000);
|
||||
break;
|
||||
case AM_CANNIBALIZE: // バイオプラント
|
||||
if(sd){
|
||||
@ -7718,10 +7721,12 @@ int skill_use_id( struct map_session_data *sd, int target_id,
|
||||
case WE_FEMALE:
|
||||
{
|
||||
struct map_session_data *p_sd = pc_get_partner(sd);
|
||||
nullpo_retr (0, p_sd)
|
||||
if (p_sd == NULL) // it's possible to get null if we're not married ^^;
|
||||
return 0;
|
||||
// nullpo_retr (0, p_sd)
|
||||
if(skill_num == WE_MALE && sd->status.hp <= ((15*sd->status.max_hp)/100)) // Requires more than 15% of Max HP for WE_MALE
|
||||
return 0;
|
||||
if(skill_num == WE_FEMALE && sd->status.sp <= ((15*sd->status.max_sp)/100)) // Requires more than 15% of Max SP for WE_FEMALE
|
||||
else if(skill_num == WE_FEMALE && sd->status.sp <= ((15*sd->status.max_sp)/100)) // Requires more than 15% of Max SP for WE_FEMALE
|
||||
return 0;
|
||||
target_id = p_sd->bl.id;
|
||||
//rangeをもう1回?査
|
||||
|
@ -3997,13 +3997,13 @@ int status_change_end( struct block_list* bl , int type,int tid )
|
||||
*/
|
||||
int status_change_timer(int tid, unsigned int tick, int id, int data)
|
||||
{
|
||||
int type=data;
|
||||
int type = data;
|
||||
struct block_list *bl;
|
||||
struct map_session_data *sd=NULL;
|
||||
struct status_change *sc_data;
|
||||
//short *sc_count; //使ってない?
|
||||
|
||||
nullpo_retr(0, bl=map_id2bl(id));
|
||||
nullpo_retr_f(0, bl=map_id2bl(id), "id=%d data=%d",id,data);
|
||||
nullpo_retr(0, sc_data=status_get_sc_data(bl));
|
||||
|
||||
if(bl->type==BL_PC)
|
||||
@ -4104,8 +4104,10 @@ int status_change_timer(int tid, unsigned int tick, int id, int data)
|
||||
case SC_WATERBALL: /* ウォ?タ?ボ?ル */
|
||||
{
|
||||
struct block_list *target=map_id2bl(sc_data[type].val2);
|
||||
nullpo_retb(target);
|
||||
nullpo_retb(target->prev);
|
||||
if (!target || !target->prev)
|
||||
break; // target has been killed in previous hits, no need to raise an alarm ^^;
|
||||
// nullpo_retb(target);
|
||||
// nullpo_retb(target->prev);
|
||||
skill_attack(BF_MAGIC,bl,bl,target,WZ_WATERBALL,sc_data[type].val1,tick,0);
|
||||
if((--sc_data[type].val3)>0) {
|
||||
sc_data[type].timer=add_timer( 150+tick,status_change_timer, bl->id, data );
|
||||
@ -4139,8 +4141,10 @@ int status_change_timer(int tid, unsigned int tick, int id, int data)
|
||||
break;*/
|
||||
nullpo_retb(unit);
|
||||
nullpo_retb(unit->group);
|
||||
nullpo_retr(0, src=map_id2bl(unit->group->src_id));
|
||||
nullpo_retb(src=map_id2bl(unit->group->src_id));
|
||||
skill_attack(BF_MISC,src,&unit->bl,bl,unit->group->skill_id,sc_data[type].val1,tick,0);
|
||||
if( (bl->type==BL_MOB) && (MS_DEAD==((struct mob_data *)bl)->state.state) )
|
||||
break;
|
||||
sc_data[type].timer=add_timer(skill_get_time2(unit->group->skill_id,unit->group->skill_lv)+tick,
|
||||
status_change_timer, bl->id, data );
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user