Unverified Commit 5ffc07cf authored by GanyusLeftHorn's avatar GanyusLeftHorn Committed by GitHub
Browse files

3.1 Support (#1808)



* Update 3.0 protos

* Update classes to match protos

* Fix RegionHandler versions

* 3.0 Opcodes

* Fixed Gadget Spawning

Original Commit Message: fixed gadget spawning ty MJDerp
Gitea Author: yh0Nathan
Co-authored-by: default avataryh0Nathan <yhonathancaleb@gmail.com>

* Make PointData compatible with alternative PointData

Original Commit Message: Make PointData compatible with windied scene points.
Gitea Author: GanyusLeftHorn
Co-authored-by: default avatarGanyusLeftHorn <1244229+GanyusLeftHorn@users.noreply.github.com>

* Add scene tag for Vanarana.

Original Commit Message: Add scene tag for Vanarana.
Gitea Author: GanyusLeftHorn
Co-authored-by: default avatarGanyusLeftHorn <1244229+GanyusLeftHorn@users.noreply.github.com>

* Add Sumeru expeditions.

Original Commit Message: Add Sumeru expeditions.
Gitea Author: GanyusLeftHorn
Co-authored-by: default avatarGanyusLeftHorn <1244229+GanyusLeftHorn@users.noreply.github.com>

* Update game version to 3.0.0

* versionFix must be >= 50 not == 50 in RegionHandler

* Add new 3.0 Reliquary and SkillParticleGeneration data

Original Commit Message: Repair 3.0 added Reliquary 3-in-1 on the crafting table. Add skill particle generation info for Tighnari,Collei and Dori
Gitea Author: Roly

* Actually fix RegionHandler

* Remove asset names from json and comments

* Add scene areas for Sumeru desert to /prop um

* Added New MaterialType

* Change version to 3.1.0

* funny welcome message back

* Fix pyramid skill issue.

* Fix pyramid and event scene tags without ugly bruteforce.

* Remove backrooms chat welcome message.

* Incorporate suggestions.

* RoomSceneId and empty list checking.
Co-authored-by: default avatarBenj <benjamin7006@gmail.com>
Co-authored-by: default avataryh0Nathan <yhonathancaleb@gmail.com>
Co-authored-by: default avatarKokoboy <anushkumar222001@gmail.com>
Co-authored-by: default avatarnitro <31241699+nitrog0d@users.noreply.github.com>
Co-authored-by: default avatarVexeone <vexeone@gmail.com>
parent 41542297
...@@ -6,7 +6,7 @@ import emu.grasscutter.utils.Position; ...@@ -6,7 +6,7 @@ import emu.grasscutter.utils.Position;
import emu.grasscutter.utils.Utils; import emu.grasscutter.utils.Utils;
public final class GameConstants { public final class GameConstants {
public static String VERSION = "3.0.0"; public static String VERSION = "3.1.0";
public static final int DEFAULT_TEAMS = 4; public static final int DEFAULT_TEAMS = 4;
public static final int MAX_TEAMS = 10; public static final int MAX_TEAMS = 10;
......
...@@ -231,7 +231,7 @@ public final class SetPropCommand implements CommandHandler { ...@@ -231,7 +231,7 @@ public final class SetPropCommand implements CommandHandler {
} }
// List of map areas. Unfortunately, there is no readily available source for them in excels or bins. // List of map areas. Unfortunately, there is no readily available source for them in excels or bins.
final static private List<Integer> sceneAreas = List.of(1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,20,21,22,23,24,25,29,100,101,102,103,200,210,300,400,401,402,403); final static private List<Integer> sceneAreas = List.of(1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,20,21,22,23,24,25,26,27,28,29,100,101,102,103,200,210,300,400,401,402,403);
private boolean unlockMap(Player targetPlayer) { private boolean unlockMap(Player targetPlayer) {
// Unlock. // Unlock.
GameData.getScenePointsPerScene().forEach((sceneId, scenePoints) -> { GameData.getScenePointsPerScene().forEach((sceneId, scenePoints) -> {
......
...@@ -75,7 +75,8 @@ public class ItemData extends GameResource { ...@@ -75,7 +75,8 @@ public class ItemData extends GameResource {
private int comfort; private int comfort;
private List<Integer> furnType; private List<Integer> furnType;
private List<Integer> furnitureGadgetID; private List<Integer> furnitureGadgetID;
@SerializedName(value="OHIANNAEEAK", alternate={"DANFGGLKLNO", "JFDLJGDFIGL"})
@SerializedName(value="roomSceneId", alternate={"DANFGGLKLNO", "JFDLJGDFIGL", "OHIANNAEEAK"})
private int roomSceneId; private int roomSceneId;
// Custom // Custom
......
...@@ -46,7 +46,9 @@ public enum MaterialType { ...@@ -46,7 +46,9 @@ public enum MaterialType {
MATERIAL_SPICE_FOOD (37), MATERIAL_SPICE_FOOD (37),
MATERIAL_ACTIVITY_ROBOT (38), MATERIAL_ACTIVITY_ROBOT (38),
MATERIAL_ACTIVITY_GEAR (39), MATERIAL_ACTIVITY_GEAR (39),
MATERIAL_ACTIVITY_JIGSAW (40); MATERIAL_ACTIVITY_JIGSAW (40),
MATERIAL_ARANARA (41),
MATERIAL_DESHRET_MANUAL (46);
private final int value; private final int value;
private static final Int2ObjectMap<MaterialType> map = new Int2ObjectOpenHashMap<>(); private static final Int2ObjectMap<MaterialType> map = new Int2ObjectOpenHashMap<>();
......
...@@ -85,6 +85,10 @@ public class WorldDataSystem extends BaseGameSystem { ...@@ -85,6 +85,10 @@ public class WorldDataSystem extends BaseGameSystem {
return level; return level;
} }
private InvestigationMonsterOuterClass.InvestigationMonster getInvestigationMonster(Player player, InvestigationMonsterData imd) { private InvestigationMonsterOuterClass.InvestigationMonster getInvestigationMonster(Player player, InvestigationMonsterData imd) {
if(imd.getGroupIdList().isEmpty() || imd.getMonsterIdList().isEmpty()){
return null;
}
var groupId = imd.getGroupIdList().get(0); var groupId = imd.getGroupIdList().get(0);
var monsterId = imd.getMonsterIdList().get(0); var monsterId = imd.getMonsterIdList().get(0);
var sceneId = imd.getCityData().getSceneId(); var sceneId = imd.getCityData().getSceneId();
......
...@@ -19,7 +19,7 @@ public class PacketPlayerEnterSceneNotify extends BasePacket { ...@@ -19,7 +19,7 @@ public class PacketPlayerEnterSceneNotify extends BasePacket {
player.setSceneLoadState(SceneLoadState.LOADING); player.setSceneLoadState(SceneLoadState.LOADING);
player.setEnterSceneToken(Utils.randomRange(1000, 99999)); player.setEnterSceneToken(Utils.randomRange(1000, 99999));
PlayerEnterSceneNotify proto = PlayerEnterSceneNotify.newBuilder() PlayerEnterSceneNotify.Builder proto = PlayerEnterSceneNotify.newBuilder()
.setSceneId(player.getSceneId()) .setSceneId(player.getSceneId())
.setPos(player.getPosition().toProto()) .setPos(player.getPosition().toProto())
.setSceneBeginTime(System.currentTimeMillis()) .setSceneBeginTime(System.currentTimeMillis())
...@@ -30,8 +30,7 @@ public class PacketPlayerEnterSceneNotify extends BasePacket { ...@@ -30,8 +30,7 @@ public class PacketPlayerEnterSceneNotify extends BasePacket {
.setEnterReason(EnterReason.Login.getValue()) .setEnterReason(EnterReason.Login.getValue())
.setIsFirstLoginEnterScene(player.isFirstLoginEnterScene()) .setIsFirstLoginEnterScene(player.isFirstLoginEnterScene())
.setWorldType(1) .setWorldType(1)
.setSceneTransaction("3-" + player.getUid() + "-" + (int) (System.currentTimeMillis() / 1000) + "-" + 18402) .setSceneTransaction("3-" + player.getUid() + "-" + (int) (System.currentTimeMillis() / 1000) + "-" + 18402);
.build();
this.setData(proto); this.setData(proto);
} }
...@@ -61,10 +60,6 @@ public class PacketPlayerEnterSceneNotify extends BasePacket { ...@@ -61,10 +60,6 @@ public class PacketPlayerEnterSceneNotify extends BasePacket {
.setWorldType(1) .setWorldType(1)
.setSceneTransaction(newScene + "-" + target.getUid() + "-" + (int) (System.currentTimeMillis() / 1000) + "-" + 18402); .setSceneTransaction(newScene + "-" + target.getUid() + "-" + (int) (System.currentTimeMillis() / 1000) + "-" + 18402);
for (int i = 0; i < 3000; i++) { this.setData(proto);
proto.addSceneTagIdList(i);
}
this.setData(proto.build());
} }
} }
package emu.grasscutter.server.packet.send; package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.PlayerWorldSceneInfoListNotifyOuterClass.PlayerWorldSceneInfoListNotify;
import emu.grasscutter.net.proto.PlayerWorldSceneInfoOuterClass;
import emu.grasscutter.net.proto.SceneUnlockInfoOuterClass.SceneUnlockInfo;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import static emu.grasscutter.net.proto.PlayerWorldSceneInfoOuterClass.*; import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.PlayerWorldSceneInfoListNotifyOuterClass.PlayerWorldSceneInfoListNotify;
import emu.grasscutter.net.proto.PlayerWorldSceneInfoOuterClass.PlayerWorldSceneInfo;
public class PacketPlayerWorldSceneInfoListNotify extends BasePacket { public class PacketPlayerWorldSceneInfoListNotify extends BasePacket {
...@@ -27,14 +24,26 @@ public class PacketPlayerWorldSceneInfoListNotify extends BasePacket { ...@@ -27,14 +24,26 @@ public class PacketPlayerWorldSceneInfoListNotify extends BasePacket {
PlayerWorldSceneInfo.newBuilder() PlayerWorldSceneInfo.newBuilder()
.setSceneId(3) .setSceneId(3)
.setIsLocked(false) .setIsLocked(false)
.addSceneTagIdList(102) .addSceneTagIdList(102) // Jade chamber
.addSceneTagIdList(113) .addSceneTagIdList(113)
.addSceneTagIdList(117) .addSceneTagIdList(117)
.addSceneTagIdList(1093)
//.addSceneTagIdList(1094) // Vanarana (Sumeru tree)
//.addSceneTagIdList(1095) .addSceneTagIdList(1093) // Vana_real
//.addSceneTagIdList(1096) // .addSceneTagIdList(1094) // Vana_dream
//.addAllSceneTagIdList(IntStream.range(1000, 2000).boxed().collect(Collectors.toList())) // .addSceneTagIdList(1095) // Vana_first
// .addSceneTagIdList(1096) // Vana_festival
// 3.1 event
.addSceneTagIdList(152)
.addSceneTagIdList(153)
// Pyramid
.addSceneTagIdList(1164) // Arena (XMSM_CWLTop)
.addSceneTagIdList(1166) // Pyramid (CWL_Trans_02)
// Brute force
//.addAllSceneTagIdList(IntStream.range(1150, 1250).boxed().toList())
.build() .build()
) )
.addInfoList( .addInfoList(
...@@ -63,18 +72,15 @@ public class PacketPlayerWorldSceneInfoListNotify extends BasePacket { ...@@ -63,18 +72,15 @@ public class PacketPlayerWorldSceneInfoListNotify extends BasePacket {
.setSceneId(7) .setSceneId(7)
.setIsLocked(false) .setIsLocked(false)
.build() .build()
)
.addInfoList(
PlayerWorldSceneInfo.newBuilder()
.setSceneId(9)
.setIsLocked(false)
.addAllSceneTagIdList(IntStream.range(0, 3000).boxed().toList())
.build()
); );
var gaa = PlayerWorldSceneInfo.newBuilder()
.setSceneId(9)
.setIsLocked(false);
for (int i = 0; i < 3000; i++) {
gaa.addSceneTagIdList(i);
}
proto.addInfoList(gaa);
this.setData(proto); this.setData(proto);
} }
} }
Markdown is supported
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