// $Id: MobScriptEditor.java,v 1.10.2.1 1999/08/30 02:10:42 greear Exp $ // $Revision: 1.10.2.1 $ $Author: greear $ $Date: 1999/08/30 02:10:42 $ // //Hegemon Client Code: Java Client for ScryMUD Server Code //Copyright (C) 1998 Ben Greear // //This program is free software; you can redistribute it and/or //modify it under the terms of the GNU General Public License //as published by the Free Software Foundation; either version 2 //of the License, or (at your option) any later version. // //This program is distributed in the hope that it will be useful, //but WITHOUT ANY WARRANTY; without even the implied warranty of //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //GNU General Public License for more details. // //You should have received a copy of the GNU General Public License //along with this program; if not, write to the Free Software //Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // To contact the Author, Ben Greear: greear@cyberhighway.net, (preferred) // greearb@agcs.com // import java.awt.*; import java.awt.event.*; import java.io.*; // This allows for some quick editing of already-created objects, // mobs, and rooms. It auto-captures the info for easy editing... class MobScriptEditor extends Frame { LabeledChoice trigger; LabeledTextField discrim; LabeledTextField target; LabeledTextField actor; LabeledChoice precedence; LabeledTextArea script; LabeledTextField mob_num; LabeledChoice entity; LabeledChoice discrim_choice; LabeledTextField script_idx; String[] cmds = { "break", "close", "discuss", "donate", "drop", "eat", "enter", "examine", "exit", "fill", "flip", "follow", "get", "give", "grab", "group", "hit", "insert", "junk", "list", "lock", "look", "meditate", "nod", "open", "order", "pay", "pick", "prone", "pull", "push", "put", "remove", "rest", "say", "shake", "shoot", "sit", "slap", "sleep", "stand", "tell", "throw", "turn", "twist", "ungroup", "unlock", "wake", "wear", "wield", "yell" }; String[] discrims = { "FEM", "MALE", "NEUTER", "BARD", "CLERIC", "WARRIOR", "SAGE", "WIZARD", "THIEF", "ALCHEMIST", "HUMAN", "ANITRE", "DARKLING", "DRAGON", "DWARF", "OGRUE", "ELF", "UNDEAD", "ANIMAL", "MONSTER" }; HegemonManager hm; MSButtons oeb; public MobScriptEditor(HegemonManager h) { super("Script Editor"); hm = h; Log.instance().init("Constructing ScriptEditor.."); trigger = new LabeledChoice("Trigger Command"); entity = new LabeledChoice("Entity"); discrim = new LabeledTextField("Optional Discriminator (Special tags have syntax: 'only')", "NA", 20); target = new LabeledTextField("Target #", "", 10); actor = new LabeledTextField("Actor #", "", 10); precedence = new LabeledChoice("Precedence (0 == none)"); script = new LabeledTextArea("Script (double semicolons necessaary)", "", 10, 80); mob_num = new LabeledTextField("Entity # (Script Owner)", "0", 10); discrim_choice = new LabeledChoice("Special Descrim."); script_idx = new LabeledTextField("Script Index", "", 10); oeb = new MSButtons(this); entity.c.add("ROOM"); entity.c.add("MOB"); entity.c.add("OBJECT"); setEntity("MOB"); /* add triggers, will need to update this often. */ for (int i = 0; i < cmds.length; i++) { trigger.c.add(cmds[i]); } for (int i = 0; i<10; i++) { precedence.c.add(i + ""); } for (int i = 0; i<10; i++) { discrim_choice.c.add(discrims[i]); } discrim_choice.c.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if (discrim.getText().equals("NA")) { discrim.clear(); } discrim.append(discrim_choice.getText()); }}); int REM = GridBagConstraints.REMAINDER; GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout (gridbag); c.fill = GridBagConstraints.BOTH; c.gridwidth = 1; gridbag.setConstraints(entity, c); add(entity); gridbag.setConstraints(trigger, c); add(trigger); gridbag.setConstraints(precedence, c); add(precedence); gridbag.setConstraints(mob_num, c); add(mob_num); c.gridwidth = REM; gridbag.setConstraints(discrim_choice, c); add(discrim_choice); c.gridwidth = 1; gridbag.setConstraints(actor, c); add(actor); gridbag.setConstraints(target, c); add(target); gridbag.setConstraints(script_idx, c); add(script_idx); c.gridwidth = REM; gridbag.setConstraints(discrim, c); add(discrim); gridbag.setConstraints(script, c); add(script); gridbag.setConstraints(oeb, c); add(oeb); /* long_desc.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_CONTROL) { do_update(); //send stuff off to server }//if else super.keyPressed(e); }}); */ pack(); }//constructor public boolean isFrozen() { return oeb.isFrozen(); } public void do_close() { setVisible(false); } public void do_help() { if (!hm.IS_APPLET) hm.getHelpFrame().show("client" + System.getProperty("file.separator") + "script_editor"); else { Log.instance().dbg("Trying to show: client/script_editor"); hm.getHelpFrame().show("client/script_editor"); } }//doHelp public void setMobScriptDiscrim(String d) { if (isFrozen()) return; discrim.append(d); } public void setEntity(String d) { if (isFrozen()) return; entity.c.select(d); } public void setMobScriptData(String trig, String mnum, String actor_num, String target_num, String pd, String script_index) { if (isFrozen()) return; mob_num.append(mnum); trigger.c.select(trig); actor.append(actor_num); target.append(target_num); precedence.c.select(pd); script_idx.append(script_index); } public void appendScript(String str) { if (isFrozen()) return; script.append(str); } public void do_clear() { trigger.c.select(cmds[0]); discrim.clear(); oeb.setFrozen(false); target.clear(); actor.clear(); precedence.c.select("0"); script.clear(); mob_num.clear(); script_idx.clear(); }// /** Read the script from the MUD. Same as typing stat_script with * the appropriate arguments. */ public void do_refresh() { oeb.setFrozen(false); String cmd = null; if (entity.getText().equalsIgnoreCase("ROOM")) { cmd = "stat_room_script "; } else if (entity.getText().equalsIgnoreCase("MOB")) { cmd = "stat_script "; } else if (entity.getText().equalsIgnoreCase("OBJECT")) { cmd = "stat_obj_script "; } else { MessageDialog md = new MessageDialog("Refresh Error", "Was neither ROOM, OBJECT nor MOB entity", "red", "black"); return; } try { // first, the in_room_description hm.getSocketManager().write(cmd + mob_num.getText() + " " + script_idx.getText() + "\n"); }//try catch (Exception e) { MessageDialog md = new MessageDialog("Refresh Error", "Could not refresh script: " + e, "red", "black"); }//catch //do_clear(); }//doRefresh public void do_update() { oeb.setFrozen(false); String cmd = null; if (entity.getText().equalsIgnoreCase("ROOM")) { cmd = "add_room_script "; } else if (entity.getText().equalsIgnoreCase("MOB")) { cmd = "add_mob_script "; } else if (entity.getText().equalsIgnoreCase("OBJECT")) { cmd = "add_obj_script "; } else { MessageDialog md = new MessageDialog("Update Error", "Was neither ROOM, OBJECT nor MOB entity", "red", "black"); return; } try { // first, the in_room_description hm.getSocketManager().write(cmd + mob_num.getText() + " " + trigger.getText() + " " + actor.getText() + " '" + "DISCRIM_" + discrim.getText().trim() + "' " + target.getText() + " " + precedence.getText() + "\n"); // now the script itself hm.getSocketManager().write(script.getText() + "\n~\n"); }//try catch (Exception e) { MessageDialog md = new MessageDialog("Update Error", "Could not update script: " + e, "red", "black"); }//catch //do_clear(); }//do_update }//MobScriptEditor class MSButtons extends Panel { MobScriptEditor parent; Button freeze_b; public MSButtons(MobScriptEditor par) { super(); parent = par; freeze_b = new Button(" FREEZE "); freeze_b.setBackground(new Color(0, 255,0)); Button clear_b = new Button("Clear"); Button cancel_b = new Button("Cancel"); Button commit_b = new Button("Commit"); Button done_b = new Button("Done"); Button help_b = new Button("Help"); Button refresh_b = new Button("Refresh"); done_b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.do_close(); }}); freeze_b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (freeze_b.getLabel().equals(" FREEZE ")) { freeze_b.setLabel("UN-FREEZE"); freeze_b.setBackground(new Color(255,0,0)); } else { freeze_b.setLabel(" FREEZE "); freeze_b.setBackground(new Color(0,255,0)); } }}); clear_b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.do_clear(); }}); cancel_b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.do_clear(); parent.do_close(); }}); help_b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.do_help(); }}); commit_b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.do_update(); }}); refresh_b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.do_refresh(); }}); FlowLayout fl = new FlowLayout(); setLayout(fl); add(freeze_b); add(refresh_b); add(commit_b); add(cancel_b); add(clear_b); add(done_b); add(help_b); }//MSButtons constructor public boolean isFrozen() { return freeze_b.getLabel().equals("UN-FREEZE"); } public void setFrozen(boolean val) { if (val) { freeze_b.setLabel("UN-FREEZE"); freeze_b.setBackground(new Color(255,0,0)); } else { freeze_b.setLabel(" FREEZE "); freeze_b.setBackground(new Color(0,255,0)); } }//setFrozen }//MSButtons