diff --git a/sigIRCv2.jar b/sigIRCv2.jar index f7d9e1b..c0913eb 100644 Binary files a/sigIRCv2.jar and b/sigIRCv2.jar differ diff --git a/src/sig/modules/RabiRace/MemoryData.java b/src/sig/modules/RabiRace/MemoryData.java index 754b18f..0e5e618 100644 --- a/src/sig/modules/RabiRace/MemoryData.java +++ b/src/sig/modules/RabiRace/MemoryData.java @@ -35,7 +35,7 @@ public enum MemoryData { EXPLODE_SHOT(MemoryOffset.EXPLODE_SHOT,"Explode Shot","explode_shot.png",true), AIR_DASH(MemoryOffset.AIR_DASH,"Air Dash","air_dash.png",true), BUNNY_STRIKE(MemoryOffset.BUNNY_STRIKE,"Bunny Strike","bunny_strike.png",true), - STRANGE_BOX(MemoryOffset.STRANGE_BOX,"Strage Box","strange_box.png",true), + STRANGE_BOX(MemoryOffset.STRANGE_BOX,"Strange Box","strange_box.png",true), WALL_JUMP(MemoryOffset.WALL_JUMP,"Wall Jump","wall_jump.png",true), SPIKE_BARRIER(MemoryOffset.SPIKE_BARRIER,"Spike Barrier","spike_barrier.png",true), BUNNY_AMULET(MemoryOffset.BUNNY_AMULET,"Bunny Amulet","bunny_amulet.png",true), diff --git a/src/sig/modules/RabiRace/Profile.java b/src/sig/modules/RabiRace/Profile.java index 859d0db..9a8abac 100644 --- a/src/sig/modules/RabiRace/Profile.java +++ b/src/sig/modules/RabiRace/Profile.java @@ -284,7 +284,7 @@ public class Profile { return Avatar.getAvatarFromID(randomnumb); } - public Image getStatText(int w) { + public Image getStatText(int w, Session session) { BufferedImage tmp = new BufferedImage(400,175,BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = tmp.createGraphics(); @@ -346,7 +346,7 @@ public class Profile { return diffstring; } - public Image getStatPanel(int w) { + public Image getStatPanel(int w, Session session) { //DrawUtils.drawTextFont(g, sigIRC.panel.userFont, parent.position.getX(), parent.position.getY()+26, Color.BLACK, "Values: "+readIntFromMemory(MemoryOffset.DLC_ITEM1)+","+readIntFromMemory(MemoryOffset.DLC_ITEM2)+","+readIntFromMemory(MemoryOffset.DLC_ITEM3)+","+readIntFromMemory(MemoryOffset.DLC_ITEM4)); BufferedImage tmp = new BufferedImage(400,175,BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = tmp.createGraphics(); @@ -355,11 +355,38 @@ public class Profile { int spacing=width/5; int shiftyval = 0; double iconsize = 1; - if (rainbowEggCount<=5) { - Image img = RabiRaceModule.image_map.get("easter_egg.png"); - for (int i=0;i<5;i++) { - Color col = (rainbowEggCount>i)?RabiRaceModule.rainbowcycler.getCycleColor():new Color(0,0,0,192); - DrawUtils.drawImage(g2, img, (int)(border+i*spacing-img.getWidth(sigIRC.panel)/4),(int)(36),col,sigIRC.panel); + final int icon_size = 24; + + int gamemode = -1; + if (RabiRaceModule.mySession!=null) { + gamemode = RabiRaceModule.mySession.gamemode; + } + + if (gamemode!=-1) { + switch (gamemode) { + case 0:{ //Egg Hunt. + spacing = width/session.eggCount; + Image img = RabiRaceModule.image_map.get("easter_egg.png"); + for (int i=0;ii)?RabiRaceModule.rainbowcycler.getCycleColor():new Color(0,0,0,192); + DrawUtils.drawImage(g2, img, (int)(border+i*spacing-img.getWidth(sigIRC.panel)/4),(int)(36),col,sigIRC.panel); + } + }break; + case 1:{ //Item Hunt. + spacing = width/session.itemHuntData.length; + for (int i=0;i=1) || + (badges.containsKey(item) && + badges.get(item)>=1)) { + //DrawUtils.drawImage(g2, item.getImage(), (int)(border+i*spacing-item.getImage().getWidth(sigIRC.panel)/4),(int)(36),col,sigIRC.panel); + g2.drawImage(item.getImage(), (int)(border+i*spacing),(int)(36+16), icon_size*2, icon_size*2, sigIRC.panel); + } else { + DrawUtils.drawImageScaled(g2, item.getImage(), (int)(border+i*spacing),(int)(36+16),icon_size*2, icon_size*2,new Color(0,0,0,192),sigIRC.panel); + } + } + } } } else { shiftyval = -RabiRaceModule.image_map.get("easter_egg.png").getWidth(sigIRC.panel)/2; @@ -374,7 +401,6 @@ public class Profile { } */ int size = key_items.size(); - final int icon_size = 24; int count = 0; try { for (MemoryData data : key_items.keySet()) { @@ -487,7 +513,16 @@ public class Profile { return new Point(x,y); } - public static void DrawMultiPanel(Graphics g, int x, int y, int w, List players) { + public static void DrawMultiPanel(Graphics g, int x, int y, int w, Session session) { + List players = session.getPlayers(); + if (RabiRaceModule.mySession!=null && session.id==RabiRaceModule.mySession.id) { + for (int i=0;i players = new ArrayList(); @@ -65,6 +68,17 @@ public class Session { if (split.length>=8) { difficulty = Float.parseFloat(split[i++]); } + if (split.length>=9) { + gamemode = Integer.parseInt(split[i++]); + switch (gamemode) { + case 0:{ + eggCount = Integer.parseInt(split[i++]); + }break; + case 1:{ + itemHuntData = split[i++].split(";"); + }break; + } + } } public int getID() { diff --git a/src/sig/modules/RabiRace/SessionCreateWindow.java b/src/sig/modules/RabiRace/SessionCreateWindow.java index e00b761..483f273 100644 --- a/src/sig/modules/RabiRace/SessionCreateWindow.java +++ b/src/sig/modules/RabiRace/SessionCreateWindow.java @@ -1,7 +1,9 @@ package sig.modules.RabiRace; import java.awt.Color; +import java.awt.Component; import java.awt.Dimension; +import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -13,14 +15,17 @@ import java.util.List; import javax.swing.Box; import javax.swing.BoxLayout; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; +import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; +import javax.swing.ListCellRenderer; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; @@ -37,8 +42,10 @@ public class SessionCreateWindow extends JFrame{ JPasswordField pass = new JPasswordField(); JComboBox gametype = new JComboBox(); NumberValidationField eggcount = new NumberValidationField(); - List> itemHunt = new ArrayList>(); + public List> itemHunt = new ArrayList>(); JButton create = new JButton("Create"); + public JPanel itempropertiespanel = new JPanel(); + public int currentHuntBox = 0; public SessionCreateWindow() { this.setTitle("Create Rabi-Race Session"); @@ -50,7 +57,6 @@ public class SessionCreateWindow extends JFrame{ JPanel difficultypanel = new JPanel(); JPanel modepanel = new JPanel(); JPanel eggpropertiespanel = new JPanel(); - JPanel itempropertiespanel = new JPanel(); JPanel[] panel_list = new JPanel[]{ namepanel,playerpanel,passwordpanel,difficultypanel,modepanel,eggpropertiespanel,itempropertiespanel @@ -98,9 +104,8 @@ public class SessionCreateWindow extends JFrame{ gametype.addItem("Egg Mode"); gametype.addItem("Item Mode"); - itempropertiespanel.setVisible(false); eggpropertiespanel.setLayout(new BoxLayout(eggpropertiespanel,BoxLayout.LINE_AXIS)); - eggpropertiespanel.setVisible(false); + itempropertiespanel.setVisible(false); JLabel eggLabel = new JLabel("Egg Count: "); eggcount.setText("5"); eggcount.setPreferredSize(new Dimension(60,24)); @@ -118,17 +123,32 @@ public class SessionCreateWindow extends JFrame{ case "Egg Mode":{ eggpropertiespanel.setVisible(true); itempropertiespanel.setVisible(false); + for (ItemDisplayBox box : itemHunt) { + box.myPanel.setVisible(false); + box.set=false; + } + RabiRaceModule.module.createwindow.setSize(400, 240); }break; case "Item Mode":{ eggpropertiespanel.setVisible(false); itempropertiespanel.setVisible(true); + currentHuntBox = 0; + for (ItemDisplayBox box : itemHunt) { + box.setSelectedIndex(0); + } + itemHunt.get(0).myPanel.setVisible(true); }break; } } }); - - //itempropertiespanel. + /*itempropertiespanel.setLayout(new BoxLayout(itempropertiespanel,BoxLayout.LINE_AXIS)); + ItemDisplayBox itemBox = new ItemDisplayBox(this); + itemHunt.add(itemBox); + JLabel itemLabel = new JLabel("Item 1: "); + + itempropertiespanel.add(itemLabel); + itempropertiespanel.add(itemBox);*/ modepanel.add(modeLabel); modepanel.add(gametype); @@ -162,10 +182,22 @@ public class SessionCreateWindow extends JFrame{ JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Your max player count needs to be between 2-48!", "Error!", JOptionPane.WARNING_MESSAGE); return; } + if (((String)gametype.getSelectedItem()).equalsIgnoreCase("Egg Mode") && !TextUtils.isInteger(eggcount.getText(), 10)) { + JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Your egg count is invalid!", "Error!", JOptionPane.WARNING_MESSAGE); + return; + } + if (((String)gametype.getSelectedItem()).equalsIgnoreCase("Egg Mode") && (Integer.parseInt(eggcount.getText())>48 || Integer.parseInt(eggcount.getText())<2)) { + JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Your egg count needs to be between 2-48!", "Error!", JOptionPane.WARNING_MESSAGE); + return; + } if (!TextUtils.isNumeric(difficulty.getText()) && difficulty.getText().length()>0) { JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Your difficulty value is invalid! (A number between 0.00 and 10.00)", "Error!", JOptionPane.WARNING_MESSAGE); return; } + if (GetModeData()==null) { + JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Mode Input is completely wrong! THIS SHOULD NOT BE HAPPENING! Please let the developer know about this.", "Error!", JOptionPane.WARNING_MESSAGE); + return; + } String hashpass = ""; if (String.copyValueOf(pass.getPassword()).length()>0) { hashpass = SessionListWindow.GetHashedPassword(String.copyValueOf(pass.getPassword())); @@ -174,7 +206,8 @@ public class SessionCreateWindow extends JFrame{ sessionText = sessionText.replaceAll(" ", "%20"); File file = new File(sigIRC.BASEDIR+"sigIRC/tmp.data"); try { - org.apache.commons.io.FileUtils.copyURLToFile(new URL("http://45.33.13.215/rabirace/send.php?key=sessioncreate&name="+sessionText+"&players="+maxplayers.getText()+"&password="+((hashpass.length()>0)?hashpass:"none")+"&difficulty="+((difficulty.getText().length()>0)?difficulty.getText():"-1")),file); + //System.out.println("Write to "+"http://45.33.13.215/rabirace/send.php?key=sessioncreate&name="+sessionText+"&players="+maxplayers.getText()+"&password="+((hashpass.length()>0)?hashpass:"none")+"&difficulty="+((difficulty.getText().length()>0)?difficulty.getText():"-1")+"&mode="+GetModeIndex()+"&extradata="+GetModeData()); + org.apache.commons.io.FileUtils.copyURLToFile(new URL("http://45.33.13.215/rabirace/send.php?key=sessioncreate&name="+sessionText+"&players="+maxplayers.getText()+"&password="+((hashpass.length()>0)?hashpass:"none")+"&difficulty="+((difficulty.getText().length()>0)?difficulty.getText():"-1")+"&mode="+GetModeIndex()+"&extradata="+GetModeData()),file); //org.apache.commons.io.FileUtils.copyURLToFile(new URL("http://45.33.13.215/rabirace/send.php?key=sessioncreate&name="+session_name.getText()+"&players="+maxplayers.getText()+"&password="+((hashpass.length()>0)?hashpass:"none")),file); String[] contents = FileUtils.readFromFile(sigIRC.BASEDIR+"sigIRC/tmp.data"); int sessionID=-1; @@ -195,6 +228,44 @@ public class SessionCreateWindow extends JFrame{ e.printStackTrace(); } } + + private String GetModeIndex() { + switch (((String)gametype.getSelectedItem())) { + case "Egg Mode":{ + return "0"; + } + case "Item Mode":{ + return "1"; + } + default:{ + return null; + } + } + } + + private String GetModeData() { + switch (((String)gametype.getSelectedItem())) { + case "Egg Mode":{ + return eggcount.getText(); + } + case "Item Mode":{ + StringBuilder sb = new StringBuilder(""); + for (ItemDisplayBox box : itemHunt) { + if (box.getSelectedIndex()!=0 && box.getSelectedItem() instanceof MemoryData) { + if (sb.length()!=0) { + sb.append(";"); + } + sb.append(((MemoryData)box.getSelectedItem()).name()); + } + } + return sb.toString(); + } + default:{ + JOptionPane.showMessageDialog(RabiRaceModule.createwindow, "Mode Index is completely wrong! THIS SHOULD NOT BE HAPPENING! Please let the developer know about this.", "Error!", JOptionPane.WARNING_MESSAGE); + return null; + } + } + } }); //create.add(Box.createRigidArea(new Dimension(24,24))); @@ -209,8 +280,15 @@ public class SessionCreateWindow extends JFrame{ container.add(playerpanel); container.add(passwordpanel); container.add(difficultypanel); - //container.add(modepanel); - //container.add(eggpropertiespanel); + container.add(modepanel); + container.add(eggpropertiespanel); + container.add(itempropertiespanel); + for (int i=0;i<10;i++) { + ItemDisplayBox box = new ItemDisplayBox(this); + box.myPanel.setVisible(false); + container.add(box.myPanel); + itemHunt.add(box); + } container.add(create); container.add(Box.createRigidArea(new Dimension(24,24))); @@ -337,4 +415,68 @@ public class SessionCreateWindow extends JFrame{ return false; } } + + class ItemDisplayBox extends JComboBox{ + ItemDisplayBox box; + SessionCreateWindow parent; + JLabel mylabel = new JLabel("Item "+(itemHunt.size()+1)+": "); + JPanel myPanel = new JPanel(); + boolean set=false; + public ItemDisplayBox(SessionCreateWindow frame) { + box = this; + myPanel.setLayout(new BoxLayout(myPanel,BoxLayout.LINE_AXIS)); + myPanel.setSize(400, 24); + myPanel.setMinimumSize(new Dimension(400, 24)); + myPanel.add(Box.createRigidArea(new Dimension(24,24))); + myPanel.add(mylabel); + myPanel.add(this); + this.parent=frame; + this.addItem((E)""); + for (MemoryData md : MemoryData.values()) { + this.addItem((E)md); + } + this.setRenderer(new ItemLabelRenderer()); + this.setMaximumRowCount(6); + this.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent ev) { + if (box.getSelectedItem() instanceof MemoryData && !box.set) { + box.set=true; + if (currentHuntBox<9) { + parent.itemHunt.get(++parent.currentHuntBox).myPanel.setVisible(true); + parent.setSize(parent.getWidth(), parent.getHeight()+24); + } + } + } + }); + } + } + + class ItemLabelRenderer extends JLabel implements ListCellRenderer{ + + public ItemLabelRenderer() { + setOpaque(true); + } + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + if (value instanceof MemoryData) { + this.setIcon(new ImageIcon(((MemoryData)value).getImage().getScaledInstance(24, 24, Image.SCALE_DEFAULT))); + setText(((MemoryData)value).getDisplayName()); + } else { + this.setIcon(new ImageIcon(RabiRaceModule.UNKNOWN_ITEM)); + setText(""); + } + if (isSelected) { + setBackground(list.getSelectionBackground()); + setForeground(list.getSelectionForeground()); + } else { + setBackground(list.getBackground()); + setForeground(list.getForeground()); + } + setFont(sigIRC.panel.rabiRibiMoneyDisplayFont); + setIconTextGap(4); + return this; + } + } } diff --git a/src/sig/modules/RabiRace/SessionListWindow.java b/src/sig/modules/RabiRace/SessionListWindow.java index 57a22d9..8f82534 100644 --- a/src/sig/modules/RabiRace/SessionListWindow.java +++ b/src/sig/modules/RabiRace/SessionListWindow.java @@ -54,8 +54,8 @@ public class SessionListWindow extends JFrame{ previewPanel.setWindow(this); scrolllist.setViewportView(sessionlist); - scrolllist.setPreferredSize(new Dimension(272,150)); - scrolllist.setMinimumSize(new Dimension(272,150)); + scrolllist.setPreferredSize(new Dimension(320,150)); + scrolllist.setMinimumSize(new Dimension(320,150)); scrolllist.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); JPanel sessionPanel = new JPanel(); @@ -64,8 +64,8 @@ public class SessionListWindow extends JFrame{ sessionlist.setVisibleRowCount(6); sessionPanel.setLayout(new BoxLayout(sessionPanel,BoxLayout.PAGE_AXIS)); - sessionPanel.setSize(130,200); - sessionPanel.setMinimumSize(new Dimension(130,200)); + sessionPanel.setSize(160,200); + sessionPanel.setMinimumSize(new Dimension(160,200)); sessionPanel.add(scrolllist); sessionPanel.add(Box.createRigidArea(new Dimension(10,10))); @@ -234,7 +234,7 @@ public class SessionListWindow extends JFrame{ //Get the players from that session. Session s = RabiRaceModule.module.session_listing.data.get(selectedID); - Profile.DrawMultiPanel(g,0,0,400,s.players); + Profile.DrawMultiPanel(g,0,0,400,s); } } } diff --git a/src/sig/modules/RabiRaceModule.java b/src/sig/modules/RabiRaceModule.java index f3234d4..1c337a6 100644 --- a/src/sig/modules/RabiRaceModule.java +++ b/src/sig/modules/RabiRaceModule.java @@ -59,6 +59,7 @@ public class RabiRaceModule extends Module{ long rabiRibiMemOffset = 0; public HANDLE rabiribiProcess = null; public static HashMap image_map = new HashMap(); + public static Image UNKNOWN_ITEM; public static ColorCycler rainbowcycler = new ColorCycler(new Color(255,0,0,96),16); public Profile myProfile = new Profile(this,false); public static RabiRaceModule module; @@ -155,6 +156,12 @@ public class RabiRaceModule extends Module{ } } + try { + UNKNOWN_ITEM = ImageIO.read(new File(sigIRC.BASEDIR+"sigIRC/rabi-ribi/unknown.png")); + } catch (IOException e) { + e.printStackTrace(); + } + //trimeadProfile.username = "trimead"; join_button = new JoinButton(new Rectangle(2,(int)(position.getHeight()-18),120,18),"Join Session (0)",this); @@ -432,7 +439,7 @@ public class RabiRaceModule extends Module{ DrawUtils.drawTextFont(g, sigIRC.panel.userFont, position.getX(), position.getY()+26, Color.BLACK, "Rabi-Ribi not found! Please start it."); } else { //myProfile.draw(g); - Image panel = myProfile.getStatPanel((int)position.getWidth()); + Image panel = myProfile.getStatPanel((int)position.getWidth(),mySession); if (sigIRC.panel.lastMouseX>=position.getX() && sigIRC.panel.lastMouseX<=position.getX()+(int)(position.getWidth()/400)*50 && @@ -448,7 +455,7 @@ public class RabiRaceModule extends Module{ } g.drawImage(panel, (int)position.getX(), (int)position.getY(), sigIRC.panel); - g.drawImage(myProfile.getStatText((int)position.getWidth()), (int)position.getX(), (int)position.getY(), sigIRC.panel); + g.drawImage(myProfile.getStatText((int)position.getWidth(),mySession), (int)position.getX(), (int)position.getY(), sigIRC.panel); //Profile.DrawMultiPanel(g, (int)(position.getX()), (int)(position.getY())+panel.getHeight(sigIRC.panel), (int)position.getWidth(), testing); if (mySession!=null) { @@ -459,7 +466,7 @@ public class RabiRaceModule extends Module{ //System.out.println("Found unique player "+p); } } - Profile.DrawMultiPanel(g, (int)(position.getX()), (int)(position.getY())+panel.getHeight(sigIRC.panel), (int)position.getWidth(), sessionPlayers); + Profile.DrawMultiPanel(g, (int)(position.getX()), (int)(position.getY())+panel.getHeight(sigIRC.panel), (int)position.getWidth(), mySession); } if (firstCheck) { diff --git a/src/sig/sigIRC.java b/src/sig/sigIRC.java index ec928e7..e1c388f 100644 --- a/src/sig/sigIRC.java +++ b/src/sig/sigIRC.java @@ -294,6 +294,7 @@ public class sigIRC{ manager = new FileManager("sigIRC/logs/",true); manager.verifyAndFetchFileFromServer(); manager = new FileManager("sigIRC/sounds/",true); manager.verifyAndFetchFileFromServer(); manager = new FileManager("sigIRC/rabi-ribi/",true); manager.verifyAndFetchFileFromServer(); + manager = new FileManager("sigIRC/rabi-ribi/unknown.png"); manager.verifyAndFetchFileFromServer(); manager = new FileManager("sigIRC/rabi-ribi/characters",true); manager.verifyAndFetchFileFromServer(); manager = new FileManager("sigIRC/rabi-ribi/items",true); manager.verifyAndFetchFileFromServer(); //manager = new FileManager("sigIRC/sounds/Glaceon_cry.wav"); manager.verifyAndFetchFileFromServer();