Party loot & Mob Skill cooldown patch
Fixed an issue with party loot that started from recent updates. Implemented party loot permission update for players ingressing a party. Fixed mob skills not using cooldown time.
This commit is contained in:
@@ -1018,13 +1018,15 @@ public class MapleMap {
|
||||
unregisterItemDrop(mdrop);
|
||||
}
|
||||
|
||||
public void updatePlayerItemDrops(int partyid, int charid, List<MapleCharacter> partyMembers, MapleCharacter partyLeaver) {
|
||||
for(MapleMapItem mdrop : getDroppedItems()) {
|
||||
if(mdrop.getOwnerId() == charid) {
|
||||
public List<MapleMapItem> updatePlayerItemDropsToParty(int partyid, int charid, List<MapleCharacter> partyMembers, MapleCharacter partyLeaver) {
|
||||
List<MapleMapItem> partyDrops = new LinkedList<>();
|
||||
|
||||
for (MapleMapItem mdrop : getDroppedItems()) {
|
||||
if (mdrop.getOwnerId() == charid) {
|
||||
mdrop.lockItem();
|
||||
try {
|
||||
if (mdrop.isPickedUp()) {
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
mdrop.setPartyOwnerId(partyid);
|
||||
@@ -1032,21 +1034,21 @@ public class MapleMap {
|
||||
byte[] removePacket = MaplePacketCreator.silentRemoveItemFromMap(mdrop.getObjectId());
|
||||
byte[] updatePacket = MaplePacketCreator.updateMapItemObject(mdrop, partyLeaver == null);
|
||||
|
||||
for(MapleCharacter mc : partyMembers) {
|
||||
if(this.equals(mc.getMap())) {
|
||||
for (MapleCharacter mc : partyMembers) {
|
||||
if (this.equals(mc.getMap())) {
|
||||
mc.announce(removePacket);
|
||||
|
||||
if(mc.needQuestItem(mdrop.getQuest(), mdrop.getItemId())) {
|
||||
if (mc.needQuestItem(mdrop.getQuest(), mdrop.getItemId())) {
|
||||
mc.announce(updatePacket);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(partyLeaver != null) {
|
||||
if(this.equals(partyLeaver.getMap())) {
|
||||
if (partyLeaver != null) {
|
||||
if (this.equals(partyLeaver.getMap())) {
|
||||
partyLeaver.announce(removePacket);
|
||||
|
||||
if(partyLeaver.needQuestItem(mdrop.getQuest(), mdrop.getItemId())) {
|
||||
if (partyLeaver.needQuestItem(mdrop.getQuest(), mdrop.getItemId())) {
|
||||
partyLeaver.announce(MaplePacketCreator.updateMapItemObject(mdrop, true));
|
||||
}
|
||||
}
|
||||
@@ -1054,6 +1056,36 @@ public class MapleMap {
|
||||
} finally {
|
||||
mdrop.unlockItem();
|
||||
}
|
||||
} else if (partyid != -1 && mdrop.getPartyOwnerId() == partyid) {
|
||||
partyDrops.add(mdrop);
|
||||
}
|
||||
}
|
||||
|
||||
return partyDrops;
|
||||
}
|
||||
|
||||
public void updatePartyItemDropsToNewcomer(MapleCharacter newcomer, List<MapleMapItem> partyItems) {
|
||||
for (MapleMapItem mdrop : partyItems) {
|
||||
mdrop.lockItem();
|
||||
try {
|
||||
if (mdrop.isPickedUp()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
byte[] removePacket = MaplePacketCreator.silentRemoveItemFromMap(mdrop.getObjectId());
|
||||
byte[] updatePacket = MaplePacketCreator.updateMapItemObject(mdrop, true);
|
||||
|
||||
if (newcomer != null) {
|
||||
if (this.equals(newcomer.getMap())) {
|
||||
newcomer.announce(removePacket);
|
||||
|
||||
if (newcomer.needQuestItem(mdrop.getQuest(), mdrop.getItemId())) {
|
||||
newcomer.announce(updatePacket);
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
mdrop.unlockItem();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ package server.maps;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import client.inventory.Item;
|
||||
import constants.ServerConstants;
|
||||
import java.awt.Point;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import tools.MaplePacketCreator;
|
||||
@@ -109,20 +108,18 @@ public class MapleMapItem extends AbstractMapleMapObject {
|
||||
party_ownerid = partyid;
|
||||
}
|
||||
|
||||
public final int getClientsideOwnerId(MapleCharacter player) {
|
||||
public final int getClientsideOwnerId() { // thanks nozphex (RedHat) for noting an issue with collecting party items
|
||||
if (this.party_ownerid == -1) {
|
||||
return this.character_ownerid;
|
||||
} else {
|
||||
if (!partyDrop && player.getId() == this.character_ownerid) {
|
||||
return player.getId();
|
||||
} else if (player.getPartyId() == this.party_ownerid) {
|
||||
return player.getId();
|
||||
} else {
|
||||
return this.party_ownerid;
|
||||
}
|
||||
return this.party_ownerid;
|
||||
}
|
||||
}
|
||||
|
||||
public final boolean hasClientsideOwnership(MapleCharacter player) {
|
||||
return this.character_ownerid == player.getId() || this.party_ownerid == player.getPartyId() || hasExpiredOwnershipTime();
|
||||
}
|
||||
|
||||
public final boolean isFFADrop() {
|
||||
return type == 2 || type == 3 || hasExpiredOwnershipTime();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user