diff options
Diffstat (limited to 'world/map/npc/functions')
-rw-r--r-- | world/map/npc/functions/announcements.txt | 5 | ||||
-rw-r--r-- | world/map/npc/functions/barber.txt | 128 | ||||
-rw-r--r-- | world/map/npc/functions/game_rules.txt | 1 | ||||
-rw-r--r-- | world/map/npc/functions/global_event_handler.txt | 2 | ||||
-rw-r--r-- | world/map/npc/functions/gm_island.txt | 33 | ||||
-rw-r--r-- | world/map/npc/functions/headstyles.txt | 125 |
6 files changed, 226 insertions, 68 deletions
diff --git a/world/map/npc/functions/announcements.txt b/world/map/npc/functions/announcements.txt index dd56eadc..0a62e144 100644 --- a/world/map/npc/functions/announcements.txt +++ b/world/map/npc/functions/announcements.txt @@ -178,9 +178,8 @@ function|script|getBroadcast goto L_ReturningPlayer; L_NewPlayer: - // todo: show game rules on login (in another PR) - // ... does not look like it work.. the `menu` - // builtin behaves weirdly when on login + // todo: show game rules on login + // FIXME: needs to spawn a 32767 puppet goto L_Return; L_ReturningPlayer: diff --git a/world/map/npc/functions/barber.txt b/world/map/npc/functions/barber.txt index 2c940c33..54732418 100644 --- a/world/map/npc/functions/barber.txt +++ b/world/map/npc/functions/barber.txt @@ -4,13 +4,15 @@ // 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 12 colors (0-11) and 20 styles (0-19) +// 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; @@ -21,20 +23,49 @@ L_Main: set @color$, "Unknown"; if (@style >= 1 && @style <= 20) set @style$, @HairStyles$[(@style - 1)]; - if (Class > 1) - set @color, (@color - (15 * Class)); + 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]; - if (@color == 127) - set @color$, "Shocked White"; 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"; @@ -61,24 +92,22 @@ L_Style: @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; + @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; + if(@menu >= getarraysize(@HairStyles$)) goto L_Done; setlook LOOK_HAIR_STYLE, @menu; goto L_Main; L_RandomStyle: - set @randomStyle, rand(1, (getarraysize(@HairStyles$) -4)); - if(@randomStyle == @style) goto L_RandomStyle; - setlook LOOK_HAIR_STYLE, @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, @@ -89,7 +118,6 @@ L_SameStyle: goto L_Main; L_Color: - if(@style == @BaldStyle) goto L_SameColor; // last 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; @@ -116,24 +144,26 @@ L_MenuItems1: if (@menu - 1 == @color) goto L_SameColor; if(@menu == (getarraysize(@HairColors$) - 1)) goto L_RandomColor; - if(@menu == getarraysize(@HairColors$)) goto L_Done; + if(@menu >= getarraysize(@HairColors$)) goto L_Done; setlook LOOK_HAIR_COLOR, ((@menu - 1) + (15 * (Class - 1))); goto L_Main; L_RandomColor: - set @randomColor, rand((15 * (Class - 1)), ((getarraysize(@HairColors$) -4) + (15 * (Class - 1)))); - if(@randomColor == @color) goto L_RandomColor; - setlook LOOK_HAIR_COLOR, @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 are either bald or your hair is already that color."; + mes "You already have that color."; goto L_Main; -S_Janitor: +L_Done: // cleanup set @menu, 0; set @style, 0; @@ -144,7 +174,57 @@ S_Janitor: set @colorOpts, 0; return; -L_Done: - callsub S_Janitor; - 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; } diff --git a/world/map/npc/functions/game_rules.txt b/world/map/npc/functions/game_rules.txt index cb72dfec..e2b9df81 100644 --- a/world/map/npc/functions/game_rules.txt +++ b/world/map/npc/functions/game_rules.txt @@ -2,7 +2,6 @@ function|script|GameRules { - mes "[Game Rules]"; mes "Please select a language:"; menu diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt index 7d380b0c..d5c20b06 100644 --- a/world/map/npc/functions/global_event_handler.txt +++ b/world/map/npc/functions/global_event_handler.txt @@ -9,7 +9,7 @@ OnPCLoginEvent: set @login_event, 1; - callfunc "getHeadStyles"; // converts class, color and hair + callfunc "fixHeadStyles"; // convert headstyles callfunc "ClearVariables"; // removes / converts old variables callfunc "DisplayMOTD"; // send the motd to the client, if enabled callfunc "getBroadcast"; // get the scheduled broadcast, if any diff --git a/world/map/npc/functions/gm_island.txt b/world/map/npc/functions/gm_island.txt index 89c0790a..1bd7b5e9 100644 --- a/world/map/npc/functions/gm_island.txt +++ b/world/map/npc/functions/gm_island.txt @@ -16,11 +16,12 @@ function|script|GmWarp } function|script|GmDebug { - mes "[Gm Debug]"; + mes "[GM Debug]"; mes "What do you want to do?"; menu - "Start Event.", L_GmStart, - "Stop Event.", L_GmStop; + "Open Event Portals.", L_GmStart, + "Close Event Portals.", L_GmStop, + "Disguise.", L_Disguise; L_GmStart: enablenpc "Gm Event#1"; @@ -33,6 +34,32 @@ L_GmStop: disablenpc "Gm Event#2"; disablenpc "Gm Event#3"; return; + +L_Disguise: + npcaction 9; + mes "[GM Debug - Disguise]"; + mes "The Disguise function allows GMs to disguise themselves as mobs or npcs."; + mes "---"; + mes "Mob IDs: [@@https://www.themanaworld.org/index.php/Monster_Reference|Monster Reference@@]"; + mes "You can either logout or use id ##B0##b to reset."; + mes "---"; + mes "Please input the mob ID:"; + input @disguise_id; + if (@disguise_id < 1000 || @disguise_id > 32767) + goto L_ResetClass; + mes "Your disguise has been changed."; + if (Class <= 5) + set @old_class, Class; + set Class, @disguise_id; + mes ""; + mes "For technical reasons, you are not able to see your own disguise, but other players will see it."; + return; + +L_ResetClass: + mes "Your appearance has been reset."; + set Class, if_then_else(@old_class, @old_class, 1); + callfunc "fixHeadStyles"; + return; } 001-1,49,68,0|script|Gm Event#1|368,0,0 { diff --git a/world/map/npc/functions/headstyles.txt b/world/map/npc/functions/headstyles.txt index 9645d339..1098c80c 100644 --- a/world/map/npc/functions/headstyles.txt +++ b/world/map/npc/functions/headstyles.txt @@ -1,46 +1,99 @@ // headstyles config file // author: meko +function|script|fixHeadStyles +{ + callfunc "getHeadStyles"; + if ((TUT_var < 1 || QL_BEGIN < 1) && StatusPoint < 1) + goto L_RandomHair; // on first login + set @style, getlook(LOOK_HAIR_STYLE); // FIXME: this needs to be a param in the future + set @color, getlook(LOOK_HAIR_COLOR); // FIXME: this needs to be a param in the future + if (@style < 1 || @style > getarraysize(@HairStyles$)) // leftover from previous attempt at classes + setlook LOOK_HAIR_STYLE, 1; // FIXME: this needs to be a param in the future + if (@color >= 123 && @color <= HC_WHITE) // convert shock white + set @color, (HC_WHITE - Class) + 1; + if (@color < 105 && ((@color - (15 * (Class - 1))) < 0 || @color > ((15 * (Class - 1)) + (getarraysize(@HairColors$) - 1)))) + set @color, 15 * (Class - 1); // it is possible to style color 0 but not style 0 since style is treated as an item + setlook LOOK_HAIR_COLOR, @color; // FIXME: this needs to be a param in the future + return; + +L_RandomHair: + resetstatus; // <= important! gives 48 stat points + setlook LOOK_HAIR_STYLE, rand(1, getarraysize(@HairStyles$)); + setlook LOOK_HAIR_COLOR, rand((15 * (Class - 1)),((15 * (Class - 1)) + (getarraysize(@HairColors$) - 1))); + return; +} + function|script|getHeadStyles { - set @HairStyles$, 0; - set @HairColors$, 0; - set @BaseClass, 1; // this is the default class cleararray @HairStyles$, "", getarraysize(@HairStyles$); cleararray @HairColors$, "", getarraysize(@HairColors$); - cleararray @ValidClasses, "", getarraysize(@ValidClasses); - setarray @ValidClasses, 1; // add new classes here - set @loop, 0; - goto L_LoopValid; - -L_Janitor: - set @BaldStyle, getarraysize(@HairStyles$); // we set it as a variable because we use it with the barber - if(getlook(LOOK_HAIR_STYLE) < 1) setlook LOOK_HAIR_STYLE, @BaldStyle; // the last head of any race has no hair/fins/whatever + + if (Class == 2) goto L_Tritan; + elif (Class == 3) goto L_Ifriton; + elif (Class == 4) goto L_Gispaan; + elif (Class == 5) goto L_Sparron; + else set Class, 1; // we can not style custom classes, so reset when using the barber + goto L_Talpan; + +L_Talpan: + setarray @HairStyles$[0], + "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$[0], + "Brunette", "Green", "Dark red", "Light purple", "Gray", "Blonde", + "Teal", "Light red", "Blue", "Dark purple", "Black", "Pink", + "Brown";//, "(free slot)", "(free slot)"; return; -L_LoopValid: // here we fix non-existant classes - 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 == 1) - setarray @HairStyles$, // TALPONIAN (human) - "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", "Bald"; - if(Class == 1) - 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 - goto L_Janitor; +L_Tritan: + setarray @HairStyles$[0], + "1", "2", "3", "4", "5", + "6", "7", "8", "9", "10", + "11", "12", "13", "14", "15", + "16", "17", "18", "19", "20"; + setarray @HairColors$[0], + "1", "2", "3", "4", "5", + "6", "7", "8", "9", "10", + "11", "12", "13", "14", "15"; + return; + +L_Gispaan: + setarray @HairStyles$[0], + "1", "2", "3", "4", "5", + "6", "7", "8", "9", "10", + "11", "12", "13", "14", "15", + "16", "17", "18", "19", "20"; + setarray @HairColors$[0], + "1", "2", "3", "4", "5", + "6", "7", "8", "9", "10", + "11", "12", "13", "14", "15"; + return; + +L_Sparron: + setarray @HairStyles$[0], + "1", "2", "3", "4", "5", + "6", "7", "8", "9", "10", + "11", "12", "13", "14", "15", + "16", "17", "18", "19", "20"; + setarray @HairColors$[0], + "1", "2", "3", "4", "5", + "6", "7", "8", "9", "10", + "11", "12", "13", "14", "15"; + return; + +L_Ifriton: + setarray @HairStyles$[0], + "1", "2", "3", "4", "5", + "6", "7", "8", "9", "10", + "11", "12", "13", "14", "15", + "16", "17", "18", "19", "20"; + setarray @HairColors$[0], + "1", "2", "3", "4", "5", + "6", "7", "8", "9", "10", + "11", "12", "13", "14", "15"; + return; } |