mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-01-10 22:03:03 +08:00
Move gadget/monster creation events to after they are spawned in scene
This commit is contained in:
parent
512021b234
commit
cd77fb90a3
@ -28,6 +28,8 @@ import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
|
|||||||
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
|
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
|
||||||
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
|
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
|
||||||
import emu.grasscutter.net.proto.WorktopInfoOuterClass.WorktopInfo;
|
import emu.grasscutter.net.proto.WorktopInfoOuterClass.WorktopInfo;
|
||||||
|
import emu.grasscutter.scripts.constants.EventType;
|
||||||
|
import emu.grasscutter.scripts.data.ScriptArgs;
|
||||||
import emu.grasscutter.server.packet.send.PacketGadgetStateNotify;
|
import emu.grasscutter.server.packet.send.PacketGadgetStateNotify;
|
||||||
import emu.grasscutter.utils.Position;
|
import emu.grasscutter.utils.Position;
|
||||||
import emu.grasscutter.utils.ProtoHelper;
|
import emu.grasscutter.utils.ProtoHelper;
|
||||||
@ -139,6 +141,12 @@ public class EntityGadget extends EntityBaseGadget {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
// Lua event
|
||||||
|
getScene().getScriptManager().callEvent(EventType.EVENT_GADGET_CREATE, new ScriptArgs(this.getConfigId()));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeath(int killerId) {
|
public void onDeath(int killerId) {
|
||||||
|
|
||||||
|
@ -110,6 +110,12 @@ public class EntityMonster extends GameEntity {
|
|||||||
this.poseId = poseId;
|
this.poseId = poseId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate() {
|
||||||
|
// Lua event
|
||||||
|
getScene().getScriptManager().callEvent(EventType.EVENT_ANY_MONSTER_LIVE, new ScriptArgs(this.getConfigId()));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeath(int killerId) {
|
public void onDeath(int killerId) {
|
||||||
if (this.getSpawnEntry() != null) {
|
if (this.getSpawnEntry() != null) {
|
||||||
|
@ -108,10 +108,6 @@ public abstract class GameEntity {
|
|||||||
this.lastMoveReliableSeq = lastMoveReliableSeq;
|
this.lastMoveReliableSeq = lastMoveReliableSeq;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract SceneEntityInfo toProto();
|
|
||||||
|
|
||||||
public abstract void onDeath(int killerId);
|
|
||||||
|
|
||||||
public void setFightProperty(FightProperty prop, float value) {
|
public void setFightProperty(FightProperty prop, float value) {
|
||||||
this.getFightProperties().put(prop.getId(), value);
|
this.getFightProperties().put(prop.getId(), value);
|
||||||
}
|
}
|
||||||
@ -219,4 +215,21 @@ public abstract class GameEntity {
|
|||||||
getScene().killEntity(this, 0);
|
getScene().killEntity(this, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when this entity is added to the world
|
||||||
|
*/
|
||||||
|
public void onCreate() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when this entity dies
|
||||||
|
* @param killerId Entity id of the entity that killed this entity
|
||||||
|
*/
|
||||||
|
public void onDeath(int killerId) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract SceneEntityInfo toProto();
|
||||||
}
|
}
|
||||||
|
@ -311,6 +311,7 @@ public class Scene {
|
|||||||
|
|
||||||
private void addEntityDirectly(GameEntity entity) {
|
private void addEntityDirectly(GameEntity entity) {
|
||||||
getEntities().put(entity.getId(), entity);
|
getEntities().put(entity.getId(), entity);
|
||||||
|
entity.onCreate(); // Call entity create event
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void addEntity(GameEntity entity) {
|
public synchronized void addEntity(GameEntity entity) {
|
||||||
|
@ -371,9 +371,6 @@ public class SceneScriptManager {
|
|||||||
this.getScriptMonsterSpawnService()
|
this.getScriptMonsterSpawnService()
|
||||||
.onMonsterCreatedListener.forEach(action -> action.onNotify(entity));
|
.onMonsterCreatedListener.forEach(action -> action.onNotify(entity));
|
||||||
|
|
||||||
// Lua event
|
|
||||||
callEvent(EventType.EVENT_ANY_MONSTER_LIVE, new ScriptArgs(entity.getConfigId()));
|
|
||||||
|
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user