summaryrefslogblamecommitdiff
path: root/world/map/npc/functions/barber.txt
blob: 6bc97b757f7b618575acadf1b46f45c085486584 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11

                                                                      
 
                                                                          
                                                          
 
                                                                            



                                                               
                      
 

                                      



                             

                                         

                           

                                                


                                              
                                    
                                          


                                                                                           


                                   
                                     
                                       
                                
 




























                                                













                                    
        


                                                                                 
        




















                                      
                                      
 
            
                        
                         
                                                                     
                                                        
                                   
                

              




                                                                              



                                                
 
            
                                            

                
        


                                                                                  
        
















                                       
 
             

                            
                                                                     
                                                        
                                                                
                

              




                                                                                                                



                                                
 
            
                                       

                
       

                 

                  



                                                            
           
 




                                                                    
                         



                                        
                                          
































                                                 








                                             
 
// 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,
        "Change my species", L_Species,
        "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_Species:
    menu
        "Talpan", L_Species_next,
        "Tritan", L_Species_next,
        "Ifriton", L_Species_next,
        //"Gispaan", L_Species_next,
        //"Sparron", L_Species_next,
        "Nah, I'm fine", L_Done;

L_Species_next:
    set Class, @menu;
    callfunc "fixHeadStyles";
    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;
}