smite_ruby 1.0.0 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +190 -0
- data/lib/smite.rb +3 -0
- data/lib/smite/achievements.rb +7 -0
- data/lib/smite/client.rb +4 -4
- data/lib/smite/data_transform.rb +110 -65
- data/lib/smite/game.rb +27 -36
- data/lib/smite/god.rb +24 -2
- data/lib/smite/god_stats.rb +121 -0
- data/lib/smite/item.rb +29 -1
- data/lib/smite/item_effect.rb +18 -0
- data/lib/smite/match.rb +4 -1
- data/lib/smite/object.rb +6 -9
- data/lib/smite/player.rb +2 -2
- data/smite_ruby.gemspec +3 -3
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7cc4f043f27ebe004f8229cced90833f57b4a9d
|
4
|
+
data.tar.gz: e5da84e81525ac97b6eb90a7e9328ddbccd02149
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8c26832c6684d221ee1fb1a996d1a13115ea28e184be0f4a1ccd02b6e3ddf83efbb4d0862be79b94eaeef14aca0610dacad19f4f81989be57c53125a60ed137
|
7
|
+
data.tar.gz: 7c3a974eb29097b4798f47340c28da5af0379c39217ae5ec47d4e68bfba3dfad1c0a78120f792d7e95481f649eb50568ed705faf7e7da0b03be09c20db15b4e2
|
data/README.md
ADDED
@@ -0,0 +1,190 @@
|
|
1
|
+
# Smite API Client for Ruby
|
2
|
+
---
|
3
|
+
1. `gem install smite_ruby`
|
4
|
+
2. `require 'smite'`
|
5
|
+
|
6
|
+
# Examples -- Smite::Game
|
7
|
+
---
|
8
|
+
|
9
|
+
### Creating a session
|
10
|
+
```
|
11
|
+
> Smite::Game.authenticate!(<dev_id>, <auth_key>)
|
12
|
+
Smite::Game
|
13
|
+
```
|
14
|
+
|
15
|
+
### Finding a player
|
16
|
+
```
|
17
|
+
> Smite::Game.player('adapting')
|
18
|
+
#<Smite::Player '[Epsi]Adapting'>
|
19
|
+
```
|
20
|
+
|
21
|
+
### Listing/finding gods
|
22
|
+
```
|
23
|
+
> Smite::Game.gods
|
24
|
+
[#<Smite::God 'Agni'>,
|
25
|
+
#<Smite::God 'Ah Muzen Cab'>,
|
26
|
+
#<Smite::God 'Ah Puch'>,
|
27
|
+
#<Smite::God 'Amaterasu'>,
|
28
|
+
...]
|
29
|
+
|
30
|
+
> Smite::Game.god('Agni')
|
31
|
+
#<Smite::God 'Agni'>
|
32
|
+
|
33
|
+
> Smite::Game.god(2065)
|
34
|
+
#<Smite::God 'Ravana'>
|
35
|
+
```
|
36
|
+
|
37
|
+
### Listing/finding items
|
38
|
+
```
|
39
|
+
> Smite::Game.items
|
40
|
+
[#<Smite::Item 'Iron Mail'>,
|
41
|
+
#<Smite::Item 'Steel Mail'>,
|
42
|
+
#<Smite::Item 'Sovereignty'>,
|
43
|
+
#<Smite::Item 'Mystical Mail'>,
|
44
|
+
...]
|
45
|
+
|
46
|
+
> Smite::Game.item('Gem of Isolation')
|
47
|
+
#<Smite::Item 'Gem of Isolation'>
|
48
|
+
|
49
|
+
> Smite::Game.item(7526)
|
50
|
+
#<Smite::Item 'Iron Mail'>
|
51
|
+
```
|
52
|
+
# Examples -- Smite::Player
|
53
|
+
---
|
54
|
+
```
|
55
|
+
> player = Smite::Game.player('adapting')
|
56
|
+
#<Smite::Player '[Epsi]Adapting'>
|
57
|
+
|
58
|
+
> player.mastery_level
|
59
|
+
66
|
60
|
+
```
|
61
|
+
|
62
|
+
|
63
|
+
### Listing friends
|
64
|
+
```
|
65
|
+
> player.friends
|
66
|
+
[#<Smite::Friend 'aBROcalypse'>,
|
67
|
+
#<Smite::Friend 'Adopting'>,
|
68
|
+
#<Smite::Friend 'Advert'>,
|
69
|
+
#<Smite::Friend 'Aengy'>,
|
70
|
+
#<Smite::Friend 'Aiurz'>,
|
71
|
+
...]
|
72
|
+
|
73
|
+
> player.friends[0].to_player
|
74
|
+
#<Smite::Player '[Aluma]aBROcalypse'>
|
75
|
+
```
|
76
|
+
|
77
|
+
### Listing god ranks
|
78
|
+
```
|
79
|
+
> player.god_ranks
|
80
|
+
[#<Smite::GodRank 'Thor' Lvl. 10 (diamond)>,
|
81
|
+
#<Smite::GodRank 'Mercury' Lvl. 10 (diamond)>,
|
82
|
+
#<Smite::GodRank 'Freya' Lvl. 10 (diamond)>,
|
83
|
+
#<Smite::GodRank 'Hun Batz' Lvl. 10 (diamond)>,
|
84
|
+
#<Smite::GodRank 'Kali' Lvl. 10 (diamond)>,
|
85
|
+
#<Smite::GodRank 'Poseidon' Lvl. 10 (diamond)>,
|
86
|
+
...]
|
87
|
+
```
|
88
|
+
|
89
|
+
### Listing achievements (WIP)
|
90
|
+
```
|
91
|
+
> player.achievements
|
92
|
+
{"DoubleKills"=>5275,
|
93
|
+
"FirstBloods"=>1430,
|
94
|
+
"Id"=>2784051,
|
95
|
+
"Name"=>"Adapting",
|
96
|
+
"PentaKills"=>21,
|
97
|
+
"QuadraKills"=>137,
|
98
|
+
"TowerKills"=>5183,
|
99
|
+
"TripleKills"=>803,
|
100
|
+
"ret_msg"=>nil}
|
101
|
+
```
|
102
|
+
### Listing match history
|
103
|
+
```
|
104
|
+
> player.match_history
|
105
|
+
[#<Smite::Match 'Leagues: Conquest' 'Win'>,
|
106
|
+
#<Smite::Match 'Leagues: Conquest' 'Loss'>,
|
107
|
+
#<Smite::Match 'Leagues: Conquest' 'Win'>,
|
108
|
+
#<Smite::Match 'Leagues: Conquest' 'Win'>,
|
109
|
+
#<Smite::Match 'Leagues: Conquest' 'Loss'>,
|
110
|
+
#<Smite::Match 'Leagues: Conquest' 'Win'>,
|
111
|
+
... ]
|
112
|
+
```
|
113
|
+
# Examples -- Smite::Match
|
114
|
+
---
|
115
|
+
```
|
116
|
+
> match = player.match_history[0]
|
117
|
+
#<Smite::Match 'Leagues: Conquest' 'Win'>
|
118
|
+
|
119
|
+
> match.god
|
120
|
+
#<Smite::God 'Ne Zha'>
|
121
|
+
|
122
|
+
> match.items
|
123
|
+
[#<Smite::Item 'Purification Beads'>,
|
124
|
+
#<Smite::Item 'Aegis Amulet'>,
|
125
|
+
#<Smite::Item 'Bumba's Mask'>,
|
126
|
+
#<Smite::Item 'Warrior Tabi'>,
|
127
|
+
#<Smite::Item 'Jotunn's Wrath'>,
|
128
|
+
#<Smite::Item 'Deathbringer'>,
|
129
|
+
nil,
|
130
|
+
nil]
|
131
|
+
|
132
|
+
> match.killing_spree
|
133
|
+
2
|
134
|
+
```
|
135
|
+
# Examples -- Smite::God
|
136
|
+
---
|
137
|
+
```
|
138
|
+
> merc = Smite::Game.god('Mercury')
|
139
|
+
#<Smite::God 'Mercury'>
|
140
|
+
|
141
|
+
> merc.abilities
|
142
|
+
[#<Smite::Ability 'Made You Look'>,
|
143
|
+
#<Smite::Ability 'Maximum Velocity'>,
|
144
|
+
#<Smite::Ability 'Special Delivery'>,
|
145
|
+
#<Smite::Ability 'Sonic Boom'>,
|
146
|
+
#<Smite::Ability 'Fastest God Alive'>]
|
147
|
+
|
148
|
+
> merc.speed
|
149
|
+
375
|
150
|
+
```
|
151
|
+
# Examples -- Smite::GodRank
|
152
|
+
---
|
153
|
+
```
|
154
|
+
> rank = player.god_ranks[0]
|
155
|
+
#<Smite::GodRank 'Thor' Lvl. 10 (diamond)>
|
156
|
+
|
157
|
+
> rank.mastered?
|
158
|
+
true
|
159
|
+
> rank.level
|
160
|
+
"diamond"
|
161
|
+
> rank.rank
|
162
|
+
10
|
163
|
+
> rank.worshippers
|
164
|
+
4517
|
165
|
+
```
|
166
|
+
# Examples -- Smite::Item
|
167
|
+
---
|
168
|
+
```
|
169
|
+
> bov = Smite::Game.item('Breastplate of Valor')
|
170
|
+
#<Smite::Item 'Breastplate of Valor'>
|
171
|
+
|
172
|
+
> bov.item_tier
|
173
|
+
3
|
174
|
+
> bov.short_desc
|
175
|
+
"Reduces ability Cooldowns."
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
|
190
|
+
|
data/lib/smite.rb
CHANGED
@@ -5,9 +5,12 @@ module Smite
|
|
5
5
|
end
|
6
6
|
|
7
7
|
require 'smite/object.rb'
|
8
|
+
require 'smite/achievements.rb'
|
8
9
|
require 'smite/ability.rb'
|
9
10
|
require 'smite/god_rank.rb'
|
11
|
+
require 'smite/god_stats.rb'
|
10
12
|
require 'smite/god.rb'
|
13
|
+
require 'smite/item_effect.rb'
|
11
14
|
require 'smite/item.rb'
|
12
15
|
require 'smite/friend.rb'
|
13
16
|
require 'smite/data_transform.rb'
|
data/lib/smite/client.rb
CHANGED
@@ -33,6 +33,10 @@ module Smite
|
|
33
33
|
self.class.get(request)
|
34
34
|
end
|
35
35
|
|
36
|
+
def valid_session?
|
37
|
+
!!(test_session =~ /successful/i)
|
38
|
+
end
|
39
|
+
|
36
40
|
private
|
37
41
|
|
38
42
|
def signature(method)
|
@@ -44,10 +48,6 @@ module Smite
|
|
44
48
|
Time.now.utc.strftime('%Y%m%d%H%M%S')
|
45
49
|
end
|
46
50
|
|
47
|
-
def valid_session?
|
48
|
-
test_session =~ /successful/i
|
49
|
-
end
|
50
|
-
|
51
51
|
def request_str(method, params, session)
|
52
52
|
base = base_str(method)
|
53
53
|
parm = param_str(params)
|
data/lib/smite/data_transform.rb
CHANGED
@@ -1,91 +1,136 @@
|
|
1
1
|
module Smite
|
2
2
|
class DataTransform
|
3
|
+
class << self
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
new_data = transform_gods(new_data)
|
8
|
-
new_data = transform_abilities(new_data)
|
9
|
-
transform_match(new_data)
|
10
|
-
end
|
5
|
+
def transform_items(data)
|
6
|
+
item_fields = data.slice(*item_map_fields)
|
7
|
+
return data if item_fields.empty?
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
data['items'] = item_fields.values.map { |id| Smite::Game.item(id.to_i) }
|
10
|
+
data.except(*item_filter_fields)
|
11
|
+
end
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
def transform_gods(data)
|
14
|
+
god_fields = data.slice(*god_map_fields)
|
15
|
+
return data if god_fields.empty?
|
19
16
|
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
data['god'] = god_fields.values.map { |id| Smite::Game.god(id.to_i) }[0]
|
18
|
+
data.except(*god_filter_fields)
|
19
|
+
end
|
23
20
|
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
def transform_abilities(data)
|
22
|
+
ability_fields = data.slice(*ability_map_fields)
|
23
|
+
return data if ability_fields.empty?
|
27
24
|
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
data['abilities'] = ability_fields.values.map do |ability_data|
|
26
|
+
data_attrs = ability_data.slice('Id', 'Summary', 'URL')
|
27
|
+
desc = ability_data['Description']['itemDescription']
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
desc = ability_data['Description']['itemDescription']
|
29
|
+
Ability.new(data_attrs.merge(desc))
|
30
|
+
end
|
35
31
|
|
36
|
-
|
32
|
+
data.except(*ability_filter_fields)
|
37
33
|
end
|
38
34
|
|
39
|
-
data
|
40
|
-
|
35
|
+
def transform_match(data)
|
36
|
+
return data unless data['Queue']
|
37
|
+
|
38
|
+
if data['Queue'] =~ /League/
|
39
|
+
data
|
40
|
+
else
|
41
|
+
data.except(*match_filter_fields)
|
42
|
+
end
|
43
|
+
end
|
41
44
|
|
42
|
-
|
43
|
-
|
45
|
+
def transform_stats(data)
|
46
|
+
stat_fields = data.slice(*stats_map_fields)
|
47
|
+
return data if stat_fields.empty?
|
44
48
|
|
45
|
-
|
49
|
+
stat_fields['movement_speed'] = stat_fields.delete('speed')
|
50
|
+
stat_fields['mp5'] = stat_fields.delete('mana_per_five')
|
51
|
+
stat_fields['hp5'] = stat_fields.delete('health_per_five')
|
52
|
+
data['stats'] = GodStats.new(data['name'], stat_fields)
|
53
|
+
data.except(*stats_filter_fields)
|
54
|
+
end
|
55
|
+
|
56
|
+
def transform_item_effect(data)
|
57
|
+
return unless data['Description'] and data['Value']
|
58
|
+
|
59
|
+
effect = data.delete('Description').tr(' ','')
|
60
|
+
effect = ActiveSupport::Inflector.underscore(effect)
|
61
|
+
data['attribute'] = effect
|
62
|
+
|
63
|
+
value = data.delete('Value')
|
64
|
+
@percentage = value[/%/]
|
65
|
+
value = value.tr('+', '').to_i
|
66
|
+
data['amount'] = value
|
46
67
|
data
|
47
|
-
else
|
48
|
-
data.except(*match_filter_fields)
|
49
68
|
end
|
50
|
-
end
|
51
69
|
|
52
|
-
|
53
|
-
%w( ActiveId1 ActiveId2 ItemId1 ItemId2 ItemId3 ItemId4 ItemId5 ItemId6 )
|
54
|
-
end
|
70
|
+
private
|
55
71
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
72
|
+
def item_map_fields
|
73
|
+
%w(
|
74
|
+
active_id1 active_id2 item_id1 item_id2
|
75
|
+
item_id3 item_id4 item_id5 item_id6
|
76
|
+
)
|
77
|
+
end
|
61
78
|
|
62
|
-
|
63
|
-
|
64
|
-
|
79
|
+
def item_filter_fields
|
80
|
+
item_map_fields + %w(
|
81
|
+
item_1 item_2 item_3 item_4 item_5
|
82
|
+
item_6 active_1 active_2 active_3
|
83
|
+
)
|
84
|
+
end
|
65
85
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
AbilityId1 AbilityId2 AbilityId3 AbilityId4 AbilityId5
|
70
|
-
abilityDescription1 abilityDescription2
|
71
|
-
abilityDescription3 abilityDescription4
|
72
|
-
abilityDescription5
|
73
|
-
)
|
74
|
-
end
|
86
|
+
def ability_map_fields
|
87
|
+
%w( ability_1 ability_2 ability_3 ability_4 ability_5 )
|
88
|
+
end
|
75
89
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
90
|
+
def ability_filter_fields
|
91
|
+
ability_map_fields + %w(
|
92
|
+
ability1 ability2 ability3 ability4 ability5
|
93
|
+
ability_id1 ability_id2 ability_id3 ability_id4 ability_id5
|
94
|
+
ability_description1 ability_description2
|
95
|
+
ability_description3 ability_description4
|
96
|
+
ability_description5 god_ability1_url god_ability2_url
|
97
|
+
god_ability3_url god_ability4_url god_ability5_url
|
98
|
+
)
|
99
|
+
end
|
82
100
|
|
83
|
-
|
84
|
-
|
85
|
-
|
101
|
+
def match_filter_fields
|
102
|
+
%w(
|
103
|
+
ban1 ban2 ban3 ban4 ban5 ban6
|
104
|
+
ban1_id ban2_id ban3_id
|
105
|
+
ban4_id ban5_id ban6_id
|
106
|
+
)
|
107
|
+
end
|
86
108
|
|
87
|
-
|
88
|
-
|
109
|
+
def stats_map_fields
|
110
|
+
%w(
|
111
|
+
speed attack_speed attack_speed_per_level
|
112
|
+
health health_per_level
|
113
|
+
mana mana_per_level
|
114
|
+
mana_per_five mp5_per_level
|
115
|
+
health_per_five hp5_per_level
|
116
|
+
magical_power magical_power_per_level
|
117
|
+
physical_power physical_power_per_level
|
118
|
+
magic_protection magic_protection_per_level
|
119
|
+
physical_protection physical_protection_per_level
|
120
|
+
)
|
121
|
+
end
|
122
|
+
|
123
|
+
def stats_filter_fields
|
124
|
+
stats_map_fields
|
125
|
+
end
|
126
|
+
|
127
|
+
def god_map_fields
|
128
|
+
%w(god_id)
|
129
|
+
end
|
130
|
+
|
131
|
+
def god_filter_fields
|
132
|
+
god_map_fields + %w(god)
|
133
|
+
end
|
89
134
|
end
|
90
135
|
end
|
91
136
|
end
|
data/lib/smite/game.rb
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
module Smite
|
2
2
|
class Game
|
3
3
|
class << self
|
4
|
-
attr_reader :client
|
4
|
+
attr_reader :client, :lang_code
|
5
5
|
|
6
6
|
def authenticate!(dev_id, auth_key, lang_code = 1)
|
7
7
|
@client = Smite::Client.new(dev_id, auth_key)
|
8
8
|
@lang_code = lang_code
|
9
|
-
|
9
|
+
!client.session_id.empty?
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
|
14
|
-
id_to_item[name_to_itemid[name_or_id]]
|
12
|
+
def device(name_or_id)
|
13
|
+
devices[device_hash[name_or_id]]
|
15
14
|
end
|
15
|
+
alias_method :item, :device
|
16
|
+
alias_method :consumable, :device
|
17
|
+
alias_method :active, :device
|
16
18
|
|
17
19
|
def god(name_or_id)
|
18
|
-
|
19
|
-
id_to_god[name_to_godid[name_or_id]]
|
20
|
+
gods[god_hash[name_or_id]]
|
20
21
|
end
|
21
22
|
|
22
23
|
def match(match_id)
|
@@ -28,49 +29,39 @@ module Smite
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def gods
|
31
|
-
|
32
|
+
@gods ||= get_gods.map(&God.method(:new))
|
32
33
|
end
|
33
34
|
|
34
|
-
def
|
35
|
-
|
35
|
+
def devices
|
36
|
+
@devices ||= get_items.map(&Item.method(:new))
|
36
37
|
end
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
def id_to_item
|
41
|
-
return @id_to_item unless @id_to_item.nil?
|
42
|
-
|
43
|
-
@id_to_item = get_items.map do |item_data|
|
44
|
-
[item_data['ItemId'], Item.new(item_data)]
|
45
|
-
end
|
46
|
-
@id_to_item = Hash[@id_to_item]
|
39
|
+
def items
|
40
|
+
@items ||= devices.select(&:item?)
|
47
41
|
end
|
48
42
|
|
49
|
-
def
|
50
|
-
|
43
|
+
def consumables
|
44
|
+
@consumables ||= devices.select(&:consumable?)
|
45
|
+
end
|
51
46
|
|
52
|
-
|
53
|
-
|
54
|
-
end
|
55
|
-
@id_to_god = Hash[@id_to_god]
|
47
|
+
def actives
|
48
|
+
@actives ||= devices.select(&:active?)
|
56
49
|
end
|
57
50
|
|
58
|
-
|
59
|
-
return @name_to_itemid unless @name_to_itemid.nil?
|
51
|
+
private
|
60
52
|
|
61
|
-
|
62
|
-
|
53
|
+
def device_hash
|
54
|
+
@device_hash ||= (0...devices.count).each_with_object({}) do |idx, hash|
|
55
|
+
hash[devices[idx].item_id] = idx
|
56
|
+
hash[devices[idx].device_name] = idx
|
63
57
|
end
|
64
|
-
@name_to_itemid = Hash[@name_to_itemid]
|
65
58
|
end
|
66
59
|
|
67
|
-
def
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
[god.name, id]
|
60
|
+
def god_hash
|
61
|
+
@god_hash ||= (0...gods.count).each_with_object({}) do |idx, hash|
|
62
|
+
hash[gods[idx].id] = idx
|
63
|
+
hash[gods[idx].name] = idx
|
72
64
|
end
|
73
|
-
@name_to_godid = Hash[@name_to_godid]
|
74
65
|
end
|
75
66
|
|
76
67
|
# /getmatchdetails[ResponseFormat]/{developerId}/{signature}/{session}/{timestamp}/{match_id}
|
data/lib/smite/god.rb
CHANGED
@@ -1,11 +1,33 @@
|
|
1
1
|
module Smite
|
2
2
|
class God < Smite::Object
|
3
3
|
def initialize(data)
|
4
|
-
|
4
|
+
super
|
5
|
+
@data = DataTransform.transform_abilities(@data)
|
6
|
+
@data = DataTransform.transform_stats(@data)
|
7
|
+
end
|
8
|
+
|
9
|
+
def on_free_rotation?
|
10
|
+
!on_free_rotation.blank?
|
11
|
+
end
|
12
|
+
|
13
|
+
def ranged?
|
14
|
+
!!(type =~ /Ranged/i)
|
15
|
+
end
|
16
|
+
|
17
|
+
def melee?
|
18
|
+
!ranged?
|
19
|
+
end
|
20
|
+
|
21
|
+
def physical?
|
22
|
+
!!(type =~ /Physical/i)
|
23
|
+
end
|
24
|
+
|
25
|
+
def magic?
|
26
|
+
!physical?
|
5
27
|
end
|
6
28
|
|
7
29
|
def inspect
|
8
|
-
"#<Smite::God '#{name}'>"
|
30
|
+
"#<Smite::God #{id} '#{name}'>"
|
9
31
|
end
|
10
32
|
end
|
11
33
|
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
module Smite
|
2
|
+
class GodStats < Smite::Object
|
3
|
+
attr_reader :name, :item_bonus
|
4
|
+
attr_accessor :level, :items
|
5
|
+
|
6
|
+
def initialize(god_name, data)
|
7
|
+
super(data)
|
8
|
+
@name = god_name
|
9
|
+
@items = []
|
10
|
+
@level = 0
|
11
|
+
@item_bonus = default_bonus
|
12
|
+
end
|
13
|
+
|
14
|
+
def level=(new_level)
|
15
|
+
@level = (new_level.to_i - 1) % 20
|
16
|
+
end
|
17
|
+
|
18
|
+
def items=(new_items)
|
19
|
+
@items = new_items
|
20
|
+
@item_bonus = default_bonus
|
21
|
+
end
|
22
|
+
|
23
|
+
def movement_speed
|
24
|
+
from_items = item_bonus[:movement_speed]
|
25
|
+
base = data['movement_speed']
|
26
|
+
|
27
|
+
from_items + base
|
28
|
+
end
|
29
|
+
|
30
|
+
def health
|
31
|
+
from_items = item_bonus[:health]
|
32
|
+
base = data['health']
|
33
|
+
scaling = health_per_level * level
|
34
|
+
|
35
|
+
from_items + base + scaling
|
36
|
+
end
|
37
|
+
|
38
|
+
def mana
|
39
|
+
from_items = item_bonus[:mana]
|
40
|
+
base = data['mana']
|
41
|
+
scaling = mana_per_level * level
|
42
|
+
|
43
|
+
from_items + base + scaling
|
44
|
+
end
|
45
|
+
|
46
|
+
def mp5
|
47
|
+
from_items = item_bonus[:mp5]
|
48
|
+
base = data['mp5']
|
49
|
+
scaling = (mp5_per_level * level.to_f).to_i
|
50
|
+
|
51
|
+
from_items + base + scaling
|
52
|
+
end
|
53
|
+
|
54
|
+
def hp5
|
55
|
+
from_items = item_bonus[:hp5]
|
56
|
+
base = data['hp5']
|
57
|
+
scaling = (hp5_per_level * level.to_f).to_i
|
58
|
+
|
59
|
+
from_items + base + scaling
|
60
|
+
end
|
61
|
+
|
62
|
+
def attack_speed
|
63
|
+
from_items = item_bonus[:attack_speed]
|
64
|
+
base = data['attack_speed']
|
65
|
+
scaling = (attack_speed_per_level * level.to_f).to_i
|
66
|
+
|
67
|
+
from_items + base + scaling
|
68
|
+
end
|
69
|
+
|
70
|
+
def magic_power
|
71
|
+
from_items = item_bonus[:magic_power]
|
72
|
+
base = data['magic_power']
|
73
|
+
scaling = magic_power_per_level * level
|
74
|
+
|
75
|
+
from_items + base + scaling
|
76
|
+
end
|
77
|
+
|
78
|
+
def magic_protection
|
79
|
+
from_items = item_bonus[:magic_protection]
|
80
|
+
base = data['magic_protection']
|
81
|
+
scaling = (magic_protection_per_level * level.to_f).to_i
|
82
|
+
|
83
|
+
from_items + base + scaling
|
84
|
+
end
|
85
|
+
|
86
|
+
def physical_protection
|
87
|
+
from_items = item_bonus[:physical_protection]
|
88
|
+
base = data['physical_protection']
|
89
|
+
scaling = (physical_protection_per_level * level.to_f).to_i
|
90
|
+
|
91
|
+
from_items + base + scaling
|
92
|
+
end
|
93
|
+
|
94
|
+
def item_bonus
|
95
|
+
return @item_bonus unless @item_bonus == default_bonus and !items.empty?
|
96
|
+
|
97
|
+
items.map(&:effects).flatten.select do |effect|
|
98
|
+
next unless attributes.include?(effect.attribute)
|
99
|
+
@item_bonus[effect.attribute.to_sym] += effect.amount
|
100
|
+
end
|
101
|
+
|
102
|
+
@item_bonus
|
103
|
+
end
|
104
|
+
|
105
|
+
def summary
|
106
|
+
attributes.each_with_object({}) do |attr, hash|
|
107
|
+
hash[attr.to_sym] = send(attr.to_sym)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def inspect
|
112
|
+
"#<Smite::GodStats '#{name}' Level #{level + 1}>"
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def default_bonus
|
118
|
+
@default_bonus ||= attributes.each_with_object({}) { |attr, hash| hash[attr.to_sym] = 0 }
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
data/lib/smite/item.rb
CHANGED
@@ -1,7 +1,35 @@
|
|
1
1
|
module Smite
|
2
2
|
class Item < Smite::Object
|
3
|
+
|
4
|
+
def initialize(data)
|
5
|
+
super
|
6
|
+
effects = @data.delete('item_description')
|
7
|
+
@data['description'] = effects.delete('Description')
|
8
|
+
@data['effects'] = effects['Menuitems'].map { |eff| ItemEffect.new(device_name, eff)}
|
9
|
+
end
|
10
|
+
|
11
|
+
def active?
|
12
|
+
type == 'Active'
|
13
|
+
end
|
14
|
+
|
15
|
+
def consumable?
|
16
|
+
type == 'Consumable'
|
17
|
+
end
|
18
|
+
|
19
|
+
def item?
|
20
|
+
type == 'Item'
|
21
|
+
end
|
22
|
+
|
23
|
+
def physical?
|
24
|
+
@physical ||= effects.map(&:attribute).any? { |eff| eff =~ /physical_(power|pen)/ }
|
25
|
+
end
|
26
|
+
|
27
|
+
def magic?
|
28
|
+
!physical?
|
29
|
+
end
|
30
|
+
|
3
31
|
def inspect
|
4
|
-
"#<Smite::Item '#{device_name}'>"
|
32
|
+
"#<Smite::Item #{item_id} '#{device_name}'>"
|
5
33
|
end
|
6
34
|
end
|
7
35
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Smite
|
2
|
+
class ItemEffect < Smite::Object
|
3
|
+
attr_reader :device_name, :percentage
|
4
|
+
|
5
|
+
def initialize(item, data)
|
6
|
+
@device_name = item
|
7
|
+
super(DataTransform.transform_item_effect(data))
|
8
|
+
end
|
9
|
+
|
10
|
+
def percentage?
|
11
|
+
!@percentage.nil?
|
12
|
+
end
|
13
|
+
|
14
|
+
def inspect
|
15
|
+
"#<Smite::ItemEffect '#{device_name}' #{attribute} +#{amount}#{percentage}>"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/smite/match.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
module Smite
|
2
2
|
class Match < Smite::Object
|
3
3
|
def initialize(data)
|
4
|
-
|
4
|
+
super
|
5
|
+
@data = DataTransform.transform_gods(@data)
|
6
|
+
@data = DataTransform.transform_items(@data)
|
7
|
+
@data = DataTransform.transform_match(@data)
|
5
8
|
end
|
6
9
|
|
7
10
|
def inspect
|
data/lib/smite/object.rb
CHANGED
@@ -3,21 +3,18 @@ module Smite
|
|
3
3
|
attr_reader :data
|
4
4
|
|
5
5
|
def initialize(data)
|
6
|
-
@data = data
|
6
|
+
@data = data.each_with_object({}) do |(k, v), obj|
|
7
|
+
obj[ActiveSupport::Inflector.underscore(k)] = v
|
8
|
+
end
|
7
9
|
end
|
8
10
|
|
9
11
|
def attributes
|
10
|
-
@data.keys
|
12
|
+
@data.keys
|
11
13
|
end
|
12
14
|
|
13
15
|
def method_missing(method)
|
14
|
-
|
15
|
-
|
16
|
-
camel_method = ActiveSupport::Inflector.underscore(method.to_s)
|
17
|
-
camel_attr == camel_method
|
18
|
-
end
|
19
|
-
|
20
|
-
key ? @data[key] : super
|
16
|
+
camel_method = ActiveSupport::Inflector.underscore(method.to_s)
|
17
|
+
@data[camel_method] || super
|
21
18
|
end
|
22
19
|
end
|
23
20
|
end
|
data/lib/smite/player.rb
CHANGED
@@ -5,7 +5,7 @@ module Smite
|
|
5
5
|
def initialize(client, player_name)
|
6
6
|
@client = client
|
7
7
|
@player_name = player_name
|
8
|
-
|
8
|
+
super(get_player)
|
9
9
|
end
|
10
10
|
|
11
11
|
def friends
|
@@ -21,7 +21,7 @@ module Smite
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def achievements
|
24
|
-
@achievements ||= get_achievements
|
24
|
+
@achievements ||= Achievements.new(get_achievements)
|
25
25
|
end
|
26
26
|
|
27
27
|
def inspect
|
data/smite_ruby.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
$:.push File.expand_path("../lib", __FILE__)
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = 'smite_ruby'
|
4
|
-
s.version = '1.
|
5
|
-
s.date = '2016-01-
|
4
|
+
s.version = '1.4.3'
|
5
|
+
s.date = '2016-01-29'
|
6
6
|
s.summary = 'Ruby Smite API'
|
7
7
|
s.description = 'Ruby Client for consuming the Smite API'
|
8
8
|
s.authors = ['NcUltimate']
|
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.files = `git ls-files`.split($/)
|
11
11
|
s.require_paths = ["lib"]
|
12
12
|
s.license = 'MIT'
|
13
|
-
s.homepage = 'https://rubygems.org/gems/
|
13
|
+
s.homepage = 'https://rubygems.org/gems/smite_ruby'
|
14
14
|
|
15
15
|
s.add_runtime_dependency 'httparty'
|
16
16
|
s.add_runtime_dependency 'activesupport'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smite_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NcUltimate
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -47,20 +47,24 @@ files:
|
|
47
47
|
- .DS_Store
|
48
48
|
- .gitignore
|
49
49
|
- Gemfile
|
50
|
+
- README.md
|
50
51
|
- lib/smite.rb
|
51
52
|
- lib/smite/ability.rb
|
53
|
+
- lib/smite/achievements.rb
|
52
54
|
- lib/smite/client.rb
|
53
55
|
- lib/smite/data_transform.rb
|
54
56
|
- lib/smite/friend.rb
|
55
57
|
- lib/smite/game.rb
|
56
58
|
- lib/smite/god.rb
|
57
59
|
- lib/smite/god_rank.rb
|
60
|
+
- lib/smite/god_stats.rb
|
58
61
|
- lib/smite/item.rb
|
62
|
+
- lib/smite/item_effect.rb
|
59
63
|
- lib/smite/match.rb
|
60
64
|
- lib/smite/object.rb
|
61
65
|
- lib/smite/player.rb
|
62
66
|
- smite_ruby.gemspec
|
63
|
-
homepage: https://rubygems.org/gems/
|
67
|
+
homepage: https://rubygems.org/gems/smite_ruby
|
64
68
|
licenses:
|
65
69
|
- MIT
|
66
70
|
metadata: {}
|