mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 13:59:39 +08:00
fix: 牛牛逻辑问题 (#996)
This commit is contained in:
parent
147ebb001c
commit
410dd05600
@ -122,7 +122,7 @@ func init() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
money, err := purchaseItem(n, info)
|
money, err := info.purchaseItem(n)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR:", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
@ -296,7 +296,7 @@ func init() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
messages, err := processNiuniuAction(t, &niuniu, fiancee[1])
|
messages, err := niuniu.processNiuNiuAction(t, fiancee[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text(err))
|
ctx.SendChain(message.Text(err))
|
||||||
return
|
return
|
||||||
@ -378,7 +378,7 @@ func init() {
|
|||||||
jjLimiter.Delete(t)
|
jjLimiter.Delete(t)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fencingResult, f1, err := processJJuAction(&myniuniu, &adduserniuniu, t, fiancee[1])
|
fencingResult, err := myniuniu.processJJuAction(&adduserniuniu, t, fiancee[1])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.SendChain(message.Text(err))
|
ctx.SendChain(message.Text(err))
|
||||||
return
|
return
|
||||||
@ -388,7 +388,6 @@ func init() {
|
|||||||
ctx.SendChain(message.Text("ERROR:", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
adduserniuniu.Length = f1
|
|
||||||
|
|
||||||
if err = db.insertNiuNiu(&adduserniuniu, gid); err != nil {
|
if err = db.insertNiuNiu(&adduserniuniu, gid); err != nil {
|
||||||
ctx.SendChain(message.Text("ERROR:", err))
|
ctx.SendChain(message.Text("ERROR:", err))
|
||||||
@ -425,7 +424,7 @@ func init() {
|
|||||||
if c.Count > 5 {
|
if c.Count > 5 {
|
||||||
ctx.SendChain(message.Text(randomChoice([]string{fmt.Sprintf("你们太厉害了,对方已经被你们打了%d次了,你们可以继续找他🤺", c.Count),
|
ctx.SendChain(message.Text(randomChoice([]string{fmt.Sprintf("你们太厉害了,对方已经被你们打了%d次了,你们可以继续找他🤺", c.Count),
|
||||||
"你们不要再找ta🤺啦!"})))
|
"你们不要再找ta🤺啦!"})))
|
||||||
// 保证只发生一次
|
// 保证只发送一次
|
||||||
if c.Count < 7 {
|
if c.Count < 7 {
|
||||||
id := ctx.SendPrivateMessage(adduser,
|
id := ctx.SendPrivateMessage(adduser,
|
||||||
message.Text(fmt.Sprintf("你在%d群里已经被厥冒烟了,快去群里赎回你原本的牛牛!\n发送:`赎牛牛`即可!", gid)))
|
message.Text(fmt.Sprintf("你在%d群里已经被厥冒烟了,快去群里赎回你原本的牛牛!\n发送:`赎牛牛`即可!", gid)))
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
package niuniu
|
package niuniu
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
@ -129,6 +130,151 @@ func (u *userInfo) useShenJi(adduserniuniu float64) (string, float64, float64) {
|
|||||||
return r, myLength, adduserniuniu + 0.7*change
|
return r, myLength, adduserniuniu + 0.7*change
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *userInfo) processNiuNiuAction(t string, props string) (string, error) {
|
||||||
|
var (
|
||||||
|
messages string
|
||||||
|
info userInfo
|
||||||
|
err error
|
||||||
|
f float64
|
||||||
|
)
|
||||||
|
load, ok := prop.Load(t)
|
||||||
|
info = *u
|
||||||
|
if props != "" {
|
||||||
|
if !contains(t, dajiaoProp) {
|
||||||
|
return "", errors.New("道具不能混着用哦")
|
||||||
|
}
|
||||||
|
if err = u.createUserInfoByProps(props); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch {
|
||||||
|
case ok && load.Count > 1 && time.Since(load.TimeLimit) < time.Minute*8:
|
||||||
|
messages, f = generateRandomStingTwo(u.Length)
|
||||||
|
u.Length = f
|
||||||
|
errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(load.TimeLimit))
|
||||||
|
err = errors.New(errMessage)
|
||||||
|
|
||||||
|
case u.WeiGe-info.WeiGe != 0:
|
||||||
|
messages, f = u.useWeiGe()
|
||||||
|
u.Length = f
|
||||||
|
updateMap(t, true)
|
||||||
|
|
||||||
|
case u.Philter-info.Philter != 0:
|
||||||
|
messages, f = u.usePhilter()
|
||||||
|
u.Length = f
|
||||||
|
updateMap(t, true)
|
||||||
|
|
||||||
|
default:
|
||||||
|
messages, f = generateRandomStingTwo(u.Length)
|
||||||
|
u.Length = f
|
||||||
|
}
|
||||||
|
return messages, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *userInfo) createUserInfoByProps(props string) error {
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
switch props {
|
||||||
|
case "伟哥":
|
||||||
|
if u.WeiGe > 0 {
|
||||||
|
u.WeiGe--
|
||||||
|
} else {
|
||||||
|
err = errors.New("你还没有伟哥呢,不能使用")
|
||||||
|
}
|
||||||
|
case "媚药":
|
||||||
|
if u.Philter > 0 {
|
||||||
|
u.Philter--
|
||||||
|
} else {
|
||||||
|
err = errors.New("你还没有媚药呢,不能使用")
|
||||||
|
}
|
||||||
|
case "击剑神器":
|
||||||
|
if u.Artifact > 0 {
|
||||||
|
u.Artifact--
|
||||||
|
} else {
|
||||||
|
err = errors.New("你还没有击剑神器呢,不能使用")
|
||||||
|
}
|
||||||
|
case "击剑神稽":
|
||||||
|
if u.ShenJi > 0 {
|
||||||
|
u.ShenJi--
|
||||||
|
} else {
|
||||||
|
err = errors.New("你还没有击剑神稽呢,不能使用")
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
err = errors.New("道具不存在")
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 接收值依次是 被jj用户的信息 记录gid和uid的字符串 道具名称
|
||||||
|
// 返回值依次是 要发送的消息 错误信息
|
||||||
|
func (u *userInfo) processJJuAction(adduserniuniu *userInfo, t string, props string) (string, error) {
|
||||||
|
var (
|
||||||
|
fencingResult string
|
||||||
|
f float64
|
||||||
|
f1 float64
|
||||||
|
info userInfo
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
v, ok := prop.Load(t)
|
||||||
|
info = *u
|
||||||
|
if props != "" {
|
||||||
|
if !contains(t, jjProp) {
|
||||||
|
return "", errors.New("道具不能混着用哦")
|
||||||
|
}
|
||||||
|
if err = u.createUserInfoByProps(props); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch {
|
||||||
|
case ok && v.Count > 1 && time.Since(v.TimeLimit) < time.Minute*8:
|
||||||
|
fencingResult, f, f1 = fencing(u.Length, adduserniuniu.Length)
|
||||||
|
u.Length = f
|
||||||
|
adduserniuniu.Length = f1
|
||||||
|
errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(v.TimeLimit))
|
||||||
|
err = errors.New(errMessage)
|
||||||
|
case u.ShenJi-info.ShenJi != 0:
|
||||||
|
fencingResult, f, f1 = u.useShenJi(adduserniuniu.Length)
|
||||||
|
u.Length = f
|
||||||
|
adduserniuniu.Length = f1
|
||||||
|
updateMap(t, true)
|
||||||
|
case u.Artifact-info.Artifact != 0:
|
||||||
|
fencingResult, f, f1 = u.useArtifact(adduserniuniu.Length)
|
||||||
|
u.Length = f
|
||||||
|
adduserniuniu.Length = f1
|
||||||
|
updateMap(t, true)
|
||||||
|
default:
|
||||||
|
fencingResult, f, f1 = fencing(u.Length, adduserniuniu.Length)
|
||||||
|
u.Length = f
|
||||||
|
adduserniuniu.Length = f1
|
||||||
|
}
|
||||||
|
return fencingResult, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *userInfo) purchaseItem(n int) (int, error) {
|
||||||
|
var (
|
||||||
|
money int
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
switch n {
|
||||||
|
case 1:
|
||||||
|
money = 300
|
||||||
|
u.WeiGe += 5
|
||||||
|
case 2:
|
||||||
|
money = 300
|
||||||
|
u.Philter += 5
|
||||||
|
case 3:
|
||||||
|
money = 500
|
||||||
|
u.Artifact += 2
|
||||||
|
case 4:
|
||||||
|
money = 500
|
||||||
|
u.ShenJi += 2
|
||||||
|
default:
|
||||||
|
err = errors.New("无效的选择")
|
||||||
|
}
|
||||||
|
return money, err
|
||||||
|
}
|
||||||
|
|
||||||
func (m users) positive() users {
|
func (m users) positive() users {
|
||||||
var m1 []*userInfo
|
var m1 []*userInfo
|
||||||
for _, i2 := range m {
|
for _, i2 := range m {
|
||||||
|
|||||||
@ -2,153 +2,16 @@
|
|||||||
package niuniu
|
package niuniu
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"time"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func createUserInfoByProps(props string, niuniu *userInfo) error {
|
|
||||||
var (
|
var (
|
||||||
err error
|
jjProp = []string{"击剑神器", "击剑神稽"}
|
||||||
|
dajiaoProp = []string{"伟哥", "媚药"}
|
||||||
)
|
)
|
||||||
switch props {
|
|
||||||
case "伟哥":
|
|
||||||
if niuniu.WeiGe > 0 {
|
|
||||||
niuniu.WeiGe--
|
|
||||||
} else {
|
|
||||||
err = errors.New("你还没有伟哥呢,不能使用")
|
|
||||||
}
|
|
||||||
case "媚药":
|
|
||||||
if niuniu.Philter > 0 {
|
|
||||||
niuniu.Philter--
|
|
||||||
} else {
|
|
||||||
err = errors.New("你还没有媚药呢,不能使用")
|
|
||||||
}
|
|
||||||
case "击剑神器":
|
|
||||||
if niuniu.Artifact > 0 {
|
|
||||||
niuniu.Artifact--
|
|
||||||
} else {
|
|
||||||
err = errors.New("你还没有击剑神器呢,不能使用")
|
|
||||||
}
|
|
||||||
case "击剑神稽":
|
|
||||||
if niuniu.ShenJi > 0 {
|
|
||||||
niuniu.ShenJi--
|
|
||||||
} else {
|
|
||||||
err = errors.New("你还没有击剑神稽呢,不能使用")
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
err = errors.New("道具不存在")
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 接收值依次是 自己和被jj用户的信息 一个包含gid和uid的字符串 道具名称
|
|
||||||
// 返回值依次是 要发生的消息 错误信息
|
|
||||||
func processJJuAction(myniuniu, adduserniuniu *userInfo, t string, props string) (string, float64, error) {
|
|
||||||
var (
|
|
||||||
fencingResult string
|
|
||||||
f float64
|
|
||||||
f1 float64
|
|
||||||
u userInfo
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
v, ok := prop.Load(t)
|
|
||||||
u = *myniuniu
|
|
||||||
if props != "" {
|
|
||||||
if props != "击剑神器" && props != "击剑神稽" {
|
|
||||||
return "", 0, errors.New("道具不存在")
|
|
||||||
}
|
|
||||||
if err = createUserInfoByProps(props, myniuniu); err != nil {
|
|
||||||
return "", 0, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch {
|
|
||||||
case ok && v.Count > 1 && time.Since(v.TimeLimit) < time.Minute*8:
|
|
||||||
fencingResult, f, f1 = fencing(myniuniu.Length, adduserniuniu.Length)
|
|
||||||
myniuniu.Length = f
|
|
||||||
errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(v.TimeLimit))
|
|
||||||
err = errors.New(errMessage)
|
|
||||||
case myniuniu.ShenJi-u.ShenJi != 0:
|
|
||||||
fencingResult, f, f1 = myniuniu.useShenJi(adduserniuniu.Length)
|
|
||||||
myniuniu.Length = f
|
|
||||||
updateMap(t, true)
|
|
||||||
case myniuniu.Artifact-u.Artifact != 0:
|
|
||||||
fencingResult, f, f1 = myniuniu.useArtifact(adduserniuniu.Length)
|
|
||||||
myniuniu.Length = f
|
|
||||||
updateMap(t, true)
|
|
||||||
default:
|
|
||||||
fencingResult, f, f1 = fencing(myniuniu.Length, adduserniuniu.Length)
|
|
||||||
myniuniu.Length = f
|
|
||||||
}
|
|
||||||
return fencingResult, f1, err
|
|
||||||
}
|
|
||||||
func processNiuniuAction(t string, niuniu *userInfo, props string) (string, error) {
|
|
||||||
var (
|
|
||||||
messages string
|
|
||||||
u userInfo
|
|
||||||
err error
|
|
||||||
f float64
|
|
||||||
)
|
|
||||||
load, ok := prop.Load(t)
|
|
||||||
u = *niuniu
|
|
||||||
if props != "" {
|
|
||||||
if props != "伟哥" && props != "媚药" {
|
|
||||||
return "", errors.New("道具不存在")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = createUserInfoByProps(props, niuniu); err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch {
|
|
||||||
case ok && load.Count > 1 && time.Since(load.TimeLimit) < time.Minute*8:
|
|
||||||
messages, f = generateRandomStingTwo(niuniu.Length)
|
|
||||||
niuniu.Length = f
|
|
||||||
errMessage := fmt.Sprintf("你使用道具次数太快了,此次道具不会生效,等待%d再来吧", time.Minute*8-time.Since(load.TimeLimit))
|
|
||||||
err = errors.New(errMessage)
|
|
||||||
|
|
||||||
case niuniu.WeiGe-u.WeiGe != 0:
|
|
||||||
messages, f = niuniu.useWeiGe()
|
|
||||||
niuniu.Length = f
|
|
||||||
updateMap(t, true)
|
|
||||||
|
|
||||||
case niuniu.Philter-u.Philter != 0:
|
|
||||||
messages, f = niuniu.usePhilter()
|
|
||||||
niuniu.Length = f
|
|
||||||
updateMap(t, true)
|
|
||||||
|
|
||||||
default:
|
|
||||||
messages, f = generateRandomStingTwo(niuniu.Length)
|
|
||||||
niuniu.Length = f
|
|
||||||
}
|
|
||||||
return messages, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func purchaseItem(n int, info userInfo) (int, error) {
|
|
||||||
var (
|
|
||||||
money int
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
switch n {
|
|
||||||
case 1:
|
|
||||||
money = 300
|
|
||||||
info.WeiGe += 5
|
|
||||||
case 2:
|
|
||||||
money = 300
|
|
||||||
info.Philter += 5
|
|
||||||
case 3:
|
|
||||||
money = 500
|
|
||||||
info.Artifact += 2
|
|
||||||
case 4:
|
|
||||||
money = 500
|
|
||||||
info.ShenJi += 2
|
|
||||||
default:
|
|
||||||
err = errors.New("无效的选择")
|
|
||||||
}
|
|
||||||
return money, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func generateRandomStingTwo(niuniu float64) (string, float64) {
|
func generateRandomStingTwo(niuniu float64) (string, float64) {
|
||||||
probability := rand.Intn(100 + 1)
|
probability := rand.Intn(100 + 1)
|
||||||
@ -342,3 +205,13 @@ func hitGlue(l float64) float64 {
|
|||||||
return rand.Float64()
|
return rand.Float64()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查字符串是否在切片中
|
||||||
|
func contains(s string, array []string) bool {
|
||||||
|
for _, item := range array {
|
||||||
|
if strings.EqualFold(item, s) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user