// Evol scripts.
// Authors:
// omatt
// Reid
// Travolta
// Jesusalva
// Description:
// Function for supporting barber NPC.
// BarberSayStyle({what})
// what: 1 = Style; 2 = Color; 3 = Style + Color in dialog
function script BarberSayStyle {
.@get_color = getlook(LOOK_HAIR_COLOR);
.@get_look = getlook(LOOK_HAIR);
.@style_name$ = $@hairstyle$[.@get_look];
.@color_name$ = $@haircolor$[.@get_color];
switch (getarg(0, 3))
{
case 1:
message strcharinfo(0), l("@@", .@style_name$);
break;
case 2:
message strcharinfo(0), l("@@", .@color_name$);
break;
case 3:
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("Your hairstyle is @@ and its color is @@.", .@style_name$, .@color_name$);
break;
}
return;
}
function script BarberChangeStyle {
do
{
.@hairsizearray = getarraysize($@hairstyle$);
.@get_look = getlook(LOOK_HAIR);
// Here .@i starts from 1 because hairstyle 0 doesn't exist.
for (.@i = 1; .@i < .@hairsizearray; .@i++)
{
.@menustr$ = .@menustr$
+ rif(.@get_look != .@i, l("" + $@hairstyle$[.@i] + ""))
+ ":";
}
.@menustr$ = .@menustr$ + l("I'm fine for now, thank you.");
.@idx = select(l("As you want!"),.@menustr$);
if (.@idx == .@i + 1) return; // last choice to quit dialog
switch (@menu)
{
case 1:
do
{
// here "- 1" because i don't use the 0 of array
.@rand_hair = rand(1,(.@hairsizearray - 1));
} while (.@rand_hair == getlook(LOOK_HAIR));
setlook LOOK_HAIR, .@rand_hair;
setlook LOOK_HAIR_COLOR, getlook(LOOK_HAIR_COLOR);
BarberSayStyle(1);
break;
default:
// and here "- 1" because the first choice is taken by the random
setlook LOOK_HAIR, (@menu - 1);
setlook LOOK_HAIR_COLOR, getlook(LOOK_HAIR_COLOR);
break;
}
.@menustr$ = "";
} while (1);
}
function script BarberChangeColor {
do
{
.@get_look = getlook(LOOK_HAIR_COLOR);
.@hairsizearray = getarraysize($@haircolor$);
for (.@i = 0; .@i < .@hairsizearray; .@i++)
{
.@menustr$ = .@menustr$
+ rif(.@get_look != .@i, l("" + $@haircolor$[.@i] + ""))
+ ":";
}
.@menustr$ = l("Surprise me!") + ":" + .@menustr$ + l("I'm fine for now, thank you.");
.@idx = select(.@menustr$);
if (.@idx == .@i + 2) return;
switch (@menu)
{
case 1:
do
{
.@rand_color = rand(0, .@hairsizearray);
} while (.@rand_color == getlook(LOOK_HAIR_COLOR));
setlook LOOK_HAIR_COLOR, .@rand_color;
BarberSayStyle(2);
break;
default:
setlook LOOK_HAIR_COLOR, (@menu - 2);
break;
}
.@menustr$ = "";
} while (1);
return;
}
function script BarberChangeBodyType {
mesn("Note");
mes(b(l("Changing your body type will send you back to the character selection screen.")));
next();
mes(l("Please select the desired body type:"));
menuint(
rif(BodyType == BODYTYPE_1, "► ") + l("Body type %i", 1), BODYTYPE_1,
rif(BodyType == BODYTYPE_2, "► ") + l("Body type %i", 2), BODYTYPE_2,
rif(BodyType == BODYTYPE_3, "► ") + l("Body type %i", 3), BODYTYPE_3);
if (BodyType == @menuret) {
return; // don't kick to char selection when not needed
}
// FIXME: when manaplus supports seamless changing for evol2, use a simple return;
closedialog();
close2();
BodyType = @menuret;
close;
}
// THIS FUNCTION SHOULD BE USED ONLY AT REBIRTH
// Unless current game development design changes!
function script BarberChangeRace {
mes l("What's your race?");
menuint
l("Talpan"), Human;
mes "";
// Not needed
if (Class == @menuret)
return;
// Change race and we're done
//Class = @menuret;
jobchange(@menuret); // STUPID idea, but imposed by Hercules
return;
}
// Jack of all trades
// Barber({intro=True})
function script Barber {
if (getarg(0, true)) {
mesn;
mesq l("Hello.");
next;
}
mesq l("What would you like me to do?");
next;
do
{
select
l("What is my current hairstyle and hair color?"),
l("I'd like to get a different style."),
l("Can you do something with my color?"),
l("How about changing my body type?"),
l("I'm fine for now, thank you.");
switch (@menu)
{
case 1:
BarberSayStyle();
break;
case 2:
BarberChangeStyle;
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("Enjoy your new style."),
l("Anything else?");
break;
case 3:
BarberChangeColor;
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("I hope you like this color."),
l("Anything else?");
break;
case 4:
BarberChangeBodyType();
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("You look fantastic."),
l("Anything else?");
break;
case 5:
speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
l("Feel free to come visit me another time.");
goodbye;
}
} while (true);
return;
}