-
Notifications
You must be signed in to change notification settings - Fork 0
/
stance.go
128 lines (114 loc) · 2.93 KB
/
stance.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package main
import "strconv"
type stance interface {
activate()
reset()
isActive() bool
advanceTime(float64)
processSkillExecution(*skillResult) string
checkSkill(string) bool
checkPotencyBoost(string) float64
alertSkill(string)
}
type dragoonStance struct {
Name string
Timer float64
Active bool
Stacks int
}
func (d *dragoonStance) activate() {
d.Name = "Blood Of The Dragon"
d.Timer = 30.0
d.Active = true
d.Stacks = 0
globalLog(Basic, "[STANCE ACTIVATED] "+d.Name)
}
func (d *dragoonStance) reset() {
d.Timer = 0
d.Active = false
d.Stacks = 0
}
func (d *dragoonStance) isActive() bool {
return d.Active
}
func (d *dragoonStance) advanceTime(span float64) {
if d.Active {
d.Timer -= span
}
if d.Active && d.Timer <= 0.0 {
if d.Name == "Blood Of The Dragon" {
d.Active = false
globalLog(Basic, "[STANCE DEACTIVATED] "+d.Name)
} else {
d.Name = "Blood Of The Dragon"
d.Timer = 30.0
globalLog(Basic, "[STANCE DEMOTED] "+d.Name)
}
}
}
func (d *dragoonStance) checkSkill(skillName string) bool {
if skillName == "Blood Of The Dragon" {
if d.Active && d.Name == "Life Of The Dragon" {
return false
}
return true
}
if d.Active {
if skillName == "Nastrond" && d.Name != "Life Of The Dragon" {
return false
}
if skillName == "Stardiver" && d.Name != "Life Of The Dragon" {
return false
}
return true
}
return false
}
func (d *dragoonStance) checkPotencyBoost(skillName string) float64 {
if d.Active {
if skillName == "High Jump" || skillName == "Spineshatter Dive" {
return 1.30
}
}
return 1.00
}
// Returns applied effect
func (d *dragoonStance) processSkillExecution(result *skillResult) string {
if d.Active {
if result.SkillName == "Full Thrust" && result.IsCombo {
return "Sharper Fang And Claw"
} else if result.SkillName == "Chaos Thrust" && result.IsCombo {
return "Enhanced Wheeling Thrust"
} else if result.SkillName == "Fang And Claw" && !result.IsCombo {
return "Enhanced Wheeling Thrust"
} else if result.SkillName == "Wheeling Thrust" && !result.IsCombo {
return "Sharper Fang And Claw"
}
}
return ""
}
// Skills that cause a change in the stance will alert the stance when they
// are executed, allowing the stance to execute special logic
func (d *dragoonStance) alertSkill(skillName string) {
if d.Active && d.Name == "Blood Of The Dragon" {
if skillName == "Fang And Claw" || skillName == "Wheeling Thrust" || skillName == "Sonic Thrust" || skillName == "Coerthan Torment" {
d.Timer += 10.0
if d.Timer > 30.0 {
d.Timer = 30.0
}
globalLogFloat(Basic, "[STANCE TIMER INCREASED] ", d.Timer)
} else if skillName == "Geirskogul" && d.Stacks == 2 {
d.Name = "Life Of The Dragon"
d.Stacks = 0
d.Timer = 30.0
globalLog(Basic, "[STANCE PROMOTED] "+d.Name)
}
}
if d.Active && skillName == "Mirage Dive" {
d.Stacks++
if d.Stacks > 2 {
d.Stacks = 2
}
globalLog(Basic, "[STANCE STACKS INCREASED] "+strconv.Itoa(d.Stacks))
}
}