diff --git a/conf/battle/client.conf b/conf/battle/client.conf
index cc1035a1e4..4cf35217dc 100644
--- a/conf/battle/client.conf
+++ b/conf/battle/client.conf
@@ -15,11 +15,11 @@ min_chat_delay: 0
// Valid range of dyes and styles on the client.
min_hair_style: 0
-max_hair_style: 27
+max_hair_style: 42
min_hair_color: 0
max_hair_color: 8
min_cloth_color: 0
-max_cloth_color: 4
+max_cloth_color: 7
min_body_style: 0
max_body_style: 1
diff --git a/conf/msg_conf/map_msg.conf b/conf/msg_conf/map_msg.conf
index b5ce3a6d3e..59b211d65f 100644
--- a/conf/msg_conf/map_msg.conf
+++ b/conf/msg_conf/map_msg.conf
@@ -876,7 +876,9 @@
797: This command is unavailable to non-4th class.
-//798-799 free
+// @stylist
+798: This command requires packet version 2015-11-04 or newer.
+799: You have already opened the stylist UI.
800: Dragon Knight
801: Meister
diff --git a/db/import-tmpl/stylist.yml b/db/import-tmpl/stylist.yml
new file mode 100644
index 0000000000..fc94888688
--- /dev/null
+++ b/db/import-tmpl/stylist.yml
@@ -0,0 +1,41 @@
+# This file is a part of rAthena.
+# Copyright(C) 2022 rAthena Development Team
+# https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+###########################################################################
+# Stylist Database
+###########################################################################
+#
+# Stylist Settings
+#
+###########################################################################
+# - Look Look that will be changed.
+# Options Possible options to select from.
+# - Index Client side index of the option.
+# Value Value of the look (can also be an item name).
+# CostsHuman: Costs for human players.
+# Price Required zeny. (Default: 0)
+# RequiredItem Required item. (Default: None)
+# RequiredItemBox Required item box. (Default: None)
+# CostsDoram: Costs for doram players.
+# Price Required zeny. (Default: 0)
+# RequiredItem Required item. (Default: None)
+# RequiredItemBox Required item box. (Default: None)
+###########################################################################
+
+Header:
+ Type: STYLIST_DB
+ Version: 1
diff --git a/db/re/item_db_etc.yml b/db/re/item_db_etc.yml
index f82a59c873..b4013b48bc 100644
--- a/db/re/item_db_etc.yml
+++ b/db/re/item_db_etc.yml
@@ -21686,8 +21686,8 @@ Body:
NoMail: true
NoAuction: true
- Id: 6707
- AegisName: Jeremy_Beauty_Coupon
- Name: Jeremy Beauty Coupon
+ AegisName: J_Shop_Coupon
+ Name: Cash Hair Coupon
Type: Etc
Buy: 10
Weight: 10
@@ -24023,9 +24023,10 @@ Body:
Type: Etc
Buy: 10
- Id: 6959
- AegisName: aegis_6959
- Name: Costume Change Ticket
+ AegisName: Costume_Ticket
+ Name: Costume Change Ticket
Type: Etc
+ Buy: 0
Trade:
Override: 100
NoDrop: true
diff --git a/db/re/item_db_usable.yml b/db/re/item_db_usable.yml
index f6b0596df6..527a7efd08 100644
--- a/db/re/item_db_usable.yml
+++ b/db/re/item_db_usable.yml
@@ -39884,6 +39884,57 @@ Body:
NoGuildStorage: true
NoMail: true
NoAuction: true
+ - Id: 16843
+ AegisName: C_New_Style_Box
+ Name: Beauty Gift Box
+ Type: Cash
+ Buy: 20
+ Weight: 10
+ Trade:
+ Override: 100
+ NoDrop: true
+ NoTrade: true
+ NoSell: true
+ NoCart: true
+ NoGuildStorage: true
+ NoMail: true
+ NoAuction: true
+ Script: |
+ getitem 7622,1;
+ - Id: 16854
+ AegisName: CCloth_Dye_Coupon_Box
+ Name: Clothing Dye Box
+ Type: Cash
+ Buy: 20
+ Weight: 10
+ Trade:
+ Override: 100
+ NoDrop: true
+ NoTrade: true
+ NoSell: true
+ NoCart: true
+ NoGuildStorage: true
+ NoMail: true
+ NoAuction: true
+ Script: |
+ getitem 6046,1;
+ - Id: 16855
+ AegisName: CCloth_Dye_Coupon2_Box
+ Name: Clothing Dye Orig Box
+ Type: Cash
+ Buy: 20
+ Weight: 10
+ Trade:
+ Override: 100
+ NoDrop: true
+ NoTrade: true
+ NoSell: true
+ NoCart: true
+ NoGuildStorage: true
+ NoMail: true
+ NoAuction: true
+ Script: |
+ getitem 6047,1;
- Id: 16864
AegisName: Siege_Map_Teleport_Scroll_Box_10
Name: Siege Map Teleport Scroll Box(10)
@@ -42918,6 +42969,23 @@ Body:
NoAuction: true
Script: |
getgroupitem(IG_Event_Almighty_Box_100);
+ - Id: 17336
+ AegisName: J_Shop_Coupon_Box
+ Name: Cash Hair Coupon Box
+ Type: Cash
+ Buy: 20
+ Weight: 10
+ Trade:
+ Override: 100
+ NoDrop: true
+ NoTrade: true
+ NoSell: true
+ NoCart: true
+ NoGuildStorage: true
+ NoMail: true
+ NoAuction: true
+ Script: |
+ getitem 6707,1;
- Id: 17337
AegisName: Holy_Spirit_Scroll
Name: Holy Spirit Egg
diff --git a/db/re/stylist.yml b/db/re/stylist.yml
new file mode 100644
index 0000000000..9e4be0a8bc
--- /dev/null
+++ b/db/re/stylist.yml
@@ -0,0 +1,429 @@
+# This file is a part of rAthena.
+# Copyright(C) 2022 rAthena Development Team
+# https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+###########################################################################
+# Stylist Database
+###########################################################################
+#
+# Stylist Settings
+#
+###########################################################################
+# - Look Look that will be changed.
+# Options Possible options to select from.
+# - Index Client side index of the option.
+# Value Value of the look (can also be an item name).
+# CostsHuman: Costs for human players.
+# Price Required zeny. (Default: 0)
+# RequiredItem Required item. (Default: None)
+# RequiredItemBox Required item box. (Default: None)
+# CostsDoram: Costs for doram players.
+# Price Required zeny. (Default: 0)
+# RequiredItem Required item. (Default: None)
+# RequiredItemBox Required item box. (Default: None)
+###########################################################################
+
+Header:
+ Type: STYLIST_DB
+ Version: 1
+
+Body:
+ - Look: Hair_Color
+ Options:
+ - Index: -1
+ Value: 0
+ CostsHuman:
+ Price: 0
+ CostsDoram:
+ Price: 0
+ - Index: 1
+ Value: 1
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 2
+ Value: 2
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 3
+ Value: 3
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 4
+ Value: 4
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 5
+ Value: 5
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 6
+ Value: 6
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 7
+ Value: 7
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 8
+ Value: 8
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Look: Hair
+ Options:
+ - Index: 1
+ Value: 1
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 2
+ Value: 2
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 3
+ Value: 3
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 4
+ Value: 4
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 5
+ Value: 5
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 6
+ Value: 6
+ CostsHuman:
+ Price: 100000
+ CostsDoram:
+ Price: 100000
+ - Index: 7
+ Value: 7
+ CostsHuman:
+ Price: 100000
+ CostDoram:
+ RequiredItem: J_Shop_Coupon2
+ RequiredItemBox: J_Shop_Coupon2
+ - Index: 8
+ Value: 8
+ CostsHuman:
+ Price: 100000
+ CostDoram:
+ RequiredItem: J_Shop_Coupon2
+ RequiredItemBox: J_Shop_Coupon2
+ - Index: 9
+ Value: 9
+ CostsHuman:
+ Price: 100000
+ CostDoram:
+ RequiredItem: J_Shop_Coupon2
+ RequiredItemBox: J_Shop_Coupon2
+ - Index: 10
+ Value: 10
+ CostsHuman:
+ Price: 100000
+ CostDoram:
+ RequiredItem: J_Shop_Coupon2
+ RequiredItemBox: J_Shop_Coupon2
+ - Index: 11
+ Value: 11
+ CostsHuman:
+ Price: 100000
+ - Index: 12
+ Value: 12
+ CostsHuman:
+ Price: 100000
+ - Index: 13
+ Value: 13
+ CostsHuman:
+ Price: 100000
+ - Index: 14
+ Value: 14
+ CostsHuman:
+ Price: 100000
+ - Index: 15
+ Value: 15
+ CostsHuman:
+ Price: 100000
+ - Index: 16
+ Value: 16
+ CostsHuman:
+ Price: 100000
+ - Index: 17
+ Value: 17
+ CostsHuman:
+ Price: 100000
+ - Index: 18
+ Value: 18
+ CostsHuman:
+ Price: 100000
+ - Index: 19
+ Value: 19
+ CostsHuman:
+ Price: 100000
+ - Index: 20
+ Value: 20
+ CostsHuman:
+ Price: 100000
+ - Index: 21
+ Value: 21
+ CostsHuman:
+ Price: 100000
+ - Index: 22
+ Value: 22
+ CostsHuman:
+ Price: 100000
+ - Index: 23
+ Value: 23
+ CostsHuman:
+ Price: 100000
+ - Index: 24
+ Value: 24
+ CostsHuman:
+ RequiredItem: New_Style_Coupon
+ RequiredItemBox: C_New_Style_Box
+ - Index: 25
+ Value: 25
+ CostsHuman:
+ RequiredItem: New_Style_Coupon
+ RequiredItemBox: C_New_Style_Box
+ - Index: 26
+ Value: 26
+ CostsHuman:
+ RequiredItem: New_Style_Coupon
+ RequiredItemBox: C_New_Style_Box
+ - Index: 27
+ Value: 27
+ CostsHuman:
+ RequiredItem: New_Style_Coupon
+ RequiredItemBox: C_New_Style_Box
+ - Index: 28
+ Value: 28
+ CostsHuman:
+ RequiredItem: J_Shop_Coupon
+ RequiredItemBox: J_Shop_Coupon_Box
+ - Index: 29
+ Value: 29
+ CostsHuman:
+ RequiredItem: J_Shop_Coupon
+ RequiredItemBox: J_Shop_Coupon_Box
+ - Index: 30
+ Value: 30
+ CostsHuman:
+ RequiredItem: J_Shop_Coupon2
+ RequiredItemBox: J_Shop_Coupon2
+ - Index: 31
+ Value: 31
+ CostsHuman:
+ RequiredItem: J_Shop_Coupon2
+ RequiredItemBox: J_Shop_Coupon2
+ - Index: 32
+ Value: 32
+ CostsHuman:
+ Price: 100000
+ - Index: 33
+ Value: 33
+ CostsHuman:
+ Price: 3000000
+ - Index: 34
+ Value: 34
+ CostsHuman:
+ Price: 3000000
+ - Index: 35
+ Value: 35
+ CostsHuman:
+ Price: 3000000
+ - Index: 36
+ Value: 36
+ CostsHuman:
+ Price: 3000000
+ - Index: 37
+ Value: 37
+ CostsHuman:
+ Price: 3000000
+ - Index: 38
+ Value: 38
+ CostsHuman:
+ Price: 3000000
+ - Index: 39
+ Value: 39
+ CostsHuman:
+ Price: 3000000
+ - Index: 40
+ Value: 40
+ CostsHuman:
+ Price: 3000000
+ - Index: 41
+ Value: 41
+ CostsHuman:
+ Price: 3000000
+ - Index: 42
+ Value: 42
+ CostsHuman:
+ Price: 3000000
+ - Look: Clothes_Color
+ Options:
+ - Index: 1
+ Value: 0
+ CostsHuman:
+ RequiredItem: Clothing_Dye_Coupon_II
+ RequiredItemBox: CCloth_Dye_Coupon2_Box
+ CostsDoram:
+ RequiredItem: Clothing_Dye_Coupon_II
+ RequiredItemBox: CCloth_Dye_Coupon2_Box
+ - Index: 2
+ Value: 2
+ CostsHuman:
+ RequiredItem: Clothing_Dye_Coupon
+ RequiredItemBox: CCloth_Dye_Coupon_Box
+ CostsDoram:
+ RequiredItem: Clothing_Dye_Coupon
+ RequiredItemBox: CCloth_Dye_Coupon_Box
+ - Index: 3
+ Value: 3
+ CostsHuman:
+ RequiredItem: Clothing_Dye_Coupon
+ RequiredItemBox: CCloth_Dye_Coupon_Box
+ CostsDoram:
+ RequiredItem: Clothing_Dye_Coupon
+ RequiredItemBox: CCloth_Dye_Coupon_Box
+ - Index: 4
+ Value: 4
+ CostsHuman:
+ RequiredItem: Clothing_Dye_Coupon
+ RequiredItemBox: CCloth_Dye_Coupon_Box
+ - Index: 5
+ Value: 5
+ CostsHuman:
+ RequiredItem: Clothing_Dye_Coupon
+ RequiredItemBox: CCloth_Dye_Coupon_Box
+ - Index: 6
+ Value: 6
+ CostsHuman:
+ RequiredItem: Clothing_Dye_Coupon
+ RequiredItemBox: CCloth_Dye_Coupon_Box
+ - Index: 7
+ Value: 7
+ CostsHuman:
+ RequiredItem: Clothing_Dye_Coupon
+ RequiredItemBox: CCloth_Dye_Coupon_Box
+ - Look: Head_Top
+ Options:
+ - Index: 1
+ Value: Hat
+ CostsHuman:
+ Price: 1000
+ CostsDoram:
+ Price: 1000
+ - Index: 2
+ Value: Ribbon
+ CostsHuman:
+ Price: 800
+ CostsDoram:
+ Price: 800
+ - Index: 3
+ Value: Bandana
+ CostsHuman:
+ Price: 400
+ CostsDoram:
+ Price: 400
+ - Look: Head_Mid
+ Options:
+ - Index: 1
+ Value: One_Eyed_Glass
+ CostsHuman:
+ Price: 10000
+ CostsDoram:
+ Price: 10000
+ - Index: 2
+ Value: Sunglasses
+ CostsHuman:
+ Price: 5000
+ CostsDoram:
+ Price: 5000
+ - Index: 3
+ Value: Luxury_Sunglasses
+ CostsHuman:
+ Price: 24000
+ CostsDoram:
+ Price: 24000
+ - Index: 4
+ Value: Spinning_Eyes
+ CostsHuman:
+ Price: 20000
+ CostsDoram:
+ Price: 20000
+ - Index: 5
+ Value: Diver's_Goggles
+ CostsHuman:
+ Price: 3500
+ CostsDoram:
+ Price: 3500
+ - Index: 6
+ Value: Glasses
+ CostsHuman:
+ Price: 4000
+ CostsDoram:
+ Price: 4000
+ - Index: 7
+ Value: Eye_Bandage
+ CostsHuman:
+ Price: 1000
+ CostsDoram:
+ Price: 1000
+ - Look: Head_Bottom
+ Options:
+ - Index: 1
+ Value: Granpa_Beard
+ CostsHuman:
+ Price: 5000
+ CostsDoram:
+ Price: 5000
+ - Look: Body2
+ Options:
+ - Index: 1
+ Value: 0
+ CostsHuman:
+ RequiredItem: Costume_Ticket
+ - Index: 2
+ Value: 1
+ CostsHuman:
+ RequiredItem: Costume_Ticket
diff --git a/db/stylist.yml b/db/stylist.yml
new file mode 100644
index 0000000000..f748603581
--- /dev/null
+++ b/db/stylist.yml
@@ -0,0 +1,47 @@
+# This file is a part of rAthena.
+# Copyright(C) 2022 rAthena Development Team
+# https://rathena.org - https://github.com/rathena
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+###########################################################################
+# Stylist Database
+###########################################################################
+#
+# Stylist Settings
+#
+###########################################################################
+# - Look Look that will be changed.
+# Options Possible options to select from.
+# - Index Client side index of the option.
+# Value Value of the look (can also be an item name).
+# CostsHuman: Costs for human players.
+# Price Required zeny. (Default: 0)
+# RequiredItem Required item. (Default: None)
+# RequiredItemBox Required item box. (Default: None)
+# CostsDoram: Costs for doram players.
+# Price Required zeny. (Default: 0)
+# RequiredItem Required item. (Default: None)
+# RequiredItemBox Required item box. (Default: None)
+###########################################################################
+
+Header:
+ Type: STYLIST_DB
+ Version: 1
+
+Footer:
+ Imports:
+ - Path: db/re/stylist.yml
+ Mode: Renewal
+ - Path: db/import/stylist.yml
diff --git a/doc/atcommands.txt b/doc/atcommands.txt
index 366b2ca570..39a57983f0 100644
--- a/doc/atcommands.txt
+++ b/doc/atcommands.txt
@@ -1237,6 +1237,14 @@ Note: This command requires packet version 2016-10-12 or newer.
---------------------------------------
+@stylist
+
+Opens the stylist user interface.
+
+Note: This command requires packet version 2015-11-04 or newer.
+
+---------------------------------------
+
@request
Sends a message to all connected GMs (via the GM whisper system).
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index 42ff1eea56..9d47decbdb 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -2897,6 +2897,14 @@ This feature requires 2016-10-12aRagexeRE or newer.
---------------------------------------
+*openstylist({})
+
+Opens the stylist UI for the attached player or the given character id.
+
+This feature requires packet version 2015-11-04 or newer.
+
+---------------------------------------
+
*getareadropitem("