diff options
Diffstat (limited to 'npc/functions/barber.txt')
-rw-r--r-- | npc/functions/barber.txt | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/npc/functions/barber.txt b/npc/functions/barber.txt new file mode 100644 index 00000000..d5a330f2 --- /dev/null +++ b/npc/functions/barber.txt @@ -0,0 +1,220 @@ +// 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 + get_race(GETRACE_FULL, KaizeiTalpan), KaizeiTalpan, + get_race(GETRACE_FULL, ArgaesTalpan), ArgaesTalpan, + get_race(GETRACE_FULL, TonoriTalpan), TonoriTalpan, + get_race(GETRACE_FULL, CaveUkar), CaveUkar, + get_race(GETRACE_FULL, MountainUkar), MountainUkar, + get_race(GETRACE_FULL, SeaTritan), SeaTritan, + get_race(GETRACE_FULL, LakeTritan), LakeTritan, + rif(REBIRTH, get_race(GETRACE_FULL, LightRaijin)), LightRaijin, + rif(REBIRTH, get_race(GETRACE_FULL, DarkRaijin)), DarkRaijin, + rif(REBIRTH, get_race(GETRACE_FULL, FireKralog)), FireKralog, + rif(REBIRTH, get_race(GETRACE_FULL, FrostKralog)), FrostKralog; + + mes ""; + // Something went *terribly* wrong + if (@menuret >= LightRaijin && !REBIRTH) { + channelmes("#irc", "Illegal operation at BarberChangeRace, sysadmin help required."); + consolemes(CONSOLEMES_ERROR, "Account %d tried to change race to %d but rebirth is not set. Race not changed.", getcharid(3), @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; +} + |