Skip to content
Snippets Groups Projects
Commit b92cc6a8 authored by Akka's avatar Akka Committed by Melledy
Browse files

fix some region errors

parent 4cd31af0
Branches
Tags
No related merge requests found
......@@ -71,4 +71,8 @@ public class EntityRegion extends GameEntity{
*/
return null;
}
public int getFirstEntityId() {
return entities.stream().findFirst().orElse(0);
}
}
......@@ -7,6 +7,7 @@ import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.MonsterData;
import emu.grasscutter.data.excels.WorldLevelData;
import emu.grasscutter.game.entity.*;
import emu.grasscutter.game.props.EntityType;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.net.proto.VisionTypeOuterClass;
import emu.grasscutter.scripts.constants.EventType;
......@@ -167,11 +168,11 @@ public class SceneScriptManager {
public boolean isInit() {
return isInit;
}
public void loadBlockFromScript(SceneBlock block) {
block.load(scene.getId(), meta.context);
}
public void loadGroupFromScript(SceneGroup group) {
group.load(getScene().getId());
......@@ -188,13 +189,17 @@ public class SceneScriptManager {
}
for (var region : this.regions.values()) {
// currently all condition_ENTER_REGION Events check for avatar, so we have no necessary to add other types of entity
getScene().getEntities().values()
.stream()
.filter(e -> e.getEntityType() <= 2 && region.getMetaRegion().contains(e.getPosition()))
.filter(e -> e.getEntityType() == EntityType.Avatar.getValue() && region.getMetaRegion().contains(e.getPosition()))
.forEach(region::addEntity);
if (region.hasNewEntities()) {
callEvent(EventType.EVENT_ENTER_REGION, new ScriptArgs(region.getConfigId()).setSourceEntityId(region.getId()));
callEvent(EventType.EVENT_ENTER_REGION, new ScriptArgs(region.getConfigId())
.setSourceEntityId(region.getId())
.setTargetEntityId(region.getFirstEntityId())
);
region.resetNewEntities();
}
......@@ -409,18 +414,18 @@ public class SceneScriptManager {
this.getScriptMonsterSpawnService()
.onMonsterCreatedListener.forEach(action -> action.onNotify(entity));
return entity;
}
public void addEntity(GameEntity gameEntity){
getScene().addEntity(gameEntity);
}
public void meetEntities(List<? extends GameEntity> gameEntity){
getScene().addEntities(gameEntity, VisionTypeOuterClass.VisionType.VISION_TYPE_MEET);
}
public void addEntities(List<? extends GameEntity> gameEntity){
getScene().addEntities(gameEntity);
}
......
......@@ -6,9 +6,13 @@ import emu.grasscutter.game.entity.EntityMonster;
import emu.grasscutter.game.entity.GameEntity;
import emu.grasscutter.game.entity.gadget.GadgetWorktop;
import emu.grasscutter.game.dungeons.challenge.factory.ChallengeFactory;
import emu.grasscutter.game.props.EntityType;
import emu.grasscutter.game.quest.enums.QuestState;
import emu.grasscutter.game.quest.enums.QuestTrigger;
import emu.grasscutter.scripts.data.SceneGroup;
import emu.grasscutter.scripts.data.SceneRegion;
import emu.grasscutter.server.packet.send.PacketCanUseSkillNotify;
import emu.grasscutter.server.packet.send.PacketDungeonShowReminderNotify;
import emu.grasscutter.server.packet.send.PacketWorktopOptionNotify;
import io.netty.util.concurrent.FastThreadLocal;
import org.luaj.vm2.LuaTable;
......@@ -502,4 +506,47 @@ public class ScriptLib {
return 1;
}
public int GetEntityType(int entityId){
var entity = getSceneScriptManager().getScene().getEntityById(entityId);
if(entity == null){
return EntityType.None.getValue();
}
return entity.getEntityType();
}
public int GetQuestState(int entityId, int questId){
var player = getSceneScriptManager().getScene().getWorld().getHost();
var quest = player.getQuestManager().getQuestById(questId);
if(quest == null){
return QuestState.QUEST_STATE_NONE.getValue();
}
return quest.getState().getValue();
}
public int ShowReminder(int reminderId){
getSceneScriptManager().getScene().broadcastPacket(new PacketDungeonShowReminderNotify(reminderId));
return 0;
}
public int RemoveEntityByConfigId(int groupId, int entityType, int configId){
logger.debug("[LUA] Call RemoveEntityByConfigId");
var entity = getSceneScriptManager().getScene().getEntities().values().stream()
.filter(e -> e.getGroupId() == groupId)
.filter(e -> e.getEntityType() == entityType)
.filter(e -> e.getConfigId() == configId)
.findFirst();
if(entity.isEmpty()){
return 1;
}
getSceneScriptManager().getScene().removeEntity(entity.get());
return 0;
}
}
......@@ -2,6 +2,7 @@ package emu.grasscutter.scripts;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.game.props.EntityType;
import emu.grasscutter.game.quest.enums.QuestState;
import emu.grasscutter.scripts.constants.EventType;
import emu.grasscutter.scripts.constants.ScriptGadgetState;
import emu.grasscutter.scripts.constants.ScriptRegionShape;
......@@ -67,6 +68,10 @@ public class ScriptLoader {
Arrays.stream(EntityType.values()).forEach(e -> table.set(e.name().toUpperCase(), e.getValue()));
ctx.globals.set("EntityType", table);
LuaTable table1 = new LuaTable();
Arrays.stream(QuestState.values()).forEach(e -> table1.set(e.name().toUpperCase(), e.getValue()));
ctx.globals.set("QuestState", table1);
ctx.globals.set("EventType", CoerceJavaToLua.coerce(new EventType())); // TODO - make static class to avoid instantiating a new class every scene
ctx.globals.set("GadgetState", CoerceJavaToLua.coerce(new ScriptGadgetState()));
ctx.globals.set("RegionShape", CoerceJavaToLua.coerce(new ScriptRegionShape()));
......
......@@ -5,9 +5,9 @@ public class ScriptArgs {
public int param2;
public int param3;
public int source_eid; // Source entity
public int target_eid;
public ScriptArgs() {
}
public ScriptArgs(int param1) {
......@@ -54,4 +54,13 @@ public class ScriptArgs {
this.source_eid = source_eid;
return this;
}
public int getTargetEntityId() {
return target_eid;
}
public ScriptArgs setTargetEntityId(int target_eid) {
this.target_eid = target_eid;
return this;
}
}
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.DungeonShowReminderNotifyOuterClass;
public class PacketDungeonShowReminderNotify extends BasePacket {
public PacketDungeonShowReminderNotify(int reminderId) {
super(PacketOpcodes.DungeonShowReminderNotify);
var proto = DungeonShowReminderNotifyOuterClass.DungeonShowReminderNotify.newBuilder();
proto.setReminderId(reminderId);
this.setData(proto);
}
}
......@@ -18,8 +18,9 @@ public class PacketGroupSuiteNotify extends BasePacket {
var proto = GroupSuiteNotifyOuterClass.GroupSuiteNotify.newBuilder();
npcBornEntries.forEach(x ->
x.getSuiteIdList().forEach(y ->
npcBornEntries.stream()
.filter(x -> x.getGroupId() > 0 && x.getSuiteIdList() != null)
.forEach(x -> x.getSuiteIdList().forEach(y ->
proto.putGroupMap(x.getGroupId(), y)
));
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment