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:
ronancpl
2019-04-06 23:57:27 -03:00
parent ee23a9405a
commit 0b80389971
6 changed files with 70 additions and 28 deletions
+42 -10
View File
@@ -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();
}
}
}
+6 -9
View File
@@ -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();
}