// $Id: OLCObject.java,v 1.4 1999/06/05 23:29:12 greear Exp $ // $Revision: 1.4 $ $Author: greear $ $Date: 1999/06/05 23:29:12 $ // //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.*; class OLCObject extends Frame { ClientDisplay parent; HegemonManager hm; ObjPanel1 descriptions; ObjPanel2 obj_flags; ObjPanel3 extras_bag; ObjPanel4 spec_data; CardLayout cl; ObjCBListener cb_listener; public OLCObject(ClientDisplay par, HegemonManager h) { super("Create a new Object"); hm = h; parent = par; addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent e) { dispose(); }}); cb_listener = new ObjCBListener(this); setLayout (cl = new CardLayout()); descriptions = new ObjPanel1(this); add(descriptions, "Descriptions"); obj_flags = new ObjPanel2(this, (ItemListener)(cb_listener)); add(obj_flags, "Object Flags"); extras_bag = new ObjPanel3(this); add(extras_bag, "Bag, Other Data"); spec_data = new ObjPanel4(this); add(spec_data, "Special Procedures/Properties"); // Lets set up the enabled/disabled fields obj_flags.handleNoRest(obj_flags.getState(0)); obj_flags.handleNoWorn(obj_flags.getState(21)); obj_flags.handleNoWorn(obj_flags.getState(40)); obj_flags.handleContainer(false); extras_bag.handleContainer(false); spec_data.handleSpecProcs(false); pack(); }//constructor // These objects will be NumCheckBox objects public void handleDescFlagsCB(int cb_num, boolean state) { switch (cb_num) { case 0: //!rest, grey out rest of restrictions obj_flags.handleNoRest(state); break; case 21: // !worn, grey out worn flags obj_flags.handleNoWorn(state); break; case 40: // !weapon obj_flags.handleNoWeapon(state); break; case 51: //wand case 52: //potion case 53: //scroll spec_data.handleSpells(state); break; case 54: //container obj_flags.handleContainer(state); extras_bag.handleContainer(state || obj_flags.getState(59)); break; case 59: //canteen obj_flags.handleCanteen(state); extras_bag.handleContainer(state || obj_flags.getState(54)); break; case 63: //SPEC PROCS spec_data.handleSpecProcs(state); break; case 73: //vend machine break; }//switch }//handleCB void do_cancel() { dispose(); } void do_help() { hm.getHelpFrame().show("olc_object.bml"); } void do_submit() { MessageDialog md = new MessageDialog("Object Creation", "The object data is being sent to the mud server" + " now. Please check main console for" + " confirmation.", "green", "black"); parent.submitObj(this); } void goto_desc() { cl.show(this, "Descriptions"); } void goto_bag() { descriptions.getButtons().touchBag(); obj_flags.getButtons().touchBag(); extras_bag.getButtons().touchBag(); spec_data.getButtons().touchBag(); cl.show(this, "Bag, Other Data"); } void goto_flags() { descriptions.getButtons().touchFlags(); obj_flags.getButtons().touchFlags(); extras_bag.getButtons().touchFlags(); spec_data.getButtons().touchFlags(); cl.show(this, "Object Flags"); } void goto_spec() { descriptions.getButtons().touchSpec(); obj_flags.getButtons().touchSpec(); extras_bag.getButtons().touchSpec(); spec_data.getButtons().touchSpec(); cl.show(this, "Special Procedures/Properties"); } /*---------------------------------------------------------------------*/ /* Here lie the functions which the OlcStore querries in order to satisfy requests for OLC input from the server. */ /* from panel 1 */ public final String getObjNum() { return (descriptions.getObjNum()); } public final String getNames() { return (descriptions.getNames() + " ~"); } public final String getShortDesc() { return descriptions.getShortDesc(); } public final String getInRoomDesc() { return descriptions.getInRoomDesc(); } public final String getDesc() { return (descriptions.getLongDesc() + "\n~"); } /* from panel 2 */ public final String getObjFlags() { return obj_flags.getObjFlags() + " -1"; } /* from panel 3 */ public final String getStatEffects() { return extras_bag.getStatEffects() + " -1"; } public final String getInv() { return extras_bag.getInv() + " -1"; } public final String getExtras() { return extras_bag.getExtras(); } public final String getVbPrice() { return extras_bag.getVbPrice(); } public final String getBagFlags() { return extras_bag.getBagFlags() + " -1"; } public final String getBagData() { return extras_bag.getBagData(); } /* panel 4 */ // public final String getConstructData() { // return spec_data.getConstructData(); // } public final String getSpecDataFlags() { return spec_data.getSpecDataFlags() + " -1"; } public final String getSkinNum() { return spec_data.getSkinNum(); } public final String getCastsSpells() { return spec_data.getCastsSpells() + " -1"; } }//OLCObject class ObjPanel1 extends Panel { OLCObject parent; ObjPaneButtons opb; LabeledTextField obj_num; LabeledTextField names; LabeledTextField short_desc; LabeledTextField in_room_desc; LabeledTextArea long_desc; public ObjPanel1(OLCObject par) { super(); parent = par; GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout (gridbag); int REM = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.BOTH; c.gridwidth = 1; obj_num = new LabeledTextField("Object Number", "1", 20); gridbag.setConstraints(obj_num, c); add(obj_num); c.gridwidth = REM; names = new LabeledTextField("Object names:", "generic", 60); gridbag.setConstraints(names, c); add(names); short_desc = new LabeledTextField("Short Description:", "a generic object", 80); gridbag.setConstraints(short_desc, c); add(short_desc); in_room_desc = new LabeledTextField("In Room Desc:", "A generic object lies here.", 80); gridbag.setConstraints(in_room_desc, c); add(in_room_desc); long_desc = new LabeledTextArea("Long Description:", "A generic object looks kinda sad.", 6, 80); gridbag.setConstraints(long_desc, c); add(long_desc); opb = new ObjPaneButtons(parent); gridbag.setConstraints(opb, c); add(opb); }//constructor public final String getObjNum() { return obj_num.getText(); } public final String getNames() { return names.getText(); } public final String getShortDesc() { return short_desc.getText(); } public final String getInRoomDesc() { return in_room_desc.getText(); } public final String getLongDesc() { return long_desc.getText(); } public ObjPaneButtons getButtons() { return opb; } }//ObjPanel1 class ObjPanel2 extends Panel { OLCObject parent; ObjPaneButtons opb; LabeledCheckBoxGlob rest_flags; LabeledCheckBoxGlob worn_flags; LabeledCheckBoxGlob desc_flags; public final String getObjFlags() { return (rest_flags.getText() + " " + worn_flags.getText() + " " + desc_flags.getText()); } public ObjPanel2(OLCObject par, ItemListener cb_listener) { super(); parent = par; int REM = GridBagConstraints.REMAINDER; GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout (gridbag); c.gridwidth = REM; c.fill = GridBagConstraints.BOTH; rest_flags = new LabeledCheckBoxGlob("Restriction Flags", 4, 5); rest_flags.setListener(cb_listener); rest_flags.addBox(new NumCheckbox("!rest", true, 0)); rest_flags.addBox(new NumCheckbox("!evil", false, 1)); rest_flags.addBox(new NumCheckbox("!neutral", false, 2)); rest_flags.addBox(new NumCheckbox("!good", false, 3)); rest_flags.addBox(new NumCheckbox("!donate", false, 4)); rest_flags.addBox(new NumCheckbox("!drop", false, 5)); rest_flags.addBox(new NumCheckbox("!remove", false, 6)); rest_flags.addBox(new NumCheckbox("!mortal", false, 7)); rest_flags.addBox(new NumCheckbox("!immort", false, 8)); rest_flags.addBox(new NumCheckbox("!demi", false, 9)); rest_flags.addBox(new NumCheckbox("!warrior", false, 11)); rest_flags.addBox(new NumCheckbox("!sage", false, 12)); rest_flags.addBox(new NumCheckbox("!wizard", false, 13)); rest_flags.addBox(new NumCheckbox("!ranger", false, 14)); rest_flags.addBox(new NumCheckbox("!thief", false, 15)); rest_flags.addBox(new NumCheckbox("!alchemist", false, 16)); rest_flags.addBox(new NumCheckbox("!cleric", false, 17)); rest_flags.addBox(new NumCheckbox("!bard", false, 18)); rest_flags.addBox(new NumCheckbox("!mob", false, 19)); rest_flags.addBox(new NumCheckbox("!pc", false, 20)); gridbag.setConstraints(rest_flags, c); add(rest_flags); worn_flags = new LabeledCheckBoxGlob("Where Worn Flags", 4, 5); worn_flags.setListener(cb_listener); worn_flags.addBox(new NumCheckbox("!worn", true, 21)); worn_flags.addBox(new NumCheckbox("head", false, 22)); worn_flags.addBox(new NumCheckbox("neck", false, 23)); worn_flags.addBox(new NumCheckbox("neck", false, 24)); worn_flags.addBox(new NumCheckbox("arnd bdy", false, 25)); worn_flags.addBox(new NumCheckbox("arms", false, 26)); worn_flags.addBox(new NumCheckbox("wrist1", false, 27)); worn_flags.addBox(new NumCheckbox("wrist2", false, 28)); worn_flags.addBox(new NumCheckbox("hands", false, 29)); worn_flags.addBox(new NumCheckbox("wielded", false, 30)); worn_flags.addBox(new NumCheckbox("held", false, 31)); worn_flags.addBox(new NumCheckbox("light", false, 32)); worn_flags.addBox(new NumCheckbox("body", false, 33)); worn_flags.addBox(new NumCheckbox("belt", false, 34)); worn_flags.addBox(new NumCheckbox("legs", false, 35)); worn_flags.addBox(new NumCheckbox("feet", false, 36)); worn_flags.addBox(new NumCheckbox("finger1", false, 37)); worn_flags.addBox(new NumCheckbox("finger2", false, 38)); worn_flags.addBox(new NumCheckbox("shield", false, 39)); gridbag.setConstraints(worn_flags, c); add(worn_flags); desc_flags = new LabeledCheckBoxGlob("Description Flags", 8, 5); desc_flags.setListener(cb_listener); desc_flags.addBox(new NumCheckbox("!weapon", true, 40)); desc_flags.addBox(new NumCheckbox("slash", false, 41)); desc_flags.addBox(new NumCheckbox("smash", false, 42)); desc_flags.addBox(new NumCheckbox("pierce", false, 43)); desc_flags.addBox(new NumCheckbox("whip", false, 44)); desc_flags.addBox(new NumCheckbox("needs ammo", false, 45)); desc_flags.addBox(new NumCheckbox("dart thr.", false, 46)); desc_flags.addBox(new NumCheckbox("bow", false, 47)); desc_flags.addBox(new NumCheckbox("dart", false, 48)); desc_flags.addBox(new NumCheckbox("arrow", false, 49)); desc_flags.addBox(new NumCheckbox("junk", false, 50)); desc_flags.addBox(new NumCheckbox("wand", false, 51)); desc_flags.addBox(new NumCheckbox("potion", false, 52)); desc_flags.addBox(new NumCheckbox("scroll", false, 53)); desc_flags.addBox(new NumCheckbox("container", false, 54)); desc_flags.addBox(new NumCheckbox("coins", false, 55)); desc_flags.addBox(new NumCheckbox("armor", false, 56)); desc_flags.addBox(new NumCheckbox("weapon", false, 57)); desc_flags.addBox(new NumCheckbox("light src", false, 58)); desc_flags.addBox(new NumCheckbox("canteen", false, 59)); desc_flags.addBox(new NumCheckbox("liquid", false, 60)); desc_flags.addBox(new NumCheckbox("food", false, 61)); desc_flags.addBox(new NumCheckbox("boat", false, 62)); desc_flags.addBox(new NumCheckbox("SPEC PROCs", false, 63)); desc_flags.addBox(new NumCheckbox("toolbox", false, 64)); desc_flags.addBox(new NumCheckbox("cauldron", false, 65)); desc_flags.addBox(new NumCheckbox("pen", false, 66)); //desc_flags.addBox(new NumCheckbox("constr cmp", false, 67)); //desc_flags.addBox(new NumCheckbox("conct cmp", false, 68)); desc_flags.addBox(new NumCheckbox("parchment", false, 69)); //desc_flags.addBox(new NumCheckbox("vid scrn", false, 71)); desc_flags.addBox(new NumCheckbox("herb", false, 72)); desc_flags.addBox(new NumCheckbox("vend mach.", false, 73)); desc_flags.addBox(new NumCheckbox("bul. board", false, 74)); desc_flags.addBox(new NumCheckbox("butcherable", false, 75)); gridbag.setConstraints(desc_flags, c); add(desc_flags); opb = new ObjPaneButtons(parent); gridbag.setConstraints(opb, c); add(opb); // set up starting state info, disable some things... handleNoRest(true); handleNoWorn(true); handleNoWeapon(true); }//constructor public boolean getState(int box_num) { if ((box_num < 0) || (box_num > 75)) return false; if (box_num <= 20) return rest_flags.getState(box_num); else if (box_num <= 39) return worn_flags.getState(box_num); else return desc_flags.getState(box_num); }//getState public void handleContainer(boolean state) { if (!state) { desc_flags.setState(59, false); } }//handleContainer public void handleCanteen(boolean state) { if (state) desc_flags.setState(54, true); //if canteen, then container }//handleCanteen public void handleNoRest(boolean state) { if (state) { //!rest chosen rest_flags.setStateRange(1, 20, false); rest_flags.setEnableRange(1, 20, false); } else { rest_flags.setEnableRange(1, 20, true); } }//handleNoRest public void handleNoWorn(boolean state) { if (state) { //!worn chosen worn_flags.setStateRange(22, 39, false); worn_flags.setEnableRange(22, 39, false); } else { worn_flags.setEnableRange(22, 39, true); } }//handleNoWorn public void handleNoWeapon(boolean state) { if (state) { //!weapon chosen desc_flags.setStateRange(41, 49, false); desc_flags.setEnableRange(41, 49, false); } else { desc_flags.setEnableRange(41, 49, true); } }//handleNoWorn public ObjPaneButtons getButtons() { return opb; } }//ObjPanel2 class ObjPanel3 extends Panel { OLCObject parent; ObjPaneButtons opb; LabeledTextBoxGlob extras; LabeledCheckBoxGlob bag_flags; LabeledTextBoxGlob bag_data; LabeledTextField inv; LabeledTextField stat_effects; LabeledTextField vis_bit; LabeledTextField price; ///********************** Constructor *****************************/// public ObjPanel3(OLCObject par) { super(); parent = par; int REM = GridBagConstraints.REMAINDER; int REL = GridBagConstraints.RELATIVE; GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout (gridbag); c.gridwidth = REM; c.fill = GridBagConstraints.BOTH; extras = new LabeledTextBoxGlob("Miscellaneous Data.", 3, 3); extras.addBox(new NumTextBox("Charges/Light count", "0", 0)); extras.addBox(new NumTextBox("Recharges (wands)", "0", 1)); extras.addBox(new NumTextBox("Load Percentage", "50", 2)); //extras.addBox(new NumTextBox("Cur in game", "0", 3)); extras.addBox(new NumTextBox("Max in game", "50", 3)); extras.addBox(new NumTextBox("Weight", "5", 4)); extras.addBox(new NumTextBox("Dice sides", "0", 5)); extras.addBox(new NumTextBox("Dice count", "0", 6)); extras.addBox(new NumTextBox("Level", "0", 7)); gridbag.setConstraints(extras, c); add(extras); bag_flags = new LabeledCheckBoxGlob("Bag Flags", 2, 4); bag_flags.addBox(new NumCheckbox("closed", true, 2)); bag_flags.addBox(new NumCheckbox("locked", false, 3)); bag_flags.addBox(new NumCheckbox("pickable", false, 4)); bag_flags.addBox(new NumCheckbox("mag lockable", false, 5)); bag_flags.addBox(new NumCheckbox("mag locked", false, 6)); bag_flags.addBox(new NumCheckbox("destructable", false, 7)); bag_flags.addBox(new NumCheckbox("corpse", false, 8)); bag_flags.addBox(new NumCheckbox("!close", false, 9)); bag_flags.addBox(new NumCheckbox("consumes key", false, 17)); gridbag.setConstraints(bag_flags, c); add(bag_flags); bag_data = new LabeledTextBoxGlob("Bag Data.", 1, 4); bag_data.addBox(new NumTextBox("Key number", "0", 0)); bag_data.addBox(new NumTextBox("Max weight", "30", 1)); bag_data.addBox(new NumTextBox("Percent Weight", "100", 2)); bag_data.addBox(new NumTextBox("Time Till Disolve", "-1", 3)); gridbag.setConstraints(bag_data, c); add(bag_data); c.gridwidth = 1; inv = new LabeledTextField("Inventory", "", 40); gridbag.setConstraints(inv, c); add(inv); c.gridwidth = REM; stat_effects = new LabeledTextField("Stat Effects", "", 40); gridbag.setConstraints(stat_effects, c); add(stat_effects); c.gridwidth = 1; vis_bit = new LabeledTextField("Vis Bit", "0", 15); gridbag.setConstraints(vis_bit, c); add(vis_bit); c.gridwidth = REM; price = new LabeledTextField("Price", "500", 15); gridbag.setConstraints(price, c); add(price); opb = new ObjPaneButtons(parent); gridbag.setConstraints(opb, c); add(opb); }//Constructor public void handleContainer(boolean is_container) { if (is_container) { bag_flags.setEnabled(true); bag_data.setEnabled(true); inv.setEnabled(true); } else { bag_flags.setEnabled(false); bag_data.setEnabled(false); inv.setEnabled(false); } }//handleContainer public final String getInv() { return inv.getText(); } public final String getStatEffects() { return stat_effects.getText(); } public final String getExtras() { return extras.getText(); } public final String getVbPrice() { return (vis_bit.getText() + " " + price.getText()); } public final String getBagFlags() { return bag_flags.getText(); } public final String getBagData() { return bag_data.getText(); } public ObjPaneButtons getButtons() { return opb; } }//ObjPanel3 class ObjPanel4 extends Panel { OLCObject parent; ObjPaneButtons opb; LabeledCheckBoxGlob spec_data_flags; //LabeledTextBoxGlob construct_data; LabeledTextField skin_num; LabeledTextField casts_spells; public ObjPanel4(OLCObject par) { super(); parent = par; int REM = GridBagConstraints.REMAINDER; int REL = GridBagConstraints.RELATIVE; GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout (gridbag); c.gridwidth = REM; c.fill = GridBagConstraints.BOTH; spec_data_flags = new LabeledCheckBoxGlob("Special Proc Flags", 2, 3); spec_data_flags.addBox(new NumCheckbox("Teleport on Consumption", false, 0)); //spec_data_flags.addBox(new NumCheckbox("CONSTRUCT DATA", false, 1)); spec_data_flags.addBox(new NumCheckbox("Has a skin", false, 2)); spec_data_flags.addBox(new NumCheckbox("Poison on Consumpt.", false, 3)); spec_data_flags.addBox(new NumCheckbox("Casts Spells", false, 10)); gridbag.setConstraints(spec_data_flags, c); add(spec_data_flags); // construct_data = // new LabeledTextBoxGlob("Construct/Concoct Data. Enter the NUMBERS" // + "of the objects involved.", 2, 3); // construct_data.addBox(new NumTextBox("Resulting Object", "0", 0)); // construct_data.addBox(new NumTextBox("Component 1", "0", 1)); // construct_data.addBox(new NumTextBox("Comp 2", "0", 2)); // construct_data.addBox(new NumTextBox("Comp 3", "0", 3)); // construct_data.addBox(new NumTextBox("Comp 4", "0", 4)); // construct_data.addBox(new NumTextBox("Comp 5", "0", 5)); // gridbag.setConstraints(construct_data, c); // add(construct_data); c.gridwidth = 1; skin_num = new LabeledTextField("Skin number", "0", 8); gridbag.setConstraints(skin_num, c); add(skin_num); c.gridwidth = REM; casts_spells = new LabeledTextField("Casts these Spells <level spell_num> pairs", "", 50); gridbag.setConstraints(casts_spells, c); add(casts_spells); opb = new ObjPaneButtons(parent); gridbag.setConstraints(opb, c); add(opb); }//Constructor public void handleSpecProcs(boolean state) { spec_data_flags.setEnabled(state); //construct_data.setEnabled(state); casts_spells.setEnabled(state); } public void handleSpells(boolean state) { //this only goes one way..easy, not to misleading I think // Other things can cause this to be turned on is the reason. if (state) casts_spells.setEnabled(true); } public void handleSkin(boolean state) { skin_num.setEnabled(state); } public final String getSpecDataFlags() { return spec_data_flags.getText(); } // public final String getConstructData() { // return construct_data.getText(); // } public final String getSkinNum() { return skin_num.getText(); } public final String getCastsSpells() { return casts_spells.getText(); } public ObjPaneButtons getButtons() { return opb; } }//ObjPanel4 class ObjPaneButtons extends Panel { OLCObject parent; Button desc; Button bag; Button flags; Button spec; public ObjPaneButtons(OLCObject par) { super(); parent = par; Button cancel = new Button("Cancel"); Button submit = new Button("Submit"); desc = new Button("Descriptions"); bag = new Button("Bag/Misc Data"); flags = new Button("Object Flags"); spec = new Button("Spec Procs"); Button help = new Button("Help"); desc.setBackground(new Color(0, 255, 0)); bag.setBackground(new Color(255, 0, 0)); flags.setBackground(new Color(255, 0, 0)); spec.setBackground(new Color(255, 0, 0)); FlowLayout fl = new FlowLayout(); setLayout(fl); desc.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.goto_desc(); }}); help.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.do_help(); }}); bag.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.goto_bag(); }}); flags.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.goto_flags(); }}); spec.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.goto_spec(); }}); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.do_cancel(); }}); submit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { parent.do_submit(); }}); add(submit); add(cancel); add(new Button("#######")); add(desc); add(flags); add(bag); add(spec); add(help); }//constructor public void touchFlags() { flags.setBackground(new Color(0, 255, 0)); } public void touchBag() { bag.setBackground(new Color(0, 255, 0)); } public void touchSpec() { spec.setBackground(new Color(0, 255, 0)); } }//OButtonPanel /** This class will listen to all check boxes and tell the OLCObject class about them. */ class ObjCBListener implements ItemListener { OLCObject par; public ObjCBListener(OLCObject ob) { super(); par = ob; } public void itemStateChanged(ItemEvent e) { NumCheckbox ncb = (NumCheckbox)(e.getSource()); par.handleDescFlagsCB(ncb.getNum(), ncb.getState()); } }//ObjCBListener