summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--world/map/db/const.txt2
-rw-r--r--world/map/npc/013-2/notes.txt6
-rw-r--r--world/map/npc/functions/barber.txt156
-rw-r--r--world/map/npc/functions/headstyles.txt41
-rw-r--r--world/map/npc/items/mirror.txt20
-rw-r--r--world/map/npc/scripts.conf2
6 files changed, 149 insertions, 78 deletions
diff --git a/world/map/db/const.txt b/world/map/db/const.txt
index 52752c1d..90118b47 100644
--- a/world/map/db/const.txt
+++ b/world/map/db/const.txt
@@ -17,7 +17,7 @@ MaxSp 8 1
//StatusPoint 9 1
BaseLevel 11 1
//SkillPoint 12 1
-//Class 19 1
+Class 19 1
Zeny 20 1
Sex 21 1
//NextBaseExp 22 1
diff --git a/world/map/npc/013-2/notes.txt b/world/map/npc/013-2/notes.txt
index 9b9f46dc..c8b386bd 100644
--- a/world/map/npc/013-2/notes.txt
+++ b/world/map/npc/013-2/notes.txt
@@ -27,10 +27,8 @@
next;
mes "Your looks suddenly change...";
next;
- set @style, rand(20);
- set @color, rand(12);
- setlook LOOK_HAIR_STYLE, @style;
- setlook LOOK_HAIR_COLOR, @color + 1;
+ set @fixedMirror, 1;
+ callfunc "useMirror";
close;
}
diff --git a/world/map/npc/functions/barber.txt b/world/map/npc/functions/barber.txt
index 76b06dd7..0f9b4ffb 100644
--- a/world/map/npc/functions/barber.txt
+++ b/world/map/npc/functions/barber.txt
@@ -11,100 +11,124 @@
function|script|Barber|,
{
+ 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 >= 0 && @style < 20)
- set @style$, $@HairStyles$[@style];
- if (@color >= 0 && @color < 20)
- set @color$, $@HairColors$[@color];
+ set @style$, @HairStyles$[@style];
+ if (@color >= 0 && @color < 120)
+ 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$, "";
- goto L_Main;
-
-L_Main:
menu
"Change my style", L_Style,
"Change my color", L_Color,
"Nah, I'm fine", L_Done;
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
- "Bald", L_MenuItems,
- "Flat ponytail", L_MenuItems,
- "Bowl cut", L_MenuItems,
- "Combed back", L_MenuItems,
- "Emo", L_MenuItems,
- "Mohawk", L_MenuItems,
- "Pompadour", L_MenuItems,
- "Center parting/Short and slick", L_MenuItems,
- "Long and slick", L_MenuItems,
- "Short and curly", L_MenuItems,
- "Pigtails", L_MenuItems,
- "Long and curly", L_MenuItems,
- "Parted", L_MenuItems,
- "Perky ponytail", L_MenuItems,
- "Wave", L_MenuItems,
- "Mane", L_MenuItems,
- "Bun", L_MenuItems,
- "Shoulder Length Flick", L_MenuItems,
- "Fizzy", L_MenuItems,
- "Long and Clipped", L_MenuItems,
- "Surprise me", L_RandomStyle,
- "Nah, I'm fine", L_Done;
+ @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,
+ @HairStyles$[22], L_MenuItems,
+ @HairStyles$[23], L_MenuItems,
+ @HairStyles$[24], L_MenuItems,
+ @HairStyles$[25], L_MenuItems;
L_MenuItems:
if (@menu - 1 == @style)
goto L_SameStyle;
-
+ if(@menu == (getarraysize(@HairStyles$) - 1)) goto L_RandomStyle;
+ if(@menu == getarraysize(@HairStyles$)) goto L_Done;
setlook LOOK_HAIR_STYLE, @menu - 1;
- goto L_Done;
+ goto L_Main;
L_RandomStyle:
- setlook LOOK_HAIR_STYLE, rand(20);
- goto L_Done;
+ set @randomStyle, rand(0, (getarraysize(@HairStyles$) -4));
+ if(@randomStyle == @style) goto L_RandomStyle;
+ setlook LOOK_HAIR_STYLE, @randomStyle;
+ 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(@style == Class) goto L_SameColor; // first 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;
menu
- "Brunette", L_MenuItems1,
- "Green", L_MenuItems1,
- "Dark red", L_MenuItems1,
- "Light purple", L_MenuItems1,
- "Gray", L_MenuItems1,
- "Blonde", L_MenuItems1,
- "Teal", L_MenuItems1,
- "Light red", L_MenuItems1,
- "Blue", L_MenuItems1,
- "Dark purple", L_MenuItems1,
- "Black", L_MenuItems1,
- "Pink", L_MenuItems1,
- "Brown", L_MenuItems1,
- "Surprise me", L_RandomColor,
- "Nah, I'm fine", L_Done;
+ @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;
-
- setlook LOOK_HAIR_COLOR, @menu - 1;
- goto L_Done;
+ if(@menu == (getarraysize(@HairColors$) - 1)) goto L_RandomColor;
+ if(@menu == getarraysize(@HairColors$)) goto L_Done;
+ setlook LOOK_HAIR_COLOR, ((@menu - 1) + (15 * Class));
+ goto L_Main;
L_RandomColor:
- setlook LOOK_HAIR_COLOR, rand(13);
- goto L_Done;
+ set @randomColor, rand((15 * Class), ((getarraysize(@HairColors$) -4) + (15 * Class)));
+ if(@randomColor == @color) goto L_RandomColor;
+ setlook LOOK_HAIR_COLOR, @randomColor;
+ menu
+ "Surprise me once again", L_RandomColor,
+ "Go back", L_Main,
+ "Goodbye", L_Done;
L_SameColor:
- mes "Your hair is already that color.";
+ mes "You are either bald or your hair is already that color.";
goto L_Main;
L_Done:
@@ -112,23 +136,9 @@ L_Done:
set @menu, 0;
set @style, 0;
set @color, 0;
+ cleararray @HairStyles$, "", getarraysize(@HairStyles$);
+ cleararray @HairColors$, "", getarraysize(@HairColors$);
+ set @hairOpts, 0;
+ set @colorOpts, 0;
return;
}
-
--|script|#BarberConfig|-1,
-{
- end;
-
-OnInit:
- setarray $@HairStyles$,
- "Bald", "Flat ponytail", "Bowl cut", "Combed back", "Emo", "Mohawk",
- "Pompadour", "Center parting/Short and slick", "Long and slick",
- "Short and curly", "Pigtails", "Long and curly", "Parted",
- "Perky ponytail", "Wave", "Mane", "Bun", "Shoulder Length Flick",
- "Fizzy", "Long and Clipped";
- setarray $@HairColors$,
- "Brunette", "Green", "Dark red", "Light purple", "Gray", "Blonde",
- "Teal", "Light red", "Blue", "Dark purple", "Black", "Pink",
- "Brown";
- end;
-}
diff --git a/world/map/npc/functions/headstyles.txt b/world/map/npc/functions/headstyles.txt
new file mode 100644
index 00000000..989bef83
--- /dev/null
+++ b/world/map/npc/functions/headstyles.txt
@@ -0,0 +1,41 @@
+// headstyles config file
+// author: meko
+
+function|script|getHeadStyles|,
+{
+ set @HairStyles$, 0;
+ set @HairColors$, 0;
+ set @BaseClass, 0; // this is the default class
+ cleararray @HairStyles$, "", getarraysize(@HairStyles$);
+ cleararray @HairColors$, "", getarraysize(@HairColors$);
+ cleararray @ValidClasses, "", getarraysize(@ValidClasses);
+ setarray @ValidClasses, 0; // add new classes here
+ set @loop, 0;
+ goto L_LoopValid;
+
+ L_LoopValid:
+ if(@ValidClasses[@loop] == Class) goto L_ValidClass;
+ set @loop, (@loop + 1);
+ if(@loop >= getarraysize(@ValidClasses)) goto L_FixClass;
+ goto L_LoopValid;
+
+ L_FixClass:
+ set Class, @BaseClass;
+ goto L_ValidClass;
+
+ L_ValidClass:
+ if(Class == 0)
+ setarray @HairStyles$, // TALPONIAN (human)
+ "Bald", "Flat ponytail", "Bowl cut", "Combed back", "Emo", "Mohawk",
+ "Pompadour", "Center parting/Short and slick", "Long and slick",
+ "Short and curly", "Pigtails", "Long and curly", "Parted",
+ "Perky ponytail", "Wave", "Mane", "Bun", "Shoulder Length Flick",
+ "Fizzy", "Long and Clipped";
+ if(Class == 0)
+ setarray @HairColors$, // TALPONIAN (human)
+ "Brunette", "Green", "Dark red", "Light purple", "Gray", "Blonde",
+ "Teal", "Light red", "Blue", "Dark purple", "Black", "Pink",
+ "Brown";//, "(free slot)", "(free slot)";
+ // adding a new species is as simple as adding another if(Class == X) and adding the class to @ValidClasses
+ return;
+}
diff --git a/world/map/npc/items/mirror.txt b/world/map/npc/items/mirror.txt
new file mode 100644
index 00000000..fc2ca69b
--- /dev/null
+++ b/world/map/npc/items/mirror.txt
@@ -0,0 +1,20 @@
+function|script|useMirror|,
+{
+ callfunc "getHeadStyles";
+ goto L_Rand;
+
+ L_Rand:
+ set @style, rand(0,(getarraysize(@HairStyles$) -2));
+ set @color, rand((15 * Class),((getarraysize(@HairColors$) -2) + (15 * Class)));
+ if((getlook(LOOK_HAIR_STYLE) == @style) || (getlook(LOOK_HAIR_COLOR) == @color))
+ goto L_Rand;
+ goto L_Proceed;
+
+ L_Proceed:
+ if(@fixedMirror)
+ setlook LOOK_HAIR_STYLE, @style;
+ setlook LOOK_HAIR_COLOR, @color;
+ //if(!@fixedMirror) getitem "SilverMirror", 1; <== this can be used in the future to have a portable hair color changer (like scissors but for the color)
+ set @fixedMirror, 0;
+ return;
+}
diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf
index 90c11883..047d7dbb 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -22,6 +22,7 @@ npc: npc/functions/debug.txt
npc: npc/functions/lockpicking.txt
npc: npc/functions/default_npc_checks.txt
npc: npc/functions/undead_debug.txt
+npc: npc/functions/headstyles.txt
// Item Functions
npc: npc/items/magic_gm_top_hat.txt
@@ -35,6 +36,7 @@ npc: npc/items/warpTowels.txt
npc: npc/items/unequipcb.txt
npc: npc/items/launcher_ammo.txt
npc: npc/items/check_wand.txt
+npc: npc/items/mirror.txt
import: npc/_import.txt
// GM Events