Fixed cell_basilica which gave nothing. Only works only for player

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
This commit is contained in:
Cydh Ramdh 2013-12-08 14:21:16 +07:00
parent ea925a05b1
commit c88b77f5fd
5 changed files with 37 additions and 12 deletions

View File

@ -380,6 +380,7 @@ mf_nolockon 58
mf_notomb 59
mf_skill_damage 60
//'setcell' types
cell_walkable 0
cell_shootable 1
cell_water 2
@ -388,6 +389,8 @@ cell_basilica 4
cell_landprotector 5
cell_novending 6
cell_nochat 7
cell_malestrom 8
cell_icewall 9
//cell_gettype 0
cell_chkwall 1
@ -403,6 +406,8 @@ cell_chkbasilica 10
cell_chklandprotector 11
cell_chknovending 12
cell_chknochat 13
cell_chkmaelstrom 14
cell_chkicewall 15
StatusPoint 9 1
BaseLevel 11 1

View File

@ -7230,8 +7230,7 @@ Each of these can be 'on' or 'off'. Together they define a cell's behavior.
This command lets you alter these flags for all map cells in the specified
(x1,y1)-(x2,y2) rectangle. The 'flag' can be 0 or 1 (0:clear flag, 1:set flag).
The 'type' defines which flag to modify. Possible options include cell_walkable,
cell_shootable, cell_basilica. For a full list, see const.txt.
The 'type' defines which flag to modify. Possible options see const.txt.
Example:

View File

@ -4990,6 +4990,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
sd->md->ud.dir = sd->ud.dir;
}
pc_cell_basilica(sd);
return 0;
}
@ -10463,6 +10464,22 @@ void pc_bonus_script_check(struct map_session_data *sd, enum e_bonus_script_flag
status_calc_pc(sd,false);
}
/** [Cydh]
* Gives/removes SC_BASILICA when player steps in/out the cell with 'cell_basilica'
* @param sd player
*/
void pc_cell_basilica(struct map_session_data *sd) {
if (!sd)
return;
if (!map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKBASILICA)) {
if (&sd->sc && sd->sc.data[SC_BASILICA])
status_change_end(&sd->bl,SC_BASILICA,INVALID_TIMER);
}
else if (!(&sd->sc) || !sd->sc.data[SC_BASILICA])
sc_start(&sd->bl,&sd->bl,SC_BASILICA,100,0,-1);
}
/*==========================================
* pc Init/Terminate
*------------------------------------------*/

View File

@ -1050,6 +1050,8 @@ int pc_bonus_script_timer(int tid, unsigned int tick, int id, intptr_t data);
void pc_bonus_script_remove(struct map_session_data *sd, uint8 i);
void pc_bonus_script_check(struct map_session_data *sd, enum e_bonus_script_flags flag);
void pc_cell_basilica(struct map_session_data *sd);
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
int pc_level_penalty_mod(struct map_session_data *sd, int mob_level, uint32 mob_race, uint32 mob_mode, int type);
#endif

View File

@ -228,8 +228,8 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data
int i;
int x,y,dx,dy;
uint8 dir;
struct block_list *bl;
struct unit_data *ud;
struct block_list *bl;
struct unit_data *ud;
TBL_PC *sd;
TBL_MOB *md;
TBL_MER *mrd;
@ -301,10 +301,12 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data
} else
sd->areanpc_id=0;
if( sd->md) unit_check_start_teleport_timer(&sd->md->bl);
if( sd->ed) unit_check_start_teleport_timer(&sd->ed->bl);
if( sd->hd) unit_check_start_teleport_timer(&sd->hd->bl);
if( sd->pd) unit_check_start_teleport_timer(&sd->pd->bl);
if(sd->md) unit_check_start_teleport_timer(&sd->md->bl);
if(sd->ed) unit_check_start_teleport_timer(&sd->ed->bl);
if(sd->hd) unit_check_start_teleport_timer(&sd->hd->bl);
if(sd->pd) unit_check_start_teleport_timer(&sd->pd->bl);
pc_cell_basilica(sd);
} else if (md) {
if( map_getcell(bl->m,x,y,CELL_CHKNPC) ) {
if( npc_touch_areanpc2(md) )
@ -326,10 +328,10 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data
clif_move(ud);
}
}
else if( hd) unit_check_start_teleport_timer(&hd->bl);
else if( ed) unit_check_start_teleport_timer(&ed->bl);
else if( pd) unit_check_start_teleport_timer(&pd->bl);
else if( mrd) unit_check_start_teleport_timer(&mrd->bl);
else if (hd) unit_check_start_teleport_timer(&hd->bl);
else if (ed) unit_check_start_teleport_timer(&ed->bl);
else if (pd) unit_check_start_teleport_timer(&pd->bl);
else if (mrd) unit_check_start_teleport_timer(&mrd->bl);
if(tid == INVALID_TIMER) // A directly invoked timer is from battle_stop_walking, therefore the rest is irrelevant.
return 0;