diff --git a/excel/attribute.xlsx b/excel/attribute.xlsx index abf4721..d7a3d12 100644 Binary files a/excel/attribute.xlsx and b/excel/attribute.xlsx differ diff --git a/excel/cha.xlsx b/excel/cha.xlsx index 64e1aba..4e1de38 100644 Binary files a/excel/cha.xlsx and b/excel/cha.xlsx differ diff --git a/excel/enemy.xlsx b/excel/enemy.xlsx index b5f6840..a668a16 100644 Binary files a/excel/enemy.xlsx and b/excel/enemy.xlsx differ diff --git a/excel/equipment.xlsx b/excel/equipment.xlsx index 4b91c8e..76d1272 100644 Binary files a/excel/equipment.xlsx and b/excel/equipment.xlsx differ diff --git a/excel/global.xlsx b/excel/global.xlsx index df27037..6f258e0 100644 Binary files a/excel/global.xlsx and b/excel/global.xlsx differ diff --git a/excel/item.xlsx b/excel/item.xlsx index 3374000..c8af27d 100644 Binary files a/excel/item.xlsx and b/excel/item.xlsx differ diff --git a/excel/language.xlsx b/excel/language.xlsx index 4b9fef6..3199228 100644 Binary files a/excel/language.xlsx and b/excel/language.xlsx differ diff --git a/excel/level.xlsx b/excel/level.xlsx index bbbc993..c18fa4a 100644 Binary files a/excel/level.xlsx and b/excel/level.xlsx differ diff --git a/src/ReplicatedStorage/Json/Attributes.json b/src/ReplicatedStorage/Json/Attributes.json index 68a54b0..d9d3e22 100644 --- a/src/ReplicatedStorage/Json/Attributes.json +++ b/src/ReplicatedStorage/Json/Attributes.json @@ -1,33 +1,33 @@ [ -{"id":1,"type":1,"effectAttribute":"attack","battleValue":[1,10],"iconId":1}, -{"id":2,"type":1,"effectAttribute":"hp","battleValue":[1,10],"iconId":2}, -{"id":3,"type":1,"effectAttribute":"swordAtk","battleValue":[1,10],"iconId":3}, -{"id":4,"type":2,"effectAttribute":"swordWearBase","battleValue":[1,10],"iconId":4}, -{"id":5,"type":2,"effectAttribute":"swordWearSpe","battleValue":[1,10],"iconId":5}, -{"id":6,"type":2,"effectAttribute":"fireAtk","battleValue":[1,10],"iconId":6}, -{"id":7,"type":2,"effectAttribute":"iceAtk","battleValue":[1,10],"iconId":7}, -{"id":8,"type":2,"effectAttribute":"lightAtk","battleValue":[1,10],"iconId":8}, -{"id":9,"type":2,"effectAttribute":"shadowAtk","battleValue":[1,10],"iconId":9}, -{"id":10,"type":1,"effectAttribute":"fireDef","battleValue":[1,10],"iconId":10}, -{"id":11,"type":1,"effectAttribute":"iceDef","battleValue":[1,10],"iconId":11}, -{"id":12,"type":1,"effectAttribute":"lightDef","battleValue":[1,10],"iconId":12}, -{"id":13,"type":1,"effectAttribute":"shadowDef","battleValue":[1,10],"iconId":13}, -{"id":14,"type":2,"effectAttribute":"attackRate","battleValue":[1,10],"iconId":14}, -{"id":15,"type":2,"effectAttribute":"hpRate","battleValue":[1,10],"iconId":15}, -{"id":16,"type":1,"effectAttribute":"atkSpeed","battleValue":[1,10],"iconId":16}, -{"id":20,"type":2,"effectAttribute":"critRate","battleValue":[1,10],"iconId":17}, -{"id":21,"type":2,"effectAttribute":"critDamageRate","battleValue":[1,10],"iconId":18}, -{"id":22,"type":2,"effectAttribute":"atkSpeedRate","battleValue":[1,10],"iconId":19}, -{"id":23,"type":2,"effectAttribute":"cdRate","battleValue":[1,10],"iconId":20}, -{"id":24,"type":1,"effectAttribute":"mpBonus","battleValue":[1,10],"iconId":21}, -{"id":25,"type":2,"effectAttribute":"mpReduceRate","battleValue":[1,10],"iconId":22}, -{"id":26,"type":1,"effectAttribute":"mpRecoverBonus","battleValue":[1,10],"iconId":23}, -{"id":27,"type":2,"effectAttribute":"vampireRate","battleValue":[1,10],"iconId":24}, -{"id":28,"type":2,"effectAttribute":"coinBonus","battleValue":[1,10],"iconId":25}, -{"id":50,"type":1,"effectAttribute":"wearNumber","battleValue":[1,10],"iconId":26}, -{"id":51,"type":1,"effectAttribute":"skillNumber","battleValue":[1,10],"iconId":27}, -{"id":52,"type":1,"effectAttribute":"extraAttributeNumber","battleValue":[1,10],"iconId":28}, -{"id":53,"type":1,"effectAttribute":"elementNumber","battleValue":[1,10],"iconId":29}, -{"id":54,"type":1,"effectAttribute":"elementDefNumber","battleValue":[1,10],"iconId":30}, -{"id":55,"type":1,"effectAttribute":"gemNumber","battleValue":[1,10],"iconId":31} +{"id":1,"type":1,"effectAttribute":"attack","battleValue":[1,10],"iconId":1,"nameId":201}, +{"id":2,"type":1,"effectAttribute":"hp","battleValue":[1,10],"iconId":2,"nameId":202}, +{"id":3,"type":1,"effectAttribute":"swordAtk","battleValue":[1,10],"iconId":3,"nameId":203}, +{"id":4,"type":2,"effectAttribute":"swordWearBase","battleValue":[1,10],"iconId":4,"nameId":204}, +{"id":5,"type":2,"effectAttribute":"swordWearSpe","battleValue":[1,10],"iconId":5,"nameId":205}, +{"id":6,"type":2,"effectAttribute":"fireAtk","battleValue":[1,10],"iconId":6,"nameId":206}, +{"id":7,"type":2,"effectAttribute":"iceAtk","battleValue":[1,10],"iconId":7,"nameId":207}, +{"id":8,"type":2,"effectAttribute":"lightAtk","battleValue":[1,10],"iconId":8,"nameId":208}, +{"id":9,"type":2,"effectAttribute":"shadowAtk","battleValue":[1,10],"iconId":9,"nameId":209}, +{"id":10,"type":1,"effectAttribute":"fireDef","battleValue":[1,10],"iconId":10,"nameId":210}, +{"id":11,"type":1,"effectAttribute":"iceDef","battleValue":[1,10],"iconId":11,"nameId":211}, +{"id":12,"type":1,"effectAttribute":"lightDef","battleValue":[1,10],"iconId":12,"nameId":212}, +{"id":13,"type":1,"effectAttribute":"shadowDef","battleValue":[1,10],"iconId":13,"nameId":213}, +{"id":14,"type":2,"effectAttribute":"attackRate","battleValue":[1,10],"iconId":14,"nameId":214}, +{"id":15,"type":2,"effectAttribute":"hpRate","battleValue":[1,10],"iconId":15,"nameId":215}, +{"id":16,"type":2,"effectAttribute":"atkSpeed","battleValue":[1,10],"iconId":16,"nameId":216}, +{"id":20,"type":2,"effectAttribute":"critRate","battleValue":[1,10],"iconId":17,"nameId":220}, +{"id":21,"type":2,"effectAttribute":"critDamageRate","battleValue":[1,10],"iconId":18,"nameId":221}, +{"id":22,"type":2,"effectAttribute":"atkSpeedRate","battleValue":[1,10],"iconId":19,"nameId":222}, +{"id":23,"type":2,"effectAttribute":"cdRate","battleValue":[1,10],"iconId":20,"nameId":223}, +{"id":24,"type":1,"effectAttribute":"mpBonus","battleValue":[1,10],"iconId":21,"nameId":224}, +{"id":25,"type":2,"effectAttribute":"mpReduceRate","battleValue":[1,10],"iconId":22,"nameId":225}, +{"id":26,"type":1,"effectAttribute":"mpRecoverBonus","battleValue":[1,10],"iconId":23,"nameId":226}, +{"id":27,"type":2,"effectAttribute":"vampireRate","battleValue":[1,10],"iconId":24,"nameId":227}, +{"id":28,"type":2,"effectAttribute":"coinBonus","battleValue":[1,10],"iconId":25,"nameId":228}, +{"id":50,"type":1,"effectAttribute":"wearNumber","battleValue":[1,10],"iconId":26,"nameId":250}, +{"id":51,"type":1,"effectAttribute":"skillNumber","battleValue":[1,10],"iconId":27,"nameId":251}, +{"id":52,"type":1,"effectAttribute":"extraAttributeNumber","battleValue":[1,10],"iconId":28,"nameId":252}, +{"id":53,"type":1,"effectAttribute":"elementNumber","battleValue":[1,10],"iconId":29,"nameId":253}, +{"id":54,"type":1,"effectAttribute":"elementDefNumber","battleValue":[1,10],"iconId":30,"nameId":254}, +{"id":55,"type":1,"effectAttribute":"gemNumber","battleValue":[1,10],"iconId":31,"nameId":255} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Character.json b/src/ReplicatedStorage/Json/Character.json index dfbc59d..a2b0cd4 100644 --- a/src/ReplicatedStorage/Json/Character.json +++ b/src/ReplicatedStorage/Json/Character.json @@ -1,3 +1,3 @@ [ -{"id":1,"name":1,"attack":100,"hp":2000,"walkSpeed":10,"atkSpeed":1} +{"id":1,"name":1,"attack":100,"hp":2000,"walkSpeed":10,"atkSpeed":100} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Enemy.json b/src/ReplicatedStorage/Json/Enemy.json index 32312dd..892a285 100644 --- a/src/ReplicatedStorage/Json/Enemy.json +++ b/src/ReplicatedStorage/Json/Enemy.json @@ -1,5 +1,5 @@ [ -{"id":1,"type":1,"name":1,"attack":83,"hp":400,"walkSpeed":8,"attackSpeed":1,"model":"Thief"}, -{"id":2,"type":1,"name":2,"attack":30,"hp":300,"walkSpeed":8,"attackSpeed":1,"model":"Thief"}, +{"id":1,"type":1,"name":1,"attack":20,"hp":1700,"walkSpeed":8,"attackSpeed":1,"model":"Thief"}, +{"id":2,"type":1,"name":2,"attack":20,"hp":1700,"walkSpeed":8,"attackSpeed":1,"model":"Thief"}, {"id":1000,"type":2,"name":1000,"attack":120,"hp":1000,"walkSpeed":4,"attackSpeed":1,"model":"Thief"} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Equipment.json b/src/ReplicatedStorage/Json/Equipment.json index 42cb5ba..9e284fa 100644 --- a/src/ReplicatedStorage/Json/Equipment.json +++ b/src/ReplicatedStorage/Json/Equipment.json @@ -1,18 +1,18 @@ [ -{"id":40000,"type":1,"name":40000,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40001,"type":1,"name":40001,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40002,"type":1,"name":40002,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40003,"type":1,"name":40003,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40004,"type":1,"name":40004,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40005,"type":1,"name":40005,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40006,"type":1,"name":40006,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40007,"type":1,"name":40007,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40008,"type":1,"name":40008,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40009,"type":1,"name":40009,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40010,"type":1,"name":40010,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40011,"type":1,"name":40011,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40012,"type":1,"name":40012,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40013,"type":1,"name":40013,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40014,"type":1,"name":40014,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10}, -{"id":40015,"type":1,"name":40015,"attributes":[14,200,10,15,200,10,16,100,0],"modelName":"Zeus","recycle":10} +{"id":40000,"type":1,"name":40000,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40001,"type":1,"name":40001,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40002,"type":1,"name":40002,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40003,"type":1,"name":40003,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40004,"type":1,"name":40004,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40005,"type":1,"name":40005,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40006,"type":1,"name":40006,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40007,"type":1,"name":40007,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40008,"type":1,"name":40008,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40009,"type":1,"name":40009,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40010,"type":1,"name":40010,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40011,"type":1,"name":40011,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40012,"type":1,"name":40012,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40013,"type":1,"name":40013,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40014,"type":1,"name":40014,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10}, +{"id":40015,"type":1,"name":40015,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":10} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Forge.json b/src/ReplicatedStorage/Json/Forge.json index e3cc33b..c7d41d2 100644 --- a/src/ReplicatedStorage/Json/Forge.json +++ b/src/ReplicatedStorage/Json/Forge.json @@ -1,17 +1,29 @@ [ -{"id":1,"cost":[1,500]}, -{"id":2,"cost":[1,500]}, -{"id":3,"cost":[1,500]}, -{"id":4,"cost":[1,500]}, -{"id":5,"cost":[1,500]}, -{"id":6,"cost":[1,500]}, -{"id":7,"cost":[1,500]}, -{"id":8,"cost":[1,500]}, -{"id":9,"cost":[1,500]}, -{"id":10,"cost":[1,500]}, -{"id":11,"cost":[1,500]}, -{"id":12,"cost":[1,500]}, -{"id":13,"cost":[1,500]}, -{"id":14,"cost":[1,500]}, -{"id":15,"cost":[1,500]} +{"id":1,"cost":[2,10]}, +{"id":2,"cost":[2,20]}, +{"id":3,"cost":[2,30]}, +{"id":4,"cost":[2,40]}, +{"id":5,"cost":[2,60]}, +{"id":6,"cost":[2,80]}, +{"id":7,"cost":[2,100]}, +{"id":8,"cost":[2,120]}, +{"id":9,"cost":[2,140]}, +{"id":10,"cost":[2,160]}, +{"id":11,"cost":[2,180]}, +{"id":12,"cost":[2,200]}, +{"id":13,"cost":[2,220]}, +{"id":14,"cost":[2,240]}, +{"id":15,"cost":[2,260]}, +{"id":16,"cost":[2,280]}, +{"id":17,"cost":[2,300]}, +{"id":18,"cost":[2,320]}, +{"id":19,"cost":[2,340]}, +{"id":20,"cost":[2,360]}, +{"id":21,"cost":[2,380]}, +{"id":22,"cost":[2,400]}, +{"id":23,"cost":[2,420]}, +{"id":24,"cost":[2,440]}, +{"id":25,"cost":[2,460]}, +{"id":26,"cost":[2,480]}, +{"id":27,"cost":[2,500]} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Language_En_US.json b/src/ReplicatedStorage/Json/Language_En_US.json index 3fbf934..317c111 100644 --- a/src/ReplicatedStorage/Json/Language_En_US.json +++ b/src/ReplicatedStorage/Json/Language_En_US.json @@ -1,6 +1,43 @@ [ -{"id":100006,"text":"Coin+{0}"}, -{"id":100007,"text":"Score+{0}"}, +{"id":101,"text":"普通"}, +{"id":102,"text":"精良"}, +{"id":103,"text":"传奇"}, +{"id":104,"text":"史诗"}, +{"id":105,"text":"卓越"}, +{"id":106,"text":"传说"}, +{"id":107,"text":"传说+1"}, +{"id":108,"text":"传说+2"}, +{"id":201,"text":"攻击"}, +{"id":202,"text":"血量"}, +{"id":203,"text":"飞剑基础伤害"}, +{"id":204,"text":"飞剑穿戴额外伤害"}, +{"id":205,"text":"飞剑穿戴额外特殊伤害"}, +{"id":206,"text":"火焰伤害"}, +{"id":207,"text":"冰霜伤害"}, +{"id":208,"text":"雷电伤害"}, +{"id":209,"text":"暗影伤害"}, +{"id":210,"text":"火焰抗性"}, +{"id":211,"text":"冰霜抗性"}, +{"id":212,"text":"雷电抗性"}, +{"id":213,"text":"暗影抗性"}, +{"id":214,"text":"攻击"}, +{"id":215,"text":"血量"}, +{"id":216,"text":"攻速"}, +{"id":220,"text":"暴击率"}, +{"id":221,"text":"暴击"}, +{"id":222,"text":"攻击速度加成"}, +{"id":223,"text":"冷却时间"}, +{"id":224,"text":"资源上限"}, +{"id":225,"text":"资源消耗减免"}, +{"id":226,"text":"资源回复速度"}, +{"id":227,"text":"吸血"}, +{"id":228,"text":"金币掉落加成"}, +{"id":250,"text":"上阵穿戴数量上限"}, +{"id":251,"text":"技能数量上限"}, +{"id":252,"text":"额外属性数量上限"}, +{"id":253,"text":"元素属性数量上限"}, +{"id":254,"text":"元素抗性数量上限"}, +{"id":255,"text":"宝石数量上限"}, {"id":40000,"text":"测试装备1"}, {"id":40001,"text":"测试装备2"}, {"id":40002,"text":"测试装备3"}, diff --git a/src/ReplicatedStorage/Json/Language_Zh_CN.json b/src/ReplicatedStorage/Json/Language_Zh_CN.json index 04847c8..e1e262e 100644 --- a/src/ReplicatedStorage/Json/Language_Zh_CN.json +++ b/src/ReplicatedStorage/Json/Language_Zh_CN.json @@ -1,331 +1,59 @@ [ -{"id":2,"text":"token异常"}, -{"id":3,"text":"消息序列号异常"}, -{"id":10,"text":"服务器火爆"}, -{"id":11,"text":"服务器维护"}, -{"id":12,"text":"服务器预开启"}, -{"id":13,"text":"当前所选服务器处于爆满状态,无法新建账号"}, -{"id":14,"text":"当前所选服务器处于未开服状态,无法新建账号"}, -{"id":15,"text":"当前所选服务器处于维护状态,请等待维护结束"}, -{"id":16,"text":"当前账号未经认证"}, -{"id":20,"text":"该账号被封禁,剩余时间:{0}"}, -{"id":21,"text":"该账号已被永久封禁"}, -{"id":22,"text":"战斗数据异常"}, -{"id":23,"text":"战斗数据异常."}, -{"id":24,"text":"预开服"}, -{"id":25,"text":"新服"}, -{"id":26,"text":"火爆"}, -{"id":27,"text":"爆满"}, -{"id":28,"text":"维护"}, -{"id":30,"text":"道具数量不足"}, -{"id":31,"text":"已到达购买数量上限"}, -{"id":32,"text":"已达到最大等级"}, -{"id":33,"text":"请勿重复触发"}, -{"id":34,"text":"已达触发次数上限"}, -{"id":35,"text":"请勿重复领取"}, -{"id":36,"text":"补货失败,道具不足"}, -{"id":37,"text":"成功补货"}, -{"id":38,"text":"输入内容包含敏感词"}, -{"id":39,"text":"暂无可分解内容"}, -{"id":100,"text":"输出"}, -{"id":101,"text":"控制"}, -{"id":102,"text":"盾甲兵"}, -{"id":103,"text":"药师"}, -{"id":104,"text":"潜行者"}, -{"id":105,"text":"增伤"}, -{"id":106,"text":"冰剑修"}, -{"id":107,"text":"英雄"}, -{"id":108,"text":"弓箭手"}, -{"id":109,"text":"唐门门主"}, -{"id":110,"text":"拳王"}, -{"id":200,"text":"黎明时代"}, -{"id":201,"text":"石器时代"}, -{"id":202,"text":"农耕时代"}, -{"id":600,"text":"早餐"}, -{"id":601,"text":"午餐"}, -{"id":602,"text":"晚餐"}, -{"id":1000,"text":"普攻"}, -{"id":1001,"text":"近距离攻击敌方"}, -{"id":1002,"text":"劈砍"}, -{"id":1003,"text":"挥舞大刀对近距离的敌人进行劈砍,对其造成伤害"}, -{"id":1004,"text":"重甲"}, -{"id":1005,"text":"身着重甲防御较高,但移动缓慢。使用单手剑对近距离的敌人进行劈砍,对其造成伤害"}, -{"id":1006,"text":"偷袭"}, -{"id":1007,"text":"快速移动到战场后方,近距离攻击敌方"}, -{"id":1008,"text":"长弓"}, -{"id":1009,"text":"使用长弓远距离对的敌人造成伤害,敌人中箭越多移速越慢"}, -{"id":1010,"text":"普通攻击"}, -{"id":1011,"text":"远距离释放毒气,造成范围伤害"}, -{"id":1012,"text":"眩晕箭"}, -{"id":1013,"text":"射出弓箭,远距离攻击敌方,有概率使目标眩晕"}, -{"id":1014,"text":"寒冰剑"}, -{"id":1015,"text":"远距离释放冰霜,减速周围敌人,并造成少量伤害"}, -{"id":1016,"text":"治疗"}, -{"id":1017,"text":"对目标施加治疗,恢复少量生命值"}, -{"id":1018,"text":"攻击提升"}, -{"id":1019,"text":"对目标友军施加增益,短时间内增加目标攻击力"}, -{"id":1020,"text":"长枪"}, -{"id":1021,"text":"使用长枪对中等距离的敌人造成伤害,并附带击退效果。(无法对肉盾、英雄目标造成击退)"}, -{"id":1022,"text":"冲锋"}, -{"id":1023,"text":"接近目标时,骑兵发起冲锋对敌人造成伤害与击退效果,冲锋期间击杀敌人后,可继续冲锋。(无法对肉盾、英雄目标造成击退)"}, -{"id":1100,"text":"[小队]:首次攻击时,额外召唤1名刀兵"}, -{"id":1101,"text":"[小队]额外召唤1个[暗影刀兵]"}, -{"id":1102,"text":"首次攻击时,同时投掷[捕网],眩晕敌方4秒"}, -{"id":1103,"text":"[捕网]进化成[暗影网]:向首个进入目标范围内敌人,投掷暗影网,重复命中敌方时叠加控制时长"}, -{"id":1104,"text":"火焰进化为硫化火焰。附加灼烧伤害3秒"}, -{"id":1105,"text":"出战战士数量+1"}, -{"id":1106,"text":"爆炸时,对灼烧目标,有20%概率眩晕敌人1秒"}, -{"id":1107,"text":"灼烧效果会持续到目标直至死亡。"}, -{"id":1150,"text":"每攻击5次,释放一次重刺穿透直线上的3个敌人"}, -{"id":1151,"text":"重刺附带撕裂效果,技能伤害+60%"}, -{"id":1152,"text":"重刺附带击退效果"}, -{"id":1153,"text":"技能伤害+60%"}, -{"id":1154,"text":"重刺后附带横扫技,对范围内的敌人造成伤害,技能伤害+30%"}, -{"id":1155,"text":"横扫会反向再次横扫1次,本次横扫伤害-20%"}, -{"id":1156,"text":"技能对冰冻状态下的敌人,伤害+200%"}, -{"id":1157,"text":"技能击杀1个敌人,自身攻击力提升2%,直至死亡"}, -{"id":1200,"text":"每攻击5次,恢复自身血量10%,"}, -{"id":1201,"text":"单次承伤损失血量,最多不超过自身血量上限的25%"}, -{"id":1202,"text":"第一次生命低于30%时,会在接下来的3秒恢复最大生命15%"}, -{"id":1203,"text":"单次承伤损失血量,最多不超过自身血量上限的15%"}, -{"id":1204,"text":"恢复血量时,有10%概率再次恢复(针对攻击触发技能)"}, -{"id":1205,"text":"每次恢复血量时,恢复效果+20%"}, -{"id":1206,"text":"攻击异常状态敌人时,有概率额外恢复自身生命2%的生命"}, -{"id":1207,"text":"血量为0时,有20%概率恢复自身血量50%(仅触发一次)"}, -{"id":1250,"text":"召唤后,冲锋路径上的敌人,造成200%攻击力的伤害,每击杀1个敌人后可持续冲锋,每次击杀伤害递减20%,直至无击杀目标后停止"}, -{"id":1251,"text":"冲锋结束后,附带击退效果,伤害+60%"}, -{"id":1252,"text":"冲锋状态经过的友军,获得50%移速加成,持续3秒"}, -{"id":1253,"text":"骑兵冲锋数量+1,伤害-20%"}, -{"id":1254,"text":"冲锋状态结束时,对击退目标有5%造成2秒眩晕"}, -{"id":1255,"text":"冲锋状态下,首个命中的敌人对其额外造成200%的伤害"}, -{"id":1256,"text":"冲锋状态下,对异常状态敌人伤害+200%"}, -{"id":1257,"text":"冲锋过程中,冲锋伤害不递减。"}, -{"id":1300,"text":"每普攻5次,发射一枚霜冻箭附加冰霜效果,降低敌人10%移速(霜冻箭最大上限:30%),持续时间:5S"}, -{"id":1301,"text":"普攻发射弓箭数量+1,伤害-20%"}, -{"id":1302,"text":"霜冻箭攻击减速达到30%的目标,使用霜冻箭命中有20%触发1秒冰冻效果"}, -{"id":1303,"text":"普攻发射弓箭数量+1"}, -{"id":1304,"text":"弓箭攻击,附带减速效果的敌人时,伤害+20%"}, -{"id":1305,"text":"霜冻箭击杀敌人时,向扇形发射4枚碎冰造成伤害(伤害1次)"}, -{"id":1306,"text":"弓箭对冻结状态下的敌人伤害+100%"}, -{"id":1307,"text":"攻击冰冻目标,有5%概率,额外造成目标最大生命上限1%的伤害"}, -{"id":1350,"text":"每攻击5次,释放1个高爆燃油弹,对落点区域的敌人造成小范围伤害"}, -{"id":1351,"text":"承受到伤害的敌人,附带灼烧效果,持续3秒"}, -{"id":1352,"text":"释放2个高爆燃油弹,对落点区域的敌人造成伤害"}, -{"id":1353,"text":"被击中的目标,附带30%的减速效果,持续时间:3秒"}, -{"id":1354,"text":"爆炸区域的敌人,眩晕1.5秒"}, -{"id":1355,"text":"爆炸造成伤害时,增加100%伤害"}, -{"id":1356,"text":"燃烧弹对冻结的怪物造成伤害+200%"}, -{"id":1357,"text":"每次投掷燃烧弹时,有5%概率投出子母弹,对相同区域投掷2枚燃烧弹"}, -{"id":1500,"text":"建筑等级上限"}, -{"id":1501,"text":"加成提升"}, -{"id":2000,"text":"凝聚火焰之力,朝前方释放一道炽热的烈焰冲击,对范围内敌人造成{0}%+{1}伤害"}, -{"id":2001,"text":"进入狂化状态,自身体型变大,提升自身攻速与移速100%"}, -{"id":2002,"text":"召唤3道闪电,造成{0}%+{1}范围伤害,并带麻痹效果"}, -{"id":2003,"text":"召唤一个图腾,提升友军伤害30%,持续3秒,结束后图腾爆炸,造成{0}%+{1}范围伤害"}, -{"id":2004,"text":"召唤一本死亡之书,存在3秒,每0.5秒造成{0}%+{1}范围伤害,并造成牵引效果"}, -{"id":2005,"text":"化身天外飞仙,连续攻击目标,并造成大量伤害"}, -{"id":2006,"text":"狂化"}, -{"id":2007,"text":"进入狂化状态,自身体型变大,提升自身攻速与移速100%"}, -{"id":2008,"text":"陨石"}, -{"id":2009,"text":"召唤陨石攻击前方敌人,对范围内的敌人造成伤害,并附带减速效果"}, -{"id":2010,"text":"混沌陨石"}, -{"id":2011,"text":"召唤陨石攻击前方敌人,对范围内的敌人造成大量伤害,并附带长时间眩晕"}, -{"id":2012,"text":"冲锋"}, -{"id":2013,"text":"向前冲锋对敌方造成伤害并推走沿途敌人"}, -{"id":2014,"text":"治疗"}, -{"id":2015,"text":"治疗自己和周围友军"}, -{"id":2016,"text":"向前飞行多次造成伤害并且向技能飞行方向击退敌人"}, -{"id":3000,"text":"时装5品1_先锋宝藏"}, -{"id":3001,"text":"时装5品2_先锋宝藏"}, -{"id":3002,"text":"时装5品3_先锋宝藏"}, -{"id":3003,"text":"时装5品4_先锋宝藏"}, -{"id":3004,"text":"时装5品5_先锋宝藏"}, -{"id":3005,"text":"时装5品6_先锋宝藏"}, -{"id":3050,"text":"时装6品1_先锋宝藏"}, -{"id":3051,"text":"时装6品2_先锋宝藏"}, -{"id":3052,"text":"时装6品3_先锋宝藏"}, -{"id":3053,"text":"时装6品4_先锋宝藏"}, -{"id":3054,"text":"时装6品5_先锋宝藏"}, -{"id":3055,"text":"时装6品6_先锋宝藏"}, -{"id":3056,"text":"时装6品7"}, -{"id":3057,"text":"时装6品8"}, -{"id":3058,"text":"时装6品9"}, -{"id":3059,"text":"时装6品10"}, -{"id":3009,"text":"独立测试"}, -{"id":4000,"text":"武器4品1_首充"}, -{"id":4001,"text":"武器4品2"}, -{"id":4002,"text":"武器4品3"}, -{"id":4050,"text":"武器5品1_先锋宝藏"}, -{"id":4051,"text":"武器5品2_先锋宝藏"}, -{"id":4052,"text":"武器5品3_先锋宝藏"}, -{"id":4100,"text":"武器6品1_先锋宝藏"}, -{"id":4101,"text":"武器6品2_先锋宝藏"}, -{"id":4102,"text":"武器6品3_先锋宝藏"}, -{"id":4103,"text":"武器6品4_先锋宝藏"}, -{"id":4104,"text":"武器6品5_先锋宝藏"}, -{"id":4105,"text":"武器6品6_先锋宝藏"}, -{"id":4106,"text":"武器6品7"}, -{"id":4107,"text":"武器6品8"}, -{"id":4108,"text":"武器6品9"}, -{"id":4109,"text":"武器6品10"}, -{"id":5000,"text":"按住屏幕左右\\n移动英雄"}, -{"id":5001,"text":"点击召唤同伴"}, -{"id":5002,"text":"释放技能\\n获得强大效果"}, -{"id":5003,"text":"金币可用于召唤同伴\\n也能提升金库等级"}, -{"id":10007,"text":"锻造石"}, -{"id":10008,"text":"洗炼符"}, -{"id":10009,"text":"科技图纸"}, -{"id":10010,"text":"木材"}, -{"id":10011,"text":"强化剂"}, -{"id":10050,"text":"银钥匙"}, -{"id":10051,"text":"金钥匙"}, -{"id":10052,"text":"招募令"}, -{"id":10060,"text":"通用英雄皮肤材料-4"}, -{"id":10061,"text":"通用英雄皮肤材料-5"}, -{"id":10062,"text":"通用英雄皮肤材料-6"}, -{"id":10063,"text":"通用英雄皮肤材料-7"}, -{"id":10070,"text":"通用武器皮肤材料-4"}, -{"id":10071,"text":"通用武器皮肤材料-5"}, -{"id":10072,"text":"通用武器皮肤材料-6"}, -{"id":10073,"text":"通用武器皮肤材料-7"}, -{"id":10100,"text":"战场积分"}, -{"id":10101,"text":"军团积分"}, -{"id":10102,"text":"薪火积分"}, -{"id":10103,"text":"赛季积分"}, -{"id":10104,"text":"荣耀积分"}, -{"id":10105,"text":"元素积分"}, -{"id":10106,"text":"终末积分"}, -{"id":10107,"text":"危机积分"}, -{"id":10200,"text":"头盔图纸"}, -{"id":10201,"text":"护臂图纸"}, -{"id":10202,"text":"衣服图纸"}, -{"id":10203,"text":"裤子图纸"}, -{"id":10204,"text":"鞋子图纸"}, -{"id":10205,"text":"手套图纸"}, -{"id":11100,"text":"宠物1碎片"}, -{"id":11101,"text":"宠物2碎片"}, -{"id":11102,"text":"宠物3碎片"}, -{"id":11103,"text":"宠物4碎片"}, -{"id":11104,"text":"宠物5碎片"}, -{"id":11105,"text":"宠物6碎片"}, -{"id":11106,"text":"宠物7碎片"}, -{"id":11107,"text":"宠物8碎片"}, -{"id":11108,"text":"宠物9碎片"}, -{"id":11109,"text":"宠物10碎片"}, -{"id":11110,"text":"宠物11碎片"}, -{"id":11111,"text":"宠物12碎片"}, -{"id":11112,"text":"宠物13碎片"}, -{"id":11113,"text":"宠物14碎片"}, -{"id":11114,"text":"宠物15碎片"}, -{"id":11115,"text":"宠物16碎片"}, -{"id":11116,"text":"宠物17碎片"}, -{"id":11117,"text":"宠物18碎片"}, -{"id":11118,"text":"宠物19碎片"}, -{"id":11119,"text":"宠物20碎片"}, -{"id":20007,"text":"锻造石详情"}, -{"id":20008,"text":"洗炼符详情"}, -{"id":20009,"text":"科技图纸详情"}, -{"id":20010,"text":"木材详情"}, -{"id":20050,"text":"银钥匙详情"}, -{"id":20051,"text":"金钥匙详情"}, -{"id":20052,"text":"招募令详情"}, -{"id":20060,"text":"通用英雄皮肤材料-4详情"}, -{"id":20061,"text":"通用英雄皮肤材料-5详情"}, -{"id":20062,"text":"通用英雄皮肤材料-6详情"}, -{"id":20063,"text":"通用英雄皮肤材料-7详情"}, -{"id":20070,"text":"通用武器皮肤材料-4详情"}, -{"id":20071,"text":"通用武器皮肤材料-5详情"}, -{"id":20072,"text":"通用武器皮肤材料-6详情"}, -{"id":20073,"text":"通用武器皮肤材料-7详情"}, -{"id":20100,"text":"战场积分详情"}, -{"id":20101,"text":"军团积分详情"}, -{"id":20102,"text":"薪火积分详情"}, -{"id":20103,"text":"赛季积分详情"}, -{"id":20104,"text":"荣耀积分详情"}, -{"id":20105,"text":"元素积分详情"}, -{"id":20106,"text":"终末积分详情"}, -{"id":20107,"text":"危机积分详情"}, -{"id":20200,"text":"头盔图纸详情"}, -{"id":20201,"text":"护臂图纸详情"}, -{"id":20202,"text":"衣服图纸详情"}, -{"id":20203,"text":"裤子图纸详情"}, -{"id":20204,"text":"鞋子图纸详情"}, -{"id":20205,"text":"手套图纸详情"}, -{"id":10500,"text":"1分钟加速"}, -{"id":10501,"text":"10分钟加速"}, -{"id":10502,"text":"半小时加速"}, -{"id":10503,"text":"1小时加速"}, -{"id":10504,"text":"6小时加速"}, -{"id":110000,"text":"技能1"}, -{"id":110001,"text":"技能2"}, -{"id":110002,"text":"技能3"}, -{"id":110003,"text":"技能4"}, -{"id":110004,"text":"技能5"}, -{"id":110005,"text":"技能6"}, -{"id":110006,"text":"技能7"}, -{"id":110007,"text":"技能8"}, -{"id":110008,"text":"技能9"}, -{"id":110009,"text":"技能10"}, -{"id":110010,"text":"技能11"}, -{"id":110011,"text":"技能12"}, -{"id":310001,"text":"头盔·普通"}, -{"id":310002,"text":"头盔·精良"}, -{"id":310003,"text":"头盔·卓越"}, -{"id":320001,"text":"护臂·普通"}, -{"id":320002,"text":"护臂·精良"}, -{"id":320003,"text":"护臂·卓越"}, -{"id":330001,"text":"衣服·普通"}, -{"id":330002,"text":"衣服·精良"}, -{"id":330003,"text":"衣服·卓越"}, -{"id":340001,"text":"裤子·普通"}, -{"id":340002,"text":"裤子·精良"}, -{"id":340003,"text":"裤子·卓越"}, -{"id":350001,"text":"鞋子·普通"}, -{"id":350002,"text":"鞋子·精良"}, -{"id":350003,"text":"鞋子·卓越"}, -{"id":360001,"text":"手套·普通"}, -{"id":360002,"text":"手套·精良"}, -{"id":360003,"text":"手套·卓越"}, -{"id":411000,"text":"头盔·普通宝石"}, -{"id":421000,"text":"护臂·普通宝石"}, -{"id":431000,"text":"衣服·普通宝石"}, -{"id":441000,"text":"裤子·普通宝石"}, -{"id":451000,"text":"鞋子·普通宝石"}, -{"id":461000,"text":"手套·普通宝石"}, -{"id":412000,"text":"头盔·精良宝石"}, -{"id":422000,"text":"护臂·精良宝石"}, -{"id":432000,"text":"衣服·精良宝石"}, -{"id":442000,"text":"裤子·精良宝石"}, -{"id":452000,"text":"鞋子·精良宝石"}, -{"id":462000,"text":"手套·精良宝石"}, -{"id":413000,"text":"头盔·卓越宝石"}, -{"id":423000,"text":"护臂·卓越宝石"}, -{"id":433000,"text":"衣服·卓越宝石"}, -{"id":443000,"text":"裤子·卓越宝石"}, -{"id":453000,"text":"鞋子·卓越宝石"}, -{"id":463000,"text":"手套·卓越宝石"}, -{"id":414000,"text":"头盔·完美宝石"}, -{"id":424000,"text":"护臂·完美宝石"}, -{"id":434000,"text":"衣服·完美宝石"}, -{"id":444000,"text":"裤子·完美宝石"}, -{"id":454000,"text":"鞋子·完美宝石"}, -{"id":464000,"text":"手套·完美宝石"}, -{"id":415000,"text":"头盔·传说宝石"}, -{"id":425000,"text":"护臂·传说宝石"}, -{"id":435000,"text":"衣服·传说宝石"}, -{"id":445000,"text":"裤子·传说宝石"}, -{"id":455000,"text":"鞋子·传说宝石"}, -{"id":465000,"text":"手套·传说宝石"}, -{"id":416000,"text":"头盔·绝世宝石"}, -{"id":426000,"text":"护臂·绝世宝石"}, -{"id":436000,"text":"衣服·绝世宝石"}, -{"id":446000,"text":"裤子·绝世宝石"}, -{"id":456000,"text":"鞋子·绝世宝石"}, -{"id":466000,"text":"手套·绝世宝石"}, -{"id":417000,"text":"头盔·至尊宝石"}, -{"id":427000,"text":"护臂·至尊宝石"}, -{"id":437000,"text":"衣服·至尊宝石"}, -{"id":447000,"text":"裤子·至尊宝石"}, -{"id":457000,"text":"鞋子·至尊宝石"}, -{"id":467000,"text":"手套·至尊宝石"} +{"id":101,"text":"普通"}, +{"id":102,"text":"精良"}, +{"id":103,"text":"传奇"}, +{"id":104,"text":"史诗"}, +{"id":105,"text":"卓越"}, +{"id":106,"text":"传说"}, +{"id":107,"text":"传说+1"}, +{"id":108,"text":"传说+2"}, +{"id":201,"text":"攻击"}, +{"id":202,"text":"血量"}, +{"id":203,"text":"飞剑基础伤害"}, +{"id":204,"text":"飞剑穿戴额外伤害"}, +{"id":205,"text":"飞剑穿戴额外特殊伤害"}, +{"id":206,"text":"火焰伤害"}, +{"id":207,"text":"冰霜伤害"}, +{"id":208,"text":"雷电伤害"}, +{"id":209,"text":"暗影伤害"}, +{"id":210,"text":"火焰抗性"}, +{"id":211,"text":"冰霜抗性"}, +{"id":212,"text":"雷电抗性"}, +{"id":213,"text":"暗影抗性"}, +{"id":214,"text":"攻击"}, +{"id":215,"text":"血量"}, +{"id":216,"text":"攻速"}, +{"id":220,"text":"暴击率"}, +{"id":221,"text":"暴击"}, +{"id":222,"text":"攻击速度加成"}, +{"id":223,"text":"冷却时间"}, +{"id":224,"text":"资源上限"}, +{"id":225,"text":"资源消耗减免"}, +{"id":226,"text":"资源回复速度"}, +{"id":227,"text":"吸血"}, +{"id":228,"text":"金币掉落加成"}, +{"id":250,"text":"上阵穿戴数量上限"}, +{"id":251,"text":"技能数量上限"}, +{"id":252,"text":"额外属性数量上限"}, +{"id":253,"text":"元素属性数量上限"}, +{"id":254,"text":"元素抗性数量上限"}, +{"id":255,"text":"宝石数量上限"}, +{"id":100006,"text":"Coin+{0}"}, +{"id":100007,"text":"Score+{0}"}, +{"id":40000,"text":"测试装备1"}, +{"id":40001,"text":"测试装备2"}, +{"id":40002,"text":"测试装备3"}, +{"id":40003,"text":"测试装备4"}, +{"id":40004,"text":"测试装备5"}, +{"id":40005,"text":"测试装备6"}, +{"id":40006,"text":"测试装备7"}, +{"id":40007,"text":"测试装备8"}, +{"id":40008,"text":"测试装备9"}, +{"id":40009,"text":"测试装备10"}, +{"id":40010,"text":"测试装备11"}, +{"id":40011,"text":"测试装备12"}, +{"id":40012,"text":"测试装备13"}, +{"id":40013,"text":"测试装备14"}, +{"id":40014,"text":"测试装备15"}, +{"id":40015,"text":"测试装备16"} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Level.json b/src/ReplicatedStorage/Json/Level.json index 9905731..f290f64 100644 --- a/src/ReplicatedStorage/Json/Level.json +++ b/src/ReplicatedStorage/Json/Level.json @@ -1,52 +1,52 @@ [ -{"id":1,"type":1,"timeLimit":null,"atkBonus":500,"hpBonus":500,"wave":[[10,1,1,50,1,1]]}, -{"id":2,"type":1,"timeLimit":null,"atkBonus":520,"hpBonus":520,"wave":[[10,1,1,50,1,1]]}, -{"id":3,"type":1,"timeLimit":null,"atkBonus":540,"hpBonus":540,"wave":[[10,1,1,50,1,1]]}, -{"id":4,"type":1,"timeLimit":null,"atkBonus":560,"hpBonus":560,"wave":[[10,1,1,50,1,1]]}, -{"id":5,"type":2,"timeLimit":60,"atkBonus":1050,"hpBonus":1050,"wave":[[10,1000,1]]}, -{"id":6,"type":1,"timeLimit":null,"atkBonus":600,"hpBonus":600,"wave":[[10,1,1,50,1,1]]}, -{"id":7,"type":1,"timeLimit":null,"atkBonus":620,"hpBonus":620,"wave":[[10,1,1,50,1,1]]}, -{"id":8,"type":1,"timeLimit":null,"atkBonus":640,"hpBonus":640,"wave":[[10,1,1,50,1,1]]}, -{"id":9,"type":1,"timeLimit":null,"atkBonus":660,"hpBonus":660,"wave":[[10,1,1,50,1,1]]}, -{"id":10,"type":2,"timeLimit":60,"atkBonus":1100,"hpBonus":1100,"wave":[[10,1000,1]]}, -{"id":11,"type":1,"timeLimit":null,"atkBonus":700,"hpBonus":700,"wave":[[10,1,1,50,1,1]]}, -{"id":12,"type":1,"timeLimit":null,"atkBonus":720,"hpBonus":720,"wave":[[10,1,1,50,1,1]]}, -{"id":13,"type":1,"timeLimit":null,"atkBonus":740,"hpBonus":740,"wave":[[10,1,1,50,1,1]]}, -{"id":14,"type":1,"timeLimit":null,"atkBonus":760,"hpBonus":760,"wave":[[10,1,1,50,1,1]]}, -{"id":15,"type":2,"timeLimit":60,"atkBonus":1150,"hpBonus":1150,"wave":[[10,1000,1]]}, -{"id":16,"type":1,"timeLimit":null,"atkBonus":800,"hpBonus":800,"wave":[[10,1,1,50,1,1]]}, -{"id":17,"type":1,"timeLimit":null,"atkBonus":820,"hpBonus":820,"wave":[[10,1,1,50,1,1]]}, -{"id":18,"type":1,"timeLimit":null,"atkBonus":840,"hpBonus":840,"wave":[[10,1,1,50,1,1]]}, -{"id":19,"type":1,"timeLimit":null,"atkBonus":860,"hpBonus":860,"wave":[[10,1,1,50,1,1]]}, -{"id":20,"type":2,"timeLimit":60,"atkBonus":1250,"hpBonus":1250,"wave":[[10,1000,1]]}, -{"id":21,"type":1,"timeLimit":null,"atkBonus":900,"hpBonus":900,"wave":[[10,1,1,50,1,1]]}, -{"id":22,"type":1,"timeLimit":null,"atkBonus":920,"hpBonus":920,"wave":[[10,1,1,50,1,1]]}, -{"id":23,"type":1,"timeLimit":null,"atkBonus":940,"hpBonus":940,"wave":[[10,1,1,50,1,1]]}, -{"id":24,"type":1,"timeLimit":null,"atkBonus":960,"hpBonus":960,"wave":[[10,1,1,50,1,1]]}, -{"id":25,"type":2,"timeLimit":60,"atkBonus":1350,"hpBonus":1350,"wave":[[10,1000,1]]}, -{"id":26,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1]]}, -{"id":27,"type":1,"timeLimit":null,"atkBonus":1020,"hpBonus":1020,"wave":[[10,1,1,50,1,1]]}, -{"id":28,"type":1,"timeLimit":null,"atkBonus":1040,"hpBonus":1040,"wave":[[10,1,1,50,1,1]]}, -{"id":29,"type":1,"timeLimit":null,"atkBonus":1060,"hpBonus":1060,"wave":[[10,1,1,50,1,1]]}, -{"id":30,"type":2,"timeLimit":60,"atkBonus":1500,"hpBonus":1500,"wave":[[10,1000,1]]}, -{"id":31,"type":1,"timeLimit":null,"atkBonus":1100,"hpBonus":1100,"wave":[[10,1,1,50,1,1]]}, -{"id":32,"type":1,"timeLimit":null,"atkBonus":1120,"hpBonus":1120,"wave":[[10,1,1,50,1,1]]}, -{"id":33,"type":1,"timeLimit":null,"atkBonus":1140,"hpBonus":1140,"wave":[[10,1,1,50,1,1]]}, -{"id":34,"type":1,"timeLimit":null,"atkBonus":1160,"hpBonus":1160,"wave":[[10,1,1,50,1,1]]}, -{"id":35,"type":2,"timeLimit":60,"atkBonus":2000,"hpBonus":2000,"wave":[[10,1000,1]]}, -{"id":36,"type":1,"timeLimit":null,"atkBonus":1200,"hpBonus":1200,"wave":[[10,1,1,50,1,1]]}, -{"id":37,"type":1,"timeLimit":null,"atkBonus":1220,"hpBonus":1220,"wave":[[10,1,1,50,1,1]]}, -{"id":38,"type":1,"timeLimit":null,"atkBonus":1240,"hpBonus":1240,"wave":[[10,1,1,50,1,1]]}, -{"id":39,"type":1,"timeLimit":null,"atkBonus":1260,"hpBonus":1260,"wave":[[10,1,1,50,1,1]]}, -{"id":40,"type":2,"timeLimit":60,"atkBonus":2500,"hpBonus":2500,"wave":[[10,1000,1]]}, -{"id":41,"type":1,"timeLimit":null,"atkBonus":1300,"hpBonus":1300,"wave":[[10,1,1,50,1,1]]}, -{"id":42,"type":1,"timeLimit":null,"atkBonus":1320,"hpBonus":1320,"wave":[[10,1,1,50,1,1]]}, -{"id":43,"type":1,"timeLimit":null,"atkBonus":1340,"hpBonus":1340,"wave":[[10,1,1,50,1,1]]}, -{"id":44,"type":1,"timeLimit":null,"atkBonus":1360,"hpBonus":1360,"wave":[[10,1,1,50,1,1]]}, -{"id":45,"type":2,"timeLimit":60,"atkBonus":3000,"hpBonus":3000,"wave":[[10,1000,1]]}, -{"id":46,"type":1,"timeLimit":null,"atkBonus":1400,"hpBonus":1400,"wave":[[10,1,1,50,1,1]]}, -{"id":47,"type":1,"timeLimit":null,"atkBonus":1420,"hpBonus":1420,"wave":[[10,1,1,50,1,1]]}, -{"id":48,"type":1,"timeLimit":null,"atkBonus":1440,"hpBonus":1440,"wave":[[10,1,1,50,1,1]]}, -{"id":49,"type":1,"timeLimit":null,"atkBonus":1460,"hpBonus":1460,"wave":[[10,1,1,50,1,1]]}, -{"id":50,"type":2,"timeLimit":60,"atkBonus":3500,"hpBonus":3500,"wave":[[10,1000,1]]} +{"id":1,"type":1,"timeLimit":null,"atkBonus":500,"hpBonus":500,"wave":[[10,1,1,50,1,1]],"finishRewards":[50000,1]}, +{"id":2,"type":1,"timeLimit":null,"atkBonus":520,"hpBonus":520,"wave":[[10,1,1,50,1,1]],"finishRewards":[50001,1]}, +{"id":3,"type":1,"timeLimit":null,"atkBonus":540,"hpBonus":540,"wave":[[10,1,1,50,1,1]],"finishRewards":[50002,1]}, +{"id":4,"type":1,"timeLimit":null,"atkBonus":560,"hpBonus":560,"wave":[[10,1,1,50,1,1]],"finishRewards":[50003,1]}, +{"id":5,"type":2,"timeLimit":60,"atkBonus":1050,"hpBonus":1050,"wave":[[10,1000,1]],"finishRewards":[50004,1]}, +{"id":6,"type":1,"timeLimit":null,"atkBonus":600,"hpBonus":600,"wave":[[10,1,1,50,1,1]],"finishRewards":[50005,1]}, +{"id":7,"type":1,"timeLimit":null,"atkBonus":620,"hpBonus":620,"wave":[[10,1,1,50,1,1]],"finishRewards":[50006,1]}, +{"id":8,"type":1,"timeLimit":null,"atkBonus":640,"hpBonus":640,"wave":[[10,1,1,50,1,1]],"finishRewards":[50007,1]}, +{"id":9,"type":1,"timeLimit":null,"atkBonus":660,"hpBonus":660,"wave":[[10,1,1,50,1,1]],"finishRewards":[50008,1]}, +{"id":10,"type":2,"timeLimit":60,"atkBonus":1100,"hpBonus":1100,"wave":[[10,1000,1]],"finishRewards":[50009,1]}, +{"id":11,"type":1,"timeLimit":null,"atkBonus":700,"hpBonus":700,"wave":[[10,1,1,50,1,1]],"finishRewards":[50010,1]}, +{"id":12,"type":1,"timeLimit":null,"atkBonus":720,"hpBonus":720,"wave":[[10,1,1,50,1,1]],"finishRewards":[50011,1]}, +{"id":13,"type":1,"timeLimit":null,"atkBonus":740,"hpBonus":740,"wave":[[10,1,1,50,1,1]],"finishRewards":[50012,1]}, +{"id":14,"type":1,"timeLimit":null,"atkBonus":760,"hpBonus":760,"wave":[[10,1,1,50,1,1]],"finishRewards":[50013,1]}, +{"id":15,"type":2,"timeLimit":60,"atkBonus":1150,"hpBonus":1150,"wave":[[10,1000,1]],"finishRewards":[50014,1]}, +{"id":16,"type":1,"timeLimit":null,"atkBonus":800,"hpBonus":800,"wave":[[10,1,1,50,1,1]],"finishRewards":[50015,1]}, +{"id":17,"type":1,"timeLimit":null,"atkBonus":820,"hpBonus":820,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":18,"type":1,"timeLimit":null,"atkBonus":840,"hpBonus":840,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":19,"type":1,"timeLimit":null,"atkBonus":860,"hpBonus":860,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":20,"type":2,"timeLimit":60,"atkBonus":1250,"hpBonus":1250,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":21,"type":1,"timeLimit":null,"atkBonus":900,"hpBonus":900,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":22,"type":1,"timeLimit":null,"atkBonus":920,"hpBonus":920,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":23,"type":1,"timeLimit":null,"atkBonus":940,"hpBonus":940,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":24,"type":1,"timeLimit":null,"atkBonus":960,"hpBonus":960,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":25,"type":2,"timeLimit":60,"atkBonus":1350,"hpBonus":1350,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":26,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":27,"type":1,"timeLimit":null,"atkBonus":1020,"hpBonus":1020,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":28,"type":1,"timeLimit":null,"atkBonus":1040,"hpBonus":1040,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":29,"type":1,"timeLimit":null,"atkBonus":1060,"hpBonus":1060,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":30,"type":2,"timeLimit":60,"atkBonus":1500,"hpBonus":1500,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":31,"type":1,"timeLimit":null,"atkBonus":1100,"hpBonus":1100,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":32,"type":1,"timeLimit":null,"atkBonus":1120,"hpBonus":1120,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":33,"type":1,"timeLimit":null,"atkBonus":1140,"hpBonus":1140,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":34,"type":1,"timeLimit":null,"atkBonus":1160,"hpBonus":1160,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":35,"type":2,"timeLimit":60,"atkBonus":2000,"hpBonus":2000,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":36,"type":1,"timeLimit":null,"atkBonus":1200,"hpBonus":1200,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":37,"type":1,"timeLimit":null,"atkBonus":1220,"hpBonus":1220,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":38,"type":1,"timeLimit":null,"atkBonus":1240,"hpBonus":1240,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":39,"type":1,"timeLimit":null,"atkBonus":1260,"hpBonus":1260,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":40,"type":2,"timeLimit":60,"atkBonus":2500,"hpBonus":2500,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":41,"type":1,"timeLimit":null,"atkBonus":1300,"hpBonus":1300,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":42,"type":1,"timeLimit":null,"atkBonus":1320,"hpBonus":1320,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":43,"type":1,"timeLimit":null,"atkBonus":1340,"hpBonus":1340,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":44,"type":1,"timeLimit":null,"atkBonus":1360,"hpBonus":1360,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":45,"type":2,"timeLimit":60,"atkBonus":3000,"hpBonus":3000,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":46,"type":1,"timeLimit":null,"atkBonus":1400,"hpBonus":1400,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":47,"type":1,"timeLimit":null,"atkBonus":1420,"hpBonus":1420,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":48,"type":1,"timeLimit":null,"atkBonus":1440,"hpBonus":1440,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":49,"type":1,"timeLimit":null,"atkBonus":1460,"hpBonus":1460,"wave":[[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":50,"type":2,"timeLimit":60,"atkBonus":3500,"hpBonus":3500,"wave":[[10,1000,1]],"finishRewards":[]} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Param.json b/src/ReplicatedStorage/Json/Param.json index aca4859..278fe58 100644 --- a/src/ReplicatedStorage/Json/Param.json +++ b/src/ReplicatedStorage/Json/Param.json @@ -2,5 +2,6 @@ {"id":1,"key":"quality_bonus","intValue":null,"stringValue":null,"intArray":[100,125,150,200,275,375]}, {"id":2,"key":"level_get_bonus","intValue":null,"stringValue":null,"intArray":[5,2]}, {"id":3,"key":"mob_died_get","intValue":null,"stringValue":null,"intArray":[2,10]}, -{"id":4,"key":"default_weapon","intValue":null,"stringValue":"Sword","intArray":[]} +{"id":4,"key":"default_weapon","intValue":null,"stringValue":"Sword","intArray":[]}, +{"id":5,"key":"quality_show","intValue":null,"stringValue":null,"intArray":[101,102,103,104,105,106,107,108]} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Modules/IncrementalCostManager.luau b/src/ReplicatedStorage/Modules/IncrementalCostManager.luau new file mode 100644 index 0000000..ea72060 --- /dev/null +++ b/src/ReplicatedStorage/Modules/IncrementalCostManager.luau @@ -0,0 +1,76 @@ +-- 递增消耗管理器 +local IncrementalCostManager = {} + +--> Dependencies +local Utils = require(script.Parent.Parent.Tools.Utils) + +-- 递增消耗计算函数 +function IncrementalCostManager:CalculateCost(currentLevel: number, configData: table, costIndex: number?) + if not configData then + warn("配置数据无效") + return 0 + end + + costIndex = costIndex or 2 -- 默认使用第二个消耗值 + + -- 根据当前等级获取对应的消耗配置 + local levelData = Utils:GetIdDataFromJson(configData, currentLevel) + if not levelData or not levelData.cost or not levelData.cost[costIndex] then + warn("无法获取等级", currentLevel, "的消耗配置") + return 0 + end + + return levelData.cost[costIndex] +end + +-- 计算当前等级可以进行的操作次数 +function IncrementalCostManager:CalculateOperationCount(currentValue: number, currentLevel: number, configData: table, costIndex: number?) + local cost = self:CalculateCost(currentLevel, configData, costIndex) + if cost <= 0 then return 0 end + + return math.floor(currentValue / cost) +end + +-- 计算下一次升级需要的资源 +function IncrementalCostManager:CalculateNextUpgradeCost(currentLevel: number, configData: table, costIndex: number?) + local nextLevel = currentLevel + 1 + local maxLevel = Utils:GetMaxIdFromJson(configData) + + if nextLevel > maxLevel then + return 0 -- 已达到最高等级 + end + + return self:CalculateCost(nextLevel, configData, costIndex) +end + +-- 检查是否可以升级 +function IncrementalCostManager:CanUpgrade(currentValue: number, currentLevel: number, configData: table, costIndex: number?) + local nextCost = self:CalculateNextUpgradeCost(currentLevel, configData, costIndex) + return currentValue >= nextCost +end + +-- 获取升级后的剩余资源 +function IncrementalCostManager:GetRemainingAfterUpgrade(currentValue: number, currentLevel: number, configData: table, costIndex: number?) + local cost = self:CalculateCost(currentLevel, configData, costIndex) + return currentValue - cost +end + +-- 批量计算多个等级的消耗 +function IncrementalCostManager:CalculateBatchCosts(startLevel: number, endLevel: number, configData: table, costIndex: number?) + local costs = {} + for level = startLevel, endLevel do + costs[level] = self:CalculateCost(level, configData, costIndex) + end + return costs +end + +-- 计算从当前等级到目标等级的总消耗 +function IncrementalCostManager:CalculateTotalCost(currentLevel: number, targetLevel: number, configData: table, costIndex: number?) + local totalCost = 0 + for level = currentLevel, targetLevel do + totalCost = totalCost + self:CalculateCost(level, configData, costIndex) + end + return totalCost +end + +return IncrementalCostManager \ No newline at end of file diff --git a/src/ReplicatedStorage/Tools/Handles.luau b/src/ReplicatedStorage/Tools/Handles.luau index 5c21d00..757f468 100644 --- a/src/ReplicatedStorage/Tools/Handles.luau +++ b/src/ReplicatedStorage/Tools/Handles.luau @@ -10,5 +10,4 @@ function Handles:valueExistsInTable(tab, value) return false end - return Handles diff --git a/src/ReplicatedStorage/Tools/Localization.luau b/src/ReplicatedStorage/Tools/Localization.luau index a1e8c8d..bc89bcb 100644 --- a/src/ReplicatedStorage/Tools/Localization.luau +++ b/src/ReplicatedStorage/Tools/Localization.luau @@ -14,10 +14,24 @@ local JsonLanguage_Zh_CN = require(ReplicatedStorage.Json.Language_Zh_CN) local JsonImage_En_US = require(ReplicatedStorage.Json.Image_En_US) local JsonImage_Zh_CN = require(ReplicatedStorage.Json.Image_Zh_CN) +local JsonParam = require(ReplicatedStorage.Json.Param) + --> Variables local LocalPlayer = game.Players.LocalPlayer local SystemLocaleId = LocalizationService.SystemLocaleId +--> Color +local QUALITY_COLOR = { + [1] = Color3.fromRGB(255, 255, 255), -- 白色 + [2] = Color3.fromRGB(0, 255, 0), -- 绿色 + [3] = Color3.fromRGB(0, 150, 255), -- 蓝色 + [4] = Color3.fromRGB(150, 0, 255), -- 紫色 + [5] = Color3.fromRGB(255, 150, 0), -- 橙色 + [6] = Color3.fromRGB(255, 0, 0), -- 红色 + [7] = Color3.fromRGB(255, 215, 0), -- 金色 + [8] = Color3.fromRGB(255, 0, 255), -- 粉色 +} + -- 获取本地Json文件 function Localization:GetLocalizationJson() if SystemLocaleId == "zh-CN" then @@ -45,4 +59,44 @@ function Localization:GetImageData(Id: number) return data.sourceId end +-- 获取装备品质描述 +function Localization:GetEquipmentQualityDesc(Quality: number) + local qualityData = Utils:GetSpecialKeyDataFromJson(JsonParam, "key", "quality_show") + if not qualityData then return "" end + local languageData = Utils:GetSpecialKeyDataFromJson(JsonLanguage, "id", qualityData.intArray[Quality]) + if not languageData then return "" end + local language = languageData.text + return language +end + +-- 将Color3转换为十六进制字符串 +local function Color3ToHex(color: Color3): string + local r = math.floor(color.R * 255) + local g = math.floor(color.G * 255) + local b = math.floor(color.B * 255) + return string.format("#%02X%02X%02X", r, g, b) +end + +-- 根据quality获取带颜色包装的文本 +function Localization:GetColoredTextByQuality(quality: number, text: string): string + if not quality or not text then return text or "" end + + local color = QUALITY_COLOR[quality] + if not color then return text end + + local hexColor = Color3ToHex(color) + return string.format('%s', hexColor, text) +end + +-- 根据quality获取装备品质描述(带颜色) +function Localization:GetColoredEquipmentQualityDesc(Quality: number): string + local qualityData = Utils:GetSpecialKeyDataFromJson(JsonParam, "key", "quality_show") + if not qualityData then return "" end + local languageData = Utils:GetSpecialKeyDataFromJson(JsonLanguage, "id", qualityData.intArray[Quality]) + if not languageData then return "" end + local language = languageData.text + + return self:GetColoredTextByQuality(Quality, language) +end + return Localization \ No newline at end of file diff --git a/src/ServerStorage/Base/Behaviour.luau b/src/ServerStorage/Base/Behaviour.luau index c96cb84..45d1d11 100644 --- a/src/ServerStorage/Base/Behaviour.luau +++ b/src/ServerStorage/Base/Behaviour.luau @@ -128,6 +128,14 @@ function Behaviour:ChangeExecutingState(State: boolean) self.PlayerAI.ExecutingState = State end +-- 打断执行 +function Behaviour:StopExecute() + if self.ExeTask then + task.cancel(self.ExeTask) + self.ExeTask = nil + end +end + -- 销毁 function Behaviour:Destroy() -- 清除客户端对应行为表现 diff --git a/src/ServerStorage/Proxy/EquipmentProxy.luau b/src/ServerStorage/Proxy/EquipmentProxy.luau index a0696cc..a88698c 100644 --- a/src/ServerStorage/Proxy/EquipmentProxy.luau +++ b/src/ServerStorage/Proxy/EquipmentProxy.luau @@ -116,7 +116,13 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) for i = 1, #EquipmentData.attributes, 3 do local AttributeData = Utils:GetIdDataFromJson(JsonAttributes, EquipmentData.attributes[i]) local baseLvValue = EquipmentData.attributes[i + 1] + EquipmentData.attributes[i + 2] * (PlayerLevel - 1) - local qualityEffectValue = math.floor(baseLvValue * (qualityParam[quality] / 100)) + local qualityEffectValue + -- 攻击速度词条特殊处理 + if AttributeData.effectAttribute == "atkSpeed" then + qualityEffectValue = baseLvValue + else + qualityEffectValue = math.floor(baseLvValue * (qualityParam[quality] / 100)) + end ResultData.attributes[AttributeData.effectAttribute] = qualityEffectValue end diff --git a/src/ServerStorage/Proxy/HelpProxy.luau b/src/ServerStorage/Proxy/HelpProxy.luau index 7334435..59b67b3 100644 --- a/src/ServerStorage/Proxy/HelpProxy.luau +++ b/src/ServerStorage/Proxy/HelpProxy.luau @@ -9,6 +9,9 @@ local Utils = require(ReplicatedStorage.Tools.Utils) --> Json local JsonItemProp = require(ReplicatedStorage.Json.ItemProp) +--> Modules +local ItemProxy = require(script.Parent.ItemProxy) + --> Events local RE_PlayerHelper = ReplicatedStorage.Events.RE_PlayerHelper @@ -21,17 +24,7 @@ RE_PlayerHelper.OnServerEvent:Connect(function(Player: Player, EventName: string if EventName == "CleanPlayerData" then HelpProxy:CleanPlayerData(Player) elseif EventName == "AddItem" then - local PlayerInfoProxy = require(script.Parent.PlayerInfoProxy) - local itemData = Utils:GetIdDataFromJson(JsonItemProp, EventData[1]) - if itemData.type == 2 then - local EquipmentProxy = require(script.Parent.EquipmentProxy) - EquipmentProxy:AddEquipment(Player, EventData[1], EventData[2]) - elseif itemData.type == 3 then - local BookProxy = require(script.Parent.BookProxy) - BookProxy:UnlockBook(Player, EventData[1] - 10000) - else - PlayerInfoProxy:ChangeItemCount(Player, EventData[1], EventData[2]) - end + ItemProxy:AddItem(Player, EventData[1], EventData[2]) print("添加物品成功", EventData) end end) diff --git a/src/ServerStorage/Proxy/ItemProxy.luau b/src/ServerStorage/Proxy/ItemProxy.luau index 04678c0..971daad 100644 --- a/src/ServerStorage/Proxy/ItemProxy.luau +++ b/src/ServerStorage/Proxy/ItemProxy.luau @@ -21,9 +21,14 @@ function ItemProxy:AddItem(Player: Player, ItemId: number, ItemCount: number) local ItemData = Utils:GetIdDataFromJson(JsonItem, ItemId) if not ItemData then return end - - -- 之后根据不同类型做处理 - if ItemData.type == 1 then + + if ItemData.type == 2 then + local EquipmentProxy = require(script.Parent.EquipmentProxy) + EquipmentProxy:AddEquipment(Player, ItemId, ItemCount) + elseif ItemData.type == 3 then + local BookProxy = require(script.Parent.BookProxy) + BookProxy:UnlockBook(Player, ItemId - 10000) + else PlayerInfoProxy:ChangeItemCount(Player, ItemId, ItemCount) end end diff --git a/src/ServerStorage/Proxy/LevelProxy.luau b/src/ServerStorage/Proxy/LevelProxy.luau index c15576d..ef6e15b 100644 --- a/src/ServerStorage/Proxy/LevelProxy.luau +++ b/src/ServerStorage/Proxy/LevelProxy.luau @@ -10,6 +10,7 @@ local Players = game:GetService("Players") local Utils = require(ReplicatedStorage.Tools.Utils) local ArchiveProxy = require(ServerStorage.Proxy.ArchiveProxy) local MobsProxy = require(ServerStorage.Proxy.MobsProxy) +local ItemProxy = require(ServerStorage.Proxy.ItemProxy) local TypeList = require(ServerStorage.Base.TypeList) --> Dependencies @@ -183,7 +184,6 @@ end -- 挑战关卡(挑战副本用另一个函数) function LevelProxy:ChallengeLevel(Player: Player, LevelId: number) - print("挑战关卡", LevelId) local LevelData = Utils:GetIdDataFromJson(JsonLevel, LevelId) if not LevelData then warn("Level Data not found", LevelId) return end -- 给前端传数据,做表现 @@ -268,6 +268,20 @@ function LevelProxy:ChallengeEnd(Player: Player, result: boolean) -- 判断玩家是否通关 if result then + local levelData = Utils:GetIdDataFromJson(JsonLevel, LevelProxy.pData[Player.UserId].LevelId) + -- 防止之后失败重复添加奖励 + if ArchiveProxy.pData[Player.UserId][STORE_NAME].Progress.Main == LevelProxy.pData[Player.UserId].LevelId then + -- 添加首次通关奖励 + if levelData.finishRewards then + for i = 1, #levelData.finishRewards, 2 do + local itemId = levelData.finishRewards[i] + local itemCount = levelData.finishRewards[i + 1] + ItemProxy:AddItem(Player, itemId, itemCount) + print("添加首次通关奖励", itemId, itemCount) + end + end + end + ChangeValue(Player, ProgressFolder, "Main", LevelProxy.pData[Player.UserId].LevelId + 1) else local IsBoss = LevelProxy.pData[Player.UserId].IsBoss diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau b/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau index a0fd818..8304845 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/PlayerAI.luau @@ -47,6 +47,7 @@ function PlayerAI.new(Player: Player, PlayerRole: TypeList.Character) self.Player = Player self.ExecutingState = false self.PlayerControling = false + self.ExecutingBehaviour = nil self.LastTime = 0 self.Counter = 0 @@ -63,6 +64,12 @@ function PlayerAI.new(Player: Player, PlayerRole: TypeList.Character) self.PlayerControlCon = RE_PlayerAI.OnServerEvent:Connect(function(Player: Player, ControlState: boolean) if Player ~= self.Player then return end self.PlayerControling = ControlState + + -- 打断正在执行的行为 + if self.ExecutingBehaviour then + self.ExecutingBehaviour:StopExecute() + self.ExecutingState = false + end end) return self end @@ -72,6 +79,7 @@ function PlayerAI:Update() local maxPriority = 0 local bestBehaviour = nil local bestCheckData = nil + self.ExecutingBehaviour = nil for _, behaviour in self.BehaviourList do local priority, checkData = behaviour:Check(self.Character) @@ -83,6 +91,7 @@ function PlayerAI:Update() end if bestBehaviour and maxPriority > 0 then + self.ExecutingBehaviour = bestBehaviour bestBehaviour:Execute(bestCheckData) end end @@ -134,6 +143,8 @@ end function PlayerAI:ClearAllBehaviour() for _, behaviour in self.BehaviourList do behaviour:Destroy() end self.BehaviourList = {} + self.ExecutingBehaviour = nil + self.ExecutingState = false end -- 销毁AI diff --git a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau index 8bf3b1a..2c016b3 100644 --- a/src/ServerStorage/Proxy/PlayerFightProxy/init.luau +++ b/src/ServerStorage/Proxy/PlayerFightProxy/init.luau @@ -157,10 +157,11 @@ function PlayerFightProxy:UpdatePlayerFightData(Player: Player) -- 针对百分比特殊属性直接进行计算修改 if AttributesData["hpRate"] then - AttributesData["hp"] = math.floor(AttributesData["hp"] * AttributesData["hpRate"] / 100) + AttributesData["hp"] = math.floor(AttributesData["hp"] * (1 + AttributesData["hpRate"] / 100)) + AttributesData["maxhp"] = AttributesData["hp"] end - if AttributesData["atkRate"] then - AttributesData["atk"] = math.floor(AttributesData["atk"] * AttributesData["atkRate"] / 100) + if AttributesData["attackRate"] then + AttributesData["attack"] = math.floor(AttributesData["attack"] * (1 + AttributesData["attackRate"] / 100)) end -- 更新玩家属性 diff --git a/src/ServerStorage/Proxy/PlayerInfoProxy.luau b/src/ServerStorage/Proxy/PlayerInfoProxy.luau index 4959fdc..cb1b0cd 100644 --- a/src/ServerStorage/Proxy/PlayerInfoProxy.luau +++ b/src/ServerStorage/Proxy/PlayerInfoProxy.luau @@ -218,6 +218,9 @@ end function PlayerInfoProxy:ChangeItemCount(Player: Player, ItemId: number, ItemCount: number) if not Player or not ItemId or not ItemCount then warn('添加物品失败: ' , Player.Name, ItemId, ItemCount) return end + -- 转换为字符串,存储为字典 + local ItemId = tostring(ItemId) + local playerInfoData = ArchiveProxy.pData[Player.UserId][STORE_NAME].Items local isNew = false if not playerInfoData[ItemId] then @@ -231,15 +234,15 @@ function PlayerInfoProxy:ChangeItemCount(Player: Player, ItemId: number, ItemCou local ItemsFolder = GetPlayerInfoFolder(Player):FindFirstChild("Items") if isNew then CreateInfoInstance(Player, ItemsFolder, ItemId, "NumberValue") - else - ChangeInfoInstance(Player, ItemsFolder, ItemId, playerInfoData[ItemId]) end + ChangeInfoInstance(Player, ItemsFolder, ItemId, playerInfoData[ItemId]) return true, playerInfoData[ItemId] end -- 判断是否拥有足够物品 function PlayerInfoProxy:HasEnoughItem(Player: Player, ItemId: number, ItemCount: number) if not Player or not ItemId or not ItemCount then warn('添加物品失败: ' .. Player.Name .. ' ' .. ItemId .. ' ' .. ItemCount) return end + ItemId = tostring(ItemId) local playerInfoData = ArchiveProxy.pData[Player.UserId][STORE_NAME].Items if not playerInfoData[ItemId] then return false end return playerInfoData[ItemId] >= ItemCount @@ -248,6 +251,7 @@ end -- 获取物品数量 function PlayerInfoProxy:GetItemCount(Player: Player, ItemId: number) if not Player or not ItemId then warn('获取物品数量失败: ' , Player.Name, ItemId) return end + ItemId = tostring(ItemId) local playerInfoData = ArchiveProxy.pData[Player.UserId][STORE_NAME].Items if not playerInfoData[ItemId] then return 0 end return playerInfoData[ItemId] @@ -271,6 +275,7 @@ function PlayerInfoProxy:MakeForge(Player: Player, EquipmentId: number, Count: n -- 判断金钱是否足够 local MaxForgeLv = Utils:GetMaxIdFromJson(JsonForge) local ShouldCostMoney = 0 + local ForgeItemId = 2 for i = 1, Count do -- 读取等级并且做最大值限制 local ForgeLv = ArchiveProxy.pData[Player.UserId][STORE_NAME]["Stats"].forge @@ -278,6 +283,8 @@ function PlayerInfoProxy:MakeForge(Player: Player, EquipmentId: number, Count: n local ForgeData = Utils:GetIdDataFromJson(JsonForge, ForgeLv) ShouldCostMoney = ShouldCostMoney + ForgeData["cost"][2] + -- 临时写的,其实没啥必要 + ForgeItemId = ForgeData["cost"][1] if ForgeLv > MaxForgeLv then ForgeLv = MaxForgeLv @@ -285,12 +292,12 @@ function PlayerInfoProxy:MakeForge(Player: Player, EquipmentId: number, Count: n ForgeLv = ForgeLv + 1 end end - if not self:HasEnoughItem(Player, 1, ShouldCostMoney) then + if not self:HasEnoughItem(Player, ForgeItemId, ShouldCostMoney) then RE_PlayerTip:FireClient(Player, "金钱不足") return end -- 扣钱 - self:ChangeItemCount(Player, 1, -ShouldCostMoney) + self:ChangeItemCount(Player, ForgeItemId, -ShouldCostMoney) -- 生成对应装备 local ResultData = {} diff --git a/src/StarterPlayerScripts/ClientMain/Helper.luau b/src/StarterPlayerScripts/ClientMain/Helper.luau index 9350299..d76e0fc 100644 --- a/src/StarterPlayerScripts/ClientMain/Helper.luau +++ b/src/StarterPlayerScripts/ClientMain/Helper.luau @@ -17,7 +17,8 @@ UserInputService.InputBegan:Connect(function(input, gameProcessed) elseif input.KeyCode == Enum.KeyCode.J then RE_PlayerHelper:FireServer("AddItem", {1, 1000}) elseif input.KeyCode == Enum.KeyCode.K then - RE_UpgradeAttributes:FireServer(1) + -- RE_UpgradeAttributes:FireServer(1) + RE_PlayerHelper:FireServer("AddItem", {2, 1000}) elseif input.KeyCode == Enum.KeyCode.L then RE_UpgradeAttributes:FireServer(2) elseif input.KeyCode == Enum.KeyCode.M then diff --git a/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/AttributeShow.luau b/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/AttributeShow.luau index f8fad43..db855fa 100644 --- a/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/AttributeShow.luau +++ b/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/AttributeShow.luau @@ -24,17 +24,20 @@ end function AttributeShow:Refresh() local attributeData = Utils:GetSpecialKeyDataFromJson(JsonAttributes, "effectAttribute", self.Data.attribute) + + -- 基础属性icon显示 if attributeData.id == 14 or attributeData.id == 15 or attributeData.id == 16 then self.Variables._imgIcon.Image = Localization:GetImageData(attributeData.iconId) else self.Variables._imgIcon:Destroy() self.Variables._imgIcon = nil end - self.Variables._tmpAttributeName.Text = self.Data.attribute - self.UIRoot.LayoutOrder = 1000 - attributeData.id + + self.Variables._tmpAttributeName.Text = Localization:GetLanguageData(attributeData.nameId) + self.UIRoot.LayoutOrder = attributeData.id if attributeData.type == 2 then - self.Variables._tmpValue.Text = string.format("%.2f%%", self.Data.value / 100) + self.Variables._tmpValue.Text = string.format("%.2f", self.Data.value / 100) else self.Variables._tmpValue.Text = self.Data.value end diff --git a/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau index 093bac8..87213cc 100644 --- a/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/EquipmentDetailWindow/init.luau @@ -187,7 +187,7 @@ function EquipmentDetailWindow:OnOpenWindow() -- 装备信息 local equipmentInstance = Utils:GetPlayerDataFolder(LocalPlayer):FindFirstChild("Equipment"):FindFirstChild(self.Data.EquipmentUniqueId) - local equipmentData = Utils:GetIdDataFromJson(JsonItemProp, equipmentInstance:GetAttribute("id")) + local equipmentData = Utils:GetIdDataFromJson(JsonItemProp, equipmentInstance:GetAttribute("orgId")) self.Variables["_imgIcon"].Image = Localization:GetImageData(equipmentData.iconId) self.Variables["_tmpName"].Text = Localization:GetLanguageData(equipmentData.textId) self.Variables["_tmpQuality"].Text = equipmentInstance:GetAttribute("quality") diff --git a/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/AttributeShow.luau b/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/AttributeShow.luau index 4f41d03..e0348a4 100644 --- a/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/AttributeShow.luau +++ b/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/AttributeShow.luau @@ -23,11 +23,11 @@ end function AttributeShow:Refresh() local attributeData = Utils:GetSpecialKeyDataFromJson(JsonAttributes, "effectAttribute", self.Data.attribute) - self.Variables._tmpAttributeName.Text = self.Data.attribute - self.UIRoot.LayoutOrder = 1000 - attributeData.id + self.Variables._tmpAttributeName.Text = Localization:GetLanguageData(attributeData.nameId) + self.UIRoot.LayoutOrder = attributeData.id if attributeData.type == 2 then - self.Variables._tmpValue.Text = string.format("%.2f%%", self.Data.value / 100) + self.Variables._tmpValue.Text = string.format("%.2f", self.Data.value / 100) else self.Variables._tmpValue.Text = self.Data.value end diff --git a/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/init.luau index 09a9b93..263daff 100644 --- a/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/GetEquipmentsWindow/init.luau @@ -105,8 +105,8 @@ function GetEquipmentsWindow:Init(UIManager: table, Data: table?) ["_tmpQuality"] = 0, ["__listEquipments"] = 0, - ["_btnLeft"] = 0, - ["_btnRight"] = 0, + -- ["_btnLeft"] = 0, + -- ["_btnRight"] = 0, ["_btnClose"] = 0, } @@ -130,8 +130,8 @@ end function GetEquipmentsWindow:ShowDetail(equipmentInstance: Instance) local equipmentData = Utils:GetIdDataFromJson(JsonItemProp, equipmentInstance:GetAttribute("orgId")) - self.Variables["_tmpName"].Text = Localization:GetLanguageData(equipmentData.textId) - self.Variables["_tmpQuality"].Text = equipmentInstance:GetAttribute("quality") + self.Variables["_tmpName"].Text = Localization:GetColoredTextByQuality(equipmentInstance:GetAttribute("quality"), Localization:GetLanguageData(equipmentData.nameId)) + self.Variables["_tmpQuality"].Text = Localization:GetColoredEquipmentQualityDesc(equipmentInstance:GetAttribute("quality")) local baseAttributes = equipmentInstance:FindFirstChild("attributes"):GetAttributes() local exAttributes = equipmentInstance:FindFirstChild("exAttributes"):GetAttributes() diff --git a/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau index 63b3e82..83039a6 100644 --- a/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau @@ -18,6 +18,57 @@ local LocalPlayer = game:GetService("Players").LocalPlayer -------------------------------------------------------------------------------- +-- 简单的递增消耗计算函数 +local function GetIncrementalCost(currentLevel: number, configData: table, costIndex: number?) + costIndex = costIndex or 2 -- 默认使用第二个消耗值 + + -- 获取配置表的最大ID + local maxId = Utils:GetMaxIdFromJson(configData) + + -- 如果当前等级超过最大ID,使用最大ID的消耗配置 + local effectiveLevel = math.min(currentLevel, maxId) + + -- 根据有效等级获取对应的消耗配置 + local levelData = Utils:GetIdDataFromJson(configData, effectiveLevel) + if not levelData or not levelData.cost then + warn("无法获取等级", effectiveLevel, "的消耗配置") + return 0 + end + + -- 确保costIndex在有效范围内 + if costIndex > #levelData.cost then + warn("消耗索引超出范围:", costIndex, "最大索引:", #levelData.cost) + return 0 + end + + return levelData.cost[costIndex] +end + +-- 计算可以进行的操作次数(累加消耗) +local function GetOperationCount(currentValue: number, currentLevel: number, configData: table, costIndex: number?) + local remainingMoney = currentValue + local forgeCount = 0 + local currentForgeLevel = currentLevel + local maxId = Utils:GetMaxIdFromJson(configData) + + -- 循环计算每次锻造的消耗,直到货币不足 + while remainingMoney > 0 do + local cost = GetIncrementalCost(currentForgeLevel, configData, costIndex) + if cost <= 0 then break end -- 无效消耗 + if remainingMoney >= cost then + remainingMoney = remainingMoney - cost + forgeCount = forgeCount + 1 + currentForgeLevel = currentForgeLevel + 1 + else + break -- 货币不足,停止计算 + end + end + + return forgeCount +end + +-------------------------------------------------------------------------------- + local MainWindow = {} MainWindow.__index = MainWindow setmetatable(MainWindow, {__index = UIWindow}) @@ -40,6 +91,9 @@ function MainWindow:Init(UIManager: table, Data: table?) ["_goForgeFill"] = 0, ["_tmpForgeMoney"] = 0, ["_tmpForgeTime"] = 0, + + -- 锻造临时红点 + ["_tmpRedCreate"] = 0, } self.UIRootName = "ui_w_main" self.UIParentName = UIEnums.UIParent.UIRoot @@ -75,26 +129,31 @@ end -- 手动点击按钮,挑战boss function MainWindow:OnClickChallengeBoss() RE_ChallengeBoss:FireServer() - self.Variables["_btnChallengeBoss"].Visible = false end function MainWindow:SetShowForgeBar(nowForgeTime : number, moneyValue: number) local maxForgeId = Utils:GetMaxIdFromJson(JsonForge) - local forgeTime = nowForgeTime > maxForgeId and maxForgeId or nowForgeTime - local forgeData = Utils:GetIdDataFromJson(JsonForge, forgeTime) + local forgeTime = math.min(nowForgeTime, maxForgeId) + + -- 获取当前锻造次数对应的消耗(用于UI显示) + local currentCost = GetIncrementalCost(forgeTime, JsonForge, 2) + + -- 进度条 - 使用当前锻造次数对应的消耗显示 + self.Variables["_goForgeFill"].Size = UDim2.new(math.min(moneyValue / currentCost, 1), 0, 1, 0) + self.Variables["_tmpForgeMoney"].Text = string.format("%d/%d", moneyValue, currentCost) - -- 进度条 - self.Variables["_goForgeFill"].Size = UDim2.new(math.min(moneyValue / forgeData.cost[2], 1), 0, 1, 0) - self.Variables["_tmpForgeMoney"].Text = string.format("%d/%d", moneyValue, forgeData.cost[2]) - - -- 右上角红点 - local timeRecorder = math.ceil(moneyValue / forgeData.cost[2]) + -- 右上角红点 - 使用累加消耗计算可以进行的操作次数 + local timeRecorder = GetOperationCount(moneyValue, forgeTime, JsonForge, 2) if timeRecorder > 0 then self.Variables["_tmpForgeTime"].Visible = true + self.Variables["_tmpRedCreate"].Visible = true self.Variables["_tmpForgeTime"].Text = timeRecorder + self.Variables["_goForgeFill"].BackgroundColor3 = Color3.fromRGB(255, 255, 0) else self.Variables["_tmpForgeTime"].Visible = false + self.Variables["_tmpRedCreate"].Visible = false + self.Variables["_goForgeFill"].BackgroundColor3 = Color3.fromRGB(12, 227, 209) end end @@ -147,7 +206,7 @@ function MainWindow:OnOpenWindow() local forgeInstance = playerInfoFolder:WaitForChild("Stats"):WaitForChild("forge") local itemFolder = playerInfoFolder:WaitForChild("Items") - local hasItem = playerInfoFolder:FindFirstChild("2") + local hasItem = itemFolder:FindFirstChild("2") -- 设置锻造货币变动链接 local function SetForgeCostChange() @@ -161,25 +220,25 @@ function MainWindow:OnOpenWindow() -- 后续变动设置 SetForgeCostChange() -- 初始化设置 - -- ceshi1 self:SetShowForgeBar(forgeInstance.Value, hasItem.Value) else -- 没有货币时监听设置 local addCon addCon = itemFolder.ChildAdded:Connect(function(child) if child.Name == "2" then - self:SetShowForgeBar(forgeInstance.Value, child.Value) + hasItem = child + self:SetShowForgeBar(forgeInstance.Value, hasItem.Value) addCon:Disconnect() addCon = nil - + -- 设置显示 SetForgeCostChange() end end) table.insert(self.Connections, addCon) + -- 初始化设置 + self:SetShowForgeBar(forgeInstance.Value, 0) end end - - return MainWindow \ No newline at end of file