Fixed Guild Creation

Fixed a bug on guild creation process where the leadership would not be
assigned instantly to the guild leader (would need to change channels or
reconnect to take effect).
This commit is contained in:
ronancpl
2017-06-12 14:53:11 -03:00
parent 9ab79f216a
commit 7a8bba98ca
42 changed files with 71 additions and 51 deletions

View File

@@ -1,4 +1,4 @@
#Sun, 11 Jun 2017 10:57:26 -0300 #Mon, 12 Jun 2017 14:40:21 -0300
C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2= C\:\\Nexon\\MapleSolaxia\\MapleSolaxiaV2=

BIN
dist/MapleSolaxia.jar vendored

Binary file not shown.

View File

@@ -307,3 +307,6 @@ Implementa
11 Junho 2016, 11 Junho 2016,
Correção de alguns bugs vindos com o commit da OPQ. Correção de alguns bugs vindos com o commit da OPQ.
Incrementada a documentação referente aos métodos usados nos scripts de eventos. Incrementada a documentação referente aos métodos usados nos scripts de eventos.
12 Junho 2016,
Correção de falha em criação de guilds, não atribuindo corretamente o título de mestre da guild ao criador.

View File

@@ -138,9 +138,18 @@ function setup(level, lobbyid) {
return eim; return eim;
} }
function isTeamAllJobs(eim) {
var eventJobs = eim.getEventPlayersJobs();
var rangeJobs = parseInt('111110', 2);
return ((eventJobs & rangeJobs) == rangeJobs);
}
function afterSetup(eim) { function afterSetup(eim) {
var rnd = Math.floor(Math.random() * 4); if(isTeamAllJobs(eim)) {
eim.applyEventPlayersItemBuff(2022090 + rnd); var rnd = Math.floor(Math.random() * 4);
eim.applyEventPlayersItemBuff(2022090 + rnd);
}
} }
function respawnStages(eim) {} function respawnStages(eim) {}

View File

@@ -61,7 +61,7 @@ function action(mode, type, selection) {
cm.sendOk("Try using a Super Megaphone or asking your buddies or guild to join!"); cm.sendOk("Try using a Super Megaphone or asking your buddies or guild to join!");
cm.dispose(); cm.dispose();
} else if (selection == 2) { } else if (selection == 2) {
cm.sendOk("#e#b<Party Quest: Tower of Goddess>#k#n\r\nOur goddess has been missing since some time ago, rumor has it She has been seen last time inside the Tower of Goddess. Furthermore, our sanctuary has been seized by the overwhelming forces of the pixies, those beings that are recently wandering at the outskirts of Orbis. Their leader, Papa Pixie, currently holds the throne and may know Her whereabouts, so we urge to find a composition of brave heroes to charge into and claim back our sanctuary and rescue Her. Will you join us?\r\n"); cm.sendOk("#e#b<Party Quest: Tower of Goddess>#k#n\r\nOur goddess has been missing since some time ago, rumor has it She has been seen last time inside the Tower of Goddess. Furthermore, our sanctuary has been seized by the overwhelming forces of the pixies, those beings that are recently wandering at the outskirts of Orbis. Their leader, Papa Pixie, currently holds the throne and may know Her whereabouts, so we urge to find a composition of brave heroes to charge into and claim back our sanctuary and rescue Her. If your team is able to be a composite of every job niche available (Warrior, Magician, Bowman, Thief and Pirate), you guys will receive my blessings to aid you in battle. Will you aid us?\r\n");
cm.dispose(); cm.dispose();
} }
else { else {

View File

@@ -182,7 +182,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
private int currentPage, currentType = 0, currentTab = 1; private int currentPage, currentType = 0, currentTab = 1;
private int chair; private int chair;
private int itemEffect; private int itemEffect;
private int guildid, guildrank, allianceRank; private int guildid, guildRank, allianceRank;
private int messengerposition = 4; private int messengerposition = 4;
private int slots = 0; private int slots = 0;
private int energybar; private int energybar;
@@ -1203,11 +1203,11 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
this.closePlayerInteractions(); this.closePlayerInteractions();
client.announce(warpPacket); client.announce(warpPacket);
map.removePlayer(MapleCharacter.this); map.removePlayer(this);
if (client.getChannelServer().getPlayerStorage().getCharacterById(getId()) != null) { if (client.getChannelServer().getPlayerStorage().getCharacterById(getId()) != null) {
map = to; map = to;
setPosition(pos); setPosition(pos);
map.addPlayer(MapleCharacter.this); map.addPlayer(this);
if (party != null) { if (party != null) {
mpc.setMapId(to.getId()); mpc.setMapId(to.getId());
silentPartyUpdate(); silentPartyUpdate();
@@ -1808,7 +1808,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
} }
public void disbandGuild() { public void disbandGuild() {
if (guildid < 1 || guildrank != 1) { if (guildid < 1 || guildRank != 1) {
return; return;
} }
try { try {
@@ -2436,7 +2436,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
} }
public int getGuildRank() { public int getGuildRank() {
return guildrank; return guildRank;
} }
public int getHair() { public int getHair() {
@@ -3810,7 +3810,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
int mountlevel = rs.getInt("mountlevel"); int mountlevel = rs.getInt("mountlevel");
int mounttiredness = rs.getInt("mounttiredness"); int mounttiredness = rs.getInt("mounttiredness");
ret.guildid = rs.getInt("guildid"); ret.guildid = rs.getInt("guildid");
ret.guildrank = rs.getInt("guildrank"); ret.guildRank = rs.getInt("guildrank");
ret.allianceRank = rs.getInt("allianceRank"); ret.allianceRank = rs.getInt("allianceRank");
ret.familyId = rs.getInt("familyId"); ret.familyId = rs.getInt("familyId");
ret.bookCover = rs.getInt("monsterbookcover"); ret.bookCover = rs.getInt("monsterbookcover");
@@ -3820,9 +3820,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
ret.dojoPoints = rs.getInt("dojoPoints"); ret.dojoPoints = rs.getInt("dojoPoints");
ret.dojoStage = rs.getInt("lastDojoStage"); ret.dojoStage = rs.getInt("lastDojoStage");
ret.dataString = rs.getString("dataString"); ret.dataString = rs.getString("dataString");
if (ret.guildid > 0) { if (ret.guildid > 0) ret.mgc = new MapleGuildCharacter(ret);
ret.mgc = new MapleGuildCharacter(ret); // oh boy, that's quite funny
}
int buddyCapacity = rs.getInt("buddyCapacity"); int buddyCapacity = rs.getInt("buddyCapacity");
ret.buddylist = new BuddyList(buddyCapacity); ret.buddylist = new BuddyList(buddyCapacity);
ret.getInventory(MapleInventoryType.EQUIP).setSlotLimit(rs.getByte("equipslots")); ret.getInventory(MapleInventoryType.EQUIP).setSlotLimit(rs.getByte("equipslots"));
@@ -4639,7 +4637,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
try { try {
try (PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("UPDATE characters SET guildid = ?, guildrank = ?, allianceRank = ? WHERE id = ?")) { try (PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("UPDATE characters SET guildid = ?, guildrank = ?, allianceRank = ? WHERE id = ?")) {
ps.setInt(1, guildid); ps.setInt(1, guildid);
ps.setInt(2, guildrank); ps.setInt(2, guildRank);
ps.setInt(3, allianceRank); ps.setInt(3, allianceRank);
ps.setInt(4, id); ps.setInt(4, id);
ps.executeUpdate(); ps.executeUpdate();
@@ -5087,10 +5085,6 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
} }
} }
public void setAllianceRank(int rank) {
allianceRank = rank;
}
public void setAllowWarpToId(int id) { public void setAllowWarpToId(int id) {
this.warpToId = id; this.warpToId = id;
} }
@@ -5205,14 +5199,17 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
} }
} else { } else {
mgc = null; mgc = null;
guildRank = 5;
allianceRank = 5;
} }
} }
public void setGuildRank(int _rank) { public void setGuildRank(int _rank) {
guildrank = _rank; guildRank = _rank;
if (mgc != null) { }
mgc.setGuildRank(_rank);
} public void setAllianceRank(int _rank) {
allianceRank = _rank;
} }
public void setHair(int hair) { public void setHair(int hair) {

View File

@@ -499,11 +499,8 @@ public class Server implements Runnable {
} }
if(mc != null) { if(mc != null) {
MapleGuildCharacter mgc = mc.getMGC(); g.addGuildMember(mc.getMGC()); // i really REALLY must make player MGC the same as the guild MGC
if (mgc != null) { g.setOnline(mc.getId(), true, mc.getClient().getChannel());
g.setOnline(mgc.getId(), true, mgc.getChannel());
mc.setMGC(g.getMGC(mc.getId())); // i really REALLY must make player MGC the same as the guild MGC
}
} }
guilds.put(id, g); guilds.put(id, g);

View File

@@ -22,6 +22,7 @@
package net.server.channel.handlers; package net.server.channel.handlers;
import net.server.guild.MapleGuildResponse; import net.server.guild.MapleGuildResponse;
import net.server.guild.MapleGuildCharacter;
import net.server.guild.MapleGuild; import net.server.guild.MapleGuild;
import client.MapleClient; import client.MapleClient;
import net.AbstractMaplePacketHandler; import net.AbstractMaplePacketHandler;
@@ -30,7 +31,6 @@ import java.util.Iterator;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import client.MapleCharacter; import client.MapleCharacter;
import net.server.Server; import net.server.Server;
import net.server.guild.MapleAlliance;
public final class GuildOperationHandler extends AbstractMaplePacketHandler { public final class GuildOperationHandler extends AbstractMaplePacketHandler {
private boolean isGuildNameAcceptable(String name) { private boolean isGuildNameAcceptable(String name) {
@@ -123,16 +123,13 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
return; return;
} }
mc.gainMeso(-MapleGuild.CREATE_GUILD_COST, true, false, true); mc.gainMeso(-MapleGuild.CREATE_GUILD_COST, true, false, true);
mc.setGuildId(gid);
mc.setGuildRank(1);
mc.setAllianceRank(5);
MapleGuild guild = Server.getInstance().getGuild(mc.getGuildId(), c.getWorld(), mc); // initialize guild structure Server.getInstance().getWorld(mc.getWorld()).setGuildAndRank(mc.getId(), gid, 1);
guild.getMGC(guild.getLeaderId()).setCharacter(mc); Server.getInstance().setGuildMemberOnline(mc, true, mc.getClient().getChannel());
c.announce(MaplePacketCreator.showGuildInfo(mc)); c.announce(MaplePacketCreator.showGuildInfo(mc));
c.getPlayer().dropMessage(1, "You have successfully created a Guild."); c.getPlayer().dropMessage(1, "You have successfully created a Guild.");
respawnPlayer(mc);
break; break;
case 0x05: case 0x05:
if (mc.getGuildId() <= 0 || mc.getGuildRank() > 2) { if (mc.getGuildId() <= 0 || mc.getGuildRank() > 2) {

View File

@@ -47,7 +47,7 @@ public class MapleGuild {
private enum BCOp { private enum BCOp {
NONE, DISBAND, EMBLEMCHANGE NONE, DISBAND, EMBLEMCHANGE
} }
private List<MapleGuildCharacter> members; private final List<MapleGuildCharacter> members;
private String rankTitles[] = new String[5]; // 1 = master, 2 = jr, 5 = lowest member private String rankTitles[] = new String[5]; // 1 = master, 2 = jr, 5 = lowest member
private String name, notice; private String name, notice;
private int id, gp, logo, logoColor, leader, capacity, logoBG, logoBGColor, signature, allianceId; private int id, gp, logo, logoColor, leader, capacity, logoBG, logoBGColor, signature, allianceId;

View File

@@ -113,14 +113,24 @@ public class MapleGuildCharacter {
guildid = gid; guildid = gid;
} }
public void setGuildRank(int rank) {
guildrank = rank;
}
public int getGuildRank() { public int getGuildRank() {
return guildrank; return guildrank;
} }
public void setGuildRank(int rank) {
guildrank = rank;
if(character != null) character.setGuildRank(rank);
}
public int getAllianceRank() {
return allianceRank;
}
public void setAllianceRank(int rank) {
allianceRank = rank;
if(character != null) character.setAllianceRank(rank);
}
public boolean isOnline() { public boolean isOnline() {
return online; return online;
} }
@@ -133,15 +143,6 @@ public class MapleGuildCharacter {
return name; return name;
} }
public void setAllianceRank(int rank) {
allianceRank = rank;
if(character != null) character.setAllianceRank(rank);
}
public int getAllianceRank() {
return allianceRank;
}
@Override @Override
public boolean equals(Object other) { public boolean equals(Object other) {
if (!(other instanceof MapleGuildCharacter)) { if (!(other instanceof MapleGuildCharacter)) {

View File

@@ -266,7 +266,13 @@ public class World {
} else { } else {
bDifferentGuild = guildid != mc.getGuildId(); bDifferentGuild = guildid != mc.getGuildId();
mc.setGuildId(guildid); mc.setGuildId(guildid);
mc.setGuildRank(rank);
MapleGuildCharacter mgc = mc.getMGC();
if(mgc != null) {
mgc.setGuildRank(rank);
if(bDifferentGuild) mgc.setAllianceRank(5);
}
mc.saveGuildStatus(); mc.saveGuildStatus();
} }
if (bDifferentGuild) { if (bDifferentGuild) {

View File

@@ -117,6 +117,18 @@ public class EventInstanceManager {
return em; return em;
} }
public int getEventPlayersJobs() {
//Bits -> 0: BEGINNER 1: WARRIOR 2: MAGICIAN
// 3: BOWMAN 4: THIEF 5: PIRATE
int mask = 0;
for(MapleCharacter chr: getPlayers()) {
mask |= (1 << chr.getJob().getJobNiche());
}
return mask;
}
public void applyEventPlayersItemBuff(int itemId) { public void applyEventPlayersItemBuff(int itemId) {
List<MapleCharacter> players = getPlayerList(); List<MapleCharacter> players = getPlayerList();
MapleStatEffect mse = MapleItemInformationProvider.getInstance().getItemEffect(itemId); MapleStatEffect mse = MapleItemInformationProvider.getInstance().getItemEffect(itemId);

View File

@@ -3730,8 +3730,6 @@ public class MaplePacketCreator {
if (g == null) { //failed to read from DB - don't show a guild if (g == null) { //failed to read from DB - don't show a guild
mplew.write(0); mplew.write(0);
return mplew.getPacket(); return mplew.getPacket();
} else {
c.setGuildRank(c.getGuildRank());
} }
mplew.write(1); //bInGuild mplew.write(1); //bInGuild
mplew.writeInt(g.getId()); mplew.writeInt(g.getId());