mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-22 20:04:56 +01:00
Implement a new item drops system (#2112)
* 1 * Delete .gitattributes * implement * Update PacketDropHintNotify.java * Update PacketWorldChestOpenNotify.java * Update FileUtils.java * Update PacketDropHintNotify.java * Update WorldDataSystem.java --------- Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
This commit is contained in:
@@ -17,6 +17,7 @@ import emu.grasscutter.game.dungeons.challenge.WorldChallenge;
|
||||
import emu.grasscutter.game.dungeons.enums.DungeonPassConditionType;
|
||||
import emu.grasscutter.game.entity.*;
|
||||
import emu.grasscutter.game.entity.gadget.GadgetWorktop;
|
||||
import emu.grasscutter.game.inventory.GameItem;
|
||||
import emu.grasscutter.game.managers.blossom.BlossomManager;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.game.player.TeamInfo;
|
||||
@@ -39,11 +40,17 @@ import emu.grasscutter.server.packet.send.*;
|
||||
import emu.grasscutter.utils.KahnsSort;
|
||||
import emu.grasscutter.utils.Position;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.val;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.val;
|
||||
@@ -300,12 +307,33 @@ public final class Scene {
|
||||
player.sendPacket(new PacketSceneEntityAppearNotify(entity));
|
||||
}
|
||||
|
||||
public void addDropEntity(GameItem item, GameEntity bornForm, Player player, boolean share) {
|
||||
// TODO:optimize EntityItem.java. Maybe we should make other players can't see
|
||||
// the ItemEntity.
|
||||
ItemData itemData = GameData.getItemDataMap().get(item.getItemId());
|
||||
if (itemData == null)
|
||||
return;
|
||||
if (itemData.isEquip()) {
|
||||
float range = (1.5f + (.05f * item.getCount()));
|
||||
for (int j = 0; j < item.getCount(); j++) {
|
||||
Position pos = bornForm.getPosition().nearby2d(range).addY(0.5f);
|
||||
EntityItem entity = new EntityItem(this, player, itemData, pos, item.getCount(), share);
|
||||
addEntity(entity);
|
||||
}
|
||||
} else {
|
||||
EntityItem entity = new EntityItem(this, player, itemData, bornForm.getPosition().clone().addY(0.5f),
|
||||
item.getCount(), share);
|
||||
addEntity(entity);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void addEntities(Collection<? extends GameEntity> entities) {
|
||||
addEntities(entities, VisionType.VISION_TYPE_BORN);
|
||||
}
|
||||
|
||||
public synchronized void addEntities(
|
||||
Collection<? extends GameEntity> entities, VisionType visionType) {
|
||||
Collection<? extends GameEntity> entities, VisionType visionType) {
|
||||
if (entities == null || entities.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
@@ -419,7 +447,10 @@ public final class Scene {
|
||||
|
||||
// Reward drop
|
||||
if (target instanceof EntityMonster && this.getSceneType() != SceneType.SCENE_DUNGEON) {
|
||||
getWorld().getServer().getDropSystem().callDrop((EntityMonster) target);
|
||||
if (!getWorld().getServer().getDropSystem().handleMonsterDrop((EntityMonster) target)) {
|
||||
Grasscutter.getLogger().warn("Can not solve monster drop: drop_id = {} , drop_tag = {}.Fallback to legacy drop system.", ((EntityMonster) target).getMetaMonster().drop_id, ((EntityMonster) target).getMetaMonster().drop_tag);
|
||||
getWorld().getServer().getDropSystemLegacy().callDrop((EntityMonster) target);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove entity from world
|
||||
|
||||
@@ -57,6 +57,7 @@ public class WorldDataSystem extends BaseGameSystem {
|
||||
return chestInteractHandlerMap;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public RewardPreviewData getRewardByBossId(int monsterId) {
|
||||
var investigationMonsterData =
|
||||
GameData.getInvestigationMonsterDataMap().values().parallelStream()
|
||||
@@ -92,7 +93,7 @@ public class WorldDataSystem extends BaseGameSystem {
|
||||
WorldLevelData worldLevelData = GameData.getWorldLevelDataMap().get(world.getWorldLevel());
|
||||
|
||||
if (worldLevelData != null) {
|
||||
level = worldLevelData.getMonsterLevel();
|
||||
level = Math.max(level, worldLevelData.getMonsterLevel());
|
||||
}
|
||||
return level;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user