* renamed changed protos for user generated content (music game
* added ACtivityCondGroups
* added open and close time to ACtivityConfigItem
* actually add meet conditions to the acitivty info
* fix wrong quest state enum being used in activityCondition for questFinished
* On execution error a trigger is always unregistered
* If trigger_count is 0, its only unregistered on error
* On invocations >= trigger_count triggers are unregistered
* use the challengeType to identify factory that needs to be used
* use scenetime for challenge time handling to propperly handle pausing the scene
* Add missing fields to DungeonChallengeConfigData
* For now only gadgets
* They are mapped via resources/Server/GadgetMapping.json
* They are read from resources/Scripts/Gadget
* The compiled scripts are cached in the EntityControllerScriptManager
TODOs:
* Decide if controller execution should be handled by the EntityControllerScriptManager
* Do more testing
* moved dungeon enums to dungeons.enums.*
* moved challange enums to dungeons.challenge.enums.*
* added some missing Enums
* ChallengeCondType
* ChallengeEventMarkType (also used in ScriptLoader)
* ChallengeRecordType.java
* FatherChallengeProperty (also used in ScriptLoader)
* DungeonEntrySatisfiedConditionType
* DungunEntryType
Implemented configRoutes + platform refactoring
* EntityGadget now has the fieldRouteConfig, which is used to manage routes
* Implemented routes system, adds:
* ConfigRoute (routes based on config id, mostly handled by the client)
* AbilityRoute (routes based on abilities, those are still hardcoded)
* PointArrayRoute (not implemented since resources for them are missing)
* EVENT_PLATFORM_REACH_POINT lua event still missing
* changed addTrialAvatarForQuest() in Player.java to accept Grant Reason as another param
* changed removeTrialAvatar() in Player.java to remove trial avatar based on trialAvatarId instead of clearing the entire team
* modified Avatar.java to not save avatar to DB if it is a trial avatar
* modified relevant files
-> GameItem.java
-> TeamManager.java
-> ExecGrantTrialAvatar.java
-> ExecRemoveTrialAvatar.java
* added implementation for ScenePlayerSoundNotify in ScriptLib
* added implementation for ShowClientGuideNotify in ScriptLib
* added relevant files
-> ScenePlayerSoundOuterClass.java
-> ShowClientGuideNotifyOuterClass.java
-> VectorOuterClass.java
-> GuideTriggerData.java
-> PacketScenePlayerSoundNotify.java
-> PacketShowClientGuideNotify.java
* modified relevant files
-> GameData.java
* Deserialization support for tsv files
* Benchmarking
* Apparently moving the setter out of the lambda fixed the setAccessible issue
* Thread it
* Use AllArgsConstructor instead of field reflection
* Clean up AllArgsConstructor TSV deserialization
* Refactor TsvUtils
* Remove AllArgsConstructors from Excels
* Set field accessible
* [WIP] TSJ improvements
* [WIP] More TSV stuff
* [WIP] More TSV stuff
* Working TSV parser (slow)
* Load Excels in TSJ > JSON > TSV priority
- Added files
-- ExcelData
* TrialAvatarData.java
* TrialAvatarTemplateData.java
* TrialReliquaryData.java
-- OuterClass
* AvatarDelNotifyOuterClass.java
-- Packets
* PacketAvatarDelNotify.java to remove trial avatar appearing in player's bag
-- QuestExec
* ExecGrantTrialAvatar.java
* ExecRemoveTrialAvatar.java
- Modified files
-- ExcelData
* GameData.java to cache excel data
* QuestData.java to read trial avatar list
-- Game files
* Avatar.java to set trial avatar information
* Player.java to send corresponding packages for trial avatar
* TeamManager.java to add trial avatar to temporary team
* GameQuest.java to remove trial avatar on quest fail
* World.java to not send extra startDungeon() which is already handled by dungeon system
-- Packets
-- PacketAvatarTeamUpdate.java to selectively send trial team or player's team information
- Added outer class and packets for quest transmit (teleportation during quest), cleaned up related files
-- QuestTransmitReqOuterClass.java (newly added)
-- QuestTransmitRspOuterClass.java (newly added)
-- HandlerQuestTransmitReq.java (newly added)
-- PacketQuestTransmitRsp.java (newly addded)
-- TeleportData.java (read teleport data in quest shared config)
- Read extra files to display Boss name and cleaned up related files
-- MonsterSpecialNameData.java (newly read)
-- MonsterDescribeData.java (cleaned up)
-- MonsterData.java (cleaned up)
-- EntityMonster.java (cleaned up to display the special titles)
- Read extra files to use extra abilities for certain scene and cleaned up related files
-- ConfigLevelEntity.java (newly read)
-- SceneData.java (from here map to ConfigLevelEntity)
-- AvatarData.java (moved part of ability embryo code to function to be reused in Player.java)
-- Player.java (rebuild and add ability embryo if any)
- Modified Grasscutter.java
-- to init ScriptLoader before ResourceLoader.loadAll() since quest shared config are in luas
- Modified ResourceLoader.java to load new data
-- function loadQuestShareConfig (rewind and teleport data)
-- function loadConfigLevelEntityData (ability embryo for certain scene)
- Modified GameData.java
-- to cache all the newly read data
- Modified GameMainQuest.java
-- to read rewind positions from cahced, rather than saving to DB
- Modified World.java
-- to rebuild and add ability embryo for every new scene
-- to give more teleport reason
- Modified PlayerTeleportEvent
-- to map to client transmit reason
* Avoid iterating over every offline player
* getAllPlayers by stream
* Use the new method without changing the old signature
* Annotate deprecated `getAllPlayers`
* Add build (compile) script: gradlew jar
* Move server and services log levels to ConfigContainer, ability to enable/disable show packet payload and loop packets
* Add some loop packets to known list
- added code in InventorySystem.java to also consider character
- added alternative addAvatar function to take avatar id as input in Player.java
- hard coded to get ambor when quest finishes at 35402 in GameQuest.java
- added code in Inventory.java to send packet when getting character using item (from store for example)
- added necessary packet and outerclass for this branch fix to work
* [Security][Bugfix] Fix directory traversal exploit
1.The first slash will act as root path when resolving local path, so directory traversal is possible
2.Filter the illegal payload to prevent directory traversal
3.This also fix the bug about not loading the files in data folder when querying `/hk4e/announcement/`
* Fix formatting
* Update src/main/java/emu/grasscutter/server/http/handlers/AnnouncementsHandler.java
* progression in the first dvalin battle is now possible via `/entity 1001 hp19`
* make the eventType available to scripts via scriptargs.type
* call entity hp events when changing hp via EntityCommand
* small inventory reforcoring to make event triggering simpler
* small entity refactoring to make hp event handling simpler
* moved changeElement to Avatar
* always change main characters element via questExec
* Change ElementType.depotValue to depotIndex
* don'T send fightprop changes twice, recalcStats already does that
* fixed WorldAreaData names
- changed AvatarSkillData.java to read costElemVal as float, so that can use directly by PropUpdate packets
- updated Avatar.java to not use hardcoded depot values
- added function in EntityAvatar.java to add energy to only the active entity avatar
- added function in EnergyManager.java to only refill energy for the active entity avatar
- updated changeAvatarElement function in Player.java to be bit more robust, also sending packets that mimics the official server
- updated ExecAddCurAvatarEnergy.java to use return value directly from refill energy function
- changed HandlerAvatarChangeElementTypeReq.java to use changeAvatarElement function in Player.java
- changed PacketAvatarFightPropUpdate.java to accept list of fight prop as well
-
- added EXEC_ADD_CUR_AVATAR_ENERGY
- added EXEC_CAHNGE_AVATAR_ELEMET
- added new function 'changeAvatarElement' in player.java
- changed hardcoded MC depot skill to read json data in HandlerSetPlayerBornDataReq.Data
- changed and added refill function in EnergyManager.java
* Extend give command "talent"
* Update src/main/java/emu/grasscutter/data/excels/AvatarSkillDepotData.java
Shorten IntStream for getCombatSkills
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
* Fix setSkillLevel to work during avatar construction
Shortening getCombatSkills
* changeSkillLevel now acts as intermediate operation to fetch skillIds
* setSkillLevel changes to allow out of range levels to be normalized
* Update src/main/java/emu/grasscutter/command/commands/GiveCommand.java
Removing recalcStats since it's redundant
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
* Major changes and cleanup:
- AvatarSkillDepotData: removed getCombatSkills since it's unused
- TalentCommand: shortened /talent all using getSkillsAndEnergySkill
- GiveCommand: changed changeSkillLevel to setSkillLevel
- Avatar: delete changeSkillLevel and moved the operation inside setSkillLevel,updated skillId to Integer to catch special cases from GiveCommand
* Small cleanup:
Removed the special case from Avatar to be handled inside of GiveCommand
* Added "all" parameter to SetConst
* Changed all to [all] int SetConstCommand usage
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
* Extend give command "talent"
* Update src/main/java/emu/grasscutter/data/excels/AvatarSkillDepotData.java
Shorten IntStream for getCombatSkills
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
* Fix setSkillLevel to work during avatar construction
Shortening getCombatSkills
* changeSkillLevel now acts as intermediate operation to fetch skillIds
* setSkillLevel changes to allow out of range levels to be normalized
* Update src/main/java/emu/grasscutter/command/commands/GiveCommand.java
Removing recalcStats since it's redundant
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
* Major changes and cleanup:
- AvatarSkillDepotData: removed getCombatSkills since it's unused
- TalentCommand: shortened /talent all using getSkillsAndEnergySkill
- GiveCommand: changed changeSkillLevel to setSkillLevel
- Avatar: delete changeSkillLevel and moved the operation inside setSkillLevel,updated skillId to Integer to catch special cases from GiveCommand
* Small cleanup:
Removed the special case from Avatar to be handled inside of GiveCommand
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
* feat:cooking food ingredient(aka:compound) implementation
Implement food ingredient(compound) feature.Need a thorough test and still has some work to do.
* small bug fix;implement fish processing
* Update src/main/java/emu/grasscutter/server/packet/send/PacketItemAddHintNotify.java
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
* Update Inventory.java
* Update Inventory.java
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
* improve the rewind system
* handle some edge cases where the rewind would not trigger
* fix packages send to the client, so emergency food spawns again
* added support for quest roleback
* quest system
* added more contents
* post to an executer to prevent fail execs affecting beginexecs
* some additional null checks
-De-hardcode elemental orb values
-De-hardcode exp items
-Change ShopChest format (temporary, drop system overhaul will replace it entirely)
-Food healing actually uses Ability data for real HP amounts
* Extend talent command "all":
Added talent option to set all talents (n, e, q) at once
Modified error message to cover edge cases when player entered talent level lower than 1
* Update src/main/java/emu/grasscutter/command/commands/TalentCommand.java
some suggested changes
Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com>
* will be able to change home bgm.
* feat: unlock homeworld bgm and set homeworld bgm.
* Update src/main/java/emu/grasscutter/game/home/GameHome.java
* Update GameHome.java
* Get default unlocked home bgms from HomeWorldBgmData
* fix: duplicate home items by sending packet