Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
G
Grasscutter
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
ziqian zhang
Grasscutter
Commits
64204286
Commit
64204286
authored
3 years ago
by
KingRainbow44
Browse files
Options
Downloads
Patches
Plain Diff
Add a method to be invoked on skill perform and end
parent
352aa7d6
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/main/java/emu/grasscutter/game/ability/AbilityManager.java
+67
-26
67 additions, 26 deletions
...ain/java/emu/grasscutter/game/ability/AbilityManager.java
with
67 additions
and
26 deletions
src/main/java/emu/grasscutter/game/ability/AbilityManager.java
+
67
−
26
View file @
64204286
...
...
@@ -17,43 +17,84 @@ import emu.grasscutter.net.proto.AbilityMetaReInitOverrideMapOuterClass.AbilityM
import
emu.grasscutter.net.proto.AbilityMixinCostStaminaOuterClass.AbilityMixinCostStamina
;
import
emu.grasscutter.net.proto.AbilityScalarValueEntryOuterClass.AbilityScalarValueEntry
;
import
emu.grasscutter.net.proto.ModifierActionOuterClass.ModifierAction
;
import
lombok.Getter
;
public
class
AbilityManager
extends
BasePlayerManager
{
public
final
class
AbilityManager
extends
BasePlayerManager
{
HealAbilityManager
healAbilityManager
;
@Getter
private
boolean
abilityInvulnerable
=
false
;
public
AbilityManager
(
Player
player
)
{
super
(
player
);
this
.
healAbilityManager
=
new
HealAbilityManager
(
player
);
}
public
void
onAbilityInvoke
(
AbilityInvokeEntry
invoke
)
throws
Exception
{
healAbilityManager
.
healHandler
(
invoke
);
this
.
healAbilityManager
.
healHandler
(
invoke
);
//Grasscutter.getLogger().info(invoke.getArgumentType() + " (" + invoke.getArgumentTypeValue() + "): " + Utils.bytesToHex(invoke.toByteArray()));
switch
(
invoke
.
getArgumentType
())
{
case
ABILITY_INVOKE_ARGUMENT_META_OVERRIDE_PARAM:
handleOverrideParam
(
invoke
);
break
;
case
ABILITY_INVOKE_ARGUMENT_META_REINIT_OVERRIDEMAP:
handleReinitOverrideMap
(
invoke
);
break
;
case
ABILITY_INVOKE_ARGUMENT_META_MODIFIER_CHANGE:
handleModifierChange
(
invoke
);
break
;
case
ABILITY_INVOKE_ARGUMENT_MIXIN_COST_STAMINA:
handleMixinCostStamina
(
invoke
);
break
;
case
ABILITY_INVOKE_ARGUMENT_ACTION_GENERATE_ELEM_BALL:
handleGenerateElemBall
(
invoke
);
break
;
default
:
break
;
case
ABILITY_INVOKE_ARGUMENT_META_OVERRIDE_PARAM
->
this
.
handleOverrideParam
(
invoke
);
case
ABILITY_INVOKE_ARGUMENT_META_REINIT_OVERRIDEMAP
->
this
.
handleReinitOverrideMap
(
invoke
);
case
ABILITY_INVOKE_ARGUMENT_META_MODIFIER_CHANGE
->
this
.
handleModifierChange
(
invoke
);
case
ABILITY_INVOKE_ARGUMENT_MIXIN_COST_STAMINA
->
this
.
handleMixinCostStamina
(
invoke
);
case
ABILITY_INVOKE_ARGUMENT_ACTION_GENERATE_ELEM_BALL
->
this
.
handleGenerateElemBall
(
invoke
);
default
->
{}
}
}
/**
* Invoked when a player starts a skill.
* @param player The player who started the skill.
* @param skillId The skill ID.
* @param casterId The caster ID.
*/
public
void
onSkillStart
(
Player
player
,
int
skillId
,
int
casterId
)
{
// Check if the player matches this player.
if
(
player
.
getUid
()
!=
this
.
player
.
getUid
())
{
return
;
}
// Check if the caster matches the player.
if
(
player
.
getTeamManager
().
getCurrentAvatarEntity
().
getId
()
!=
casterId
)
{
return
;
}
var
skillData
=
GameData
.
getAvatarSkillDataMap
().
get
(
skillId
);
if
(
skillData
==
null
)
{
return
;
}
// Check if the skill is an elemental burst.
if
(
skillData
.
getCostElemVal
()
<=
0
)
{
return
;
}
// Set the player as invulnerable.
this
.
abilityInvulnerable
=
true
;
}
/**
* Invoked when a player ends a skill.
* @param player The player who started the skill.
*/
public
void
onSkillEnd
(
Player
player
)
{
// Check if the player matches this player.
if
(
player
.
getUid
()
!=
this
.
player
.
getUid
())
{
return
;
}
// Check if the player is invulnerable.
if
(!
this
.
abilityInvulnerable
)
{
return
;
}
// Set the player as not invulnerable.
this
.
abilityInvulnerable
=
false
;
}
private
void
handleOverrideParam
(
AbilityInvokeEntry
invoke
)
throws
Exception
{
GameEntity
entity
=
player
.
getScene
().
getEntityById
(
invoke
.
getEntityId
());
GameEntity
entity
=
this
.
player
.
getScene
().
getEntityById
(
invoke
.
getEntityId
());
if
(
entity
==
null
)
{
return
;
...
...
@@ -65,7 +106,7 @@ public class AbilityManager extends BasePlayerManager {
}
private
void
handleReinitOverrideMap
(
AbilityInvokeEntry
invoke
)
throws
Exception
{
GameEntity
entity
=
player
.
getScene
().
getEntityById
(
invoke
.
getEntityId
());
GameEntity
entity
=
this
.
player
.
getScene
().
getEntityById
(
invoke
.
getEntityId
());
if
(
entity
==
null
)
{
return
;
...
...
@@ -80,7 +121,7 @@ public class AbilityManager extends BasePlayerManager {
private
void
handleModifierChange
(
AbilityInvokeEntry
invoke
)
throws
Exception
{
// Sanity checks
GameEntity
target
=
player
.
getScene
().
getEntityById
(
invoke
.
getEntityId
());
GameEntity
target
=
this
.
player
.
getScene
().
getEntityById
(
invoke
.
getEntityId
());
if
(
target
==
null
)
{
return
;
}
...
...
@@ -104,7 +145,7 @@ public class AbilityManager extends BasePlayerManager {
return
;
}
GameEntity
sourceEntity
=
player
.
getScene
().
getEntityById
(
data
.
getApplyEntityId
());
GameEntity
sourceEntity
=
this
.
player
.
getScene
().
getEntityById
(
data
.
getApplyEntityId
());
if
(
sourceEntity
==
null
)
{
return
;
}
...
...
@@ -117,7 +158,7 @@ public class AbilityManager extends BasePlayerManager {
if
(
modifier
!=
null
&&
modifier
.
getOnAdded
().
size
()
>
0
)
{
for
(
AbilityModifierAction
action
:
modifier
.
getOnAdded
())
{
invokeAction
(
action
,
target
,
sourceEntity
);
this
.
invokeAction
(
action
,
target
,
sourceEntity
);
}
}
...
...
@@ -133,7 +174,7 @@ public class AbilityManager extends BasePlayerManager {
if
(
modifier
!=
null
&&
modifier
.
getOnRemoved
().
size
()
>
0
)
{
for
(
AbilityModifierAction
action
:
modifier
.
getOnRemoved
())
{
invokeAction
(
action
,
target
,
sourceEntity
);
this
.
invokeAction
(
action
,
target
,
sourceEntity
);
}
}
...
...
@@ -145,7 +186,7 @@ public class AbilityManager extends BasePlayerManager {
private
void
handleMixinCostStamina
(
AbilityInvokeEntry
invoke
)
throws
InvalidProtocolBufferException
{
AbilityMixinCostStamina
costStamina
=
AbilityMixinCostStamina
.
parseFrom
((
invoke
.
getAbilityData
()));
getPlayer
().
getStaminaManager
().
handleMixinCostStamina
(
costStamina
.
getIsSwim
());
this
.
getPlayer
().
getStaminaManager
().
handleMixinCostStamina
(
costStamina
.
getIsSwim
());
}
private
void
handleGenerateElemBall
(
AbilityInvokeEntry
invoke
)
throws
InvalidProtocolBufferException
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment