diff --git a/sigIRCv2.jar b/sigIRCv2.jar index fbb2b8b..806c8c5 100644 Binary files a/sigIRCv2.jar and b/sigIRCv2.jar differ diff --git a/src/sig/modules/RabiRace/Avatar.java b/src/sig/modules/RabiRace/Avatar.java new file mode 100644 index 0000000..0696f6f --- /dev/null +++ b/src/sig/modules/RabiRace/Avatar.java @@ -0,0 +1,61 @@ +package sig.modules.RabiRace; + +import java.awt.Image; + +import sig.modules.RabiRaceModule; + +public enum Avatar { + ERINA("Erina","small_erina.png",0), + RIBBON("Ribbon","small_ribbon.png",1), + IRISU("Irisu","small_irisu.png",2), + GREEN_KOTRI("Kotri (Green)","small_green_kotri.png",3), + BLUE_KOTRI("Kotri (Blue)","small_blue_kotri.png",4), + RED_KOTRI("Kotri (Red)","small_kotri.png",5), + ARURAUNE("Aruraune","small_aruraune.png",6), + ASHURI("Ashuri","small_ashuri.png",7), + CICINI("Cicini","small_cicini.png",8), + COCOA("Cocoa","small_cocoa.png",9), + ILLUSION_ALIUS("Illusion Alius","small_illusion_alius.png",10), + KEKE_BUNNY("Keke Bunny","small_keke_bunny.png",11), + LILITH("Lilith","small_lilith.png",12), + LILLI("Lilli","small_lilli.png",13), + MIRIAM("Miriam","small_miriam.png",14), + MIRU("Miru","small_miru.png",15), + NIEVE("Nieve","small_nieve.png",16), + NIXIE("Nixie","small_nixie.png",17), + NOAH("Noah","small_noah.png",18), + PANDORA("Pandora","small_pandora.png",19), + SHADOW_PANDORA("Pandora (Shadow)","small_shadow_pandora.png",20), + PIXIE("Pixie","small_pixie.png",21), + RITA("Rita","small_rita.png",22), + SHADOW_RITA("Rita (Shadow)","small_shadow_rita.png",23), + RUMI("Rumi","small_rumi.png",24), + SAYA("Saya","small_saya.png",25), + SEANA("Seana","small_seana.png",26), + SYARO("Syaro","small_syaro.png",27), + VANILLA("Vanilla","small_vanilla.png",28), + ; + + public String displayName; + public String fileName; + public int value; + + Avatar(String displayName, String fileName, int value) { + this.displayName = displayName; + this.fileName = fileName; + this.value = value; + } + + public static Avatar getAvatarFromID(int value) { + for (Avatar a : Avatar.values()) { + if (a.value == value) { + return a; + } + } + return ERINA; + } + + public Image getAvatarImage() { + return RabiRaceModule.image_map.get(fileName); + } +} diff --git a/src/sig/modules/RabiRace/AvatarSelectionWindow.java b/src/sig/modules/RabiRace/AvatarSelectionWindow.java new file mode 100644 index 0000000..ca0a3d2 --- /dev/null +++ b/src/sig/modules/RabiRace/AvatarSelectionWindow.java @@ -0,0 +1,156 @@ +package sig.modules.RabiRace; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.LayoutManager; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.lang.reflect.Field; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JFrame; +import javax.swing.JPanel; + +import sig.sigIRC; +import sig.modules.RabiRaceModule; +import sig.utils.ReflectUtils; + +public class AvatarSelectionWindow extends JFrame{ + static ImagePanel[] avatars = new ImagePanel[Avatar.values().length]; + static AvatarSelectionWindow avatarwindow; + final static int WINDOW_WIDTH = 350; + final static int COLUMNS = WINDOW_WIDTH/50; + final static int WINDOW_HEIGHT = ((Avatar.values().length/COLUMNS)+1)*50; + static boolean mousePressed = false; + + public AvatarSelectionWindow() { + this.setVisible(false); + this.setTitle("Avatar Selection"); + this.setIconImage(sigIRC.programIcon); + avatarwindow = this; + JPanel panels = new JPanel(); + JPanel container = new JPanel(); + panels.setLayout(new BoxLayout(panels,BoxLayout.PAGE_AXIS)); + container.setLayout(new BoxLayout(container,BoxLayout.LINE_AXIS)); + container.setSize(WINDOW_WIDTH, 50); + int i=0; + panels.add(container); + for (int k=0;k=18) { int i=0; displayName = data[i++]; - avatar = Integer.parseInt(data[i++]); + avatar = Avatar.getAvatarFromID(Integer.parseInt(data[i++])); playtime = Integer.parseInt(data[i++]); healthUps = Integer.parseInt(data[i++]); manaUps = Integer.parseInt(data[i++]); @@ -239,7 +241,7 @@ public class Profile { private String getDataString() { StringBuilder sb = new StringBuilder(); appendData(sigIRC.nickname,sb); - appendData(avatar,sb); + appendData(avatar.value,sb); appendData(playtime,sb); appendData(healthUps,sb); appendData(manaUps,sb); @@ -273,15 +275,23 @@ public class Profile { } str.append(data); } + + public static Avatar GetSeededAvatar(String username) { + Random r = new Random(); + r.setSeed(username.toLowerCase().hashCode()); + int randomnumb = r.nextInt(28); + return Avatar.getAvatarFromID(randomnumb); + } 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.fillRect(1, 1, 32, 32); + g2.drawImage(avatar.getAvatarImage(), 1, 1, sigIRC.panel); g2.setColor(ScrollingText.GetUserNameColor(displayName)); - DrawUtils.drawOutlineText(g2, sigIRC.panel.rabiRibiMoneyDisplayFont, 36, 26, 1, g2.getColor(), Color.BLACK, displayName); + DrawUtils.drawOutlineText(g2, sigIRC.panel.rabiRibiMoneyDisplayFont, 54, 26, 1, g2.getColor(), Color.BLACK, displayName); DrawUtils.drawCenteredOutlineText(g2, sigIRC.panel.rabiRibiTinyDisplayFont, (int)(tmp.getWidth()*0.2), 50, 1, GetDifficultyColor(), Color.BLACK, GetDifficultyName()); String text = TextUtils.convertSecondsToTimeFormat(playtime/60); if (isPaused) { diff --git a/src/sig/modules/RabiRace/Session.java b/src/sig/modules/RabiRace/Session.java index 438e430..6dc4a0e 100644 --- a/src/sig/modules/RabiRace/Session.java +++ b/src/sig/modules/RabiRace/Session.java @@ -38,6 +38,7 @@ public class Session { for (String s : playerlist) { Profile p = new Profile(RabiRaceModule.module,true); p.username=s; + p.avatar = Profile.GetSeededAvatar(p.username); //System.out.println("Player "+p.username); if (p.downloadProfile()) { if (RabiRaceModule.mySession==null && p.username.equalsIgnoreCase(RabiRaceModule.module.myProfile.username)) { @@ -50,6 +51,7 @@ public class Session { } else { Profile p = new Profile(RabiRaceModule.module,true); p.username=val; + p.avatar = Profile.GetSeededAvatar(p.username); //System.out.println("Player "+p.username); if (p.downloadProfile()) { if (RabiRaceModule.mySession==null && p.username.equalsIgnoreCase(RabiRaceModule.module.myProfile.username)) { diff --git a/src/sig/modules/RabiRaceModule.java b/src/sig/modules/RabiRaceModule.java index 4f5f2bc..198b220 100644 --- a/src/sig/modules/RabiRaceModule.java +++ b/src/sig/modules/RabiRaceModule.java @@ -31,6 +31,8 @@ import com.sun.jna.platform.win32.WinNT.HANDLE; import sig.FileManager; import sig.Module; import sig.sigIRC; +import sig.modules.RabiRace.Avatar; +import sig.modules.RabiRace.AvatarSelectionWindow; import sig.modules.RabiRace.ClickableButton; import sig.modules.RabiRace.ColorCycler; import sig.modules.RabiRace.CreateButton; @@ -50,6 +52,7 @@ import sig.utils.TextUtils; public class RabiRaceModule extends Module{ final static String ITEMS_DIRECTORY = sigIRC.BASEDIR+"sigIRC/rabi-ribi/items/"; + final static String AVATAR_DIRECTORY = sigIRC.BASEDIR+"sigIRC/rabi-ribi/characters/"; final int PROCESS_PERMISSIONS = WinNT.PROCESS_QUERY_INFORMATION | WinNT.PROCESS_VM_READ; boolean foundRabiRibi = false; int rabiRibiPID = -1; @@ -61,11 +64,13 @@ public class RabiRaceModule extends Module{ public static RabiRaceModule module; public static SessionListWindow window; public static SessionCreateWindow createwindow; + public static AvatarSelectionWindow avatarwindow; public static Session mySession; boolean firstCheck=false; public List messages = new ArrayList(); public static int lastScrollX = 0; boolean firstUpdate=true; + boolean mouseoverAvatar=false; public SessionListData session_listing = new SessionListData(); @@ -83,6 +88,8 @@ public class RabiRaceModule extends Module{ window.setVisible(false); createwindow = new SessionCreateWindow(); createwindow.setVisible(false); + avatarwindow = new AvatarSelectionWindow(); + avatarwindow.setVisible(false); //System.out.println("Money value is: "+readIntFromMemory(MemoryOffset.MONEY)); } @@ -123,6 +130,9 @@ public class RabiRaceModule extends Module{ //Attempt to fetch from server. new FileManager("sigIRC/rabi-ribi/items/"+data.img_path).verifyAndFetchFileFromServer(); } + for (Avatar avatar : Avatar.values()) { + new FileManager("sigIRC/rabi-ribi/characters/"+avatar.fileName).verifyAndFetchFileFromServer(); + } new FileManager("sigIRC/rabi-ribi/items/easter_egg.png").verifyAndFetchFileFromServer(); new FileManager("sigIRC/rabi-ribi/items/health_up.png").verifyAndFetchFileFromServer(); new FileManager("sigIRC/rabi-ribi/items/mana_up.png").verifyAndFetchFileFromServer(); @@ -130,10 +140,29 @@ public class RabiRaceModule extends Module{ new FileManager("sigIRC/rabi-ribi/items/pack_up.png").verifyAndFetchFileFromServer(); new FileManager("sigIRC/rabi-ribi/items/attack_up.png").verifyAndFetchFileFromServer(); + AddImagesToImageMap(dir,ITEMS_DIRECTORY); + dir = new File(AVATAR_DIRECTORY); + AddImagesToImageMap(dir,AVATAR_DIRECTORY); + + for (MemoryData md : MemoryData.values()) { + if (md.key_item) { + key_items_list.add(md); + } else { + badges_list.add(md); + } + } + + //trimeadProfile.username = "trimead"; + + 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 AddImagesToImageMap(File dir, String DIRECTORY) { String[] images = dir.list(); List filtered_images = new ArrayList(); for (String file : images) { - File f = new File(ITEMS_DIRECTORY+file); + File f = new File(DIRECTORY+file); if (!f.isDirectory()) { filtered_images.add(file); } @@ -142,24 +171,11 @@ public class RabiRaceModule extends Module{ for (String image : images) { try { //System.out.println("Loaded "+image); - image_map.put(image, ImageIO.read(new File(ITEMS_DIRECTORY+image))); + image_map.put(image, ImageIO.read(new File(DIRECTORY+image))); } catch (IOException e) { e.printStackTrace(); } } - - for (MemoryData md : MemoryData.values()) { - if (md.key_item) { - key_items_list.add(md); - } else { - badges_list.add(md); - } - } - - //trimeadProfile.username = "trimead"; - - 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 getMessageUpdates() { @@ -204,6 +220,9 @@ public class RabiRaceModule extends Module{ if (firstCheck && mySession==null && create_button.mouseInsideBounds(ev)) { create_button.onClickEvent(ev); } + if (mouseoverAvatar) { + avatarwindow.setVisible(true); + } } private void CheckRabiRibiClient() { @@ -411,6 +430,18 @@ public class RabiRaceModule extends Module{ } else { //myProfile.draw(g); Image panel = myProfile.getStatPanel((int)position.getWidth()); + + if (sigIRC.panel.lastMouseX>=position.getX() && + sigIRC.panel.lastMouseX<=position.getX()+(int)(position.getWidth()/400)*50 && + sigIRC.panel.lastMouseY>=position.getY() && + sigIRC.panel.lastMouseY<=position.getY()+(int)((position.getWidth()/400)*50)) { + mouseoverAvatar=true; + Color ident = g.getColor(); + g.setColor(new Color(196,196,196,128)); + g.fillRect((int)(position.getX()+1), (int)(position.getY()+1), (int)((position.getWidth()/400)*50), (int)((position.getWidth()/400)*50)); + g.setColor(ident); + } + 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); diff --git a/src/sig/utils/JavaUtils.java b/src/sig/utils/JavaUtils.java index cdc5802..8faaf39 100644 --- a/src/sig/utils/JavaUtils.java +++ b/src/sig/utils/JavaUtils.java @@ -23,24 +23,22 @@ public class JavaUtils { sb.append(this.getClass().getName()+"("); boolean first=false; for (Field f : this.getClass().getDeclaredFields()) { - if (!ReflectUtils.isCloneable(f)) { - 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(); - } + 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(); } } }