Browse Source

Merge branch 'v1.0'

master
许孟阳 2 months ago
parent
commit
81a5e9bdf4
  1. 3
      java/src/main/java/vip/xumy/idle/server/mapper/IArchiveMapper.java
  2. 1
      java/src/main/java/vip/xumy/idle/server/pojo/Archive.java
  3. BIN
      public/img/effect/colorful.gif
  4. BIN
      public/img/effect/taigu.gif
  5. BIN
      public/img/effect/unique.gif
  6. BIN
      public/img/effect/yuangu.gif
  7. BIN
      public/img/equips/ring/黑白钻戒.png
  8. BIN
      public/img/equips/weapon/狸猫利刃.png
  9. BIN
      public/img/unique.gif
  10. 5
      src/assets/css/base.scss
  11. 49
      src/components/dialog.vue
  12. 4
      src/components/equip-icon.vue
  13. 7
      src/config/assets.ts
  14. 21
      src/config/beings.ts
  15. 7
      src/config/equips/armor.ts
  16. 4
      src/config/equips/bracers.ts
  17. 6
      src/config/equips/jewelry.ts
  18. 6
      src/config/equips/neck.ts
  19. 9
      src/config/equips/pants.ts
  20. 18
      src/config/equips/ring.ts
  21. 4
      src/config/equips/shoes.ts
  22. 44
      src/config/equips/weapon.ts
  23. 8
      src/config/i18n/zh/euips.ts
  24. 17
      src/config/i18n/zh/index.ts
  25. 24
      src/config/i18n/zh/skills.ts
  26. 6
      src/config/skill/armor.ts
  27. 4
      src/config/skill/base.ts
  28. 4
      src/config/skill/bracers.ts
  29. 10
      src/config/skill/buff.ts
  30. 8
      src/config/skill/jewelry.ts
  31. 2
      src/config/skill/neck.ts
  32. 2
      src/config/skill/pants.ts
  33. 17
      src/config/skill/ring.ts
  34. 110
      src/config/skill/weapon.ts
  35. 2
      src/tool/caller/equip.ts
  36. 2
      src/views/archive.vue
  37. 15
      src/views/backpack/equip-menu.vue
  38. 2
      src/views/backpack/grid.vue
  39. 7
      src/views/backpack/inherited.vue
  40. 2
      src/views/backpack/player.vue
  41. 214
      src/views/backpack/reforge.vue
  42. 5
      src/views/backpack/strengthen.vue
  43. 1
      src/views/dungeon/dungeonTips.vue
  44. 55
      src/views/version/update-log.vue

3
java/src/main/java/vip/xumy/idle/server/mapper/IArchiveMapper.java

@ -22,7 +22,8 @@ public interface IArchiveMapper extends BaseMapper<Archive> {
SET SET
lv = #{lv}, lv = #{lv},
coins = #{coins}, coins = #{coins},
strengthen_lv= #{strengthenLv} , strengthen_lv= #{strengthenLv},
layer= #{layer},
archive = #{archive} archive = #{archive}
WHERE WHERE
username = #{username} username = #{username}

1
java/src/main/java/vip/xumy/idle/server/pojo/Archive.java

@ -22,6 +22,7 @@ public class Archive {
private int lv; private int lv;
private long coins; private long coins;
private int strengthenLv; private int strengthenLv;
private int layer;
private String archive; private String archive;
} }

BIN
public/img/effect/colorful.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
public/img/effect/taigu.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
public/img/effect/unique.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
public/img/effect/yuangu.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
public/img/equips/ring/黑白钻戒.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
public/img/equips/weapon/狸猫利刃.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
public/img/unique.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

5
src/assets/css/base.scss

@ -88,6 +88,11 @@ button {
} }
} }
select {
background-color: rgba(0, 0, 0, 0.6);
color: white;
}
/*使用选择器指定字体*/ /*使用选择器指定字体*/
.panel-title { .panel-title {
font-family: 'MaShanZheng' !important; font-family: 'MaShanZheng' !important;

49
src/components/dialog.vue

@ -1,9 +1,9 @@
<template> <template>
<teleport to="#app"> <teleport to="#app">
<div class="dialog" v-show="show" @contextmenu.prevent="console.log('禁用浏览器默认右键功能')" <div ref="dialog" class="dialog" v-show="show" @contextmenu.prevent="console.log('禁用浏览器默认右键功能')"
@click=" commit('close_equip_tip');" :style="style"> @click=" commit('close_equip_tip');" :style="style">
<div class="content" @click.native.stop> <div class="content" @click.native.stop>
<div class="title" v-if="title"> <div class="title" v-if="title" @mousemove="mouseMove" @mousedown="mouseDown" @mouseup="mouseup">
<span>{{ title }}</span> <span>{{ title }}</span>
</div> </div>
<slot /> <slot />
@ -15,7 +15,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useStore } from "vuex"; import { useStore } from "vuex";
import { watch, onMounted, ref, onBeforeUnmount } from "vue"; import { watch, onMounted, ref, onBeforeUnmount, computed, reactive } from "vue";
import { useI18n } from "vue3-i18n"; import { useI18n } from "vue3-i18n";
import { close_icon } from "@/config"; import { close_icon } from "@/config";
@ -77,6 +77,44 @@ watch(() => prop.modelValue, (n, o) => {
show.value = n; show.value = n;
}) })
const dialog = ref()
const move = reactive({
x: 0,
y: 0
})
const temp = reactive({
x: 0,
y: 0
})
let x = 0, y = 0;
const moveFlag = ref(false);
const left = computed(() => {
return "calc(" + prop.left + ' - ' + move.x + 'px)';
})
const top = computed(() => {
return "calc(" + prop.top + ' - ' + move.y + 'px)';
})
const mouseDown = (e: MouseEvent) => {
moveFlag.value = true;
x = e.clientX;
y = e.clientY;
}
const mouseMove = (e: MouseEvent) => {
if (moveFlag.value) {
move.x = temp.x + x - e.clientX;
move.y = temp.y + y - e.clientY;
}
};
const mouseup = (e: MouseEvent) => {
mouseMove(e);
moveFlag.value = false;
temp.x = move.x;
temp.y = move.y;
}
const keydown = (e) => { const keydown = (e) => {
if (e.keyCode == 27) { if (e.keyCode == 27) {
show.value = false; show.value = false;
@ -97,6 +135,7 @@ onMounted(() => {
onBeforeUnmount(() => { onBeforeUnmount(() => {
document.removeEventListener('keydown', keydown) document.removeEventListener('keydown', keydown)
}) })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.dialog { .dialog {
@ -106,8 +145,8 @@ onBeforeUnmount(() => {
background: rgba(0, 0, 0, 0.5); background: rgba(0, 0, 0, 0.5);
.content { .content {
top: v-bind('prop.top'); top: v-bind('top');
left: v-bind('prop.left'); left: v-bind('left');
right: v-bind('prop.right'); right: v-bind('prop.right');
bottom: v-bind('prop.bottom'); bottom: v-bind('prop.bottom');
padding: v-bind('prop.padding'); padding: v-bind('prop.padding');

4
src/components/equip-icon.vue

@ -12,7 +12,7 @@
import { useStore } from "vuex"; import { useStore } from "vuex";
import { reactive, onMounted, ref, computed } from "vue"; import { reactive, onMounted, ref, computed } from "vue";
import { useI18n } from "vue3-i18n"; import { useI18n } from "vue3-i18n";
import { qualitys, equips_icon_path, red_gif, colorful_gif, taigu_gif } from "@/config"; import { qualitys, equips_icon_path, equip_effect_gif, red_gif, colorful_gif, taigu_gif } from "@/config";
const { t } = useI18n(); const { t } = useI18n();
const { state, commit, dispatch } = useStore(); const { state, commit, dispatch } = useStore();
@ -22,6 +22,8 @@ const src = computed(() => {
return false; return false;
} }
const quality = prop.equip.quality; const quality = prop.equip.quality;
const key = quality.extraQuality || quality.quality;
return equip_effect_gif[key];
if (quality.extraQuality) { if (quality.extraQuality) {
return taigu_gif; return taigu_gif;
} }

7
src/config/assets.ts

@ -45,8 +45,15 @@ export const close_icon = root + '/img/close.png';
export const refresh_icon = root + '/img/re.png'; export const refresh_icon = root + '/img/re.png';
export const playerImg = root + '/img/player.png'; export const playerImg = root + '/img/player.png';
export const playerImg2 = root + '/img/player2.png'; export const playerImg2 = root + '/img/player2.png';
export const equip_effect_gif = {
unique: root + '/img/effect/unique.gif',
colorful: root + '/img/effect/colorful.gif',
yuangu: root + '/img/effect/yuangu.gif',
taigu: root + '/img/effect/taigu.gif',
};
export const red_gif = root + '/img/red.gif'; export const red_gif = root + '/img/red.gif';
export const colorful_gif = root + '/img/colorful.gif'; export const colorful_gif = root + '/img/colorful.gif';
export const yuangu_gif = root + '/img/yuangu.gif';
export const taigu_gif = root + '/img/taigu.gif'; export const taigu_gif = root + '/img/taigu.gif';
export const warning_icon = root + '/img/tip/warning.png'; export const warning_icon = root + '/img/tip/warning.png';

21
src/config/beings.ts

@ -10,6 +10,7 @@ import {
Equip, Equip,
piont_arrts, piont_arrts,
} from '@/config'; } from '@/config';
import { deepCopy } from '@/tool';
export const type_monster = 'monster'; export const type_monster = 'monster';
export const type_boss = 'boss'; export const type_boss = 'boss';
export const difficultys = ['normal', 'hard', 'pain', 'xiaomi', 'dami']; export const difficultys = ['normal', 'hard', 'pain', 'xiaomi', 'dami'];
@ -17,6 +18,13 @@ export const show_lv_df = ['normal', 'hard', 'pain'];
const base_attr_factor = { normal: 1, hard: 1.15, pain: 1.4, xiaomi: 2, dami: 3 }; const base_attr_factor = { normal: 1, hard: 1.15, pain: 1.4, xiaomi: 2, dami: 3 };
const extra_factor = { normal: 0, hard: 0, pain: 0, xiaomi: 1, dami: 2 }; const extra_factor = { normal: 0, hard: 0, pain: 0, xiaomi: 1, dami: 2 };
const rate_factor = { normal: 1, hard: 2, pain: 3, xiaomi: 4, dami: 5 }; const rate_factor = { normal: 1, hard: 2, pain: 3, xiaomi: 4, dami: 5 };
const monster_attr_max = {
crit: 120,
critDmg: 1000,
critAvoid: 100,
critDmgReduc: 500,
def: 800,
};
export class Attribute { export class Attribute {
lv: number = 1; lv: number = 1;
@ -112,12 +120,13 @@ export class Monster extends Attribute {
this.callCoins(11); this.callCoins(11);
this.callCrit(0.5); this.callCrit(0.5);
this.callDef(); this.callDef();
this.checkMax(layer);
this.equipRates = [0.2 * this.df, 0.08 * this.df, 0.03 * this.df]; this.equipRates = [0.2 * this.df, 0.08 * this.df, 0.03 * this.df];
this.extraRate = [0, 0]; this.extraRate = [0, 0];
} }
callAtk = (variable) => { callAtk = (variable) => {
this.baseAtk = Math.ceil(this.lv ** 2.1 * (Math.random() * 0.2 + variable) * this.df * this.lf); this.baseAtk = Math.ceil(this.lv ** 2.1 * (Math.random() * 0.2 + variable));
this.atk = this.baseAtk; this.atkPercent = (this.df * this.lf - 1) * 100;
}; };
callHp = (variable) => { callHp = (variable) => {
this.hp = Math.ceil(this.lv ** 2.1 * (Math.random() * 3 + variable) * this.df * this.lf); this.hp = Math.ceil(this.lv ** 2.1 * (Math.random() * 3 + variable) * this.df * this.lf);
@ -134,6 +143,13 @@ export class Monster extends Attribute {
this.critAvoid = Math.ceil((10 + 10 * (this.ef - 1) * this.lf) * factor); this.critAvoid = Math.ceil((10 + 10 * (this.ef - 1) * this.lf) * factor);
this.critDmgReduc = Math.ceil(100 + 100 * (this.ef - 1) * this.lf); this.critDmgReduc = Math.ceil(100 + 100 * (this.ef - 1) * this.lf);
}; };
checkMax = (layer) => {
const max = deepCopy(monster_attr_max);
max.def += layer;
Object.keys(max).forEach((key) => {
this[key] > max[key] && (this[key] = max[key]);
});
};
} }
export class BossMonster extends Monster { export class BossMonster extends Monster {
@ -144,6 +160,7 @@ export class BossMonster extends Monster {
this.callHp(31); this.callHp(31);
this.callCoins(30.5); this.callCoins(30.5);
this.callCrit(1); this.callCrit(1);
this.checkMax(layer);
const rf = rate_factor[difficulty]; const rf = rate_factor[difficulty];
this.equipRates = [0.25 - 0.05 * rf, 0.55 - 0.1 * rf, 0.15 + 0.1 * rf, 0.05 + 0.05 * rf]; this.equipRates = [0.25 - 0.05 * rf, 0.55 - 0.1 * rf, 0.15 + 0.1 * rf, 0.05 + 0.05 * rf];
let uniqueRate = 0.02 * ((rf - 1) * 5 + 1); let uniqueRate = 0.02 * ((rf - 1) * 5 + 1);

7
src/config/equips/armor.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean'; import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
import { qualitys, extra_entry_num } from './constant'; import { qualitys, extra_entry_num } from './constant';
const extraEntrys = ['atk', 'hp', 'def', 'defPercent', 'hpPercent', 'dmgReduc', 'critAvoid', 'critDmgReduc']; export const armorExtraEntrys = ['atk', 'hp', 'def', 'defPercent', 'hpPercent', 'dmgReduc', 'critAvoid', 'critDmgReduc'];
const coefficient = { shabby: 0.7, ordinary: 1, artifact: 1.5, epic: 1.8, unique: 2, colorful: 2 }; const coefficient = { shabby: 0.7, ordinary: 1, artifact: 1.5, epic: 1.8, unique: 2, colorful: 2 };
class ArmorCategory extends Categorys { class ArmorCategory extends Categorys {
@ -57,8 +57,7 @@ export const armorColorfulCategorys: Categorys[] = [
{ type: 'bloc', valCoefficient: 2.8 }, { type: 'bloc', valCoefficient: 2.8 },
{ type: 'def', valCoefficient: 1.0 }, { type: 'def', valCoefficient: 1.0 },
], ],
'LaoBuKePo', 'LaoBuKePo'
0.6
), ),
]; ];
@ -144,7 +143,7 @@ export const createarmor = (quality, lv, category, extraQuality) => {
}; };
export const armorExtraEntry = (quality, lv, extraQuality) => { export const armorExtraEntry = (quality, lv, extraQuality) => {
return createExtraEntry(quality, lv, extraEntrys, coefficient, extraQuality); return createExtraEntry(quality, lv, armorExtraEntrys, coefficient, extraQuality);
}; };
export const armorSamples = createSamples(armorCategorys, armorUniqueCategorys, armorColorfulCategorys, 'armor', coefficient); export const armorSamples = createSamples(armorCategorys, armorUniqueCategorys, armorColorfulCategorys, 'armor', coefficient);

4
src/config/equips/bracers.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean'; import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
import { qualitys, extra_entry_num } from './constant'; import { qualitys, extra_entry_num } from './constant';
const extraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def', 'atkPercent', 'defPercent', 'hpPercent']; export const bracersExtraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def', 'atkPercent', 'defPercent', 'hpPercent'];
const coefficient = { shabby: 0.6, ordinary: 0.9, artifact: 1.3, epic: 1.6, unique: 1.8, colorful: 1.8 }; const coefficient = { shabby: 0.6, ordinary: 0.9, artifact: 1.3, epic: 1.6, unique: 1.8, colorful: 1.8 };
@ -131,7 +131,7 @@ export const createbracers = (quality, lv, category, extraQuality): Equip => {
}; };
export const bracersExtraEntry = (quality, lv, extraQuality) => { export const bracersExtraEntry = (quality, lv, extraQuality) => {
return createExtraEntry(quality, lv, extraEntrys, coefficient, extraQuality); return createExtraEntry(quality, lv, bracersExtraEntrys, coefficient, extraQuality);
}; };
export const bracersSamples = createSamples(bracersCategorys, bracersUniqueCategorys, bracersColorfulCategorys, 'bracers', coefficient); export const bracersSamples = createSamples(bracersCategorys, bracersUniqueCategorys, bracersColorfulCategorys, 'bracers', coefficient);

6
src/config/equips/jewelry.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean'; import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
import { qualitys, extra_entry_num } from './constant'; import { qualitys, extra_entry_num } from './constant';
const extraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def', 'dmgPercent']; export const jewelryExtraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def', 'dmgPercent'];
const coefficient = { shabby: 0.6, ordinary: 0.9, artifact: 1.3, epic: 1.6, unique: 1.8, colorful: 1.8 }; const coefficient = { shabby: 0.6, ordinary: 0.9, artifact: 1.3, epic: 1.6, unique: 1.8, colorful: 1.8 };
@ -20,7 +20,7 @@ export const jewelryColorfulCategorys: Categorys[] = [
{ type: 'atk', valCoefficient: 0.6 }, { type: 'atk', valCoefficient: 0.6 },
], ],
'Vampire1', 'Vampire1',
0.99 0.95
), ),
new JewelryCategory( new JewelryCategory(
'shuzhuang', 'shuzhuang',
@ -144,7 +144,7 @@ export const createjewelry = (quality, lv, category, extraQuality): Equip => {
}; };
export const jewelryExtraEntry = (quality, lv, extraQuality) => { export const jewelryExtraEntry = (quality, lv, extraQuality) => {
return createExtraEntry(quality, lv, extraEntrys, coefficient, extraQuality); return createExtraEntry(quality, lv, jewelryExtraEntrys, coefficient, extraQuality);
}; };
export const jewelrySamples = createSamples(jewelryCategorys, jewelryUniqueCategorys, jewelryColorfulCategorys, 'jewelry', coefficient); export const jewelrySamples = createSamples(jewelryCategorys, jewelryUniqueCategorys, jewelryColorfulCategorys, 'jewelry', coefficient);

6
src/config/equips/neck.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean'; import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
import { qualitys, extra_entry_num } from './constant'; import { qualitys, extra_entry_num } from './constant';
const extraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def', 'bloc']; export const neckExtraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def', 'bloc'];
const coefficient = { shabby: 0.6, ordinary: 0.9, artifact: 1.3, epic: 1.6, unique: 1.8, colorful: 1.8 }; const coefficient = { shabby: 0.6, ordinary: 0.9, artifact: 1.3, epic: 1.6, unique: 1.8, colorful: 1.8 };
@ -20,7 +20,7 @@ export const neckColorfulCategorys: Categorys[] = [
{ type: 'hp', valCoefficient: 1.2 }, { type: 'hp', valCoefficient: 1.2 },
], ],
'XingYunShuZi', 'XingYunShuZi',
0.99 0.95
), ),
new NeckCategory( new NeckCategory(
'duanji', 'duanji',
@ -128,7 +128,7 @@ export const createneck = (quality, lv, category, extraQuality) => {
}; };
export const neckExtraEntry = (quality, lv, extraQuality) => { export const neckExtraEntry = (quality, lv, extraQuality) => {
return createExtraEntry(quality, lv, extraEntrys, coefficient, extraQuality); return createExtraEntry(quality, lv, neckExtraEntrys, coefficient, extraQuality);
}; };
export const neckSamples = createSamples(neckCategorys, neckUniqueCategorys, neckColorfulCategorys, 'neck', coefficient); export const neckSamples = createSamples(neckCategorys, neckUniqueCategorys, neckColorfulCategorys, 'neck', coefficient);

9
src/config/equips/pants.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean'; import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
import { qualitys, extra_entry_num } from './constant'; import { qualitys, extra_entry_num } from './constant';
const extraEntrys = ['atk', 'hp', 'def', 'defPercent', 'hpPercent', 'dmgReduc', 'critAvoid', 'critDmgReduc']; export const pantsExtraEntrys = ['atk', 'hp', 'def', 'defPercent', 'hpPercent', 'dmgReduc', 'critAvoid', 'critDmgReduc'];
const coefficient = { shabby: 0.7, ordinary: 1, artifact: 1.5, epic: 1.8, unique: 2, colorful: 2 }; const coefficient = { shabby: 0.7, ordinary: 1, artifact: 1.5, epic: 1.8, unique: 2, colorful: 2 };
class PantsCategory extends Categorys { class PantsCategory extends Categorys {
@ -18,7 +18,7 @@ export const pantsColorfulCategorys: Categorys[] = [
{ type: 'hp', valCoefficient: 1.4 }, { type: 'hp', valCoefficient: 1.4 },
], ],
'KongBuLingYu', 'KongBuLingYu',
0.98 0.9
), ),
new PantsCategory( new PantsCategory(
'baizhequn', 'baizhequn',
@ -28,7 +28,8 @@ export const pantsColorfulCategorys: Categorys[] = [
{ type: 'bloc', valCoefficient: 1.5 }, { type: 'bloc', valCoefficient: 1.5 },
{ type: 'hp', valCoefficient: 1.4 }, { type: 'hp', valCoefficient: 1.4 },
], ],
'FuRenBiHu' 'FuRenBiHu',
0.6
), ),
new PantsCategory( new PantsCategory(
'yulan', 'yulan',
@ -124,7 +125,7 @@ export const createpants = (quality, lv, category, extraQuality) => {
}; };
export const pantsExtraEntry = (quality, lv, extraQuality) => { export const pantsExtraEntry = (quality, lv, extraQuality) => {
return createExtraEntry(quality, lv, extraEntrys, coefficient, extraQuality); return createExtraEntry(quality, lv, pantsExtraEntrys, coefficient, extraQuality);
}; };
export const pantsSamples = createSamples(pantsCategorys, pantsUniqueCategorys, pantsColorfulCategorys, 'pants', coefficient); export const pantsSamples = createSamples(pantsCategorys, pantsUniqueCategorys, pantsColorfulCategorys, 'pants', coefficient);

18
src/config/equips/ring.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean'; import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
import { qualitys, extra_entry_num } from './constant'; import { qualitys, extra_entry_num } from './constant';
const extraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def']; export const ringExtraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def'];
const coefficient = { shabby: 0.6, ordinary: 0.9, artifact: 1.3, epic: 1.6, unique: 1.8, colorful: 2 }; const coefficient = { shabby: 0.6, ordinary: 0.9, artifact: 1.3, epic: 1.6, unique: 1.8, colorful: 2 };
@ -20,7 +20,7 @@ export const ringColorfulCategorys: Categorys[] = [
{ type: 'atk', valCoefficient: 1 }, { type: 'atk', valCoefficient: 1 },
], ],
'SLWX,JinGangZhuo', 'SLWX,JinGangZhuo',
0.9 0.8
), ),
new RingCategory( new RingCategory(
'pojie', 'pojie',
@ -61,7 +61,17 @@ export const ringColorfulCategorys: Categorys[] = [
{ type: 'atk', valCoefficient: 1.5 }, { type: 'atk', valCoefficient: 1.5 },
], ],
'TongJueFanJi', 'TongJueFanJi',
0.5 0.6
),
new RingCategory(
'zuanjie',
'ring/黑白钻戒.png',
[
{ type: 'atk', valCoefficient: 1 },
{ type: 'def', valCoefficient: 0.8 },
{ type: 'hp', valCoefficient: 1.5 },
],
'JainYing'
), ),
]; ];
@ -124,7 +134,7 @@ export const createring = (quality, lv, category, extraQuality) => {
}; };
export const ringExtraEntry = (quality, lv, extraQuality) => { export const ringExtraEntry = (quality, lv, extraQuality) => {
return createExtraEntry(quality, lv, extraEntrys, coefficient, extraQuality); return createExtraEntry(quality, lv, ringExtraEntrys, coefficient, extraQuality);
}; };
export const ringSamples = createSamples(ringCategorys, ringUniqueCategorys, ringColorfulCategorys, 'ring', coefficient); export const ringSamples = createSamples(ringCategorys, ringUniqueCategorys, ringColorfulCategorys, 'ring', coefficient);

4
src/config/equips/shoes.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean'; import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
import { qualitys, extra_entry_num } from './constant'; import { qualitys, extra_entry_num } from './constant';
const extraEntrys = ['atk', 'hp', 'def', 'moveSpeed', 'defPercent', 'hpPercent']; export const shoesExtraEntrys = ['atk', 'hp', 'def', 'moveSpeed', 'defPercent', 'hpPercent'];
const coefficient = { shabby: 0.7, ordinary: 1, artifact: 1.3, epic: 1.5, unique: 1.8, colorful: 1.8 }; const coefficient = { shabby: 0.7, ordinary: 1, artifact: 1.3, epic: 1.5, unique: 1.8, colorful: 1.8 };
class ShoesCategory extends Categorys { class ShoesCategory extends Categorys {
@ -90,7 +90,7 @@ export const createshoes = (quality, lv, category, extraQuality) => {
}; };
export const shoesExtraEntry = (quality, lv, extraQuality) => { export const shoesExtraEntry = (quality, lv, extraQuality) => {
return createExtraEntry(quality, lv, extraEntrys, coefficient, extraQuality); return createExtraEntry(quality, lv, shoesExtraEntrys, coefficient, extraQuality);
}; };
export const shoesSamples = createSamples(shoesCategorys, shoesUniqueCategorys, shoesColorfulCategorys, 'shoes', coefficient); export const shoesSamples = createSamples(shoesCategorys, shoesUniqueCategorys, shoesColorfulCategorys, 'shoes', coefficient);

44
src/config/equips/weapon.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean'; import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
import { qualitys, extra_entry_num } from './constant'; import { qualitys, extra_entry_num } from './constant';
const extraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def', 'atkPercent', 'defPercent', 'hpPercent', 'dmgPercent']; export const weaponExtraEntrys = ['atk', 'crit', 'critDmg', 'hp', 'def', 'atkPercent', 'defPercent', 'hpPercent', 'dmgPercent'];
const coefficient = { shabby: 0.7, ordinary: 1, artifact: 1.5, epic: 1.8, unique: 2, colorful: 2 }; const coefficient = { shabby: 0.7, ordinary: 1, artifact: 1.5, epic: 1.8, unique: 2, colorful: 2 };
class WeaponCategory extends Categorys { class WeaponCategory extends Categorys {
@ -18,7 +18,8 @@ export const weaponColorfulCategorys: Categorys[] = [
{ type: 'crit', valCoefficient: 1.5 }, { type: 'crit', valCoefficient: 1.5 },
{ type: 'critDmg', valCoefficient: 1.3 }, { type: 'critDmg', valCoefficient: 1.3 },
], ],
'IceBlade,SeeRed' 'IceBlade,QiuAi',
0.99
), ),
new WeaponCategory( new WeaponCategory(
'qici', 'qici',
@ -69,7 +70,7 @@ export const weaponColorfulCategorys: Categorys[] = [
{ type: 'hp', valCoefficient: 1.6 }, { type: 'hp', valCoefficient: 1.6 },
], ],
'ShiJiuCha', 'ShiJiuCha',
0.98 0.9
), ),
new WeaponCategory('datiecheng', 'weapon/大铁城.png', [ new WeaponCategory('datiecheng', 'weapon/大铁城.png', [
{ type: 'atk', valCoefficient: 4.2 }, { type: 'atk', valCoefficient: 4.2 },
@ -84,7 +85,7 @@ export const weaponColorfulCategorys: Categorys[] = [
{ type: 'critDmg', valCoefficient: 1.5 }, { type: 'critDmg', valCoefficient: 1.5 },
], ],
'JianQiDongSiFang', 'JianQiDongSiFang',
0.8 0.5
), ),
new WeaponCategory( new WeaponCategory(
'baoxue', 'baoxue',
@ -104,8 +105,41 @@ export const weaponColorfulCategorys: Categorys[] = [
{ type: 'crit', valCoefficient: 1.5 }, { type: 'crit', valCoefficient: 1.5 },
], ],
'BoDongShaYi', 'BoDongShaYi',
0.5
),
new WeaponCategory(
'limaoliren',
'weapon/狸猫利刃.png',
[
{ type: 'atk', valCoefficient: 1.8 },
{ type: 'crit', valCoefficient: 1.5 },
{ type: 'critDmg', valCoefficient: 1.3 },
],
'LiRenZhou,DaoRenFengBao',
0.95
),
new WeaponCategory(
'liuying',
'weapon/流萤.png',
[
{ type: 'atk', valCoefficient: 1.8 },
{ type: 'crit', valCoefficient: 1.5 },
{ type: 'hp', valCoefficient: 1.3 },
],
'LiuYing,SeeRed',
0.9 0.9
), ),
new WeaponCategory(
'chulian',
'weapon/初恋.png',
[
{ type: 'atk', valCoefficient: 0.001 },
{ type: 'def', valCoefficient: 0.001 },
{ type: 'hp', valCoefficient: 0.001 },
],
'ShiLian',
0.9999
),
]; ];
export const weaponUniqueCategorys: WeaponCategory[] = [ export const weaponUniqueCategorys: WeaponCategory[] = [
@ -198,7 +232,7 @@ export const createweapon = (quality, lv, category, extraQuality) => {
}; };
export const weaponExtraEntry = (quality, lv, extraQuality) => { export const weaponExtraEntry = (quality, lv, extraQuality) => {
return createExtraEntry(quality, lv, extraEntrys, coefficient, extraQuality); return createExtraEntry(quality, lv, weaponExtraEntrys, coefficient, extraQuality);
}; };
export const weaponSamples = createSamples(weaponCategorys, weaponUniqueCategorys, weaponColorfulCategorys, 'weapon', coefficient); export const weaponSamples = createSamples(weaponCategorys, weaponUniqueCategorys, weaponColorfulCategorys, 'weapon', coefficient);

8
src/config/i18n/zh/euips.ts

@ -22,16 +22,16 @@ export const weapon = {
qingguang: ['青光', '你活着看到的最后东西是一道青光。'], qingguang: ['青光', '你活着看到的最后东西是一道青光。'],
baoxue: ['暴雪', '铁匠将交付时间推延了二十四次。'], baoxue: ['暴雪', '铁匠将交付时间推延了二十四次。'],
shayi: ['杀意', '仇敌,莫让吾听闻汝名。'], shayi: ['杀意', '仇敌,莫让吾听闻汝名。'],
chengba: ['称霸', '霸者不藏其锋,以天地为鞘。'], limaoliren: ['狸猫利刃', '比时光还要无情。'],
liuying: ['流萤', '若不困顿於林野,必凄惶於道路。'],
chulian: ['初恋', '我的初恋在月亮之上。 ----八戒'], chulian: ['初恋', '我的初恋在月亮之上。 ----八戒'],
chengba: ['称霸', '霸者不藏其锋,以天地为鞘。'],
duwu: ['黩武', '若未用够最后一丝力气,如何能甘心。'], duwu: ['黩武', '若未用够最后一丝力气,如何能甘心。'],
emeng: ['噩梦', '我最近的噩梦,都和一只猴子有关...... ----增长天王'], emeng: ['噩梦', '我最近的噩梦,都和一只猴子有关...... ----增长天王'],
heifeng: ['黑风', '这把斧子一直不肯相信它的主人已经死去。'], heifeng: ['黑风', '这把斧子一直不肯相信它的主人已经死去。'],
shishen: ['弑神', '从斩妖台流落到地府的禁忌之物,慎用。'], shishen: ['弑神', '从斩妖台流落到地府的禁忌之物,慎用。'],
jlys: ['九灵·元圣', '当坐骑总比没命了强。'], jlys: ['九灵·元圣', '当坐骑总比没命了强。'],
llzx: ['冷龙之心', '长九尺三寸,苍青之气盘绕九十三匝。'], llzx: ['冷龙之心', '长九尺三寸,苍青之气盘绕九十三匝。'],
lmlr: ['狸猫利刃', '比时光还要无情。'],
liuying: ['流萤', '若不困顿於林野,必凄惶於道路。'],
liubuxiang: ['六不像', '汝若身披业火,当一念不起,六欲尽灭。'], liubuxiang: ['六不像', '汝若身披业火,当一念不起,六欲尽灭。'],
longxian: ['龙衔', '天之西北有幽冥无日之国,有龙衔烛而照之也。'], longxian: ['龙衔', '天之西北有幽冥无日之国,有龙衔烛而照之也。'],
siyu: ['私语', '你爱的不是我,而是灵山项上那个在绚烂中毁灭的金蝉子。 ----唐僧'], siyu: ['私语', '你爱的不是我,而是灵山项上那个在绚烂中毁灭的金蝉子。 ----唐僧'],
@ -131,6 +131,7 @@ export const ring = {
mantanghong: ['满堂红', '青灯知有喜,花发满堂红。'], mantanghong: ['满堂红', '青灯知有喜,花发满堂红。'],
hanba: ['旱魃', '国师与旱魃斗法七日,始有甘霖降车迟国。'], hanba: ['旱魃', '国师与旱魃斗法七日,始有甘霖降车迟国。'],
yaozuzhili: ['妖族之力', '妖王的荣耀。'], yaozuzhili: ['妖族之力', '妖王的荣耀。'],
zuanjie: ['黑白钻戒', '钻石不是透明的吗?'],
siyan: ['四眼', '我花了十万年才长出一只眼睛。'], siyan: ['四眼', '我花了十万年才长出一只眼睛。'],
taiyang: ['太阳真火戒', '这里面有太阳的光辉。'], taiyang: ['太阳真火戒', '这里面有太阳的光辉。'],
taiyin: ['太阴紫电戒', '这里面有月亮的锋芒。'], taiyin: ['太阴紫电戒', '这里面有月亮的锋芒。'],
@ -148,7 +149,6 @@ export const ring = {
jinjiezhi: ['金戒指', '这下你应该满意了吧!'], jinjiezhi: ['金戒指', '这下你应该满意了吧!'],
wangyue: ['望月', '犀牛望月,其影于角。燃其犀角,可见冥界诸灵。'], wangyue: ['望月', '犀牛望月,其影于角。燃其犀角,可见冥界诸灵。'],
wumingjie: ['无名戒', '某个在孽镜台被吃掉的倒霉鬼的遗物。'], wumingjie: ['无名戒', '某个在孽镜台被吃掉的倒霉鬼的遗物。'],
death: ['死神名片戒指', '死神名片戒指'], death: ['死神名片戒指', '死神名片戒指'],
realFurryRing: ['真·毛毛指环', '死神名片戒指'], realFurryRing: ['真·毛毛指环', '死神名片戒指'],
pioneer: ['先驱者戒指', '先驱者戒指'], pioneer: ['先驱者戒指', '先驱者戒指'],

17
src/config/i18n/zh/index.ts

@ -37,6 +37,7 @@ export default class Zh {
reborn = ['转生次数', '玩家当前等级与转生次数', '成功挑战首领时会提升等级', '超过30级时可以转生获取更强力的初始属性']; reborn = ['转生次数', '玩家当前等级与转生次数', '成功挑战首领时会提升等级', '超过30级时可以转生获取更强力的初始属性'];
hp = ['生命值', '当前生命值/最大生命值', '每秒会回复2%的最大生命值']; hp = ['生命值', '当前生命值/最大生命值', '每秒会回复2%的最大生命值'];
hpPercent = ['生命加成', '角色生命值百分比']; hpPercent = ['生命加成', '角色生命值百分比'];
baseAtk = ['基础攻击', '角色基础攻击力'];
atk = ['攻击力', '角色攻击力']; atk = ['攻击力', '角色攻击力'];
atkPercent = ['攻击加成', '角色攻击力百分比']; atkPercent = ['攻击加成', '角色攻击力百分比'];
crit = ['暴击率', '角色暴击率']; crit = ['暴击率', '角色暴击率'];
@ -73,9 +74,18 @@ export default class Zh {
'强化等级高于5时强化失败可能会降低强化等级', '强化等级高于5时强化失败可能会降低强化等级',
'强化概率:6级80%,7级65%,8级45%,9级30%,10级以后20%', '强化概率:6级80%,7级65%,8级45%,9级30%,10级以后20%',
]; ];
reforge = '重铸'; reforge = {
reforgeAction = ['点击花费${0}金币重铸', '恢复原词条', '保留新词条']; title: '重铸',
reforgeDesc = ['点击任意词条花费金币重铸装备所有词条', '重铸时词条颜色与百分比值显示了该词条的等级', '重铸后可选择保留原词条或新词条']; desc: [
'重铸说明',
'点击任意词条花费金币重铸装备所有词条',
'重铸时词条颜色与百分比值显示了该词条的等级',
'重铸后可选择保留原词条或新词条',
'自动重铸的费用是手动重铸的两倍',
],
action: ['点击花费${0}金币重铸', '恢复原词条', '保留新词条'],
atuo: ['重铸目标', '自动重铸', '自动重铸中', '中断自动重铸'],
};
lock = '锁定'; lock = '锁定';
unlock = '解锁'; unlock = '解锁';
sell = '出售'; sell = '出售';
@ -172,5 +182,4 @@ export default class Zh {
login = ['登录', '用户名', '密码', '登录/注册', '请输入用户名', '请输入密码', '登录成功']; login = ['登录', '用户名', '密码', '登录/注册', '请输入用户名', '请输入密码', '登录成功'];
setting = setting; setting = setting;
} }

24
src/config/i18n/zh/skills.ts

@ -6,16 +6,30 @@ export const control = ['${0}被控制${1}回合', '控制失败', '受${0}影
export const crit = ['触发了暴击']; export const crit = ['触发了暴击'];
export const attack = ['普通攻击', '伤害倍率100%', '${0}使用了${1}${4},对${2}造成了${3}点伤害']; export const attack = ['普通攻击', '伤害倍率100%', '${0}使用了${1}${4},对${2}造成了${3}点伤害'];
export const qiuai = ['求爱', '攻击技能,技能伤害倍率${0}%'];
export const iceBlade = ['冰刃', '暴击时有${0}几率释放冰线冲击,附加${1}%攻击力的伤害和${2}回合冰冻效果。', '触发了冰刃,附加${0}点伤害,冰冻${1}${2}回合']; export const iceBlade = ['冰刃', '暴击时有${0}几率释放冰线冲击,附加${1}%攻击力的伤害和${2}回合冰冻效果。', '触发了冰刃,附加${0}点伤害,冰冻${1}${2}回合'];
export const seeRed = ['见红', '对目标施加${0}层流血,持续${1}回合。', '冷却${0}回合。'];
export const qici = ['鳍刺', '攻击时有${0}%概率对目标施加${1}层流血,持续${2}回合。', '触发鳍刺,对${0}施加${1}层流血,持续${2}回合。']; export const qici = ['鳍刺', '攻击时有${0}%概率对目标施加${1}层流血,持续${2}回合。', '触发鳍刺,对${0}施加${1}层流血,持续${2}回合。'];
export const baonue = ['暴虐', '攻击时有${0}%概率使目标筋脉爆裂,施加满层流血,持续${1}回合。', '触发暴虐,对${0}施加满层流血,持续${1}回合。']; export const baonue = ['暴虐', '攻击时有${0}%概率使目标筋脉爆裂,施加满层流血,持续${1}回合。', '触发暴虐,对${0}施加满层流血,持续${1}回合。'];
export const zhaxin = ['扎心', '获得${0}%暴击伤害加成。']; export const zhaxin = ['扎心', '获得${0}%暴击伤害加成。'];
export const aozhidu = ['鳌之毒', '攻击时使目标进入溃烂状态${0}回合。', '触发鳌之毒,${0}进入溃烂状态${1}回合']; export const aozhidu = ['鳌之毒', '攻击时使目标进入溃烂状态${0}回合。', '触发鳌之毒,${0}进入溃烂状态${1}回合,当前溃烂层数${2}。'];
export const shijiucha = ['十九叉', '每九次攻击获得连刺状态,使得第十次攻击附加${0}倍伤害。', '${0}触发十九叉连刺,附加${0}点伤害']; export const shijiucha = ['十九叉', '每九次攻击获得连刺状态,使得第十次攻击附加${0}倍伤害。', '${0}触发十九叉连刺,附加${1}点伤害'];
export const jianqidongsifang = ['剑气动四方', '攻击造成的伤害增加${0}%,但被攻击时受到的伤害也增加${1}%。']; export const jianqidongsifang = ['剑气动四方', '攻击造成的伤害增加${0}%,但被攻击时受到的伤害也增加${1}%。'];
export const baofengxue = ['暴风雪', '使目标进入冰冻状态${0}回合,冷却${1}回合。对boss只有${2}%成功率。']; export const baofengxue = ['暴风雪', '使目标进入冰冻状态${0}回合,冷却${1}回合。对boss只有${2}%成功率。'];
export const bodongshayi = ['波动杀意', '每层杀意提升的基础攻击力提高到${0}%,并且杀意最多可以叠加${1}层']; export const bodongshayi = ['波动杀意', '每层杀意提升的基础攻击力提高到${0}%,并且杀意最多可以叠加${1}层'];
export const lirenzhou = [
'利刃咒',
'攻击时随机召唤${0}-${1}把刀刃环身,最多可积攒${2}把刀刃,每把提供${3}%伤害加成。',
'召唤${0}把刀刃,当前环身刀刃数量:${1}',
];
export const daorenfengbao = ['刀刃风暴', '当刀刃积攒到上限时,将所有刀刃刺向目标,每把刀刃提供${0}%的技能伤害倍率。'];
export const liuying = [
'流萤',
'攻击目标时有${0}%概率向目标附加${1}层荧光,达到${2}层后消耗所有荧光层数对目标造成${3}%攻击力的附加伤害,并附加${4}回合感电。',
'触发流萤,向${0}附加${1}层荧光,当前荧光层数:${2}。',
'消耗所有荧光层数,对${0}造成${1}点伤害,并附加${2}回合感电。',
];
export const seeRed = ['见红', '对目标施加${0}层流血,持续${1}回合。', '冷却${0}回合。'];
export const shilian = ['失恋', '受到的伤害增加${0}%。'];
export const bhxdjc = [ export const bhxdjc = [
'百花羞的矜持', '百花羞的矜持',
@ -55,6 +69,7 @@ export const tongjuefanji = [
'触发反击,对${0}造成${1}点伤害。', '触发反击,对${0}造成${1}点伤害。',
'${0}被控制,无法释放技能。', '${0}被控制,无法释放技能。',
]; ];
export const jianying = ['坚硬', '获得${0}%伤害减免。'];
export const fate = ['化缘', '副本掉落金币奖励提高${0}%。']; export const fate = ['化缘', '副本掉落金币奖励提高${0}%。'];
export const vampire = ['汲血', '生命偷取${0}%。', '触发汲血,偷取${0}点生命']; export const vampire = ['汲血', '生命偷取${0}%。', '触发汲血,偷取${0}点生命'];
@ -64,7 +79,7 @@ export const liulipan = ['琉璃盘', '使用后产生黑红内丹,临时提高$
export const JHSY = ['镜花水月', '被攻击时有${0}%概率反弹${1}%所受伤害。', '${0}触发了镜花水月,反弹${1}点伤害。']; export const JHSY = ['镜花水月', '被攻击时有${0}%概率反弹${1}%所受伤害。', '${0}触发了镜花水月,反弹${1}点伤害。'];
export const lizhao = ['利爪', '攻击时有${0}%概率增加${1}%技能伤害倍率。', '触发利爪,增加${0}%技能伤害倍率。']; export const lizhao = ['利爪', '攻击时有${0}%概率增加${1}%技能伤害倍率。', '触发利爪,增加${0}%技能伤害倍率。'];
export const judu = ['剧毒', '被攻击时有${0}%概率喷出毒液,使目标进入溃烂状态${1}回合。', '触发剧毒,${0}进入溃烂状态${1}回合。']; export const judu = ['剧毒', '被攻击时有${0}%概率喷出毒液,使目标进入溃烂状态${1}回合。', '触发剧毒,${0}进入溃烂状态${1}回合,当前溃烂层数${2}。'];
export const xianglong = ['降龙', '攻击时,若生命值低于${0}%,增加${1}%伤害加成。', '触发降龙,增加${1}%伤害加成。']; export const xianglong = ['降龙', '攻击时,若生命值低于${0}%,增加${1}%伤害加成。', '触发降龙,增加${1}%伤害加成。'];
export const dalidan = ['大力丹', '提升${0}%攻击加成。']; export const dalidan = ['大力丹', '提升${0}%攻击加成。'];
@ -84,6 +99,7 @@ export const defbuff = ['提升${0}点防御。', '提升${0}%防御。', '获
export const blocbuff = ['提升${0}点格挡。', '提升${0}%格挡。']; export const blocbuff = ['提升${0}点格挡。', '提升${0}%格挡。'];
export const kuilan = '防御降低${0}%。'; export const kuilan = '防御降低${0}%。';
export const liuxue = ['每回合流失%{0}当前生命值', '受(${0}层)流血影响,${1}损失${2}生命值。']; export const liuxue = ['每回合流失%{0}当前生命值', '受(${0}层)流血影响,${1}损失${2}生命值。'];
export const gandian = '受到伤害增加${0}%。';
//未实装,待补充 //未实装,待补充

6
src/config/skill/armor.ts

@ -8,7 +8,7 @@ const { t } = i18n;
export class BHXDJC extends PrePassiveSkill { export class BHXDJC extends PrePassiveSkill {
name: string = 'bhxdjc'; name: string = 'bhxdjc';
hpPercent: number = 60; hpPercent: number = 60;
shieldPercentOfHp: number = 80; shieldPercentOfHp: number = 100;
cd: number = 999; cd: number = 999;
desc(): string { desc(): string {
return replace(t('skill.bhxdjc.1'), [this.hpPercent, this.shieldPercentOfHp]); return replace(t('skill.bhxdjc.1'), [this.hpPercent, this.shieldPercentOfHp]);
@ -41,8 +41,8 @@ export class TieBi extends BuffSkill {
//督军的潜能 //督军的潜能
export class DuJunQianNeng extends PrePassiveSkill { export class DuJunQianNeng extends PrePassiveSkill {
name: string = 'dujunqianneng'; name: string = 'dujunqianneng';
hpPercent: number = 50; hpPercent: number = 20;
dmgReduc: number = 40; dmgReduc: number = 50;
desc(): string { desc(): string {
return replace(t('skill.dujunqianneng.1'), [this.hpPercent, this.dmgReduc]); return replace(t('skill.dujunqianneng.1'), [this.hpPercent, this.dmgReduc]);
} }

4
src/config/skill/base.ts

@ -164,12 +164,12 @@ export class Attack extends ActionSkill {
order: number = 999; order: number = 999;
name: string = 'attack'; name: string = 'attack';
cd: number = 1; cd: number = 1;
precent: number = 100; percent: number = 100;
desc(): string { desc(): string {
return t('skill.attack.1'); return t('skill.attack.1');
} }
use(owner: BattleRole, target: BattleRole) { use(owner: BattleRole, target: BattleRole) {
owner.skillPercent += this.precent; owner.skillPercent += this.percent;
owner.callDmg(target); owner.callDmg(target);
let critLog = owner.crit ? t('skill.crit.0') : ''; let critLog = owner.crit ? t('skill.crit.0') : '';
if (owner.dmg) { if (owner.dmg) {

4
src/config/skill/bracers.ts

@ -47,13 +47,13 @@ export class JuDu extends CounterSkill {
takeEffect(owner: BattleRole, target: BattleRole): void { takeEffect(owner: BattleRole, target: BattleRole): void {
const judu = new KuiLan('kuilan', this.last); const judu = new KuiLan('kuilan', this.last);
target.putBuff(judu); target.putBuff(judu);
owner.gainLog(replace(t('skill.judu.2'), [t(target.type), this.last])); owner.gainLog(replace(t('skill.judu.2'), [t(target.type), this.last, judu.layer]));
} }
} }
//利爪 //利爪
export class LiZhao extends PrePassiveSkill { export class LiZhao extends PrePassiveSkill {
name: string = 'lizhao'; name: string = 'lizhao';
rate: number = 30; rate: number = 50;
percent: number = 100; percent: number = 100;
desc(): string { desc(): string {
return replace(t('skill.lizhao.1'), [this.rate, this.percent]); return replace(t('skill.lizhao.1'), [this.rate, this.percent]);

10
src/config/skill/buff.ts

@ -157,13 +157,13 @@ export class ControlBuff extends AttackBuff {
//溃烂 //溃烂
export class KuiLan extends PercentAttackedBuff { export class KuiLan extends PercentAttackedBuff {
constructor(name: string, last: number) { constructor(name: string, last: number) {
super(name, 50, last); super(name, 10, last, 6);
} }
desc(): string { desc(): string {
return replace(t('skill.kongbulingyu.2'), [this.percent]); return replace(t('skill.kongbulingyu.2'), [this.percent]);
} }
takeEffect(owner: BattleRole): void { takeEffect(owner: BattleRole): void {
owner.extraAttr.def += owner.attr.def * (this.percent / -100); owner.extraAttr.def += owner.attr.def * ((this.percent * this.layer) / -100);
} }
} }
//恐怖领域 //恐怖领域
@ -202,3 +202,9 @@ export class LiuXue extends AttackBuff {
owner.debuffLog(replace(t('skill.liuxue.1'), [this.layer, t(owner.type), dmg])); owner.debuffLog(replace(t('skill.liuxue.1'), [this.layer, t(owner.type), dmg]));
} }
} }
//感电
export class GanDian extends DmgReducBuff {
constructor(last: number) {
super('gandian', -50, last);
}
}

8
src/config/skill/jewelry.ts

@ -1,6 +1,6 @@
import { CounterSkill, Attack, Control, GainsSkill, SufPassiveSkill, Vampire } from './base'; import { CounterSkill, Attack, Control, GainsSkill, SufPassiveSkill, Vampire } from './base';
import i18n from '../i18n'; import i18n from '../i18n';
import { BattleRole, replace } from '@/tool'; import { BattleRole, callReducPercent, replace } from '@/tool';
const { t } = i18n; const { t } = i18n;
//化缘 //化缘
@ -32,7 +32,7 @@ export class Prototype extends Control {
//暴击恐惧 //暴击恐惧
export class CritFear extends SufPassiveSkill { export class CritFear extends SufPassiveSkill {
name: string = 'critFear'; name: string = 'critFear';
percent: number = 200; percent: number = 1000;
desc(): string { desc(): string {
return replace(t('skill.critFear.1'), [this.percent]); return replace(t('skill.critFear.1'), [this.percent]);
} }
@ -63,7 +63,7 @@ export class Liulipan extends Attack {
//镜花水月 //镜花水月
export class JHSY extends CounterSkill { export class JHSY extends CounterSkill {
name: string = 'JHSY'; name: string = 'JHSY';
rate: number = 40; rate: number = 15;
percent: number = 100; percent: number = 100;
desc(): string { desc(): string {
return replace(t('skill.JHSY.1'), [this.rate, this.percent, this.cd]); return replace(t('skill.JHSY.1'), [this.rate, this.percent, this.cd]);
@ -72,6 +72,8 @@ export class JHSY extends CounterSkill {
return Math.random() < this.rate / 100; return Math.random() < this.rate / 100;
} }
takeEffect(owner: BattleRole, target: BattleRole): void { takeEffect(owner: BattleRole, target: BattleRole): void {
// const reducPercent = callReducPercent(owner.attr.def + owner.extraAttr.def, owner.attr.lv); //目标防御提供的减伤比例
// const reflected = Math.ceil(((target.baseDmg * this.percent) / 100) * (1 - reducPercent));
const reflected = Math.ceil((target.baseDmg * this.percent) / 100); const reflected = Math.ceil((target.baseDmg * this.percent) / 100);
target.addHp(-1 * reflected); target.addHp(-1 * reflected);
const log = replace(t('skill.JHSY.2'), [t(owner.type), reflected]); const log = replace(t('skill.JHSY.2'), [t(owner.type), reflected]);

2
src/config/skill/neck.ts

@ -8,7 +8,7 @@ const t = createt('');
//断 //断
export class Duan extends SufPassiveSkill { export class Duan extends SufPassiveSkill {
name: string = 'duan'; name: string = 'duan';
hpPercent: number = 20; hpPercent: number = 15;
order: number = 999; order: number = 999;
dmg: number = 999999999; dmg: number = 999999999;
desc(): string { desc(): string {

2
src/config/skill/pants.ts

@ -7,7 +7,7 @@ const { t } = i18n;
//恐怖领域 //恐怖领域
export class KongBuLingYu extends StartPassiveSkill { export class KongBuLingYu extends StartPassiveSkill {
name: string = 'kongbulingyu'; name: string = 'kongbulingyu';
defReduc: number = 500; defReduc: number = 600;
desc(): string { desc(): string {
return replace(t('skill.kongbulingyu.1'), [this.defReduc]); return replace(t('skill.kongbulingyu.1'), [this.defReduc]);
} }

17
src/config/skill/ring.ts

@ -1,7 +1,7 @@
import { SufPassiveSkill, PrePassiveSkill, PassiveSkill, CounterSkill } from './base'; import { SufPassiveSkill, PrePassiveSkill, PassiveSkill, CounterSkill, StartPassiveSkill } from './base';
import i18n from '../i18n'; import i18n from '../i18n';
import { BattleRole, callDmgPercent, replace } from '@/tool'; import { BattleRole, callDmgPercent, replace } from '@/tool';
import { ControlBuff, CritDmgBuff, CritDmgReducBuff } from './buff'; import { ControlBuff, CritDmgBuff, CritDmgReducBuff, DmgReducBuff } from './buff';
const { t } = i18n; const { t } = i18n;
//森罗万象 //森罗万象
@ -32,7 +32,7 @@ export class JinGangZhuo extends SufPassiveSkill {
return replace(t('skill.jinggangzhuo.1'), [this.rate, this.last]); return replace(t('skill.jinggangzhuo.1'), [this.rate, this.last]);
} }
trigger(owner: BattleRole, target: BattleRole): boolean { trigger(owner: BattleRole, target: BattleRole): boolean {
return Math.random() < this.rate / 100; return owner.dmg > 0 && Math.random() < this.rate / 100;
} }
takeEffect(owner: BattleRole, target: BattleRole): void { takeEffect(owner: BattleRole, target: BattleRole): void {
target.putBuff(new ControlBuff(this.name, this.last)); target.putBuff(new ControlBuff(this.name, this.last));
@ -122,3 +122,14 @@ export class TongJueFanJi extends CounterSkill {
owner.atteckLog(replace(t('skill.tongjuefanji.2'), [t(target.type), owner.dmg])); owner.atteckLog(replace(t('skill.tongjuefanji.2'), [t(target.type), owner.dmg]));
} }
} }
//坚硬
export class JainYing extends StartPassiveSkill {
name: string = 'jianying';
dmgReduc: number = 10;
desc(): string {
return replace(t('skill.jianying.1'), [this.dmgReduc]);
}
takeEffect(owner: BattleRole, target: BattleRole): void {
owner.putBuff(new DmgReducBuff(this.name, this.dmgReduc, 9999));
}
}

110
src/config/skill/weapon.ts

@ -1,14 +1,14 @@
import { ActionSkill, Attack, Control, PassiveSkill, PrePassiveSkill, StartPassiveSkill, SufPassiveSkill } from './base'; import { ActionSkill, Attack, Control, PrePassiveSkill, StartPassiveSkill, SufPassiveSkill } from './base';
import { createt } from '../i18n'; import { createt } from '../i18n';
import { replace, BattleRole } from '@/tool'; import { replace, BattleRole } from '@/tool';
import { BaseAtkPercentBuff, ControlBuff, CritDmgBuff, DmgPercentBuff, DmgReducBuff, KuiLan, LiuXue } from './buff'; import { ControlBuff, CritDmgBuff, DmgPercentBuff, DmgReducBuff, GanDian, KuiLan, LiuXue } from './buff';
const t = createt(''); const t = createt('');
const st = createt('skill.'); const st = createt('skill.');
//冰刃 //冰刃
export class IceBlade extends SufPassiveSkill { export class IceBlade extends SufPassiveSkill {
name: string = 'iceBlade'; name: string = 'iceBlade';
rate: number = 10; rate: number = 15;
percent: number = 1000; percent: number = 1000;
last: number = 1; last: number = 1;
desc(): string { desc(): string {
@ -24,6 +24,15 @@ export class IceBlade extends SufPassiveSkill {
owner.extraDmgLog(replace(st('iceBlade.2'), [additional, t(target.type), this.last])); owner.extraDmgLog(replace(st('iceBlade.2'), [additional, t(target.type), this.last]));
} }
} }
// 求爱
export class QiuAi extends Attack {
name: string = 'qiuai';
order: number = 998;
percent: number = 240;
desc(): string {
return replace(st('qiuai.1'), [this.percent]);
}
}
//见红 //见红
export class SeeRed extends ActionSkill { export class SeeRed extends ActionSkill {
name: string = 'seeRed'; name: string = 'seeRed';
@ -100,13 +109,13 @@ export class AoZhiDu extends SufPassiveSkill {
takeEffect(owner: BattleRole, target: BattleRole): void { takeEffect(owner: BattleRole, target: BattleRole): void {
const aozhidu = new KuiLan('kuilan', this.last); const aozhidu = new KuiLan('kuilan', this.last);
target.putBuff(aozhidu); target.putBuff(aozhidu);
owner.extraDmgLog(replace(st('aozhidu.2'), [t(target.type), this.last])); owner.extraDmgLog(replace(st('aozhidu.2'), [t(target.type), this.last, aozhidu.layer]));
} }
} }
//十九叉 //十九叉
export class ShiJiuCha extends SufPassiveSkill { export class ShiJiuCha extends SufPassiveSkill {
name: string = 'shijiucha'; name: string = 'shijiucha';
times: number = 9; times: number = 19;
cout: number = 0; cout: number = 0;
desc(): string { desc(): string {
return replace(st('shijiucha.1'), [this.times]); return replace(st('shijiucha.1'), [this.times]);
@ -153,10 +162,10 @@ export class BaoFengXue extends Control {
// 波动杀意 // 波动杀意
export class BoDongShaYi extends PrePassiveSkill { export class BoDongShaYi extends PrePassiveSkill {
name: string = 'bodongshayi'; name: string = 'bodongshayi';
perent: number = 6; precent: number = 10;
maxLayer: number = 15; maxLayer: number = 15;
desc(): string { desc(): string {
return replace(st('bodongshayi.1'), [this.perent, this.maxLayer]); return replace(st('bodongshayi.1'), [this.precent, this.maxLayer]);
} }
trigger(owner: BattleRole, target: BattleRole): boolean { trigger(owner: BattleRole, target: BattleRole): boolean {
return true; return true;
@ -164,8 +173,93 @@ export class BoDongShaYi extends PrePassiveSkill {
takeEffect(owner: BattleRole, target: BattleRole): void { takeEffect(owner: BattleRole, target: BattleRole): void {
const shayi: any = owner.attackBuff.get('shayi'); const shayi: any = owner.attackBuff.get('shayi');
if (shayi) { if (shayi) {
shayi.percent = this.perent; shayi.percent = this.precent;
shayi.maxLayer = this.maxLayer; shayi.maxLayer = this.maxLayer;
} }
} }
} }
// 利刃咒
export class LiRenZhou extends SufPassiveSkill {
name: string = 'lirenzhou';
precent: number = 3;
layer: number[] = [1, 3];
maxLayer: number = 14;
desc(): string {
return replace(st('lirenzhou.1'), [this.layer[0], this.layer[1], this.maxLayer, this.precent]);
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return true;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
const lirenzhou = new DmgPercentBuff(this.name, this.precent, 9999, this.maxLayer);
const layer = this.layer[0] + Math.floor(Math.random() * (this.layer[1] - this.layer[0] + 1));
lirenzhou.layer = layer;
owner.putBuff(lirenzhou);
owner.atteckLog(replace(st('lirenzhou.2'), [layer, lirenzhou.layer]));
}
}
// 刀刃风暴
export class DaoRenFengBao extends Attack {
order: number = 11;
name: string = 'daorenfengbao';
dmgPrecent: number = 80;
desc(): string {
return replace(st('daorenfengbao.1'), [this.dmgPrecent]);
}
beforeAtk(owner: BattleRole, target: BattleRole): void {
if (owner.action) {
return;
} else {
const lirenzhou = owner.attackBuff.get('lirenzhou');
if (lirenzhou && lirenzhou.layer == lirenzhou.maxLayer) {
owner.action = this;
}
}
}
use(owner: BattleRole, target: BattleRole): void {
const lirenzhou: any = owner.attackBuff.get('lirenzhou');
this.percent = lirenzhou.layer * this.dmgPrecent;
super.use(owner, target);
lirenzhou.layer = 0;
}
}
//流萤
export class LiuYing extends SufPassiveSkill {
name: string = 'liuying';
rate: number = 60;
layer: number = 1;
maxLayer: number = 3;
percent: number = 600;
last: number = 3;
curLayer: number = 0;
desc(): string {
return replace(st('liuying.1'), [this.rate, this.layer, this.maxLayer, this.percent, this.last]);
}
trigger(owner: BattleRole, target: BattleRole): boolean {
return owner.dmg > 0 && Math.random() < this.rate / 100;
}
takeEffect(owner: BattleRole, target: BattleRole): void {
this.curLayer += this.layer;
owner.extraDmgLog(replace(st('liuying.2'), [t(owner.type), this.layer, this.maxLayer, this.curLayer]));
if (this.curLayer >= this.maxLayer) {
const additional = Math.ceil((owner.atk * this.percent) / 100);
target.addHp(-1 * additional);
const gandian = new GanDian(this.last);
target.putBuff(gandian);
this.curLayer = 0;
owner.extraDmgLog(replace(st('liuying.3'), [t(owner.type), additional, this.last]));
}
}
}
//失恋
export class ShiLian extends StartPassiveSkill {
name: string = 'shilian';
dmgReduce: number = -100;
desc(): string {
return replace(st('shilian.1'), [-1 * this.dmgReduce]);
}
takeEffect(owner: BattleRole, target: BattleRole): void {
const shilian = new DmgReducBuff(this.name, this.dmgReduce, 9999);
owner.putBuff(shilian);
}
}

2
src/tool/caller/equip.ts

@ -80,7 +80,7 @@ export const callEuqipTipsLocation = (e, mobile) => {
tipsStyle2.left = 'calc(' + x + 'px + 21rem)'; tipsStyle2.left = 'calc(' + x + 'px + 21rem)';
} else { } else {
tipsStyle.right = maxW - x + 'px'; tipsStyle.right = maxW - x + 'px';
tipsStyle.right2 = 'calc(' + tipsStyle.righ + ' - 21rem)'; tipsStyle2.right = 'calc(' + tipsStyle.right + ' + 21rem)';
} }
if (y < maxH / 2) { if (y < maxH / 2) {
tipsStyle.top = y + 'px'; tipsStyle.top = y + 'px';

2
src/views/archive.vue

@ -83,7 +83,7 @@ const uploadArchive = () => {
API.getUser().then(user => { API.getUser().then(user => {
if (user) { if (user) {
const palyer = state.playerAttribute; const palyer = state.playerAttribute;
const data = { version: archive_version, lv: palyer.lv, coins: palyer.coins, strengthenLv: strengthenLv.value, archive: archive.value } const data = { version: archive_version, lv: palyer.lv, coins: palyer.coins, strengthenLv: strengthenLv.value, layer: palyer.layer, archive: archive.value }
API.uploadArchive(data).then(rsp => rsp && showMenu()); API.uploadArchive(data).then(rsp => rsp && showMenu());
} else { } else {
state.showLogin = true; state.showLogin = true;

15
src/views/backpack/equip-menu.vue

@ -3,7 +3,7 @@
<PopoverMenu :items="[ <PopoverMenu :items="[
{ label: t('use'), onClick: useEquip }, { label: t('use'), onClick: useEquip },
{ label: t('strengthen'), onClick: strengthenEquip }, { label: t('strengthen'), onClick: strengthenEquip },
{ label: t('reforge'), onClick: strengthenEquip }, { label: t('reforge.title'), onClick: reforgeEquip },
{ label: t('inherited.0'), onClick: inheritedEquip }, { label: t('inherited.0'), onClick: inheritedEquip },
{ label: state.grid[index]?.locked ? t('unlock') : t('lock'), onClick: lockEquip }, { label: state.grid[index]?.locked ? t('unlock') : t('lock'), onClick: lockEquip },
{ label: t('sell'), onClick: sellEquip }, { label: t('sell'), onClick: sellEquip },
@ -15,6 +15,11 @@
<Strengthen ref="strengthen" :equip="state.grid[index]" /> <Strengthen ref="strengthen" :equip="state.grid[index]" />
</Dialog> </Dialog>
<Dialog :title="t('reforge.title') + t('equip')" v-model="showReforge" top="5rem" left="2rem" padding="0" :z="11"
:obscured="true" @close="strengthen?.stopAuto()">
<Reforge ref="reforge" :equip="state.grid[index]" />
</Dialog>
<Dialog :title="t('equip') + t('inherited.0')" v-model="showInherited" :top="state.mobile ? '5rem' : '10rem'" <Dialog :title="t('equip') + t('inherited.0')" v-model="showInherited" :top="state.mobile ? '5rem' : '10rem'"
left="2rem" padding="0" :z="11" :obscured="true"> left="2rem" padding="0" :z="11" :obscured="true">
<Inherited :target="equip" :source="curEquip" /> <Inherited :target="equip" :source="curEquip" />
@ -30,11 +35,13 @@ import { Dialog, PopoverMenu } from "@/components"
import Strengthen from "./strengthen.vue"; import Strengthen from "./strengthen.vue";
import { usePopoverMenu } from "@/tool"; import { usePopoverMenu } from "@/tool";
import Inherited from "./inherited.vue"; import Inherited from "./inherited.vue";
import Reforge from "./reforge.vue";
const { t } = useI18n(); const { t } = useI18n();
const { state, commit, dispatch } = useStore(); const { state, commit, dispatch } = useStore();
const showStrengthen = ref(false); const showStrengthen = ref(false);
const showReforge = ref(false);
const showInherited = ref(false); const showInherited = ref(false);
const { show, top, left, index, open, close } = usePopoverMenu(); const { show, top, left, index, open, close } = usePopoverMenu();
const emit = defineEmits(['closePack']) const emit = defineEmits(['closePack'])
@ -48,6 +55,7 @@ const curEquip = computed(() => {
return state.playerAttribute[equip.value.type]; return state.playerAttribute[equip.value.type];
}) })
const strengthen = ref(); const strengthen = ref();
const reforge = ref();
defineExpose({ open }) defineExpose({ open })
@ -60,6 +68,11 @@ const strengthenEquip = () => {
showStrengthen.value = true; showStrengthen.value = true;
close(); close();
} }
const reforgeEquip = () => {
emit('closePack');
showReforge.value = true;
close();
}
const lockEquip = () => { const lockEquip = () => {
state.grid[index.value].locked = !state.grid[index.value].locked; state.grid[index.value].locked = !state.grid[index.value].locked;
close(); close();

2
src/views/backpack/grid.vue

@ -49,7 +49,7 @@ const userCoins = computed(() => {
}) })
const needCoins = 2000000; const needCoins = 2000000;
const addNum = 8; const addNum = 8;
const maxNum = 160; const maxNum = 320;
const itemNum = computed(() => { const itemNum = computed(() => {
let i = 0; let i = 0;

7
src/views/backpack/inherited.vue

@ -120,12 +120,7 @@ const confirmInherited = () => {
emit('close'); emit('close');
} }
onMounted(() => { onMounted(() => { });
const need = strengthenAvgCoins(100, 13, qualitys[5]);
const used = strengthenAvgCoins(1, 13, qualitys[0]);
console.log(need - used);
});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.inherited { .inherited {

2
src/views/backpack/player.vue

@ -51,7 +51,7 @@ const attribute = computed(() => {
return state.playerAttribute.attribute; return state.playerAttribute.attribute;
}); });
const attrs = ['dps', 'atk', 'crit', 'critDmg', 'dmgPercent', 'hp', 'def', 'bloc', 'dmgReduc', 'critAvoid', 'critDmgReduc', 'moveSpeed']; const attrs = ['dps','baseAtk', 'atkPercent', 'atk', 'crit', 'critDmg', 'dmgPercent', 'hp', 'def', 'bloc', 'dmgReduc', 'critAvoid', 'critDmgReduc', 'moveSpeed'];
const coins = computed(() => { const coins = computed(() => {
return state.playerAttribute.coins; return state.playerAttribute.coins;
}) })

214
src/views/backpack/reforge.vue

@ -1,44 +1,64 @@
<template> <template>
<div @mouseover="reforgeFlag = true" @mouseleave="reforgeFlag = false; reforgeing = false;" @click="reforge"> <div class="reforge" v-if="equip">
<div class="extraEntry" v-if="!reforgeFlag || reforgeing"> <Tooltip :infos="[rt('desc.1'), rt('desc.2'), rt('desc.3'), rt('desc.4')]" width="8rem">
<div v-if="tempEntry" class="extraEntry-item" v-for="(v, k) in tempEntry" :key="k"> <div class="descript">- {{ rt('desc.0') }} -</div>
<button class="button"> </Tooltip>
<div> <div @mouseover="reforgeFlag = true" @mouseleave="reforgeFlag = false; reforgeing = false;" @click="reforge">
{{ t(v.type + '.0') }} : {{ v.showVal }}({{ v.percent }}%) <div class="extraEntry" v-if="!reforgeFlag || reforgeing">
</div> <div v-if="tempEntry" class="extraEntry-item" v-for="(v, k) in tempEntry" :key="k">
</button> <button class="button">
<div>
{{ t(v.type + '.0') }} : {{ v.showVal }}({{ v.percent }}%)
</div>
</button>
</div>
<div v-if="!tempEntry" class="extraEntry-item" v-for="(v, k) in equip.extraEntry" :key="v.type + k">
<button class="button">
<div>
{{ t(v.type + '.0') }} : {{ v.showVal }}({{ v.percent }}%)
</div>
</button>
</div>
</div> </div>
<div v-if="!tempEntry" class="extraEntry-item" v-for="(v, k) in equip.extraEntry" :key="v.type + k"> <div class="reforge-tip" v-if="reforgeFlag && !reforgeing">
<button class="button"> <div :class="useCoins < reforgeNeed ? 'red' : ''">{{ replace(rt('action.0'), [reforgeNeed]) }}
<div> </div>
{{ t(v.type + '.0') }} : {{ v.showVal }}({{ v.percent }}%)
</div>
</button>
</div> </div>
</div> </div>
<div class="reforge-tip" v-if="reforgeFlag && !reforgeing"> <div class="btn-group">
<div :class="useCoins < reforgeNeed ? 'red' : ''">{{ replace(t('reforgeAction.0'), [reforgeNeed]) }} </div> <button class="button" @click="saveOld">{{ rt('action.1') }}</button>
<div>-{{ t('reforgeDesc.0') }}</div> <button class="button" @click="saveNew">{{ rt('action.2') }}</button>
<div>-{{ t('reforgeDesc.1') }}</div> </div>
<div>-{{ t('reforgeDesc.2') }}</div> <div class="btn-group" v-if='!auto'>
<p>{{ rt('atuo.0') }}</p>
<select v-model="autoAttr">
<option v-for="item in entrys" :value="item">{{ t(item + '.0') }}</option>
</select>
x
<select v-model="autoNum">
<option v-for="i in 5" :value="i">{{ i }}</option>
</select>
<button class="button" @click="startAuto">{{ rt('atuo.1') }}</button>
</div>
<div class="btn-group" v-if='auto'>
<p>{{ rt('atuo.2') }}...</p>
<button class="button" @click="stopAuto">{{ rt('atuo.3') }}</button>
</div> </div>
</div>
<div class="btn-group">
<button class="button" @click="saveOld">{{ t('reforgeAction.1') }}</button>
<button class="button" @click="saveNew">{{ t('reforgeAction.2') }}</button>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { useStore } from "vuex"; import { useStore } from "vuex";
import { reactive, onMounted, ref, computed, watch } from "vue"; import { reactive, onMounted, ref, computed, watch } from "vue";
import { Tooltip, EquipIcon } from "@/components" import { Tooltip } from "@/components"
import { createt } from "@/config/i18n"; import { createt } from "@/config/i18n";
import { Entry, extra_entry_num, weaponExtraEntry, armorExtraEntry, neckExtraEntry, ringExtraEntry, jewelryExtraEntry, pantsExtraEntry, shoesExtraEntry, bracersExtraEntry } from "@/config"; import { Entry, extra_entry_num } from "@/config";
import * as config from "@/config";
import { replace } from "@/tool"; import { replace } from "@/tool";
import { useI18n } from "vue3-i18n"; import { useI18n } from "vue3-i18n";
const { t } = useI18n(); const { t } = useI18n();
const rt = createt('reforge.');
const { state, commit, dispatch } = useStore(); const { state, commit, dispatch } = useStore();
const reforgeFlag = ref(false); const reforgeFlag = ref(false);
const reforgeing = ref(false); const reforgeing = ref(false);
@ -61,6 +81,17 @@ const height = computed(() => {
const tempEntry = ref<Entry[] | null>(); const tempEntry = ref<Entry[] | null>();
const tempId = ref(); const tempId = ref();
const auto = ref(false);
const autoAttr = ref('');
const autoNum = ref(3);
const entrys = computed(() => {
if (prop.equip) {
const key = prop.equip.type + 'ExtraEntrys';
return config[key];
}
return null;
});
const prop = defineProps({ const prop = defineProps({
equip: { equip: {
type: Object, type: Object,
@ -71,18 +102,9 @@ watch(() => prop.equip, (n) => {
tempEntry.value = null; tempEntry.value = null;
}) })
const reforger = {
weapon: weaponExtraEntry,
armor: armorExtraEntry,
neck: neckExtraEntry,
ring: ringExtraEntry,
jewelry: jewelryExtraEntry,
pants: pantsExtraEntry,
shoes: shoesExtraEntry,
bracers: bracersExtraEntry,
}
const reforge = () => { const reforge = () => {
if (useCoins.value < reforgeNeed.value) { const need = Math.ceil(reforgeNeed.value * (auto.value ? 1.5 : 1));
if (useCoins.value < need) {
commit("set_sys_info", { msg: t('stNoCoins'), type: "warning", }); commit("set_sys_info", { msg: t('stNoCoins'), type: "warning", });
return return
} }
@ -92,13 +114,16 @@ const reforge = () => {
const extraEntryNum = extra_entry_num[quality]; const extraEntryNum = extra_entry_num[quality];
const extraEntry = new Array(); const extraEntry = new Array();
for (let i = 0; i < extraEntryNum; i++) { for (let i = 0; i < extraEntryNum; i++) {
const entry = reforger[equip.type](quality, equip.lv, extraQuality); const key = equip.type + 'ExtraEntry';
const entry = config[key](quality, equip.lv, extraQuality);
extraEntry.push(entry); extraEntry.push(entry);
} }
commit("add_player_coins", -1 * reforgeNeed.value); commit("add_player_coins", -1 * need);
tempId.value = equip.id; tempId.value = equip.id;
tempEntry.value = extraEntry; tempEntry.value = extraEntry;
reforgeing.value = true; reforgeing.value = true;
check();
auto.value && setTimeout(reforge, 200);
} }
const saveOld = () => { const saveOld = () => {
@ -112,51 +137,106 @@ const saveNew = () => {
tempEntry.value = null; tempEntry.value = null;
} }
const check = () => {
debugger
if (!auto.value || !tempEntry.value) return;
let cout = 0;
const entrys = tempEntry.value || prop.equip.extraEntry;
entrys.forEach(entry => {
if (entry.type == autoAttr.value) {
cout++;
}
})
auto.value = cout < autoNum.value;
}
const startAuto = () => {
auto.value = true;
check();
auto.value && reforge();
}
const stopAuto = () => {
auto.value = false;
}
onMounted(() => { }); onMounted(() => { });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.extraEntry { .reforge {
display: flex; color: #f1f1f1;
flex-direction: column; width: 25rem;
justify-content: center; height: auto;
width: 100%; background: rgba(0, 0, 0, 0.2);
padding-left: 1.2rem; border: #393839;
padding-bottom: 0.6rem; border-radius: 0.4rem;
height: v-bind('height'); padding: 1rem;
cursor: pointer; box-sizing: border-box;
div { .descript {
font-family: 'MaShanZheng' !important;
display: flex;
align-items: center !important;
justify-content: center;
font-size: 1.6rem;
padding: 1.4rem 0.7rem;
color: #efb96e;
}
.extraEntry {
display: flex; display: flex;
flex-direction: column;
justify-content: center; justify-content: center;
width: 100%;
padding-left: 1.2rem;
padding-bottom: 0.6rem;
height: v-bind('height');
cursor: pointer;
&>div { div {
display: flex; display: flex;
justify-content: center; justify-content: center;
&>div {
display: flex;
justify-content: center;
}
}
.button {
border: 0;
width: 80%;
} }
}
.button {
border: 0;
width: 80%;
} }
.reforge-tip {
width: 100%;
flex-direction: column;
display: flex;
justify-content: center;
height: v-bind('height');
color: #68d5ed;
}
} .red {
color: red !important;
}
.reforge-tip { .btn-group {
width: 100%; margin-bottom: 0.5rem;
flex-direction: column; display: flex;
display: flex; align-items: center;
justify-content: center; justify-content: center;
height: v-bind('height'); }
color: #68d5ed;
} }
.red { @media only screen and (max-width: 768px) {
color: red !important; .reforge {
} width: 23rem;
}
.btn-group { .extraEntry {
margin-bottom: 0.5rem; font-size: 1rem;
}
} }
</style> </style>

5
src/views/backpack/strengthen.vue

@ -33,7 +33,7 @@
<div class="btn-group" v-if='!auto'> <div class="btn-group" v-if='!auto'>
<p>{{ t('stren.0') }}<span :class="{ 'red': useCoins < needCoins }">{{ needCoins }}</span></p> <p>{{ t('stren.0') }}<span :class="{ 'red': useCoins < needCoins }">{{ needCoins }}</span></p>
<button class="button" @click="strengthen(false)">{{ t('stren.1') }}+{{ parseInt(equip.strengthenLv) + 1 <button class="button" @click="strengthen(false)">{{ t('stren.1') }}+{{ parseInt(equip.strengthenLv) + 1
}}</button> }}</button>
</div> </div>
<div class="btn-group" v-if='!auto'> <div class="btn-group" v-if='!auto'>
<p>{{ t('stren.0') }}<span :class="{ 'red': useCoins < needCoins }">{{ needCoins }}</span></p> <p>{{ t('stren.0') }}<span :class="{ 'red': useCoins < needCoins }">{{ needCoins }}</span></p>
@ -49,7 +49,6 @@
<p>{{ t('stren.5') }}...</p> <p>{{ t('stren.5') }}...</p>
<button class="button" @click="stopAuto">{{ t('stren.6') }}</button> <button class="button" @click="stopAuto">{{ t('stren.6') }}</button>
</div> </div>
<Reforge :equip="equip" />
</div> </div>
</template> </template>
@ -133,7 +132,7 @@ onMounted(() => { });
background: rgba(0, 0, 0, 0.2); background: rgba(0, 0, 0, 0.2);
border: #393839; border: #393839;
border-radius: 0.4rem; border-radius: 0.4rem;
padding: 0 1rem; padding: 1rem;
box-sizing: border-box; box-sizing: border-box;
} }

1
src/views/dungeon/dungeonTips.vue

@ -107,7 +107,6 @@ onMounted(() => { });
.select { .select {
font-size: 1.1rem; font-size: 1.1rem;
background-color: rgba(0, 0, 0, 0.6);
} }
.tip { .tip {

55
src/views/version/update-log.vue

@ -1,6 +1,6 @@
<template> <template>
<div class="version"> <div class="version">
<div class="title">当前版本{{ curVersion }}</div> <div class="title">当前版本{{ curVersion }}游戏交流群QQ981012891</div>
<div class="title"> <div class="title">
历史版本 历史版本
<a v-for="v in hisVersions" :href="v.url" target="_blank">{{ v.version }}</a> <a v-for="v in hisVersions" :href="v.url" target="_blank">{{ v.version }}</a>
@ -38,6 +38,59 @@ const hisVersions = [
] ]
const updateLogs: any = [{ const updateLogs: any = [{
date: '2025-05-22', version: '1.0',
adjust: [
'新增神话装备:黑白钻戒,流萤',
'神话装备【求爱】技能调整',
'梳妆镜被动调整,降低触发概率,改回真实伤害',
'新增收藏品神话:初恋',
'面板增加基础攻击和攻击加成显示',
],
bug: [
'修正狸猫利刃技能描述(实际效果没变)',
'修复黑白钻戒名字不显示问题'
]
}, {
date: '2025-05-22', version: '1.0',
adjust: [
'弹窗可拖动位置',
'自动重铸费用改为1.5倍',
'十九叉被动数值调整',
'溃烂层数上限调整为8层,每层效果调整为-10%护甲',
'新增神话武器:狸猫利刃',
'溃烂层数上限调整为6层',
'鬼甲被动调整为-600护甲'
],
bug: [
'修复右半屏装备属性弹框错位BUG'
]
}, {
date: '2025-05-23', version: '1.0',
adjust: [
'百花内甲和龟纹铠技能数值调整',
'怪物部分属性增加上限:暴击率:120%,暴击伤害:1000%,暴击避免:120%,暴击伤害减免:1000%,护甲:1100,攻击加成:6500%',
'怪物部分属性上限调整:护甲:800+大秘境层数,攻击加成:(6500+大秘境层数)%',
'镜花水月反弹上限现在受怪物护甲减伤影响',
'取消怪物攻击加成上限,怪物部分属性上限调整:暴击避免:100%,暴击伤害减免:500%,',
'背包格子上限增加到320',
'稀有装备爆率调整',
'勾魂夺魄被动数值调整',
'新增自动重铸功能(费用翻倍)',
'调整项链断·极被动的触发条件',
'武器杀意被动数值调整',
'狸猫足印被动数值调整',
'溃烂层数上限提升为2层,每层效果调整为(-40%护甲)',
'断·极被动取消伤害限制,斩杀线调整到最大生命值的15%',
],
bug: [
'修复金刚琢在未造成伤害时也能触发的BUG'
]
}, {
date: '2025-05-22', version: '1.0',
adjust: [
'新增远古装备特效(与太古做区分)',
]
}, {
date: '2025-05-21', version: '1.0', date: '2025-05-21', version: '1.0',
adjust: [ adjust: [
'流血伤害不再是真实伤害,受护甲减伤影响', '流血伤害不再是真实伤害,受护甲减伤影响',

Loading…
Cancel
Save