mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-04-02 14:02:44 +02:00
Merge unstable into development (#2173)
* Remove more scene synchronized
* Fix worktop options not appearing
* Format code [skip actions]
* Fix delay with server tasks
* Format code [skip actions]
* Fully fix fairy clock (#2146)
* Fix scene transition
* fully fix fairy clock
* Re-add call to `Player#updatePlayerGameTime`
* Format code [skip actions]
* Initialize the script loader in `ResourceLoader#loadAll`
* Fix region removal checking
* Format code [skip actions]
* Use Lombok's `EqualsAndHashCode` for comparing scene regions
* Format code [skip actions]
* Move 'invalid gather object' to `trace`
* Add more information to the 'unknown condition handler' message
* Move invalid ability action to trace
* Make `KcpTunnel` public
* Validate the NPC being talked to
* Format code [skip actions]
* NPCs are not spawned server side; change logic to handle it
* Format code [skip actions]
* unload scene when there are no players (#2147)
* unload scene when there are no players
* Update src/main/java/emu/grasscutter/game/world/Scene.java
Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
---------
Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
* Check if a command should be copied or HTTP should be used
* Lint Code [skip actions]
* Fix character names rendering incorrectly
* Add basic troubleshooting command
* Implement handbook teleporting
also a few formatting changes and sort data by logical sense
* Fix listener `ConcurrentModificationException` issue
* Add color change to `Join the Community!`
* Lint Code [skip actions]
* Make clickable buttons appear clickable
* Remove 'Mechanicus' entities from the list of entities
* Format code [skip actions]
* Fix going back returning a blank screen
* Implement entity spawning
* Add setting level to entity card
* Add support for 'plain text' mode
* Make descriptions of objects scrollable
* Lint Code [skip actions]
* Format code [skip actions]
* Change the way existing hooks work
* Format code [skip actions]
* Upgrade Javalin to 5.5.0 & Fix project warnings
* Upgrade logging libraries
* Fix gacha mappings static file issue
* Add temporary backwards compatability for `ServerHelper`
* Format code [skip actions]
* Remove artifact signatures from VCS
* Fix forge queue data protocol definition
* Run `spotlessApply`
* Format code [skip actions]
* Download data required for building artifacts
* Add call for Facebook logins
* Add the wiki page as a submodule
* Format code [skip actions]
* Update translation (#2150)
* Update translation
* Update translation
* Separate the dispatch and game servers (pt. 1)
gacha is still broken, handbook still needs to be done
* Format code [skip actions]
* Separate the dispatch and game servers (pt. 2)
this commit fixes the gacha page
* Add description for '/troubleshoot'
* Set default avatar talent level to 10
* Separate the dispatch and game servers (pt. 3)
implement handbook across servers!
* Format code [skip actions]
* Update GitHub Actions to use 'download-file' over 'wget'
* Gm handbook lmao (#2149)
* Fix font issue
* Fix avatars
* Fix text overflow in commands
* Fix virtualized lists and items page 😭😭
* magix why 💀
* use hover style in all minicards
* button
* remove console.log
* lint
* Add icons
* magix asked
* Fix overflow padding issue
* Fix achievement text overflow
* remove icons from repo
* Change command icon
* Add the wiki page as a submodule
* total magix moment
* fix text overflow in commands
* Fix discord button
* Make text scale on Minicard
* import icons and font from another source
* Add hover effects to siebar buttons
* move font and readme to submodule repo
* Make data folder a submodule
* import icons and font from data submodule
* Update README.md
* total magix moment
* magix moment v2
* submodule change
* Import `.webp` files
* Resize `HomeButton`
* Fix 'Copy Command' reappearing after changing pages
---------
Co-authored-by: KingRainbow44 <kobedo11@gmail.com>
* Lint Code [skip actions]
* Download data for the build, not for the lint
* format imports
this is really just to see if build handbook works kek
* Implement proper handbook authentication (pt. 1)
* Implement proper handbook authentication (pt. 2)
* Format code [skip actions]
* Add quest data dumping for the handbook
* Change colors to fit _something suitable_
* Format code [skip actions]
* Fix force pushing to branches after linting
* Fix logic of `SetPlayerPropReq`
* Move more group loading to `trace`
* Add handbook IP authentication in hybrid mode
* Fix player level up not displaying on the client properly
* Format code [skip actions]
* Fix game time locking
* Format code [skip actions]
* Update player properties
* Format code [skip actions]
* Move `warn`s for groups to `debug`
* Fix player pausing
* Move more logs to `trace`
* Use `removeItemById` for deleting items via quests
* Clean up logger more
* Pause in-game time when the world is paused
* Format code [skip actions]
* More player property documentation
* Multi-threaded resource loading
* Format code [skip actions]
* Add quest widgets
* Add quests page (basic impl.)
* Add/fix colors
also fix tailwind
* Remove banned packets
client modifications already perform the job of blocking malicious packets from being executed, no point in having this if self-windy is wanted
* Re-add `BeginCameraSceneLookNotify`
* Fix being unable to attack (#2157)
* Add `PlayerOpenChestEvent`
* Add methods to get players from the server
* Add static methods to register an event handler
* Add `PlayerEnterDungeonEvent`
* Remove legacy documentation from `PlayerMoveEvent`
* Add `PlayerChatEvent`
* Add defaults to `Position`
* Clean up `.utils`
* Revert `Multi-threaded resource loading`
* Fix changing target UID when talking to the server
* Lint Code [skip actions]
* Format code [skip actions]
* fix NPC talk triggering main quest in 46101 (#2158)
Make it so that only talks where the param matches the talkId are checked.
* Format code [skip actions]
* Partially fix Chasing Shadows (#2159)
* Partially fix Chasing Shadows
* Go ahead and move it before the return before Magix tells me to.
* Format code [skip actions]
* Bring back period lol (#2160)
* Disable SNI for the HTTPS server
* Add `EntityCreationEvent`
* Add initial startup message
this is so the server appears like its preparing to start
* Format code [skip actions]
* Enable debug mode for plugin loggers if enabled for the primary logger
* Add documentation about `WorldAreaConfigData`
* Make more fields in excels accessible
* Remove deprecated fields from `GetShopRsp`
* Run `spotlessApply` on definitions
* Add `PlayerEnterAreaEvent`
* Optimize event calls
* Fix event invokes
* Format code [skip actions]
* Remove manual autofinish for main quests. (#2162)
* Add world areas to the textmap cache
* Format code [skip actions]
* Don't overdefine variables in extended classes (#2163)
* Add dumper for world areas
* Format code [skip actions]
* instantiate personalLineList (#2165)
* Fix protocol definitions
thank you Nazrin! (+ hiro for raw definitions)
* Fix the background color leaking from the character widget
* Change HTML spacing to 2 spaces
* Implement hiding widgets
* Change scrollbar to a vibrant color
* Add _some_ scaling to the home buttons and its text
* Build the handbook with Gradle
* Fix the 'finer details' with the handbook UI
* Lint Code [skip actions]
* Fix target destination for the Gradle-built handbook
* Implement fetching a player across servers & Add a chainable JsonObject
useful for plugins! might be used in grasscutter eventually
* Fix GitHub actions
* Fix event calling & canceling
* Run `spotlessApply`
* Rename fields (might be wrong)
* Add/update all/more protocol definitions
* Add/update all/more protocol definitions
* Remove outdated packet
* Fix protocol definitions
* Format code [skip actions]
* Implement some lua variables for less console spam (#2172)
* Implement some lua variables for less console spam
* Add GetHostQuestState
This fixes some chapter 3 stuff.
* Format code [skip actions]
* Fix merge import
* Format code [skip actions]
* Fully fix fairy clock for real this time (#2167)
* Fully fix fairy clock For real this time
* Make it so relogging keeps the time lock state.
* Refactor out questLockTime
* Per Hartie, the client packet needs to be changed too
* Update src/main/java/emu/grasscutter/game/world/World.java
Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
* Update src/main/java/emu/grasscutter/server/packet/recv/HandlerClientLockGameTimeNotify.java
* Remove all code not needed to get clock working
---------
Co-authored-by: Magix <27646710+KingRainbow44@users.noreply.github.com>
* Implement a proper ability system (#2166)
* Apply fix `21dec2fe`
* Apply fix `89d01d5f`
* Apply fix `d900f154`
this one was already implemented; updated to use call from previous commit
* Ability changing commit
TODO: change info to debug
* Remove use of deprecated methods/fields
* Temp commit v2
(Adding LoseHP and some fixes)
* Oopsie
* Probably fix monster battle
* Fix issue with reflecting into fields
* Fix some things
* Fix ability names for 3.6 resources
* Improve logging
---------
Co-authored-by: StartForKiller <jesussanz2003@gmail.com>
* Format code [skip actions]
* Add system for sending messages between servers
* Format some code
* Remove protocol definitions from Spotless
* Default debug to false; enable with `-debug`
* Implement completely useless global value copying
* HACK: Return the avatar which holds the weapon when the weapon is referred to by ID
* Add properties to `AbilityModifier`
* Change the way HTML is served after authentication
* Use thread executors to speed up the database loading process
* Format code [skip actions]
* Add system for setting handbook address and port
* Lint Code [skip actions]
* Format code [skip actions]
* Fix game-related data not saving
* Format code [skip actions]
* Fix handbook server details
* Lint Code [skip actions]
* Format code [skip actions]
* Use the headers provided by a context to get the IP address
should acknowledge #1975
* Format code [skip actions]
* Move more logs to `trace`
* Format code [skip actions]
* more trace
* Fix something and implement weapon entities
* Format code [skip actions]
* Fix `EntityWeapon`
* Remove deprecated API & Fix resource checking
* Fix unnecessary warning for first-time setup
* Implement handbook request limiting
* Format code [skip actions]
* Fix new avatar weapons being null
* Format code [skip actions]
* Fix issue with 35303 being un-completable & Try to fix fulfilled quest conditions being met
* Load activity config on server startup
* Require plugins to specify an API version and match with the server
* Add default open state ignore list
* Format code [skip actions]
* Quick fix for questing, needs more investigation
This would make the questing work again
* Remove existing hack for 35303
* Fix ignored open states from being set
* Format code [skip actions]
* fix the stupidest bug ive ever seen
* Optimize player kicking on server close
* Format code [skip actions]
* Re-add hack to fix 35303
* Update GitHub actions
* Format code [skip actions]
* Potentially fix issues with regions
* Download additional handbook data
* Revert "Potentially fix issues with regions"
This reverts commit 84e3823695.
---------
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: scooterboo <lewasite@yahoo.com>
Co-authored-by: Tesutarin <105267106+Tesutarin@users.noreply.github.com>
Co-authored-by: Scald <104459145+Arikatsu@users.noreply.github.com>
Co-authored-by: StartForKiller <jesussanz2003@gmail.com>
This commit is contained in:
@@ -1,211 +1,213 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum ActionReason {
|
||||
None(0),
|
||||
QuestItem(1),
|
||||
QuestReward(2),
|
||||
Trifle(3),
|
||||
Shop(4),
|
||||
PlayerUpgradeReward(5),
|
||||
AddAvatar(6),
|
||||
GadgetEnvAnimal(7),
|
||||
MonsterEnvAnimal(8),
|
||||
Compound(9),
|
||||
Cook(10),
|
||||
Gather(11),
|
||||
MailAttachment(12),
|
||||
CityLevelupReturn(15),
|
||||
CityLevelupReward(17),
|
||||
AreaExploreReward(18),
|
||||
UnlockPointReward(19),
|
||||
DungeonFirstPass(20),
|
||||
DungeonPass(21),
|
||||
ChangeElemType(23),
|
||||
FetterOpen(25),
|
||||
DailyTaskScore(26),
|
||||
DailyTaskHost(27),
|
||||
RandTaskHost(28),
|
||||
Expedition(29),
|
||||
Gacha(30),
|
||||
Combine(31),
|
||||
RandTaskGuest(32),
|
||||
DailyTaskGuest(33),
|
||||
ForgeOutput(34),
|
||||
ForgeReturn(35),
|
||||
InitAvatar(36),
|
||||
MonsterDie(37),
|
||||
Gm(38),
|
||||
OpenChest(39),
|
||||
GadgetDie(40),
|
||||
MonsterChangeHp(41),
|
||||
SubfieldDrop(42),
|
||||
PushTipsReward(43),
|
||||
ActivityMonsterDrop(44),
|
||||
ActivityGather(45),
|
||||
ActivitySubfieldDrop(46),
|
||||
TowerScheduleReward(47),
|
||||
TowerFloorStarReward(48),
|
||||
TowerFirstPassReward(49),
|
||||
TowerDailyReward(50),
|
||||
HitClientTrivialEntity(51),
|
||||
OpenWorldBossChest(52),
|
||||
MaterialDeleteReturn(53),
|
||||
SignInReward(54),
|
||||
OpenBlossomChest(55),
|
||||
Recharge(56),
|
||||
BonusActivityReward(57),
|
||||
TowerCommemorativeReward(58),
|
||||
TowerSkipFloorReward(59),
|
||||
RechargeBonus(60),
|
||||
RechargeCard(61),
|
||||
RechargeCardDaily(62),
|
||||
RechargeCardReplace(63),
|
||||
RechargeCardReplaceFree(64),
|
||||
RechargePlayReplace(65),
|
||||
MpPlayTakeReward(66),
|
||||
ActivityWatcher(67),
|
||||
SalesmanDeliverItem(68),
|
||||
SalesmanReward(69),
|
||||
Rebate(70),
|
||||
McoinExchangeHcoin(71),
|
||||
DailyTaskExchangeLegendaryKey(72),
|
||||
UnlockPersonLine(73),
|
||||
FetterLevelReward(74),
|
||||
BuyResin(75),
|
||||
RechargePackage(76),
|
||||
DeliveryDailyReward(77),
|
||||
CityReputationLevel(78),
|
||||
CityReputationQuest(79),
|
||||
CityReputationRequest(80),
|
||||
CityReputationExplore(81),
|
||||
OffergingLevel(82),
|
||||
RoutineHost(83),
|
||||
RoutineGuest(84),
|
||||
TreasureMapSpotToken(89),
|
||||
TreasureMapBonusLevelReward(90),
|
||||
TreasureMapMpReward(91),
|
||||
Convert(92),
|
||||
OverflowTransform(93),
|
||||
ActivityAvatarSelectionReward(96),
|
||||
ActivityWatcherBatch(97),
|
||||
HitTreeDrop(98),
|
||||
GetHomeLevelupReward(99),
|
||||
HomeDefaultFurniture(100),
|
||||
ActivityCond(101),
|
||||
BattlePassNotify(102),
|
||||
PlayerUseItem(1001),
|
||||
DropItem(1002),
|
||||
WeaponUpgrade(1011),
|
||||
WeaponPromote(1012),
|
||||
WeaponAwaken(1013),
|
||||
RelicUpgrade(1014),
|
||||
Ability(1015),
|
||||
DungeonStatueDrop(1016),
|
||||
OfflineMsg(1017),
|
||||
AvatarUpgrade(1018),
|
||||
AvatarPromote(1019),
|
||||
QuestAction(1021),
|
||||
CityLevelup(1022),
|
||||
UpgradeSkill(1024),
|
||||
UnlockTalent(1025),
|
||||
UpgradeProudSkill(1026),
|
||||
PlayerLevelLimitUp(1027),
|
||||
DungeonDaily(1028),
|
||||
ItemGiving(1030),
|
||||
ForgeCost(1031),
|
||||
InvestigationReward(1032),
|
||||
InvestigationTargetReward(1033),
|
||||
GadgetInteract(1034),
|
||||
SeaLampCiMaterial(1036),
|
||||
SeaLampContributionReward(1037),
|
||||
SeaLampPhaseReward(1038),
|
||||
SeaLampFlyLamp(1039),
|
||||
AutoRecover(1040),
|
||||
ActivityExpireItem(1041),
|
||||
SubCoinNegative(1042),
|
||||
BargainDeduct(1043),
|
||||
BattlePassPaidReward(1044),
|
||||
BattlePassLevelReward(1045),
|
||||
TrialAvatarActivityFirstPassReward(1046),
|
||||
BuyBattlePassLevel(1047),
|
||||
GrantBirthdayBenefit(1048),
|
||||
AchievementReward(1049),
|
||||
AchievementGoalReward(1050),
|
||||
FirstShareToSocialNetwork(1051),
|
||||
DestroyMaterial(1052),
|
||||
CodexLevelupReward(1053),
|
||||
HuntingOfferReward(1054),
|
||||
UseWidgetAnchorPoint(1055),
|
||||
UseWidgetBonfire(1056),
|
||||
UngradeWeaponReturnMaterial(1057),
|
||||
UseWidgetOneoffGatherPointDetector(1058),
|
||||
UseWidgetClientCollector(1059),
|
||||
UseWidgetClientDetector(1060),
|
||||
TakeGeneralReward(1061),
|
||||
AsterTakeSpecialReward(1062),
|
||||
RemoveCodexBook(1063),
|
||||
OfferingItem(1064),
|
||||
UseWidgetGadgetBuilder(1065),
|
||||
EffigyFirstPassReward(1066),
|
||||
EffigyReward(1067),
|
||||
ReunionFirstGiftReward(1068),
|
||||
ReunionSignInReward(1069),
|
||||
ReunionWatcherReward(1070),
|
||||
SalesmanMpReward(1071),
|
||||
ActionReasionAvatarPromoteReward(1072),
|
||||
BlessingRedeemReward(1073),
|
||||
ActionMiracleRingReward(1074),
|
||||
ExpeditionReward(1075),
|
||||
TreasureMapRemoveDetector(1076),
|
||||
MechanicusDungeonTicket(1077),
|
||||
MechanicusLevelupGear(1078),
|
||||
MechanicusBattleSettle(1079),
|
||||
RegionSearchReward(1080),
|
||||
UnlockCoopChapter(1081),
|
||||
TakeCoopReward(1082),
|
||||
FleurFairDungeonReward(1083),
|
||||
ActivityScore(1084),
|
||||
ChannellerSlabOneoffDungeonReward(1085),
|
||||
FurnitureMakeStart(1086),
|
||||
FurnitureMakeTake(1087),
|
||||
FurnitureMakeCancel(1088),
|
||||
FurnitureMakeFastFinish(1089),
|
||||
ChannellerSlabLoopDungeonFirstPassReward(1090),
|
||||
ChannellerSlabLoopDungeonScoreReward(1091),
|
||||
HomeLimitedShopBuy(1092),
|
||||
HomeCoinCollect(1093);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<ActionReason> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, ActionReason> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private ActionReason(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
None(0),
|
||||
QuestItem(1),
|
||||
QuestReward(2),
|
||||
Trifle(3),
|
||||
Shop(4),
|
||||
PlayerUpgradeReward(5),
|
||||
AddAvatar(6),
|
||||
GadgetEnvAnimal(7),
|
||||
MonsterEnvAnimal(8),
|
||||
Compound(9),
|
||||
Cook(10),
|
||||
Gather(11),
|
||||
MailAttachment(12),
|
||||
CityLevelupReturn(15),
|
||||
CityLevelupReward(17),
|
||||
AreaExploreReward(18),
|
||||
UnlockPointReward(19),
|
||||
DungeonFirstPass(20),
|
||||
DungeonPass(21),
|
||||
ChangeElemType(23),
|
||||
FetterOpen(25),
|
||||
DailyTaskScore(26),
|
||||
DailyTaskHost(27),
|
||||
RandTaskHost(28),
|
||||
Expedition(29),
|
||||
Gacha(30),
|
||||
Combine(31),
|
||||
RandTaskGuest(32),
|
||||
DailyTaskGuest(33),
|
||||
ForgeOutput(34),
|
||||
ForgeReturn(35),
|
||||
InitAvatar(36),
|
||||
MonsterDie(37),
|
||||
Gm(38),
|
||||
OpenChest(39),
|
||||
GadgetDie(40),
|
||||
MonsterChangeHp(41),
|
||||
SubfieldDrop(42),
|
||||
PushTipsReward(43),
|
||||
ActivityMonsterDrop(44),
|
||||
ActivityGather(45),
|
||||
ActivitySubfieldDrop(46),
|
||||
TowerScheduleReward(47),
|
||||
TowerFloorStarReward(48),
|
||||
TowerFirstPassReward(49),
|
||||
TowerDailyReward(50),
|
||||
HitClientTrivialEntity(51),
|
||||
OpenWorldBossChest(52),
|
||||
MaterialDeleteReturn(53),
|
||||
SignInReward(54),
|
||||
OpenBlossomChest(55),
|
||||
Recharge(56),
|
||||
BonusActivityReward(57),
|
||||
TowerCommemorativeReward(58),
|
||||
TowerSkipFloorReward(59),
|
||||
RechargeBonus(60),
|
||||
RechargeCard(61),
|
||||
RechargeCardDaily(62),
|
||||
RechargeCardReplace(63),
|
||||
RechargeCardReplaceFree(64),
|
||||
RechargePlayReplace(65),
|
||||
MpPlayTakeReward(66),
|
||||
ActivityWatcher(67),
|
||||
SalesmanDeliverItem(68),
|
||||
SalesmanReward(69),
|
||||
Rebate(70),
|
||||
McoinExchangeHcoin(71),
|
||||
DailyTaskExchangeLegendaryKey(72),
|
||||
UnlockPersonLine(73),
|
||||
FetterLevelReward(74),
|
||||
BuyResin(75),
|
||||
RechargePackage(76),
|
||||
DeliveryDailyReward(77),
|
||||
CityReputationLevel(78),
|
||||
CityReputationQuest(79),
|
||||
CityReputationRequest(80),
|
||||
CityReputationExplore(81),
|
||||
OffergingLevel(82),
|
||||
RoutineHost(83),
|
||||
RoutineGuest(84),
|
||||
TreasureMapSpotToken(89),
|
||||
TreasureMapBonusLevelReward(90),
|
||||
TreasureMapMpReward(91),
|
||||
Convert(92),
|
||||
OverflowTransform(93),
|
||||
ActivityAvatarSelectionReward(96),
|
||||
ActivityWatcherBatch(97),
|
||||
HitTreeDrop(98),
|
||||
GetHomeLevelupReward(99),
|
||||
HomeDefaultFurniture(100),
|
||||
ActivityCond(101),
|
||||
BattlePassNotify(102),
|
||||
PlayerUseItem(1001),
|
||||
DropItem(1002),
|
||||
WeaponUpgrade(1011),
|
||||
WeaponPromote(1012),
|
||||
WeaponAwaken(1013),
|
||||
RelicUpgrade(1014),
|
||||
Ability(1015),
|
||||
DungeonStatueDrop(1016),
|
||||
OfflineMsg(1017),
|
||||
AvatarUpgrade(1018),
|
||||
AvatarPromote(1019),
|
||||
QuestAction(1021),
|
||||
CityLevelup(1022),
|
||||
UpgradeSkill(1024),
|
||||
UnlockTalent(1025),
|
||||
UpgradeProudSkill(1026),
|
||||
PlayerLevelLimitUp(1027),
|
||||
DungeonDaily(1028),
|
||||
ItemGiving(1030),
|
||||
ForgeCost(1031),
|
||||
InvestigationReward(1032),
|
||||
InvestigationTargetReward(1033),
|
||||
GadgetInteract(1034),
|
||||
SeaLampCiMaterial(1036),
|
||||
SeaLampContributionReward(1037),
|
||||
SeaLampPhaseReward(1038),
|
||||
SeaLampFlyLamp(1039),
|
||||
AutoRecover(1040),
|
||||
ActivityExpireItem(1041),
|
||||
SubCoinNegative(1042),
|
||||
BargainDeduct(1043),
|
||||
BattlePassPaidReward(1044),
|
||||
BattlePassLevelReward(1045),
|
||||
TrialAvatarActivityFirstPassReward(1046),
|
||||
BuyBattlePassLevel(1047),
|
||||
GrantBirthdayBenefit(1048),
|
||||
AchievementReward(1049),
|
||||
AchievementGoalReward(1050),
|
||||
FirstShareToSocialNetwork(1051),
|
||||
DestroyMaterial(1052),
|
||||
CodexLevelupReward(1053),
|
||||
HuntingOfferReward(1054),
|
||||
UseWidgetAnchorPoint(1055),
|
||||
UseWidgetBonfire(1056),
|
||||
UngradeWeaponReturnMaterial(1057),
|
||||
UseWidgetOneoffGatherPointDetector(1058),
|
||||
UseWidgetClientCollector(1059),
|
||||
UseWidgetClientDetector(1060),
|
||||
TakeGeneralReward(1061),
|
||||
AsterTakeSpecialReward(1062),
|
||||
RemoveCodexBook(1063),
|
||||
OfferingItem(1064),
|
||||
UseWidgetGadgetBuilder(1065),
|
||||
EffigyFirstPassReward(1066),
|
||||
EffigyReward(1067),
|
||||
ReunionFirstGiftReward(1068),
|
||||
ReunionSignInReward(1069),
|
||||
ReunionWatcherReward(1070),
|
||||
SalesmanMpReward(1071),
|
||||
ActionReasionAvatarPromoteReward(1072),
|
||||
BlessingRedeemReward(1073),
|
||||
ActionMiracleRingReward(1074),
|
||||
ExpeditionReward(1075),
|
||||
TreasureMapRemoveDetector(1076),
|
||||
MechanicusDungeonTicket(1077),
|
||||
MechanicusLevelupGear(1078),
|
||||
MechanicusBattleSettle(1079),
|
||||
RegionSearchReward(1080),
|
||||
UnlockCoopChapter(1081),
|
||||
TakeCoopReward(1082),
|
||||
FleurFairDungeonReward(1083),
|
||||
ActivityScore(1084),
|
||||
ChannellerSlabOneoffDungeonReward(1085),
|
||||
FurnitureMakeStart(1086),
|
||||
FurnitureMakeTake(1087),
|
||||
FurnitureMakeCancel(1088),
|
||||
FurnitureMakeFastFinish(1089),
|
||||
ChannellerSlabLoopDungeonFirstPassReward(1090),
|
||||
ChannellerSlabLoopDungeonScoreReward(1091),
|
||||
HomeLimitedShopBuy(1092),
|
||||
HomeCoinCollect(1093);
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static ActionReason getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, None);
|
||||
}
|
||||
|
||||
public static ActionReason getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, None);
|
||||
}
|
||||
private static final Int2ObjectMap<ActionReason> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, ActionReason> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private final int value;
|
||||
|
||||
ActionReason(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static ActionReason getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, None);
|
||||
}
|
||||
|
||||
public static ActionReason getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, None);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,30 +2,37 @@ package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum ActivityType {
|
||||
NONE(0),
|
||||
NEW_ACTIVITY_TRIAL_AVATAR(4),
|
||||
NEW_ACTIVITY_PERSONAL_LIINE(8),
|
||||
NEW_ACTIVITY_SALESMAN_MP(1205),
|
||||
NEW_ACTIVITY_SUMMER_TIME(1600),
|
||||
NEW_ACTIVITY_GENERAL_BANNER(2100),
|
||||
NEW_ACTIVITY_MUSIC_GAME(2202),
|
||||
|
||||
;
|
||||
NEW_ACTIVITY_PHOTO(2603),
|
||||
NEW_ACTIVITY_FUNGUS_FIGHTER(3201),
|
||||
NEW_ACTIVITY_EFFIGY_CHALLENGE_V2(3203);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<ActivityType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, ActivityType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
public static ActivityType getTypeByValue(int value) {
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
public enum BattlePassMissionRefreshType {
|
||||
BATTLE_PASS_MISSION_REFRESH_DAILY (0),
|
||||
BATTLE_PASS_MISSION_REFRESH_CYCLE_CROSS_SCHEDULE (1), // Weekly
|
||||
BATTLE_PASS_MISSION_REFRESH_SCHEDULE (2), // Per BP
|
||||
BATTLE_PASS_MISSION_REFRESH_CYCLE (1); // Event?
|
||||
|
||||
private final int value;
|
||||
|
||||
BattlePassMissionRefreshType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
BATTLE_PASS_MISSION_REFRESH_DAILY(0),
|
||||
BATTLE_PASS_MISSION_REFRESH_CYCLE_CROSS_SCHEDULE(1), // Weekly
|
||||
BATTLE_PASS_MISSION_REFRESH_SCHEDULE(2), // Per BP
|
||||
BATTLE_PASS_MISSION_REFRESH_CYCLE(1); // Event?
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
private final int value;
|
||||
|
||||
BattlePassMissionRefreshType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,24 +3,24 @@ package emu.grasscutter.game.props;
|
||||
import emu.grasscutter.net.proto.BattlePassMissionOuterClass.BattlePassMission.MissionStatus;
|
||||
|
||||
public enum BattlePassMissionStatus {
|
||||
MISSION_STATUS_INVALID (0, MissionStatus.MISSION_STATUS_INVALID),
|
||||
MISSION_STATUS_UNFINISHED (1, MissionStatus.MISSION_STATUS_UNFINISHED),
|
||||
MISSION_STATUS_FINISHED (2, MissionStatus.MISSION_STATUS_FINISHED),
|
||||
MISSION_STATUS_POINT_TAKEN (3, MissionStatus.MISSION_STATUS_POINT_TAKEN);
|
||||
|
||||
private final int value;
|
||||
private final MissionStatus missionStatus;
|
||||
|
||||
BattlePassMissionStatus(int value, MissionStatus missionStatus) {
|
||||
this.value = value;
|
||||
this.missionStatus = missionStatus; // In case proto enum values change later
|
||||
}
|
||||
MISSION_STATUS_INVALID(0, MissionStatus.MISSION_STATUS_INVALID),
|
||||
MISSION_STATUS_UNFINISHED(1, MissionStatus.MISSION_STATUS_UNFINISHED),
|
||||
MISSION_STATUS_FINISHED(2, MissionStatus.MISSION_STATUS_FINISHED),
|
||||
MISSION_STATUS_POINT_TAKEN(3, MissionStatus.MISSION_STATUS_POINT_TAKEN);
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
private final int value;
|
||||
private final MissionStatus missionStatus;
|
||||
|
||||
public MissionStatus getMissionStatus() {
|
||||
return missionStatus;
|
||||
}
|
||||
BattlePassMissionStatus(int value, MissionStatus missionStatus) {
|
||||
this.value = value;
|
||||
this.missionStatus = missionStatus; // In case proto enum values change later
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public MissionStatus getMissionStatus() {
|
||||
return missionStatus;
|
||||
}
|
||||
}
|
||||
|
||||
48
src/main/java/emu/grasscutter/game/props/CampTargetType.java
Normal file
48
src/main/java/emu/grasscutter/game/props/CampTargetType.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import emu.grasscutter.scripts.constants.IntValueEnum;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public enum CampTargetType implements IntValueEnum {
|
||||
None(0),
|
||||
Alliance(1),
|
||||
Enemy(2),
|
||||
Self(3),
|
||||
SelfCamp(4),
|
||||
All(5),
|
||||
AllExceptSelf(6),
|
||||
AllianceIncludeSelf(7);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<CampTargetType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, CampTargetType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private CampTargetType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static CampTargetType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, None);
|
||||
}
|
||||
|
||||
public static CampTargetType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, None);
|
||||
}
|
||||
}
|
||||
@@ -1,54 +1,56 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum ClimateType {
|
||||
CLIMATE_NONE(0),
|
||||
CLIMATE_SUNNY(1),
|
||||
CLIMATE_CLOUDY(2),
|
||||
CLIMATE_RAIN(3),
|
||||
CLIMATE_THUNDERSTORM(4),
|
||||
CLIMATE_SNOW(5),
|
||||
CLIMATE_MIST(6);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<ClimateType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, ClimateType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private ClimateType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
CLIMATE_NONE(0),
|
||||
CLIMATE_SUNNY(1),
|
||||
CLIMATE_CLOUDY(2),
|
||||
CLIMATE_RAIN(3),
|
||||
CLIMATE_THUNDERSTORM(4),
|
||||
CLIMATE_SNOW(5),
|
||||
CLIMATE_MIST(6);
|
||||
|
||||
public int getValue() {
|
||||
return this.value;
|
||||
}
|
||||
private static final Int2ObjectMap<ClimateType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, ClimateType> stringMap = new HashMap<>();
|
||||
|
||||
public String getShortName() {
|
||||
return this.name().substring(8).toLowerCase();
|
||||
}
|
||||
|
||||
public static ClimateType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, CLIMATE_NONE);
|
||||
}
|
||||
|
||||
public static ClimateType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, CLIMATE_NONE);
|
||||
}
|
||||
|
||||
public static ClimateType getTypeByShortName(String shortName) {
|
||||
String name = "CLIMATE_" + shortName.toUpperCase();
|
||||
return stringMap.getOrDefault(name, CLIMATE_NONE);
|
||||
}
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private final int value;
|
||||
|
||||
ClimateType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static ClimateType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, CLIMATE_NONE);
|
||||
}
|
||||
|
||||
public static ClimateType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, CLIMATE_NONE);
|
||||
}
|
||||
|
||||
public static ClimateType getTypeByShortName(String shortName) {
|
||||
String name = "CLIMATE_" + shortName.toUpperCase();
|
||||
return stringMap.getOrDefault(name, CLIMATE_NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public String getShortName() {
|
||||
return this.name().substring(8).toLowerCase();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,57 +1,119 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import emu.grasscutter.scripts.constants.IntValueEnum;
|
||||
import emu.grasscutter.utils.Utils;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
import lombok.Getter;
|
||||
|
||||
public enum ElementType {
|
||||
None (0, FightProperty.FIGHT_PROP_CUR_FIRE_ENERGY, FightProperty.FIGHT_PROP_MAX_FIRE_ENERGY),
|
||||
Fire (1, FightProperty.FIGHT_PROP_CUR_FIRE_ENERGY, FightProperty.FIGHT_PROP_MAX_FIRE_ENERGY, 10101, "TeamResonance_Fire_Lv2", 2),
|
||||
Water (2, FightProperty.FIGHT_PROP_CUR_WATER_ENERGY, FightProperty.FIGHT_PROP_MAX_WATER_ENERGY, 10201, "TeamResonance_Water_Lv2", 3),
|
||||
Grass (3, FightProperty.FIGHT_PROP_CUR_GRASS_ENERGY, FightProperty.FIGHT_PROP_MAX_GRASS_ENERGY, 10501, "TeamResonance_Grass_Lv2", 8),
|
||||
Electric (4, FightProperty.FIGHT_PROP_CUR_ELEC_ENERGY, FightProperty.FIGHT_PROP_MAX_ELEC_ENERGY, 10401, "TeamResonance_Electric_Lv2", 7),
|
||||
Ice (5, FightProperty.FIGHT_PROP_CUR_ICE_ENERGY, FightProperty.FIGHT_PROP_MAX_ICE_ENERGY, 10601, "TeamResonance_Ice_Lv2", 5),
|
||||
Frozen (6, FightProperty.FIGHT_PROP_CUR_ICE_ENERGY, FightProperty.FIGHT_PROP_MAX_ICE_ENERGY),
|
||||
Wind (7, FightProperty.FIGHT_PROP_CUR_WIND_ENERGY, FightProperty.FIGHT_PROP_MAX_WIND_ENERGY, 10301, "TeamResonance_Wind_Lv2", 4),
|
||||
Rock (8, FightProperty.FIGHT_PROP_CUR_ROCK_ENERGY, FightProperty.FIGHT_PROP_MAX_ROCK_ENERGY, 10701, "TeamResonance_Rock_Lv2", 6),
|
||||
AntiFire (9, FightProperty.FIGHT_PROP_CUR_FIRE_ENERGY, FightProperty.FIGHT_PROP_MAX_FIRE_ENERGY),
|
||||
Default (255, FightProperty.FIGHT_PROP_CUR_FIRE_ENERGY, FightProperty.FIGHT_PROP_MAX_FIRE_ENERGY, 10801, "TeamResonance_AllDifferent");
|
||||
public enum ElementType implements IntValueEnum {
|
||||
None(0, FightProperty.FIGHT_PROP_CUR_FIRE_ENERGY, FightProperty.FIGHT_PROP_MAX_FIRE_ENERGY),
|
||||
Fire(
|
||||
1,
|
||||
FightProperty.FIGHT_PROP_CUR_FIRE_ENERGY,
|
||||
FightProperty.FIGHT_PROP_MAX_FIRE_ENERGY,
|
||||
10101,
|
||||
"TeamResonance_Fire_Lv2",
|
||||
1),
|
||||
Water(
|
||||
2,
|
||||
FightProperty.FIGHT_PROP_CUR_WATER_ENERGY,
|
||||
FightProperty.FIGHT_PROP_MAX_WATER_ENERGY,
|
||||
10201,
|
||||
"TeamResonance_Water_Lv2",
|
||||
2),
|
||||
Grass(
|
||||
3,
|
||||
FightProperty.FIGHT_PROP_CUR_GRASS_ENERGY,
|
||||
FightProperty.FIGHT_PROP_MAX_GRASS_ENERGY,
|
||||
10501,
|
||||
"TeamResonance_Grass_Lv2",
|
||||
7),
|
||||
Electric(
|
||||
4,
|
||||
FightProperty.FIGHT_PROP_CUR_ELEC_ENERGY,
|
||||
FightProperty.FIGHT_PROP_MAX_ELEC_ENERGY,
|
||||
10401,
|
||||
"TeamResonance_Electric_Lv2",
|
||||
6),
|
||||
Ice(
|
||||
5,
|
||||
FightProperty.FIGHT_PROP_CUR_ICE_ENERGY,
|
||||
FightProperty.FIGHT_PROP_MAX_ICE_ENERGY,
|
||||
10601,
|
||||
"TeamResonance_Ice_Lv2",
|
||||
4),
|
||||
Frozen(6, FightProperty.FIGHT_PROP_CUR_ICE_ENERGY, FightProperty.FIGHT_PROP_MAX_ICE_ENERGY),
|
||||
Wind(
|
||||
7,
|
||||
FightProperty.FIGHT_PROP_CUR_WIND_ENERGY,
|
||||
FightProperty.FIGHT_PROP_MAX_WIND_ENERGY,
|
||||
10301,
|
||||
"TeamResonance_Wind_Lv2",
|
||||
3),
|
||||
Rock(
|
||||
8,
|
||||
FightProperty.FIGHT_PROP_CUR_ROCK_ENERGY,
|
||||
FightProperty.FIGHT_PROP_MAX_ROCK_ENERGY,
|
||||
10701,
|
||||
"TeamResonance_Rock_Lv2",
|
||||
5),
|
||||
AntiFire(9, FightProperty.FIGHT_PROP_CUR_FIRE_ENERGY, FightProperty.FIGHT_PROP_MAX_FIRE_ENERGY),
|
||||
Default(
|
||||
255,
|
||||
FightProperty.FIGHT_PROP_CUR_FIRE_ENERGY,
|
||||
FightProperty.FIGHT_PROP_MAX_FIRE_ENERGY,
|
||||
10801,
|
||||
"TeamResonance_AllDifferent");
|
||||
|
||||
private static final Int2ObjectMap<ElementType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, ElementType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
// Create bindings for each value.
|
||||
Stream.of(ElementType.values())
|
||||
.forEach(
|
||||
entry -> {
|
||||
map.put(entry.getValue(), entry);
|
||||
stringMap.put(entry.name(), entry);
|
||||
});
|
||||
}
|
||||
|
||||
@Getter private final int value;
|
||||
@Getter private final int teamResonanceId;
|
||||
@Getter private final FightProperty curEnergyProp;
|
||||
@Getter private final FightProperty maxEnergyProp;
|
||||
@Getter private final int depotValue;
|
||||
@Getter private final int depotIndex;
|
||||
@Getter private final int configHash;
|
||||
private static final Int2ObjectMap<ElementType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, ElementType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private ElementType(int value, FightProperty curEnergyProp, FightProperty maxEnergyProp) {
|
||||
ElementType(int value, FightProperty curEnergyProp, FightProperty maxEnergyProp) {
|
||||
this(value, curEnergyProp, maxEnergyProp, 0, null, 1);
|
||||
}
|
||||
|
||||
private ElementType(int value, FightProperty curEnergyProp, FightProperty maxEnergyProp, int teamResonanceId, String configName) {
|
||||
ElementType(
|
||||
int value,
|
||||
FightProperty curEnergyProp,
|
||||
FightProperty maxEnergyProp,
|
||||
int teamResonanceId,
|
||||
String configName) {
|
||||
this(value, curEnergyProp, maxEnergyProp, teamResonanceId, configName, 1);
|
||||
}
|
||||
|
||||
private ElementType(int value, FightProperty curEnergyProp, FightProperty maxEnergyProp, int teamResonanceId, String configName, int depotValue) {
|
||||
ElementType(
|
||||
int value,
|
||||
FightProperty curEnergyProp,
|
||||
FightProperty maxEnergyProp,
|
||||
int teamResonanceId,
|
||||
String configName,
|
||||
int depotIndex) {
|
||||
this.value = value;
|
||||
this.curEnergyProp = curEnergyProp;
|
||||
this.maxEnergyProp = maxEnergyProp;
|
||||
this.teamResonanceId = teamResonanceId;
|
||||
this.depotValue = depotValue;
|
||||
this.depotIndex = depotIndex;
|
||||
if (configName != null) {
|
||||
this.configHash = Utils.abilityHash(configName);
|
||||
} else {
|
||||
|
||||
@@ -1,70 +1,72 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum EnterReason {
|
||||
None(0),
|
||||
Login(1),
|
||||
DungeonReplay(11),
|
||||
DungeonReviveOnWaypoint(12),
|
||||
DungeonEnter(13),
|
||||
DungeonQuit(14),
|
||||
Gm(21),
|
||||
QuestRollback(31),
|
||||
Revival(32),
|
||||
PersonalScene(41),
|
||||
TransPoint(42),
|
||||
ClientTransmit(43),
|
||||
ForceDragBack(44),
|
||||
TeamKick(51),
|
||||
TeamJoin(52),
|
||||
TeamBack(53),
|
||||
Muip(54),
|
||||
DungeonInviteAccept(55),
|
||||
Lua(56),
|
||||
ActivityLoadTerrain(57),
|
||||
HostFromSingleToMp(58),
|
||||
MpPlay(59),
|
||||
AnchorPoint(60),
|
||||
LuaSkipUi(61),
|
||||
ReloadTerrain(62),
|
||||
DraftTransfer(63),
|
||||
EnterHome(64),
|
||||
ExitHome(65),
|
||||
ChangeHomeModule(66),
|
||||
Gallery(67),
|
||||
HomeSceneJump(68),
|
||||
HideAndSeek(69);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<EnterReason> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, EnterReason> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private EnterReason(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
None(0),
|
||||
Login(1),
|
||||
DungeonReplay(11),
|
||||
DungeonReviveOnWaypoint(12),
|
||||
DungeonEnter(13),
|
||||
DungeonQuit(14),
|
||||
Gm(21),
|
||||
QuestRollback(31),
|
||||
Revival(32),
|
||||
PersonalScene(41),
|
||||
TransPoint(42),
|
||||
ClientTransmit(43),
|
||||
ForceDragBack(44),
|
||||
TeamKick(51),
|
||||
TeamJoin(52),
|
||||
TeamBack(53),
|
||||
Muip(54),
|
||||
DungeonInviteAccept(55),
|
||||
Lua(56),
|
||||
ActivityLoadTerrain(57),
|
||||
HostFromSingleToMp(58),
|
||||
MpPlay(59),
|
||||
AnchorPoint(60),
|
||||
LuaSkipUi(61),
|
||||
ReloadTerrain(62),
|
||||
DraftTransfer(63),
|
||||
EnterHome(64),
|
||||
ExitHome(65),
|
||||
ChangeHomeModule(66),
|
||||
Gallery(67),
|
||||
HomeSceneJump(68),
|
||||
HideAndSeek(69);
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static EnterReason getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, None);
|
||||
}
|
||||
|
||||
public static EnterReason getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, None);
|
||||
}
|
||||
private static final Int2ObjectMap<EnterReason> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, EnterReason> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private final int value;
|
||||
|
||||
EnterReason(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static EnterReason getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, None);
|
||||
}
|
||||
|
||||
public static EnterReason getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, None);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
public enum EntityIdType {
|
||||
AVATAR (0x01),
|
||||
MONSTER (0x02),
|
||||
NPC (0x03),
|
||||
GADGET (0x04),
|
||||
REGION (0x05),
|
||||
WEAPON (0x06),
|
||||
TEAM (0x09),
|
||||
MPLEVEL (0x0b);
|
||||
AVATAR(0x01),
|
||||
MONSTER(0x02),
|
||||
NPC(0x03),
|
||||
GADGET(0x04),
|
||||
REGION(0x05),
|
||||
WEAPON(0x06),
|
||||
TEAM(0x09),
|
||||
MPLEVEL(0x0b);
|
||||
|
||||
private final int id;
|
||||
private final int id;
|
||||
|
||||
private EntityIdType(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
EntityIdType(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,101 +1,100 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import emu.grasscutter.scripts.constants.IntValueEnum;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
public enum EntityType implements IntValueEnum {
|
||||
None(0),
|
||||
Avatar(1),
|
||||
Monster(2),
|
||||
Bullet(3),
|
||||
AttackPhyisicalUnit(4),
|
||||
AOE(5),
|
||||
Camera(6),
|
||||
EnviroArea(7),
|
||||
Equip(8),
|
||||
MonsterEquip(9),
|
||||
Grass(10),
|
||||
Level(11),
|
||||
NPC(12),
|
||||
TransPointFirst(13),
|
||||
TransPointFirstGadget(14),
|
||||
TransPointSecond(15),
|
||||
TransPointSecondGadget(16),
|
||||
DropItem(17),
|
||||
Field(18),
|
||||
Gadget(19),
|
||||
Water(20),
|
||||
GatherPoint(21),
|
||||
GatherObject(22),
|
||||
AirflowField(23),
|
||||
SpeedupField(24),
|
||||
Gear(25),
|
||||
Chest(26),
|
||||
EnergyBall(27),
|
||||
ElemCrystal(28),
|
||||
Timeline(29),
|
||||
Worktop(30),
|
||||
Team(31),
|
||||
Platform(32),
|
||||
AmberWind(33),
|
||||
EnvAnimal(34),
|
||||
SealGadget(35),
|
||||
Tree(36),
|
||||
Bush(37),
|
||||
QuestGadget(38),
|
||||
Lightning(39),
|
||||
RewardPoint(40),
|
||||
RewardStatue(41),
|
||||
MPLevel(42),
|
||||
WindSeed(43),
|
||||
MpPlayRewardPoint(44),
|
||||
ViewPoint(45),
|
||||
RemoteAvatar(46),
|
||||
GeneralRewardPoint(47),
|
||||
PlayTeam(48),
|
||||
OfferingGadget(49),
|
||||
EyePoint(50),
|
||||
MiracleRing(51),
|
||||
Foundation(52),
|
||||
WidgetGadget(53),
|
||||
Vehicle(54),
|
||||
SubEquip(55),
|
||||
FishRod(56),
|
||||
CustomTile(57),
|
||||
FishPool(58),
|
||||
CustomGadget(59),
|
||||
BlackMud(60),
|
||||
RoguelikeOperatorGadget(61),
|
||||
NightCrowGadget(62),
|
||||
Projector(63),
|
||||
Screen(64),
|
||||
EchoShell(65),
|
||||
UIInteractGadget(66),
|
||||
PlaceHolder(99);
|
||||
|
||||
public enum EntityType {
|
||||
None (0),
|
||||
Avatar (1),
|
||||
Monster (2),
|
||||
Bullet (3),
|
||||
AttackPhyisicalUnit (4),
|
||||
AOE (5),
|
||||
Camera (6),
|
||||
EnviroArea (7),
|
||||
Equip (8),
|
||||
MonsterEquip (9),
|
||||
Grass (10),
|
||||
Level (11),
|
||||
NPC (12),
|
||||
TransPointFirst (13),
|
||||
TransPointFirstGadget (14),
|
||||
TransPointSecond (15),
|
||||
TransPointSecondGadget (16),
|
||||
DropItem (17),
|
||||
Field (18),
|
||||
Gadget (19),
|
||||
Water (20),
|
||||
GatherPoint (21),
|
||||
GatherObject (22),
|
||||
AirflowField (23),
|
||||
SpeedupField (24),
|
||||
Gear (25),
|
||||
Chest (26),
|
||||
EnergyBall (27),
|
||||
ElemCrystal (28),
|
||||
Timeline (29),
|
||||
Worktop (30),
|
||||
Team (31),
|
||||
Platform (32),
|
||||
AmberWind (33),
|
||||
EnvAnimal (34),
|
||||
SealGadget (35),
|
||||
Tree (36),
|
||||
Bush (37),
|
||||
QuestGadget (38),
|
||||
Lightning (39),
|
||||
RewardPoint (40),
|
||||
RewardStatue (41),
|
||||
MPLevel (42),
|
||||
WindSeed (43),
|
||||
MpPlayRewardPoint (44),
|
||||
ViewPoint (45),
|
||||
RemoteAvatar (46),
|
||||
GeneralRewardPoint (47),
|
||||
PlayTeam (48),
|
||||
OfferingGadget (49),
|
||||
EyePoint (50),
|
||||
MiracleRing (51),
|
||||
Foundation (52),
|
||||
WidgetGadget (53),
|
||||
Vehicle (54),
|
||||
SubEquip (55),
|
||||
FishRod (56),
|
||||
CustomTile (57),
|
||||
FishPool (58),
|
||||
CustomGadget (59),
|
||||
BlackMud (60),
|
||||
RoguelikeOperatorGadget (61),
|
||||
NightCrowGadget (62),
|
||||
Projector (63),
|
||||
Screen (64),
|
||||
EchoShell (65),
|
||||
UIInteractGadget (66),
|
||||
PlaceHolder (99);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<EntityType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, EntityType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private EntityType(int value) {
|
||||
private final int value;
|
||||
|
||||
EntityType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static EntityType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, None);
|
||||
}
|
||||
@@ -103,4 +102,8 @@ public enum EntityType {
|
||||
public static EntityType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, None);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,42 +1,44 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum FetterState {
|
||||
NONE(0),
|
||||
NOT_OPEN(1),
|
||||
OPEN(1),
|
||||
FINISH(3);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<FetterState> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, FetterState> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private FetterState(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static FetterState getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, NONE);
|
||||
}
|
||||
|
||||
public static FetterState getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, NONE);
|
||||
}
|
||||
}
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public enum FetterState {
|
||||
NONE(0),
|
||||
NOT_OPEN(1),
|
||||
OPEN(1),
|
||||
FINISH(3);
|
||||
|
||||
private static final Int2ObjectMap<FetterState> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, FetterState> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private final int value;
|
||||
|
||||
FetterState(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static FetterState getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, NONE);
|
||||
}
|
||||
|
||||
public static FetterState getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,12 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static java.util.Map.entry;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Stream;
|
||||
import lombok.Getter;
|
||||
|
||||
public enum FightProperty {
|
||||
@@ -113,27 +107,112 @@ public enum FightProperty {
|
||||
FIGHT_PROP_NONEXTRA_SHIELD_COST_MINUS_RATIO(3023),
|
||||
FIGHT_PROP_NONEXTRA_PHYSICAL_ADD_HURT(3024);
|
||||
|
||||
private final int id;
|
||||
public static final int[] fightProps =
|
||||
new int[] {
|
||||
1, 4, 7, 20, 21, 22, 23, 26, 27, 28, 29, 30, 40, 41, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54,
|
||||
55, 56, 2000, 2001, 2002, 2003, 1010
|
||||
};
|
||||
private static final Int2ObjectMap<FightProperty> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, FightProperty> stringMap = new HashMap<>();
|
||||
|
||||
public static final int[] fightProps = new int[] {1, 4, 7, 20, 21, 22, 23, 26, 27, 28, 29, 30, 40, 41, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54, 55, 56, 2000, 2001, 2002, 2003, 1010};
|
||||
// This was originally for relic properties so some names might not be applicable for e.g.
|
||||
// setstats
|
||||
private static final Map<String, FightProperty> shortNameMap =
|
||||
Map.ofEntries(
|
||||
// Normal relic stats
|
||||
entry("hp", FIGHT_PROP_HP),
|
||||
entry("atk", FIGHT_PROP_ATTACK),
|
||||
entry("def", FIGHT_PROP_DEFENSE),
|
||||
entry("hp%", FIGHT_PROP_HP_PERCENT),
|
||||
entry("atk%", FIGHT_PROP_ATTACK_PERCENT),
|
||||
entry("def%", FIGHT_PROP_DEFENSE_PERCENT),
|
||||
entry("em", FIGHT_PROP_ELEMENT_MASTERY),
|
||||
entry("er", FIGHT_PROP_CHARGE_EFFICIENCY),
|
||||
entry("hb", FIGHT_PROP_HEAL_ADD),
|
||||
entry("heal", FIGHT_PROP_HEAL_ADD),
|
||||
entry("cd", FIGHT_PROP_CRITICAL_HURT),
|
||||
entry("cdmg", FIGHT_PROP_CRITICAL_HURT),
|
||||
entry("cr", FIGHT_PROP_CRITICAL),
|
||||
entry("crate", FIGHT_PROP_CRITICAL),
|
||||
entry("phys%", FIGHT_PROP_PHYSICAL_ADD_HURT),
|
||||
entry("dendro%", FIGHT_PROP_GRASS_ADD_HURT),
|
||||
entry("geo%", FIGHT_PROP_ROCK_ADD_HURT),
|
||||
entry("anemo%", FIGHT_PROP_WIND_ADD_HURT),
|
||||
entry("hydro%", FIGHT_PROP_WATER_ADD_HURT),
|
||||
entry("cryo%", FIGHT_PROP_ICE_ADD_HURT),
|
||||
entry("electro%", FIGHT_PROP_ELEC_ADD_HURT),
|
||||
entry("pyro%", FIGHT_PROP_FIRE_ADD_HURT),
|
||||
// Other stats
|
||||
entry("maxhp", FIGHT_PROP_MAX_HP),
|
||||
entry("dmg", FIGHT_PROP_ADD_HURT), // This seems to get reset after attacks
|
||||
entry("cdr", FIGHT_PROP_SKILL_CD_MINUS_RATIO),
|
||||
entry("heali", FIGHT_PROP_HEALED_ADD),
|
||||
entry("shield", FIGHT_PROP_SHIELD_COST_MINUS_RATIO),
|
||||
entry("defi", FIGHT_PROP_DEFENCE_IGNORE_RATIO),
|
||||
entry("resall", FIGHT_PROP_SUB_HURT), // This seems to get reset after attacks
|
||||
entry("resanemo", FIGHT_PROP_WIND_SUB_HURT),
|
||||
entry("rescryo", FIGHT_PROP_ICE_SUB_HURT),
|
||||
entry("resdendro", FIGHT_PROP_GRASS_SUB_HURT),
|
||||
entry("reselectro", FIGHT_PROP_ELEC_SUB_HURT),
|
||||
entry("resgeo", FIGHT_PROP_ROCK_SUB_HURT),
|
||||
entry("reshydro", FIGHT_PROP_WATER_SUB_HURT),
|
||||
entry("respyro", FIGHT_PROP_FIRE_SUB_HURT),
|
||||
entry("resphys", FIGHT_PROP_PHYSICAL_SUB_HURT));
|
||||
private static final List<FightProperty> flatProps =
|
||||
Arrays.asList(
|
||||
FIGHT_PROP_BASE_HP,
|
||||
FIGHT_PROP_HP,
|
||||
FIGHT_PROP_BASE_ATTACK,
|
||||
FIGHT_PROP_ATTACK,
|
||||
FIGHT_PROP_BASE_DEFENSE,
|
||||
FIGHT_PROP_DEFENSE,
|
||||
FIGHT_PROP_HEALED_ADD,
|
||||
FIGHT_PROP_CUR_FIRE_ENERGY,
|
||||
FIGHT_PROP_CUR_ELEC_ENERGY,
|
||||
FIGHT_PROP_CUR_WATER_ENERGY,
|
||||
FIGHT_PROP_CUR_GRASS_ENERGY,
|
||||
FIGHT_PROP_CUR_WIND_ENERGY,
|
||||
FIGHT_PROP_CUR_ICE_ENERGY,
|
||||
FIGHT_PROP_CUR_ROCK_ENERGY,
|
||||
FIGHT_PROP_CUR_HP,
|
||||
FIGHT_PROP_MAX_HP,
|
||||
FIGHT_PROP_CUR_ATTACK,
|
||||
FIGHT_PROP_CUR_DEFENSE);
|
||||
private static final Map<FightProperty, CompoundProperty> compoundProperties =
|
||||
Map.ofEntries(
|
||||
entry(
|
||||
FIGHT_PROP_MAX_HP,
|
||||
new CompoundProperty(
|
||||
FIGHT_PROP_MAX_HP, FIGHT_PROP_BASE_HP, FIGHT_PROP_HP_PERCENT, FIGHT_PROP_HP)),
|
||||
entry(
|
||||
FIGHT_PROP_CUR_ATTACK,
|
||||
new CompoundProperty(
|
||||
FIGHT_PROP_CUR_ATTACK,
|
||||
FIGHT_PROP_BASE_ATTACK,
|
||||
FIGHT_PROP_ATTACK_PERCENT,
|
||||
FIGHT_PROP_ATTACK)),
|
||||
entry(
|
||||
FIGHT_PROP_CUR_DEFENSE,
|
||||
new CompoundProperty(
|
||||
FIGHT_PROP_CUR_DEFENSE,
|
||||
FIGHT_PROP_BASE_DEFENSE,
|
||||
FIGHT_PROP_DEFENSE_PERCENT,
|
||||
FIGHT_PROP_DEFENSE)));
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getId(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getId(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private FightProperty(int id) {
|
||||
private final int id;
|
||||
|
||||
FightProperty(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public static FightProperty getPropById(int value) {
|
||||
return map.getOrDefault(value, FIGHT_PROP_NONE);
|
||||
}
|
||||
@@ -150,76 +229,6 @@ public enum FightProperty {
|
||||
return shortNameMap.keySet();
|
||||
}
|
||||
|
||||
// This was originally for relic properties so some names might not be applicable for e.g. setstats
|
||||
private static final Map<String, FightProperty> shortNameMap = Map.ofEntries(
|
||||
// Normal relic stats
|
||||
entry("hp", FIGHT_PROP_HP),
|
||||
entry("atk", FIGHT_PROP_ATTACK),
|
||||
entry("def", FIGHT_PROP_DEFENSE),
|
||||
entry("hp%", FIGHT_PROP_HP_PERCENT),
|
||||
entry("atk%", FIGHT_PROP_ATTACK_PERCENT),
|
||||
entry("def%", FIGHT_PROP_DEFENSE_PERCENT),
|
||||
entry("em", FIGHT_PROP_ELEMENT_MASTERY),
|
||||
entry("er", FIGHT_PROP_CHARGE_EFFICIENCY),
|
||||
entry("hb", FIGHT_PROP_HEAL_ADD),
|
||||
entry("heal", FIGHT_PROP_HEAL_ADD),
|
||||
entry("cd", FIGHT_PROP_CRITICAL_HURT),
|
||||
entry("cdmg", FIGHT_PROP_CRITICAL_HURT),
|
||||
entry("cr", FIGHT_PROP_CRITICAL),
|
||||
entry("crate", FIGHT_PROP_CRITICAL),
|
||||
entry("phys%", FIGHT_PROP_PHYSICAL_ADD_HURT),
|
||||
entry("dendro%", FIGHT_PROP_GRASS_ADD_HURT),
|
||||
entry("geo%", FIGHT_PROP_ROCK_ADD_HURT),
|
||||
entry("anemo%", FIGHT_PROP_WIND_ADD_HURT),
|
||||
entry("hydro%", FIGHT_PROP_WATER_ADD_HURT),
|
||||
entry("cryo%", FIGHT_PROP_ICE_ADD_HURT),
|
||||
entry("electro%", FIGHT_PROP_ELEC_ADD_HURT),
|
||||
entry("pyro%", FIGHT_PROP_FIRE_ADD_HURT),
|
||||
// Other stats
|
||||
entry("maxhp", FIGHT_PROP_MAX_HP),
|
||||
entry("dmg", FIGHT_PROP_ADD_HURT), // This seems to get reset after attacks
|
||||
entry("cdr", FIGHT_PROP_SKILL_CD_MINUS_RATIO),
|
||||
entry("heali", FIGHT_PROP_HEALED_ADD),
|
||||
entry("shield", FIGHT_PROP_SHIELD_COST_MINUS_RATIO),
|
||||
entry("defi", FIGHT_PROP_DEFENCE_IGNORE_RATIO),
|
||||
entry("resall", FIGHT_PROP_SUB_HURT), // This seems to get reset after attacks
|
||||
entry("resanemo", FIGHT_PROP_WIND_SUB_HURT),
|
||||
entry("rescryo", FIGHT_PROP_ICE_SUB_HURT),
|
||||
entry("resdendro", FIGHT_PROP_GRASS_SUB_HURT),
|
||||
entry("reselectro", FIGHT_PROP_ELEC_SUB_HURT),
|
||||
entry("resgeo", FIGHT_PROP_ROCK_SUB_HURT),
|
||||
entry("reshydro", FIGHT_PROP_WATER_SUB_HURT),
|
||||
entry("respyro", FIGHT_PROP_FIRE_SUB_HURT),
|
||||
entry("resphys", FIGHT_PROP_PHYSICAL_SUB_HURT)
|
||||
);
|
||||
|
||||
private static final List<FightProperty> flatProps = Arrays.asList(
|
||||
FIGHT_PROP_BASE_HP, FIGHT_PROP_HP, FIGHT_PROP_BASE_ATTACK, FIGHT_PROP_ATTACK, FIGHT_PROP_BASE_DEFENSE,
|
||||
FIGHT_PROP_DEFENSE, FIGHT_PROP_HEALED_ADD, FIGHT_PROP_CUR_FIRE_ENERGY, FIGHT_PROP_CUR_ELEC_ENERGY,
|
||||
FIGHT_PROP_CUR_WATER_ENERGY, FIGHT_PROP_CUR_GRASS_ENERGY, FIGHT_PROP_CUR_WIND_ENERGY, FIGHT_PROP_CUR_ICE_ENERGY,
|
||||
FIGHT_PROP_CUR_ROCK_ENERGY, FIGHT_PROP_CUR_HP, FIGHT_PROP_MAX_HP, FIGHT_PROP_CUR_ATTACK, FIGHT_PROP_CUR_DEFENSE);
|
||||
|
||||
@Getter
|
||||
public static class CompoundProperty {
|
||||
private FightProperty result;
|
||||
private FightProperty base;
|
||||
private FightProperty percent;
|
||||
private FightProperty flat;
|
||||
|
||||
public CompoundProperty(FightProperty result, FightProperty base, FightProperty percent, FightProperty flat) {
|
||||
this.result = result;
|
||||
this.base = base;
|
||||
this.percent = percent;
|
||||
this.flat = flat;
|
||||
}
|
||||
}
|
||||
|
||||
private static Map<FightProperty, CompoundProperty> compoundProperties = Map.ofEntries(
|
||||
entry(FIGHT_PROP_MAX_HP, new CompoundProperty(FIGHT_PROP_MAX_HP, FIGHT_PROP_BASE_HP, FIGHT_PROP_HP_PERCENT, FIGHT_PROP_HP)),
|
||||
entry(FIGHT_PROP_CUR_ATTACK, new CompoundProperty(FIGHT_PROP_CUR_ATTACK, FIGHT_PROP_BASE_ATTACK, FIGHT_PROP_ATTACK_PERCENT, FIGHT_PROP_ATTACK)),
|
||||
entry(FIGHT_PROP_CUR_DEFENSE, new CompoundProperty(FIGHT_PROP_CUR_DEFENSE, FIGHT_PROP_BASE_DEFENSE, FIGHT_PROP_DEFENSE_PERCENT, FIGHT_PROP_DEFENSE))
|
||||
);
|
||||
|
||||
public static CompoundProperty getCompoundProperty(FightProperty result) {
|
||||
return compoundProperties.get(result);
|
||||
}
|
||||
@@ -231,4 +240,24 @@ public enum FightProperty {
|
||||
public static boolean isPercentage(FightProperty prop) {
|
||||
return !flatProps.contains(prop);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Getter
|
||||
public static class CompoundProperty {
|
||||
private final FightProperty result;
|
||||
private final FightProperty base;
|
||||
private final FightProperty percent;
|
||||
private final FightProperty flat;
|
||||
|
||||
public CompoundProperty(
|
||||
FightProperty result, FightProperty base, FightProperty percent, FightProperty flat) {
|
||||
this.result = result;
|
||||
this.base = base;
|
||||
this.percent = percent;
|
||||
this.flat = flat;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,100 +1,105 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum GrowCurve {
|
||||
GROW_CURVE_NONE(0),
|
||||
GROW_CURVE_HP(1),
|
||||
GROW_CURVE_ATTACK(2),
|
||||
GROW_CURVE_STAMINA(3),
|
||||
GROW_CURVE_STRIKE(4),
|
||||
GROW_CURVE_ANTI_STRIKE(5),
|
||||
GROW_CURVE_ANTI_STRIKE1(6),
|
||||
GROW_CURVE_ANTI_STRIKE2(7),
|
||||
GROW_CURVE_ANTI_STRIKE3(8),
|
||||
GROW_CURVE_STRIKE_HURT(9),
|
||||
GROW_CURVE_ELEMENT(10),
|
||||
GROW_CURVE_KILL_EXP(11),
|
||||
GROW_CURVE_DEFENSE(12),
|
||||
GROW_CURVE_ATTACK_BOMB(13),
|
||||
GROW_CURVE_HP_LITTLEMONSTER(14),
|
||||
GROW_CURVE_ELEMENT_MASTERY(15),
|
||||
GROW_CURVE_PROGRESSION(16),
|
||||
GROW_CURVE_DEFENDING(17),
|
||||
GROW_CURVE_MHP(18),
|
||||
GROW_CURVE_MATK(19),
|
||||
GROW_CURVE_TOWERATK(20),
|
||||
GROW_CURVE_HP_S5(21),
|
||||
GROW_CURVE_HP_S4(22),
|
||||
GROW_CURVE_HP_2(23),
|
||||
GROW_CURVE_ATTACK_S5(31),
|
||||
GROW_CURVE_ATTACK_S4(32),
|
||||
GROW_CURVE_ATTACK_S3(33),
|
||||
GROW_CURVE_STRIKE_S5(34),
|
||||
GROW_CURVE_DEFENSE_S5(41),
|
||||
GROW_CURVE_DEFENSE_S4(42),
|
||||
GROW_CURVE_ATTACK_101(1101),
|
||||
GROW_CURVE_ATTACK_102(1102),
|
||||
GROW_CURVE_ATTACK_103(1103),
|
||||
GROW_CURVE_ATTACK_104(1104),
|
||||
GROW_CURVE_ATTACK_105(1105),
|
||||
GROW_CURVE_ATTACK_201(1201),
|
||||
GROW_CURVE_ATTACK_202(1202),
|
||||
GROW_CURVE_ATTACK_203(1203),
|
||||
GROW_CURVE_ATTACK_204(1204),
|
||||
GROW_CURVE_ATTACK_205(1205),
|
||||
GROW_CURVE_ATTACK_301(1301),
|
||||
GROW_CURVE_ATTACK_302(1302),
|
||||
GROW_CURVE_ATTACK_303(1303),
|
||||
GROW_CURVE_ATTACK_304(1304),
|
||||
GROW_CURVE_ATTACK_305(1305),
|
||||
GROW_CURVE_CRITICAL_101(2101),
|
||||
GROW_CURVE_CRITICAL_102(2102),
|
||||
GROW_CURVE_CRITICAL_103(2103),
|
||||
GROW_CURVE_CRITICAL_104(2104),
|
||||
GROW_CURVE_CRITICAL_105(2105),
|
||||
GROW_CURVE_CRITICAL_201(2201),
|
||||
GROW_CURVE_CRITICAL_202(2202),
|
||||
GROW_CURVE_CRITICAL_203(2203),
|
||||
GROW_CURVE_CRITICAL_204(2204),
|
||||
GROW_CURVE_CRITICAL_205(2205),
|
||||
GROW_CURVE_CRITICAL_301(2301),
|
||||
GROW_CURVE_CRITICAL_302(2302),
|
||||
GROW_CURVE_CRITICAL_303(2303),
|
||||
GROW_CURVE_CRITICAL_304(2304),
|
||||
GROW_CURVE_CRITICAL_305(2305);
|
||||
|
||||
private final int id;
|
||||
private static final Int2ObjectMap<GrowCurve> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, GrowCurve> stringMap = new HashMap<>();
|
||||
|
||||
public static final int[] fightProps = new int[] {1, 4, 7, 20, 21, 22, 23, 26, 27, 28, 29, 30, 40, 41, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54, 55, 56, 2000, 2001, 2002, 2003, 1010};
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getId(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private GrowCurve(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
GROW_CURVE_NONE(0),
|
||||
GROW_CURVE_HP(1),
|
||||
GROW_CURVE_ATTACK(2),
|
||||
GROW_CURVE_STAMINA(3),
|
||||
GROW_CURVE_STRIKE(4),
|
||||
GROW_CURVE_ANTI_STRIKE(5),
|
||||
GROW_CURVE_ANTI_STRIKE1(6),
|
||||
GROW_CURVE_ANTI_STRIKE2(7),
|
||||
GROW_CURVE_ANTI_STRIKE3(8),
|
||||
GROW_CURVE_STRIKE_HURT(9),
|
||||
GROW_CURVE_ELEMENT(10),
|
||||
GROW_CURVE_KILL_EXP(11),
|
||||
GROW_CURVE_DEFENSE(12),
|
||||
GROW_CURVE_ATTACK_BOMB(13),
|
||||
GROW_CURVE_HP_LITTLEMONSTER(14),
|
||||
GROW_CURVE_ELEMENT_MASTERY(15),
|
||||
GROW_CURVE_PROGRESSION(16),
|
||||
GROW_CURVE_DEFENDING(17),
|
||||
GROW_CURVE_MHP(18),
|
||||
GROW_CURVE_MATK(19),
|
||||
GROW_CURVE_TOWERATK(20),
|
||||
GROW_CURVE_HP_S5(21),
|
||||
GROW_CURVE_HP_S4(22),
|
||||
GROW_CURVE_HP_2(23),
|
||||
GROW_CURVE_ATTACK_S5(31),
|
||||
GROW_CURVE_ATTACK_S4(32),
|
||||
GROW_CURVE_ATTACK_S3(33),
|
||||
GROW_CURVE_STRIKE_S5(34),
|
||||
GROW_CURVE_DEFENSE_S5(41),
|
||||
GROW_CURVE_DEFENSE_S4(42),
|
||||
GROW_CURVE_ATTACK_101(1101),
|
||||
GROW_CURVE_ATTACK_102(1102),
|
||||
GROW_CURVE_ATTACK_103(1103),
|
||||
GROW_CURVE_ATTACK_104(1104),
|
||||
GROW_CURVE_ATTACK_105(1105),
|
||||
GROW_CURVE_ATTACK_201(1201),
|
||||
GROW_CURVE_ATTACK_202(1202),
|
||||
GROW_CURVE_ATTACK_203(1203),
|
||||
GROW_CURVE_ATTACK_204(1204),
|
||||
GROW_CURVE_ATTACK_205(1205),
|
||||
GROW_CURVE_ATTACK_301(1301),
|
||||
GROW_CURVE_ATTACK_302(1302),
|
||||
GROW_CURVE_ATTACK_303(1303),
|
||||
GROW_CURVE_ATTACK_304(1304),
|
||||
GROW_CURVE_ATTACK_305(1305),
|
||||
GROW_CURVE_CRITICAL_101(2101),
|
||||
GROW_CURVE_CRITICAL_102(2102),
|
||||
GROW_CURVE_CRITICAL_103(2103),
|
||||
GROW_CURVE_CRITICAL_104(2104),
|
||||
GROW_CURVE_CRITICAL_105(2105),
|
||||
GROW_CURVE_CRITICAL_201(2201),
|
||||
GROW_CURVE_CRITICAL_202(2202),
|
||||
GROW_CURVE_CRITICAL_203(2203),
|
||||
GROW_CURVE_CRITICAL_204(2204),
|
||||
GROW_CURVE_CRITICAL_205(2205),
|
||||
GROW_CURVE_CRITICAL_301(2301),
|
||||
GROW_CURVE_CRITICAL_302(2302),
|
||||
GROW_CURVE_CRITICAL_303(2303),
|
||||
GROW_CURVE_CRITICAL_304(2304),
|
||||
GROW_CURVE_CRITICAL_305(2305);
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public static GrowCurve getPropById(int value) {
|
||||
return map.getOrDefault(value, GROW_CURVE_NONE);
|
||||
}
|
||||
|
||||
public static GrowCurve getPropByName(String name) {
|
||||
return stringMap.getOrDefault(name, GROW_CURVE_NONE);
|
||||
}
|
||||
public static final int[] fightProps =
|
||||
new int[] {
|
||||
1, 4, 7, 20, 21, 22, 23, 26, 27, 28, 29, 30, 40, 41, 42, 43, 44, 45, 46, 50, 51, 52, 53, 54,
|
||||
55, 56, 2000, 2001, 2002, 2003, 1010
|
||||
};
|
||||
private static final Int2ObjectMap<GrowCurve> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, GrowCurve> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getId(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private final int id;
|
||||
|
||||
GrowCurve(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public static GrowCurve getPropById(int value) {
|
||||
return map.getOrDefault(value, GROW_CURVE_NONE);
|
||||
}
|
||||
|
||||
public static GrowCurve getPropByName(String name) {
|
||||
return stringMap.getOrDefault(name, GROW_CURVE_NONE);
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,15 +3,15 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseAcceptQuest extends ItemUseInt {
|
||||
public ItemUseAcceptQuest(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ACCEPT_QUEST;
|
||||
}
|
||||
|
||||
public ItemUseAcceptQuest(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return (params.player.getQuestManager().addQuest(this.i) != null);
|
||||
|
||||
@@ -4,67 +4,72 @@ import emu.grasscutter.data.common.ItemUseData;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseAction {
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_NONE;
|
||||
}
|
||||
|
||||
public static ItemUseAction fromItemUseData(ItemUseData data) {
|
||||
var useParam = data.getUseParam();
|
||||
return switch (data.getUseOp()) {
|
||||
case ITEM_USE_NONE -> null;
|
||||
// Uprade materials - no direct usage
|
||||
// Uprade materials - no direct usage
|
||||
case ITEM_USE_ADD_EXP -> new ItemUseAddExp(useParam);
|
||||
case ITEM_USE_ADD_RELIQUARY_EXP -> new ItemUseAddReliquaryExp(useParam);
|
||||
case ITEM_USE_ADD_WEAPON_EXP -> new ItemUseAddWeaponExp(useParam);
|
||||
// Energy pickups
|
||||
// Energy pickups
|
||||
case ITEM_USE_ADD_ALL_ENERGY -> new ItemUseAddAllEnergy(useParam);
|
||||
case ITEM_USE_ADD_ELEM_ENERGY -> new ItemUseAddElemEnergy(useParam);
|
||||
// Give items
|
||||
// Give items
|
||||
case ITEM_USE_ADD_ITEM -> new ItemUseAddItem(useParam);
|
||||
case ITEM_USE_GAIN_AVATAR -> new ItemUseGainAvatar(useParam);
|
||||
case ITEM_USE_GAIN_COSTUME -> new ItemUseGainCostume(useParam); // TODO - real success/fail
|
||||
case ITEM_USE_GAIN_FLYCLOAK -> new ItemUseGainFlycloak(useParam); // TODO - real success/fail
|
||||
case ITEM_USE_GAIN_COSTUME -> new ItemUseGainCostume(useParam); // TODO - real success/fail
|
||||
case ITEM_USE_GAIN_FLYCLOAK -> new ItemUseGainFlycloak(useParam); // TODO - real success/fail
|
||||
case ITEM_USE_GAIN_NAME_CARD -> new ItemUseGainNameCard(useParam);
|
||||
case ITEM_USE_CHEST_SELECT_ITEM -> new ItemUseChestSelectItem(useParam);
|
||||
case ITEM_USE_ADD_SELECT_ITEM -> new ItemUseAddSelectItem(useParam);
|
||||
case ITEM_USE_GRANT_SELECT_REWARD -> new ItemUseGrantSelectReward(useParam);
|
||||
case ITEM_USE_COMBINE_ITEM -> new ItemUseCombineItem(useParam);
|
||||
case ITEM_USE_OPEN_RANDOM_CHEST -> new ItemUseOpenRandomChest(useParam);
|
||||
// Food effects
|
||||
case ITEM_USE_RELIVE_AVATAR -> new ItemUseReliveAvatar(useParam); // First action for revival food. Should we worry about race conditions in parallel streams?
|
||||
// Food effects
|
||||
case ITEM_USE_RELIVE_AVATAR -> new ItemUseReliveAvatar(
|
||||
useParam); // First action for revival food. Should we worry about race conditions in
|
||||
// parallel streams?
|
||||
case ITEM_USE_ADD_CUR_HP -> new ItemUseAddCurHp(useParam);
|
||||
case ITEM_USE_ADD_CUR_STAMINA -> new ItemUseAddCurStamina(useParam);
|
||||
case ITEM_USE_ADD_SERVER_BUFF -> new ItemUseAddServerBuff(useParam);
|
||||
case ITEM_USE_MAKE_GADGET -> new ItemUseMakeGadget(useParam);
|
||||
// Unlock recipes - TODO: allow scheduling packets for after recipe is removed
|
||||
// Unlock recipes - TODO: allow scheduling packets for after recipe is removed
|
||||
case ITEM_USE_UNLOCK_COMBINE -> new ItemUseUnlockCombine(useParam);
|
||||
case ITEM_USE_UNLOCK_CODEX -> new ItemUseUnlockCodex(useParam); // TODO: No backend for this yet
|
||||
case ITEM_USE_UNLOCK_CODEX -> new ItemUseUnlockCodex(
|
||||
useParam); // TODO: No backend for this yet
|
||||
case ITEM_USE_UNLOCK_COOK_RECIPE -> new ItemUseUnlockCookRecipe(useParam);
|
||||
case ITEM_USE_UNLOCK_FORGE -> new ItemUseUnlockForge(useParam);
|
||||
case ITEM_USE_UNLOCK_FURNITURE_FORMULA -> new ItemUseUnlockFurnitureFormula(useParam);
|
||||
case ITEM_USE_UNLOCK_FURNITURE_SUITE -> new ItemUseUnlockFurnitureSuite(useParam);
|
||||
case ITEM_USE_UNLOCK_HOME_MODULE -> new ItemUseUnlockHomeModule(useParam); // No backend for this yet
|
||||
case ITEM_USE_UNLOCK_HOME_MODULE -> new ItemUseUnlockHomeModule(
|
||||
useParam); // No backend for this yet
|
||||
case ITEM_USE_UNLOCK_HOME_BGM -> new ItemUseUnlockHomeBgm(useParam);
|
||||
// Account things
|
||||
// Account things
|
||||
case ITEM_USE_ACCEPT_QUEST -> new ItemUseAcceptQuest(useParam);
|
||||
case ITEM_USE_GAIN_CARD_PRODUCT -> new ItemUseGainCardProduct(useParam);
|
||||
case ITEM_USE_UNLOCK_PAID_BATTLE_PASS_NORMAL -> new ItemUseUnlockPaidBattlePassNormal(useParam); // TODO: add paid BP
|
||||
case ITEM_USE_UNLOCK_PAID_BATTLE_PASS_NORMAL -> new ItemUseUnlockPaidBattlePassNormal(
|
||||
useParam); // TODO: add paid BP
|
||||
|
||||
// Unused in current resources
|
||||
// Unused in current resources
|
||||
case ITEM_USE_DEL_SERVER_BUFF -> null;
|
||||
case ITEM_USE_ADD_BIG_TALENT_POINT -> null;
|
||||
case ITEM_USE_GAIN_RESIN_CARD_PRODUCT -> null;
|
||||
case ITEM_USE_TRIGGER_ABILITY -> null;
|
||||
case ITEM_USE_ADD_TREASURE_MAP_BONUS_REGION_FRAGMENT -> null;
|
||||
// Used in current resources but no point yet
|
||||
case ITEM_USE_ADD_PERSIST_STAMINA -> null; // [int amount] one Test item
|
||||
case ITEM_USE_ADD_TEMPORARY_STAMINA -> null; // [int amount] one Test item
|
||||
case ITEM_USE_ADD_DUNGEON_COND_TIME -> null; // [int 1, int 15 or 20] - minigame shards
|
||||
case ITEM_USE_ADD_CHANNELLER_SLAB_BUFF -> null; // [int] minigame buffs
|
||||
case ITEM_USE_ADD_REGIONAL_PLAY_VAR -> null; // [String, int] - coral butterfly effect
|
||||
// Used in current resources but no point yet
|
||||
case ITEM_USE_ADD_PERSIST_STAMINA -> null; // [int amount] one Test item
|
||||
case ITEM_USE_ADD_TEMPORARY_STAMINA -> null; // [int amount] one Test item
|
||||
case ITEM_USE_ADD_DUNGEON_COND_TIME -> null; // [int 1, int 15 or 20] - minigame shards
|
||||
case ITEM_USE_ADD_CHANNELLER_SLAB_BUFF -> null; // [int] minigame buffs
|
||||
case ITEM_USE_ADD_REGIONAL_PLAY_VAR -> null; // [String, int] - coral butterfly effect
|
||||
};
|
||||
}
|
||||
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_NONE;
|
||||
}
|
||||
|
||||
public boolean useItem(UseItemParams params) {
|
||||
// An item must return true on at least one of its actions to count as successfully used.
|
||||
// If all of the actions return false, the item will not be consumed from inventory.
|
||||
|
||||
@@ -6,15 +6,16 @@ import emu.grasscutter.game.props.ItemUseOp;
|
||||
public class ItemUseAddAllEnergy extends ItemUseAddEnergy {
|
||||
private float energy = 0f;
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_ALL_ENERGY;
|
||||
}
|
||||
|
||||
public ItemUseAddAllEnergy(String[] useParam) {
|
||||
try {
|
||||
this.energy = Float.parseFloat(useParam[0]);
|
||||
} catch (Exception ignored) {}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_ALL_ENERGY;
|
||||
}
|
||||
|
||||
public float getAddEnergy(ElementType avatarElement) {
|
||||
|
||||
@@ -3,18 +3,18 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseAddCurHp extends ItemUseInt {
|
||||
private String icon;
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_CUR_HP;
|
||||
}
|
||||
private final String icon;
|
||||
|
||||
public ItemUseAddCurHp(String[] useParam) {
|
||||
super(useParam);
|
||||
this.icon = useParam[1];
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_CUR_HP;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return (params.targetAvatar.getAsEntity().heal(params.count * this.i) > 0.01);
|
||||
|
||||
@@ -3,15 +3,15 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseAddCurStamina extends ItemUseInt {
|
||||
public ItemUseAddCurStamina(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_CUR_STAMINA;
|
||||
}
|
||||
|
||||
public ItemUseAddCurStamina(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return params.player.getStaminaManager().addCurrentStamina(this.i);
|
||||
|
||||
@@ -8,21 +8,24 @@ public class ItemUseAddElemEnergy extends ItemUseAddEnergy {
|
||||
private float elemEnergy = 0f;
|
||||
private float otherEnergy = 0f;
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_ELEM_ENERGY;
|
||||
}
|
||||
|
||||
public ItemUseAddElemEnergy(String[] useParam) {
|
||||
try {
|
||||
this.element = ElementType.getTypeByValue(Integer.parseInt(useParam[0]));
|
||||
} catch (Exception ignored) {}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
try {
|
||||
this.elemEnergy = Float.parseFloat(useParam[1]);
|
||||
} catch (Exception ignored) {}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
try {
|
||||
this.otherEnergy = Float.parseFloat(useParam[2]);
|
||||
} catch (Exception ignored) {}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_ELEM_ENERGY;
|
||||
}
|
||||
|
||||
public float getAddEnergy(ElementType avatarElement) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package emu.grasscutter.game.props.ItemUseAction;
|
||||
|
||||
import emu.grasscutter.data.excels.AvatarSkillDepotData;
|
||||
import emu.grasscutter.data.excels.avatar.AvatarSkillDepotData;
|
||||
import emu.grasscutter.game.avatar.Avatar;
|
||||
import emu.grasscutter.game.props.ElementType;
|
||||
import emu.grasscutter.net.proto.PropChangeReasonOuterClass.PropChangeReason;
|
||||
@@ -21,40 +21,41 @@ public abstract class ItemUseAddEnergy extends ItemUseAction {
|
||||
return switch (params.itemUseTarget) {
|
||||
case ITEM_USE_TARGET_CUR_AVATAR -> {
|
||||
this.addEnergy(teamManager.getCurrentAvatarEntity().getAvatar(), params.count);
|
||||
yield true; // Always consume elem balls
|
||||
yield true; // Always consume elem balls
|
||||
}
|
||||
case ITEM_USE_TARGET_CUR_TEAM -> {
|
||||
var activeTeam = teamManager.getActiveTeam();
|
||||
// On-field vs off-field multiplier.
|
||||
// The on-field character gets full amount, off-field characters get less depending on the team size.
|
||||
final float offFieldRatio = switch (activeTeam.size()) {
|
||||
case 2 -> 0.8f;
|
||||
case 3 -> 0.7f;
|
||||
default -> 0.6f;
|
||||
};
|
||||
// The on-field character gets full amount, off-field characters get less depending on the
|
||||
// team size.
|
||||
final float offFieldRatio =
|
||||
switch (activeTeam.size()) {
|
||||
case 2 -> 0.8f;
|
||||
case 3 -> 0.7f;
|
||||
default -> 0.6f;
|
||||
};
|
||||
final int currentCharacterIndex = teamManager.getCurrentCharacterIndex();
|
||||
|
||||
// Add energy to every team member.
|
||||
for (int i = 0; i < activeTeam.size(); i++) {
|
||||
var avatar = activeTeam.get(i).getAvatar();
|
||||
if (i == currentCharacterIndex)
|
||||
this.addEnergy(avatar, params.count);
|
||||
else
|
||||
this.addEnergy(avatar, params.count * offFieldRatio);
|
||||
if (i == currentCharacterIndex) this.addEnergy(avatar, params.count);
|
||||
else this.addEnergy(avatar, params.count * offFieldRatio);
|
||||
}
|
||||
|
||||
yield true; // Always consume elem balls
|
||||
yield true; // Always consume elem balls
|
||||
}
|
||||
case ITEM_USE_TARGET_SPECIFY_AVATAR, ITEM_USE_TARGET_SPECIFY_ALIVE_AVATAR, ITEM_USE_TARGET_SPECIFY_DEAD_AVATAR ->
|
||||
this.addEnergy(params.targetAvatar, params.count); // Targeted items might care about this
|
||||
case ITEM_USE_TARGET_SPECIFY_AVATAR,
|
||||
ITEM_USE_TARGET_SPECIFY_ALIVE_AVATAR,
|
||||
ITEM_USE_TARGET_SPECIFY_DEAD_AVATAR -> this.addEnergy(
|
||||
params.targetAvatar, params.count); // Targeted items might care about this
|
||||
case ITEM_USE_TARGET_NONE -> false;
|
||||
};
|
||||
}
|
||||
|
||||
private boolean addEnergy(Avatar avatar, float multiplier) {
|
||||
float energy = this.getAddEnergy(avatar.getSkillDepot()) * multiplier;
|
||||
if (energy < 0.01f)
|
||||
return false;
|
||||
if (energy < 0.01f) return false;
|
||||
avatar.getAsEntity().addEnergy(energy, PropChangeReason.PROP_CHANGE_REASON_ENERGY_BALL);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -3,15 +3,15 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseAddExp extends ItemUseInt {
|
||||
public ItemUseAddExp(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_EXP;
|
||||
}
|
||||
|
||||
public ItemUseAddExp(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
public int getExp() {
|
||||
return this.i;
|
||||
}
|
||||
|
||||
@@ -15,11 +15,15 @@ public class ItemUseAddItem extends ItemUseInt {
|
||||
super(useParam);
|
||||
try {
|
||||
this.count = Integer.parseInt(useParam[1]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {}
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return params.player.getInventory().addItem(this.i, this.count * params.count, ActionReason.PlayerUseItem);
|
||||
return params
|
||||
.player
|
||||
.getInventory()
|
||||
.addItem(this.i, this.count * params.count, ActionReason.PlayerUseItem);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,12 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseAddReliquaryExp extends ItemUseAddExp {
|
||||
public ItemUseAddReliquaryExp(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_RELIQUARY_EXP;
|
||||
}
|
||||
|
||||
public ItemUseAddReliquaryExp(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,6 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseAddSelectItem extends ItemUseSelectItems {
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_SELECT_ITEM;
|
||||
}
|
||||
|
||||
public ItemUseAddSelectItem(String[] useParam) {
|
||||
String[] options = useParam[0].split(",");
|
||||
this.optionItemIds = new int[options.length];
|
||||
@@ -17,6 +12,11 @@ public class ItemUseAddSelectItem extends ItemUseSelectItems {
|
||||
} catch (NumberFormatException ignored) {
|
||||
this.optionItemIds[i] = INVALID;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_SELECT_ITEM;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,16 +5,17 @@ import emu.grasscutter.game.props.ItemUseOp;
|
||||
public class ItemUseAddServerBuff extends ItemUseInt {
|
||||
private int duration = 0;
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_SERVER_BUFF;
|
||||
}
|
||||
|
||||
public ItemUseAddServerBuff(String[] useParam) {
|
||||
super(useParam);
|
||||
try {
|
||||
this.duration = Integer.parseInt(useParam[1]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {}
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_SERVER_BUFF;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,12 +3,12 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseAddWeaponExp extends ItemUseAddExp {
|
||||
public ItemUseAddWeaponExp(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_WEAPON_EXP;
|
||||
}
|
||||
|
||||
public ItemUseAddWeaponExp(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,7 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseChestSelectItem extends ItemUseSelectItems {
|
||||
private int[] optionItemCounts;
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_CHEST_SELECT_ITEM;
|
||||
}
|
||||
private final int[] optionItemCounts;
|
||||
|
||||
public ItemUseChestSelectItem(String[] useParam) {
|
||||
String[] options = useParam[0].split(",");
|
||||
@@ -26,12 +21,18 @@ public class ItemUseChestSelectItem extends ItemUseSelectItems {
|
||||
} catch (NumberFormatException ignored) {
|
||||
this.optionItemCounts[i] = INVALID;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_CHEST_SELECT_ITEM;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getItemCount(int index) {
|
||||
if ((optionItemCounts == null) || (index < 0) || (index > optionItemCounts.length)) return INVALID;
|
||||
if ((optionItemCounts == null) || (index < 0) || (index > optionItemCounts.length))
|
||||
return INVALID;
|
||||
return this.optionItemCounts[index];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,24 +6,26 @@ public class ItemUseCombineItem extends ItemUseInt {
|
||||
private int resultId = 0;
|
||||
private int resultCount = 1;
|
||||
|
||||
public ItemUseCombineItem(String[] useParam) {
|
||||
super(useParam);
|
||||
try {
|
||||
this.resultId = Integer.parseInt(useParam[1]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {
|
||||
}
|
||||
try {
|
||||
this.resultCount = Integer.parseInt(useParam[2]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_COMBINE_ITEM;
|
||||
}
|
||||
|
||||
public ItemUseCombineItem(String[] useParam) {
|
||||
super(useParam);
|
||||
try {
|
||||
this.resultId = Integer.parseInt(useParam[1]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {}
|
||||
try {
|
||||
this.resultCount = Integer.parseInt(useParam[2]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
if (params.count != this.i) return false; // Wrong amount of fragments supplied!
|
||||
if (params.count != this.i) return false; // Wrong amount of fragments supplied!
|
||||
return params.player.getInventory().addItem(this.resultId, this.resultCount);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,33 +1,35 @@
|
||||
package emu.grasscutter.game.props.ItemUseAction;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import emu.grasscutter.game.avatar.Avatar;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
import emu.grasscutter.game.systems.InventorySystem;
|
||||
import java.util.Optional;
|
||||
|
||||
public class ItemUseGainAvatar extends ItemUseInt {
|
||||
private int level = 1;
|
||||
private int constellation = 0;
|
||||
|
||||
public ItemUseGainAvatar(String[] useParam) {
|
||||
super(useParam);
|
||||
try {
|
||||
this.level = Integer.parseInt(useParam[1]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {
|
||||
}
|
||||
try {
|
||||
this.constellation = Integer.parseInt(useParam[2]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_GAIN_AVATAR;
|
||||
}
|
||||
|
||||
public ItemUseGainAvatar(String[] useParam) {
|
||||
super(useParam);
|
||||
try {
|
||||
this.level = Integer.parseInt(useParam[1]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {}
|
||||
try {
|
||||
this.constellation = Integer.parseInt(useParam[2]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
int haveConstellation = InventorySystem.checkPlayerAvatarConstellationLevel(params.player, this.i);
|
||||
int haveConstellation =
|
||||
InventorySystem.checkPlayerAvatarConstellationLevel(params.player, this.i);
|
||||
if (haveConstellation == -2 || haveConstellation >= 6) {
|
||||
return false;
|
||||
} else if (haveConstellation == -1) {
|
||||
@@ -38,10 +40,11 @@ public class ItemUseGainAvatar extends ItemUseInt {
|
||||
params.player.addAvatar(avatar);
|
||||
return true;
|
||||
} else {
|
||||
int itemId = Optional.ofNullable(params.player.getAvatars().getAvatarById(this.i))
|
||||
.map(Avatar::getSkillDepot)
|
||||
.map(depot -> depot.getTalentCostItemId())
|
||||
.orElse((this.i % 1000) + 100);
|
||||
int itemId =
|
||||
Optional.ofNullable(params.player.getAvatars().getAvatarById(this.i))
|
||||
.map(Avatar::getSkillDepot)
|
||||
.map(depot -> depot.getTalentCostItemId())
|
||||
.orElse((this.i % 1000) + 100);
|
||||
return params.player.getInventory().addItem(itemId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,14 +3,13 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseGainCardProduct extends ItemUseAction {
|
||||
public ItemUseGainCardProduct(String[] useParam) {}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_GAIN_CARD_PRODUCT;
|
||||
}
|
||||
|
||||
public ItemUseGainCardProduct(String[] useParam) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return params.player.rechargeMoonCard();
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
package emu.grasscutter.game.props.ItemUseAction;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
|
||||
public class ItemUseGainCostume extends ItemUseInt {
|
||||
public ItemUseGainCostume(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_GAIN_COSTUME;
|
||||
}
|
||||
|
||||
public ItemUseGainCostume(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
if (GameData.getAvatarCostumeDataMap().containsKey(this.i)) {
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
package emu.grasscutter.game.props.ItemUseAction;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
|
||||
public class ItemUseGainFlycloak extends ItemUseInt {
|
||||
public ItemUseGainFlycloak(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_GAIN_FLYCLOAK;
|
||||
}
|
||||
|
||||
public ItemUseGainFlycloak(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
if (GameData.getAvatarFlycloakDataMap().containsKey(this.i)) {
|
||||
|
||||
@@ -3,14 +3,13 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseGainNameCard extends ItemUseAction {
|
||||
public ItemUseGainNameCard(String[] useParam) {}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_GAIN_NAME_CARD;
|
||||
}
|
||||
|
||||
public ItemUseGainNameCard(String[] useParam) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
params.player.addNameCard(params.usedItemId);
|
||||
|
||||
@@ -3,11 +3,6 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseGrantSelectReward extends ItemUseSelectItems {
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_SELECT_ITEM;
|
||||
}
|
||||
|
||||
public ItemUseGrantSelectReward(String[] useParam) {
|
||||
String[] options = useParam[0].split(",");
|
||||
this.optionItemIds = new int[options.length];
|
||||
@@ -17,6 +12,11 @@ public class ItemUseGrantSelectReward extends ItemUseSelectItems {
|
||||
} catch (NumberFormatException ignored) {
|
||||
this.optionItemIds[i] = INVALID;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_ADD_SELECT_ITEM;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ public abstract class ItemUseInt extends ItemUseAction {
|
||||
public ItemUseInt(String[] useParam) {
|
||||
try {
|
||||
this.i = Integer.parseInt(useParam[0]);
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {}
|
||||
} catch (NumberFormatException | ArrayIndexOutOfBoundsException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,15 +4,15 @@ import emu.grasscutter.game.entity.EntityVehicle;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseMakeGadget extends ItemUseInt {
|
||||
public ItemUseMakeGadget(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_MAKE_GADGET;
|
||||
}
|
||||
|
||||
public ItemUseMakeGadget(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
var player = params.player;
|
||||
|
||||
@@ -5,20 +5,19 @@ import emu.grasscutter.game.props.ActionReason;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseOpenRandomChest extends ItemUseInt {
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_OPEN_RANDOM_CHEST;
|
||||
}
|
||||
|
||||
public ItemUseOpenRandomChest(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) { // cash shop material bundles
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_OPEN_RANDOM_CHEST;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) { // cash shop material bundles
|
||||
var data = params.player.getServer().getShopSystem().getShopChestData(this.i);
|
||||
if (data == null)
|
||||
return false;
|
||||
if (data == null) return false;
|
||||
var rewardItems = data.stream().map(GameItem::new).toList();
|
||||
if (!rewardItems.isEmpty()) {
|
||||
params.player.getInventory().addItems(rewardItems, ActionReason.Shop);
|
||||
|
||||
@@ -3,14 +3,13 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseReliveAvatar extends ItemUseAction {
|
||||
public ItemUseReliveAvatar(String[] useParam) {}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_RELIVE_AVATAR;
|
||||
}
|
||||
|
||||
public ItemUseReliveAvatar(String[] useParam) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return params.player.getTeamManager().reviveAvatar(params.targetAvatar);
|
||||
|
||||
@@ -3,15 +3,15 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseUnlockCodex extends ItemUseInt {
|
||||
public ItemUseUnlockCodex(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_CODEX;
|
||||
}
|
||||
|
||||
public ItemUseUnlockCodex(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return false;
|
||||
|
||||
@@ -3,15 +3,15 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseUnlockCombine extends ItemUseInt {
|
||||
public ItemUseUnlockCombine(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_COMBINE;
|
||||
}
|
||||
|
||||
public ItemUseUnlockCombine(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return true;
|
||||
|
||||
@@ -3,15 +3,15 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseUnlockCookRecipe extends ItemUseInt {
|
||||
public ItemUseUnlockCookRecipe(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_COOK_RECIPE;
|
||||
}
|
||||
|
||||
public ItemUseUnlockCookRecipe(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return true;
|
||||
|
||||
@@ -3,15 +3,15 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseUnlockForge extends ItemUseInt {
|
||||
public ItemUseUnlockForge(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_FORGE;
|
||||
}
|
||||
|
||||
public ItemUseUnlockForge(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return true;
|
||||
|
||||
@@ -3,15 +3,15 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseUnlockFurnitureFormula extends ItemUseInt {
|
||||
public ItemUseUnlockFurnitureFormula(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_FURNITURE_FORMULA;
|
||||
}
|
||||
|
||||
public ItemUseUnlockFurnitureFormula(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return true;
|
||||
|
||||
@@ -3,15 +3,15 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseUnlockFurnitureSuite extends ItemUseInt {
|
||||
public ItemUseUnlockFurnitureSuite(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_FURNITURE_SUITE;
|
||||
}
|
||||
|
||||
public ItemUseUnlockFurnitureSuite(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return true;
|
||||
|
||||
@@ -3,18 +3,18 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseUnlockHomeBgm extends ItemUseInt {
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_HOME_BGM;
|
||||
}
|
||||
|
||||
public ItemUseUnlockHomeBgm(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_HOME_BGM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
params.player.getHome().addUnlockedHomeBgm(this.i);
|
||||
return true; // Probably best to remove the item even if the bgm was already unlocked.
|
||||
return true; // Probably best to remove the item even if the bgm was already unlocked.
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,23 +3,17 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseUnlockHomeModule extends ItemUseInt {
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_HOME_MODULE;
|
||||
}
|
||||
|
||||
public ItemUseUnlockHomeModule(String[] useParam) {
|
||||
super(useParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return true;
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_HOME_MODULE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean postUseItem(UseItemParams params){
|
||||
params.player.addRealmList(this.i);
|
||||
return true;
|
||||
public boolean useItem(UseItemParams params) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,18 +3,17 @@ package emu.grasscutter.game.props.ItemUseAction;
|
||||
import emu.grasscutter.game.props.ItemUseOp;
|
||||
|
||||
public class ItemUseUnlockPaidBattlePassNormal extends ItemUseAction {
|
||||
public ItemUseUnlockPaidBattlePassNormal(String[] useParam) {}
|
||||
|
||||
@Override
|
||||
public ItemUseOp getItemUseOp() {
|
||||
return ItemUseOp.ITEM_USE_UNLOCK_PAID_BATTLE_PASS_NORMAL;
|
||||
}
|
||||
|
||||
public ItemUseUnlockPaidBattlePassNormal(String[] useParam) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useItem(UseItemParams params) {
|
||||
// TODO: add paid BP
|
||||
//return params.player.getBattlePassManager().setPaid(true);
|
||||
// return params.player.getBattlePassManager().setPaid(true);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,13 @@ public class UseItemParams {
|
||||
public boolean isEnterMpDungeonTeam = false;
|
||||
public int usedItemId = 0;
|
||||
|
||||
public UseItemParams(Player player, ItemUseTarget itemUseTarget, Avatar targetAvatar, int count, int optionId, boolean isEnterMpDungeonTeam) {
|
||||
public UseItemParams(
|
||||
Player player,
|
||||
ItemUseTarget itemUseTarget,
|
||||
Avatar targetAvatar,
|
||||
int count,
|
||||
int optionId,
|
||||
boolean isEnterMpDungeonTeam) {
|
||||
this.player = player;
|
||||
this.itemUseTarget = itemUseTarget;
|
||||
this.targetAvatar = targetAvatar;
|
||||
|
||||
@@ -1,72 +1,74 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public enum ItemUseOp {
|
||||
ITEM_USE_NONE (0),
|
||||
ITEM_USE_ACCEPT_QUEST (1),
|
||||
ITEM_USE_TRIGGER_ABILITY (2),
|
||||
ITEM_USE_GAIN_AVATAR (3),
|
||||
ITEM_USE_ADD_EXP (4),
|
||||
ITEM_USE_RELIVE_AVATAR (5),
|
||||
ITEM_USE_ADD_BIG_TALENT_POINT (6),
|
||||
ITEM_USE_ADD_PERSIST_STAMINA (7),
|
||||
ITEM_USE_ADD_TEMPORARY_STAMINA (8),
|
||||
ITEM_USE_ADD_CUR_STAMINA (9),
|
||||
ITEM_USE_ADD_CUR_HP (10),
|
||||
ITEM_USE_ADD_ELEM_ENERGY (11),
|
||||
ITEM_USE_ADD_ALL_ENERGY (12),
|
||||
ITEM_USE_ADD_DUNGEON_COND_TIME (13),
|
||||
ITEM_USE_ADD_WEAPON_EXP (14),
|
||||
ITEM_USE_ADD_SERVER_BUFF (15),
|
||||
ITEM_USE_DEL_SERVER_BUFF (16),
|
||||
ITEM_USE_UNLOCK_COOK_RECIPE (17),
|
||||
ITEM_USE_OPEN_RANDOM_CHEST (20),
|
||||
ITEM_USE_MAKE_GADGET (24),
|
||||
ITEM_USE_ADD_ITEM (25),
|
||||
ITEM_USE_GRANT_SELECT_REWARD (26),
|
||||
ITEM_USE_ADD_SELECT_ITEM (27),
|
||||
ITEM_USE_GAIN_FLYCLOAK (28),
|
||||
ITEM_USE_GAIN_NAME_CARD (29),
|
||||
ITEM_USE_UNLOCK_PAID_BATTLE_PASS_NORMAL (30),
|
||||
ITEM_USE_GAIN_CARD_PRODUCT (31),
|
||||
ITEM_USE_UNLOCK_FORGE (32),
|
||||
ITEM_USE_UNLOCK_COMBINE (33),
|
||||
ITEM_USE_UNLOCK_CODEX (34),
|
||||
ITEM_USE_CHEST_SELECT_ITEM (35),
|
||||
ITEM_USE_GAIN_RESIN_CARD_PRODUCT (36),
|
||||
ITEM_USE_ADD_RELIQUARY_EXP (37),
|
||||
ITEM_USE_UNLOCK_FURNITURE_FORMULA (38),
|
||||
ITEM_USE_UNLOCK_FURNITURE_SUITE (39),
|
||||
ITEM_USE_ADD_CHANNELLER_SLAB_BUFF (40),
|
||||
ITEM_USE_GAIN_COSTUME (41),
|
||||
ITEM_USE_ADD_TREASURE_MAP_BONUS_REGION_FRAGMENT (42),
|
||||
ITEM_USE_COMBINE_ITEM (43),
|
||||
ITEM_USE_UNLOCK_HOME_MODULE (44),
|
||||
ITEM_USE_UNLOCK_HOME_BGM (45),
|
||||
ITEM_USE_ADD_REGIONAL_PLAY_VAR (46);
|
||||
ITEM_USE_NONE(0),
|
||||
ITEM_USE_ACCEPT_QUEST(1),
|
||||
ITEM_USE_TRIGGER_ABILITY(2),
|
||||
ITEM_USE_GAIN_AVATAR(3),
|
||||
ITEM_USE_ADD_EXP(4),
|
||||
ITEM_USE_RELIVE_AVATAR(5),
|
||||
ITEM_USE_ADD_BIG_TALENT_POINT(6),
|
||||
ITEM_USE_ADD_PERSIST_STAMINA(7),
|
||||
ITEM_USE_ADD_TEMPORARY_STAMINA(8),
|
||||
ITEM_USE_ADD_CUR_STAMINA(9),
|
||||
ITEM_USE_ADD_CUR_HP(10),
|
||||
ITEM_USE_ADD_ELEM_ENERGY(11),
|
||||
ITEM_USE_ADD_ALL_ENERGY(12),
|
||||
ITEM_USE_ADD_DUNGEON_COND_TIME(13),
|
||||
ITEM_USE_ADD_WEAPON_EXP(14),
|
||||
ITEM_USE_ADD_SERVER_BUFF(15),
|
||||
ITEM_USE_DEL_SERVER_BUFF(16),
|
||||
ITEM_USE_UNLOCK_COOK_RECIPE(17),
|
||||
ITEM_USE_OPEN_RANDOM_CHEST(20),
|
||||
ITEM_USE_MAKE_GADGET(24),
|
||||
ITEM_USE_ADD_ITEM(25),
|
||||
ITEM_USE_GRANT_SELECT_REWARD(26),
|
||||
ITEM_USE_ADD_SELECT_ITEM(27),
|
||||
ITEM_USE_GAIN_FLYCLOAK(28),
|
||||
ITEM_USE_GAIN_NAME_CARD(29),
|
||||
ITEM_USE_UNLOCK_PAID_BATTLE_PASS_NORMAL(30),
|
||||
ITEM_USE_GAIN_CARD_PRODUCT(31),
|
||||
ITEM_USE_UNLOCK_FORGE(32),
|
||||
ITEM_USE_UNLOCK_COMBINE(33),
|
||||
ITEM_USE_UNLOCK_CODEX(34),
|
||||
ITEM_USE_CHEST_SELECT_ITEM(35),
|
||||
ITEM_USE_GAIN_RESIN_CARD_PRODUCT(36),
|
||||
ITEM_USE_ADD_RELIQUARY_EXP(37),
|
||||
ITEM_USE_UNLOCK_FURNITURE_FORMULA(38),
|
||||
ITEM_USE_UNLOCK_FURNITURE_SUITE(39),
|
||||
ITEM_USE_ADD_CHANNELLER_SLAB_BUFF(40),
|
||||
ITEM_USE_GAIN_COSTUME(41),
|
||||
ITEM_USE_ADD_TREASURE_MAP_BONUS_REGION_FRAGMENT(42),
|
||||
ITEM_USE_COMBINE_ITEM(43),
|
||||
ITEM_USE_UNLOCK_HOME_MODULE(44),
|
||||
ITEM_USE_UNLOCK_HOME_BGM(45),
|
||||
ITEM_USE_ADD_REGIONAL_PLAY_VAR(46);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<ItemUseOp> map = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
});
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private ItemUseOp(int value) {
|
||||
private final int value;
|
||||
|
||||
ItemUseOp(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static ItemUseOp getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, ITEM_USE_NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,36 +1,38 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public enum ItemUseTarget {
|
||||
ITEM_USE_TARGET_NONE (0),
|
||||
ITEM_USE_TARGET_CUR_AVATAR (1),
|
||||
ITEM_USE_TARGET_CUR_TEAM (2),
|
||||
ITEM_USE_TARGET_SPECIFY_AVATAR (3),
|
||||
ITEM_USE_TARGET_SPECIFY_ALIVE_AVATAR (4),
|
||||
ITEM_USE_TARGET_SPECIFY_DEAD_AVATAR (5);
|
||||
ITEM_USE_TARGET_NONE(0),
|
||||
ITEM_USE_TARGET_CUR_AVATAR(1),
|
||||
ITEM_USE_TARGET_CUR_TEAM(2),
|
||||
ITEM_USE_TARGET_SPECIFY_AVATAR(3),
|
||||
ITEM_USE_TARGET_SPECIFY_ALIVE_AVATAR(4),
|
||||
ITEM_USE_TARGET_SPECIFY_DEAD_AVATAR(5);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<ItemUseTarget> map = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
});
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private ItemUseTarget(int value) {
|
||||
private final int value;
|
||||
|
||||
ItemUseTarget(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static ItemUseTarget getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, ITEM_USE_TARGET_NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,42 +1,44 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum LifeState {
|
||||
LIFE_NONE(0),
|
||||
LIFE_ALIVE(1),
|
||||
LIFE_DEAD(2),
|
||||
LIFE_REVIVE(3);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<LifeState> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, LifeState> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private LifeState(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
LIFE_NONE(0),
|
||||
LIFE_ALIVE(1),
|
||||
LIFE_DEAD(2),
|
||||
LIFE_REVIVE(3);
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static LifeState getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, LIFE_NONE);
|
||||
}
|
||||
|
||||
public static LifeState getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, LIFE_NONE);
|
||||
}
|
||||
private static final Int2ObjectMap<LifeState> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, LifeState> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private final int value;
|
||||
|
||||
LifeState(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static LifeState getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, LIFE_NONE);
|
||||
}
|
||||
|
||||
public static LifeState getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, LIFE_NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,44 +1,46 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum MonsterType {
|
||||
MONSTER_NONE (0),
|
||||
MONSTER_ORDINARY (1),
|
||||
MONSTER_BOSS (2),
|
||||
MONSTER_ENV_ANIMAL (3),
|
||||
MONSTER_LITTLE_MONSTER (4),
|
||||
MONSTER_FISH (5);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<MonsterType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, MonsterType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private MonsterType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
MONSTER_NONE(0),
|
||||
MONSTER_ORDINARY(1),
|
||||
MONSTER_BOSS(2),
|
||||
MONSTER_ENV_ANIMAL(3),
|
||||
MONSTER_LITTLE_MONSTER(4),
|
||||
MONSTER_FISH(5);
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static MonsterType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, MONSTER_NONE);
|
||||
}
|
||||
|
||||
public static MonsterType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, MONSTER_NONE);
|
||||
}
|
||||
private static final Int2ObjectMap<MonsterType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, MonsterType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private final int value;
|
||||
|
||||
MonsterType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static MonsterType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, MONSTER_NONE);
|
||||
}
|
||||
|
||||
public static MonsterType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, MONSTER_NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,67 +1,77 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.stream.Stream;
|
||||
import lombok.Getter;
|
||||
|
||||
public enum PlayerProperty {
|
||||
PROP_NONE (0),
|
||||
PROP_EXP (1001, 0),
|
||||
PROP_BREAK_LEVEL (1002),
|
||||
PROP_SATIATION_VAL (1003),
|
||||
PROP_SATIATION_PENALTY_TIME (1004),
|
||||
PROP_LEVEL (4001, 0, 90),
|
||||
PROP_LAST_CHANGE_AVATAR_TIME (10001),
|
||||
PROP_MAX_SPRING_VOLUME (10002, 0, 8_500_000), // Maximum volume of the Statue of the Seven for the player [0, 8500000]
|
||||
PROP_CUR_SPRING_VOLUME (10003, true), // Current volume of the Statue of the Seven [0, PROP_MAX_SPRING_VOLUME]
|
||||
PROP_IS_SPRING_AUTO_USE (10004, 0, 1), // Auto HP recovery when approaching the Statue of the Seven [0, 1]
|
||||
PROP_SPRING_AUTO_USE_PERCENT (10005, 0, 100), // Auto HP recovery percentage [0, 100]
|
||||
PROP_IS_FLYABLE (10006, 0, 1), // Are you in a state that disables your flying ability? e.g. new player [0, 1]
|
||||
PROP_IS_WEATHER_LOCKED (10007, 0, 1),
|
||||
PROP_IS_GAME_TIME_LOCKED (10008, 0, 1),
|
||||
PROP_IS_TRANSFERABLE (10009, 0, 1),
|
||||
PROP_MAX_STAMINA (10010, 0, 24_000), // Maximum stamina of the player (0 - 24000)
|
||||
PROP_CUR_PERSIST_STAMINA (10011, true), // Used stamina of the player (0 - PROP_MAX_STAMINA)
|
||||
PROP_CUR_TEMPORARY_STAMINA (10012),
|
||||
PROP_PLAYER_LEVEL (10013, 1, 60),
|
||||
PROP_PLAYER_EXP (10014),
|
||||
PROP_PLAYER_HCOIN (10015), // Primogem (-inf, +inf)
|
||||
PROP_NONE(0),
|
||||
PROP_EXP(1001, 0),
|
||||
PROP_BREAK_LEVEL(1002),
|
||||
PROP_SATIATION_VAL(1003),
|
||||
PROP_SATIATION_PENALTY_TIME(1004),
|
||||
PROP_LEVEL(4001, 0, 90),
|
||||
PROP_LAST_CHANGE_AVATAR_TIME(10001),
|
||||
PROP_MAX_SPRING_VOLUME(
|
||||
10002, 0, 8_500_000), // Maximum volume of the Statue of the Seven for the player [0, 8500000]
|
||||
PROP_CUR_SPRING_VOLUME(
|
||||
10003, true), // Current volume of the Statue of the Seven [0, PROP_MAX_SPRING_VOLUME]
|
||||
PROP_IS_SPRING_AUTO_USE(
|
||||
10004, 0, 1), // Auto HP recovery when approaching the Statue of the Seven [0, 1]
|
||||
PROP_SPRING_AUTO_USE_PERCENT(10005, 0, 100), // Auto HP recovery percentage [0, 100]
|
||||
PROP_IS_FLYABLE(
|
||||
10006, 0, 1), // Are you in a state that disables your flying ability? e.g. new player [0, 1]
|
||||
PROP_IS_WEATHER_LOCKED(10007, 0, 1), // Weather will not change in this state.
|
||||
PROP_IS_GAME_TIME_LOCKED(10008, 0, 1), // Game time will not move in this state.
|
||||
PROP_IS_TRANSFERABLE(10009, 0, 1),
|
||||
PROP_MAX_STAMINA(10010, 0, 24_000), // Maximum stamina of the player (0 - 24000)
|
||||
PROP_CUR_PERSIST_STAMINA(10011, true), // Used stamina of the player (0 - PROP_MAX_STAMINA)
|
||||
PROP_CUR_TEMPORARY_STAMINA(10012),
|
||||
PROP_PLAYER_LEVEL(10013, 1, 60), // Player level [1, 60]
|
||||
PROP_PLAYER_EXP(10014, 0), // Player EXP (0, +inf)
|
||||
PROP_PLAYER_HCOIN(10015), // Primogem (-inf, +inf)
|
||||
// It is known that Mihoyo will make Primogem negative in the cases that a player spends
|
||||
// his gems and then got a money refund, so negative is allowed.
|
||||
PROP_PLAYER_SCOIN (10016, 0), // Mora [0, +inf)
|
||||
PROP_PLAYER_MP_SETTING_TYPE (10017, 0, 2), // Do you allow other players to join your game? [0=no 1=direct 2=approval]
|
||||
PROP_IS_MP_MODE_AVAILABLE (10018, 0, 1), // 0 if in quest or something that disables MP [0, 1]
|
||||
PROP_PLAYER_WORLD_LEVEL (10019, 0, 8), // [0, 8]
|
||||
PROP_PLAYER_RESIN (10020, 0, 2000), // Original Resin [0, 2000] - note that values above 160 require refills
|
||||
PROP_PLAYER_WAIT_SUB_HCOIN (10022),
|
||||
PROP_PLAYER_WAIT_SUB_SCOIN (10023),
|
||||
PROP_IS_ONLY_MP_WITH_PS_PLAYER (10024, 0, 1), // Is only MP with PlayStation players? [0, 1]
|
||||
PROP_PLAYER_MCOIN (10025), // Genesis Crystal (-inf, +inf) see 10015
|
||||
PROP_PLAYER_WAIT_SUB_MCOIN (10026),
|
||||
PROP_PLAYER_LEGENDARY_KEY (10027,0),
|
||||
PROP_IS_HAS_FIRST_SHARE (10028),
|
||||
PROP_PLAYER_FORGE_POINT (10029, 0, 300_000),
|
||||
PROP_CUR_CLIMATE_METER (10035),
|
||||
PROP_CUR_CLIMATE_TYPE (10036),
|
||||
PROP_CUR_CLIMATE_AREA_ID (10037),
|
||||
PROP_CUR_CLIMATE_AREA_CLIMATE_TYPE (10038),
|
||||
PROP_PLAYER_WORLD_LEVEL_LIMIT (10039),
|
||||
PROP_PLAYER_WORLD_LEVEL_ADJUST_CD (10040),
|
||||
PROP_PLAYER_LEGENDARY_DAILY_TASK_NUM (10041),
|
||||
PROP_PLAYER_HOME_COIN (10042, 0), // Realm currency [0, +inf)
|
||||
PROP_PLAYER_WAIT_SUB_HOME_COIN (10043);
|
||||
PROP_PLAYER_SCOIN(10016, 0), // Mora [0, +inf)
|
||||
PROP_PLAYER_MP_SETTING_TYPE(
|
||||
10017, 0, 2), // Do you allow other players to join your game? [0=no 1=direct 2=approval]
|
||||
PROP_IS_MP_MODE_AVAILABLE(10018, 0, 1), // 0 if in quest or something that disables MP [0, 1]
|
||||
PROP_PLAYER_WORLD_LEVEL(10019, 0, 8), // [0, 8]
|
||||
PROP_PLAYER_RESIN(
|
||||
10020, 0, 2000), // Original Resin [0, 2000] - note that values above 160 require refills
|
||||
PROP_PLAYER_WAIT_SUB_HCOIN(10022),
|
||||
PROP_PLAYER_WAIT_SUB_SCOIN(10023),
|
||||
PROP_IS_ONLY_MP_WITH_PS_PLAYER(10024, 0, 1), // Is only MP with PlayStation players? [0, 1]
|
||||
PROP_PLAYER_MCOIN(10025), // Genesis Crystal (-inf, +inf) see 10015
|
||||
PROP_PLAYER_WAIT_SUB_MCOIN(10026),
|
||||
PROP_PLAYER_LEGENDARY_KEY(10027, 0), // Amount of story keys [0, 3]
|
||||
PROP_IS_HAS_FIRST_SHARE(10028),
|
||||
PROP_PLAYER_FORGE_POINT(10029, 0, 300_000),
|
||||
PROP_CUR_CLIMATE_METER(10035),
|
||||
PROP_CUR_CLIMATE_TYPE(10036),
|
||||
PROP_CUR_CLIMATE_AREA_ID(10037),
|
||||
PROP_CUR_CLIMATE_AREA_CLIMATE_TYPE(10038),
|
||||
PROP_PLAYER_WORLD_LEVEL_LIMIT(10039, 0, 8), // [0, 8] World level limit, up to 8.
|
||||
PROP_PLAYER_WORLD_LEVEL_ADJUST_CD(10040), // Time until world level can be increased/decreased.
|
||||
PROP_PLAYER_LEGENDARY_DAILY_TASK_NUM(10041), // Amount of remaining quests for another story key.
|
||||
PROP_PLAYER_HOME_COIN(10042, 0), // Realm currency [0, +inf)
|
||||
PROP_PLAYER_WAIT_SUB_HOME_COIN(10043),
|
||||
PROP_IS_AUTO_UNLOCK_SPECIFIC_EQUIP(10044), // New; unknown/un-used.
|
||||
PROP_PLAYER_GCG_COIN(10045), // New; unknown/un-used.
|
||||
PROP_PLAYER_WAIT_SUB_GCG_COIN(10046), // New; unknown/un-used.
|
||||
PROP_PLAYER_ONLINE_TIME(10047); // New; unknown/un-used.
|
||||
|
||||
private static final int inf = Integer.MAX_VALUE; // Maybe this should be something else?
|
||||
@Getter private final int id, min, max;
|
||||
@Getter private final boolean dynamicRange;
|
||||
private static final int inf = Integer.MAX_VALUE; // Maybe this should be something else?
|
||||
private static final Int2ObjectMap<PlayerProperty> map = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> map.put(e.getId(), e));
|
||||
}
|
||||
|
||||
@Getter private final int id, min, max;
|
||||
@Getter private final boolean dynamicRange;
|
||||
|
||||
PlayerProperty(int id, int min, int max, boolean dynamicRange) {
|
||||
this.id = id;
|
||||
this.min = min;
|
||||
|
||||
44
src/main/java/emu/grasscutter/game/props/RefreshType.java
Normal file
44
src/main/java/emu/grasscutter/game/props/RefreshType.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public enum RefreshType {
|
||||
REFRESH_NONE(0),
|
||||
REFRESH_INTERVAL(1),
|
||||
REFRESH_DAILY(2),
|
||||
REFRESH_WEEKlY(3),
|
||||
REFRESH_DAYBEGIN_INTERVAL(4);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<RefreshType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, RefreshType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private RefreshType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static RefreshType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, REFRESH_NONE);
|
||||
}
|
||||
|
||||
public static RefreshType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, REFRESH_NONE);
|
||||
}
|
||||
}
|
||||
@@ -1,45 +1,47 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum SceneType {
|
||||
SCENE_NONE (0),
|
||||
SCENE_WORLD (1),
|
||||
SCENE_DUNGEON (2),
|
||||
SCENE_ROOM (3),
|
||||
SCENE_HOME_WORLD (4),
|
||||
SCENE_HOME_ROOM (5),
|
||||
SCENE_ACTIVITY (6);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<SceneType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, SceneType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private SceneType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
SCENE_NONE(0),
|
||||
SCENE_WORLD(1),
|
||||
SCENE_DUNGEON(2),
|
||||
SCENE_ROOM(3),
|
||||
SCENE_HOME_WORLD(4),
|
||||
SCENE_HOME_ROOM(5),
|
||||
SCENE_ACTIVITY(6);
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static SceneType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, SCENE_NONE);
|
||||
}
|
||||
|
||||
public static SceneType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, SCENE_NONE);
|
||||
}
|
||||
private static final Int2ObjectMap<SceneType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, SceneType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private final int value;
|
||||
|
||||
SceneType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static SceneType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, SCENE_NONE);
|
||||
}
|
||||
|
||||
public static SceneType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, SCENE_NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,34 +1,36 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public enum ServerBuffType {
|
||||
SERVER_BUFF_NONE (0),
|
||||
SERVER_BUFF_AVATAR (1),
|
||||
SERVER_BUFF_TEAM (2),
|
||||
SERVER_BUFF_TOWER (3);
|
||||
SERVER_BUFF_NONE(0),
|
||||
SERVER_BUFF_AVATAR(1),
|
||||
SERVER_BUFF_TEAM(2),
|
||||
SERVER_BUFF_TOWER(3);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<ServerBuffType> map = new Int2ObjectOpenHashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
});
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private ServerBuffType(int value) {
|
||||
private final int value;
|
||||
|
||||
ServerBuffType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static ServerBuffType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, SERVER_BUFF_NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,337 +1,339 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum WatcherTriggerType {
|
||||
TRIGGER_NONE (0),
|
||||
TRIGGER_COMBAT_CONFIG_COMMON (1),
|
||||
TRIGGER_ELEMENT_VIEW (2),
|
||||
TRIGGER_ENTER_AIRFLOW (5),
|
||||
TRIGGER_NEW_MONSTER (6),
|
||||
TRIGGER_NEW_AFFIX (8),
|
||||
TRIGGER_CHANGE_INPUT_DEVICE_TYPE (9),
|
||||
TRIGGER_PAIMON_ANGRY_VOICE_EASTER_EGG (10),
|
||||
TRIGGER_WIND_CRYSTAL (11),
|
||||
TRIGGER_ELEMENT_BALL (101),
|
||||
TRIGGER_WORLD_LEVEL_UP (102),
|
||||
TRIGGER_DUNGEON_ENTRY_TO_BE_EXPLORED (103),
|
||||
TRIGGER_UNLOCK_GATE_TEMPLE (104),
|
||||
TRIGGER_UNLOCK_AREA (105),
|
||||
TRIGGER_UNLOCK_TRANS_POINT (106),
|
||||
TRIGGER_OPEN_CHEST_WITH_GADGET_ID (107),
|
||||
TRIGGER_CITY_LEVEL_UP (108),
|
||||
TRIGGER_MONSTER_DIE (109),
|
||||
TRIGGER_PLATFORM_START_MOVE (110),
|
||||
TRIGGER_GROUP_NOTIFY (111),
|
||||
TRIGGER_ELEMENT_TYPE_CHANGE (112),
|
||||
TRIGGER_GADGET_INTERACTABLE (113),
|
||||
TRIGGER_COLLECT_SET_OF_READINGS (114),
|
||||
TRIGGER_TELEPORT_WITH_CERTAIN_PORTAL (115),
|
||||
TRIGGER_WORLD_GATHER (116),
|
||||
TRIGGER_TAKE_GENERAL_REWARD (117),
|
||||
TRIGGER_BATTLE_FOR_MONSTER_DIE_OR (118),
|
||||
TRIGGER_BATTLE_FOR_MONSTER_DIE_AND (119),
|
||||
TRIGGER_OPEN_WORLD_CHEST (120),
|
||||
TRIGGER_ENTER_CLIMATE_AREA (121),
|
||||
TRIGGER_UNLOCK_SCENE_POINT (122),
|
||||
TRIGGER_INTERACT_GADGET_WITH_INTERACT_ID (123),
|
||||
TRIGGER_OBTAIN_AVATAR (201),
|
||||
TRIGGER_PLAYER_LEVEL (202),
|
||||
TRIGGER_AVATAR_UPGRADE (203),
|
||||
TRIGGER_AVATAR_PROMOTE (204),
|
||||
TRIGGER_WEAPON_UPGRADE (205),
|
||||
TRIGGER_WEAPON_PROMOTE (206),
|
||||
TRIGGER_RELIQUARY_UPGRADE (207),
|
||||
TRIGGER_WEAR_RELIQUARY (208),
|
||||
TRIGGER_UPGRADE_TALENT (209),
|
||||
TRIGGER_UNLOCK_RECIPE (210),
|
||||
TRIGGER_RELIQUARY_SET_NUM (211),
|
||||
TRIGGER_OBTAIN_MATERIAL_NUM (212),
|
||||
TRIGGER_OBTAIN_RELIQUARY_NUM (213),
|
||||
TRIGGER_GACHA_NUM (214),
|
||||
TRIGGER_ANY_RELIQUARY_UPGRADE (215),
|
||||
TRIGGER_FETTER_LEVEL_AVATAR_NUM (216),
|
||||
TRIGGER_SKILLED_AT_RECIPE (217),
|
||||
TRIGGER_RELIQUARY_UPGRADE_EQUAL_RANK_LEVEL (218),
|
||||
TRIGGER_SPECIFIED_WEAPON_UPGRADE (219),
|
||||
TRIGGER_SPECIFIED_WEAPON_AWAKEN (220),
|
||||
TRIGGER_UNLOCK_SPECIFIC_RECIPE_OR (221),
|
||||
TRIGGER_POSSESS_MATERIAL_NUM (222),
|
||||
TRIGGER_EXHIBITION_ACCUMULABLE_VALUE (223),
|
||||
TRIGGER_EXHIBITION_REPLACEABLE_VALUE_SETTLE_NUM (224),
|
||||
TRIGGER_ANY_WEAPON_UPGRADE_NUM (225),
|
||||
TRIGGER_ANY_RELIQUARY_UPGRADE_NUM (226),
|
||||
TRIGGER_ACTIVITY_SCORE_EXCEED_VALUE (227),
|
||||
TRIGGER_UNLOCK_SPECIFIC_FORGE_OR (228),
|
||||
TRIGGER_UNLOCK_SPECIFIC_ANIMAL_CODEX (229),
|
||||
TRIGGER_OBTAIN_ITEM_NUM (230),
|
||||
TRIGGER_CAPTURE_ANIMAL (231),
|
||||
TRIGGER_DAILY_TASK (301),
|
||||
TRIGGER_RAND_TASK (302),
|
||||
TRIGGER_AVATAR_EXPEDITION (303),
|
||||
TRIGGER_FINISH_TOWER_LEVEL (304),
|
||||
TRIGGER_WORLD_BOSS_REWARD (306),
|
||||
TRIGGER_FINISH_DUNGEON (307),
|
||||
TRIGGER_START_AVATAR_EXPEDITION (308),
|
||||
TRIGGER_OPEN_BLOSSOM_CHEST (309),
|
||||
TRIGGER_FINISH_BLOSSOM_PROGRESS (310),
|
||||
TRIGGER_DONE_TOWER_GADGET_UNHURT (311),
|
||||
TRIGGER_DONE_TOWER_STARS (312),
|
||||
TRIGGER_DONE_TOWER_UNHURT (313),
|
||||
TRIGGER_STEAL_FOOD_TIMES (314),
|
||||
TRIGGER_DONE_DUNGEON_WITH_SAME_ELEMENT_AVATARS (315),
|
||||
TRIGGER_GROUP_FLIGHT_CHALLENGE_REACH_POINTS (316),
|
||||
TRIGGER_FINISH_DAILY_DELIVERY_NUM (317),
|
||||
TRIGGER_TOWER_STARS_NUM (318),
|
||||
TRIGGER_FINISH_SPECIFED_TYPE_BLOSSOM_NUM (319),
|
||||
TRIGGER_FINISH_SPECIFED_TYPE_BLOSSOM_CLIMATE_METER (320),
|
||||
TRIGGER_FINISH_BLOSSOM_GROUP_VARIABLE_GT (321),
|
||||
TRIGGER_EFFIGY_CHALLENGE_SCORE (322),
|
||||
TRIGGER_FINISH_ROUTINE (323),
|
||||
TRIGGER_ACTIVITY_EXPEDITION_FINISH (324),
|
||||
TRIGGER_ACTIVITY_CHANNELLER_SLAB_FINISH_ALL_CAMP (325),
|
||||
TRIGGER_ACTIVITY_CHANNELLER_SLAB_FINISH_ALL_ONEOFF_DUNGEON (326),
|
||||
TRIGGER_ACTIVITY_CHANNELLER_SLAB_LOOP_DUNGEON_TOTAL_SCORE (327),
|
||||
TRIGGER_GROUP_SUMMER_TIME_SPRINT_BOAT_REACH_POINTS (328),
|
||||
TRIGGER_WEEKLY_BOSS_KILL (329),
|
||||
TRIGGER_BOUNCE_CONJURING_FINISH_COUNT (330),
|
||||
TRIGGER_BOUNCE_CONJURING_SCORE (331),
|
||||
TRIGGER_GROUP_VARIABLE_SET_VALUE_TO (332),
|
||||
TRIGGER_KILL_GADGETS_BY_SPECIFIC_SKILL (333),
|
||||
TRIGGER_KILL_MONSTERS_WITHOUT_VEHICLE (334),
|
||||
TRIGGER_KILL_MONSTER_IN_AREA (335),
|
||||
TRIGGER_ENTER_VEHICLE (336),
|
||||
TRIGGER_VEHICLE_DURATION (337),
|
||||
TRIGGER_VEHICLE_FRIENDS (338),
|
||||
TRIGGER_VEHICLE_KILLED_BY_MONSTER (339),
|
||||
TRIGGER_VEHICLE_DASH (340),
|
||||
TRIGGER_DO_COOK (401),
|
||||
TRIGGER_DO_FORGE (402),
|
||||
TRIGGER_DO_COMPOUND (403),
|
||||
TRIGGER_DO_COMBINE (404),
|
||||
TRIGGER_BUY_SHOP_GOODS (405),
|
||||
TRIGGER_FORGE_WEAPON (406),
|
||||
TRIGGER_MP_PLAY_BATTLE_WIN (421),
|
||||
TRIGGER_KILL_GROUP_MONSTER (422),
|
||||
TRIGGER_CRUCIBLE_ELEMENT_SCORE (423),
|
||||
TRIGGER_MP_DUNGEON_TIMES (424),
|
||||
TRIGGER_MP_KILL_MONSTER_NUM (425),
|
||||
TRIGGER_CRUCIBLE_MAX_BALL (426),
|
||||
TRIGGER_CRUCIBLE_MAX_SCORE (427),
|
||||
TRIGGER_CRUCIBLE_SUBMIT_BALL (428),
|
||||
TRIGGER_CRUCIBLE_WORLD_LEVEL_SCORE (429),
|
||||
TRIGGER_MP_PLAY_GROUP_STATISTIC (430),
|
||||
TRIGGER_KILL_GROUP_SPECIFIC_MONSTER (431),
|
||||
TRIGGER_REACH_MP_PLAY_SCORE (432),
|
||||
TRIGGER_REACH_MP_PLAY_RECORD (433),
|
||||
TRIGGER_TREASURE_MAP_DONE_REGION (434),
|
||||
TRIGGER_SEA_LAMP_MINI_QUEST (435),
|
||||
TRIGGER_FINISH_FIND_HILICHURL_LEVEL (436),
|
||||
TRIGGER_COMBINE_ITEM (437),
|
||||
TRIGGER_FINISH_CHALLENGE_IN_DURATION (438),
|
||||
TRIGGER_FINISH_CHALLENGE_LEFT_TIME (439),
|
||||
TRIGGER_MP_KILL_MONSTER_ID_NUM (440),
|
||||
TRIGGER_LOGIN (501),
|
||||
TRIGGER_COST_MATERIAL (502),
|
||||
TRIGGER_DELIVER_ITEM_TO_SALESMAN (503),
|
||||
TRIGGER_USE_ITEM (504),
|
||||
TRIGGER_ACCUMULATE_DAILY_LOGIN (505),
|
||||
TRIGGER_FINISH_CHALLENGE (601),
|
||||
TRIGGER_MECHANICUS_UNLOCK_GEAR (602),
|
||||
TRIGGER_MECHANICUS_LEVELUP_GEAR (603),
|
||||
TRIGGER_MECHANICUS_DIFFICULT (604),
|
||||
TRIGGER_MECHANICUS_DIFFICULT_SCORE (605),
|
||||
TRIGGER_MECHANICUS_KILL_MONSTER (606),
|
||||
TRIGGER_MECHANICUS_BUILDING_POINT (607),
|
||||
TRIGGER_MECHANICUS_DIFFICULT_EQ (608),
|
||||
TRIGGER_MECHANICUS_BATTLE_END (609),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_EXCAPED_LESS_THAN (610),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_POINTS_MORE_THAN (611),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_GEAR_MORE_THAN (612),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_PURE_GEAR_DAMAGE (613),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_CARD_PICK_MORE_THAN (614),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_CARD_TARGET_MORE_THAN (615),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_BUILD_GEAR_MORE_THAN (616),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_GEAR_KILL_MORE_THAN (617),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_ROUND_MORE_THAN (618),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_ROUND (619),
|
||||
TRIGGER_MECHANICUS_BATTLE_FIN_CHALLENGE_MORE_THAN (620),
|
||||
TRIGGER_MECHANICUS_BATTLE_WATCHER_FINISH_COUNT (621),
|
||||
TRIGGER_MECHANICUS_BATTLE_INTERACT_COUNT (622),
|
||||
TRIGGER_MECHANICUS_BATTLE_DIFFICULT_ESCAPE (623),
|
||||
TRIGGER_MECHANICUS_BATTLE_DIFFICULT_GEAR_NUM (624),
|
||||
TRIGGER_MECHANICUS_BATTLE_DIFFICULT_GEAR_ID_NUM (625),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_FINISH_IN_LIMIT_TIME (626),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_FINISH_KEEP_ENERGY (627),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_FINISH_WITH_GROUP_VARIABLE (628),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_FINISH_WITH_BUFF_NUM (629),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_MISSION_FINISH (630),
|
||||
TRIGGER_FINISH_DUNGEON_AND_CHALLENGE_REMAIN_TIME_GREATER_THAN (631),
|
||||
TRIGGER_FINISH_DUNGEON_WITH_MIST_TRIAL_STAT (632),
|
||||
TRIGGER_DUNGEON_MIST_TRIAL_STAT (633),
|
||||
TRIGGER_DUNGEON_ELEMENT_REACTION_NUM (634),
|
||||
TRIGGER_LEVEL_AVATAR_FINISH_DUNGEON_COUNT (635),
|
||||
TRIGGER_CHESS_REACH_LEVEL (636),
|
||||
TRIGGER_CHESS_DUNGEON_ADD_SCORE (637),
|
||||
TRIGGER_CHESS_DUNGEON_SUCC_WITH_ESCAPED_MONSTERS_LESS_THAN (638),
|
||||
TRIGGER_CHESS_DUNGEON_SUCC_WITH_TOWER_COUNT_LESS_OR_EQUAL (639),
|
||||
TRIGGER_CHESS_DUNGEON_SUCC_WITH_CARD_COUNT_LESS_OR_EQUAL (640),
|
||||
TRIGGER_CHESS_DUNGEON_SUCC_WITH_CARD_COUNT_GREATER_THAN (641),
|
||||
TRIGGER_CHESS_KILL_MONSTERS (642),
|
||||
TRIGGER_CHESS_COST_BUILDING_POINTS (643),
|
||||
TRIGGER_SUMO_STAGE_SCORE_REACH (644),
|
||||
TRIGGER_SUMO_TOTAL_MAX_SCORE_REACH (645),
|
||||
TRIGGER_ROGUE_DESTROY_GADGET_NUM (646),
|
||||
TRIGGER_ROGUE_KILL_MONSTER_NUM (647),
|
||||
TRIGGER_ROGUE_FINISH_WITHOUT_USING_SPRING_CELL (649),
|
||||
TRIGGER_ROGUE_FINISH_ALL_CHALLENGE_CELL (650),
|
||||
TRIGGER_ROGUE_FINISH_WITH_AVATAR_ELEMENT_TYPE_NUM_LESS_THAN (651),
|
||||
TRIGGER_ROGUE_FINISH_WITH_AVATAR_NUM_LESS_THAN (652),
|
||||
TRIGGER_ROGUE_FINISH_NO_AVATAR_DEAD (653),
|
||||
TRIGGER_ROGUE_SHIKIGAMI_UPGRADE (654),
|
||||
TRIGGER_ROGUE_CURSE_NUM (655),
|
||||
TRIGGER_ROGUE_SELECT_CARD_NUM (656),
|
||||
TRIGGER_FINISH_QUEST_AND (700),
|
||||
TRIGGER_FINISH_QUEST_OR (701),
|
||||
TRIGGER_DAILY_TASK_VAR_EQUAL (702),
|
||||
TRIGGER_QUEST_GLOBAL_VAR_EQUAL (703),
|
||||
TRIGGER_TALK_NUM (704),
|
||||
TRIGGER_FINISH_PARENT_QUEST_AND (705),
|
||||
TRIGGER_FINISH_PARENT_QUEST_OR (706),
|
||||
TRIGGER_ELEMENT_REACTION_TIMELIMIT_NUM (800),
|
||||
TRIGGER_ELEMENT_REACTION_TIMELIMIT_KILL_NUM (801),
|
||||
TRIGGER_ELEMENT_REACTION_TIMELIMIT_DAMAGE_NUM (802),
|
||||
TRIGGER_ABILITY_STATE_PASS_TIME (803),
|
||||
TRIGGER_MAX_CRITICAL_DAMAGE (804),
|
||||
TRIGGER_FULL_SATIATION_TEAM_AVATAR_NUM (805),
|
||||
TRIGGER_KILLED_BY_CERTAIN_MONSTER (806),
|
||||
TRIGGER_CUR_AVATAR_HURT (807),
|
||||
TRIGGER_CUR_AVATAR_ABILITY_STATE (808),
|
||||
TRIGGER_USE_ENERGY_SKILL_NUM_TIMELIMIT (809),
|
||||
TRIGGER_SHIELD_SOURCE_NUM (810),
|
||||
TRIGGER_CUR_AVATAR_HURT_BY_SPECIFIC_ABILITY (811),
|
||||
TRIGGER_KILLED_BY_SPECIFIC_ABILITY (812),
|
||||
TRIGGER_MAX_DASH_TIME (900),
|
||||
TRIGGER_MAX_FLY_TIME (901),
|
||||
TRIGGER_MAX_FLY_MAP_DISTANCE (902),
|
||||
TRIGGER_SIT_DOWN_IN_POINT (903),
|
||||
TRIGGER_DASH (904),
|
||||
TRIGGER_CLIMB (905),
|
||||
TRIGGER_FLY (906),
|
||||
TRIGGER_CITY_REPUTATION_LEVEL (930),
|
||||
TRIGGER_CITY_REPUTATION_FINISH_REQUEST (931),
|
||||
TRIGGER_HUNTING_FINISH_NUM (932),
|
||||
TRIGGER_HUNTING_FAIL_NUM (933),
|
||||
TRIGGER_OFFERING_LEVEL (934),
|
||||
TRIGGER_MIRACLE_RING_DELIVER_ITEM (935),
|
||||
TRIGGER_MIRACLE_RING_TAKE_REWARD (936),
|
||||
TRIGGER_BLESSING_EXCHANGE_PIC_NUM (937),
|
||||
TRIGGER_BLESSING_REDEEM_REWARD_NUM (938),
|
||||
TRIGGER_GALLERY_BALLOON_REACH_SCORE (939),
|
||||
TRIGGER_GALLERY_FALL_REACH_SCORE (940),
|
||||
TRIGGER_FLEUR_FAIR_MUSIC_GAME_REACH_SCORE (941),
|
||||
TRIGGER_MAIN_COOP_SAVE_POINT_AND (942),
|
||||
TRIGGER_MAIN_COOP_SAVE_POINT_OR (943),
|
||||
TRIGGER_MAIN_COOP_VAR_EQUAL (944),
|
||||
TRIGGER_FINISH_ALL_ARENA_CHALLENGE_WATCHER_IN_SCHEDULE (945),
|
||||
TRIGGER_GALLERY_BUOYANT_COMBAT_REACH_SCORE (946),
|
||||
TRIGGER_BUOYANT_COMBAT_REACH_NEW_SCORE_LEVEL (947),
|
||||
TRIGGER_PLACE_MIRACLE_RING (948),
|
||||
TRIGGER_LUNA_RITE_SEARCH (949),
|
||||
TRIGGER_GALLERY_FISH_REACH_SCORE (950),
|
||||
TRIGGER_GALLERY_TRIATHLON_REACH_SCORE (951),
|
||||
TRIGGER_WINTER_CAMP_SNOWMAN_COMPLEIET (952),
|
||||
TRIGGER_CREATE_CUSTOM_DUNGEON (953),
|
||||
TRIGGER_PUBLISH_CUSTOM_DUNGEON (954),
|
||||
TRIGGER_PLAY_OTHER_CUSTOM_DUNGEON (955),
|
||||
TRIGGER_FINISH_CUSTOM_DUNGEON_OFFICIAL (956),
|
||||
TRIGGER_CUSTOM_DUNGEON_OFFICIAL_COIN (957),
|
||||
TRIGGER_OBTAIN_WOOD_TYPE (1000),
|
||||
TRIGGER_OBTAIN_WOOD_COUNT (1001),
|
||||
TRIGGER_UNLOCK_FURNITURE_COUNT (1002),
|
||||
TRIGGER_FURNITURE_MAKE (1003),
|
||||
TRIGGER_HOME_LEVEL (1004),
|
||||
TRIGGER_HOME_COIN (1005),
|
||||
TRIGGER_HOME_COMFORT_LEVEL (1006),
|
||||
TRIGGER_HOME_LIMITED_SHOP_BUY (1007),
|
||||
TRIGGER_FURNITURE_SUITE_TYPE (1008),
|
||||
TRIGGER_ARRANGEMENT_FURNITURE_COUNT (1009),
|
||||
TRIGGER_ENTER_SELF_HOME (1010),
|
||||
TRIGGER_HOME_MODULE_COMFORT_VALUE (1011),
|
||||
TRIGGER_HOME_ENTER_ROOM (1012),
|
||||
TRIGGER_HOME_AVATAR_IN (1013),
|
||||
TRIGGER_HOME_AVATAR_REWARD_EVENT_COUNT (1014),
|
||||
TRIGGER_HOME_AVATAR_TALK_FINISH_COUNT (1015),
|
||||
TRIGGER_HOME_AVATAR_REWARD_EVENT_ALL_COUNT (1016),
|
||||
TRIGGER_HOME_AVATAR_TALK_FINISH_ALL_COUNT (1017),
|
||||
TRIGGER_HOME_AVATAR_FETTER_GET (1018),
|
||||
TRIGGER_HOME_AVATAR_IN_COUNT (1019),
|
||||
TRIGGER_HOME_DO_PLANT (1020),
|
||||
TRIGGER_ARRANGEMENT_FURNITURE (1021),
|
||||
TRIGGER_HOME_GATHER_COUNT (1022),
|
||||
TRIGGER_HOME_FIELD_GATHER_COUNT (1023),
|
||||
TRIGGER_HOME_UNLOCK_BGM_COUNT (1024),
|
||||
TRIGGER_FISHING_SUCC_NUM (1100),
|
||||
TRIGGER_FISHING_KEEP_BONUS (1101),
|
||||
TRIGGER_EMPTY_FISH_POOL (1102),
|
||||
TRIGGER_FISHING_FAIL_NUM (1103),
|
||||
TRIGGER_SHOCK_FISH_NUM (1104),
|
||||
TRIGGER_PLANT_FLOWER_SET_WISH (1105),
|
||||
TRIGGER_PLANT_FLOWER_GIVE_FLOWER (1106),
|
||||
TRIGGER_PLANT_FLOWER_OBTAIN_FLOWER_TYPE (1107),
|
||||
TRIGGER_PLANT_FLOWER_COMMON_OBTAIN_FLOWER_TYPE (1108),
|
||||
TRIGGER_FINISH_LANV2_PROJECTION_LEVEL (1111),
|
||||
TRIGGER_GALLERY_SALVAGE_REACH_SCORE (1112),
|
||||
TRIGGER_LANV2_FIREWORKS_CHALLENGE_REACH_SCORE (1113),
|
||||
TRIGGER_POTION_STAGE_LEVEL_PASS_NUM (1115),
|
||||
TRIGGER_POTION_STAGE_OBTAIN_MEDAL_NUM (1116),
|
||||
TRIGGER_POTION_STAGE_REACH_TOTAL_SCORE (1117),
|
||||
TRIGGER_BARTENDER_FINISH_STORY_MODULE (1120),
|
||||
TRIGGER_BARTENDER_CHALLENGE_MODULE_LEVEL_SCORE (1121),
|
||||
TRIGGER_BARTENDER_UNLOCK_FORMULA (1122),
|
||||
TRIGGER_MICHIAE_MATSURI_UNLOCK_CRYSTAL_SKILL_REACH_NUM (1123),
|
||||
TRIGGER_MICHIAE_MATSURI_FINISH_DARK_CHALLENGE_REACH_NUM (1124),
|
||||
TRIGGER_CAPTURE_ENV_ANIMAL_REACH_NUM (1125),
|
||||
TRIGGER_SPICE_MAKE_FORMULA_TIMES (1126),
|
||||
TRIGGER_SPICE_GIVE_FOOD_TIMES (1127),
|
||||
TRIGGER_SPICE_MAKE_FORMULA_SUCCESSFUL_TIMES (1128),
|
||||
TRIGGER_IRODORI_FINISH_FLOWER_THEME (1131),
|
||||
TRIGGER_IRODORI_FINISH_MASTER_STAGE (1132),
|
||||
TRIGGER_IRODORI_CHESS_STAGE_REACH_SCORE (1133),
|
||||
TRIGGER_IRODORI_FINISH_POETRY_THEME (1134),
|
||||
TRIGGER_PHOTO_FINISH_POS_ID (1135),
|
||||
TRIGGER_CRYSTAL_LINK_LEVEL_SCORE_REACH (1138),
|
||||
TRIGGER_CRYSTAL_LINK_TOTAL_MAX_SCORE_REACH (1139);
|
||||
|
||||
private final int value;
|
||||
private static final Int2ObjectMap<WatcherTriggerType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, WatcherTriggerType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private WatcherTriggerType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
TRIGGER_NONE(0),
|
||||
TRIGGER_COMBAT_CONFIG_COMMON(1),
|
||||
TRIGGER_ELEMENT_VIEW(2),
|
||||
TRIGGER_ENTER_AIRFLOW(5),
|
||||
TRIGGER_NEW_MONSTER(6),
|
||||
TRIGGER_NEW_AFFIX(8),
|
||||
TRIGGER_CHANGE_INPUT_DEVICE_TYPE(9),
|
||||
TRIGGER_PAIMON_ANGRY_VOICE_EASTER_EGG(10),
|
||||
TRIGGER_WIND_CRYSTAL(11),
|
||||
TRIGGER_ELEMENT_BALL(101),
|
||||
TRIGGER_WORLD_LEVEL_UP(102),
|
||||
TRIGGER_DUNGEON_ENTRY_TO_BE_EXPLORED(103),
|
||||
TRIGGER_UNLOCK_GATE_TEMPLE(104),
|
||||
TRIGGER_UNLOCK_AREA(105),
|
||||
TRIGGER_UNLOCK_TRANS_POINT(106),
|
||||
TRIGGER_OPEN_CHEST_WITH_GADGET_ID(107),
|
||||
TRIGGER_CITY_LEVEL_UP(108),
|
||||
TRIGGER_MONSTER_DIE(109),
|
||||
TRIGGER_PLATFORM_START_MOVE(110),
|
||||
TRIGGER_GROUP_NOTIFY(111),
|
||||
TRIGGER_ELEMENT_TYPE_CHANGE(112),
|
||||
TRIGGER_GADGET_INTERACTABLE(113),
|
||||
TRIGGER_COLLECT_SET_OF_READINGS(114),
|
||||
TRIGGER_TELEPORT_WITH_CERTAIN_PORTAL(115),
|
||||
TRIGGER_WORLD_GATHER(116),
|
||||
TRIGGER_TAKE_GENERAL_REWARD(117),
|
||||
TRIGGER_BATTLE_FOR_MONSTER_DIE_OR(118),
|
||||
TRIGGER_BATTLE_FOR_MONSTER_DIE_AND(119),
|
||||
TRIGGER_OPEN_WORLD_CHEST(120),
|
||||
TRIGGER_ENTER_CLIMATE_AREA(121),
|
||||
TRIGGER_UNLOCK_SCENE_POINT(122),
|
||||
TRIGGER_INTERACT_GADGET_WITH_INTERACT_ID(123),
|
||||
TRIGGER_OBTAIN_AVATAR(201),
|
||||
TRIGGER_PLAYER_LEVEL(202),
|
||||
TRIGGER_AVATAR_UPGRADE(203),
|
||||
TRIGGER_AVATAR_PROMOTE(204),
|
||||
TRIGGER_WEAPON_UPGRADE(205),
|
||||
TRIGGER_WEAPON_PROMOTE(206),
|
||||
TRIGGER_RELIQUARY_UPGRADE(207),
|
||||
TRIGGER_WEAR_RELIQUARY(208),
|
||||
TRIGGER_UPGRADE_TALENT(209),
|
||||
TRIGGER_UNLOCK_RECIPE(210),
|
||||
TRIGGER_RELIQUARY_SET_NUM(211),
|
||||
TRIGGER_OBTAIN_MATERIAL_NUM(212),
|
||||
TRIGGER_OBTAIN_RELIQUARY_NUM(213),
|
||||
TRIGGER_GACHA_NUM(214),
|
||||
TRIGGER_ANY_RELIQUARY_UPGRADE(215),
|
||||
TRIGGER_FETTER_LEVEL_AVATAR_NUM(216),
|
||||
TRIGGER_SKILLED_AT_RECIPE(217),
|
||||
TRIGGER_RELIQUARY_UPGRADE_EQUAL_RANK_LEVEL(218),
|
||||
TRIGGER_SPECIFIED_WEAPON_UPGRADE(219),
|
||||
TRIGGER_SPECIFIED_WEAPON_AWAKEN(220),
|
||||
TRIGGER_UNLOCK_SPECIFIC_RECIPE_OR(221),
|
||||
TRIGGER_POSSESS_MATERIAL_NUM(222),
|
||||
TRIGGER_EXHIBITION_ACCUMULABLE_VALUE(223),
|
||||
TRIGGER_EXHIBITION_REPLACEABLE_VALUE_SETTLE_NUM(224),
|
||||
TRIGGER_ANY_WEAPON_UPGRADE_NUM(225),
|
||||
TRIGGER_ANY_RELIQUARY_UPGRADE_NUM(226),
|
||||
TRIGGER_ACTIVITY_SCORE_EXCEED_VALUE(227),
|
||||
TRIGGER_UNLOCK_SPECIFIC_FORGE_OR(228),
|
||||
TRIGGER_UNLOCK_SPECIFIC_ANIMAL_CODEX(229),
|
||||
TRIGGER_OBTAIN_ITEM_NUM(230),
|
||||
TRIGGER_CAPTURE_ANIMAL(231),
|
||||
TRIGGER_DAILY_TASK(301),
|
||||
TRIGGER_RAND_TASK(302),
|
||||
TRIGGER_AVATAR_EXPEDITION(303),
|
||||
TRIGGER_FINISH_TOWER_LEVEL(304),
|
||||
TRIGGER_WORLD_BOSS_REWARD(306),
|
||||
TRIGGER_FINISH_DUNGEON(307),
|
||||
TRIGGER_START_AVATAR_EXPEDITION(308),
|
||||
TRIGGER_OPEN_BLOSSOM_CHEST(309),
|
||||
TRIGGER_FINISH_BLOSSOM_PROGRESS(310),
|
||||
TRIGGER_DONE_TOWER_GADGET_UNHURT(311),
|
||||
TRIGGER_DONE_TOWER_STARS(312),
|
||||
TRIGGER_DONE_TOWER_UNHURT(313),
|
||||
TRIGGER_STEAL_FOOD_TIMES(314),
|
||||
TRIGGER_DONE_DUNGEON_WITH_SAME_ELEMENT_AVATARS(315),
|
||||
TRIGGER_GROUP_FLIGHT_CHALLENGE_REACH_POINTS(316),
|
||||
TRIGGER_FINISH_DAILY_DELIVERY_NUM(317),
|
||||
TRIGGER_TOWER_STARS_NUM(318),
|
||||
TRIGGER_FINISH_SPECIFED_TYPE_BLOSSOM_NUM(319),
|
||||
TRIGGER_FINISH_SPECIFED_TYPE_BLOSSOM_CLIMATE_METER(320),
|
||||
TRIGGER_FINISH_BLOSSOM_GROUP_VARIABLE_GT(321),
|
||||
TRIGGER_EFFIGY_CHALLENGE_SCORE(322),
|
||||
TRIGGER_FINISH_ROUTINE(323),
|
||||
TRIGGER_ACTIVITY_EXPEDITION_FINISH(324),
|
||||
TRIGGER_ACTIVITY_CHANNELLER_SLAB_FINISH_ALL_CAMP(325),
|
||||
TRIGGER_ACTIVITY_CHANNELLER_SLAB_FINISH_ALL_ONEOFF_DUNGEON(326),
|
||||
TRIGGER_ACTIVITY_CHANNELLER_SLAB_LOOP_DUNGEON_TOTAL_SCORE(327),
|
||||
TRIGGER_GROUP_SUMMER_TIME_SPRINT_BOAT_REACH_POINTS(328),
|
||||
TRIGGER_WEEKLY_BOSS_KILL(329),
|
||||
TRIGGER_BOUNCE_CONJURING_FINISH_COUNT(330),
|
||||
TRIGGER_BOUNCE_CONJURING_SCORE(331),
|
||||
TRIGGER_GROUP_VARIABLE_SET_VALUE_TO(332),
|
||||
TRIGGER_KILL_GADGETS_BY_SPECIFIC_SKILL(333),
|
||||
TRIGGER_KILL_MONSTERS_WITHOUT_VEHICLE(334),
|
||||
TRIGGER_KILL_MONSTER_IN_AREA(335),
|
||||
TRIGGER_ENTER_VEHICLE(336),
|
||||
TRIGGER_VEHICLE_DURATION(337),
|
||||
TRIGGER_VEHICLE_FRIENDS(338),
|
||||
TRIGGER_VEHICLE_KILLED_BY_MONSTER(339),
|
||||
TRIGGER_VEHICLE_DASH(340),
|
||||
TRIGGER_DO_COOK(401),
|
||||
TRIGGER_DO_FORGE(402),
|
||||
TRIGGER_DO_COMPOUND(403),
|
||||
TRIGGER_DO_COMBINE(404),
|
||||
TRIGGER_BUY_SHOP_GOODS(405),
|
||||
TRIGGER_FORGE_WEAPON(406),
|
||||
TRIGGER_MP_PLAY_BATTLE_WIN(421),
|
||||
TRIGGER_KILL_GROUP_MONSTER(422),
|
||||
TRIGGER_CRUCIBLE_ELEMENT_SCORE(423),
|
||||
TRIGGER_MP_DUNGEON_TIMES(424),
|
||||
TRIGGER_MP_KILL_MONSTER_NUM(425),
|
||||
TRIGGER_CRUCIBLE_MAX_BALL(426),
|
||||
TRIGGER_CRUCIBLE_MAX_SCORE(427),
|
||||
TRIGGER_CRUCIBLE_SUBMIT_BALL(428),
|
||||
TRIGGER_CRUCIBLE_WORLD_LEVEL_SCORE(429),
|
||||
TRIGGER_MP_PLAY_GROUP_STATISTIC(430),
|
||||
TRIGGER_KILL_GROUP_SPECIFIC_MONSTER(431),
|
||||
TRIGGER_REACH_MP_PLAY_SCORE(432),
|
||||
TRIGGER_REACH_MP_PLAY_RECORD(433),
|
||||
TRIGGER_TREASURE_MAP_DONE_REGION(434),
|
||||
TRIGGER_SEA_LAMP_MINI_QUEST(435),
|
||||
TRIGGER_FINISH_FIND_HILICHURL_LEVEL(436),
|
||||
TRIGGER_COMBINE_ITEM(437),
|
||||
TRIGGER_FINISH_CHALLENGE_IN_DURATION(438),
|
||||
TRIGGER_FINISH_CHALLENGE_LEFT_TIME(439),
|
||||
TRIGGER_MP_KILL_MONSTER_ID_NUM(440),
|
||||
TRIGGER_LOGIN(501),
|
||||
TRIGGER_COST_MATERIAL(502),
|
||||
TRIGGER_DELIVER_ITEM_TO_SALESMAN(503),
|
||||
TRIGGER_USE_ITEM(504),
|
||||
TRIGGER_ACCUMULATE_DAILY_LOGIN(505),
|
||||
TRIGGER_FINISH_CHALLENGE(601),
|
||||
TRIGGER_MECHANICUS_UNLOCK_GEAR(602),
|
||||
TRIGGER_MECHANICUS_LEVELUP_GEAR(603),
|
||||
TRIGGER_MECHANICUS_DIFFICULT(604),
|
||||
TRIGGER_MECHANICUS_DIFFICULT_SCORE(605),
|
||||
TRIGGER_MECHANICUS_KILL_MONSTER(606),
|
||||
TRIGGER_MECHANICUS_BUILDING_POINT(607),
|
||||
TRIGGER_MECHANICUS_DIFFICULT_EQ(608),
|
||||
TRIGGER_MECHANICUS_BATTLE_END(609),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_EXCAPED_LESS_THAN(610),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_POINTS_MORE_THAN(611),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_GEAR_MORE_THAN(612),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_PURE_GEAR_DAMAGE(613),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_CARD_PICK_MORE_THAN(614),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_CARD_TARGET_MORE_THAN(615),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_BUILD_GEAR_MORE_THAN(616),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_GEAR_KILL_MORE_THAN(617),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_ROUND_MORE_THAN(618),
|
||||
TRIGGER_MECHANICUS_BATTLE_END_ROUND(619),
|
||||
TRIGGER_MECHANICUS_BATTLE_FIN_CHALLENGE_MORE_THAN(620),
|
||||
TRIGGER_MECHANICUS_BATTLE_WATCHER_FINISH_COUNT(621),
|
||||
TRIGGER_MECHANICUS_BATTLE_INTERACT_COUNT(622),
|
||||
TRIGGER_MECHANICUS_BATTLE_DIFFICULT_ESCAPE(623),
|
||||
TRIGGER_MECHANICUS_BATTLE_DIFFICULT_GEAR_NUM(624),
|
||||
TRIGGER_MECHANICUS_BATTLE_DIFFICULT_GEAR_ID_NUM(625),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_FINISH_IN_LIMIT_TIME(626),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_FINISH_KEEP_ENERGY(627),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_FINISH_WITH_GROUP_VARIABLE(628),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_FINISH_WITH_BUFF_NUM(629),
|
||||
TRIGGER_FLEUR_FAIR_DUNGEON_MISSION_FINISH(630),
|
||||
TRIGGER_FINISH_DUNGEON_AND_CHALLENGE_REMAIN_TIME_GREATER_THAN(631),
|
||||
TRIGGER_FINISH_DUNGEON_WITH_MIST_TRIAL_STAT(632),
|
||||
TRIGGER_DUNGEON_MIST_TRIAL_STAT(633),
|
||||
TRIGGER_DUNGEON_ELEMENT_REACTION_NUM(634),
|
||||
TRIGGER_LEVEL_AVATAR_FINISH_DUNGEON_COUNT(635),
|
||||
TRIGGER_CHESS_REACH_LEVEL(636),
|
||||
TRIGGER_CHESS_DUNGEON_ADD_SCORE(637),
|
||||
TRIGGER_CHESS_DUNGEON_SUCC_WITH_ESCAPED_MONSTERS_LESS_THAN(638),
|
||||
TRIGGER_CHESS_DUNGEON_SUCC_WITH_TOWER_COUNT_LESS_OR_EQUAL(639),
|
||||
TRIGGER_CHESS_DUNGEON_SUCC_WITH_CARD_COUNT_LESS_OR_EQUAL(640),
|
||||
TRIGGER_CHESS_DUNGEON_SUCC_WITH_CARD_COUNT_GREATER_THAN(641),
|
||||
TRIGGER_CHESS_KILL_MONSTERS(642),
|
||||
TRIGGER_CHESS_COST_BUILDING_POINTS(643),
|
||||
TRIGGER_SUMO_STAGE_SCORE_REACH(644),
|
||||
TRIGGER_SUMO_TOTAL_MAX_SCORE_REACH(645),
|
||||
TRIGGER_ROGUE_DESTROY_GADGET_NUM(646),
|
||||
TRIGGER_ROGUE_KILL_MONSTER_NUM(647),
|
||||
TRIGGER_ROGUE_FINISH_WITHOUT_USING_SPRING_CELL(649),
|
||||
TRIGGER_ROGUE_FINISH_ALL_CHALLENGE_CELL(650),
|
||||
TRIGGER_ROGUE_FINISH_WITH_AVATAR_ELEMENT_TYPE_NUM_LESS_THAN(651),
|
||||
TRIGGER_ROGUE_FINISH_WITH_AVATAR_NUM_LESS_THAN(652),
|
||||
TRIGGER_ROGUE_FINISH_NO_AVATAR_DEAD(653),
|
||||
TRIGGER_ROGUE_SHIKIGAMI_UPGRADE(654),
|
||||
TRIGGER_ROGUE_CURSE_NUM(655),
|
||||
TRIGGER_ROGUE_SELECT_CARD_NUM(656),
|
||||
TRIGGER_FINISH_QUEST_AND(700),
|
||||
TRIGGER_FINISH_QUEST_OR(701),
|
||||
TRIGGER_DAILY_TASK_VAR_EQUAL(702),
|
||||
TRIGGER_QUEST_GLOBAL_VAR_EQUAL(703),
|
||||
TRIGGER_TALK_NUM(704),
|
||||
TRIGGER_FINISH_PARENT_QUEST_AND(705),
|
||||
TRIGGER_FINISH_PARENT_QUEST_OR(706),
|
||||
TRIGGER_ELEMENT_REACTION_TIMELIMIT_NUM(800),
|
||||
TRIGGER_ELEMENT_REACTION_TIMELIMIT_KILL_NUM(801),
|
||||
TRIGGER_ELEMENT_REACTION_TIMELIMIT_DAMAGE_NUM(802),
|
||||
TRIGGER_ABILITY_STATE_PASS_TIME(803),
|
||||
TRIGGER_MAX_CRITICAL_DAMAGE(804),
|
||||
TRIGGER_FULL_SATIATION_TEAM_AVATAR_NUM(805),
|
||||
TRIGGER_KILLED_BY_CERTAIN_MONSTER(806),
|
||||
TRIGGER_CUR_AVATAR_HURT(807),
|
||||
TRIGGER_CUR_AVATAR_ABILITY_STATE(808),
|
||||
TRIGGER_USE_ENERGY_SKILL_NUM_TIMELIMIT(809),
|
||||
TRIGGER_SHIELD_SOURCE_NUM(810),
|
||||
TRIGGER_CUR_AVATAR_HURT_BY_SPECIFIC_ABILITY(811),
|
||||
TRIGGER_KILLED_BY_SPECIFIC_ABILITY(812),
|
||||
TRIGGER_MAX_DASH_TIME(900),
|
||||
TRIGGER_MAX_FLY_TIME(901),
|
||||
TRIGGER_MAX_FLY_MAP_DISTANCE(902),
|
||||
TRIGGER_SIT_DOWN_IN_POINT(903),
|
||||
TRIGGER_DASH(904),
|
||||
TRIGGER_CLIMB(905),
|
||||
TRIGGER_FLY(906),
|
||||
TRIGGER_CITY_REPUTATION_LEVEL(930),
|
||||
TRIGGER_CITY_REPUTATION_FINISH_REQUEST(931),
|
||||
TRIGGER_HUNTING_FINISH_NUM(932),
|
||||
TRIGGER_HUNTING_FAIL_NUM(933),
|
||||
TRIGGER_OFFERING_LEVEL(934),
|
||||
TRIGGER_MIRACLE_RING_DELIVER_ITEM(935),
|
||||
TRIGGER_MIRACLE_RING_TAKE_REWARD(936),
|
||||
TRIGGER_BLESSING_EXCHANGE_PIC_NUM(937),
|
||||
TRIGGER_BLESSING_REDEEM_REWARD_NUM(938),
|
||||
TRIGGER_GALLERY_BALLOON_REACH_SCORE(939),
|
||||
TRIGGER_GALLERY_FALL_REACH_SCORE(940),
|
||||
TRIGGER_FLEUR_FAIR_MUSIC_GAME_REACH_SCORE(941),
|
||||
TRIGGER_MAIN_COOP_SAVE_POINT_AND(942),
|
||||
TRIGGER_MAIN_COOP_SAVE_POINT_OR(943),
|
||||
TRIGGER_MAIN_COOP_VAR_EQUAL(944),
|
||||
TRIGGER_FINISH_ALL_ARENA_CHALLENGE_WATCHER_IN_SCHEDULE(945),
|
||||
TRIGGER_GALLERY_BUOYANT_COMBAT_REACH_SCORE(946),
|
||||
TRIGGER_BUOYANT_COMBAT_REACH_NEW_SCORE_LEVEL(947),
|
||||
TRIGGER_PLACE_MIRACLE_RING(948),
|
||||
TRIGGER_LUNA_RITE_SEARCH(949),
|
||||
TRIGGER_GALLERY_FISH_REACH_SCORE(950),
|
||||
TRIGGER_GALLERY_TRIATHLON_REACH_SCORE(951),
|
||||
TRIGGER_WINTER_CAMP_SNOWMAN_COMPLEIET(952),
|
||||
TRIGGER_CREATE_CUSTOM_DUNGEON(953),
|
||||
TRIGGER_PUBLISH_CUSTOM_DUNGEON(954),
|
||||
TRIGGER_PLAY_OTHER_CUSTOM_DUNGEON(955),
|
||||
TRIGGER_FINISH_CUSTOM_DUNGEON_OFFICIAL(956),
|
||||
TRIGGER_CUSTOM_DUNGEON_OFFICIAL_COIN(957),
|
||||
TRIGGER_OBTAIN_WOOD_TYPE(1000),
|
||||
TRIGGER_OBTAIN_WOOD_COUNT(1001),
|
||||
TRIGGER_UNLOCK_FURNITURE_COUNT(1002),
|
||||
TRIGGER_FURNITURE_MAKE(1003),
|
||||
TRIGGER_HOME_LEVEL(1004),
|
||||
TRIGGER_HOME_COIN(1005),
|
||||
TRIGGER_HOME_COMFORT_LEVEL(1006),
|
||||
TRIGGER_HOME_LIMITED_SHOP_BUY(1007),
|
||||
TRIGGER_FURNITURE_SUITE_TYPE(1008),
|
||||
TRIGGER_ARRANGEMENT_FURNITURE_COUNT(1009),
|
||||
TRIGGER_ENTER_SELF_HOME(1010),
|
||||
TRIGGER_HOME_MODULE_COMFORT_VALUE(1011),
|
||||
TRIGGER_HOME_ENTER_ROOM(1012),
|
||||
TRIGGER_HOME_AVATAR_IN(1013),
|
||||
TRIGGER_HOME_AVATAR_REWARD_EVENT_COUNT(1014),
|
||||
TRIGGER_HOME_AVATAR_TALK_FINISH_COUNT(1015),
|
||||
TRIGGER_HOME_AVATAR_REWARD_EVENT_ALL_COUNT(1016),
|
||||
TRIGGER_HOME_AVATAR_TALK_FINISH_ALL_COUNT(1017),
|
||||
TRIGGER_HOME_AVATAR_FETTER_GET(1018),
|
||||
TRIGGER_HOME_AVATAR_IN_COUNT(1019),
|
||||
TRIGGER_HOME_DO_PLANT(1020),
|
||||
TRIGGER_ARRANGEMENT_FURNITURE(1021),
|
||||
TRIGGER_HOME_GATHER_COUNT(1022),
|
||||
TRIGGER_HOME_FIELD_GATHER_COUNT(1023),
|
||||
TRIGGER_HOME_UNLOCK_BGM_COUNT(1024),
|
||||
TRIGGER_FISHING_SUCC_NUM(1100),
|
||||
TRIGGER_FISHING_KEEP_BONUS(1101),
|
||||
TRIGGER_EMPTY_FISH_POOL(1102),
|
||||
TRIGGER_FISHING_FAIL_NUM(1103),
|
||||
TRIGGER_SHOCK_FISH_NUM(1104),
|
||||
TRIGGER_PLANT_FLOWER_SET_WISH(1105),
|
||||
TRIGGER_PLANT_FLOWER_GIVE_FLOWER(1106),
|
||||
TRIGGER_PLANT_FLOWER_OBTAIN_FLOWER_TYPE(1107),
|
||||
TRIGGER_PLANT_FLOWER_COMMON_OBTAIN_FLOWER_TYPE(1108),
|
||||
TRIGGER_FINISH_LANV2_PROJECTION_LEVEL(1111),
|
||||
TRIGGER_GALLERY_SALVAGE_REACH_SCORE(1112),
|
||||
TRIGGER_LANV2_FIREWORKS_CHALLENGE_REACH_SCORE(1113),
|
||||
TRIGGER_POTION_STAGE_LEVEL_PASS_NUM(1115),
|
||||
TRIGGER_POTION_STAGE_OBTAIN_MEDAL_NUM(1116),
|
||||
TRIGGER_POTION_STAGE_REACH_TOTAL_SCORE(1117),
|
||||
TRIGGER_BARTENDER_FINISH_STORY_MODULE(1120),
|
||||
TRIGGER_BARTENDER_CHALLENGE_MODULE_LEVEL_SCORE(1121),
|
||||
TRIGGER_BARTENDER_UNLOCK_FORMULA(1122),
|
||||
TRIGGER_MICHIAE_MATSURI_UNLOCK_CRYSTAL_SKILL_REACH_NUM(1123),
|
||||
TRIGGER_MICHIAE_MATSURI_FINISH_DARK_CHALLENGE_REACH_NUM(1124),
|
||||
TRIGGER_CAPTURE_ENV_ANIMAL_REACH_NUM(1125),
|
||||
TRIGGER_SPICE_MAKE_FORMULA_TIMES(1126),
|
||||
TRIGGER_SPICE_GIVE_FOOD_TIMES(1127),
|
||||
TRIGGER_SPICE_MAKE_FORMULA_SUCCESSFUL_TIMES(1128),
|
||||
TRIGGER_IRODORI_FINISH_FLOWER_THEME(1131),
|
||||
TRIGGER_IRODORI_FINISH_MASTER_STAGE(1132),
|
||||
TRIGGER_IRODORI_CHESS_STAGE_REACH_SCORE(1133),
|
||||
TRIGGER_IRODORI_FINISH_POETRY_THEME(1134),
|
||||
TRIGGER_PHOTO_FINISH_POS_ID(1135),
|
||||
TRIGGER_CRYSTAL_LINK_LEVEL_SCORE_REACH(1138),
|
||||
TRIGGER_CRYSTAL_LINK_TOTAL_MAX_SCORE_REACH(1139);
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static WatcherTriggerType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, TRIGGER_NONE);
|
||||
}
|
||||
|
||||
public static WatcherTriggerType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, TRIGGER_NONE);
|
||||
}
|
||||
private static final Int2ObjectMap<WatcherTriggerType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, WatcherTriggerType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private final int value;
|
||||
|
||||
WatcherTriggerType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public static WatcherTriggerType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, TRIGGER_NONE);
|
||||
}
|
||||
|
||||
public static WatcherTriggerType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, TRIGGER_NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,69 +1,70 @@
|
||||
package emu.grasscutter.game.props;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||
|
||||
public enum WeaponType {
|
||||
WEAPON_NONE (0),
|
||||
WEAPON_SWORD_ONE_HAND (1, 10, 5),
|
||||
WEAPON_CROSSBOW (2),
|
||||
WEAPON_STAFF (3),
|
||||
WEAPON_DOUBLE_DAGGER (4),
|
||||
WEAPON_KATANA (5),
|
||||
WEAPON_SHURIKEN (6),
|
||||
WEAPON_STICK (7),
|
||||
WEAPON_SPEAR (8),
|
||||
WEAPON_SHIELD_SMALL (9),
|
||||
WEAPON_CATALYST (10, 0, 10),
|
||||
WEAPON_CLAYMORE (11, 0, 10),
|
||||
WEAPON_BOW (12, 0, 5),
|
||||
WEAPON_POLE (13, 0, 4);
|
||||
|
||||
private final int value;
|
||||
private int energyGainInitialProbability;
|
||||
private int energyGainIncreaseProbability;
|
||||
|
||||
private static final Int2ObjectMap<WeaponType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, WeaponType> stringMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
Stream.of(values()).forEach(e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
private WeaponType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
private WeaponType(int value, int energyGainInitialProbability, int energyGainIncreaseProbability) {
|
||||
this.value = value;
|
||||
this.energyGainInitialProbability = energyGainInitialProbability;
|
||||
this.energyGainIncreaseProbability = energyGainIncreaseProbability;
|
||||
}
|
||||
WEAPON_NONE(0),
|
||||
WEAPON_SWORD_ONE_HAND(1, 10, 5),
|
||||
WEAPON_CROSSBOW(2),
|
||||
WEAPON_STAFF(3),
|
||||
WEAPON_DOUBLE_DAGGER(4),
|
||||
WEAPON_KATANA(5),
|
||||
WEAPON_SHURIKEN(6),
|
||||
WEAPON_STICK(7),
|
||||
WEAPON_SPEAR(8),
|
||||
WEAPON_SHIELD_SMALL(9),
|
||||
WEAPON_CATALYST(10, 0, 10),
|
||||
WEAPON_CLAYMORE(11, 0, 10),
|
||||
WEAPON_BOW(12, 0, 5),
|
||||
WEAPON_POLE(13, 0, 4);
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public int getEnergyGainInitialProbability() {
|
||||
return energyGainInitialProbability;
|
||||
}
|
||||
private static final Int2ObjectMap<WeaponType> map = new Int2ObjectOpenHashMap<>();
|
||||
private static final Map<String, WeaponType> stringMap = new HashMap<>();
|
||||
|
||||
public int getEnergyGainIncreaseProbability() {
|
||||
return energyGainIncreaseProbability;
|
||||
}
|
||||
static {
|
||||
Stream.of(values())
|
||||
.forEach(
|
||||
e -> {
|
||||
map.put(e.getValue(), e);
|
||||
stringMap.put(e.name(), e);
|
||||
});
|
||||
}
|
||||
|
||||
public static WeaponType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, WEAPON_NONE);
|
||||
}
|
||||
|
||||
public static WeaponType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, WEAPON_NONE);
|
||||
}
|
||||
private final int value;
|
||||
private int energyGainInitialProbability;
|
||||
private int energyGainIncreaseProbability;
|
||||
|
||||
WeaponType(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
WeaponType(int value, int energyGainInitialProbability, int energyGainIncreaseProbability) {
|
||||
this.value = value;
|
||||
this.energyGainInitialProbability = energyGainInitialProbability;
|
||||
this.energyGainIncreaseProbability = energyGainIncreaseProbability;
|
||||
}
|
||||
|
||||
public static WeaponType getTypeByValue(int value) {
|
||||
return map.getOrDefault(value, WEAPON_NONE);
|
||||
}
|
||||
|
||||
public static WeaponType getTypeByName(String name) {
|
||||
return stringMap.getOrDefault(name, WEAPON_NONE);
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public int getEnergyGainInitialProbability() {
|
||||
return energyGainInitialProbability;
|
||||
}
|
||||
|
||||
public int getEnergyGainIncreaseProbability() {
|
||||
return energyGainIncreaseProbability;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user