Skip to content

Commit 022e250

Browse files
authored
Merge pull request #7 from KeleMC/dev
BETA v0.1.0
2 parents 977212a + 07ef90c commit 022e250

File tree

5 files changed

+54
-34
lines changed

5 files changed

+54
-34
lines changed

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@
1919

2020
#### 等级介绍
2121

22-
1. 根玩家:无需介绍
23-
2. 3级玩家:
24-
3. 2级玩家:
25-
4. 1级玩家:没有任何权限,只能进行普通的“原版游戏”
22+
0. 管理员: 干啥都行
23+
1. 根玩家:回档
24+
2. 3级玩家:可以使用假人
25+
3. 2级玩家:可以使用假人&tp&spec
26+
4. 1级玩家:可以进行tpa
2627

2728
#### 升级消耗
2829

kmts/utils/command/__init__.py

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from .classes import upgradeRequest
99

1010
from ...shared import gctx
11-
from ..permissionUtils.point import getUpgradeCost, getUpgradeAddInt, canUpgrade, getPointName, getUpgradeLevel
11+
from ..permissionUtils.point import getUpgradeCost, isUpgradeUseless, canUpgrade, getPointName, getUpgradeLevel
1212
from ..permissionUtils import updateAllPermissions
1313
from ..configUtils import readPlayerInfo, Player, savePlayerInfo
1414
from ..configUtils import writeFile
@@ -22,7 +22,7 @@ def printHelp(source: CommandSource, context: CommandContext):
2222
RText(" 玩家信任服务 帮助") + RText(" >", RColor.dark_purple)
2323
body = RText('''\
2424
!!ts: 输出本条消息
25-
!!ts upgrade <玩家名称>: 升级某个玩家,同时消耗你的信任点数''')
25+
!!ts upgrade <玩家名称> <点数>: 升级某个玩家,同时消耗你的信任点数''')
2626

2727
if not source.is_console:
2828
try:
@@ -69,15 +69,28 @@ def upgradePlayer(source: CommandSource, context: CommandContext):
6969
except KeyError:
7070
source.reply(RText("您为1级玩家,无法升级!", RColor.red))
7171
return
72-
if not canUpgrade(player):
72+
73+
try:
74+
player2 = readPlayerInfo(context['playerName'])
75+
except KeyError:
76+
player2 = Player(context["playerName"], False, 0)
77+
addPoint = context['point']
78+
costPoint = getUpgradeCost(player, addPoint)
79+
80+
upgradeState = canUpgrade(player, costPoint)
81+
if upgradeState == False:
7382
source.reply(RText("您的信任点不足,无法升级!", RColor.red))
7483
return
7584

76-
req = upgradeRequest(playerStorageName, context['playerName'], getUpgradeCost(player), getUpgradeAddInt(player))
77-
source.reply(f"您将花费{req.cost}信任点以为 {context['playerName']} 增加{req.add}信任点。为对方升级后您的等级为{getUpgradeLevel(player)}。确认请输入`!!ts confirm`")
85+
if isUpgradeUseless(player2, addPoint):
86+
source.reply(RText("此次升级部分/全部无用(因为对方可加的点数少于您的请求点数)", RColor.red))
87+
88+
req = upgradeRequest(playerStorageName, context['playerName'], costPoint, addPoint)
89+
source.reply(
90+
f"您将花费{req.cost}信任点以为 {context['playerName']} 增加{req.add}信任点。为对方升级后您的等级为{getUpgradeLevel(player, costPoint)}。确认请输入`!!ts confirm`")
7891
gctx.playerUpgradeAwaits[playerStorageName] = req
7992
elif source.is_console:
80-
source.reply(f"以控制台执行的upgrade子命令将以根玩家的权限执行(为目标增加17点数)。确认请输入`!!ts confirm`")
93+
source.reply(f"以控制台执行的`upgrade`子命令类似于`setPoint`子命令。执行此命令将为目标增加{context['point']}点数。确认请输入`!!ts confirm`")
8194

8295

8396
def playerUpgradeConfirm(source: CommandSource, context: CommandContext):
@@ -117,14 +130,18 @@ def playerUpgradeConfirm(source: CommandSource, context: CommandContext):
117130
if player2.isRootPlayer:
118131
source.reply(RText("不能给根玩家升级", RColor.red))
119132
return
133+
if gctx.upgrade.acquire(False):
120134

121-
# 然后先扣钱
122-
player1.trustPoint -= alreadyExistRequest.cost
123-
savePlayerInfo(player1)
135+
# 然后先扣钱
136+
player1.trustPoint -= alreadyExistRequest.cost
137+
savePlayerInfo(player1)
124138

125-
# 然后给target增加
126-
player2.trustPoint = min(player2.trustPoint+alreadyExistRequest.add, 27)
127-
savePlayerInfo(player2)
139+
# 然后给target增加
140+
player2.trustPoint = min(player2.trustPoint + alreadyExistRequest.add, 27)
141+
savePlayerInfo(player2)
142+
gctx.upgrade.release()
143+
else:
144+
source.reply(RText("当前正在升级,请重试", RColor.red))
128145

129146
source.reply(RText(f"升级成功,对方现有 {player2.trustPoint} 信任点。", RColor.green))
130147
source.get_server().tell(alreadyExistRequest.targetPlayer, RText(
@@ -167,7 +184,7 @@ def getTSCmdBuilder():
167184
cmdBuilder = SimpleCommandBuilder()
168185

169186
cmdBuilder.command("!!ts", printHelp)
170-
cmdBuilder.command("!!ts upgrade <playerName>", upgradePlayer)
187+
cmdBuilder.command("!!ts upgrade <playerName> <point>", upgradePlayer)
171188
cmdBuilder.command("!!ts confirm", playerUpgradeConfirmWrapper)
172189
cmdBuilder.command("!!ts save", savePermissionFile)
173190

kmts/utils/configUtils/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ def savePlayerInfo(playerInfo: Player) -> None:
3232

3333
def readFile(): # 插件加载时调用
3434
PSI: PluginServerInterface = ServerInterface.psi()
35-
print(PSI)
3635
cfg = PSI.load_config_simple("permission.json", defaultPermissionFile)
3736
gctx.playerLevelsConfigFileContent = cfg
3837

kmts/utils/misc/context.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ def __init__(self):
99

1010
self.upgradeProcessing = Lock()
1111
self.saveLock = Lock()
12+
self.upgrade = Lock()
13+

kmts/utils/permissionUtils/point.py

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,15 @@
22
from ..configUtils.classes import Player
33

44

5-
def getUpgradeCost(player: Player) -> int:
5+
def getUpgradeCost(player, addPoint: int) -> int:
66
if player.isRootPlayer:
77
return 0
8-
elif player.trustPoint == 0:
9-
return False
10-
else:
11-
p = player.trustPoint
12-
match p:
13-
case p if 1 <= p < 13:
14-
return 5
15-
case p if 14 <= p <= 27:
16-
return 8
17-
case p if p > 27:
18-
return 0
8+
costPoint = max(int(addPoint / 10) + addPoint, addPoint+1)
9+
return costPoint
10+
1911

20-
def getUpgradeLevel(player: Player) -> int:
21-
UpgradedtrustPoint = player.trustPoint - getUpgradeCost(player)
12+
def getUpgradeLevel(player: Player, costPoint: int) -> int:
13+
UpgradedtrustPoint = player.trustPoint - costPoint
2214
if player.isRootPlayer:
2315
return "根玩家"
2416
elif UpgradedtrustPoint == 0:
@@ -33,6 +25,7 @@ def getUpgradeLevel(player: Player) -> int:
3325
case p if p > 27:
3426
return "管理员或根玩家"
3527

28+
3629
def getUpgradeAddInt(player: Player) -> int:
3730
if player.isRootPlayer:
3831
return 16
@@ -49,10 +42,10 @@ def getUpgradeAddInt(player: Player) -> int:
4942
return 8
5043

5144

52-
def canUpgrade(player: Player):
45+
def canUpgrade(player: Player, costPoint: int):
5346
if (player.isRootPlayer):
5447
return True
55-
if player.trustPoint - getUpgradeCost(player) < 0:
48+
if player.trustPoint - costPoint < 0:
5649
return False
5750
return True
5851

@@ -87,3 +80,11 @@ def getMCDRPermissionLevel(player: Player) -> int:
8780
return 2
8881
case p if p > 27:
8982
return None
83+
84+
85+
def isUpgradeUseless(player1: Player, addPoint: int) -> bool:
86+
if player1.isRootPlayer:
87+
return True
88+
elif player1.trustPoint + addPoint > 27:
89+
return True
90+
return False

0 commit comments

Comments
 (0)