From 8dea04a8b3895398a5c62e06dc8cf920cebd43df Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Sun, 29 Jul 2018 20:11:15 +0200 Subject: [PATCH] Initial release of private airship system (#3354) Fixes #3314 Thanks to @aleos89 for his help. --- conf/battle/feature.conf | 4 + conf/msg_conf/map_msg.conf | 5 +- db/re/item_db.txt | 2 + npc/re/mapflag/privateairship.txt | 710 +++++++++++++++++++ npc/re/scripts_mapflags.conf | 1 + sql-files/logs.sql | 3 +- sql-files/upgrades/upgrade_20180729_logs.sql | 2 + src/map/battle.cpp | 8 + src/map/battle.hpp | 1 + src/map/clif.cpp | 115 +++ src/map/clif_packetdb.hpp | 2 +- src/map/itemdb.hpp | 2 + src/map/log.cpp | 1 + src/map/log.hpp | 1 + src/map/map.hpp | 2 + src/map/script_constants.hpp | 2 + 16 files changed, 858 insertions(+), 3 deletions(-) create mode 100644 npc/re/mapflag/privateairship.txt create mode 100644 sql-files/upgrades/upgrade_20180729_logs.sql diff --git a/conf/battle/feature.conf b/conf/battle/feature.conf index f451103b32..cf26b9b827 100644 --- a/conf/battle/feature.conf +++ b/conf/battle/feature.conf @@ -74,3 +74,7 @@ feature.homunculus_autofeed: off // Attendance System (Note 1) // Requires: 2018-03-07bRagexeRE or later feature.attendance: off + +// Private Airship System (Note 1) +// Requires: 2018-03-21aRagexeRE or later +feature.privateairship: off diff --git a/conf/msg_conf/map_msg.conf b/conf/msg_conf/map_msg.conf index 9cf4262d80..7b9338ac6a 100644 --- a/conf/msg_conf/map_msg.conf +++ b/conf/msg_conf/map_msg.conf @@ -852,7 +852,10 @@ 790: 3456,%d 791: You are not allowed to use the attendance system. -//792-899 free +// Private Airship +792: The private airship system is disabled. + +//793-899 free //------------------------------------ // More atcommands message diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 3d8f807269..092361b8b7 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -11523,6 +11523,8 @@ 25223,Para_Team_Coin,Eden Group Coin,3,0,,0,,,,,,,,,,,,,{},{},{} 25238,New_Normal_Lubricant,New Normal Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{} 25239,New_Advanced_Lubricant,New Advanced Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{} +// +25464,World_Moving_Rights,World Moving Rights,3,20,,0,,,,,,,,,,,,,{},{},{} //=================================================================== // New Staves //=================================================================== diff --git a/npc/re/mapflag/privateairship.txt b/npc/re/mapflag/privateairship.txt new file mode 100644 index 0000000000..6c06d0e598 --- /dev/null +++ b/npc/re/mapflag/privateairship.txt @@ -0,0 +1,710 @@ +//===== rAthena Script ======================================= +//= Mapflags: +//= privateairship_source, privateairship_destination +//===== Description: ========================================= +//= Private Airship available sources and destinations +//===== Changelogs: ========================================== +//= 1.0 First Version. [Lemongrass] +//============================================================ + +//======================================= +// Available source maps +//======================================= +abbey01 mapflag privateairship_source +abbey02 mapflag privateairship_source +abbey03 mapflag privateairship_source +abyss_01 mapflag privateairship_source +abyss_02 mapflag privateairship_source +abyss_03 mapflag privateairship_source +alb2trea mapflag privateairship_source +alberta mapflag privateairship_source +alde_dun01 mapflag privateairship_source +alde_dun02 mapflag privateairship_source +alde_dun03 mapflag privateairship_source +alde_dun04 mapflag privateairship_source +alde_gld mapflag privateairship_source +aldebaran mapflag privateairship_source +ama_dun01 mapflag privateairship_source +ama_dun02 mapflag privateairship_source +ama_dun03 mapflag privateairship_source +ama_fild01 mapflag privateairship_source +amatsu mapflag privateairship_source +anthell01 mapflag privateairship_source +anthell02 mapflag privateairship_source +aru_gld mapflag privateairship_source +ayo_dun01 mapflag privateairship_source +ayo_dun02 mapflag privateairship_source +ayo_fild01 mapflag privateairship_source +ayothaya mapflag privateairship_source +beach_dun mapflag privateairship_source +beach_dun2 mapflag privateairship_source +beach_dun3 mapflag privateairship_source +bif_fild01 mapflag privateairship_source +bif_fild02 mapflag privateairship_source +bra_dun01 mapflag privateairship_source +bra_dun02 mapflag privateairship_source +bra_fild01 mapflag privateairship_source +brasilis mapflag privateairship_source +c_tower1 mapflag privateairship_source +c_tower2 mapflag privateairship_source +c_tower3 mapflag privateairship_source +c_tower4 mapflag privateairship_source +cmd_fild01 mapflag privateairship_source +cmd_fild02 mapflag privateairship_source +cmd_fild03 mapflag privateairship_source +cmd_fild04 mapflag privateairship_source +cmd_fild06 mapflag privateairship_source +cmd_fild07 mapflag privateairship_source +cmd_fild08 mapflag privateairship_source +cmd_fild09 mapflag privateairship_source +comodo mapflag privateairship_source +dali mapflag privateairship_source +dali02 mapflag privateairship_source +dew_dun01 mapflag privateairship_source +dew_dun02 mapflag privateairship_source +dew_fild01 mapflag privateairship_source +dewata mapflag privateairship_source +dic_dun01 mapflag privateairship_source +dic_dun02 mapflag privateairship_source +dic_dun03 mapflag privateairship_source +dic_fild01 mapflag privateairship_source +dic_fild02 mapflag privateairship_source +dicastes01 mapflag privateairship_source +dicastes02 mapflag privateairship_source +ecl_fild01 mapflag privateairship_source +ecl_tdun01 mapflag privateairship_source +ecl_tdun02 mapflag privateairship_source +ecl_tdun03 mapflag privateairship_source +eclage mapflag privateairship_source +ein_dun01 mapflag privateairship_source +ein_dun02 mapflag privateairship_source +ein_fild01 mapflag privateairship_source +ein_fild03 mapflag privateairship_source +ein_fild04 mapflag privateairship_source +ein_fild05 mapflag privateairship_source +ein_fild06 mapflag privateairship_source +ein_fild07 mapflag privateairship_source +ein_fild08 mapflag privateairship_source +ein_fild09 mapflag privateairship_source +einbech mapflag privateairship_source +einbroch mapflag privateairship_source +gef_dun00 mapflag privateairship_source +gef_dun01 mapflag privateairship_source +gef_dun02 mapflag privateairship_source +gef_fild00 mapflag privateairship_source +gef_fild01 mapflag privateairship_source +gef_fild02 mapflag privateairship_source +gef_fild03 mapflag privateairship_source +gef_fild04 mapflag privateairship_source +gef_fild05 mapflag privateairship_source +gef_fild06 mapflag privateairship_source +gef_fild07 mapflag privateairship_source +gef_fild08 mapflag privateairship_source +gef_fild09 mapflag privateairship_source +gef_fild10 mapflag privateairship_source +gef_fild11 mapflag privateairship_source +gef_fild12 mapflag privateairship_source +gef_fild13 mapflag privateairship_source +gef_fild14 mapflag privateairship_source +gefenia01 mapflag privateairship_source +gefenia02 mapflag privateairship_source +gefenia03 mapflag privateairship_source +gefenia04 mapflag privateairship_source +geffen mapflag privateairship_source +gl_cas01 mapflag privateairship_source +gl_cas02 mapflag privateairship_source +gl_church mapflag privateairship_source +gl_chyard mapflag privateairship_source +gl_dun01 mapflag privateairship_source +gl_dun02 mapflag privateairship_source +gl_in01 mapflag privateairship_source +gl_knt01 mapflag privateairship_source +gl_knt02 mapflag privateairship_source +gl_prison mapflag privateairship_source +gl_prison1 mapflag privateairship_source +gl_sew01 mapflag privateairship_source +gl_sew02 mapflag privateairship_source +gl_sew03 mapflag privateairship_source +gl_sew04 mapflag privateairship_source +gl_step mapflag privateairship_source +glast_01 mapflag privateairship_source +gon_dun01 mapflag privateairship_source +gon_dun02 mapflag privateairship_source +gon_dun03 mapflag privateairship_source +gon_fild01 mapflag privateairship_source +gonryun mapflag privateairship_source +hu_fild01 mapflag privateairship_source +hu_fild02 mapflag privateairship_source +hu_fild04 mapflag privateairship_source +hu_fild05 mapflag privateairship_source +hu_fild06 mapflag privateairship_source +hugel mapflag privateairship_source +ice_dun01 mapflag privateairship_source +ice_dun02 mapflag privateairship_source +ice_dun03 mapflag privateairship_source +in_sphinx1 mapflag privateairship_source +in_sphinx2 mapflag privateairship_source +in_sphinx3 mapflag privateairship_source +in_sphinx4 mapflag privateairship_source +in_sphinx5 mapflag privateairship_source +iz_dun00 mapflag privateairship_source +iz_dun01 mapflag privateairship_source +iz_dun02 mapflag privateairship_source +iz_dun03 mapflag privateairship_source +iz_dun04 mapflag privateairship_source +iz_dun05 mapflag privateairship_source +izlu2dun mapflag privateairship_source +izlude mapflag privateairship_source +jupe_core mapflag privateairship_source +juperos_01 mapflag privateairship_source +juperos_02 mapflag privateairship_source +kh_dun01 mapflag privateairship_source +kh_dun02 mapflag privateairship_source +lasa_dun01 mapflag privateairship_source +lasa_dun02 mapflag privateairship_source +lasa_dun03 mapflag privateairship_source +lasa_fild01 mapflag privateairship_source +lasa_fild02 mapflag privateairship_source +lasagna mapflag privateairship_source +lhz_dun01 mapflag privateairship_source +lhz_dun02 mapflag privateairship_source +lhz_dun03 mapflag privateairship_source +lhz_fild01 mapflag privateairship_source +lhz_fild02 mapflag privateairship_source +lhz_fild03 mapflag privateairship_source +lighthalzen mapflag privateairship_source +lou_dun01 mapflag privateairship_source +lou_dun02 mapflag privateairship_source +lou_dun03 mapflag privateairship_source +lou_fild01 mapflag privateairship_source +louyang mapflag privateairship_source +ma_dun01 mapflag privateairship_source +ma_fild01 mapflag privateairship_source +ma_fild02 mapflag privateairship_source +ma_scene01 mapflag privateairship_source +mag_dun01 mapflag privateairship_source +mag_dun02 mapflag privateairship_source +mal_dun01 mapflag privateairship_source +malangdo mapflag privateairship_source +malaya mapflag privateairship_source +man_fild01 mapflag privateairship_source +man_fild02 mapflag privateairship_source +man_fild03 mapflag privateairship_source +manuk mapflag privateairship_source +mid_camp mapflag privateairship_source +mjo_dun01 mapflag privateairship_source +mjo_dun02 mapflag privateairship_source +mjo_dun03 mapflag privateairship_source +mjolnir_01 mapflag privateairship_source +mjolnir_02 mapflag privateairship_source +mjolnir_03 mapflag privateairship_source +mjolnir_04 mapflag privateairship_source +mjolnir_05 mapflag privateairship_source +mjolnir_06 mapflag privateairship_source +mjolnir_07 mapflag privateairship_source +mjolnir_08 mapflag privateairship_source +mjolnir_09 mapflag privateairship_source +mjolnir_10 mapflag privateairship_source +mjolnir_11 mapflag privateairship_source +mjolnir_12 mapflag privateairship_source +moc_fild01 mapflag privateairship_source +moc_fild02 mapflag privateairship_source +moc_fild03 mapflag privateairship_source +moc_fild04 mapflag privateairship_source +moc_fild05 mapflag privateairship_source +moc_fild06 mapflag privateairship_source +moc_fild07 mapflag privateairship_source +moc_fild08 mapflag privateairship_source +moc_fild09 mapflag privateairship_source +moc_fild10 mapflag privateairship_source +moc_fild11 mapflag privateairship_source +moc_fild12 mapflag privateairship_source +moc_fild13 mapflag privateairship_source +moc_fild14 mapflag privateairship_source +moc_fild15 mapflag privateairship_source +moc_fild16 mapflag privateairship_source +moc_fild17 mapflag privateairship_source +moc_fild18 mapflag privateairship_source +moc_fild19 mapflag privateairship_source +moc_pryd01 mapflag privateairship_source +moc_pryd02 mapflag privateairship_source +moc_pryd03 mapflag privateairship_source +moc_pryd04 mapflag privateairship_source +moc_pryd05 mapflag privateairship_source +moc_pryd06 mapflag privateairship_source +moc_ruins mapflag privateairship_source +mora mapflag privateairship_source +moro_cav mapflag privateairship_source +moro_vol mapflag privateairship_source +morocc mapflag privateairship_source +moscovia mapflag privateairship_source +mosk_dun01 mapflag privateairship_source +mosk_dun02 mapflag privateairship_source +mosk_dun03 mapflag privateairship_source +mosk_fild02 mapflag privateairship_source +nameless_n mapflag privateairship_source +nif_fild01 mapflag privateairship_source +nif_fild02 mapflag privateairship_source +niflheim mapflag privateairship_source +odin_tem01 mapflag privateairship_source +odin_tem02 mapflag privateairship_source +odin_tem03 mapflag privateairship_source +orcsdun01 mapflag privateairship_source +orcsdun02 mapflag privateairship_source +pay_arche mapflag privateairship_source +pay_dun00 mapflag privateairship_source +pay_dun01 mapflag privateairship_source +pay_dun02 mapflag privateairship_source +pay_dun03 mapflag privateairship_source +pay_dun04 mapflag privateairship_source +pay_fild01 mapflag privateairship_source +pay_fild02 mapflag privateairship_source +pay_fild03 mapflag privateairship_source +pay_fild04 mapflag privateairship_source +pay_fild05 mapflag privateairship_source +pay_fild06 mapflag privateairship_source +pay_fild07 mapflag privateairship_source +pay_fild08 mapflag privateairship_source +pay_fild09 mapflag privateairship_source +pay_fild10 mapflag privateairship_source +pay_fild11 mapflag privateairship_source +payon mapflag privateairship_source +prontera mapflag privateairship_source +prt_fild00 mapflag privateairship_source +prt_fild01 mapflag privateairship_source +prt_fild02 mapflag privateairship_source +prt_fild03 mapflag privateairship_source +prt_fild04 mapflag privateairship_source +prt_fild05 mapflag privateairship_source +prt_fild06 mapflag privateairship_source +prt_fild07 mapflag privateairship_source +prt_fild08 mapflag privateairship_source +prt_fild09 mapflag privateairship_source +prt_fild10 mapflag privateairship_source +prt_fild11 mapflag privateairship_source +prt_maze01 mapflag privateairship_source +prt_maze02 mapflag privateairship_source +prt_maze03 mapflag privateairship_source +prt_monk mapflag privateairship_source +prt_sewb1 mapflag privateairship_source +prt_sewb2 mapflag privateairship_source +prt_sewb3 mapflag privateairship_source +prt_sewb4 mapflag privateairship_source +ra_fild01 mapflag privateairship_source +ra_fild03 mapflag privateairship_source +ra_fild04 mapflag privateairship_source +ra_fild05 mapflag privateairship_source +ra_fild06 mapflag privateairship_source +ra_fild08 mapflag privateairship_source +ra_fild12 mapflag privateairship_source +ra_san01 mapflag privateairship_source +ra_san02 mapflag privateairship_source +ra_san03 mapflag privateairship_source +ra_san04 mapflag privateairship_source +ra_san05 mapflag privateairship_source +ra_temple mapflag privateairship_source +rachel mapflag privateairship_source +spl_fild01 mapflag privateairship_source +spl_fild02 mapflag privateairship_source +spl_fild03 mapflag privateairship_source +splendide mapflag privateairship_source +tha_t01 mapflag privateairship_source +tha_t02 mapflag privateairship_source +tha_t03 mapflag privateairship_source +tha_t04 mapflag privateairship_source +tha_t05 mapflag privateairship_source +tha_t06 mapflag privateairship_source +tha_t07 mapflag privateairship_source +tha_t08 mapflag privateairship_source +tha_t09 mapflag privateairship_source +tha_t10 mapflag privateairship_source +tha_t11 mapflag privateairship_source +tha_t12 mapflag privateairship_source +thor_v01 mapflag privateairship_source +thor_v02 mapflag privateairship_source +thor_v03 mapflag privateairship_source +treasure01 mapflag privateairship_source +treasure02 mapflag privateairship_source +tur_dun01 mapflag privateairship_source +tur_dun02 mapflag privateairship_source +tur_dun03 mapflag privateairship_source +tur_dun04 mapflag privateairship_source +tur_dun05 mapflag privateairship_source +um_fild01 mapflag privateairship_source +um_fild02 mapflag privateairship_source +um_fild03 mapflag privateairship_source +um_fild04 mapflag privateairship_source +umbala mapflag privateairship_source +ve_fild01 mapflag privateairship_source +ve_fild02 mapflag privateairship_source +ve_fild03 mapflag privateairship_source +ve_fild04 mapflag privateairship_source +ve_fild06 mapflag privateairship_source +ve_fild07 mapflag privateairship_source +veins mapflag privateairship_source +ver_eju mapflag privateairship_source +ver_tunn mapflag privateairship_source +verus03 mapflag privateairship_source +verus04 mapflag privateairship_source +yuno mapflag privateairship_source +yuno_fild01 mapflag privateairship_source +yuno_fild02 mapflag privateairship_source +yuno_fild03 mapflag privateairship_source +yuno_fild04 mapflag privateairship_source +yuno_fild06 mapflag privateairship_source +yuno_fild07 mapflag privateairship_source +yuno_fild08 mapflag privateairship_source +yuno_fild09 mapflag privateairship_source +yuno_fild11 mapflag privateairship_source +yuno_fild12 mapflag privateairship_source + +//======================================= +// Available destination maps +//======================================= +abbey01 mapflag privateairship_destination +abbey02 mapflag privateairship_destination +abbey03 mapflag privateairship_destination +abyss_01 mapflag privateairship_destination +abyss_02 mapflag privateairship_destination +abyss_03 mapflag privateairship_destination +alb2trea mapflag privateairship_destination +alberta mapflag privateairship_destination +alde_dun01 mapflag privateairship_destination +alde_dun02 mapflag privateairship_destination +alde_dun03 mapflag privateairship_destination +alde_dun04 mapflag privateairship_destination +alde_gld mapflag privateairship_destination +aldebaran mapflag privateairship_destination +ama_dun01 mapflag privateairship_destination +ama_dun02 mapflag privateairship_destination +ama_dun03 mapflag privateairship_destination +ama_fild01 mapflag privateairship_destination +amatsu mapflag privateairship_destination +anthell01 mapflag privateairship_destination +anthell02 mapflag privateairship_destination +aru_gld mapflag privateairship_destination +ayo_dun01 mapflag privateairship_destination +ayo_dun02 mapflag privateairship_destination +ayo_fild01 mapflag privateairship_destination +ayothaya mapflag privateairship_destination +beach_dun mapflag privateairship_destination +beach_dun2 mapflag privateairship_destination +beach_dun3 mapflag privateairship_destination +bif_fild01 mapflag privateairship_destination +bif_fild02 mapflag privateairship_destination +bra_dun01 mapflag privateairship_destination +bra_dun02 mapflag privateairship_destination +bra_fild01 mapflag privateairship_destination +brasilis mapflag privateairship_destination +c_tower1 mapflag privateairship_destination +c_tower2 mapflag privateairship_destination +c_tower3 mapflag privateairship_destination +c_tower4 mapflag privateairship_destination +cmd_fild01 mapflag privateairship_destination +cmd_fild02 mapflag privateairship_destination +cmd_fild03 mapflag privateairship_destination +cmd_fild04 mapflag privateairship_destination +cmd_fild06 mapflag privateairship_destination +cmd_fild07 mapflag privateairship_destination +cmd_fild08 mapflag privateairship_destination +cmd_fild09 mapflag privateairship_destination +comodo mapflag privateairship_destination +dali mapflag privateairship_destination +dali02 mapflag privateairship_destination +dew_dun01 mapflag privateairship_destination +dew_dun02 mapflag privateairship_destination +dew_fild01 mapflag privateairship_destination +dewata mapflag privateairship_destination +dic_dun01 mapflag privateairship_destination +dic_dun02 mapflag privateairship_destination +dic_dun03 mapflag privateairship_destination +dic_fild01 mapflag privateairship_destination +dic_fild02 mapflag privateairship_destination +dicastes01 mapflag privateairship_destination +dicastes02 mapflag privateairship_destination +ecl_fild01 mapflag privateairship_destination +ecl_tdun01 mapflag privateairship_destination +ecl_tdun02 mapflag privateairship_destination +ecl_tdun03 mapflag privateairship_destination +eclage mapflag privateairship_destination +ein_dun01 mapflag privateairship_destination +ein_dun02 mapflag privateairship_destination +ein_fild01 mapflag privateairship_destination +ein_fild03 mapflag privateairship_destination +ein_fild04 mapflag privateairship_destination +ein_fild05 mapflag privateairship_destination +ein_fild06 mapflag privateairship_destination +ein_fild07 mapflag privateairship_destination +ein_fild08 mapflag privateairship_destination +ein_fild09 mapflag privateairship_destination +einbech mapflag privateairship_destination +einbroch mapflag privateairship_destination +gef_dun00 mapflag privateairship_destination +gef_dun01 mapflag privateairship_destination +gef_dun02 mapflag privateairship_destination +gef_fild00 mapflag privateairship_destination +gef_fild01 mapflag privateairship_destination +gef_fild02 mapflag privateairship_destination +gef_fild03 mapflag privateairship_destination +gef_fild04 mapflag privateairship_destination +gef_fild05 mapflag privateairship_destination +gef_fild06 mapflag privateairship_destination +gef_fild07 mapflag privateairship_destination +gef_fild08 mapflag privateairship_destination +gef_fild09 mapflag privateairship_destination +gef_fild10 mapflag privateairship_destination +gef_fild11 mapflag privateairship_destination +gef_fild12 mapflag privateairship_destination +gef_fild13 mapflag privateairship_destination +gef_fild14 mapflag privateairship_destination +gefenia01 mapflag privateairship_destination +gefenia02 mapflag privateairship_destination +gefenia03 mapflag privateairship_destination +gefenia04 mapflag privateairship_destination +geffen mapflag privateairship_destination +gl_cas01 mapflag privateairship_destination +gl_cas02 mapflag privateairship_destination +gl_church mapflag privateairship_destination +gl_chyard mapflag privateairship_destination +gl_dun01 mapflag privateairship_destination +gl_dun02 mapflag privateairship_destination +gl_in01 mapflag privateairship_destination +gl_knt01 mapflag privateairship_destination +gl_knt02 mapflag privateairship_destination +gl_prison mapflag privateairship_destination +gl_prison1 mapflag privateairship_destination +gl_sew01 mapflag privateairship_destination +gl_sew02 mapflag privateairship_destination +gl_sew03 mapflag privateairship_destination +gl_sew04 mapflag privateairship_destination +gl_step mapflag privateairship_destination +glast_01 mapflag privateairship_destination +gon_dun01 mapflag privateairship_destination +gon_dun02 mapflag privateairship_destination +gon_dun03 mapflag privateairship_destination +gon_fild01 mapflag privateairship_destination +gonryun mapflag privateairship_destination +hu_fild01 mapflag privateairship_destination +hu_fild02 mapflag privateairship_destination +hu_fild04 mapflag privateairship_destination +hu_fild05 mapflag privateairship_destination +hu_fild06 mapflag privateairship_destination +hugel mapflag privateairship_destination +ice_dun01 mapflag privateairship_destination +ice_dun02 mapflag privateairship_destination +ice_dun03 mapflag privateairship_destination +in_sphinx1 mapflag privateairship_destination +in_sphinx2 mapflag privateairship_destination +in_sphinx3 mapflag privateairship_destination +in_sphinx4 mapflag privateairship_destination +in_sphinx5 mapflag privateairship_destination +iz_dun00 mapflag privateairship_destination +iz_dun01 mapflag privateairship_destination +iz_dun02 mapflag privateairship_destination +iz_dun03 mapflag privateairship_destination +iz_dun04 mapflag privateairship_destination +iz_dun05 mapflag privateairship_destination +izlu2dun mapflag privateairship_destination +izlude mapflag privateairship_destination +jupe_core mapflag privateairship_destination +juperos_01 mapflag privateairship_destination +juperos_02 mapflag privateairship_destination +kh_dun01 mapflag privateairship_destination +kh_dun02 mapflag privateairship_destination +lasa_dun01 mapflag privateairship_destination +lasa_dun02 mapflag privateairship_destination +lasa_dun03 mapflag privateairship_destination +lasa_fild01 mapflag privateairship_destination +lasa_fild02 mapflag privateairship_destination +lasagna mapflag privateairship_destination +lhz_dun01 mapflag privateairship_destination +lhz_dun02 mapflag privateairship_destination +lhz_dun03 mapflag privateairship_destination +lhz_fild01 mapflag privateairship_destination +lhz_fild02 mapflag privateairship_destination +lhz_fild03 mapflag privateairship_destination +lighthalzen mapflag privateairship_destination +lou_dun01 mapflag privateairship_destination +lou_dun02 mapflag privateairship_destination +lou_dun03 mapflag privateairship_destination +lou_fild01 mapflag privateairship_destination +louyang mapflag privateairship_destination +ma_dun01 mapflag privateairship_destination +ma_fild01 mapflag privateairship_destination +ma_fild02 mapflag privateairship_destination +ma_scene01 mapflag privateairship_destination +mag_dun01 mapflag privateairship_destination +mag_dun02 mapflag privateairship_destination +mal_dun01 mapflag privateairship_destination +malangdo mapflag privateairship_destination +malaya mapflag privateairship_destination +man_fild01 mapflag privateairship_destination +man_fild02 mapflag privateairship_destination +man_fild03 mapflag privateairship_destination +manuk mapflag privateairship_destination +mid_camp mapflag privateairship_destination +mjo_dun01 mapflag privateairship_destination +mjo_dun02 mapflag privateairship_destination +mjo_dun03 mapflag privateairship_destination +mjolnir_01 mapflag privateairship_destination +mjolnir_02 mapflag privateairship_destination +mjolnir_03 mapflag privateairship_destination +mjolnir_04 mapflag privateairship_destination +mjolnir_05 mapflag privateairship_destination +mjolnir_06 mapflag privateairship_destination +mjolnir_07 mapflag privateairship_destination +mjolnir_08 mapflag privateairship_destination +mjolnir_09 mapflag privateairship_destination +mjolnir_10 mapflag privateairship_destination +mjolnir_11 mapflag privateairship_destination +mjolnir_12 mapflag privateairship_destination +moc_fild01 mapflag privateairship_destination +moc_fild02 mapflag privateairship_destination +moc_fild03 mapflag privateairship_destination +moc_fild04 mapflag privateairship_destination +moc_fild05 mapflag privateairship_destination +moc_fild06 mapflag privateairship_destination +moc_fild07 mapflag privateairship_destination +moc_fild08 mapflag privateairship_destination +moc_fild09 mapflag privateairship_destination +moc_fild10 mapflag privateairship_destination +moc_fild11 mapflag privateairship_destination +moc_fild12 mapflag privateairship_destination +moc_fild13 mapflag privateairship_destination +moc_fild14 mapflag privateairship_destination +moc_fild15 mapflag privateairship_destination +moc_fild16 mapflag privateairship_destination +moc_fild17 mapflag privateairship_destination +moc_fild18 mapflag privateairship_destination +moc_fild19 mapflag privateairship_destination +moc_pryd01 mapflag privateairship_destination +moc_pryd02 mapflag privateairship_destination +moc_pryd03 mapflag privateairship_destination +moc_pryd04 mapflag privateairship_destination +moc_pryd05 mapflag privateairship_destination +moc_pryd06 mapflag privateairship_destination +moc_ruins mapflag privateairship_destination +mora mapflag privateairship_destination +moro_cav mapflag privateairship_destination +moro_vol mapflag privateairship_destination +morocc mapflag privateairship_destination +moscovia mapflag privateairship_destination +mosk_dun01 mapflag privateairship_destination +mosk_dun02 mapflag privateairship_destination +mosk_dun03 mapflag privateairship_destination +mosk_fild02 mapflag privateairship_destination +nameless_n mapflag privateairship_destination +nif_fild01 mapflag privateairship_destination +nif_fild02 mapflag privateairship_destination +niflheim mapflag privateairship_destination +odin_tem01 mapflag privateairship_destination +odin_tem02 mapflag privateairship_destination +odin_tem03 mapflag privateairship_destination +orcsdun01 mapflag privateairship_destination +orcsdun02 mapflag privateairship_destination +pay_arche mapflag privateairship_destination +pay_dun00 mapflag privateairship_destination +pay_dun01 mapflag privateairship_destination +pay_dun02 mapflag privateairship_destination +pay_dun03 mapflag privateairship_destination +pay_dun04 mapflag privateairship_destination +pay_fild01 mapflag privateairship_destination +pay_fild02 mapflag privateairship_destination +pay_fild03 mapflag privateairship_destination +pay_fild04 mapflag privateairship_destination +pay_fild05 mapflag privateairship_destination +pay_fild06 mapflag privateairship_destination +pay_fild07 mapflag privateairship_destination +pay_fild08 mapflag privateairship_destination +pay_fild09 mapflag privateairship_destination +pay_fild10 mapflag privateairship_destination +pay_fild11 mapflag privateairship_destination +payon mapflag privateairship_destination +prontera mapflag privateairship_destination +prt_fild00 mapflag privateairship_destination +prt_fild01 mapflag privateairship_destination +prt_fild02 mapflag privateairship_destination +prt_fild03 mapflag privateairship_destination +prt_fild04 mapflag privateairship_destination +prt_fild05 mapflag privateairship_destination +prt_fild06 mapflag privateairship_destination +prt_fild07 mapflag privateairship_destination +prt_fild08 mapflag privateairship_destination +prt_fild09 mapflag privateairship_destination +prt_fild10 mapflag privateairship_destination +prt_fild11 mapflag privateairship_destination +prt_maze01 mapflag privateairship_destination +prt_maze02 mapflag privateairship_destination +prt_maze03 mapflag privateairship_destination +prt_monk mapflag privateairship_destination +prt_sewb1 mapflag privateairship_destination +prt_sewb2 mapflag privateairship_destination +prt_sewb3 mapflag privateairship_destination +prt_sewb4 mapflag privateairship_destination +ra_fild01 mapflag privateairship_destination +ra_fild03 mapflag privateairship_destination +ra_fild04 mapflag privateairship_destination +ra_fild05 mapflag privateairship_destination +ra_fild06 mapflag privateairship_destination +ra_fild08 mapflag privateairship_destination +ra_fild12 mapflag privateairship_destination +ra_san01 mapflag privateairship_destination +ra_san02 mapflag privateairship_destination +ra_san03 mapflag privateairship_destination +ra_san04 mapflag privateairship_destination +ra_san05 mapflag privateairship_destination +ra_temple mapflag privateairship_destination +rachel mapflag privateairship_destination +spl_fild01 mapflag privateairship_destination +spl_fild02 mapflag privateairship_destination +spl_fild03 mapflag privateairship_destination +splendide mapflag privateairship_destination +tha_t01 mapflag privateairship_destination +tha_t02 mapflag privateairship_destination +tha_t03 mapflag privateairship_destination +tha_t04 mapflag privateairship_destination +tha_t05 mapflag privateairship_destination +tha_t06 mapflag privateairship_destination +tha_t07 mapflag privateairship_destination +tha_t08 mapflag privateairship_destination +tha_t09 mapflag privateairship_destination +tha_t10 mapflag privateairship_destination +tha_t11 mapflag privateairship_destination +tha_t12 mapflag privateairship_destination +thor_v01 mapflag privateairship_destination +thor_v02 mapflag privateairship_destination +thor_v03 mapflag privateairship_destination +treasure01 mapflag privateairship_destination +treasure02 mapflag privateairship_destination +tur_dun01 mapflag privateairship_destination +tur_dun02 mapflag privateairship_destination +tur_dun03 mapflag privateairship_destination +tur_dun04 mapflag privateairship_destination +tur_dun05 mapflag privateairship_destination +um_fild01 mapflag privateairship_destination +um_fild02 mapflag privateairship_destination +um_fild03 mapflag privateairship_destination +um_fild04 mapflag privateairship_destination +umbala mapflag privateairship_destination +ve_fild01 mapflag privateairship_destination +ve_fild02 mapflag privateairship_destination +ve_fild03 mapflag privateairship_destination +ve_fild04 mapflag privateairship_destination +ve_fild06 mapflag privateairship_destination +ve_fild07 mapflag privateairship_destination +veins mapflag privateairship_destination +ver_eju mapflag privateairship_destination +ver_tunn mapflag privateairship_destination +verus03 mapflag privateairship_destination +verus04 mapflag privateairship_destination +yuno mapflag privateairship_destination +yuno_fild01 mapflag privateairship_destination +yuno_fild02 mapflag privateairship_destination +yuno_fild03 mapflag privateairship_destination +yuno_fild04 mapflag privateairship_destination +yuno_fild06 mapflag privateairship_destination +yuno_fild07 mapflag privateairship_destination +yuno_fild08 mapflag privateairship_destination +yuno_fild09 mapflag privateairship_destination +yuno_fild11 mapflag privateairship_destination +yuno_fild12 mapflag privateairship_destination diff --git a/npc/re/scripts_mapflags.conf b/npc/re/scripts_mapflags.conf index e8e3c272af..96e47b6a77 100644 --- a/npc/re/scripts_mapflags.conf +++ b/npc/re/scripts_mapflags.conf @@ -13,6 +13,7 @@ npc: npc/re/mapflag/nosave.txt npc: npc/re/mapflag/noteleport.txt npc: npc/re/mapflag/nowarpto.txt //npc: npc/re/mapflag/partylock.txt +npc: npc/re/mapflag/privateairship.txt npc: npc/re/mapflag/night.txt npc: npc/re/mapflag/restricted.txt npc: npc/re/mapflag/town.txt diff --git a/sql-files/logs.sql b/sql-files/logs.sql index 505f704846..99bc6e2d7f 100644 --- a/sql-files/logs.sql +++ b/sql-files/logs.sql @@ -165,12 +165,13 @@ CREATE TABLE IF NOT EXISTS `npclog` ( # Lotter(Y) # (Z) Merged Items # (Q)uest +# Private Airs(H)ip CREATE TABLE IF NOT EXISTS `picklog` ( `id` int(11) NOT NULL auto_increment, `time` datetime NOT NULL, `char_id` int(11) NOT NULL default '0', - `type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F','Y','Z','Q') NOT NULL default 'P', + `type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F','Y','Z','Q','H') NOT NULL default 'P', `nameid` smallint(5) unsigned NOT NULL default '0', `amount` int(11) NOT NULL default '1', `refine` tinyint(3) unsigned NOT NULL default '0', diff --git a/sql-files/upgrades/upgrade_20180729_logs.sql b/sql-files/upgrades/upgrade_20180729_logs.sql new file mode 100644 index 0000000000..a301b73da6 --- /dev/null +++ b/sql-files/upgrades/upgrade_20180729_logs.sql @@ -0,0 +1,2 @@ +ALTER TABLE `picklog` + MODIFY COLUMN `type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F','Y','Z','Q','H') NOT NULL default 'P'; diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 642924d446..e82f025fa8 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -8505,6 +8505,7 @@ static const struct _battle_data { { "summoner_trait", &battle_config.summoner_trait, 3, 0, 3, }, { "homunculus_autofeed_always", &battle_config.homunculus_autofeed_always, 1, 0, 1, }, { "feature.attendance", &battle_config.feature_attendance, 1, 0, 1, }, + { "feature.privateairship", &battle_config.feature_privateairship, 1, 0, 1, }, #include "../custom/battle_config_init.inc" }; @@ -8649,6 +8650,13 @@ void battle_adjust_conf() } #endif +#if PACKETVER < 20180321 + if( battle_config.feature_privateairship ){ + ShowWarning("conf/battle/feature.conf private airship system is enabled but it requires PACKETVER 2018-03-21 or newer, disabling...\n"); + battle_config.feature_privateairship = 0; + } +#endif + #ifndef CELL_NOSTACK if (battle_config.custom_cell_stack_limit != 1) ShowWarning("Battle setting 'custom_cell_stack_limit' takes no effect as this server was compiled without Cell Stack Limit support.\n"); diff --git a/src/map/battle.hpp b/src/map/battle.hpp index dd2d647226..0dfefdbfaf 100644 --- a/src/map/battle.hpp +++ b/src/map/battle.hpp @@ -645,6 +645,7 @@ struct Battle_Config int summoner_trait; int homunculus_autofeed_always; int feature_attendance; + int feature_privateairship; #include "../custom/battle_config_struct.inc" }; diff --git a/src/map/clif.cpp b/src/map/clif.cpp index fb011687b1..f3c3bca6f5 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -20388,6 +20388,121 @@ void clif_weight_limit( struct map_session_data* sd ){ #endif } +enum e_private_airship_response : uint32{ + PRIVATEAIRSHIP_OK, + PRIVATEAIRSHIP_RETRY, + PRIVATEAIRSHIP_ITEM_NOT_ENOUGH, + PRIVATEAIRSHIP_DESTINATION_MAP_INVALID, + PRIVATEAIRSHIP_SOURCE_MAP_INVALID, + PRIVATEAIRSHIP_ITEM_UNAVAILABLE +}; + +/// Send out the response to a private airship request +/// 0A4A .L +void clif_private_airship_response( struct map_session_data* sd, enum e_private_airship_response response ){ +#if PACKETVER >= 20180321 + nullpo_retv( sd ); + + int fd = sd->fd; + + WFIFOHEAD( fd, packet_len( 0xA4A ) ); + WFIFOW( fd, 0 ) = 0xA4A; + WFIFOL( fd, 2 ) = response; + WFIFOSET( fd, packet_len( 0xA4A ) ); +#endif +} + +/// Parses a request for a private airship +/// 0A49 .16B .W +void clif_parse_private_airship_request( int fd, struct map_session_data* sd ){ +#if PACKETVER >= 20180321 + // Check if the feature is enabled + if( !battle_config.feature_privateairship ){ + clif_messagecolor( &sd->bl, color_table[COLOR_RED], msg_txt( sd, 792 ), false, SELF ); // The private airship system is disabled. + return; + } + + // Check if the player is allowed to warp from the source map + if( !map_getmapflag( sd->bl.m, MF_PRIVATEAIRSHIP_SOURCE ) ){ + clif_private_airship_response( sd, PRIVATEAIRSHIP_SOURCE_MAP_INVALID ); + return; + } + + char mapname[MAP_NAME_LENGTH_EXT]; + + safestrncpy( mapname, RFIFOCP( fd, 2 ), MAP_NAME_LENGTH_EXT ); + + int16 mapindex = mapindex_name2id( mapname ); + + // Check if we know the mapname + if( mapindex < 0 ){ + clif_private_airship_response( sd, PRIVATEAIRSHIP_DESTINATION_MAP_INVALID ); + return; + } + + int16 mapid = map_mapindex2mapid( mapindex ); + + // Check if the map is available on this server + if( mapid < 0 ){ + // TODO: add multi map-server support, cant validate the mapflags of the other server + return; + } + + // Check if the player tried to warp to the map he is on + if( sd->bl.m == mapid ){ + // This is blocked by the client, but just to be sure + return; + } + + // This can only be a hack, so we prevent it + if( map_getmapdata( mapid )->instance_id ){ + // Ignore requests to warp directly into a running instance + return; + } + + // Check if the player is allowed to warp to the target map + if( !map_getmapflag( mapid, MF_PRIVATEAIRSHIP_DESTINATION ) ){ + clif_private_airship_response( sd, PRIVATEAIRSHIP_DESTINATION_MAP_INVALID ); + return; + } + + // The UI only offers these two buttons(items) for now + uint16 item_ids[] = { + ITEMID_ACTINIDIA_CAT_FRUIT, + ITEMID_WORLD_MOVING_RIGHTS + }; + + uint16 item_id = RFIFOW( fd, 2 + MAP_NAME_LENGTH_EXT ); + + int i; + + ARR_FIND( 0, ARRAYLENGTH( item_ids ), i, item_ids[i] == item_id ); + + // Check if the item sent by the client is known to us + if( i == ARRAYLENGTH( item_ids ) ){ + clif_private_airship_response( sd, PRIVATEAIRSHIP_ITEM_UNAVAILABLE ); + return; + } + + int idx = pc_search_inventory( sd, item_id ); + + // Check if the player has the item at all + if( idx < 0 ){ + clif_private_airship_response( sd, PRIVATEAIRSHIP_ITEM_NOT_ENOUGH ); + return; + } + + // Delete the chosen item + if( pc_delitem( sd, idx, 1, 0, 0, LOG_TYPE_PRIVATE_AIRSHIP ) ){ + clif_private_airship_response( sd, PRIVATEAIRSHIP_RETRY ); + return; + } + + // Warp the player to a random spot on the destination map + pc_setpos( sd, mapindex, 0, 0, CLR_TELEPORT ); +#endif +} + /*========================================== * Main client packet processing function *------------------------------------------*/ diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index 70d803951f..6fbaadaf53 100644 --- a/src/map/clif_packetdb.hpp +++ b/src/map/clif_packetdb.hpp @@ -2396,7 +2396,7 @@ // 2018-03-21aRagexeRE #if PACKETVER >= 20180321 - parseable_packet(0x0A49,20,clif_parse_dull,0); + parseable_packet(0x0A49,20,clif_parse_private_airship_request,0); packet(0x0A4A,6); packet(0x0A4B,22); packet(0x0A4C,28); diff --git a/src/map/itemdb.hpp b/src/map/itemdb.hpp index 71820e8d1d..6942551f98 100644 --- a/src/map/itemdb.hpp +++ b/src/map/itemdb.hpp @@ -80,6 +80,7 @@ enum item_itemid ITEMID_PAINT_BRUSH = 6122, ITEMID_MAGIC_GEAR_FUEL = 6146, ITEMID_STRANGE_EMBRYO = 6415, + ITEMID_ACTINIDIA_CAT_FRUIT = 6909, ITEMID_STONE = 7049, ITEMID_FIRE_BOTTLE = 7135, ITEMID_ACID_BOTTLE = 7136, @@ -120,6 +121,7 @@ enum item_itemid ITEMID_WOB_RACHEL = 14584, ITEMID_WOB_LOCAL = 14585, ITEMID_SIEGE_TELEPORT_SCROLL = 14591, + ITEMID_WORLD_MOVING_RIGHTS = 25464, }; ///Rune Knight diff --git a/src/map/log.cpp b/src/map/log.cpp index a41e937b43..e95fa8f2c9 100644 --- a/src/map/log.cpp +++ b/src/map/log.cpp @@ -84,6 +84,7 @@ static char log_picktype2char(e_log_pick_type type) case LOG_TYPE_ROULETTE: return 'Y'; // Roulette Lotter(Y) case LOG_TYPE_MERGE_ITEM: return 'Z'; // Merged Item case LOG_TYPE_QUEST: return 'Q'; // (Q)uest Item + case LOG_TYPE_PRIVATE_AIRSHIP: return 'H'; // Private Airs(H)ip } // should not get here, fallback diff --git a/src/map/log.hpp b/src/map/log.hpp index 3fa24de1a5..45c8ba92e3 100644 --- a/src/map/log.hpp +++ b/src/map/log.hpp @@ -49,6 +49,7 @@ enum e_log_pick_type : uint32 LOG_TYPE_ROULETTE = 0x100000, LOG_TYPE_MERGE_ITEM = 0x200000, LOG_TYPE_QUEST = 0x400000, + LOG_TYPE_PRIVATE_AIRSHIP = 0x800000, // combinations LOG_TYPE_LOOT = LOG_TYPE_PICKDROP_MONSTER|LOG_TYPE_CONSUME, // all diff --git a/src/map/map.hpp b/src/map/map.hpp index 39da3a84cb..3248b82a7b 100644 --- a/src/map/map.hpp +++ b/src/map/map.hpp @@ -587,6 +587,8 @@ enum e_mapflag : int16 { MF_HIDEMOBHPBAR, MF_NOLOOT, MF_NOEXP, + MF_PRIVATEAIRSHIP_SOURCE, + MF_PRIVATEAIRSHIP_DESTINATION, MF_MAX }; diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index e0b059ab8d..9ba73c6b01 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -453,6 +453,8 @@ export_constant(MF_HIDEMOBHPBAR); export_constant(MF_NOLOOT); export_constant(MF_NOEXP); + export_constant(MF_PRIVATEAIRSHIP_SOURCE); + export_constant(MF_PRIVATEAIRSHIP_DESTINATION); /* setcell types */ export_constant(CELL_WALKABLE);