mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-23 21:47:39 +00:00
Fix the bug that can't kill command-generated monsters
Command-generated monsters do not have spawnentry so we have to get data from getMonsterData
This commit is contained in:
parent
f1211eca09
commit
0d5dc5ec31
@ -216,7 +216,7 @@ public abstract class GameEntity {
|
|||||||
|
|
||||||
// Check if dead
|
// Check if dead
|
||||||
if (isDead) {
|
if (isDead) {
|
||||||
getScene().killEntity(this, 0);
|
getScene().killEntity(this, killerId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import dev.morphia.annotations.Transient;
|
|||||||
import emu.grasscutter.data.GameData;
|
import emu.grasscutter.data.GameData;
|
||||||
import emu.grasscutter.data.def.CodexAnimalData;
|
import emu.grasscutter.data.def.CodexAnimalData;
|
||||||
import emu.grasscutter.data.def.CodexReliquaryData;
|
import emu.grasscutter.data.def.CodexReliquaryData;
|
||||||
|
import emu.grasscutter.game.entity.EntityMonster;
|
||||||
import emu.grasscutter.game.entity.GameEntity;
|
import emu.grasscutter.game.entity.GameEntity;
|
||||||
import emu.grasscutter.game.inventory.GameItem;
|
import emu.grasscutter.game.inventory.GameItem;
|
||||||
import emu.grasscutter.game.inventory.ItemType;
|
import emu.grasscutter.game.inventory.ItemType;
|
||||||
@ -79,22 +80,21 @@ public class PlayerCodex {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void checkAnimal(GameEntity target, CodexAnimalData.CodexAnimalUnlockCondition condition){
|
public void checkAnimal(GameEntity target, CodexAnimalData.CodexAnimalUnlockCondition condition){
|
||||||
if(target.getEntityType() == 2){
|
if(target instanceof EntityMonster){
|
||||||
var monsterId = target.getSpawnEntry().getMonsterId();
|
var monsterId = ((EntityMonster)target).getMonsterData().getId();
|
||||||
var codexAnimal = GameData.getCodexAnimalDataMap().get(monsterId);
|
var codexAnimal = GameData.getCodexAnimalDataMap().get(monsterId);
|
||||||
|
|
||||||
if(!getUnlockedAnimal().containsKey(monsterId)) {
|
if(!getUnlockedAnimal().containsKey(monsterId)) {
|
||||||
if (codexAnimal != null) {
|
if (codexAnimal != null) {
|
||||||
if(codexAnimal.getUnlockCondition() == condition){
|
if(codexAnimal.getUnlockCondition() == condition || codexAnimal.getUnlockCondition() == null){
|
||||||
getUnlockedAnimal().put(monsterId, 1);
|
getUnlockedAnimal().put(monsterId, 1);
|
||||||
player.save();
|
|
||||||
this.player.sendPacket(new PacketCodexDataUpdateNotify(3, monsterId));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
getUnlockedAnimal().put(monsterId, getUnlockedAnimal().get(monsterId) + 1);
|
getUnlockedAnimal().put(monsterId, getUnlockedAnimal().get(monsterId) + 1);
|
||||||
player.save();
|
|
||||||
}
|
}
|
||||||
|
player.save();
|
||||||
|
this.player.sendPacket(new PacketCodexDataUpdateNotify(3, monsterId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
|||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||||
import org.danilopianini.util.SpatialIndex;
|
import org.danilopianini.util.SpatialIndex;
|
||||||
|
import org.quartz.Trigger;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@ -386,9 +387,19 @@ public class Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void killEntity(GameEntity target, int attackerId) {
|
public void killEntity(GameEntity target, int attackerId) {
|
||||||
for (Player player : this.getPlayers()) {
|
GameEntity attacker = getEntityById(attackerId);
|
||||||
player.getCodex().checkAnimal(target, CodexAnimalData.CodexAnimalUnlockCondition.CODEX_COUNT_TYPE_KILL);
|
|
||||||
|
//Check codex
|
||||||
|
if (attacker instanceof EntityClientGadget) {
|
||||||
|
var clientGadgetOwner = getEntityById(((EntityClientGadget) attacker).getOwnerEntityId());
|
||||||
|
if(clientGadgetOwner instanceof EntityAvatar) {
|
||||||
|
((EntityClientGadget) attacker).getOwner().getCodex().checkAnimal(target, CodexAnimalData.CodexAnimalUnlockCondition.CODEX_COUNT_TYPE_KILL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if (attacker instanceof EntityAvatar) {
|
||||||
|
((EntityAvatar) attacker).getPlayer().getCodex().checkAnimal(target, CodexAnimalData.CodexAnimalUnlockCondition.CODEX_COUNT_TYPE_KILL);
|
||||||
|
}
|
||||||
|
|
||||||
// Packet
|
// Packet
|
||||||
this.broadcastPacket(new PacketLifeStateChangeNotify(attackerId, target, LifeState.LIFE_DEAD));
|
this.broadcastPacket(new PacketLifeStateChangeNotify(attackerId, target, LifeState.LIFE_DEAD));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user