Added ability to change/select avatar icon. Can click on avatar image to

change it.
dev
sigonasr2 7 years ago
parent ad5ad80c61
commit 381e58b504
  1. BIN
      sigIRCv2.jar
  2. 61
      src/sig/modules/RabiRace/Avatar.java
  3. 156
      src/sig/modules/RabiRace/AvatarSelectionWindow.java
  4. 20
      src/sig/modules/RabiRace/Profile.java
  5. 2
      src/sig/modules/RabiRace/Session.java
  6. 61
      src/sig/modules/RabiRaceModule.java
  7. 34
      src/sig/utils/JavaUtils.java

Binary file not shown.

@ -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);
}
}

@ -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<avatars.length;k++) {
ImagePanel j = new ImagePanel(RabiRaceModule.image_map.get(Avatar.values()[i].fileName),i%COLUMNS,i/COLUMNS,Avatar.values()[i].value);
avatars[k] = j;
j.setSize(50,50);
j.setPreferredSize(new Dimension(50,50));
container.add(j);
i++;
if (i%COLUMNS==0) {
container = new JPanel();
container.setLayout(new BoxLayout(container,BoxLayout.LINE_AXIS));
container.setSize(WINDOW_WIDTH, 50);
panels.add(container);
}
}
while (i%COLUMNS!=0) {
container.add(Box.createRigidArea(new Dimension(50,50)));
i++;
}
this.add(panels);
this.setSize(WINDOW_WIDTH, WINDOW_HEIGHT+48);
this.setResizable(false);
}
}
class ImagePanel extends JPanel implements MouseListener{
Image img;
int x,y;
public boolean selected=false;
int myID = 0;
public ImagePanel(Image img, int x, int y, int myID) {
this.img = img;
this.setSize(50,50);
this.x=x;
this.y=y;
this.myID = myID;
addMouseListener(this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (selected) {
g.setColor(new Color(0,0,64));
g.fillRect(0, 0, 50, 50);
}
g.drawImage(img, 0, 0, this);
if (selected) {
g.setColor(Color.YELLOW);
for (int i=0;i<2;i++) {
g.drawRect(i, i, 50-i, 50-i);
}
}
}
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();
}
@Override
public void mousePressed(MouseEvent arg0) {
for (ImagePanel i : AvatarSelectionWindow.avatars) {
if (i!=null) {
i.selected = false;
i.repaint();
}
}
selected = true;
AvatarSelectionWindow.mousePressed=true;
RabiRaceModule.module.myProfile.avatar = Avatar.getAvatarFromID(myID);
repaint();
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
if (AvatarSelectionWindow.mousePressed) {
mousePressed(e);
}
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
AvatarSelectionWindow.mousePressed=false;
}
}

@ -18,6 +18,7 @@ import java.util.ConcurrentModificationException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Random;
import sig.ScrollingText;
import sig.sigIRC;
@ -29,7 +30,7 @@ import sig.utils.TextUtils;
public class Profile {
public String username = sigIRC.nickname.toLowerCase();
public String displayName = sigIRC.nickname;
public int avatar = 0;
public Avatar avatar;
public int playtime = 0;
public int healthUps = 0;
public int attackUps = 0;
@ -61,6 +62,7 @@ public class Profile {
oldProfile = new Profile(module,true);
}
this.parent = module;
this.avatar = GetSeededAvatar(username);
}
public Profile getArchive() {
@ -195,7 +197,7 @@ public class Profile {
if (data.length>=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) {

@ -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)) {

@ -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<ScrollingText> messages = new ArrayList<ScrollingText>();
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<String> filtered_images = new ArrayList<String>();
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);

@ -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();
}
}
}

Loading…
Cancel
Save