Browse Source

Merge branch 'v1.0'

master
许孟阳 3 weeks 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> { @@ -22,7 +22,8 @@ public interface IArchiveMapper extends BaseMapper<Archive> {
SET
lv = #{lv},
coins = #{coins},
strengthen_lv= #{strengthenLv} ,
strengthen_lv= #{strengthenLv},
layer= #{layer},
archive = #{archive}
WHERE
username = #{username}

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

@ -22,6 +22,7 @@ public class Archive { @@ -22,6 +22,7 @@ public class Archive {
private int lv;
private long coins;
private int strengthenLv;
private int layer;
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 { @@ -88,6 +88,11 @@ button {
}
}
select {
background-color: rgba(0, 0, 0, 0.6);
color: white;
}
/*使用选择器指定字体*/
.panel-title {
font-family: 'MaShanZheng' !important;

49
src/components/dialog.vue

@ -1,9 +1,9 @@ @@ -1,9 +1,9 @@
<template>
<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">
<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>
</div>
<slot />
@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
<script lang="ts" setup>
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 { close_icon } from "@/config";
@ -77,6 +77,44 @@ watch(() => prop.modelValue, (n, o) => { @@ -77,6 +77,44 @@ watch(() => prop.modelValue, (n, o) => {
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) => {
if (e.keyCode == 27) {
show.value = false;
@ -97,6 +135,7 @@ onMounted(() => { @@ -97,6 +135,7 @@ onMounted(() => {
onBeforeUnmount(() => {
document.removeEventListener('keydown', keydown)
})
</script>
<style lang="scss" scoped>
.dialog {
@ -106,8 +145,8 @@ onBeforeUnmount(() => { @@ -106,8 +145,8 @@ onBeforeUnmount(() => {
background: rgba(0, 0, 0, 0.5);
.content {
top: v-bind('prop.top');
left: v-bind('prop.left');
top: v-bind('top');
left: v-bind('left');
right: v-bind('prop.right');
bottom: v-bind('prop.bottom');
padding: v-bind('prop.padding');

4
src/components/equip-icon.vue

@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
import { useStore } from "vuex";
import { reactive, onMounted, ref, computed } from "vue";
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 { state, commit, dispatch } = useStore();
@ -22,6 +22,8 @@ const src = computed(() => { @@ -22,6 +22,8 @@ const src = computed(() => {
return false;
}
const quality = prop.equip.quality;
const key = quality.extraQuality || quality.quality;
return equip_effect_gif[key];
if (quality.extraQuality) {
return taigu_gif;
}

7
src/config/assets.ts

@ -45,8 +45,15 @@ export const close_icon = root + '/img/close.png'; @@ -45,8 +45,15 @@ export const close_icon = root + '/img/close.png';
export const refresh_icon = root + '/img/re.png';
export const playerImg = root + '/img/player.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 colorful_gif = root + '/img/colorful.gif';
export const yuangu_gif = root + '/img/yuangu.gif';
export const taigu_gif = root + '/img/taigu.gif';
export const warning_icon = root + '/img/tip/warning.png';

21
src/config/beings.ts

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

7
src/config/equips/armor.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base'; @@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
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 };
class ArmorCategory extends Categorys {
@ -57,8 +57,7 @@ export const armorColorfulCategorys: Categorys[] = [ @@ -57,8 +57,7 @@ export const armorColorfulCategorys: Categorys[] = [
{ type: 'bloc', valCoefficient: 2.8 },
{ type: 'def', valCoefficient: 1.0 },
],
'LaoBuKePo',
0.6
'LaoBuKePo'
),
];
@ -144,7 +143,7 @@ export const createarmor = (quality, lv, category, extraQuality) => { @@ -144,7 +143,7 @@ export const createarmor = (quality, lv, category, 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);

4
src/config/equips/bracers.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base'; @@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
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 };
@ -131,7 +131,7 @@ export const createbracers = (quality, lv, category, extraQuality): Equip => { @@ -131,7 +131,7 @@ export const createbracers = (quality, lv, category, extraQuality): Equip => {
};
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);

6
src/config/equips/jewelry.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base'; @@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
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 };
@ -20,7 +20,7 @@ export const jewelryColorfulCategorys: Categorys[] = [ @@ -20,7 +20,7 @@ export const jewelryColorfulCategorys: Categorys[] = [
{ type: 'atk', valCoefficient: 0.6 },
],
'Vampire1',
0.99
0.95
),
new JewelryCategory(
'shuzhuang',
@ -144,7 +144,7 @@ export const createjewelry = (quality, lv, category, extraQuality): Equip => { @@ -144,7 +144,7 @@ export const createjewelry = (quality, lv, category, extraQuality): Equip => {
};
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);

6
src/config/equips/neck.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base'; @@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
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 };
@ -20,7 +20,7 @@ export const neckColorfulCategorys: Categorys[] = [ @@ -20,7 +20,7 @@ export const neckColorfulCategorys: Categorys[] = [
{ type: 'hp', valCoefficient: 1.2 },
],
'XingYunShuZi',
0.99
0.95
),
new NeckCategory(
'duanji',
@ -128,7 +128,7 @@ export const createneck = (quality, lv, category, extraQuality) => { @@ -128,7 +128,7 @@ export const createneck = (quality, lv, category, 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);

9
src/config/equips/pants.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base'; @@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
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 };
class PantsCategory extends Categorys {
@ -18,7 +18,7 @@ export const pantsColorfulCategorys: Categorys[] = [ @@ -18,7 +18,7 @@ export const pantsColorfulCategorys: Categorys[] = [
{ type: 'hp', valCoefficient: 1.4 },
],
'KongBuLingYu',
0.98
0.9
),
new PantsCategory(
'baizhequn',
@ -28,7 +28,8 @@ export const pantsColorfulCategorys: Categorys[] = [ @@ -28,7 +28,8 @@ export const pantsColorfulCategorys: Categorys[] = [
{ type: 'bloc', valCoefficient: 1.5 },
{ type: 'hp', valCoefficient: 1.4 },
],
'FuRenBiHu'
'FuRenBiHu',
0.6
),
new PantsCategory(
'yulan',
@ -124,7 +125,7 @@ export const createpants = (quality, lv, category, extraQuality) => { @@ -124,7 +125,7 @@ export const createpants = (quality, lv, category, 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);

18
src/config/equips/ring.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base'; @@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
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 };
@ -20,7 +20,7 @@ export const ringColorfulCategorys: Categorys[] = [ @@ -20,7 +20,7 @@ export const ringColorfulCategorys: Categorys[] = [
{ type: 'atk', valCoefficient: 1 },
],
'SLWX,JinGangZhuo',
0.9
0.8
),
new RingCategory(
'pojie',
@ -61,7 +61,17 @@ export const ringColorfulCategorys: Categorys[] = [ @@ -61,7 +61,17 @@ export const ringColorfulCategorys: Categorys[] = [
{ type: 'atk', valCoefficient: 1.5 },
],
'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) => { @@ -124,7 +134,7 @@ export const createring = (quality, lv, category, 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);

4
src/config/equips/shoes.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base'; @@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
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 };
class ShoesCategory extends Categorys {
@ -90,7 +90,7 @@ export const createshoes = (quality, lv, category, extraQuality) => { @@ -90,7 +90,7 @@ export const createshoes = (quality, lv, category, 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);

44
src/config/equips/weapon.ts

@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base'; @@ -2,7 +2,7 @@ import { createExtraEntry, createBase, createSamples } from './base';
import { Entry, Quality, EquipBase, Equip, Categorys } from './bean';
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 };
class WeaponCategory extends Categorys {
@ -18,7 +18,8 @@ export const weaponColorfulCategorys: Categorys[] = [ @@ -18,7 +18,8 @@ export const weaponColorfulCategorys: Categorys[] = [
{ type: 'crit', valCoefficient: 1.5 },
{ type: 'critDmg', valCoefficient: 1.3 },
],
'IceBlade,SeeRed'
'IceBlade,QiuAi',
0.99
),
new WeaponCategory(
'qici',
@ -69,7 +70,7 @@ export const weaponColorfulCategorys: Categorys[] = [ @@ -69,7 +70,7 @@ export const weaponColorfulCategorys: Categorys[] = [
{ type: 'hp', valCoefficient: 1.6 },
],
'ShiJiuCha',
0.98
0.9
),
new WeaponCategory('datiecheng', 'weapon/大铁城.png', [
{ type: 'atk', valCoefficient: 4.2 },
@ -84,7 +85,7 @@ export const weaponColorfulCategorys: Categorys[] = [ @@ -84,7 +85,7 @@ export const weaponColorfulCategorys: Categorys[] = [
{ type: 'critDmg', valCoefficient: 1.5 },
],
'JianQiDongSiFang',
0.8
0.5
),
new WeaponCategory(
'baoxue',
@ -104,8 +105,41 @@ export const weaponColorfulCategorys: Categorys[] = [ @@ -104,8 +105,41 @@ export const weaponColorfulCategorys: Categorys[] = [
{ type: 'crit', valCoefficient: 1.5 },
],
'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
),
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[] = [
@ -198,7 +232,7 @@ export const createweapon = (quality, lv, category, extraQuality) => { @@ -198,7 +232,7 @@ export const createweapon = (quality, lv, category, 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);

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

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

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

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

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

@ -6,16 +6,30 @@ export const control = ['${0}被控制${1}回合', '控制失败', '受${0}影 @@ -6,16 +6,30 @@ export const control = ['${0}被控制${1}回合', '控制失败', '受${0}影
export const crit = ['触发了暴击'];
export const attack = ['普通攻击', '伤害倍率100%', '${0}使用了${1}${4},对${2}造成了${3}点伤害'];
export const qiuai = ['求爱', '攻击技能,技能伤害倍率${0}%'];
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 baonue = ['暴虐', '攻击时有${0}%概率使目标筋脉爆裂,施加满层流血,持续${1}回合。', '触发暴虐,对${0}施加满层流血,持续${1}回合。'];
export const zhaxin = ['扎心', '获得${0}%暴击伤害加成。'];
export const aozhidu = ['鳌之毒', '攻击时使目标进入溃烂状态${0}回合。', '触发鳌之毒,${0}进入溃烂状态${1}回合'];
export const shijiucha = ['十九叉', '每九次攻击获得连刺状态,使得第十次攻击附加${0}倍伤害。', '${0}触发十九叉连刺,附加${0}点伤害'];
export const aozhidu = ['鳌之毒', '攻击时使目标进入溃烂状态${0}回合。', '触发鳌之毒,${0}进入溃烂状态${1}回合,当前溃烂层数${2}。'];
export const shijiucha = ['十九叉', '每九次攻击获得连刺状态,使得第十次攻击附加${0}倍伤害。', '${0}触发十九叉连刺,附加${1}点伤害'];
export const jianqidongsifang = ['剑气动四方', '攻击造成的伤害增加${0}%,但被攻击时受到的伤害也增加${1}%。'];
export const baofengxue = ['暴风雪', '使目标进入冰冻状态${0}回合,冷却${1}回合。对boss只有${2}%成功率。'];
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 = [
'百花羞的矜持',
@ -55,6 +69,7 @@ export const tongjuefanji = [ @@ -55,6 +69,7 @@ export const tongjuefanji = [
'触发反击,对${0}造成${1}点伤害。',
'${0}被控制,无法释放技能。',
];
export const jianying = ['坚硬', '获得${0}%伤害减免。'];
export const fate = ['化缘', '副本掉落金币奖励提高${0}%。'];
export const vampire = ['汲血', '生命偷取${0}%。', '触发汲血,偷取${0}点生命'];
@ -64,7 +79,7 @@ export const liulipan = ['琉璃盘', '使用后产生黑红内丹,临时提高$ @@ -64,7 +79,7 @@ export const liulipan = ['琉璃盘', '使用后产生黑红内丹,临时提高$
export const JHSY = ['镜花水月', '被攻击时有${0}%概率反弹${1}%所受伤害。', '${0}触发了镜花水月,反弹${1}点伤害。'];
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 dalidan = ['大力丹', '提升${0}%攻击加成。'];
@ -84,6 +99,7 @@ export const defbuff = ['提升${0}点防御。', '提升${0}%防御。', '获 @@ -84,6 +99,7 @@ export const defbuff = ['提升${0}点防御。', '提升${0}%防御。', '获
export const blocbuff = ['提升${0}点格挡。', '提升${0}%格挡。'];
export const kuilan = '防御降低${0}%。';
export const liuxue = ['每回合流失%{0}当前生命值', '受(${0}层)流血影响,${1}损失${2}生命值。'];
export const gandian = '受到伤害增加${0}%。';
//未实装,待补充

6
src/config/skill/armor.ts

@ -8,7 +8,7 @@ const { t } = i18n; @@ -8,7 +8,7 @@ const { t } = i18n;
export class BHXDJC extends PrePassiveSkill {
name: string = 'bhxdjc';
hpPercent: number = 60;
shieldPercentOfHp: number = 80;
shieldPercentOfHp: number = 100;
cd: number = 999;
desc(): string {
return replace(t('skill.bhxdjc.1'), [this.hpPercent, this.shieldPercentOfHp]);
@ -41,8 +41,8 @@ export class TieBi extends BuffSkill { @@ -41,8 +41,8 @@ export class TieBi extends BuffSkill {
//督军的潜能
export class DuJunQianNeng extends PrePassiveSkill {
name: string = 'dujunqianneng';
hpPercent: number = 50;
dmgReduc: number = 40;
hpPercent: number = 20;
dmgReduc: number = 50;
desc(): string {
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 { @@ -164,12 +164,12 @@ export class Attack extends ActionSkill {
order: number = 999;
name: string = 'attack';
cd: number = 1;
precent: number = 100;
percent: number = 100;
desc(): string {
return t('skill.attack.1');
}
use(owner: BattleRole, target: BattleRole) {
owner.skillPercent += this.precent;
owner.skillPercent += this.percent;
owner.callDmg(target);
let critLog = owner.crit ? t('skill.crit.0') : '';
if (owner.dmg) {

4
src/config/skill/bracers.ts

@ -47,13 +47,13 @@ export class JuDu extends CounterSkill { @@ -47,13 +47,13 @@ export class JuDu extends CounterSkill {
takeEffect(owner: BattleRole, target: BattleRole): void {
const judu = new KuiLan('kuilan', this.last);
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 {
name: string = 'lizhao';
rate: number = 30;
rate: number = 50;
percent: number = 100;
desc(): string {
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 { @@ -157,13 +157,13 @@ export class ControlBuff extends AttackBuff {
//溃烂
export class KuiLan extends PercentAttackedBuff {
constructor(name: string, last: number) {
super(name, 50, last);
super(name, 10, last, 6);
}
desc(): string {
return replace(t('skill.kongbulingyu.2'), [this.percent]);
}
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 { @@ -202,3 +202,9 @@ export class LiuXue extends AttackBuff {
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 @@ @@ -1,6 +1,6 @@
import { CounterSkill, Attack, Control, GainsSkill, SufPassiveSkill, Vampire } from './base';
import i18n from '../i18n';
import { BattleRole, replace } from '@/tool';
import { BattleRole, callReducPercent, replace } from '@/tool';
const { t } = i18n;
//化缘
@ -32,7 +32,7 @@ export class Prototype extends Control { @@ -32,7 +32,7 @@ export class Prototype extends Control {
//暴击恐惧
export class CritFear extends SufPassiveSkill {
name: string = 'critFear';
percent: number = 200;
percent: number = 1000;
desc(): string {
return replace(t('skill.critFear.1'), [this.percent]);
}
@ -63,7 +63,7 @@ export class Liulipan extends Attack { @@ -63,7 +63,7 @@ export class Liulipan extends Attack {
//镜花水月
export class JHSY extends CounterSkill {
name: string = 'JHSY';
rate: number = 40;
rate: number = 15;
percent: number = 100;
desc(): string {
return replace(t('skill.JHSY.1'), [this.rate, this.percent, this.cd]);
@ -72,6 +72,8 @@ export class JHSY extends CounterSkill { @@ -72,6 +72,8 @@ export class JHSY extends CounterSkill {
return Math.random() < this.rate / 100;
}
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);
target.addHp(-1 * 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(''); @@ -8,7 +8,7 @@ const t = createt('');
//断
export class Duan extends SufPassiveSkill {
name: string = 'duan';
hpPercent: number = 20;
hpPercent: number = 15;
order: number = 999;
dmg: number = 999999999;
desc(): string {

2
src/config/skill/pants.ts

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

17
src/config/skill/ring.ts

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
import { SufPassiveSkill, PrePassiveSkill, PassiveSkill, CounterSkill } from './base';
import { SufPassiveSkill, PrePassiveSkill, PassiveSkill, CounterSkill, StartPassiveSkill } from './base';
import i18n from '../i18n';
import { BattleRole, callDmgPercent, replace } from '@/tool';
import { ControlBuff, CritDmgBuff, CritDmgReducBuff } from './buff';
import { ControlBuff, CritDmgBuff, CritDmgReducBuff, DmgReducBuff } from './buff';
const { t } = i18n;
//森罗万象
@ -32,7 +32,7 @@ export class JinGangZhuo extends SufPassiveSkill { @@ -32,7 +32,7 @@ export class JinGangZhuo extends SufPassiveSkill {
return replace(t('skill.jinggangzhuo.1'), [this.rate, this.last]);
}
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 {
target.putBuff(new ControlBuff(this.name, this.last));
@ -122,3 +122,14 @@ export class TongJueFanJi extends CounterSkill { @@ -122,3 +122,14 @@ export class TongJueFanJi extends CounterSkill {
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 @@ @@ -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 { 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 st = createt('skill.');
//冰刃
export class IceBlade extends SufPassiveSkill {
name: string = 'iceBlade';
rate: number = 10;
rate: number = 15;
percent: number = 1000;
last: number = 1;
desc(): string {
@ -24,6 +24,15 @@ export class IceBlade extends SufPassiveSkill { @@ -24,6 +24,15 @@ export class IceBlade extends SufPassiveSkill {
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 {
name: string = 'seeRed';
@ -100,13 +109,13 @@ export class AoZhiDu extends SufPassiveSkill { @@ -100,13 +109,13 @@ export class AoZhiDu extends SufPassiveSkill {
takeEffect(owner: BattleRole, target: BattleRole): void {
const aozhidu = new KuiLan('kuilan', this.last);
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 {
name: string = 'shijiucha';
times: number = 9;
times: number = 19;
cout: number = 0;
desc(): string {
return replace(st('shijiucha.1'), [this.times]);
@ -153,10 +162,10 @@ export class BaoFengXue extends Control { @@ -153,10 +162,10 @@ export class BaoFengXue extends Control {
// 波动杀意
export class BoDongShaYi extends PrePassiveSkill {
name: string = 'bodongshayi';
perent: number = 6;
precent: number = 10;
maxLayer: number = 15;
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 {
return true;
@ -164,8 +173,93 @@ export class BoDongShaYi extends PrePassiveSkill { @@ -164,8 +173,93 @@ export class BoDongShaYi extends PrePassiveSkill {
takeEffect(owner: BattleRole, target: BattleRole): void {
const shayi: any = owner.attackBuff.get('shayi');
if (shayi) {
shayi.percent = this.perent;
shayi.percent = this.precent;
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) => { @@ -80,7 +80,7 @@ export const callEuqipTipsLocation = (e, mobile) => {
tipsStyle2.left = 'calc(' + x + 'px + 21rem)';
} else {
tipsStyle.right = maxW - x + 'px';
tipsStyle.right2 = 'calc(' + tipsStyle.righ + ' - 21rem)';
tipsStyle2.right = 'calc(' + tipsStyle.right + ' + 21rem)';
}
if (y < maxH / 2) {
tipsStyle.top = y + 'px';

2
src/views/archive.vue

@ -83,7 +83,7 @@ const uploadArchive = () => { @@ -83,7 +83,7 @@ const uploadArchive = () => {
API.getUser().then(user => {
if (user) {
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());
} else {
state.showLogin = true;

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

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

2
src/views/backpack/grid.vue

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

7
src/views/backpack/inherited.vue

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

2
src/views/backpack/player.vue

@ -51,7 +51,7 @@ const attribute = computed(() => { @@ -51,7 +51,7 @@ const attribute = computed(() => {
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(() => {
return state.playerAttribute.coins;
})

214
src/views/backpack/reforge.vue

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

5
src/views/backpack/strengthen.vue

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

1
src/views/dungeon/dungeonTips.vue

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

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

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<template>
<div class="version">
<div class="title">当前版本{{ curVersion }}</div>
<div class="title">当前版本{{ curVersion }}游戏交流群QQ981012891</div>
<div class="title">
历史版本
<a v-for="v in hisVersions" :href="v.url" target="_blank">{{ v.version }}</a>
@ -38,6 +38,59 @@ const hisVersions = [ @@ -38,6 +38,59 @@ const hisVersions = [
]
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',
adjust: [
'流血伤害不再是真实伤害,受护甲减伤影响',

Loading…
Cancel
Save