diff --git a/excel/attribute.xlsx b/excel/attribute.xlsx index d7a3d12..3416d17 100644 Binary files a/excel/attribute.xlsx and b/excel/attribute.xlsx differ diff --git a/excel/cha.xlsx b/excel/cha.xlsx index 4e1de38..9fdfa58 100644 Binary files a/excel/cha.xlsx and b/excel/cha.xlsx differ diff --git a/excel/enemy.xlsx b/excel/enemy.xlsx index a668a16..d0db41a 100644 Binary files a/excel/enemy.xlsx and b/excel/enemy.xlsx differ diff --git a/excel/equipment.xlsx b/excel/equipment.xlsx index 76d1272..3efc7da 100644 Binary files a/excel/equipment.xlsx and b/excel/equipment.xlsx differ diff --git a/excel/global.xlsx b/excel/global.xlsx index 6f258e0..56ed5e1 100644 Binary files a/excel/global.xlsx and b/excel/global.xlsx differ diff --git a/excel/item.xlsx b/excel/item.xlsx index c8af27d..8e4432d 100644 Binary files a/excel/item.xlsx and b/excel/item.xlsx differ diff --git a/excel/level.xlsx b/excel/level.xlsx index c18fa4a..eb0604a 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 d9d3e22..e9913da 100644 --- a/src/ReplicatedStorage/Json/Attributes.json +++ b/src/ReplicatedStorage/Json/Attributes.json @@ -1,6 +1,6 @@ [ -{"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":1,"type":1,"effectAttribute":"attack","battleValue":[1,15],"iconId":1,"nameId":201}, +{"id":2,"type":1,"effectAttribute":"hp","battleValue":[1,1],"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}, diff --git a/src/ReplicatedStorage/Json/AttributesUpgrade.json b/src/ReplicatedStorage/Json/AttributesUpgrade.json index c238de5..cacf3b6 100644 --- a/src/ReplicatedStorage/Json/AttributesUpgrade.json +++ b/src/ReplicatedStorage/Json/AttributesUpgrade.json @@ -1,13 +1,13 @@ [ -{"id":1,"type":1,"effectAttribute":"attack","cost":[1,10,20],"lvAdd":[100,845],"battleValueLimit":[5,20],"maxLv":null}, -{"id":2,"type":1,"effectAttribute":"hp","cost":[1,10,20],"lvAdd":[2000,845],"battleValueLimit":[5,20],"maxLv":null}, -{"id":3,"type":1,"effectAttribute":"swordAtk","cost":[1,10,20],"lvAdd":[10,20],"battleValueLimit":[5,20],"maxLv":null}, -{"id":4,"type":1,"effectAttribute":"swordWearBase","cost":[1,10,20],"lvAdd":[10,20],"battleValueLimit":[5,20],"maxLv":null}, -{"id":5,"type":1,"effectAttribute":"swordWearSpe","cost":[1,10,20],"lvAdd":[10,20],"battleValueLimit":[5,20],"maxLv":null}, -{"id":10,"type":2,"effectAttribute":"wearNumber","cost":[1,10,20],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":4}, -{"id":11,"type":2,"effectAttribute":"abilityNumber","cost":[1,10,20],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, -{"id":12,"type":2,"effectAttribute":"extraAttributeNumber","cost":[1,10,20],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, -{"id":13,"type":2,"effectAttribute":"elementNumber","cost":[1,10,20],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, -{"id":14,"type":2,"effectAttribute":"elementDefNumber","cost":[1,10,20],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, -{"id":15,"type":2,"effectAttribute":"gemNumber","cost":[1,10,20],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3} +{"id":1,"type":1,"effectAttribute":"attack","cost":[1,300,0],"lvAdd":[40,10985],"battleValueLimit":[5,20],"maxLv":null}, +{"id":2,"type":1,"effectAttribute":"hp","cost":[1,300,0],"lvAdd":[600,10985],"battleValueLimit":[5,20],"maxLv":null}, +{"id":3,"type":1,"effectAttribute":"swordAtk","cost":[1,300,0],"lvAdd":[10,0],"battleValueLimit":[5,20],"maxLv":null}, +{"id":4,"type":1,"effectAttribute":"swordWearBase","cost":[1,300,0],"lvAdd":[10,0],"battleValueLimit":[5,20],"maxLv":null}, +{"id":5,"type":1,"effectAttribute":"swordWearSpe","cost":[1,300,0],"lvAdd":[10,0],"battleValueLimit":[5,20],"maxLv":null}, +{"id":10,"type":2,"effectAttribute":"wearNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":4}, +{"id":11,"type":2,"effectAttribute":"abilityNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, +{"id":12,"type":2,"effectAttribute":"extraAttributeNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, +{"id":13,"type":2,"effectAttribute":"elementNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, +{"id":14,"type":2,"effectAttribute":"elementDefNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3}, +{"id":15,"type":2,"effectAttribute":"gemNumber","cost":[1,300,0],"lvAdd":[1,1],"battleValueLimit":[5,20],"maxLv":3} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Character.json b/src/ReplicatedStorage/Json/Character.json index a2b0cd4..f74367b 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":100} +{"id":1,"name":1,"attack":40,"hp":600,"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 892a285..e7e6eeb 100644 --- a/src/ReplicatedStorage/Json/Enemy.json +++ b/src/ReplicatedStorage/Json/Enemy.json @@ -1,5 +1,5 @@ [ -{"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":1,"type":1,"name":1,"attack":10,"hp":150,"walkSpeed":8,"attackSpeed":1,"model":"Thief"}, +{"id":2,"type":1,"name":2,"attack":10,"hp":150,"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 9e284fa..8bfd732 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,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} +{"id":40000,"type":1,"name":40000,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40001,"type":1,"name":40001,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40002,"type":1,"name":40002,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40003,"type":1,"name":40003,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40004,"type":1,"name":40004,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40005,"type":1,"name":40005,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40006,"type":1,"name":40006,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40007,"type":1,"name":40007,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40008,"type":1,"name":40008,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40009,"type":1,"name":40009,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40010,"type":1,"name":40010,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40011,"type":1,"name":40011,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40012,"type":1,"name":40012,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40013,"type":1,"name":40013,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40014,"type":1,"name":40014,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300}, +{"id":40015,"type":1,"name":40015,"attributes":[14,200,10,15,200,10,16,150,0],"modelName":"Zeus","recycle":300} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/Forge.json b/src/ReplicatedStorage/Json/Forge.json index c7d41d2..955ee03 100644 --- a/src/ReplicatedStorage/Json/Forge.json +++ b/src/ReplicatedStorage/Json/Forge.json @@ -3,27 +3,50 @@ {"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]} +{"id":5,"cost":[2,50]}, +{"id":6,"cost":[2,60]}, +{"id":7,"cost":[2,70]}, +{"id":8,"cost":[2,80]}, +{"id":9,"cost":[2,90]}, +{"id":10,"cost":[2,100]}, +{"id":11,"cost":[2,110]}, +{"id":12,"cost":[2,120]}, +{"id":13,"cost":[2,130]}, +{"id":14,"cost":[2,140]}, +{"id":15,"cost":[2,150]}, +{"id":16,"cost":[2,160]}, +{"id":17,"cost":[2,170]}, +{"id":18,"cost":[2,180]}, +{"id":19,"cost":[2,190]}, +{"id":20,"cost":[2,200]}, +{"id":21,"cost":[2,210]}, +{"id":22,"cost":[2,220]}, +{"id":23,"cost":[2,230]}, +{"id":24,"cost":[2,240]}, +{"id":25,"cost":[2,250]}, +{"id":26,"cost":[2,260]}, +{"id":27,"cost":[2,270]}, +{"id":28,"cost":[2,280]}, +{"id":29,"cost":[2,290]}, +{"id":30,"cost":[2,300]}, +{"id":31,"cost":[2,310]}, +{"id":32,"cost":[2,320]}, +{"id":33,"cost":[2,330]}, +{"id":34,"cost":[2,340]}, +{"id":35,"cost":[2,350]}, +{"id":36,"cost":[2,360]}, +{"id":37,"cost":[2,370]}, +{"id":38,"cost":[2,380]}, +{"id":39,"cost":[2,390]}, +{"id":40,"cost":[2,400]}, +{"id":41,"cost":[2,410]}, +{"id":42,"cost":[2,420]}, +{"id":43,"cost":[2,430]}, +{"id":44,"cost":[2,440]}, +{"id":45,"cost":[2,450]}, +{"id":46,"cost":[2,460]}, +{"id":47,"cost":[2,470]}, +{"id":48,"cost":[2,480]}, +{"id":49,"cost":[2,490]}, +{"id":50,"cost":[2,500]} ] \ No newline at end of file diff --git a/src/ReplicatedStorage/Json/ItemProp.json b/src/ReplicatedStorage/Json/ItemProp.json index 60ae155..e01f5af 100644 --- a/src/ReplicatedStorage/Json/ItemProp.json +++ b/src/ReplicatedStorage/Json/ItemProp.json @@ -1,6 +1,6 @@ [ -{"id":1,"type":1,"typeArgs":[],"quality":4,"iconId":1,"nameId":10001,"textId":20001,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, -{"id":2,"type":1,"typeArgs":[],"quality":4,"iconId":2,"nameId":10002,"textId":20002,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":1,"type":1,"typeArgs":[],"quality":1,"iconId":1,"nameId":10001,"textId":20001,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, +{"id":2,"type":1,"typeArgs":[],"quality":2,"iconId":2,"nameId":10002,"textId":20002,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, {"id":3,"type":1,"typeArgs":[],"quality":2,"iconId":3,"nameId":10003,"textId":20003,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, {"id":11,"type":1,"typeArgs":[],"quality":1,"iconId":11,"nameId":10011,"textId":20011,"buyPrice":[],"sellPrice":[],"use":[],"showPackage":null}, {"id":10000,"type":4,"typeArgs":[],"quality":1,"iconId":12,"nameId":20000,"textId":30000,"buyPrice":[11,10],"sellPrice":[11,10],"use":[],"showPackage":null}, diff --git a/src/ReplicatedStorage/Json/Level.json b/src/ReplicatedStorage/Json/Level.json index f290f64..7d55442 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]],"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":[]} +{"id":1,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1],[10,1,1],[10,1,1],[10,1,1]],"finishRewards":[50000,1]}, +{"id":2,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1],[10,1,1],[10,1,1],[10,1,1]],"finishRewards":[50001,1]}, +{"id":3,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50002,1]}, +{"id":4,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50003,1]}, +{"id":5,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1000,1]],"finishRewards":[50004,1]}, +{"id":6,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50005,1]}, +{"id":7,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50006,1]}, +{"id":8,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50007,1]}, +{"id":9,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50008,1]}, +{"id":10,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1000,1]],"finishRewards":[50009,1]}, +{"id":11,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50010,1]}, +{"id":12,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50011,1]}, +{"id":13,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50012,1]}, +{"id":14,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50013,1]}, +{"id":15,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1000,1]],"finishRewards":[50014,1]}, +{"id":16,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[50015,1]}, +{"id":17,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":18,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":19,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":20,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":21,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":22,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":23,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":24,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":25,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":26,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":27,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":28,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":29,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":30,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":31,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":32,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":33,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":34,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":35,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":36,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":37,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":38,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":39,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":40,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":41,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":42,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":43,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":44,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":45,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1000,1]],"finishRewards":[]}, +{"id":46,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":47,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":48,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":49,"type":1,"timeLimit":null,"atkBonus":1000,"hpBonus":1000,"wave":[[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1],[10,1,1,50,1,1]],"finishRewards":[]}, +{"id":50,"type":2,"timeLimit":60,"atkBonus":1000,"hpBonus":1000,"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 278fe58..987b3db 100644 --- a/src/ReplicatedStorage/Json/Param.json +++ b/src/ReplicatedStorage/Json/Param.json @@ -1,7 +1,7 @@ [ {"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":2,"key":"level_get_bonus","intValue":null,"stringValue":null,"intArray":[5,0]}, +{"id":3,"key":"mob_died_get","intValue":null,"stringValue":null,"intArray":[2,4]}, {"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/Tools/Localization.luau b/src/ReplicatedStorage/Tools/Localization.luau index bc89bcb..18f8b34 100644 --- a/src/ReplicatedStorage/Tools/Localization.luau +++ b/src/ReplicatedStorage/Tools/Localization.luau @@ -32,6 +32,17 @@ local QUALITY_COLOR = { [8] = Color3.fromRGB(255, 0, 255), -- 粉色 } +local QUALITY_BG_COLOR = { + [1] = Color3.fromRGB(255, 255, 255), -- 白色 + [2] = Color3.fromRGB(66, 209, 66), -- 绿色 + [3] = Color3.fromRGB(78, 164, 226), -- 蓝色 + [4] = Color3.fromRGB(159, 71, 221), -- 紫色 + [5] = Color3.fromRGB(223, 159, 71), -- 橙色 + [6] = Color3.fromRGB(233, 78, 78), -- 红色 + [7] = Color3.fromRGB(255, 215, 0), -- 金色 + [8] = Color3.fromRGB(236, 77, 236), -- 粉色 +} + -- 获取本地Json文件 function Localization:GetLocalizationJson() if SystemLocaleId == "zh-CN" then @@ -99,4 +110,14 @@ function Localization:GetColoredEquipmentQualityDesc(Quality: number): string return self:GetColoredTextByQuality(Quality, language) end +-- 根据quality获取装备品质描述(带颜色) +function Localization:GetQualityBgColor(Quality: number): string + return QUALITY_BG_COLOR[Quality] +end + +-- 获取黑色贴图 +function Localization:GetBlackTexture(): string + return "rbxassetid://87376908468146" +end + return Localization \ No newline at end of file diff --git a/src/ServerStorage/Proxy/EquipmentProxy.luau b/src/ServerStorage/Proxy/EquipmentProxy.luau index a88698c..182e883 100644 --- a/src/ServerStorage/Proxy/EquipmentProxy.luau +++ b/src/ServerStorage/Proxy/EquipmentProxy.luau @@ -20,6 +20,7 @@ local JsonParam = require(ReplicatedStorage.Json.Param) --> Events local RE_PlayerTip = ReplicatedStorage.Events.RE_PlayerTip local RE_WearEquipment = ReplicatedStorage.Events.RE_WearEquipment +local RE_RecycleEquipment = ReplicatedStorage.Events.RE_RecycleEquipment --> Constants local STORE_NAME = "Equipment" @@ -232,7 +233,7 @@ function EquipmentProxy:AddEquipment(Player: Player, EquipmentId: number) return equipmentInstance end --- 回收装备 +-- 回收单件装备 function EquipmentProxy:RecycleEquipment(Player: Player, EquipmentId: number) local pData = Utils:GetPlayerDataFolder(Player) if not pData then return end @@ -242,19 +243,34 @@ function EquipmentProxy:RecycleEquipment(Player: Player, EquipmentId: number) -- 根据对应功能模块进行对应回收 local AbilityProxy = require(ServerStorage.Proxy.AbilityProxy) - AbilityProxy:RecycleAbility(Player, EquipmentData.id) + -- AbilityProxy:RecycleAbility(Player, EquipmentData.id) local GemProxy = require(ServerStorage.Proxy.GemProxy) - GemProxy:RecycleGem(Player, EquipmentData.id) + -- GemProxy:RecycleGem(Player, EquipmentData.id) -- 回收装备返回金币 -- TODO:处理关卡金币产出加成和词条加成 - PlayerInfoProxy:ChangeItem(Player, 1, EquipmentData.recycle) + local rewardData = {["1"] = EquipmentData.recycle} + PlayerInfoProxy:ChangeItemCount(Player, 1, EquipmentData.recycle) + + ArchiveProxy.pData[Player.UserId][STORE_NAME][EquipmentId] = nil - ArchiveProxy.pData[Player.UserId][EquipmentId] = nil local EquipmentInstance = GetPlayerEquipmentFolder(Player):FindFirstChild(EquipmentId) if EquipmentInstance then EquipmentInstance:Destroy() end + return rewardData +end + +-- 批量回收装备 +function EquipmentProxy:RecycleEquipmentList(Player: Player, EquipmentUniqueIds: table) + local rewardData = {} + for _, EquipmentUniqueId in EquipmentUniqueIds do + local newRewardData = EquipmentProxy:RecycleEquipment(Player, EquipmentUniqueId) + if newRewardData then + Utils:TableSafeAddTableValue(rewardData, newRewardData) + end + end + return rewardData end -- 穿戴装备 @@ -381,6 +397,9 @@ RE_WearEquipment.OnServerEvent:Connect(function(Player: Player, EquipmentUniqueI EquipmentProxy:WearEquipment(Player, EquipmentUniqueId, SlotId) end end) +RE_RecycleEquipment.OnServerEvent:Connect(function(Player: Player, EquipmentUniqueIds: table) + EquipmentProxy:RecycleEquipmentList(Player, EquipmentUniqueIds) +end) return EquipmentProxy \ No newline at end of file diff --git a/src/ServerStorage/Proxy/PlayerInfoProxy.luau b/src/ServerStorage/Proxy/PlayerInfoProxy.luau index cb1b0cd..f8a402e 100644 --- a/src/ServerStorage/Proxy/PlayerInfoProxy.luau +++ b/src/ServerStorage/Proxy/PlayerInfoProxy.luau @@ -325,7 +325,12 @@ function PlayerInfoProxy:GetPlayerUpgradeAttributes(Player: Player) for AttributeId, AttributeLv in playerInfoData.AttributesUpgrade do local attributeData = Utils:GetIdDataFromJson(JsonAttributesUpgrade, AttributeId) -- attributes[attributeData["effectAttribute"]] = attributeData["lvAdd"][1] + (AttributeLv - 1) * attributeData["lvAdd"][2] - attributes[attributeData["effectAttribute"]] = math.floor(attributeData["lvAdd"][1] ^ (AttributeLv - 1) * attributeData["lvAdd"][2] / 10000) + local effectAttribute = attributeData["effectAttribute"] + if effectAttribute == "attack" or effectAttribute == "hp" then + attributes[effectAttribute] = math.floor(attributeData["lvAdd"][1] * (AttributeLv ^ (attributeData["lvAdd"][2] / 10000)) - attributeData["lvAdd"][1]) + else + attributes[effectAttribute] = math.floor(attributeData["lvAdd"][1] ^ (AttributeLv - 1) * attributeData["lvAdd"][2] / 10000) + end end return attributes end diff --git a/src/StarterPlayerScripts/UI/Common/ItemShow.luau b/src/StarterPlayerScripts/UI/Common/ItemShow.luau new file mode 100644 index 0000000..c939e3b --- /dev/null +++ b/src/StarterPlayerScripts/UI/Common/ItemShow.luau @@ -0,0 +1,55 @@ +local ItemShow = {} +ItemShow.__index = ItemShow + +local ReplicatedStorage = game:GetService("ReplicatedStorage") + +local Utils = require(ReplicatedStorage.Tools.Utils) +local Localization = require(ReplicatedStorage.Tools.Localization) +local JsonEquipment = require(ReplicatedStorage.Json.Equipment) +local JsonItemProp = require(ReplicatedStorage.Json.ItemProp) + +function ItemShow:Init(data: table) + local self = {} + self.Data = data + self.Variables = { + ["_btnClick"] = 0, + ["_imgIcon"] = 0, + ["_imgQuality"] = 0, + ["_tmpName"] = 0, + ["_tmpCount"] = 0, + } + self.Connections = {} + + setmetatable(self, ItemShow) + return self +end + +function ItemShow:Refresh() + local itemData = Utils:GetIdDataFromJson(JsonItemProp, self.Data.orgId) + self.Variables._imgIcon.Image = Localization:GetImageData(itemData.iconId) + self.Variables._imgQuality.BackgroundColor3 = Localization:GetQualityBgColor(itemData.quality) + self.Variables._tmpName.Text = Localization:GetLanguageData(itemData.nameId) + + -- 数量 + self.Variables._tmpCount.Text = self.Data.count or "" +end + +function ItemShow:OnInitFinish() + -- TODO: 之后做点击详情弹窗 + -- local con = self.Variables._btnClick.MouseButton1Click:Connect(function() + -- if self.Data == {} then + -- else + -- self.TopUI:ShowDetailData(self.Data.id) + -- end + -- end) + -- table.insert(self.Connections, con) +end + +function ItemShow:Destroy() + for k, v in pairs(self) do + self[k] = nil + end + self = nil +end + +return ItemShow \ No newline at end of file diff --git a/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau index 3fbae97..60dc902 100644 --- a/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/ChaWindow/init.luau @@ -34,6 +34,7 @@ function ChaWindow:Init(UIManager: table, Data: table?) ["_imgIcon"] = 0, ["_btnClose"] = 0, ["_btnBgClose"] = 0, + ["_btnRecycle"] = 0, } self.UIRootName = "ui_w_cha" self.UIParentName = UIEnums.UIParent.UIRoot @@ -95,6 +96,20 @@ function ChaWindow:AddInstanceData(configInstance: Instance, Data: table?) return data[parentName][secondName], parentName end +function ChaWindow:RemoveInstanceData(configInstance: Instance, Data: table?) + for key, data in pairs(self.Data.Wearing) do + if data.instance == configInstance then + return tostring(key), "Wearing" + end + end + for key, data in pairs(self.Data.Package) do + if data.instance == configInstance then + return tostring(key), "Package" + end + end + return nil +end + function ChaWindow:OnOpenWindow() UIWindow.OnOpenWindow(self) @@ -135,13 +150,12 @@ function ChaWindow:OnOpenWindow() end) local removeCon = DataFolder.ChildRemoved:Connect(function(child) - local parentName = self:RemoveInstanceData(child, data) + -- TODO: 这里清除逻辑不清晰,之后优化 + local key, parentName = self:RemoveInstanceData(child, self.Data) if parentName == "Wearing" then - local removeIndex = self.Variables["__listWeaing"]:RemoveData(data) - self.Data.Wearing[removeIndex] = {} + local removeIndex = self.Variables["__listWeaing"]:RemoveData(key) else - local removeIndex = self.Variables["__listWeaponPackage"]:RemoveData(data) - self.Data.Package[removeIndex] = {} + local removeIndex = self.Variables["__listWeaponPackage"]:RemoveData(key) end end) @@ -151,11 +165,15 @@ function ChaWindow:OnOpenWindow() local closeCon = self.Variables["_btnClose"].Activated:Connect(function() self.UIManager:CloseWindow(script.Name) end) + local recycleCon = self.Variables["_btnRecycle"].Activated:Connect(function() + self.UIManager:OpenWindow("RecycleWindow") + end) table.insert(self.Connections, addCon) table.insert(self.Connections, removeCon) table.insert(self.Connections, bgCloseCon) table.insert(self.Connections, closeCon) + table.insert(self.Connections, recycleCon) self.Variables["__listWeaponPackage"]:AddComponent(PackageShow) self.Variables["__listWeaing"]:AddComponent(WearingShow) diff --git a/src/StarterPlayerScripts/UI/Windows/CreateWindow/WeaponItem.luau b/src/StarterPlayerScripts/UI/Windows/CreateWindow/WeaponItem.luau index 309c4cd..f5ea701 100644 --- a/src/StarterPlayerScripts/UI/Windows/CreateWindow/WeaponItem.luau +++ b/src/StarterPlayerScripts/UI/Windows/CreateWindow/WeaponItem.luau @@ -8,6 +8,9 @@ local Localization = require(ReplicatedStorage.Tools.Localization) local Signal = require(ReplicatedStorage.Tools.Signal) local JsonItemProp = require(ReplicatedStorage.Json.ItemProp) +local JsonEquipment = require(ReplicatedStorage.Json.Equipment) + +local FolderEquipment = ReplicatedStorage:WaitForChild("Prefabs"):WaitForChild("Equipments") function WeaponItem:Init(data: table) local self = {} @@ -18,6 +21,7 @@ function WeaponItem:Init(data: table) ["_tmpQuality"] = 0, ["_btnClick"] = 0, ["_imgSelected"] = 0, + ["_imgView"] = 0, } self.SignalConnections = {} self.Connections = {} @@ -34,7 +38,27 @@ function WeaponItem:Refresh() local itemData = Utils:GetIdDataFromJson(JsonItemProp, self.Data.OrgId) self.Variables._imgIcon.Image = Localization:GetImageData(itemData.iconId) self.Variables._tmpName.Text = Localization:GetLanguageData(itemData.nameId) - self.Variables._tmpQuality.Text = self.Data.Quality + self.Variables._tmpQuality.Text = Localization:GetColoredEquipmentQualityDesc(self.Data.Quality) + + local equipmentData = Utils:GetIdDataFromJson(JsonEquipment, self.Data.OrgId) + -- 模型 + local part = FolderEquipment:FindFirstChild(equipmentData.modelName):Clone() + part.Handle.Position = Vector3.new(0, 0, 0) + part.Handle.CFrame = CFrame.new(0, 0, 0) * CFrame.Angles(math.rad(90), 0, 0) + part.Parent = self.Variables["_imgView"] + self.Prefab = part + + -- 相机 + local viewportCamera = Instance.new("Camera") + self.Variables["_imgView"].CurrentCamera = viewportCamera + viewportCamera.Parent = self.Variables["_imgView"] + viewportCamera.CFrame = CFrame.new(Vector3.new(0, 0, 6), part.Handle.Position) + self.ViewCamera = viewportCamera + + -- 如果图鉴没有,就设置成黑色的 + if self.Data.Timestamp == 0 then + part.Handle.Mesh.TextureId = Localization:GetBlackTexture() + end end function WeaponItem:OnInitFinish() diff --git a/src/StarterPlayerScripts/UI/Windows/CreateWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/CreateWindow/init.luau index c901c2e..b413f55 100644 --- a/src/StarterPlayerScripts/UI/Windows/CreateWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/CreateWindow/init.luau @@ -15,11 +15,42 @@ local Signal = require(ReplicatedStorage.Tools.Signal) --> Json local JsonItemProp = require(ReplicatedStorage.Json.ItemProp) +local JsonForge = require(ReplicatedStorage.Json.Forge) --> Events local RE_Forge = ReplicatedStorage.Events.RE_Forge local LocalPlayer = game.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 CreateWindow = {} @@ -47,6 +78,8 @@ function CreateWindow:Init(UIManager: table, Data: table?) ["__moneyCoin"] = 0, } self.MultNumber = 1 + self.MultArray = {1, 2, 5, 10} + self.MultIndex = 1 self.AutoRecycle = false self.UIRootName = "ui_w_create" self.UIParentName = UIEnums.UIParent.UIRoot @@ -69,8 +102,9 @@ function CreateWindow:ShowDetailInfo(data: table?) end function CreateWindow:OnClickMult() - self.MultNumber += 1 - if self.MultNumber > 10 then self.MultNumber = 1 end + self.MultIndex += 1 + if self.MultIndex > #self.MultArray then self.MultIndex = 1 end + self.MultNumber = self.MultArray[self.MultIndex] self.Variables["_btnMult"].Text = "x" .. self.MultNumber end @@ -86,6 +120,24 @@ function CreateWindow:OnClickCreate() end end +-- 锻造货币数量进度显示 +function CreateWindow:SetShowForgeCost(nowForgeTime : number, moneyValue: number) + local maxForgeId = Utils:GetMaxIdFromJson(JsonForge) + local forgeTime = math.min(nowForgeTime, maxForgeId) + + -- 获取当前锻造次数对应的消耗(用于UI显示) + local currentCost = GetIncrementalCost(forgeTime, JsonForge, 2) + + -- 进度条 - 使用当前锻造次数对应的消耗显示 + self.Variables["_btnCreate"].Text = string.format("%d/%d", moneyValue, currentCost) + if moneyValue >= currentCost then + self.Variables["_btnCreate"].BackgroundColor3 = Color3.fromRGB(235, 245, 95) + else + self.Variables["_btnCreate"].BackgroundColor3 = Color3.fromRGB(139, 139, 139) + end +end + + function CreateWindow:OnOpenWindow() UIWindow.OnOpenWindow(self) @@ -150,6 +202,33 @@ function CreateWindow:OnOpenWindow() else self:ShowDetailInfo() end + + + -- 货币进度条显示 + local rePlayerDataFolder = Utils:GetPlayerDataFolder(LocalPlayer) + local playerInfoFolder = rePlayerDataFolder:WaitForChild("PlayerInfo") + local forgeInstance = playerInfoFolder:WaitForChild("Stats"):WaitForChild("forge") + + local itemFolder = playerInfoFolder:WaitForChild("Items") + local hasItem = itemFolder:FindFirstChild("2") + + -- 设置锻造货币变动链接 + local function SetForgeCostChange() + local costChangeCon = hasItem.Changed:Connect(function(newValue) + self:SetShowForgeCost(forgeInstance.Value, newValue) + end) + table.insert(self.Connections, costChangeCon) + end + + if hasItem then + -- 后续变动设置 + SetForgeCostChange() + -- 初始化设置 + self:SetShowForgeCost(forgeInstance.Value, hasItem.Value) + else + -- 初始化设置 + self:SetShowForgeCost(forgeInstance.Value, 0) + end end function CreateWindow:OnCloseWindow() diff --git a/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau index 83039a6..8c94c62 100644 --- a/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau +++ b/src/StarterPlayerScripts/UI/Windows/MainWindow/init.luau @@ -238,7 +238,6 @@ function MainWindow:OnOpenWindow() -- 初始化设置 self:SetShowForgeBar(forgeInstance.Value, 0) end - end return MainWindow \ No newline at end of file diff --git a/src/StarterPlayerScripts/UI/Windows/RecycleWindow/RecyclePackageShow.luau b/src/StarterPlayerScripts/UI/Windows/RecycleWindow/RecyclePackageShow.luau new file mode 100644 index 0000000..5c627fc --- /dev/null +++ b/src/StarterPlayerScripts/UI/Windows/RecycleWindow/RecyclePackageShow.luau @@ -0,0 +1,88 @@ +local RecyclePackageShow = {} +RecyclePackageShow.__index = RecyclePackageShow + +local ReplicatedStorage = game:GetService("ReplicatedStorage") + +local Utils = require(ReplicatedStorage.Tools.Utils) +local Localization = require(ReplicatedStorage.Tools.Localization) +local JsonEquipment = require(ReplicatedStorage.Json.Equipment) +local JsonItemProp = require(ReplicatedStorage.Json.ItemProp) + +local FolderEquipment = ReplicatedStorage:WaitForChild("Prefabs"):WaitForChild("Equipments") + +function RecyclePackageShow:Init(data: table) + local self = {} + self.Data = data + self.Variables = { + ["_btnClick"] = 0, + ["_imgIcon"] = 0, + ["_tmpQuality"] = 0, + ["_tmpName"] = 0, + ["_imgView"] = 0, + ["_imgSelected"] = 0, + } + self.Connections = {} + + setmetatable(self, RecyclePackageShow) + + return self +end + +function RecyclePackageShow:Refresh() + local itemData = Utils:GetIdDataFromJson(JsonItemProp, self.Data.orgId) + self.Variables._imgIcon.Image = Localization:GetImageData(itemData.iconId) + self.Variables._imgIcon.Visible = false + self.Variables._tmpQuality.Text = Localization:GetColoredEquipmentQualityDesc(self.Data.quality) + self.Variables._tmpName.Text = Localization:GetLanguageData(itemData.nameId) + + local equipmentData = Utils:GetIdDataFromJson(JsonEquipment, self.Data.orgId) + -- 模型 + local part = FolderEquipment:FindFirstChild(equipmentData.modelName):Clone() + part.Handle.Position = Vector3.new(0, 0, 0) + part.Handle.CFrame = CFrame.new(0, 0, 0) * CFrame.Angles(math.rad(90), 0, 0) + part.Parent = self.Variables["_imgView"] + self.Prefab = part + + -- 相机 + local viewportCamera = Instance.new("Camera") + self.Variables["_imgView"].CurrentCamera = viewportCamera + viewportCamera.Parent = self.Variables["_imgView"] + viewportCamera.CFrame = CFrame.new(Vector3.new(0, 0, 6), part.Handle.Position) + self.ViewCamera = viewportCamera +end + +function RecyclePackageShow:OnInitFinish() + local con = self.Variables._btnClick.MouseButton1Click:Connect(function() + if self.Data == {} then + -- TODO: 之后做提示弹窗 + else + self.Variables._imgSelected.Visible = not self.Variables._imgSelected.Visible + self.TopUI:SetSelectedShow(self.Data.instance, self.Variables._imgSelected.Visible) + end + end) + table.insert(self.Connections, con) + + if self.Data.instance then + local wearingCon = self.Data.instance:GetAttributeChangedSignal("wearing"):Connect(function() + local oldWearing = self.Data.wearing + local newWearing = self.Data.instance:GetAttribute("wearing") + if oldWearing ~= newWearing then + if newWearing > 0 then + self.TopUI:WearRefresh(self.Data) + else + self.TopUI:UnwearRefresh(self.Data) + end + end + end) + table.insert(self.Connections, wearingCon) + end +end + +function RecyclePackageShow:Destroy() + for k, v in pairs(self) do + self[k] = nil + end + self = nil +end + +return RecyclePackageShow \ No newline at end of file diff --git a/src/StarterPlayerScripts/UI/Windows/RecycleWindow/init.luau b/src/StarterPlayerScripts/UI/Windows/RecycleWindow/init.luau new file mode 100644 index 0000000..32f5978 --- /dev/null +++ b/src/StarterPlayerScripts/UI/Windows/RecycleWindow/init.luau @@ -0,0 +1,121 @@ +--> Services +local ReplicatedStorage = game:GetService("ReplicatedStorage") + +--> Dependencies +local UIWindow = require(ReplicatedStorage.Base.UIWindow) +local UIEnums = require(ReplicatedStorage.Base.UIEnums) +local Tween = require(ReplicatedStorage.Modules.Tween) +local Utils = require(ReplicatedStorage.Tools.Utils) + +--> Components +local RecyclePackageShow = require(script.RecyclePackageShow) +local JsonEquipment = require(ReplicatedStorage.Json.Equipment) + +--> Events +local RE_RecycleEquipment = ReplicatedStorage.Events.RE_RecycleEquipment + +--> Local +local LocalPlayer = game:GetService("Players").LocalPlayer + +local CommonFolder = LocalPlayer:WaitForChild("PlayerScripts"):WaitForChild("UI"):WaitForChild("Common") +local ItemShow = require(CommonFolder:WaitForChild("ItemShow")) + +-------------------------------------------------------------------------------- + +local RecycleWindow = {} +RecycleWindow.__index = RecycleWindow +setmetatable(RecycleWindow, {__index = UIWindow}) + +function RecycleWindow:Init(UIManager: table, Data: table?) + local self = UIWindow:Init(UIManager, Data) + setmetatable(self, RecycleWindow) + self.Variables = { + ["_goRecyclePanel"] = 0, + ["__listWeaponPackage"] = 0, + ["__listRewardPackage"] = 0, + + ["_btnRecycle"] = 0, + ["_btnBgClose"] = 0, + ["_btnClose"] = 0, + } + self.UIRootName = "ui_w_recycle" + self.UIParentName = UIEnums.UIParent.UIRoot + + return self +end + +-- 设置选中显示 +function RecycleWindow:SetSelectedShow(instance: Instance, isSelected: boolean) + local equipmentData = Utils:GetIdDataFromJson(JsonEquipment, instance:GetAttribute("orgId")) + -- 图方便,临时做的,之后优化 + if isSelected then + self.Data.Reward[1].count = self.Data.Reward[1].count + equipmentData.recycle + self.Data.RecycleInstance[instance] = instance + else + self.Data.Reward[1].count = self.Data.Reward[1].count - equipmentData.recycle + self.Data.RecycleInstance[instance] = nil + end + self.Variables["__listRewardPackage"]:SetData(self.Data.Reward) +end + +-- 回收 +function RecycleWindow:Recycle() + local recycleData = {} + for _, instance in self.Data.RecycleInstance do + table.insert(recycleData, instance:GetAttribute("id")) + end + if #recycleData > 0 then + RE_RecycleEquipment:FireServer(recycleData) + self.UIManager:CloseWindow(script.Name) + else + return nil + end +end + +function RecycleWindow:AddInstanceData(configInstance: Instance, Data: table?) + local data = self.Data + if Data then data = Data end + local attributes = configInstance:GetAttributes() + + -- 归类是否是穿戴的装备 + local parentName, secondName = "Package", configInstance.Name + + -- 穿戴中直接打断 + if attributes.wearing ~= 0 then return nil end + data[parentName][secondName] = {} + + for attributeKey, attributeValue in attributes do + data[parentName][secondName][attributeKey] = attributeValue + end + data[parentName][secondName].instance = configInstance + return data[parentName][secondName], parentName +end + +function RecycleWindow:OnOpenWindow() + UIWindow.OnOpenWindow(self) + + -- 自己进行数据处理 + local DataFolder = Utils:WaitPlayerDataFolder(LocalPlayer):FindFirstChild("Equipment") + local data = { + Reward = {{orgId = 1, count = 0}}, + RecycleInstance = {}, + Package = {}, + } + for _, child in DataFolder:GetChildren() do + self:AddInstanceData(child, data) + end + self.Data = data + + self.Variables["__listWeaponPackage"]:AddComponent(RecyclePackageShow) + self.Variables["__listWeaponPackage"]:SetData(self.Data.Package) + -- self.Variables["__listWeaponPackage"]:SetLayoutOrder("package") + self.Variables["__listRewardPackage"]:AddComponent(ItemShow) + self.Variables["__listRewardPackage"]:SetData(self.Data.Reward) + + local con = self.Variables._btnRecycle.MouseButton1Click:Connect(function() + self:Recycle() + end) + table.insert(self.Connections, con) +end + +return RecycleWindow \ No newline at end of file