// The Barber script has been around since before the repository split
// so it's hard to figure out who wrote it.
// 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 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;
L_Main:
set @style, getlook(LOOK_HAIR_STYLE);
set @color, getlook(LOOK_HAIR_COLOR);
set @style$, "Unknown";
set @color$, "Unknown";
if (@style >= 1 && @style <= 20)
set @style$, @HairStyles$[(@style - 1)];
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];
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";
if(!@hairOpts) set @hairOpts, 1;
menu
@HairStyles$[0], L_MenuItems,
@HairStyles$[1], L_MenuItems,
@HairStyles$[2], L_MenuItems,
@HairStyles$[3], L_MenuItems,
@HairStyles$[4], L_MenuItems,
@HairStyles$[5], L_MenuItems,
@HairStyles$[6], L_MenuItems,
@HairStyles$[7], L_MenuItems,
@HairStyles$[8], L_MenuItems,
@HairStyles$[9], L_MenuItems,
@HairStyles$[10], L_MenuItems,
@HairStyles$[11], L_MenuItems,
@HairStyles$[12], L_MenuItems,
@HairStyles$[13], L_MenuItems,
@HairStyles$[14], L_MenuItems,
@HairStyles$[15], L_MenuItems,
@HairStyles$[16], L_MenuItems,
@HairStyles$[17], L_MenuItems,
@HairStyles$[18], L_MenuItems,
@HairStyles$[19], L_MenuItems,
@HairStyles$[20], 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;
setlook LOOK_HAIR_STYLE, @menu;
goto L_Main;
L_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,
"Goodbye", L_Done;
L_SameStyle:
mes "Your hair already has that style.";
goto L_Main;
L_Color:
if(!@colorOpts) set @HairColors$[getarraysize(@HairColors$)], "Surprise me";
if(!@colorOpts) set @HairColors$[getarraysize(@HairColors$)], "Nah, I'm fine";
if(!@colorOpts) set @colorOpts, 1;
menu
@HairColors$[0], L_MenuItems1,
@HairColors$[1], L_MenuItems1,
@HairColors$[2], L_MenuItems1,
@HairColors$[3], L_MenuItems1,
@HairColors$[4], L_MenuItems1,
@HairColors$[5], L_MenuItems1,
@HairColors$[6], L_MenuItems1,
@HairColors$[7], L_MenuItems1,
@HairColors$[8], L_MenuItems1,
@HairColors$[9], L_MenuItems1,
@HairColors$[10], L_MenuItems1,
@HairColors$[11], L_MenuItems1,
@HairColors$[12], L_MenuItems1,
@HairColors$[13], L_MenuItems1,
@HairColors$[14], L_MenuItems1,
@HairColors$[15], L_MenuItems1,
@HairColors$[16], L_MenuItems1;
L_MenuItems1:
if (@menu - 1 == @color)
goto L_SameColor;
if(@menu == (getarraysize(@HairColors$) - 1)) goto L_RandomColor;
if(@menu >= getarraysize(@HairColors$)) goto L_Done;
setlook LOOK_HAIR_COLOR, ((@menu - 1) + (15 * (Class - 1)));
goto L_Main;
L_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 already have that color.";
goto L_Main;
L_Done:
// cleanup
set @menu, 0;
set @style, 0;
set @color, 0;
cleararray @HairStyles$, "", getarraysize(@HairStyles$);
cleararray @HairColors$, "", getarraysize(@HairColors$);
set @hairOpts, 0;
set @colorOpts, 0;
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;
}