调整武器数据,添加霰弹专用HUD
This commit is contained in:
parent
971828241f
commit
f941cdc5f1
30 changed files with 206 additions and 104 deletions
|
@ -35,6 +35,9 @@ public class M98bItemModel extends GeoModel<M98bItem> {
|
|||
public void setCustomAnimations(M98bItem animatable, long instanceId, AnimationState animationState) {
|
||||
CoreGeoBone gun = getAnimationProcessor().getBone("bone");
|
||||
CoreGeoBone shen = getAnimationProcessor().getBone("shen");
|
||||
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
|
||||
CoreGeoBone main = getAnimationProcessor().getBone("0");
|
||||
CoreGeoBone scope = getAnimationProcessor().getBone("scope2");
|
||||
|
||||
Player player = Minecraft.getInstance().player;
|
||||
if (player == null) return;
|
||||
|
@ -68,14 +71,12 @@ public class M98bItemModel extends GeoModel<M98bItem> {
|
|||
shen.setRotX(0.15f * (float) (0.18f * fp + fr));
|
||||
shen.setRotZ(-0.01f * (float) (fp + 1.3 * fr));
|
||||
}
|
||||
scope.setPosZ(75.2f * (float) (fp + 0.54f * fr));
|
||||
shen.setPosX(0.5f * (float)fr * (float)((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).recoilHorizon * fp));
|
||||
|
||||
gun.setPosX(2.245f * (float) zp);
|
||||
|
||||
gun.setPosY(0.3f * (float) zp - (float) (0.2f * zpz));
|
||||
|
||||
gun.setPosZ(4.2f * (float) zp + (float) (0.3f * zpz));
|
||||
|
||||
gun.setRotZ((float) (0.02f * zpz));
|
||||
|
||||
stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
|
||||
|
@ -99,10 +100,6 @@ public class M98bItemModel extends GeoModel<M98bItem> {
|
|||
move.setRotY(Mth.DEG_TO_RAD * (float) turnRotY);
|
||||
move.setRotZ(2.7f * (float) mph + Mth.DEG_TO_RAD * (float) turnRotZ);
|
||||
|
||||
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
|
||||
CoreGeoBone main = getAnimationProcessor().getBone("0");
|
||||
CoreGeoBone scope = getAnimationProcessor().getBone("scope2");
|
||||
|
||||
float numR = (float) (1 - 0.88 * zt);
|
||||
float numP = (float) (1 - 0.68 * zt);
|
||||
|
||||
|
|
|
@ -91,7 +91,6 @@ public class CannonHudOverlay {
|
|||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/indicator.png"), k + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffY, -1.5, 1.5)) * 5 * i / 1.4f * (90 - Math.abs(player.getXRot())) / 90, l + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffX, -1.5, 1.5)) * 5 * j / 1.4f, 0, 0.0F, i, j, i, j);
|
||||
} else {
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/cannon_crosshair_notzoom.png"), k, l, 0, 0.0F, i, j, i, j);
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/cannon/indicator.png"), k + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffY, -1.5, 1.5)) * i / 1.4f * (90 - Math.abs(player.getXRot())) / 90, l + (float) Math.tan(Mth.clamp(Mth.DEG_TO_RAD * diffX, -1.5, 1.5)) * j / 1.4f, 0, 0.0F, i, j, i, j);
|
||||
}
|
||||
}
|
||||
RenderSystem.depthMask(true);
|
||||
|
|
|
@ -12,6 +12,7 @@ import net.minecraft.client.gui.Font;
|
|||
import net.minecraft.client.renderer.GameRenderer;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
|
@ -28,6 +29,7 @@ public class CrossHairOverlay {
|
|||
public static int HIT_INDICATOR = 0;
|
||||
public static int HEAD_INDICATOR = 0;
|
||||
public static int KILL_INDICATOR = 0;
|
||||
private static float scopeScale = 1f;
|
||||
|
||||
@SubscribeEvent(priority = EventPriority.NORMAL)
|
||||
public static void eventHandler(RenderGuiEvent.Pre event) {
|
||||
|
@ -39,6 +41,9 @@ public class CrossHairOverlay {
|
|||
}
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
double spread = ClientEventHandler.gunSpread + 3 * ClientEventHandler.firePos;
|
||||
float deltaFrame = Minecraft.getInstance().getDeltaFrameTime();
|
||||
float moveX = (float) (-6 * ClientEventHandler.turnRot[1] - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosX);
|
||||
float moveY = (float) (-6 * ClientEventHandler.turnRot[0] + 6 * (float)ClientEventHandler.velocityY - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosY - 2 * ClientEventHandler.firePos);
|
||||
|
||||
RenderSystem.disableDepthTest();
|
||||
RenderSystem.depthMask(false);
|
||||
|
@ -47,18 +52,44 @@ public class CrossHairOverlay {
|
|||
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
|
||||
RenderSystem.setShaderColor(1, 1, 1, 1);
|
||||
|
||||
float moveX = (float) (-6 * ClientEventHandler.turnRot[1] - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosX);
|
||||
float moveY = (float) (-6 * ClientEventHandler.turnRot[0] + 6 * (float)ClientEventHandler.velocityY - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosY - 2 * ClientEventHandler.firePos);
|
||||
scopeScale = (float) Mth.lerp(0.5F * deltaFrame, scopeScale, 1 + 1.5f * spread);
|
||||
float f = (float)Math.min(w, h);
|
||||
float f1 = Math.min((float)w / f, (float)h / f) * 0.012f * scopeScale;
|
||||
float i = Mth.floor(f * f1);
|
||||
float j = Mth.floor(f * f1);
|
||||
float k = ((w - i) / 2) + moveX;
|
||||
float l = ((h - j) / 2) + moveY;
|
||||
|
||||
if (shouldRenderCrossHair(player) || stack.is(ModItems.MINIGUN.get()) || (stack.is(ModItems.BOCEK.get()) && stack.getOrCreateTag().getBoolean("HoloHidden"))) {
|
||||
if (shouldRenderCrossHair(player) || stack.is(ModItems.MINIGUN.get())) {
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
|
||||
if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0) {
|
||||
if (stack.is(ModTags.Items.SHOTGUN)) {
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/shotgun_hud.png"), k, l, 0, 0.0F, i, j, i, j);
|
||||
} else {
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 13.5f - 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (stack.is(ModItems.BOCEK.get())) {
|
||||
|
||||
if (stack.getOrCreateTag().getBoolean("HoloHidden")) {
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
|
||||
if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0 || ClientEventHandler.pullPos > 0) {
|
||||
if (ClientEventHandler.zoomTime < 0.1) {
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/shotgun_hud.png"), k, l, 0, 0.0F, i, j, i, j);
|
||||
} else {
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexheng.png"), (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);
|
||||
preciseBlit(event.getGuiGraphics(), new ResourceLocation(ModUtils.MODID, "textures/screens/rexshu.png"), w / 2f - 7.5f + moveX, (float) (h / 2f - 13.5f - 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float ww = w / 2f - 7.5f + (float) (2 * (Math.random() - 0.5f));
|
||||
float hh = h / 2f - 7.5f + (float) (2 * (Math.random() - 0.5f));
|
||||
|
|
|
@ -411,7 +411,7 @@ public class ClientEventHandler {
|
|||
fireSpread += 0.2;
|
||||
}
|
||||
|
||||
fireSpread = Mth.clamp(fireSpread - 0.1 * (Math.pow(fireSpread, 2) * times), 0, 100);
|
||||
fireSpread = Mth.clamp(fireSpread - 0.6 * (Math.pow(fireSpread, 2) * times), 0, 100);
|
||||
firePosZ = Mth.clamp(firePosZ - 0.02 * times, 0, 0.6);
|
||||
|
||||
if (0 < firePosTimer) {
|
||||
|
@ -527,7 +527,13 @@ public class ClientEventHandler {
|
|||
return;
|
||||
}
|
||||
|
||||
double p = zoomPos;
|
||||
double p;
|
||||
if (stack.is(ModItems.BOCEK.get())) {
|
||||
p = (pullPos + 0.25) * zoomTime;
|
||||
} else {
|
||||
p = zoomPos;
|
||||
}
|
||||
|
||||
double zoom = stack.getOrCreateTag().getDouble("zoom") + stack.getOrCreateTag().getDouble("custom_zoom");
|
||||
|
||||
event.setFOV(event.getFOV() / (1.0 + p * (zoom - 1)) * (1 - 0.4 * breathTime));
|
||||
|
|
|
@ -256,7 +256,6 @@ public class GunEventHandler {
|
|||
//启动换弹
|
||||
if (tag.getBoolean("start_reload")) {
|
||||
MinecraftForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
|
||||
|
||||
if (stack.is(ModTags.Items.OPEN_BOLT)) {
|
||||
if (tag.getInt("ammo") == 0) {
|
||||
tag.putInt("gun_reloading_time", (int) tag.getDouble("empty_reload_time") + 2);
|
||||
|
@ -272,6 +271,9 @@ public class GunEventHandler {
|
|||
stack.getOrCreateTag().putBoolean("is_empty_reloading", true);
|
||||
playGunEmptyReloadSounds(player);
|
||||
}
|
||||
if (stack.getItem() == ModItems.DEVOTION.get()) {
|
||||
tag.putInt("customRpm", 0);
|
||||
}
|
||||
tag.putBoolean("start_reload", false);
|
||||
}
|
||||
|
||||
|
|
|
@ -280,7 +280,7 @@ public class PlayerEventHandler {
|
|||
* 判断玩家是否在奔跑
|
||||
*/
|
||||
private static void handlePlayerSprint(Player player) {
|
||||
if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0) {
|
||||
if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0 || player.getMainHandItem().getOrCreateTag().getInt("fire_animation") > 0) {
|
||||
player.getPersistentData().putDouble("noRun", 20);
|
||||
}
|
||||
|
||||
|
@ -383,8 +383,10 @@ public class PlayerEventHandler {
|
|||
|
||||
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
|
||||
capability.bowPull = true;
|
||||
capability.tacticalSprint = false;
|
||||
capability.syncPlayerVariables(player);
|
||||
});
|
||||
player.setSprinting(false);
|
||||
}
|
||||
if (tag.getDouble("power") == 1) {
|
||||
if (!player.level().isClientSide() && player instanceof ServerPlayer serverPlayer) {
|
||||
|
@ -401,6 +403,14 @@ public class PlayerEventHandler {
|
|||
capability.syncPlayerVariables(player);
|
||||
});
|
||||
}
|
||||
|
||||
if (tag.getDouble("power") > 0) {
|
||||
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
|
||||
capability.tacticalSprint = false;
|
||||
capability.syncPlayerVariables(player);
|
||||
});
|
||||
player.setSprinting(false);
|
||||
}
|
||||
}
|
||||
|
||||
private static void handleGunRecoil(Player player) {
|
||||
|
|
|
@ -75,17 +75,13 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem {
|
|||
transformType = type;
|
||||
}
|
||||
|
||||
private PlayState idlePredicate(AnimationState<M98bItem> event) {
|
||||
private PlayState fireAnimPredicate(AnimationState<M98bItem> event) {
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
if (player == null) return PlayState.STOP;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||
|
||||
if (this.animationProcedure.equals("empty")) {
|
||||
if (stack.getOrCreateTag().getInt("draw_time") < 16) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.draw"));
|
||||
}
|
||||
|
||||
if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.shift"));
|
||||
}
|
||||
|
@ -102,7 +98,25 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem {
|
|||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m98b.reload_normal"));
|
||||
}
|
||||
|
||||
if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.idle"));
|
||||
}
|
||||
return PlayState.STOP;
|
||||
}
|
||||
|
||||
private PlayState idlePredicate(AnimationState<M98bItem> event) {
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
if (player == null) return PlayState.STOP;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
|
||||
|
||||
if (this.animationProcedure.equals("empty")) {
|
||||
if (stack.getOrCreateTag().getInt("draw_time") < 16) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.draw"));
|
||||
}
|
||||
|
||||
if (player.isSprinting() && player.onGround()
|
||||
&& player.getPersistentData().getDouble("noRun") == 0
|
||||
&& !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))) {
|
||||
if (player.hasEffect(MobEffects.MOVEMENT_SPEED) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) {
|
||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m98b.run_fast"));
|
||||
} else {
|
||||
|
@ -115,25 +129,10 @@ public class M98bItem extends GunItem implements GeoItem, AnimatedItem {
|
|||
return PlayState.STOP;
|
||||
}
|
||||
|
||||
private PlayState procedurePredicate(AnimationState<M98bItem> event) {
|
||||
if (transformType != null && transformType.firstPerson()) {
|
||||
if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure));
|
||||
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||
this.animationProcedure = "empty";
|
||||
event.getController().forceAnimationReset();
|
||||
}
|
||||
} else if (this.animationProcedure.equals("empty")) {
|
||||
return PlayState.STOP;
|
||||
}
|
||||
}
|
||||
return PlayState.CONTINUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||
var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate);
|
||||
data.add(procedureController);
|
||||
var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate);
|
||||
data.add(fireAnimController);
|
||||
var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate);
|
||||
data.add(idleController);
|
||||
}
|
||||
|
|
|
@ -188,7 +188,7 @@ public class ShootMessage {
|
|||
stack.getOrCreateTag().putBoolean("shoot", true);
|
||||
|
||||
for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) {
|
||||
gunShoot(player, 2 * stack.getOrCreateTag().getDouble("spread"));
|
||||
gunShoot(player, spared);
|
||||
}
|
||||
|
||||
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
|
||||
|
|
|
@ -40,6 +40,7 @@ public class TooltipTool {
|
|||
addLevelTips(tooltip, stack);
|
||||
addBypassTips(tooltip, stack);
|
||||
addPerkTips(tooltip, stack);
|
||||
addRpmTips(tooltip, stack);
|
||||
}
|
||||
|
||||
public static void addShotgunTips(List<Component> tooltip, ItemStack stack, int count) {
|
||||
|
@ -55,6 +56,13 @@ public class TooltipTool {
|
|||
addLevelTips(tooltip, stack);
|
||||
addBypassTips(tooltip, stack);
|
||||
addPerkTips(tooltip, stack);
|
||||
addRpmTips(tooltip, stack);
|
||||
}
|
||||
|
||||
private static void addRpmTips(List<Component> tooltip, ItemStack stack) {
|
||||
tooltip.add(Component.translatable("des.superbwarfare.tips.rpm").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(new DecimalFormat("##").format(ItemNBTTool.getDouble(stack, "rpm", 0) + ItemNBTTool.getDouble(stack, "customRpm", 0))).withStyle(ChatFormatting.GREEN)));
|
||||
}
|
||||
|
||||
private static void addLevelTips(List<Component> tooltip, ItemStack stack) {
|
||||
|
@ -186,6 +194,7 @@ public class TooltipTool {
|
|||
addLevelTips(tooltip, stack);
|
||||
addBypassTips(tooltip, stack);
|
||||
addPerkTips(tooltip, stack);
|
||||
addRpmTips(tooltip, stack);
|
||||
|
||||
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
|
||||
e -> tooltip.add(Component.literal(e.getEnergyStored() + " / " + e.getMaxEnergyStored() + " FE").withStyle(ChatFormatting.GRAY))
|
||||
|
@ -202,7 +211,11 @@ public class TooltipTool {
|
|||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(new DecimalFormat("##.#").format(damage)).withStyle(ChatFormatting.GREEN)));
|
||||
|
||||
addLevelTips(tooltip, stack);
|
||||
int upgradePoint = Mth.floor(ItemNBTTool.getDouble(stack, "UpgradePoint", 0));
|
||||
|
||||
tooltip.add(Component.translatable("des.superbwarfare.tips.upgradepoint").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal(String.valueOf(upgradePoint)).withStyle(ChatFormatting.GRAY).withStyle(ChatFormatting.BOLD)));
|
||||
addPerkTips(tooltip, stack);
|
||||
|
||||
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
|
||||
|
|
|
@ -243,61 +243,96 @@
|
|||
},
|
||||
"animation.m98b.shift": {
|
||||
"loop": "hold_on_last_frame",
|
||||
"animation_length": 1,
|
||||
"animation_length": 1.1,
|
||||
"override_previous_animation": true,
|
||||
"bones": {
|
||||
"0": {
|
||||
"rotation": {
|
||||
"0.0": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.05": {
|
||||
"vector": [-1, 0, -3],
|
||||
"easing": "easeInOutSine"
|
||||
},
|
||||
"0.15": {
|
||||
"vector": [-5.06695, -0.89397, 0.2229],
|
||||
"easing": "easeInSine"
|
||||
},
|
||||
"0.3": {
|
||||
"vector": [-4.64234, 4.23541, 7.63209],
|
||||
"easing": "easeInOutSine"
|
||||
},
|
||||
"0.5": {
|
||||
"vector": [-3.1436, -1.5688, -3.26245],
|
||||
"easing": "easeInOutSine"
|
||||
},
|
||||
"0.6": {
|
||||
"vector": [-0.70997, -1.32962, -4.26107],
|
||||
"easing": "easeInOutSine"
|
||||
},
|
||||
"0.7": {
|
||||
"vector": [0, 0, 0],
|
||||
"easing": "easeInOutSine"
|
||||
},
|
||||
"0.2": {
|
||||
"vector": [-0.2, 0, -1],
|
||||
"easing": "easeInElastic"
|
||||
},
|
||||
"0.3": {
|
||||
"vector": [-0.2584, -0.4688, 5.16075],
|
||||
"easing": "easeInSine"
|
||||
},
|
||||
"0.35": {
|
||||
"vector": [-0.1745, -0.1155, 4.6568],
|
||||
"easing": "easeInElastic"
|
||||
},
|
||||
"0.45": {
|
||||
"vector": [-0.6993, -0.252, -1.4861],
|
||||
"easing": "easeInElastic"
|
||||
},
|
||||
"0.6": {
|
||||
"vector": [-2.25, -1, 4.82]
|
||||
},
|
||||
"0.65": {
|
||||
"vector": [-0.25, -0.5, 4.82]
|
||||
},
|
||||
"0.7": {
|
||||
"vector": [0.53655, 1.56915, 2.11954]
|
||||
},
|
||||
"0.75": {
|
||||
"vector": [0.9659, 0.52169, -2.4819],
|
||||
"easing": "easeInOutSine"
|
||||
},
|
||||
"0.85": {
|
||||
"vector": [0.7935, 0.19563, -2.80573]
|
||||
},
|
||||
"0.9": {
|
||||
"vector": [0.49, 0, 0]
|
||||
},
|
||||
"1.0": {
|
||||
"vector": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"position": {
|
||||
"0.0": {
|
||||
"vector": [0, 0, 0]
|
||||
},
|
||||
"0.1": {
|
||||
"vector": [0, -0.1, -0.2],
|
||||
"easing": "easeInOutSine"
|
||||
},
|
||||
"0.3": {
|
||||
"vector": [0, 0, 1.7],
|
||||
"easing": "easeInElastic"
|
||||
},
|
||||
"0.5": {
|
||||
"vector": [-0.02, -0.1, -0.5],
|
||||
"easing": "easeInElastic"
|
||||
},
|
||||
"0.6": {
|
||||
"vector": [-0.03, 0.1, 0.3]
|
||||
},
|
||||
"0.7": {
|
||||
"vector": [0, 0, 0],
|
||||
"easing": "easeInOutSine"
|
||||
},
|
||||
"0.15": {
|
||||
"vector": [0, 0, 0],
|
||||
"easing": "linear"
|
||||
},
|
||||
"0.3": {
|
||||
"vector": [-0.41, -0.23, 0.32]
|
||||
},
|
||||
"0.45": {
|
||||
"vector": [-0.1, -0.5, 0.3],
|
||||
"easing": "easeInElastic"
|
||||
},
|
||||
"0.55": {
|
||||
"vector": [-0.1, -0.5, 0.6]
|
||||
},
|
||||
"0.6": {
|
||||
"vector": [-0.3, -0.5, -0.6]
|
||||
},
|
||||
"0.65": {
|
||||
"vector": [-0.3, -0.5, -0.6]
|
||||
},
|
||||
"0.7": {
|
||||
"vector": [-0.1, -0.2, 0.1],
|
||||
"easing": "easeInElastic"
|
||||
},
|
||||
"0.8": {
|
||||
"vector": [0.2, -0.3, -0.1]
|
||||
},
|
||||
"0.85": {
|
||||
"vector": [0.14, -0.05, 0.2],
|
||||
"easing": "easeInSine"
|
||||
},
|
||||
"0.9": {
|
||||
"vector": [0.04, 0.1, 0.24478]
|
||||
},
|
||||
"1.0": {
|
||||
"vector": [0, 0, 0],
|
||||
"easing": "easeOutSine"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -395,6 +430,12 @@
|
|||
},
|
||||
"0.6": {
|
||||
"vector": [-15.7, -8.7, 13.8]
|
||||
},
|
||||
"0.65": {
|
||||
"vector": [-3072.7, -8.7, 13.8]
|
||||
},
|
||||
"0.7": {
|
||||
"vector": [0, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
"des.superbwarfare.tips.bypass": "Armor Piercing: ",
|
||||
"des.superbwarfare.tips.distance": "Drone Distance: ",
|
||||
"des.superbwarfare.tips.upgradepoint": "Upgrade Point: ",
|
||||
"des.superbwarfare.tips.rpm": "Rpm: ",
|
||||
|
||||
"item.superbwarfare.vector_blueprint": "VECTOR Blueprint",
|
||||
"item.superbwarfare.m_60_blueprint": "M60 Blueprint",
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
"des.superbwarfare.tips.level": "等级: ",
|
||||
"des.superbwarfare.tips.bypass": "护甲穿透: ",
|
||||
"des.superbwarfare.tips.distance": "无人机距离你: ",
|
||||
"des.superbwarfare.tips.rpm": "射速: ",
|
||||
|
||||
"item.superbwarfare.vector_blueprint": "短剑冲锋枪蓝图",
|
||||
"item.superbwarfare.m_60_blueprint": "M60通用机枪蓝图",
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
|
@ -19,5 +19,5 @@
|
|||
"empty_reload_time": 85,
|
||||
"BypassesArmor": 0.05,
|
||||
"SoundRadius": 18,
|
||||
"rpm": 400
|
||||
"rpm": 360
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"recoil_x": 0.005,
|
||||
"recoil_y": 0.003,
|
||||
"headshot": 2.5,
|
||||
"damage": 24,
|
||||
"damage": 36,
|
||||
"weight": 1,
|
||||
"BypassesArmor": 0.25
|
||||
}
|
|
@ -5,7 +5,7 @@
|
|||
"bipod": 1,
|
||||
"recoil_x": 0.0018,
|
||||
"recoil_y": 0.01,
|
||||
"damage": 7,
|
||||
"damage": 9.5,
|
||||
"headshot": 2,
|
||||
"velocity": 25,
|
||||
"mag": 55,
|
||||
|
|
|
@ -19,5 +19,5 @@
|
|||
"empty_reload_time": 35,
|
||||
"BypassesArmor": 0.15,
|
||||
"SoundRadius": 10,
|
||||
"rpm": 600
|
||||
"rpm": 400
|
||||
}
|
|
@ -19,5 +19,5 @@
|
|||
"empty_reload_time": 35,
|
||||
"BypassesArmor": 0.15,
|
||||
"SoundRadius": 16,
|
||||
"rpm": 1200
|
||||
"rpm": 1300
|
||||
}
|
|
@ -19,5 +19,5 @@
|
|||
"empty_reload_time": 64,
|
||||
"BypassesArmor": 0.25,
|
||||
"SoundRadius": 14,
|
||||
"rpm": 800
|
||||
"rpm": 900
|
||||
}
|
|
@ -17,5 +17,6 @@
|
|||
"burst_size": 1,
|
||||
"empty_reload_time": 64,
|
||||
"BypassesArmor": 0.7,
|
||||
"SoundRadius": 20
|
||||
"SoundRadius": 20,
|
||||
"rpm": 120
|
||||
}
|
|
@ -23,5 +23,5 @@
|
|||
"finish_time": 18,
|
||||
"BypassesArmor": 0.5,
|
||||
"SoundRadius": 18,
|
||||
"rpm": 100
|
||||
"rpm": 240
|
||||
}
|
|
@ -18,5 +18,6 @@
|
|||
"normal_reload_time": 30,
|
||||
"empty_reload_time": 35,
|
||||
"BypassesArmor": 0.2,
|
||||
"SoundRadius": 10
|
||||
"SoundRadius": 10,
|
||||
"rpm": 400
|
||||
}
|
|
@ -19,5 +19,5 @@
|
|||
"empty_reload_time": 64,
|
||||
"BypassesArmor": 0.25,
|
||||
"SoundRadius": 14,
|
||||
"rpm": 800
|
||||
"rpm": 850
|
||||
}
|
|
@ -22,5 +22,5 @@
|
|||
"empty_reload_time": 86,
|
||||
"BypassesArmor": 0.6,
|
||||
"SoundRadius": 18,
|
||||
"rpm": 90
|
||||
"rpm": 240
|
||||
}
|
|
@ -22,5 +22,5 @@
|
|||
"empty_reload_time": 81,
|
||||
"BypassesArmor": 0.4,
|
||||
"SoundRadius": 16,
|
||||
"rpm": 600
|
||||
"rpm": 700
|
||||
}
|
|
@ -22,5 +22,5 @@
|
|||
"finish_time": 18,
|
||||
"BypassesArmor": 0.54,
|
||||
"SoundRadius": 18,
|
||||
"rpm": 90
|
||||
"rpm": 240
|
||||
}
|
|
@ -23,5 +23,5 @@
|
|||
"empty_reload_time": 87,
|
||||
"BypassesArmor": 1,
|
||||
"SoundRadius": 22,
|
||||
"rpm": 40
|
||||
"rpm": 180
|
||||
}
|
|
@ -4,7 +4,7 @@
|
|||
"spread": 3.7,
|
||||
"recoil_x": 0.0013,
|
||||
"recoil_y": 0.009,
|
||||
"damage": 7.5,
|
||||
"damage": 8.25,
|
||||
"headshot": 2,
|
||||
"velocity": 27,
|
||||
"mag": 30,
|
||||
|
@ -19,5 +19,5 @@
|
|||
"empty_reload_time": 74,
|
||||
"BypassesArmor": 0.28,
|
||||
"SoundRadius": 13,
|
||||
"rpm": 750
|
||||
"rpm": 650
|
||||
}
|
|
@ -20,5 +20,5 @@
|
|||
"empty_reload_time": 89,
|
||||
"BypassesArmor": 0.8,
|
||||
"SoundRadius": 20,
|
||||
"rpm": 90
|
||||
"rpm": 240
|
||||
}
|
|
@ -19,5 +19,5 @@
|
|||
"empty_reload_time": 64,
|
||||
"BypassesArmor": 0.15,
|
||||
"SoundRadius": 4,
|
||||
"rpm": 1100
|
||||
"rpm": 1200
|
||||
}
|
Loading…
Add table
Reference in a new issue