summaryrefslogtreecommitdiff
path: root/world/map/npc/functions/barber.txt
diff options
context:
space:
mode:
Diffstat (limited to 'world/map/npc/functions/barber.txt')
-rw-r--r--world/map/npc/functions/barber.txt128
1 files changed, 104 insertions, 24 deletions
diff --git a/world/map/npc/functions/barber.txt b/world/map/npc/functions/barber.txt
index 2c940c33..54732418 100644
--- a/world/map/npc/functions/barber.txt
+++ b/world/map/npc/functions/barber.txt
@@ -4,13 +4,15 @@
// o11c updated it according to new scripting standards while adding pink.
// ... and added the code that shows your old color/style.
-// Note: there is a soft limit of 12 colors (0-11) and 20 styles (0-19)
+// Note: there is a soft limit of 15 colors per classes and 20 styles (0-19)
// This is the number that can be set when creating a character
// or using GM commands, but scripts (such as this one) can set
// any value 0-255
function|script|Barber
{
+ if (getequipid(equip_head) == 647)
+ goto L_Debug;
callfunc "getHeadStyles";
goto L_Main;
@@ -21,20 +23,49 @@ L_Main:
set @color$, "Unknown";
if (@style >= 1 && @style <= 20)
set @style$, @HairStyles$[(@style - 1)];
- if (Class > 1)
- set @color, (@color - (15 * Class));
+ if (@color == ((HC_WHITE - Class) + 1))
+ set @color$, "Shocked White";
+ set @color, (@color - (15 * (Class - 1)));
if (@color >= 0 && @color <= 15)
set @color$, @HairColors$[@color];
- if (@color == 127)
- set @color$, "Shocked White";
mes "Your current style is " + @style$ + " and your current color is " + @color$ + ".";
set @style$, "";
set @color$, "";
menu
"Change my style", L_Style,
"Change my color", L_Color,
+ "Change my gender", L_Gender,
+ "Nah, I'm fine", L_Done;
+
+L_Gender:
+ menu
+ "Female.", L_Female,
+ "Male.", L_Male,
+ "Non-binary.", L_NonBinary,
"Nah, I'm fine", L_Done;
+L_Female:
+ set @sex, 0;
+ goto L_Change;
+
+L_Male:
+ set @sex, 1;
+ goto L_Change;
+
+L_NonBinary:
+ set @sex, 3;
+ goto L_Change;
+
+L_Change:
+ if (Sex == @sex)
+ goto L_Already_Change;
+ set Sex, @sex;
+ return;
+
+L_Already_Change:
+ mes "\"Umm, you are that gender already.\"";
+ return;
+
L_Style:
if(!@hairOpts) set @HairStyles$[getarraysize(@HairStyles$)], "Surprise me";
if(!@hairOpts) set @HairStyles$[getarraysize(@HairStyles$)], "Nah, I'm fine";
@@ -61,24 +92,22 @@ L_Style:
@HairStyles$[18], L_MenuItems,
@HairStyles$[19], L_MenuItems,
@HairStyles$[20], L_MenuItems,
- @HairStyles$[21], L_MenuItems,
- @HairStyles$[22], L_MenuItems,
- @HairStyles$[23], L_MenuItems,
- @HairStyles$[24], L_MenuItems,
- @HairStyles$[25], L_MenuItems;
+ @HairStyles$[21], L_MenuItems;
L_MenuItems:
if (@menu == @style)
goto L_SameStyle;
if(@menu == (getarraysize(@HairStyles$) - 1)) goto L_RandomStyle;
- if(@menu == getarraysize(@HairStyles$)) goto L_Done;
+ if(@menu >= getarraysize(@HairStyles$)) goto L_Done;
setlook LOOK_HAIR_STYLE, @menu;
goto L_Main;
L_RandomStyle:
- set @randomStyle, rand(1, (getarraysize(@HairStyles$) -4));
- if(@randomStyle == @style) goto L_RandomStyle;
- setlook LOOK_HAIR_STYLE, @randomStyle;
+ setarray @randomStyle[0], rand(1, (getarraysize(@HairStyles$) - 2));
+ setarray @randomStyle[1], @randomStyle[1] + 1; // infinite loop prevention
+ if(@randomStyle[0] == @style && @randomStyle[1] < 15) goto L_RandomStyle;
+ setlook LOOK_HAIR_STYLE, @randomStyle[0];
+ setarray @randomStyle[1], 0;
menu
"Surprise me once again", L_RandomStyle,
"Go back", L_Main,
@@ -89,7 +118,6 @@ L_SameStyle:
goto L_Main;
L_Color:
- if(@style == @BaldStyle) goto L_SameColor; // last headstyle of any class is bald
if(!@colorOpts) set @HairColors$[getarraysize(@HairColors$)], "Surprise me";
if(!@colorOpts) set @HairColors$[getarraysize(@HairColors$)], "Nah, I'm fine";
if(!@colorOpts) set @colorOpts, 1;
@@ -116,24 +144,26 @@ L_MenuItems1:
if (@menu - 1 == @color)
goto L_SameColor;
if(@menu == (getarraysize(@HairColors$) - 1)) goto L_RandomColor;
- if(@menu == getarraysize(@HairColors$)) goto L_Done;
+ if(@menu >= getarraysize(@HairColors$)) goto L_Done;
setlook LOOK_HAIR_COLOR, ((@menu - 1) + (15 * (Class - 1)));
goto L_Main;
L_RandomColor:
- set @randomColor, rand((15 * (Class - 1)), ((getarraysize(@HairColors$) -4) + (15 * (Class - 1))));
- if(@randomColor == @color) goto L_RandomColor;
- setlook LOOK_HAIR_COLOR, @randomColor;
+ setarray @randomColor[0], rand((15 * (Class - 1)), ((getarraysize(@HairColors$) - 3) + (15 * (Class - 1))));
+ setarray @randomColor[1], @randomColor[1] + 1;
+ if(@randomColor[0] == @color && @randomColor[1] < 15) goto L_RandomColor;
+ setlook LOOK_HAIR_COLOR, @randomColor[0];
+ setarray @randomColor[1], 0;
menu
"Surprise me once again", L_RandomColor,
"Go back", L_Main,
"Goodbye", L_Done;
L_SameColor:
- mes "You are either bald or your hair is already that color.";
+ mes "You already have that color.";
goto L_Main;
-S_Janitor:
+L_Done:
// cleanup
set @menu, 0;
set @style, 0;
@@ -144,7 +174,57 @@ S_Janitor:
set @colorOpts, 0;
return;
-L_Done:
- callsub S_Janitor;
- return;
+L_Debug:
+ npcaction 9; // FIXME: this should become a builtin (ie `clear`)
+ mes "Class: " + Class;
+ mes "Style: " + getlook(LOOK_HAIR_STYLE);
+ mes "Color: " + getlook(LOOK_HAIR_COLOR);
+ mes "Gender: " + Sex;
+ menu
+ "edit| Set Class", L_DebugClass,
+ "edit| Set Style", L_DebugStyle,
+ "edit| Set Color", L_DebugColor,
+ "edit| Set Gender", L_DebugGender,
+ "toggle| Simulate logout", L_DebugLogout,
+ "Close", L_Done;
+
+L_DebugLogout:
+ callfunc "fixHeadStyles";
+ goto L_Debug;
+
+L_DebugClass:
+ set @dbg_class, 0;
+ mes "input class (0-32767)";
+ input @dbg_class;
+ if (@dbg_class >= 0 && @dbg_class <= 32767)
+ set Class, @dbg_class;
+ set @dbg_class, 0;
+ goto L_Debug;
+
+L_DebugStyle:
+ set @dbg_style, 0;
+ mes "input style (0-255)";
+ input @dbg_style;
+ if (@dbg_style >= 0 && @dbg_style <= 255)
+ setlook LOOK_HAIR_STYLE, @dbg_style;
+ set @dbg_style, 0;
+ goto L_Debug;
+
+L_DebugColor:
+ set @dbg_color, 0;
+ mes "input color (0-255)";
+ input @dbg_color;
+ if (@dbg_color >= 0 && @dbg_color <= 255)
+ setlook LOOK_HAIR_COLOR, @dbg_color;
+ set @dbg_color, 0;
+ goto L_Debug;
+
+L_DebugGender:
+ set @dbg_gender, 0;
+ mes "input gender (0-3)";
+ input @dbg_gender;
+ if (@dbg_gender >= 0 && @dbg_gender <= 3)
+ set Sex, @dbg_gender;
+ set @dbg_gender, 0;
+ goto L_Debug;
}