mirror of
https://github.com/jie65535/mirai-console-jhr-plugin.git
synced 2025-06-02 17:39:16 +08:00
新增 玩家数据统计与配套指令
新增 积分榜查询
This commit is contained in:
parent
27925a3ee1
commit
30eb1b2883
@ -3,10 +3,13 @@ package top.jie65535.jhr
|
||||
import net.mamoe.mirai.console.data.AutoSavePluginData
|
||||
import net.mamoe.mirai.console.data.ValueDescription
|
||||
import net.mamoe.mirai.console.data.value
|
||||
import top.jie65535.jhr.game.PlayerStatistics
|
||||
|
||||
object JHRPluginData : AutoSavePluginData("HorseRacingPluginData") {
|
||||
|
||||
@ValueDescription("用户存款")
|
||||
val Scores: MutableMap<Long, Int> by value()
|
||||
|
||||
@ValueDescription("用户统计")
|
||||
val playerStat: MutableMap<Long, PlayerStatistics> by value()
|
||||
}
|
@ -18,6 +18,7 @@ import net.mamoe.mirai.message.data.MessageSource.Key.quote
|
||||
import net.mamoe.mirai.utils.info
|
||||
import top.jie65535.jhr.game.Bet
|
||||
import top.jie65535.jhr.game.Horse
|
||||
import top.jie65535.jhr.game.PlayerStatistics
|
||||
import java.util.*
|
||||
import kotlin.random.Random
|
||||
|
||||
@ -102,6 +103,20 @@ object JHorseRacing : KotlinPlugin(
|
||||
}
|
||||
return sb.toString()
|
||||
}
|
||||
|
||||
private fun getPlayerStat(id: Long): PlayerStatistics {
|
||||
var stat = JHRPluginData.playerStat[id]
|
||||
if (stat == null) {
|
||||
stat = PlayerStatistics()
|
||||
JHRPluginData.playerStat[id] = stat
|
||||
}
|
||||
return stat
|
||||
}
|
||||
|
||||
private fun addContribution(id: Long) {
|
||||
getPlayerStat(id).contribution += 1
|
||||
}
|
||||
|
||||
private suspend fun startRank(subject: Group) {
|
||||
val t = pools[subject.id] ?: return
|
||||
if (t.size == 0) {
|
||||
@ -158,6 +173,7 @@ object JHorseRacing : KotlinPlugin(
|
||||
for (bet in pool) {
|
||||
val score = JHRPluginData.Scores[bet.id]!!
|
||||
val income = if (winners.indexOf(bet.number) != -1) {
|
||||
getPlayerStat(bet.id).winCount += 1
|
||||
(bet.score * 1.5).toInt()
|
||||
} else {
|
||||
-bet.score
|
||||
@ -243,6 +259,7 @@ object JHorseRacing : KotlinPlugin(
|
||||
subject.sendMessage("一天只能签到一次噢")
|
||||
} else {
|
||||
signUpSheet.add(sender.id)
|
||||
getPlayerStat(sender.id).signCount += 1
|
||||
val score = JHRPluginData.Scores[sender.id]
|
||||
val reward = signReward
|
||||
if (score != null) {
|
||||
@ -284,6 +301,7 @@ object JHorseRacing : KotlinPlugin(
|
||||
return@subscribeAlways
|
||||
}
|
||||
|
||||
getPlayerStat(sender.id).betCount += 1
|
||||
pool.add(Bet(sender.id, no, coin))
|
||||
subject.sendMessage(JHRPluginConfig.betMessage[Random.nextInt(JHRPluginConfig.betMessage.size)].replace("?", no.toString()))
|
||||
}
|
||||
@ -298,6 +316,7 @@ object JHorseRacing : KotlinPlugin(
|
||||
}
|
||||
if (JHRPluginConfig.goodEvents.indexOf(event) == -1) {
|
||||
JHRPluginConfig.goodEvents.add(event)
|
||||
addContribution(sender.id)
|
||||
logger.info("已增加好事件'$event'")
|
||||
}
|
||||
subject.sendMessage("OK")
|
||||
@ -313,6 +332,7 @@ object JHorseRacing : KotlinPlugin(
|
||||
}
|
||||
if (JHRPluginConfig.badEvents.indexOf(event) == -1) {
|
||||
JHRPluginConfig.badEvents.add(event)
|
||||
addContribution(sender.id)
|
||||
logger.info("已增加坏事件'$event'")
|
||||
}
|
||||
subject.sendMessage("OK")
|
||||
@ -328,6 +348,7 @@ object JHorseRacing : KotlinPlugin(
|
||||
}
|
||||
if (JHRPluginConfig.winnerMessage.indexOf(event) == -1) {
|
||||
JHRPluginConfig.winnerMessage.add(event)
|
||||
addContribution(sender.id)
|
||||
logger.info("已增加胜利词'$event'")
|
||||
}
|
||||
subject.sendMessage("OK")
|
||||
@ -343,6 +364,7 @@ object JHorseRacing : KotlinPlugin(
|
||||
}
|
||||
if (JHRPluginConfig.betMessage.indexOf(event) == -1) {
|
||||
JHRPluginConfig.betMessage.add(event)
|
||||
addContribution(sender.id)
|
||||
logger.info("已增加下注词'$event'")
|
||||
}
|
||||
subject.sendMessage("OK")
|
||||
@ -407,6 +429,25 @@ object JHorseRacing : KotlinPlugin(
|
||||
msg == "下注词列表" -> {
|
||||
subject.sendMessage(JHRPluginConfig.betMessage.joinToString("\n"))
|
||||
}
|
||||
msg == "排名" || msg == "积分榜" -> {
|
||||
val msgB = MessageChainBuilder(11)
|
||||
msgB.append("积分榜")
|
||||
JHRPluginData.Scores.entries.sortedBy { it.value }.take(10).onEach {
|
||||
msgB.append(At(it.key)).append(" ${it.value}")
|
||||
}
|
||||
subject.sendMessage(msgB.asMessageChain())
|
||||
}
|
||||
msg == "统计" -> {
|
||||
val stat = getPlayerStat(sender.id)
|
||||
val ret = MessageChainBuilder()
|
||||
ret.append(message.quote())
|
||||
.append("下注次数:${stat.betCount}\n")
|
||||
.append("获胜次数:${stat.winCount}\n")
|
||||
.append("贡献次数:${stat.contribution}\n")
|
||||
.append("签到次数:${stat.signCount}\n")
|
||||
.append("ヾ(◍°∇°◍)ノ゙继续加油吧!")
|
||||
subject.sendMessage(ret.asMessageChain())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
8
src/main/kotlin/game/PlayerStatistics.kt
Normal file
8
src/main/kotlin/game/PlayerStatistics.kt
Normal file
@ -0,0 +1,8 @@
|
||||
package top.jie65535.jhr.game
|
||||
|
||||
class PlayerStatistics {
|
||||
var betCount = 0
|
||||
var winCount = 0
|
||||
var contribution = 0
|
||||
var signCount = 0
|
||||
}
|
Loading…
Reference in New Issue
Block a user