|
@@ -9398,6 +9398,7 @@ static int status_get_sc_interval(enum sc_type type)
|
|
case SC_DEATHHURT:
|
|
case SC_DEATHHURT:
|
|
case SC_GRADUAL_GRAVITY:
|
|
case SC_GRADUAL_GRAVITY:
|
|
case SC_KILLING_AURA:
|
|
case SC_KILLING_AURA:
|
|
|
|
+ case SC_BOSSMAPINFO:
|
|
return 1000;
|
|
return 1000;
|
|
case SC_BURNING:
|
|
case SC_BURNING:
|
|
case SC_PYREXIA:
|
|
case SC_PYREXIA:
|
|
@@ -10977,16 +10978,21 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case SC_BOSSMAPINFO:
|
|
case SC_BOSSMAPINFO:
|
|
- if( sd != NULL ) {
|
|
|
|
- struct mob_data *boss_md = map_getmob_boss(bl->m); // Search for Boss on this Map
|
|
|
|
|
|
+ if( sd == nullptr ){
|
|
|
|
+ return 0;
|
|
|
|
+ }else{
|
|
|
|
+ // Search for Boss on this Map
|
|
|
|
+ mob_data* boss_md = map_getmob_boss( bl->m );
|
|
|
|
|
|
- if( boss_md == NULL ) { // No MVP on this map
|
|
|
|
- clif_bossmapinfo(sd, NULL, BOSS_INFO_NOT);
|
|
|
|
|
|
+ // No MVP on this map
|
|
|
|
+ if( boss_md == nullptr ){
|
|
|
|
+ clif_bossmapinfo( *sd, nullptr, BOSS_INFO_NOT );
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
+
|
|
val1 = boss_md->bl.id;
|
|
val1 = boss_md->bl.id;
|
|
- tick_time = 1000; // [GodLesZ] tick time
|
|
|
|
- val4 = tick / tick_time;
|
|
|
|
|
|
+ tick_time = status_get_sc_interval( type );
|
|
|
|
+ val4 = tick - tick_time; // Remaining time
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case SC_HIDING:
|
|
case SC_HIDING:
|
|
@@ -12974,8 +12980,28 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case SC_BOSSMAPINFO:
|
|
case SC_BOSSMAPINFO:
|
|
- if (sd)
|
|
|
|
- clif_bossmapinfo(sd, map_id2boss(sce->val1), BOSS_INFO_ALIVE_WITHMSG); // First Message
|
|
|
|
|
|
+ if( sd == nullptr ){
|
|
|
|
+ return 0;
|
|
|
|
+ }else{
|
|
|
|
+ mob_data* boss_md = map_id2boss( sce->val1 );
|
|
|
|
+
|
|
|
|
+ if( boss_md == nullptr ){
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Not on same map anymore
|
|
|
|
+ if( sd->bl.m != boss_md->bl.m ){
|
|
|
|
+ return 0;
|
|
|
|
+ // Boss is alive
|
|
|
|
+ }else if( boss_md->bl.prev != nullptr ){
|
|
|
|
+ sce->val2 = 0;
|
|
|
|
+ clif_bossmapinfo( *sd, boss_md, BOSS_INFO_ALIVE_WITHMSG );
|
|
|
|
+ // Boss is dead
|
|
|
|
+ }else if( boss_md->spawn_timer != INVALID_TIMER ){
|
|
|
|
+ sce->val2 = 1;
|
|
|
|
+ clif_bossmapinfo( *sd, boss_md, BOSS_INFO_DEAD );
|
|
|
|
+ }
|
|
|
|
+ }
|
|
break;
|
|
break;
|
|
case SC_FULL_THROTTLE:
|
|
case SC_FULL_THROTTLE:
|
|
case SC_MERC_HPUP:
|
|
case SC_MERC_HPUP:
|
|
@@ -14068,22 +14094,27 @@ TIMER_FUNC(status_change_timer){
|
|
break;
|
|
break;
|
|
|
|
|
|
case SC_BOSSMAPINFO:
|
|
case SC_BOSSMAPINFO:
|
|
- if( sd && --(sce->val4) >= 0 ) {
|
|
|
|
- struct mob_data *boss_md = map_id2boss(sce->val1);
|
|
|
|
|
|
+ if( sd && sce->val4 >= 0 ){
|
|
|
|
+ mob_data* boss_md = map_id2boss( sce->val1 );
|
|
|
|
|
|
- if (boss_md) {
|
|
|
|
- if (sd->bl.m != boss_md->bl.m) // Not on same map anymore
|
|
|
|
- return 0;
|
|
|
|
- else if (boss_md->bl.prev != NULL) { // Boss is alive - Update X, Y on minimap
|
|
|
|
- sce->val2 = 0;
|
|
|
|
- clif_bossmapinfo(sd, boss_md, BOSS_INFO_ALIVE);
|
|
|
|
- } else if (boss_md->spawn_timer != INVALID_TIMER && !sce->val2) { // Boss is dead
|
|
|
|
- sce->val2 = 1;
|
|
|
|
- clif_bossmapinfo(sd, boss_md, BOSS_INFO_DEAD);
|
|
|
|
- }
|
|
|
|
|
|
+ if( boss_md == nullptr ){
|
|
|
|
+ sce->val4 = 0;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Not on same map anymore
|
|
|
|
+ if( sd->bl.m != boss_md->bl.m ){
|
|
|
|
+ sce->val4 = 0;
|
|
|
|
+ break;
|
|
|
|
+ // Boss is alive - Update X, Y on minimap
|
|
|
|
+ }else if( boss_md->bl.prev != nullptr ){
|
|
|
|
+ sce->val2 = 0;
|
|
|
|
+ clif_bossmapinfo( *sd, boss_md, BOSS_INFO_ALIVE );
|
|
|
|
+ // Boss is dead
|
|
|
|
+ }else if( boss_md->spawn_timer != INVALID_TIMER && sce->val2 == 0 ){
|
|
|
|
+ sce->val2 = 1;
|
|
|
|
+ clif_bossmapinfo( *sd, boss_md, BOSS_INFO_DEAD );
|
|
}
|
|
}
|
|
- sc_timer_next(1000 + tick);
|
|
|
|
- return 0;
|
|
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
|
|
|