- Joined
- Nov 27, 2009
- Messages
- 442
- Reaction score
- 230
Ring Effects 3rd Person for v83, as stated in the title. Haven't done anything for the community in a while, so I though why not release the last thing I coded.
PS: To charlie (PirateOwh) y u sell me ring effects? ):
PSS: Umm looking for beta testers for me gms-like server, post/send your contact either through vistior message or PM. kk ty
PSSLOL: i like deh thx, so hit the 'heart i luv u' button pl0x
addItemInfo:
updateCharLook:
addAllRingPacketInfo:
getCharInfo:
addRingInfo:
spawnPlayerMapObject:
There's also somestuff you have to add to saveToDB or ItemFactory.java but i'm too lazy to post :thumbdown:
Picture from KyraMS:
PS: To charlie (PirateOwh) y u sell me ring effects? ):
PSS: Umm looking for beta testers for me gms-like server, post/send your contact either through vistior message or PM. kk ty
PSSLOL: i like deh thx, so hit the 'heart i luv u' button pl0x
addItemInfo:
PHP:
private static void addItemInfo(MaplePacketLittleEndianWriter mplew, IItem item, boolean zeroPosition, boolean leaveOut, boolean gachapon, boolean inTrade) {
boolean ring = false;
IEquip equip = null;
if (item.getType() == IItem.EQUIP) {
equip = (IEquip) item;
if (equip.getRingId() > -1) {
ring = true;
}
}
byte pos = item.getPosition();
boolean masking = false;
if (!gachapon) {
if (zeroPosition) {
if (!leaveOut) {
mplew.write(0);
}
} else if (pos <= (byte) -1) {
pos *= -1;
if (pos > 100 || ring) {
masking = true;
mplew.writeShort(pos - 100);
} else {
if((item.getType() == IItem.EQUIP) && (!inTrade))
mplew.writeShort(pos);
else
mplew.write(pos);
}
} else {
if((item.getType() == IItem.EQUIP) && (!inTrade))
mplew.writeShort(item.getPosition());
else
mplew.write(item.getPosition());
}
}
if (item.getPetId() > -1) {
mplew.write(3);
} else {
mplew.write(item.getType());
}
mplew.writeInt(item.getItemId());
if (ring) {
mplew.write(1);
mplew.writeInt(equip.getRingId());
mplew.writeInt(0);
}
if (item.getPetId() > -1) {
MaplePet pet = MaplePet.loadFromDb(item.getItemId(), item.getPosition(), item.getPetId());
String petname = pet.getName();
mplew.write(1);
mplew.writeInt(item.getPetId());
mplew.writeInt(0);
mplew.write(0);
mplew.write(ITEM_MAGIC);
mplew.write(HexTool.getByteArrayFromHexString("BB 46 E6 17 02"));
if (petname.length() > 13) {
petname = petname.substring(0, 13);
}
mplew.writeAsciiString(petname);
for (int i = petname.length(); i < 13; i++) {
mplew.write(0);
}
mplew.write(pet.getLevel());
mplew.writeShort(pet.getCloseness());
mplew.write(pet.getFullness());
mplew.writeLong(getKoreanTimestamp((long) (System.currentTimeMillis() * 1.2)));
mplew.writeInt(0);
mplew.write(HexTool.getByteArrayFromHexString("50 46 00 00 00 00")); //wonder what this is - WAS 50 46 00 00
return;
}
if (masking && !ring) {
mplew.write(HexTool.getByteArrayFromHexString("01 BE 50 17 00 00 00 00 00 B0 CE EB"));
addExpirationTime(mplew, 0, false);
} else if (ring) {
mplew.writeLong(getKoreanTimestamp((long) (System.currentTimeMillis() * 1.2)));
} else {
mplew.writeShort(0);
mplew.write(ITEM_MAGIC);
addExpirationTime(mplew, 0, false);
}
if (item.getType() == IItem.EQUIP) {
mplew.write(equip.getUpgradeSlots());
mplew.write(equip.getLevel());
mplew.writeShort(equip.getStr()); // str
mplew.writeShort(equip.getDex()); // dex
mplew.writeShort(equip.getInt()); // int
mplew.writeShort(equip.getLuk()); // luk
mplew.writeShort(equip.getHp()); // hp
mplew.writeShort(equip.getMp()); // mp
mplew.writeShort(equip.getWatk()); // watk
mplew.writeShort(equip.getMatk()); // matk
mplew.writeShort(equip.getWdef()); // wdef
mplew.writeShort(equip.getMdef()); // mdef
mplew.writeShort(equip.getAcc()); // accuracy
mplew.writeShort(equip.getAvoid()); // avoid
mplew.writeShort(equip.getHands()); // hands
mplew.writeShort(equip.getSpeed()); // speed
mplew.writeShort(equip.getJump()); // jump
mplew.writeMapleAsciiString(equip.getOwner());
mplew.writeShort(equip.getFlag()); //Item Flags
if (!masking || ring) {
mplew.write(0);
mplew.write(equip.getItemLevel()); // item level
mplew.writeShort(0);
mplew.writeShort(1); // item exp
mplew.writeShort(equip.getVicious());
mplew.writeShort(0);
if (!ring) {
mplew.writeLong(0);
mplew.write(HexTool.getByteArrayFromHexString("00 40 E0 FD 3B 37 4F 01"));
} else {
mplew.write(HexTool.getByteArrayFromHexString("10 B0 EB A4 14 97 CA 01"));
}
} else {
mplew.write(HexTool.getByteArrayFromHexString("65 0A 28 27 F4 00 00 00 00 00 00 40 E0 FD 3B 37 4F 01"));
}
mplew.writeInt(-1);
} else {
mplew.writeShort(item.getQuantity());
mplew.writeMapleAsciiString(item.getOwner());
mplew.writeShort(item.getFlag());
if (InventoryConstants.isRechargable(item.getItemId())) {
mplew.write(HexTool.getByteArrayFromHexString("02 00 00 00 54 00 00 34"));
}
}
}
updateCharLook:
PHP:
public static MaplePacket updateCharLook(MapleCharacter chr) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(0xC5);
mplew.writeInt(chr.getId());
mplew.write(1);
addCharLook(mplew, chr, false);
if (chr.getMarriageRings().size() + chr.getFriendshipRings().size() + chr.getCrushRings().size() > 0) {
addAllRingPacketInfo(mplew, chr);
} else {
mplew.write0(10);
}
mplew.write(0);
mplew.write(0);
mplew.write(0);
return mplew.getPacket();
}
addAllRingPacketInfo:
PHP:
public static void addAllRingPacketInfo(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) {
MapleInventory iv = chr.getInventory(MapleInventoryType.EQUIPPED);
Collection<IItem> equippedC = iv.list();
List<Item> equipped = new ArrayList<Item>(equippedC.size());
for (IItem item : equippedC)
equipped.add((Item) item);
Collections.sort(equipped);
List<MapleRing> crushRings = new ArrayList<MapleRing>();
List<MapleRing> friendshipRings = new ArrayList<MapleRing>();
List<MapleRing> marriageRings = new ArrayList<MapleRing>();
for (Item item : equipped) {
if (item.getItemId() >= 1112001 && item.getItemId() <= 1112007 || item.getItemId() == 1112012) {
if (((IEquip) item).getRingId() > -1)
crushRings.add(MapleRing.loadFromDb(((IEquip) item).getRingId()));
} else if (item.getItemId() >= 1112800 && item.getItemId() <= 1112802) {
if (((IEquip) item).getRingId() > -1)
friendshipRings.add(MapleRing.loadFromDb(((IEquip) item).getRingId()));
} else if (item.getItemId() >= 1112001 && item.getItemId() <= 1112007 || item.getItemId() == 1112012) {
if (((IEquip) item).getRingId() > -1)
marriageRings.add(MapleRing.loadFromDb(((IEquip) item).getRingId()));
}
}
Collections.sort(crushRings);
if (crushRings.size() > 0) {
for (MapleRing mr : crushRings) {
mplew.write(1);
mplew.writeInt(mr.getRingId());
mplew.writeInt(0);
mplew.writeInt(mr.getPartnerRingId());
mplew.writeInt(0);
mplew.writeInt(mr.getItemId());
}
}
Collections.sort(friendshipRings);
if (friendshipRings.size() > 0) {
for (MapleRing mr : friendshipRings) {
mplew.write(1);
mplew.writeInt(mr.getRingId());
mplew.writeInt(0);
mplew.writeInt(mr.getPartnerRingId());
mplew.writeInt(0);
mplew.writeInt(mr.getItemId());
mplew.write(1); // incorrect
}
}
Collections.sort(marriageRings);
if (marriageRings.size() > 0) {
for (MapleRing mr : marriageRings) {
mplew.writeInt(mr.getPartnerChrId());
mplew.writeInt(chr.getId());
mplew.writeInt(mr.getItemId());
}
} else {
mplew.write(0);
}
}
getCharInfo:
PHP:
Replace mplew.writeLong(0); with addRingInfo(mplew, chr);
addRingInfo:
PHP:
private static void addRingInfo(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) {
mplew.writeShort(0); // Start of Rings
mplew.writeShort(chr.getCrushRings().size());
for (MapleRing ring : chr.getCrushRings()) {
mplew.writeInt(ring.getPartnerChrId());
mplew.writeAsciiString(StringUtil.getRightPaddedStr(ring.getPartnerName(), '\0', 13));
mplew.writeInt(ring.getRingId());
mplew.writeInt(0);
mplew.writeInt(ring.getPartnerRingId());
mplew.writeInt(0);
}
mplew.writeShort(chr.getFriendshipRings().size());
for (MapleRing ring : chr.getFriendshipRings()) {
mplew.writeInt(ring.getPartnerChrId());
mplew.writeAsciiString(StringUtil.getRightPaddedStr(ring.getPartnerName(), '\0', 13));
mplew.writeInt(ring.getRingId());
mplew.writeInt(0);
mplew.writeInt(ring.getPartnerRingId());
mplew.writeInt(0);
mplew.writeInt(ring.getItemId());
}
mplew.writeShort(chr.getMarriageRings().size());
int marriageId = 30000;
for (MapleRing ring : chr.getMarriageRings()) {
mplew.writeInt(marriageId);
mplew.writeInt(chr.getGender() == 0 ? chr.getId() : ring.getPartnerChrId());
mplew.writeInt(chr.getGender() == 0 ? ring.getPartnerChrId() : chr.getId());
mplew.writeShort(3);
mplew.writeInt(ring.getRingId());
mplew.writeInt(ring.getPartnerRingId());
mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? chr.getName() : ring.getPartnerName(), '\0', 13));
mplew.writeAsciiString(StringUtil.getRightPaddedStr(chr.getGender() == 0 ? ring.getPartnerName() : chr.getName(), '\0', 13));
marriageId++;
}
}
spawnPlayerMapObject:
PHP:
public static MaplePacket spawnPlayerMapobject(MapleCharacter chr) {
MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(0xA0);
mplew.writeInt(chr.getId());
mplew.write(chr.getLevel());
mplew.writeMapleAsciiString(chr.getName());
if (chr.getGuildId() < 1) {
mplew.writeMapleAsciiString("");
mplew.write(new byte[6]);
} else {
MapleGuildSummary gs = chr.getClient().getChannelServer().getGuildSummary(chr.getGuildId());
if (gs != null) {
mplew.writeMapleAsciiString(gs.getName());
mplew.writeShort(gs.getLogoBG());
mplew.write(gs.getLogoBGColor());
mplew.writeShort(gs.getLogo());
mplew.write(gs.getLogoColor());
} else {
mplew.writeMapleAsciiString("");
mplew.write(new byte[6]);
}
}
mplew.writeInt(0); //Not sure anymore this should be an int.
mplew.writeShort(0);
mplew.write(0xfc);
mplew.write(1);
//mplew.writeInt(0);
// mplew.writeShort(0);
if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
mplew.writeInt(2);
} else {
mplew.writeInt(0);
}
long buffmask = 0;
Integer buffvalue = null;
if (chr.getBuffedValue(MapleBuffStat.DARKSIGHT) != null && !chr.isHidden()) {
buffmask |= MapleBuffStat.DARKSIGHT.getValue();
}
if (chr.getBuffedValue(MapleBuffStat.COMBO) != null) {
buffmask |= MapleBuffStat.COMBO.getValue();
buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.COMBO).intValue());
}
if (chr.getBuffedValue(MapleBuffStat.SHADOWPARTNER) != null) {
buffmask |= MapleBuffStat.SHADOWPARTNER.getValue();
}
if (chr.getBuffedValue(MapleBuffStat.SOULARROW) != null) {
buffmask |= MapleBuffStat.SOULARROW.getValue();
}
if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
buffvalue = Integer.valueOf(chr.getBuffedValue(MapleBuffStat.MORPH).intValue());
}
mplew.writeInt((int) ((buffmask >> 32) & 0xffffffffL));
if (buffvalue != null) {
if (chr.getBuffedValue(MapleBuffStat.MORPH) != null) {
mplew.writeShort(buffvalue);
} else {
mplew.write(buffvalue.byteValue());
}
}
mplew.writeInt((int) (buffmask & 0xffffffffL));
int CHAR_MAGIC_SPAWN = Randomizer.getInstance().nextInt();
mplew.writeInt(0);
// mplew.writeInt(0);
mplew.writeShort(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeShort(0); //v74
mplew.write(0); //v74
mplew.writeInt(0);
mplew.writeInt(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);//v74
mplew.writeShort(0);
mplew.write(0); //v74
mplew.writeInt(0);
mplew.writeInt(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeShort(chr.attackedKills);
mplew.write(0);
IItem mount = chr.getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -18);
if (chr.getBuffedValue(MapleBuffStat.MONSTER_RIDING) != null && mount != null) {
mplew.writeInt(mount.getItemId());
mplew.writeInt(1004);
} else {
mplew.writeLong(0);
}
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.write(0);
mplew.writeInt(0);
mplew.writeInt(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeInt(0);
mplew.writeInt(0);
mplew.writeInt(0);
mplew.writeInt(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.write(0);
mplew.writeInt(0);
mplew.writeInt(0);
mplew.writeInt(0);
mplew.writeInt(CHAR_MAGIC_SPAWN);
mplew.writeShort(0);
mplew.write(0);
int job = 412;
Iterator<ISkill> Skills = chr.getSkills().keySet().iterator();
while (Skills.hasNext()) {
int ID = Skills.next().getId();
if (ID == 11101005 || ID == 14101004) {
job = ID / 10000;
break;
}
}
mplew.writeShort(job);
addCharLook(mplew, chr, false);
mplew.writeInt(0);
mplew.writeInt(chr.getItemEffect());
mplew.writeInt(chr.getChair());
mplew.writeShort(chr.getPosition().x);
mplew.writeShort(chr.getPosition().y);
mplew.write(chr.getStance());
mplew.writeInt(0);
mplew.writeInt(1);
mplew.writeLong(0);
mplew.writeShort(0);
if (chr.getMarriageRings().size() + chr.getFriendshipRings().size() + chr.getCrushRings().size() > 0) {
addAllRingPacketInfo(mplew, chr);
} else {
mplew.write0(10);
}
mplew.write0(5);
return mplew.getPacket();
}
There's also somestuff you have to add to saveToDB or ItemFactory.java but i'm too lazy to post :thumbdown:
Picture from KyraMS:
Last edited: