mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-07-26 00:23:48 +00:00
Compare commits
4 Commits
v1.7.4
...
6e1913aacb
Author | SHA1 | Date | |
---|---|---|---|
6e1913aacb | |||
9e17e4aacb | |||
770a793c69 | |||
c4402cc287 |
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
- Get Java 17: https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
|
- Get Java 17: https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html
|
||||||
- Get [MongoDB Community Server](https://www.mongodb.com/try/download/community)
|
- Get [MongoDB Community Server](https://www.mongodb.com/try/download/community)
|
||||||
- Get game version REL4.0.x (4.0.x client can be found here if you don't have it): https://github.com/MAnggiarMustofa/GI-Download-Library/blob/main/GenshinImpact/Client/4.0.0.md
|
- Get game version REL4.0.x (4.0.x client can be found here if you don't have it): https://github.com/JRSKelvin/GenshinRepository/blob/main/Version%204.0.0.md
|
||||||
|
|
||||||
- Download the [latest Cultivation version](https://github.com/Grasscutters/Cultivation/releases/latest). Use the `.msi` installer.
|
- Download the [latest Cultivation version](https://github.com/Grasscutters/Cultivation/releases/latest). Use the `.msi` installer.
|
||||||
- After opening Cultivation (as admin), press the download button in the upper right corner.
|
- After opening Cultivation (as admin), press the download button in the upper right corner.
|
||||||
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
- Click the small button next to launch.
|
- Click the small button next to launch.
|
||||||
- Click the launch button.
|
- Click the launch button.
|
||||||
- Log in with whatever username you want. Password doesn't matter.
|
- Log in with whatever username you want. Password can be anything.
|
||||||
|
|
||||||
### Building
|
### Building
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ public class WorldChallenge {
|
|||||||
private final AtomicInteger score;
|
private final AtomicInteger score;
|
||||||
private boolean progress;
|
private boolean progress;
|
||||||
private boolean success;
|
private boolean success;
|
||||||
private long startedAt;
|
private int startedAt;
|
||||||
private int finishedTime;
|
private int finishedTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,6 +36,6 @@ public class KillMonsterCountInTimeIncChallengeFactoryHandler implements Challen
|
|||||||
List.of(
|
List.of(
|
||||||
new KillMonsterCountTrigger(),
|
new KillMonsterCountTrigger(),
|
||||||
new InTimeTrigger(),
|
new InTimeTrigger(),
|
||||||
new KillMonsterTimeIncTrigger(timeInc)));
|
new KillMonsterTimeIncTrigger(timeLimit, timeInc)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
package emu.grasscutter.game.dungeons.challenge.factory;
|
package emu.grasscutter.game.dungeons.challenge.factory;
|
||||||
|
|
||||||
|
import emu.grasscutter.data.GameData;
|
||||||
import emu.grasscutter.game.dungeons.challenge.WorldChallenge;
|
import emu.grasscutter.game.dungeons.challenge.WorldChallenge;
|
||||||
import emu.grasscutter.game.dungeons.challenge.enums.ChallengeType;
|
import emu.grasscutter.game.dungeons.challenge.enums.ChallengeType;
|
||||||
import emu.grasscutter.game.dungeons.challenge.trigger.*;
|
import emu.grasscutter.game.dungeons.challenge.trigger.*;
|
||||||
import emu.grasscutter.game.world.Scene;
|
import emu.grasscutter.game.world.Scene;
|
||||||
import emu.grasscutter.scripts.data.SceneGroup;
|
import emu.grasscutter.scripts.data.SceneGroup;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import lombok.val;
|
import lombok.val;
|
||||||
|
|
||||||
public class KillMonsterTimeChallengeFactoryHandler implements ChallengeFactoryHandler {
|
public class KillMonsterTimeChallengeFactoryHandler implements ChallengeFactoryHandler {
|
||||||
@ -28,6 +29,16 @@ public class KillMonsterTimeChallengeFactoryHandler implements ChallengeFactoryH
|
|||||||
Scene scene,
|
Scene scene,
|
||||||
SceneGroup group) {
|
SceneGroup group) {
|
||||||
val realGroup = scene.getScriptManager().getGroupById(groupId);
|
val realGroup = scene.getScriptManager().getGroupById(groupId);
|
||||||
|
val challengeTriggers = new ArrayList<ChallengeTrigger>();
|
||||||
|
challengeTriggers.addAll(List.of(new KillMonsterCountTrigger(), new InTimeTrigger()));
|
||||||
|
|
||||||
|
val challengeData = GameData.getDungeonChallengeConfigDataMap().get(challengeId);
|
||||||
|
val challengeType = challengeData.getChallengeType();
|
||||||
|
if (challengeType == ChallengeType.CHALLENGE_KILL_COUNT_FAST) {
|
||||||
|
challengeTriggers.add(
|
||||||
|
new KillMonsterTimeIncTrigger(timeLimit, 0 /* refresh to original limit on kill */));
|
||||||
|
}
|
||||||
|
|
||||||
return new WorldChallenge(
|
return new WorldChallenge(
|
||||||
scene,
|
scene,
|
||||||
realGroup,
|
realGroup,
|
||||||
@ -36,6 +47,6 @@ public class KillMonsterTimeChallengeFactoryHandler implements ChallengeFactoryH
|
|||||||
List.of(targetCount, timeLimit),
|
List.of(targetCount, timeLimit),
|
||||||
timeLimit, // Limit
|
timeLimit, // Limit
|
||||||
targetCount, // Goal
|
targetCount, // Goal
|
||||||
List.of(new KillMonsterCountTrigger(), new InTimeTrigger()));
|
challengeTriggers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,22 +6,33 @@ import emu.grasscutter.server.packet.send.PacketChallengeDataNotify;
|
|||||||
|
|
||||||
public class KillMonsterTimeIncTrigger extends ChallengeTrigger {
|
public class KillMonsterTimeIncTrigger extends ChallengeTrigger {
|
||||||
|
|
||||||
private int increment;
|
private final int maxTime;
|
||||||
|
private final int increment;
|
||||||
|
|
||||||
public KillMonsterTimeIncTrigger(int increment) {
|
public KillMonsterTimeIncTrigger(int maxTime, int increment) {
|
||||||
|
this.maxTime = maxTime;
|
||||||
this.increment = increment;
|
this.increment = increment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBegin(WorldChallenge challenge) {
|
public void onBegin(WorldChallenge challenge) {}
|
||||||
// challenge.getScene().broadcastPacket(new PacketChallengeDataNotify(challenge, 0,
|
|
||||||
// challenge.getScore().get()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMonsterDeath(WorldChallenge challenge, EntityMonster monster) {
|
public void onMonsterDeath(WorldChallenge challenge, EntityMonster monster) {
|
||||||
challenge.getScene().broadcastPacket(new PacketChallengeDataNotify(challenge, 0, increment));
|
var scene = challenge.getScene();
|
||||||
|
var elapsed = scene.getSceneTimeSeconds() - challenge.getStartedAt();
|
||||||
|
var timeLeft = challenge.getTimeLimit() - elapsed;
|
||||||
|
var increment = this.increment;
|
||||||
|
if (increment == 0) {
|
||||||
|
// Refresh time limit back to max
|
||||||
|
increment = maxTime - timeLeft;
|
||||||
|
} else if (maxTime < timeLeft + increment) {
|
||||||
|
// Don't add back more time than original limit
|
||||||
|
increment -= timeLeft + increment - maxTime;
|
||||||
|
}
|
||||||
challenge.setTimeLimit(challenge.getTimeLimit() + increment);
|
challenge.setTimeLimit(challenge.getTimeLimit() + increment);
|
||||||
|
scene.broadcastPacket(
|
||||||
|
new PacketChallengeDataNotify(
|
||||||
|
challenge, 2, timeLeft + increment + scene.getSceneTimeSeconds()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -222,7 +222,9 @@ public class EntityMonster extends GameEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onTick(int sceneTime) {
|
||||||
|
super.onTick(sceneTime);
|
||||||
|
|
||||||
// Lua event
|
// Lua event
|
||||||
getScene()
|
getScene()
|
||||||
.getScriptManager()
|
.getScriptManager()
|
||||||
|
@ -218,6 +218,8 @@ public final class HttpServer {
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
<img src="https://http.cat/404" />
|
<img src="https://http.cat/404" />
|
||||||
|
<h1>Grasscutter cannot find the route you're trying to access.</h1>
|
||||||
|
<p>Your proxy is active, so if you're trying to download something close the game/stop the proxy.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
""");
|
""");
|
||||||
|
Reference in New Issue
Block a user