View Single Post
  #1  
Old 11-23-2008, 08:39 AM
cbk1994 cbk1994 is offline
the fake one
cbk1994's Avatar
Join Date: Mar 2003
Location: San Francisco
Posts: 10,718
cbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond reputecbk1994 has a reputation beyond repute
Send a message via AIM to cbk1994
GS2 Character Creation

This script generates a GS2 script of a character, as opposed to the GS1 script produced by the level editor.

Copy and paste the code given as output into a level NPC, upload it to a server, and it will show the character as you set it.

Screenshots:








Say "/create char" to open the window. It should be quite simple to add a different way to open the window.


PHP Code:
//#CLIENTSIDE
function showInterface() {
  if (
CreateChar_Window != null) {
    
CreateChar_Window.destroy();
  }
  
  new 
GuiWindowCtrl("CreateChar_Window") {
    
profile = "GuiBlueWindowProfile";
    
    
width = 212;
    
height = 356;
    
    
x = GraalControl.width / 2 - (width / 2);
    
y = GraalControl.height / 2 - (height / 2);
    
    
canClose = visible = true;
    
canMaximize = canMinimize = canResize = false;
    
    
text = "Character Creation";
    
    new 
GuiShowImgCtrl("CreateChar_Doll") {
      
ani = "idle";
      
      
x = CreateChar_Window.width / 2 - 25;
      
y = 32;
      
      
hint = "Click to change direction.";
    }
    
    
temp.fields = {
                    {
"bodyimg", "Body"},
                    {
"headimg", "Head"},
                    {
"shield", "Shield"},
                    {
"attr[1]", "Hat"},
                    {
"ani", "Ani"}
                  };
    
    
temp.parts = getParts();
    
    
temp.colors = getColors();
    
    for (
temp.field : fields) {
      new 
GuiTextCtrl("CreateChar_FieldLabel_" @ field[1]) {
        
profile = "GuiBlueTextProfile";
        
        
x = 13;
        
y = 90 + 23 * fields.index(@ field);
        
        
text = field[1] @ ":";
      }
      new 
GuiTextEditCtrl("CreateChar_Field_" @ field[1]) {
        
profile = "GuiBlueTextEditProfile";
        
        
width = 150;
        
height = 20;
        
        
x = 50;
        
y = 90 + (height + 3) * fields.index(@ field);
        
        if (
field[0] == "attr[1]") {
          
text = CreateChar_Doll.actor.attr[1];
        } else {
          
text = CreateChar_Doll.actor.(@ field[0]);
        }
        
        if (
text == null) {
          
text = "";
        }
        
        
thiso.catchevent(name, "onAction", "onTextChanges");
        
        
this.part = field[0];
      }
    }
    for (
temp.part : parts) {
      new 
GuiTextCtrl("CreateChar_PartLabel_" @ part) {
        
profile = "GuiBlueTextProfile";
        
        
x = 13;
        
y = 206 + 23 * parts.index(@ part);
        
        
text = part @ ":";
      }
      new 
GuiPopUpMenuCtrl("CreateChar_Part_" @ part) {
        
profile = "GuiBluePopUpMenuProfile";
        
scrollprofile = "GuiBlueScrollProfile";
        
textprofile = "GuiBlueTextListProfile";
        
        
width = 150;
        
height = 20;
        
        
x = 50;
        
y = 206 + (height + 3) * parts.index(@ part);
        
        
clearRows();
        
        for (
temp.c : colors) {
          
addRow(0, c);
        }
        
        
setSelectedRow(CreateChar_Doll.actor.colors[parts.index(@ part)]);
        
        
thiso.catchevent(name, "onSelect", "onColorSelected");
        
        
this.p = part;
      }
    }
    
    new 
GuiButtonCtrl("CreateChar_Generate") {
      
profile = "GuiBlueButtonProfile";
      
      
width = 60;
      
height = 22;
      
      
x = CreateChar_Window.width / 2 - (width / 2);
      
y = 323;
      
      
text = "Generate";
    }    
  }
}
function 
CreateChar_Generate.onAction() {
  
temp.char = CreateChar_Doll;
  
// {dir, body, head, shield, hat, ani, colors}
  
temp.generateFrom = {char.actor.dir, char.actor.bodyimg, char.actor.headimg, char.actor.shield, char.actor.attr[1], char.ani, char.actor.colors};
  
  
generateCode(generateFrom);
  
  
CreateChar_Window.destroy();
}
function 
CreateChar_Doll.onMouseDown() {
  
CreateChar_Doll.actor.dir ++;
}
function 
onTextChanges(control, newtext) {
  
temp.part = control.part;
  
  if (
part == "attr[1]") {
    
CreateChar_Doll.actor.attr[1] = newtext;
    return;
  }
  if (
part == "ani") {
    
CreateChar_Doll.ani = newtext;
  }
  
  
CreateChar_Doll.actor.(@ part) = newtext;
}
function 
onColorSelected(control) {
  
temp.colors = getColors();
  
temp.parts = getParts();
  
  
temp.part = parts.index(@ (@control).p);
  
temp.c = colors.index(@ (@ control).getSelectedText());
  
  
CreateChar_Doll.actor.colors[part] = c;
}
function 
getParts() {
  return {
           
"Skin",
           
"Coat",
           
"Sleeves",
           
"Shoes",
           
"Belt"
         
};
}
function 
getColors() {
  return {
           
"White",
           
"Yellow",
           
"Orange",
           
"Pink",
           
"Red",
           
"Dark Red",
           
"Light Green",
           
"Green",
           
"Dark Green",
           
"Light Blue",
           
"Blue",
           
"Dark Blue",
           
"Brown",
           
"Cynober",
           
"Purple",
           
"Dark Purple",
           
"Light Gray",
           
"Gray",
           
"Black",
           
"Transparent"
         
};
}
function 
generateCode(from) {
  
// {dir, body, head, shield, hat, ani, colors}
  
  
temp.lines = {"/" @ "/ Made by" SPC player.nick, "/" @ "/#CLIENTSIDE", "function onCreated() {", "  showcharacter();"};
  
  
temp.vars = {
                
"bodyimg",
                
"headimg",
                
"shield",
                
"hat",
                
"ani"
              
};
  
  
lines.add("  this.dir = " @ from[0] @ ";");
  
  
temp.inc = 1;
  
  for (
temp.v : vars) {
    if (
from[inc] != null) {
      
lines.add("  this." @ v SPC "= \"" @ from[inc] @ "\";");
    }
    
inc ++;
  }
  
  for (
temp.c = 0; c < 5; c ++) {
    
lines.add("  this.colors[" @ c @ "] =" SPC from[6][c] @ ";");
  }
  
  
lines.add("}");
  
lines.add("function onPlayerEnters() {");
  
lines.add("  onCreated();");
  
lines.add("}");
  
  if (
CreateCharOutput_Window != null) {
    
CreateCharOutput_Window.destroy();
  }
  new 
GuiWindowCtrl("CreateCharOutput_Window") {
    
profile = "GuiBlueWindowProfile";
    
    
width = 212;
    
height = 356;
    
    
x = GraalControl.width / 2 - (width / 2);
    
y = GraalControl.height / 2 - (height / 2);
    
    
canClose = visible = true;
    
canMinimize = canMaximize = canResize = false;
    
    
text = "Create Character: Output";
    
    new 
GuiScrollCtrl("CreateCharOutput_Scroll") {
      
profile = "GuiBlueScrollProfile";
      
      
x = 10;
      
y = 28;
      
      
width = 192;
      
height = 319;
      
      
vScrollBar = "alwaysOn";
      
hScrollBar = "alwaysOff";
      
      new 
GuiMLTextCtrl("CreateCharOutput_Text") {
        
profile = "GuiBlueTextProfile";
        
        
width = 202;
        
        
x = 0;
        
y = 1;
        
        
text = null;
        
        for (
temp.line : lines) {
          if (
text == null) {
            
text = line;
          } else {
            
text @= "\n" @ line;
          }
        }
      }
    }
  }
}
function 
onPlayerChats() {
  if (
player.chat = "/create char") {
    
showInterface();
  }
} 
__________________
Reply With Quote