Add mapflag specialpopup (#8365)
* Add packet ZC_SPECIALPOPUP. * Add mapflag and script command specialpopup. Co-authored-by: Lemongrass3110 <lemongrass@kstp.at> Co-authored-by: Atemo <Atemo@users.noreply.github.com> Co-authored-by: Aleos <aleos89@users.noreply.github.com>
This commit is contained in:
parent
612bf702ba
commit
54dc915661
@ -474,3 +474,9 @@ Hides monster's HP bar on a map.
|
|||||||
Ignores config value of 'monster_hp_bars_info'.
|
Ignores config value of 'monster_hp_bars_info'.
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
|
*specialpopup <popup ID>
|
||||||
|
|
||||||
|
Displays a special popup when a player enters the map. See script command "specialpopup" for details on different popup types.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|||||||
@ -8508,6 +8508,15 @@ Opens the tip box UI for the attached player or the given character ID.
|
|||||||
|
|
||||||
This command requires packet version 2017-11-22 or newer.
|
This command requires packet version 2017-11-22 or newer.
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
*specialpopup(<popup ID>);
|
||||||
|
|
||||||
|
Open popup and/or show text by ID from list defined in the client spopup.lub file.
|
||||||
|
Popup and text is only visible if the player warped from one map to another map.
|
||||||
|
|
||||||
|
This command requires packet version 2022-10-05 or newer.
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
\\
|
\\
|
||||||
6,1.- Unit-related commands
|
6,1.- Unit-related commands
|
||||||
|
|||||||
50
npc/re/mapflag/specialpopup.txt
Normal file
50
npc/re/mapflag/specialpopup.txt
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
//===== rAthena Script =======================================
|
||||||
|
//= Mapflag: special popup map setting.
|
||||||
|
//===== Description: =========================================
|
||||||
|
//= Displays a special popup when a player enters the map.
|
||||||
|
//===== Additional Comments: =================================
|
||||||
|
//= 1.0 Initial script. [eppc0330]
|
||||||
|
//============================================================
|
||||||
|
|
||||||
|
herosria mapflag specialpopup 1
|
||||||
|
hero_in1 mapflag specialpopup 1
|
||||||
|
hero_in2 mapflag specialpopup 1
|
||||||
|
hero_in3 mapflag specialpopup 1
|
||||||
|
hero_in4 mapflag specialpopup 1
|
||||||
|
hero_out1 mapflag specialpopup 1
|
||||||
|
hero_out2 mapflag specialpopup 1
|
||||||
|
hero_out3 mapflag specialpopup 1
|
||||||
|
hero_out4 mapflag specialpopup 1
|
||||||
|
hero_ent1 mapflag specialpopup 1
|
||||||
|
hero_ent2 mapflag specialpopup 1
|
||||||
|
hero_ent3 mapflag specialpopup 1
|
||||||
|
|
||||||
|
hero_tra mapflag specialpopup 2
|
||||||
|
hero_dun1 mapflag specialpopup 2
|
||||||
|
|
||||||
|
bl_ice mapflag specialpopup 3
|
||||||
|
bl_lava mapflag specialpopup 3
|
||||||
|
bl_grass mapflag specialpopup 3
|
||||||
|
bl_death mapflag specialpopup 3
|
||||||
|
bl_soul mapflag specialpopup 3
|
||||||
|
bl_venom mapflag specialpopup 3
|
||||||
|
bl_temple mapflag specialpopup 3
|
||||||
|
|
||||||
|
thana_step mapflag specialpopup 4
|
||||||
|
tha_t07 mapflag specialpopup 4
|
||||||
|
tha_t08 mapflag specialpopup 4
|
||||||
|
tha_t09 mapflag specialpopup 4
|
||||||
|
tha_t10 mapflag specialpopup 4
|
||||||
|
tha_t11 mapflag specialpopup 4
|
||||||
|
tha_t12 mapflag specialpopup 4
|
||||||
|
|
||||||
|
ama_dun01 mapflag specialpopup 5
|
||||||
|
|
||||||
|
lhz_dun_n mapflag specialpopup 6
|
||||||
|
|
||||||
|
bl_depth1 mapflag specialpopup 7
|
||||||
|
|
||||||
|
for_dun01 mapflag specialpopup 8
|
||||||
|
for_dun02 mapflag specialpopup 8
|
||||||
|
|
||||||
|
bl_depth2 mapflag specialpopup 9
|
||||||
@ -22,3 +22,4 @@ npc: npc/re/mapflag/town.txt
|
|||||||
npc: npc/re/mapflag/reset.txt
|
npc: npc/re/mapflag/reset.txt
|
||||||
npc: npc/re/mapflag/skill_duration.txt
|
npc: npc/re/mapflag/skill_duration.txt
|
||||||
npc: npc/re/mapflag/nodynamicnpc.txt
|
npc: npc/re/mapflag/nodynamicnpc.txt
|
||||||
|
npc: npc/re/mapflag/specialpopup.txt
|
||||||
|
|||||||
@ -19713,6 +19713,12 @@ static void clif_loadConfirm( map_session_data *sd ){
|
|||||||
/// 0447
|
/// 0447
|
||||||
void clif_parse_blocking_playcancel( int fd, map_session_data *sd ){
|
void clif_parse_blocking_playcancel( int fd, map_session_data *sd ){
|
||||||
clif_loadConfirm( sd );
|
clif_loadConfirm( sd );
|
||||||
|
|
||||||
|
int32 mf = map_getmapflag(sd->bl.m, MF_SPECIALPOPUP);
|
||||||
|
|
||||||
|
if (mf > 0) {
|
||||||
|
clif_specialpopup(*sd, mf);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// req world info (CZ_CLIENT_VERSION)
|
/// req world info (CZ_CLIENT_VERSION)
|
||||||
@ -25119,6 +25125,20 @@ void clif_set_npc_window_pos_percent(map_session_data& sd, int x, int y)
|
|||||||
#endif // PACKETVER_MAIN_NUM >= 20220504
|
#endif // PACKETVER_MAIN_NUM >= 20220504
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Displays a special popup.
|
||||||
|
/// Works only if player moved from one map to another.
|
||||||
|
/// 0bbe <popup id>.L (ZC_SPECIALPOPUP)
|
||||||
|
void clif_specialpopup(map_session_data& sd, int32 id ){
|
||||||
|
#if PACKETVER >= 20221005
|
||||||
|
PACKET_ZC_SPECIALPOPUP p = {};
|
||||||
|
|
||||||
|
p.PacketType = HEADER_ZC_SPECIALPOPUP;
|
||||||
|
p.ppId = id;
|
||||||
|
|
||||||
|
clif_send( &p, sizeof( p ), &sd.bl, SELF);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* Main client packet processing function
|
* Main client packet processing function
|
||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
|
|||||||
@ -1456,4 +1456,6 @@ void clif_set_npc_window_pos_percent(map_session_data& sd, int x, int y);
|
|||||||
|
|
||||||
void clif_noask_sub( map_session_data& sd, map_session_data& tsd, int type );
|
void clif_noask_sub( map_session_data& sd, map_session_data& tsd, int type );
|
||||||
|
|
||||||
|
void clif_specialpopup(map_session_data& sd, int32 id);
|
||||||
|
|
||||||
#endif /* CLIF_HPP */
|
#endif /* CLIF_HPP */
|
||||||
|
|||||||
@ -4785,6 +4785,14 @@ bool map_setmapflag_sub(int16 m, enum e_mapflag mapflag, bool status, union u_ma
|
|||||||
mapdata->setMapFlag(MF_NOBASEEXP, false);
|
mapdata->setMapFlag(MF_NOBASEEXP, false);
|
||||||
ShowWarning("map_setmapflag: Unable to set No Base EXP and BEXP flags for the same map! Removing No Base EXP flag from %s.\n", mapdata->name);
|
ShowWarning("map_setmapflag: Unable to set No Base EXP and BEXP flags for the same map! Removing No Base EXP flag from %s.\n", mapdata->name);
|
||||||
}
|
}
|
||||||
|
mapdata->setMapFlag(mapflag, args->flag_val);
|
||||||
|
} else
|
||||||
|
mapdata->setMapFlag(mapflag, false);
|
||||||
|
break;
|
||||||
|
case MF_SPECIALPOPUP:
|
||||||
|
if (status) {
|
||||||
|
nullpo_retr(false, args);
|
||||||
|
|
||||||
mapdata->setMapFlag(mapflag, args->flag_val);
|
mapdata->setMapFlag(mapflag, args->flag_val);
|
||||||
} else
|
} else
|
||||||
mapdata->setMapFlag(mapflag, false);
|
mapdata->setMapFlag(mapflag, false);
|
||||||
|
|||||||
@ -676,6 +676,7 @@ enum e_mapflag : int16 {
|
|||||||
MF_NOBUYINGSTORE,
|
MF_NOBUYINGSTORE,
|
||||||
MF_NODYNAMICNPC,
|
MF_NODYNAMICNPC,
|
||||||
MF_NOBANK,
|
MF_NOBANK,
|
||||||
|
MF_SPECIALPOPUP,
|
||||||
MF_MAX
|
MF_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -5508,6 +5508,16 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MF_SPECIALPOPUP: {
|
||||||
|
union u_mapflag_args args = {};
|
||||||
|
|
||||||
|
if (sscanf(w4, "%11d", &args.flag_val) < 1)
|
||||||
|
args.flag_val = 0;
|
||||||
|
|
||||||
|
map_setmapflag_sub(m, mapflag, state, &args);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MF_SKILL_DAMAGE: {
|
case MF_SKILL_DAMAGE: {
|
||||||
char skill_name[SKILL_NAME_LENGTH];
|
char skill_name[SKILL_NAME_LENGTH];
|
||||||
char caster_constant[NAME_LENGTH];
|
char caster_constant[NAME_LENGTH];
|
||||||
|
|||||||
@ -27234,6 +27234,22 @@ BUILDIN_FUNC(opentips){
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a special popup.
|
||||||
|
* specialpopup(<popup id>);
|
||||||
|
*/
|
||||||
|
BUILDIN_FUNC(specialpopup) {
|
||||||
|
map_session_data* sd;
|
||||||
|
|
||||||
|
if( !script_rid2sd(sd) )
|
||||||
|
return SCRIPT_CMD_FAILURE;
|
||||||
|
|
||||||
|
int32 id = script_getnum(st,2);
|
||||||
|
clif_specialpopup(*sd, id);
|
||||||
|
|
||||||
|
return SCRIPT_CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
BUILDIN_FUNC(setdialogalign){
|
BUILDIN_FUNC(setdialogalign){
|
||||||
map_session_data *sd;
|
map_session_data *sd;
|
||||||
|
|
||||||
@ -28143,6 +28159,7 @@ struct script_function buildin_func[] = {
|
|||||||
BUILDIN_DEF(has_autoloot,"?"),
|
BUILDIN_DEF(has_autoloot,"?"),
|
||||||
BUILDIN_DEF(autoloot,"??"),
|
BUILDIN_DEF(autoloot,"??"),
|
||||||
BUILDIN_DEF(opentips, "i?"),
|
BUILDIN_DEF(opentips, "i?"),
|
||||||
|
BUILDIN_DEF(specialpopup,"i"),
|
||||||
|
|
||||||
BUILDIN_DEF(setdialogalign, "i"),
|
BUILDIN_DEF(setdialogalign, "i"),
|
||||||
BUILDIN_DEF(setdialogsize, "ii"),
|
BUILDIN_DEF(setdialogsize, "ii"),
|
||||||
|
|||||||
@ -538,6 +538,7 @@
|
|||||||
export_constant(MF_NOBUYINGSTORE);
|
export_constant(MF_NOBUYINGSTORE);
|
||||||
export_constant(MF_NODYNAMICNPC);
|
export_constant(MF_NODYNAMICNPC);
|
||||||
export_constant(MF_NOBANK);
|
export_constant(MF_NOBANK);
|
||||||
|
export_constant(MF_SPECIALPOPUP);
|
||||||
|
|
||||||
/* setcell types */
|
/* setcell types */
|
||||||
export_constant(CELL_WALKABLE);
|
export_constant(CELL_WALKABLE);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user