VS plugin mod for Basic Armour
Révision | cf244e8fdd98e6feed4158121370f24665bbe65c (tree) |
---|---|
l'heure | 2019-05-17 08:56:46 |
Auteur | ![]() |
Commiter | melchior |
* EntityArmourPlayer.cs: Armour item decay code added
* clothes-head-potmetal.json,
* clothes-upperbodyover-vest.json: durability added
@@ -3,7 +3,8 @@ using System.Collections.Generic; | ||
3 | 3 | using System.Linq; |
4 | 4 | |
5 | 5 | using Vintagestory.API.Common; |
6 | -using Vintagestory .API.Client; | |
6 | +using Vintagestory.API.Client; | |
7 | +using Vintagestory.API.Server; | |
7 | 8 | |
8 | 9 | namespace ArmourMod |
9 | 10 | { |
@@ -11,6 +12,7 @@ namespace ArmourMod | ||
11 | 12 | { |
12 | 13 | protected ICoreAPI CoreAPI; |
13 | 14 | protected ICoreClientAPI ClientAPI; |
15 | + protected ICoreServerAPI ServerAPI; | |
14 | 16 | protected ILogger Logger; |
15 | 17 | |
16 | 18 | //Damage Filter list: BY Inventory SLOT# |
@@ -39,6 +41,11 @@ namespace ArmourMod | ||
39 | 41 | this.RenderableWornArmours = new Dictionary<EnumCharacterDressType, Item>(); // BEFORE RENDERER GETS THERE! |
40 | 42 | Logger.VerboseDebug("Renderable Worn Armours Dict assigned"); |
41 | 43 | } |
44 | + | |
45 | + if (CoreAPI.Side.IsServer( )) { | |
46 | + this.ServerAPI = api as ICoreServerAPI; | |
47 | + | |
48 | + } | |
42 | 49 | } |
43 | 50 | |
44 | 51 | public override void OnEntityLoaded() |
@@ -121,7 +128,7 @@ namespace ArmourMod | ||
121 | 128 | public override void Revive() |
122 | 129 | { |
123 | 130 | base.Revive(); |
124 | - base.Api.World.Logger.VerboseDebug( "Respawned, alive again..." ); | |
131 | + Logger.VerboseDebug( "Respawned, alive again..." ); | |
125 | 132 | } |
126 | 133 | |
127 | 134 | /// <summary> |
@@ -132,49 +139,62 @@ namespace ArmourMod | ||
132 | 139 | /// <param name="damage">Damage.</param> |
133 | 140 | public override bool ReceiveDamage(DamageSource damageSource, float damage) |
134 | 141 | { |
135 | - float beforeDamage = damage; | |
136 | - //TODO: evaluate postion vector of strike to determine WHEN position of armour offers protection | |
142 | + if (damageSource.Type != EnumDamageType.Heal) | |
143 | + { | |
144 | + float beforeDamage = damage; | |
145 | + //TODO: evaluate postion vector of strike to determine WHEN position of armour offers protection | |
137 | 146 | |
138 | - if (DamageFilters.Count > 0) { | |
139 | - //Evaluate damge type | |
140 | - //Reduce by any applicable filter(s) | |
141 | - //Pass along | |
147 | + if (DamageFilters.Count > 0) { | |
148 | + //Evaluate damge type | |
149 | + //Reduce by any applicable filter(s) | |
150 | + //Pass along | |
142 | 151 | |
143 | - #if DEBUG | |
144 | - Logger.VerboseDebug("{0} has Damage Filters#{1}", this.PlayerUID, DamageFilters.Count); | |
145 | - #endif | |
152 | + #if DEBUG | |
153 | + Logger.VerboseDebug("{0} has Damage Filters#{1}", this.PlayerUID, DamageFilters.Count); | |
154 | + #endif | |
146 | 155 | |
147 | - switch (damageSource.Type) { | |
156 | + switch (damageSource.Type) { | |
148 | 157 | |
149 | - case EnumDamageType.BluntAttack: | |
150 | - damage -= damage * bluntPercentReduction; | |
151 | - break; | |
158 | + case EnumDamageType.BluntAttack: | |
159 | + damage -= damage * bluntPercentReduction; | |
160 | + break; | |
152 | 161 | |
153 | - case EnumDamageType.PiercingAttack: | |
154 | - damage -= damage * piercingPercentReduction; | |
155 | - break; | |
162 | + case EnumDamageType.PiercingAttack: | |
163 | + damage -= damage * piercingPercentReduction; | |
164 | + break; | |
156 | 165 | |
157 | - case EnumDamageType.SlashingAttack: | |
158 | - damage -= damage * slashingPercentReduction; | |
159 | - break; | |
166 | + case EnumDamageType.SlashingAttack: | |
167 | + damage -= damage * slashingPercentReduction; | |
168 | + break; | |
160 | 169 | |
161 | - case EnumDamageType.Crushing: | |
162 | - damage -= damage * crushingPercentReduction; | |
163 | - break; | |
170 | + case EnumDamageType.Crushing: | |
171 | + damage -= damage * crushingPercentReduction; | |
172 | + break; | |
164 | 173 | |
165 | - case EnumDamageType.Fire: | |
166 | - damage -= damage * firePercentReduction; | |
167 | - break; | |
174 | + case EnumDamageType.Fire: | |
175 | + damage -= damage * firePercentReduction; | |
176 | + break; | |
168 | 177 | |
169 | - default: | |
178 | + default: | |
170 | 179 | |
171 | - break; | |
180 | + break; | |
181 | + } | |
172 | 182 | } |
173 | - } | |
174 | 183 | |
175 | - #if DEBUG | |
176 | - Logger.VerboseDebug("Reduced: {0} Dmg from {2}; [{1}]", damage, damageSource.Type.ToString( ), beforeDamage); | |
177 | - #endif | |
184 | + #if DEBUG | |
185 | + Logger.VerboseDebug("Reduced: {0} Dmg from {2}; [{1}]", damage, damageSource.Type.ToString( ), beforeDamage); | |
186 | + #endif | |
187 | + | |
188 | + //All worn Armours adsorb damage themselves... | |
189 | + List<int> slotsList = this.DamageFilters.Keys.ToList(); | |
190 | + | |
191 | + foreach (var slotId in slotsList) { | |
192 | + ItemSlot slot = this.GearInventory[slotId]; | |
193 | + Item armourItem = slot.Itemstack.Item; | |
194 | + | |
195 | + armourItem.DamageItem(ServerAPI.World, damageSource.SourceEntity, slot, 1); | |
196 | + } | |
197 | + } | |
178 | 198 | |
179 | 199 | return base.ReceiveDamage(damageSource, damage); |
180 | 200 | } |
@@ -13,6 +13,7 @@ | ||
13 | 13 | shapeByType:{ |
14 | 14 | "*-potmetal": { base: "bunnyviking:item/armament/armour/helmpot" }, |
15 | 15 | }, |
16 | + durability: 20, | |
16 | 17 | texturesByType: { |
17 | 18 | "*-potmetal":{ |
18 | 19 | dummy:{ base: "bunnyviking:item/armament/armour/transparent"}, |
@@ -25,6 +25,15 @@ | ||
25 | 25 | "*-chain": { base: "bunnyviking:item/armament/armour/armourchain" }, |
26 | 26 | "*-studdedleather": { base: "bunnyviking:item/armament/armour/armourstuddedleather" } |
27 | 27 | }, |
28 | + durabilitybytype: { | |
29 | + "*-leather": 20, | |
30 | + "*-coatofplates": 20, | |
31 | + "*-lamellar": 20, | |
32 | + "*-platechest": 20, | |
33 | + "*-scale": 20, | |
34 | + "*-chain": 20, | |
35 | + "*-studdedleather": 20 | |
36 | + }, | |
28 | 37 | texturesByType: { |
29 | 38 | "*-leather":{ |
30 | 39 | dummy:{ base: "bunnyviking:item/armament/armour/transparent"}, |