diff --git a/sigIRCv2.jar b/sigIRCv2.jar index 09c1f81..da1c58d 100644 Binary files a/sigIRCv2.jar and b/sigIRCv2.jar differ diff --git a/src/sig/Module.java b/src/sig/Module.java index f8a84ca..abfd447 100644 --- a/src/sig/Module.java +++ b/src/sig/Module.java @@ -18,7 +18,7 @@ import sig.utils.DrawUtils; import sig.utils.TextUtils; public class Module { - protected Rectangle2D position; + public Rectangle2D position; protected boolean enabled; protected String name; public static BufferedImage IMG_DRAGBAR; diff --git a/src/sig/MyPanel.java b/src/sig/MyPanel.java index 7a1732a..a3c885a 100644 --- a/src/sig/MyPanel.java +++ b/src/sig/MyPanel.java @@ -40,6 +40,7 @@ public class MyPanel extends JPanel implements MouseListener, ActionListener, Mo final public static Font userFont = new Font(sigIRC.usernameFont,0,16); final public static Font smallFont = new Font(sigIRC.touhoumotherConsoleFont,0,12); final public static Font rabiRibiMoneyDisplayFont = new Font("CP Font",0,16); + final public static Font rabiRibiTinyDisplayFont = new Font("CP Font",0,12); public int lastMouseX = 0; public int lastMouseY = 0; diff --git a/src/sig/ScrollingText.java b/src/sig/ScrollingText.java index 3d82889..7c3f048 100644 --- a/src/sig/ScrollingText.java +++ b/src/sig/ScrollingText.java @@ -121,9 +121,9 @@ public class ScrollingText { FileUtils.logToFile(message, sigIRC.BASEDIR+"sigIRC/logs/log_"+(cal.get(Calendar.MONTH)+1)+"_"+cal.get(Calendar.DAY_OF_MONTH)+"_"+cal.get(Calendar.YEAR)+".txt",true); } - private Color GetUserNameColor(String username) { + public static Color GetUserNameColor(String username) { Random r = new Random(); - r.setSeed(username.hashCode()); + r.setSeed(username.toLowerCase().hashCode()); int randomnumb = r.nextInt(3); Color col; switch (randomnumb) { diff --git a/src/sig/modules/Controller/ClickableButton.java b/src/sig/modules/Controller/ClickableButton.java index 0fad1b7..a0dfdcb 100644 --- a/src/sig/modules/Controller/ClickableButton.java +++ b/src/sig/modules/Controller/ClickableButton.java @@ -5,6 +5,7 @@ import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.MouseEvent; +import sig.Module; import sig.sigIRC; import sig.modules.ControllerModule; import sig.utils.DrawUtils; @@ -13,9 +14,9 @@ import sig.utils.TextUtils; public class ClickableButton { protected int x,y,width,height; protected String label; - protected ControllerModule module; + protected Module module; - public ClickableButton(Rectangle position, String button_label, ControllerModule parent_module) { + public ClickableButton(Rectangle position, String button_label, Module parent_module) { this.x = (int)position.getX(); this.y = (int)position.getY(); this.width = (int)position.getWidth(); @@ -29,8 +30,12 @@ public class ClickableButton { //System.out.println("Click performed!"); }*/ } + + public void setButtonLabel(String text) { + this.label = text; + } - protected boolean mouseInsideBounds(MouseEvent ev) { + public boolean mouseInsideBounds(MouseEvent ev) { return ev.getX()>=module.getPosition().getX()+x && ev.getX()<=module.getPosition().getX()+x+width && ev.getY()>=module.getPosition().getY()+y && ev.getY()<=module.getPosition().getY()+y+height; } diff --git a/src/sig/modules/RabiRace/CreateButton.java b/src/sig/modules/RabiRace/CreateButton.java new file mode 100644 index 0000000..2c2d686 --- /dev/null +++ b/src/sig/modules/RabiRace/CreateButton.java @@ -0,0 +1,18 @@ +package sig.modules.RabiRace; + +import java.awt.Rectangle; +import java.awt.event.MouseEvent; + +import sig.Module; +import sig.modules.Controller.ClickableButton; + +public class CreateButton extends ClickableButton{ + + public CreateButton(Rectangle position, String button_label, Module parent_module) { + super(position, button_label, parent_module); + } + + public void onClickEvent(MouseEvent ev) { + + } +} diff --git a/src/sig/modules/RabiRace/JoinButton.java b/src/sig/modules/RabiRace/JoinButton.java new file mode 100644 index 0000000..7a9ec13 --- /dev/null +++ b/src/sig/modules/RabiRace/JoinButton.java @@ -0,0 +1,19 @@ +package sig.modules.RabiRace; + +import java.awt.Rectangle; +import java.awt.event.MouseEvent; + +import sig.Module; +import sig.modules.RabiRaceModule; +import sig.modules.Controller.ClickableButton; + +public class JoinButton extends ClickableButton{ + + public JoinButton(Rectangle position, String button_label, Module parent_module) { + super(position, button_label, parent_module); + } + + public void onClickEvent(MouseEvent ev) { + RabiRaceModule.module.window.setVisible(true); + } +} diff --git a/src/sig/modules/RabiRace/MemoryData.java b/src/sig/modules/RabiRace/MemoryData.java index 839ac08..754b18f 100644 --- a/src/sig/modules/RabiRace/MemoryData.java +++ b/src/sig/modules/RabiRace/MemoryData.java @@ -47,6 +47,8 @@ public enum MemoryData { DLC_ITEM4(MemoryOffset.DLC_ITEM4,"","",true),*/ BUNNY_CLOVER(MemoryOffset.BUNNY_CLOVER,"Bunny Clover","bunny_clover.png",true), FAIRYS_FLUTE(MemoryOffset.FAIRYS_FLUTE,"Fairy's Flute","fairy_s_flute.png",true), + BUNNY_MEMORIES(MemoryOffset.BUNNY_MEMORIES,"Bunny Memories","bunny_memories.png",true), + WIND_BLESSING(MemoryOffset.WIND_BLESSING,"Wind Blessing","wind_blessing.png",true), BADGE_HEALTH_PLUS(MemoryOffset.BADGE_HEALTH_PLUS,"Health Plus","health_plus.png",false), BADGE_HEALTH_SURGE(MemoryOffset.BADGE_HEALTH_SURGE,"Health Surge","health_surge.png",false), BADGE_MANA_PLUS(MemoryOffset.BADGE_MANA_PLUS,"Mana Plus","mana_plus.png",false), diff --git a/src/sig/modules/RabiRace/Player.java b/src/sig/modules/RabiRace/Player.java new file mode 100644 index 0000000..7ebbcb5 --- /dev/null +++ b/src/sig/modules/RabiRace/Player.java @@ -0,0 +1,5 @@ +package sig.modules.RabiRace; + +public class Player { + +} diff --git a/src/sig/modules/RabiRace/Profile.java b/src/sig/modules/RabiRace/Profile.java index a38f5dd..7638e7e 100644 --- a/src/sig/modules/RabiRace/Profile.java +++ b/src/sig/modules/RabiRace/Profile.java @@ -1,10 +1,34 @@ package sig.modules.RabiRace; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Point; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.net.MalformedURLException; +import java.net.URL; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.ConcurrentModificationException; import java.util.HashMap; +import java.util.List; +import sig.ScrollingText; +import sig.sigIRC; import sig.modules.RabiRaceModule; +import sig.utils.DrawUtils; +import sig.utils.FileUtils; +import sig.utils.TextUtils; public class Profile { + public String username = sigIRC.nickname.toLowerCase(); + public String displayName = sigIRC.nickname.toLowerCase(); + public int avatar = 0; public int playtime = 0; public int healthUps = 0; public int attackUps = 0; @@ -17,9 +41,12 @@ public class Profile { public int loop = 0; public float itempct = 0; public float mappct = 0; - public HashMap key_items = new HashMap(); - public HashMap badges = new HashMap(); + public HashMap key_items = new HashMap(); + public HashMap badges = new HashMap(); + public List updates = new ArrayList(); RabiRaceModule parent; + public long lastWebUpdate = System.currentTimeMillis(); + DecimalFormat df = new DecimalFormat("00.0"); public Profile(RabiRaceModule module) { this.parent = module; @@ -28,19 +55,277 @@ public class Profile { public void updateClientValues() { for (MemoryData md : RabiRaceModule.key_items_list) { //System.out.println("Checking "+md.getDisplayName()); - if (parent.readIntFromMemory(md.mem)!=0) { - key_items.put(md.name, md); + int val = parent.readIntFromMemory(md.mem); + if (val!=0) { + key_items.put(md, val); //System.out.println("Obtained "+md.getDisplayName()); } else { - key_items.remove(md.name); + key_items.remove(md); } } for (MemoryData md : RabiRaceModule.badges_list) { - if (parent.readIntFromMemory(md.mem)!=0) { - badges.put(md.name, md); + int val = parent.readIntFromMemory(md.mem); + if (val!=0) { + badges.put(md, val); //System.out.println("Obtained "+md.getDisplayName()); } else { - badges.remove(md.name); + badges.remove(md); + } + } + } + + public void uploadProfile() { + if (sigIRC.authenticated) { + File file = new File(sigIRC.BASEDIR+"tmp"); + try { + org.apache.commons.io.FileUtils.copyURLToFile(new URL("http://45.33.13.215/rabirace/send.php?key=playerdata&name="+sigIRC.nickname.toLowerCase()+"&data="+getDataString()),file); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public void downloadProfile() { + if (sigIRC.authenticated) { + File file = new File(sigIRC.BASEDIR+"tmp"); + try { + org.apache.commons.io.FileUtils.copyURLToFile(new URL("http://45.33.13.215/rabirace/send.php?key=retrievedata&name="+username.toLowerCase()),file); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + String[] data = FileUtils.readFromFile(sigIRC.BASEDIR+"tmp"); + System.out.println(Arrays.toString(data)); + if (data.length>=18) { + int i=0; + displayName = data[i++]; + avatar = Integer.parseInt(data[i++]); + playtime = Integer.parseInt(data[i++]); + healthUps = Integer.parseInt(data[i++]); + manaUps = Integer.parseInt(data[i++]); + regenUps = Integer.parseInt(data[i++]); + packUps = Integer.parseInt(data[i++]); + attackUps = Integer.parseInt(data[i++]); + rainbowEggCount = Integer.parseInt(data[i++]); + isPaused = Boolean.parseBoolean(data[i++]); + difficulty = Integer.parseInt(data[i++]); + loop = Integer.parseInt(data[i++]); + itempct = Float.parseFloat(data[i++]); + mappct = Float.parseFloat(data[i++]); + i+=2; + String nextval = data[i++]; + if (!nextval.equalsIgnoreCase("BADGES:")) { + do { + String[] parse = nextval.split(";"); + key_items.put(MemoryData.valueOf(parse[0]), Integer.parseInt(parse[1])); + System.out.println("Added "+Arrays.toString(parse)); + nextval = data[i++]; + } + while (!nextval.equalsIgnoreCase("BADGES:")); + } + nextval = data[i++]; + if (!nextval.equalsIgnoreCase("UPDATES:")) { + do { + String[] parse = nextval.split(";"); + badges.put(MemoryData.valueOf(parse[0]), Integer.parseInt(parse[1])); + System.out.println("Added "+Arrays.toString(parse)); + nextval = data[i++]; + } + while (!nextval.equalsIgnoreCase("UPDATES:")); + } + lastWebUpdate = System.currentTimeMillis(); + } + } + } + + private String getDataString() { + StringBuilder sb = new StringBuilder(); + appendData(sigIRC.nickname,sb); + appendData(avatar,sb); + appendData(playtime,sb); + appendData(healthUps,sb); + appendData(manaUps,sb); + appendData(regenUps,sb); + appendData(packUps,sb); + appendData(attackUps,sb); + appendData(rainbowEggCount,sb); + appendData(isPaused,sb); + appendData(difficulty,sb); + appendData(loop,sb); + appendData(itempct,sb); + appendData(mappct,sb); + appendData(0,sb); + appendData("KEYITEMS:",sb); + for (MemoryData data : key_items.keySet()) { + Integer val = key_items.get(data); + appendData(data.name()+";"+val,sb); + } + appendData("BADGES:",sb); + for (MemoryData data : badges.keySet()) { + Integer val = badges.get(data); + appendData(data.name()+";"+val,sb); + } + appendData("UPDATES:",sb); + return sb.toString(); + } + + private void appendData(Object data, StringBuilder str) { + if (str.length()!=0) { + str.append(","); + } + str.append(data); + } + + public Image getStatText(int w) { + BufferedImage tmp = new BufferedImage(400,175,BufferedImage.TYPE_INT_ARGB); + Graphics2D g2 = tmp.createGraphics(); + + g2.setColor(Color.BLACK); + g2.fillRect(1, 1, 32, 32); + g2.setColor(ScrollingText.GetUserNameColor(displayName)); + DrawUtils.drawOutlineText(g2, sigIRC.panel.rabiRibiMoneyDisplayFont, 36, 26, 1, g2.getColor(), Color.BLACK, displayName); + String text = TextUtils.convertSecondsToTimeFormat(playtime/60); + if (isPaused) { + g2.setColor(new Color(128,96,0)); + } else { + g2.setColor(Color.BLACK); + } + DrawUtils.drawOutlineText(g2, sigIRC.panel.rabiRibiMoneyDisplayFont, (int)(tmp.getWidth() - TextUtils.calculateStringBoundsFont(text, sigIRC.panel.rabiRibiMoneyDisplayFont).getWidth()) - 2, 16, 1, g2.getColor(), Color.GRAY, text); + text = "Map "+df.format(mappct)+"% Item "+df.format(itempct)+"%"; + //DrawUtils.drawOutlineText(g2, sigIRC.panel.rabiRibiMoneyDisplayFont, (int)(parent.position.getWidth() - TextUtils.calculateStringBoundsFont(text, sigIRC.panel.rabiRibiMoneyDisplayFont).getWidth()) - 2, 16, 1, g2.getColor(), Color.GRAY, text); + DrawUtils.drawCenteredOutlineText(g2, sigIRC.panel.rabiRibiTinyDisplayFont, (int)(tmp.getWidth()*0.6), 50, 2, Color.WHITE, Color.BLACK, text); + + return tmp.getScaledInstance(w, -1, Image.SCALE_AREA_AVERAGING); + } + + public Image getStatPanel(int w) { + //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(); + final int border=20; + final int width=(int)(tmp.getWidth()-border*2); + final int spacing=width/5; + for (int i=0;i<5;i++) { + Image img = RabiRaceModule.image_map.get("easter_egg.png"); + 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); + } + int size = key_items.size(); + final int icon_size = 24; + int count = 0; + try { + for (MemoryData data : key_items.keySet()) { + if (key_items.get(data)<0) { + Image img = data.getImage().getScaledInstance(icon_size, icon_size, Image.SCALE_DEFAULT); + if (size*icon_size players) { + int cols = calculateMultiPanelView(players.size()).x; + int rows = calculateMultiPanelView(players.size()).y; + + int xx = 0; + int yy = 0; + + for (Profile p : players) { + Image panel = p.getStatPanel(w); + Image panel2 = p.getStatText(w); + g.drawImage(panel,(int)(x+xx*panel.getWidth(sigIRC.panel)/((rows+cols)/2d)),(int)(y+yy*panel.getHeight(sigIRC.panel)/((rows+cols)/2d)),(int)(panel.getWidth(sigIRC.panel)/((rows+cols)/2d)),(int)(panel.getHeight(sigIRC.panel)/((rows+cols)/2d)),sigIRC.panel); + g.drawImage(panel2,(int)(x+xx*panel2.getWidth(sigIRC.panel)/((rows+cols)/2d)),(int)(y+yy*panel2.getHeight(sigIRC.panel)/((rows+cols)/2d)),(int)(panel2.getWidth(sigIRC.panel)/((rows+cols)/2d)),(int)(panel2.getHeight(sigIRC.panel)/((rows+cols)/2d)),sigIRC.panel); + if (xx+1 players = new ArrayList(); + + public Session(String dataString) { + String[] split = dataString.split(","); + + int i=0; + + id = Integer.parseInt(split[i++]); + creationTime = Long.parseLong(split[i++]); + updateTime = Long.parseLong(split[i++]); + name = split[i++]; + maxPlayers = Integer.parseInt(split[i++]); + password = split[i++]; + //System.out.println(this.toString()); + if (split.length>=7) { + String val = split[i++]; + String[] playerlist = val.split(";"); + //System.out.println(Arrays.toString(playerlist)); + if (playerlist.length>0) { + for (String s : playerlist) { + Profile p = new Profile(RabiRaceModule.module); + p.username=s; + System.out.println("Player "+p.username); + p.downloadProfile(); + System.out.println("Adding Player "+p); + players.add(p); + } + } else { + Profile p = new Profile(RabiRaceModule.module); + p.username=val; + System.out.println("Player "+p.username); + p.downloadProfile(); + System.out.println("Adding Player "+p); + players.add(p); + } + } + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(this.getClass().getName()+"("); + boolean first=false; + for (Field f : this.getClass().getDeclaredFields()) { + if (!first) { + try { + sb.append(f.getName()+"="+f.get(this)); + first=true; + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } else { + try { + sb.append(","+f.getName()+"="+f.get(this)); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + sb.append(")"); + return sb.toString(); + } +} diff --git a/src/sig/modules/RabiRace/SessionListData.java b/src/sig/modules/RabiRace/SessionListData.java new file mode 100644 index 0000000..f566a55 --- /dev/null +++ b/src/sig/modules/RabiRace/SessionListData.java @@ -0,0 +1,27 @@ +package sig.modules.RabiRace; + +import java.util.ArrayList; +import java.util.List; + +public class SessionListData { + List data = new ArrayList(); + + public SessionListData() { + + } + + public void UpdateData(String[] data) { + this.data.clear(); + for (String session : data) { + if (session.length()>0) { + //System.out.println("Adding session "+session); + this.data.add(new Session(session)); + } + } + //System.out.println(this.data); + } + + public List getSessions() { + return data; + } +} diff --git a/src/sig/modules/RabiRace/SessionListWindow.java b/src/sig/modules/RabiRace/SessionListWindow.java new file mode 100644 index 0000000..d8693df --- /dev/null +++ b/src/sig/modules/RabiRace/SessionListWindow.java @@ -0,0 +1,77 @@ +package sig.modules.RabiRace; + +import java.awt.Dimension; +import java.awt.Graphics; + +import javax.swing.DefaultListModel; +import javax.swing.JFrame; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.ListSelectionModel; + +import sig.modules.RabiRaceModule; +import sig.modules.Controller.Axis; +import sig.modules.Controller.ControlConfigurationWindow; + +public class SessionListWindow extends JFrame{ + JPanel container = new JPanel(); + public JList sessionlist = new JList(); + public DefaultListModel sessionlist_model = new DefaultListModel(); + public int selected = -1; + public DataPanel previewPanel = new DataPanel(); + + public SessionListWindow(){ + + previewPanel.setWindow(this); + + sessionlist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + sessionlist.setLayoutOrientation(JList.VERTICAL); + + UpdateSessionList(); + + sessionlist.setModel(sessionlist_model); + + container.add(sessionlist); + container.add(previewPanel); + previewPanel.setPreferredSize(new Dimension(400,300)); + + + this.add(container); + this.setMinimumSize(new Dimension(640,480)); + } + + public void run() { + this.repaint(); + } + + public void UpdateSessionList() { + selected = sessionlist.getSelectedIndex(); + sessionlist_model.clear(); + int count=0; + for (Session session : RabiRaceModule.module.session_listing.data) { + sessionlist_model.addElement(session.id+" - "+session.name+" ("+session.players.size()+"/"+session.maxPlayers+")"); + count++; + } + if (count>=selected) { + sessionlist.setSelectedIndex(selected); + } + } + + class DataPanel extends JPanel{ + SessionListWindow window; + public void setWindow(SessionListWindow window) { + this.window=window; + } + public void paintComponent(Graphics g) { + super.paintComponent(g); + //Axis.GetAxisDisplay(g,window.ConstructTemporaryAxis(),0,0,window.axis_width,window.axis_height); + //Axis.GetAxisIndicatorDisplay(g,window.ConstructTemporaryAxis(),0,0,window.axis_width,window.axis_height); + if (sessionlist.getSelectedIndex()!=-1) { + //Get the players from that session. + Session s = RabiRaceModule.module.session_listing.data.get(sessionlist.getSelectedIndex()); + + Profile.DrawMultiPanel(g,0,0,400,s.players); + } + } + } +} diff --git a/src/sig/modules/RabiRaceModule.java b/src/sig/modules/RabiRaceModule.java index e058016..e53785b 100644 --- a/src/sig/modules/RabiRaceModule.java +++ b/src/sig/modules/RabiRaceModule.java @@ -3,11 +3,15 @@ package sig.modules; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; +import java.awt.Rectangle; +import java.awt.event.MouseEvent; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; import java.util.ConcurrentModificationException; import java.util.HashMap; import java.util.List; @@ -26,13 +30,19 @@ import com.sun.jna.platform.win32.WinNT.HANDLE; import sig.FileManager; import sig.Module; import sig.sigIRC; +import sig.modules.Controller.ClickableButton; import sig.modules.RabiRace.ColorCycler; +import sig.modules.RabiRace.CreateButton; +import sig.modules.RabiRace.JoinButton; import sig.modules.RabiRace.MemoryData; import sig.modules.RabiRace.Profile; +import sig.modules.RabiRace.SessionListData; +import sig.modules.RabiRace.SessionListWindow; import sig.modules.RabiRibi.MemoryOffset; import sig.modules.RabiRibi.MemoryType; import sig.modules.utils.PsapiTools; import sig.utils.DrawUtils; +import sig.utils.FileUtils; public class RabiRaceModule extends Module{ final static String ITEMS_DIRECTORY = sigIRC.BASEDIR+"sigIRC/rabi-ribi/items/"; @@ -42,8 +52,14 @@ public class RabiRaceModule extends Module{ long rabiRibiMemOffset = 0; public HANDLE rabiribiProcess = null; public static HashMap image_map = new HashMap(); - ColorCycler rainbowcycler = new ColorCycler(new Color(255,0,0,96),8); + public static ColorCycler rainbowcycler = new ColorCycler(new Color(255,0,0,96),8); Profile myProfile = new Profile(this); + public static RabiRaceModule module; + public static SessionListWindow window; + + public SessionListData session_listing = new SessionListData(); + + ClickableButton join_button,create_button; public static List key_items_list = new ArrayList(); public static List badges_list = new ArrayList(); @@ -52,7 +68,9 @@ public class RabiRaceModule extends Module{ super(bounds, moduleName); //Initialize(); Initialize(); - + module = this; + window = new SessionListWindow(); + window.setVisible(false); //System.out.println("Money value is: "+readIntFromMemory(MemoryOffset.MONEY)); } @@ -62,7 +80,10 @@ public class RabiRaceModule extends Module{ ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleWithFixedDelay(()->{ CheckRabiRibiClient(); - UpdateMyProfile(); + if (foundRabiRibi) { + myProfile.uploadProfile(); + getSessionList(); + } }, 5000, 5000, TimeUnit.MILLISECONDS); File dir = new File(ITEMS_DIRECTORY); @@ -103,6 +124,32 @@ public class RabiRaceModule extends Module{ badges_list.add(md); } } + + join_button = new JoinButton(new Rectangle(2,(int)(position.getHeight()-18),120,18),"Join Session (0)",this); + create_button = new CreateButton(new Rectangle(122,(int)(position.getHeight()-18),120,18),"Create Session",this); + } + + private void getSessionList() { + File file = new File(sigIRC.BASEDIR+"sessions"); + try { + org.apache.commons.io.FileUtils.copyURLToFile(new URL("http://45.33.13.215/rabirace/send.php?key=getsessions"),file); + String[] data = FileUtils.readFromFile(sigIRC.BASEDIR+"sessions"); + //System.out.println("Data is "+Arrays.toString(data)); + session_listing.UpdateData(data); + } catch (IOException e) { + e.printStackTrace(); + } + join_button.setButtonLabel("Join Session ("+session_listing.getSessions().size()+")"); + window.UpdateSessionList(); + } + + public void mousePressed(MouseEvent ev) { + if (join_button.mouseInsideBounds(ev)) { + join_button.onClickEvent(ev); + } + if (create_button.mouseInsideBounds(ev)) { + create_button.onClickEvent(ev); + } } private void CheckRabiRibiClient() { @@ -152,25 +199,39 @@ public class RabiRaceModule extends Module{ public void run() { if (foundRabiRibi) { rainbowcycler.run(); + UpdateMyProfile(); + if (window!=null) { + window.run(); + } } } private void UpdateMyProfile() { if (foundRabiRibi) { //System.out.println("Called."); - myProfile.rainbowEggCount = readIntFromMemory(MemoryOffset.RAINBOW_EGG_COUNT); - myProfile.attackUps = readItemCountFromMemory(MemoryOffset.ATTACKUP_START,MemoryOffset.ATTACKUP_END); - myProfile.healthUps = readItemCountFromMemory(MemoryOffset.HEALTHUP_START,MemoryOffset.HEALTHUP_END); - myProfile.manaUps = readItemCountFromMemory(MemoryOffset.MANAUP_START,MemoryOffset.MANAUP_END); - myProfile.regenUps = readItemCountFromMemory(MemoryOffset.REGENUP_START,MemoryOffset.REGENUP_END); - myProfile.packUps = readItemCountFromMemory(MemoryOffset.PACKUP_START,MemoryOffset.PACKUP_END); - myProfile.isPaused = readIntFromMemory(MemoryOffset.WARP_TRANSITION_COUNTER)==141; - myProfile.itempct = readFloatFromMemory(MemoryOffset.ITEM_PERCENT); - myProfile.mappct = readFloatFromMemory(MemoryOffset.MAP_PERCENT); - myProfile.playtime = readIntFromMemory(MemoryOffset.PLAYTIME); - myProfile.updateClientValues(); + int warp_counter = readIntFromMemory(MemoryOffset.WARP_TRANSITION_COUNTER); + if (warp_counter==203 || warp_counter==141) { + myProfile.rainbowEggCount = readIntFromMemory(MemoryOffset.RAINBOW_EGG_COUNT); + myProfile.attackUps = readItemCountFromMemory(MemoryOffset.ATTACKUP_START,MemoryOffset.ATTACKUP_END); + myProfile.healthUps = readItemCountFromMemory(MemoryOffset.HEALTHUP_START,MemoryOffset.HEALTHUP_END); + myProfile.manaUps = readItemCountFromMemory(MemoryOffset.MANAUP_START,MemoryOffset.MANAUP_END); + myProfile.regenUps = readItemCountFromMemory(MemoryOffset.REGENUP_START,MemoryOffset.REGENUP_END); + myProfile.packUps = readItemCountFromMemory(MemoryOffset.PACKUP_START,MemoryOffset.PACKUP_END); + myProfile.isPaused = readIntFromMemory(MemoryOffset.WARP_TRANSITION_COUNTER)==141; + myProfile.itempct = readFloatFromMemory(MemoryOffset.ITEM_PERCENT); + myProfile.mappct = readFloatFromMemory(MemoryOffset.MAP_PERCENT); + myProfile.playtime = readIntFromMemory(MemoryOffset.PLAYTIME); + myProfile.updateClientValues(); + } } } + + public void ApplyConfigWindowProperties() { + sigIRC.rabiracemodule_X=(int)position.getX(); + sigIRC.rabiracemodule_Y=(int)position.getY(); + sigIRC.config.setInteger("RABIRACE_module_X", sigIRC.rabiracemodule_X); + sigIRC.config.setInteger("RABIRACE_module_Y", sigIRC.rabiracemodule_Y); + } /*public int readIntFromErinaData(MemoryOffset val) { return readIntFromPointer(val,MemoryOffset.ENTITY_ARRAY); @@ -266,67 +327,15 @@ public class RabiRaceModule extends Module{ if (!foundRabiRibi) { DrawUtils.drawTextFont(g, sigIRC.panel.userFont, position.getX(), position.getY()+26, Color.BLACK, "Rabi-Ribi not found! Please start it."); } else { - //DrawUtils.drawTextFont(g, sigIRC.panel.userFont, position.getX(), position.getY()+26, Color.BLACK, "Values: "+readIntFromMemory(MemoryOffset.DLC_ITEM1)+","+readIntFromMemory(MemoryOffset.DLC_ITEM2)+","+readIntFromMemory(MemoryOffset.DLC_ITEM3)+","+readIntFromMemory(MemoryOffset.DLC_ITEM4)); - final int border=20; - final int width=(int)(position.getWidth()-border*2); - final int spacing=width/5; - for (int i=0;i<5;i++) { - Image img = image_map.get("easter_egg.png"); - Color col = (myProfile.rainbowEggCount>i)?rainbowcycler.getCycleColor():new Color(0,0,0,192); - DrawUtils.drawImage(g, img, (int)(position.getX()+border+i*spacing-img.getWidth(sigIRC.panel)/4),(int)(position.getY()+36),col,sigIRC.panel); - } - int size = myProfile.key_items.size(); - final int icon_size = 24; - int count = 0; - try { - for (String key : myProfile.key_items.keySet()) { - MemoryData data = myProfile.key_items.get(key); - if (readIntFromMemory(data.mem)<0) { - Image img = data.getImage().getScaledInstance(icon_size, icon_size, Image.SCALE_DEFAULT); - if (size*icon_size