From 8e93ce1467710207f7653e0325f2a417de74e7f9 Mon Sep 17 00:00:00 2001 From: hanqin Date: Sat, 28 Mar 2026 15:56:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E5=88=92=E4=BA=86=E7=AD=89=E7=BA=A7?= =?UTF-8?q?=E6=9E=84=E6=88=90=EF=BC=8C=E9=87=8D=E6=96=B0=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E4=BA=86=E5=8D=87=E7=BA=A7=E6=89=80=E9=9C=80=E7=9A=84=E7=BB=8F?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Frontend/src/views/admin/LevelsView.vue | 4 -- .../Frontend/src/views/admin/PillsView.vue | 15 +------- .../Services/CharacterService.cs | 36 +++++++++--------- .../Build_God_Api/Services/PillService.cs | 2 +- Build_God_Game/src/views/GameView.vue | 6 +-- Build_God_Game/src/views/TrainingView.vue | 4 +- Build_God_Game/模拟导图.xls | Bin 43008 -> 28160 bytes 7 files changed, 25 insertions(+), 42 deletions(-) diff --git a/Build_God_Admin_Frontend/Frontend/src/views/admin/LevelsView.vue b/Build_God_Admin_Frontend/Frontend/src/views/admin/LevelsView.vue index 4cb4600..9fe986e 100644 --- a/Build_God_Admin_Frontend/Frontend/src/views/admin/LevelsView.vue +++ b/Build_God_Admin_Frontend/Frontend/src/views/admin/LevelsView.vue @@ -64,10 +64,6 @@ const closeDialog = () => { } const saveLevel = async () => { - if (!formData.value.name || !formData.value.currentLevelMinExp || !formData.value.levelId) { - ElMessage.error('请填写必填项') - return - } if (isEditing.value) { if (formData.value !== undefined) { diff --git a/Build_God_Admin_Frontend/Frontend/src/views/admin/PillsView.vue b/Build_God_Admin_Frontend/Frontend/src/views/admin/PillsView.vue index a75937b..e55adec 100644 --- a/Build_God_Admin_Frontend/Frontend/src/views/admin/PillsView.vue +++ b/Build_God_Admin_Frontend/Frontend/src/views/admin/PillsView.vue @@ -57,6 +57,7 @@ const translateRarity = (id: number) => { } const translateLevel = (id: number) => { + console.log(levels) var item = levels.value.find(x => x.levelId == id); if (item) { return item.name @@ -90,18 +91,6 @@ const closeDialog = () => { } const savePill = async () => { - console.log('formdata', formData.value) - if (!formData.value.name - || !formData.value.type - || !formData.value.rarity - || !formData.value.money - || !formData.value.description - || !formData.value.requirdLevelId - || !formData.value.effectValue - || !formData.value.duration) { - ElMessage.error('请填写必填项') - return - } if (isEditing.value) { const index = pills.value.findIndex(p => p.id === formData.value.id) @@ -262,7 +251,7 @@ const fetchLevels = async () => { - + diff --git a/Build_God_Api/Build_God_Api/Services/CharacterService.cs b/Build_God_Api/Build_God_Api/Services/CharacterService.cs index 25c049f..5e8591c 100644 --- a/Build_God_Api/Build_God_Api/Services/CharacterService.cs +++ b/Build_God_Api/Build_God_Api/Services/CharacterService.cs @@ -7,7 +7,7 @@ using static Build_God_Api.DB.BagItem; namespace Build_God_Api.Services { -public interface ICharacterService + public interface ICharacterService { public Task GetCharacterByAccountId(int accountId); public Task> GetCharactersByAccountId(int accountId); @@ -44,7 +44,7 @@ public interface ICharacterService public Task StopTraining(int characterId); } - public class CharacterService(ISqlSugarClient db, + public class CharacterService(ISqlSugarClient db, ICurrentUserService currentUserService, ICharacterAttributeCalculateService calculateService, IBagService bagService, @@ -62,7 +62,7 @@ public interface ICharacterService var currentLevel = await db.Queryable().FirstAsync(x => x.LevelId == character.LevelId); var nextLevelId = currentLevel?.NextLevelId ?? 1; var nextLevel = await db.Queryable().FirstAsync(x => x.LevelId == nextLevelId) ?? throw new Exception("你暂时无敌了,没有等级可以突破了"); - + if (character.CurrentExp < nextLevel.CurrentLevelMinExp) { throw new Exception($"距离可以突破你还差 {nextLevel.CurrentLevelMinExp - character.CurrentExp}"); @@ -106,7 +106,7 @@ public interface ICharacterService decimal randomValue = GenerateSecureRandomDecimal(0, 100, 1); bool isSuccess = randomValue < character.BreakthroughRate; - + if (isSuccess) { character.LevelId = nextLevelId; @@ -122,16 +122,16 @@ public interface ICharacterService character.BreakthroughRate = 100; } } - + await db.Updateable(character).ExecuteCommandAsync(); return false; } public async Task StartTraining(int characterId) { - var character = await db.Queryable().FirstAsync(x => x.Id == characterId) + var character = await db.Queryable().FirstAsync(x => x.Id == characterId) ?? throw new Exception("角色不存在"); - + if (character.TrainingOn.HasValue) { throw new Exception("你已经在打坐了"); @@ -144,7 +144,7 @@ public interface ICharacterService public async Task StopTraining(int characterId) { - var character = await db.Queryable().FirstAsync(x => x.Id == characterId) + var character = await db.Queryable().FirstAsync(x => x.Id == characterId) ?? throw new Exception("角色不存在"); if (!character.TrainingOn.HasValue) @@ -153,16 +153,16 @@ public interface ICharacterService } var duration = DateTime.Now - character.TrainingOn.Value; - var seconds = (decimal)duration.TotalSeconds; - - // exp = 0.1 * seconds * level * level * (1 + buff) - var expGained = 0.01m * seconds * character.LevelId * character.LevelId * (1 + 0); + var seconds = duration.TotalSeconds; - character.CurrentExp += Math.Round(expGained); + // exp = 0.02 * seconds * level^1.5 * (1 + buff) + var expGained = Convert.ToDecimal(0.02 * seconds * Math.Pow(character.LevelId, 1.5) * (1 + 0)); + var result = Math.Round(expGained); + character.CurrentExp += result; character.TrainingOn = null; await db.Updateable(character).ExecuteCommandAsync(); - return expGained; + return result; } private readonly RandomNumberGenerator _rng = RandomNumberGenerator.Create(); @@ -196,7 +196,7 @@ public interface ICharacterService public async Task SelectCharacter(int characterId) { - var character = await db.Queryable().FirstAsync(x => x.Id == characterId && x.AccountId == currentUserService.UserId && x.isLocked == false) + var character = await db.Queryable().FirstAsync(x => x.Id == characterId && x.AccountId == currentUserService.UserId && x.isLocked == false) ?? throw new Exception("角色不存在"); character.LastLogin = DateTime.Now; await db.Updateable(character).ExecuteCommandAsync(); @@ -211,7 +211,7 @@ public interface ICharacterService return await db.Queryable().AnyAsync(x => x.Name == name); } -public async Task GetCharacterByAccountId(int accountId) + public async Task GetCharacterByAccountId(int accountId) { return await db.Queryable().FirstAsync(x => x.AccountId == accountId && x.isLocked == false); } @@ -291,7 +291,7 @@ public async Task GetCharacterByAccountId(int accountId) NextLevelRequiredPillId = nextLevelRequiredPillId, NextLevelRequiredPillName = nextLevelRequiredPillName, NextLevelRequiredPillQuantity = nextLevelRequiredPillQuantity, - TrainingExpRate = 0.01m, + TrainingExpRate = 0.02m, LastLogin = c.LastLogin, CreatedOn = c.CreatedOn }); @@ -331,7 +331,7 @@ public async Task GetCharacterByAccountId(int accountId) Name = character.Name, AccountId = currentUserService.UserId, CurrentExp = 0, - LevelId = 1, + LevelId = 10, Money = 0, CurrentHP = 100, ProfessionId = character.ProfessionId, diff --git a/Build_God_Api/Build_God_Api/Services/PillService.cs b/Build_God_Api/Build_God_Api/Services/PillService.cs index 7dfbb18..31ac45a 100644 --- a/Build_God_Api/Build_God_Api/Services/PillService.cs +++ b/Build_God_Api/Build_God_Api/Services/PillService.cs @@ -48,7 +48,7 @@ namespace Build_God_Api.Services public async Task> GetAll() { - return await db.Queryable().ToListAsync(); + return await db.Queryable().OrderBy(x=>x.RequirdLevelId).ToListAsync(); } public async Task Update(Pill item) diff --git a/Build_God_Game/src/views/GameView.vue b/Build_God_Game/src/views/GameView.vue index 11fbbfa..1eb206a 100644 --- a/Build_God_Game/src/views/GameView.vue +++ b/Build_God_Game/src/views/GameView.vue @@ -87,7 +87,7 @@ const handleBreakthrough = async () => { @@ -106,7 +106,7 @@ const handleBreakthrough = async () => {