mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-25 10:51:47 +00:00
Fixes for alchemy dude's quest part 2 (#2362)
* Make platforms able to reset platforms apparently are able to run again once reaching the last point. As well, canceling a timer seems to return a 0, not a 1 * Fix Seelies Added HandlerClientScriptEventNotify (shoutouts to Hartie!) and cleaned up the platform stuff in ScriptLib. There is a problem with HandlerClientScriptEventNotify where the client seems to only pass 0 into param1 instead of the configId. I coded in a workaround, but someone with greater access to things should check up on what is going on
This commit is contained in:
parent
f955bb1e16
commit
84e1371499
@ -256,6 +256,9 @@ public class EntityGadget extends EntityBaseGadget {
|
|||||||
var route = this.getScene().getSceneRouteById(configRoute.getRouteId());
|
var route = this.getScene().getSceneRouteById(configRoute.getRouteId());
|
||||||
if (route != null) {
|
if (route != null) {
|
||||||
var points = route.getPoints();
|
var points = route.getPoints();
|
||||||
|
if (configRoute.getStartIndex() == points.length - 1) {
|
||||||
|
configRoute.setStartIndex(0);
|
||||||
|
}
|
||||||
val currIndex = configRoute.getStartIndex();
|
val currIndex = configRoute.getStartIndex();
|
||||||
|
|
||||||
Position prevpos;
|
Position prevpos;
|
||||||
@ -301,6 +304,9 @@ public class EntityGadget extends EntityBaseGadget {
|
|||||||
}
|
}
|
||||||
configRoute.setStartIndex(I);
|
configRoute.setStartIndex(I);
|
||||||
this.position.set(points[I].getPos());
|
this.position.set(points[I].getPos());
|
||||||
|
if(I == points.length - 1) {
|
||||||
|
configRoute.setStarted(false);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
(int) time));
|
(int) time));
|
||||||
}
|
}
|
||||||
|
@ -1180,7 +1180,7 @@ public class SceneScriptManager {
|
|||||||
|
|
||||||
Grasscutter.getLogger()
|
Grasscutter.getLogger()
|
||||||
.warn("trying to cancel a timer that's not active {} {}", groupID, source);
|
.warn("trying to cancel a timer that's not active {} {}", groupID, source);
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo use killed monsters instead of spawned entites for check?
|
// todo use killed monsters instead of spawned entites for check?
|
||||||
|
@ -1330,9 +1330,8 @@ public class ScriptLib {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO check
|
|
||||||
public int SetPlatformRouteId(int entityConfigId, int routeId){
|
public int SetPlatformRouteId(int entityConfigId, int routeId){
|
||||||
logger.info("[LUA] Call SetPlatformRouteId {} {}", entityConfigId, routeId);
|
logger.debug("[LUA] Call SetPlatformRouteId {} {}", entityConfigId, routeId);
|
||||||
|
|
||||||
val entity = getSceneScriptManager().getScene().getEntityByConfigId(entityConfigId);
|
val entity = getSceneScriptManager().getScene().getEntityByConfigId(entityConfigId);
|
||||||
if(entity == null){
|
if(entity == null){
|
||||||
@ -1365,12 +1364,9 @@ public class ScriptLib {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO check
|
|
||||||
public int StartPlatform(int configId){
|
public int StartPlatform(int configId){
|
||||||
logger.debug("[LUA] Call StartPlatform {} ", configId);
|
logger.debug("[LUA] Call StartPlatform {} ", configId);
|
||||||
|
|
||||||
val entity = sceneScriptManager.get().getScene().getEntityByConfigId(configId);
|
val entity = sceneScriptManager.get().getScene().getEntityByConfigId(configId);
|
||||||
|
|
||||||
if(!(entity instanceof EntityGadget entityGadget)) {
|
if(!(entity instanceof EntityGadget entityGadget)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1378,9 +1374,8 @@ public class ScriptLib {
|
|||||||
return entityGadget.startPlatform() ? 0 : 2;
|
return entityGadget.startPlatform() ? 0 : 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO check
|
|
||||||
public int StopPlatform(int configId){
|
public int StopPlatform(int configId){
|
||||||
logger.info("[LUA] Call StopPlatform {} ", configId);
|
logger.debug("[LUA] Call StopPlatform {} ", configId);
|
||||||
val entity = sceneScriptManager.get().getScene().getEntityByConfigId(configId);
|
val entity = sceneScriptManager.get().getScene().getEntityByConfigId(configId);
|
||||||
if(!(entity instanceof EntityGadget entityGadget)) {
|
if(!(entity instanceof EntityGadget entityGadget)) {
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package emu.grasscutter.server.packet.recv;
|
||||||
|
|
||||||
|
import emu.grasscutter.Grasscutter;
|
||||||
|
import emu.grasscutter.net.packet.Opcodes;
|
||||||
|
import emu.grasscutter.net.packet.PacketHandler;
|
||||||
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.ClientScriptEventNotifyOuterClass.ClientScriptEventNotify;
|
||||||
|
import emu.grasscutter.scripts.constants.EventType;
|
||||||
|
import emu.grasscutter.scripts.data.ScriptArgs;
|
||||||
|
import emu.grasscutter.server.game.GameSession;
|
||||||
|
import lombok.val;
|
||||||
|
|
||||||
|
@Opcodes(PacketOpcodes.ClientScriptEventNotify)
|
||||||
|
public class HandlerClientScriptEventNotify extends PacketHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||||
|
val data = ClientScriptEventNotify.parseFrom(payload);
|
||||||
|
val scriptManager = session.getPlayer().getScene().getScriptManager();
|
||||||
|
val args = new ScriptArgs(0, data.getEventType())
|
||||||
|
.setSourceEntityId(data.getSourceEntityId())
|
||||||
|
.setTargetEntityId(data.getTargetEntityId());
|
||||||
|
|
||||||
|
for (int i = 0; i < data.getParamListCount(); i++) {
|
||||||
|
switch (i) {
|
||||||
|
case 0 -> args.setParam1(data.getParamList(i));
|
||||||
|
case 1 -> args.setParam2(data.getParamList(i));
|
||||||
|
case 2 -> args.setParam3(data.getParamList(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data.getEventType() == EventType.EVENT_AVATAR_NEAR_PLATFORM){
|
||||||
|
if(data.getParamList(0) == 0) {
|
||||||
|
Grasscutter.getLogger().debug("Found a zero Param1 for an EVENT_AVATAR_NEAR_PLATFORM. Doing the configID workaround.");
|
||||||
|
val entity = session.getPlayer().getScene().getEntityById(data.getSourceEntityId());
|
||||||
|
if(entity == null) {
|
||||||
|
Grasscutter.getLogger().debug("But it failed.");
|
||||||
|
} else {
|
||||||
|
args.setParam1(entity.getConfigId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scriptManager.callEvent(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user