✨ 新增我的种子指令
✨ 对部分资源进行补充 ✨ 新增播种功能
This commit is contained in:
parent
13ddcf2a58
commit
b1788f42c2
@ -8,10 +8,9 @@ from zhenxun.utils.message import MessageUtils
|
|||||||
from .command import diuse_farm, diuse_register
|
from .command import diuse_farm, diuse_register
|
||||||
from .config import g_pJsonManager
|
from .config import g_pJsonManager
|
||||||
from .database import g_pSqlManager
|
from .database import g_pSqlManager
|
||||||
|
from .farm.farm import g_pFarmManager
|
||||||
from .farm.shop import g_pShopManager
|
from .farm.shop import g_pShopManager
|
||||||
|
|
||||||
# from .globalClass import g_pDrawImage, g_pJsonManager, g_pSqlManager
|
|
||||||
|
|
||||||
__plugin_meta = PluginMetadata(
|
__plugin_meta = PluginMetadata(
|
||||||
name="真寻的农场",
|
name="真寻的农场",
|
||||||
description="快乐的农场时光",
|
description="快乐的农场时光",
|
||||||
@ -37,6 +36,9 @@ async def start():
|
|||||||
# 初始化读取Json
|
# 初始化读取Json
|
||||||
await g_pJsonManager.init()
|
await g_pJsonManager.init()
|
||||||
|
|
||||||
|
aaa = await g_pFarmManager.sowing("1754798088", "胡萝卜", 1)
|
||||||
|
logger.info(aaa)
|
||||||
|
|
||||||
# 析构函数
|
# 析构函数
|
||||||
@driver.on_shutdown
|
@driver.on_shutdown
|
||||||
async def shutdown():
|
async def shutdown():
|
||||||
|
|||||||
28
command.py
28
command.py
@ -39,6 +39,7 @@ diuse_farm = on_alconna(
|
|||||||
Subcommand("buy-plant", Args["name?", str]["num?", int], help_text="购买种子"),
|
Subcommand("buy-plant", Args["name?", str]["num?", int], help_text="购买种子"),
|
||||||
Subcommand("my-plant", help_text="我的种子"),
|
Subcommand("my-plant", help_text="我的种子"),
|
||||||
Subcommand("my-props", help_text="我的农场道具"),
|
Subcommand("my-props", help_text="我的农场道具"),
|
||||||
|
Subcommand("sowing", Args["name?", str]["num?", int], help_text="播种"),
|
||||||
Subcommand("buy", Args["name?", str]["num?", int], help_text="购买道具"),
|
Subcommand("buy", Args["name?", str]["num?", int], help_text="购买道具"),
|
||||||
Subcommand("use", Args["name?", str]["num?", int], help_text="使用道具"),
|
Subcommand("use", Args["name?", str]["num?", int], help_text="使用道具"),
|
||||||
Subcommand("gold-list", Args["num?", int], help_text="金币排行"),
|
Subcommand("gold-list", Args["num?", int], help_text="金币排行"),
|
||||||
@ -128,7 +129,7 @@ diuse_farm.shortcut(
|
|||||||
prefix=True,
|
prefix=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
@diuse_farm.assign("plant-shop")
|
@diuse_farm.assign("my-plant")
|
||||||
async def _(session: Uninfo):
|
async def _(session: Uninfo):
|
||||||
uid = str(session.user.id)
|
uid = str(session.user.id)
|
||||||
point = await g_pSqlManager.getUserPointByUid(uid)
|
point = await g_pSqlManager.getUserPointByUid(uid)
|
||||||
@ -139,3 +140,28 @@ async def _(session: Uninfo):
|
|||||||
|
|
||||||
result = await g_pFarmManager.getUserPlantByUid(uid)
|
result = await g_pFarmManager.getUserPlantByUid(uid)
|
||||||
await MessageUtils.build_message(result).send(reply_to=True)
|
await MessageUtils.build_message(result).send(reply_to=True)
|
||||||
|
|
||||||
|
diuse_farm.shortcut(
|
||||||
|
"播种(?P<name>.*?)",
|
||||||
|
command="我的农场",
|
||||||
|
arguments=["sowing", "{name}"],
|
||||||
|
prefix=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
async def _(session: Uninfo, name: Match[str], num: Query[int] = AlconnaQuery("num", 1),):
|
||||||
|
if not name.available:
|
||||||
|
await MessageUtils.build_message(
|
||||||
|
"请在指令后跟需要播种的种子名称"
|
||||||
|
).finish(reply_to=True)
|
||||||
|
|
||||||
|
uid = str(session.user.id)
|
||||||
|
point = await g_pSqlManager.getUserPointByUid(uid)
|
||||||
|
|
||||||
|
if point < 0:
|
||||||
|
await MessageUtils.build_message("尚未开通农场").send()
|
||||||
|
return None
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
# result = await g_pShopManager.buyPlant(uid, name.result, num.result)
|
||||||
|
# await MessageUtils.build_message(result).send(reply_to=True)
|
||||||
|
|||||||
46
database.py
46
database.py
@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
from datetime import datetime, timedelta
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
from typing import Any, List, Optional
|
from typing import Any, List, Optional
|
||||||
|
|
||||||
@ -302,6 +303,47 @@ class CSqlManager:
|
|||||||
|
|
||||||
return soilNumber
|
return soilNumber
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def getUserSoilStatusBySoilID(cls, uid: str, soil: str) -> bool:
|
||||||
|
"""根据土地块获取用户土地状态
|
||||||
|
|
||||||
|
Args:
|
||||||
|
uid (str): 用户Uid
|
||||||
|
soil (str): 土地块
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: 是否可以播种
|
||||||
|
"""
|
||||||
|
if len(uid) <= 0:
|
||||||
|
return False
|
||||||
|
|
||||||
|
async with cls.m_pDB.execute(f"SELECT {soil} FROM soil WHERE uid = '{uid}'") as cursor:
|
||||||
|
async for row in cursor:
|
||||||
|
if row[0] == None:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def updateUserSoilStatusBySowing(cls, uid: str, soil: str, plant: str) -> bool:
|
||||||
|
|
||||||
|
if len(uid) <= 0:
|
||||||
|
return False
|
||||||
|
|
||||||
|
#获取种子信息 这里能崩我吃
|
||||||
|
plantInfo = g_pJsonManager.m_pPlant['plant'][plant] # type: ignore
|
||||||
|
|
||||||
|
|
||||||
|
currentTime = datetime.now()
|
||||||
|
newTime = currentTime + timedelta(minutes=int(plantInfo['time']))
|
||||||
|
|
||||||
|
#种子名称,当前阶段,预计长大/预计下个阶段,地状态:0:无 1:长草 2:生虫 3:缺水 4:枯萎状态
|
||||||
|
status = f"{plant},1,{int(newTime.timestamp())},0"
|
||||||
|
|
||||||
|
sql = f"UPDATE soil SET {soil} = '{status}' WHERE uid = '{uid}'"
|
||||||
|
|
||||||
|
return await cls.executeDB(sql)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def getUserPlantByUid(cls, uid: str) -> str:
|
async def getUserPlantByUid(cls, uid: str) -> str:
|
||||||
"""获取用户仓库种子信息
|
"""获取用户仓库种子信息
|
||||||
@ -317,9 +359,7 @@ class CSqlManager:
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
async with cls.m_pDB.execute(
|
async with cls.m_pDB.execute(f"SELECT plant FROM storehouse WHERE uid = '{uid}'") as cursor:
|
||||||
"SELECT plant FROM storehouse WHERE uid = ?", (uid,)
|
|
||||||
) as cursor:
|
|
||||||
async for row in cursor:
|
async for row in cursor:
|
||||||
return row[0]
|
return row[0]
|
||||||
|
|
||||||
|
|||||||
75
farm/farm.py
75
farm/farm.py
@ -1,3 +1,5 @@
|
|||||||
|
from numpy import arange
|
||||||
|
|
||||||
from zhenxun.services.log import logger
|
from zhenxun.services.log import logger
|
||||||
from zhenxun.utils._build_image import BuildImage
|
from zhenxun.utils._build_image import BuildImage
|
||||||
from zhenxun.utils.image_utils import ImageTemplate
|
from zhenxun.utils.image_utils import ImageTemplate
|
||||||
@ -36,29 +38,48 @@ class CFarmManager:
|
|||||||
|
|
||||||
x = 0
|
x = 0
|
||||||
y = 0
|
y = 0
|
||||||
|
isFirst = True
|
||||||
for index, level in enumerate(soilUnlock):
|
for index, level in enumerate(soilUnlock):
|
||||||
x = soilPos[str(index + 1)]['x']
|
x = soilPos[str(index + 1)]['x']
|
||||||
y = soilPos[str(index + 1)]['y']
|
y = soilPos[str(index + 1)]['y']
|
||||||
|
|
||||||
|
#如果土地已经到达对应等级
|
||||||
if soilNumber >= int(level):
|
if soilNumber >= int(level):
|
||||||
await img.paste(soil, (x, y))
|
await img.paste(soil, (x, y))
|
||||||
|
|
||||||
#缺少判断土地上是否有农作物
|
#TODO 缺少判断土地上是否有农作物
|
||||||
plant = BuildImage(background=g_sResourcePath / "plant/basic/0.png")
|
plant = BuildImage(background=g_sResourcePath / "plant/basic/0.png")
|
||||||
await plant.resize(0, 35, 58)
|
await plant.resize(0, 35, 58)
|
||||||
await img.paste(plant, (x + 3, y + 3))
|
await img.paste(plant, (x + 100, y + 50))
|
||||||
else:
|
else:
|
||||||
await img.paste(grass, (x, y))
|
await img.paste(grass, (x, y))
|
||||||
|
|
||||||
|
if isFirst:
|
||||||
|
isFirst = False
|
||||||
|
|
||||||
|
#首次添加扩建图片
|
||||||
|
expansion = BuildImage(background=g_sResourcePath / "background/expansion.png")
|
||||||
|
await expansion.resize(0, 69, 69)
|
||||||
|
await img.paste(expansion, (x + 85, y + 20))
|
||||||
|
|
||||||
return img.pic2bytes()
|
return img.pic2bytes()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def getUserPlantByUid(cls, uid: str) -> bytes:
|
async def getUserPlantByUid(cls, uid: str) -> bytes:
|
||||||
|
"""获取用户种子仓库
|
||||||
|
|
||||||
|
Args:
|
||||||
|
uid (str): 用户Uid
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bytes: 返回图片
|
||||||
|
"""
|
||||||
|
|
||||||
data_list = []
|
data_list = []
|
||||||
column_name = [
|
column_name = [
|
||||||
"-",
|
"-",
|
||||||
"种子名称",
|
"种子名称",
|
||||||
"数量"
|
"数量",
|
||||||
"收获经验",
|
"收获经验",
|
||||||
"收获数量",
|
"收获数量",
|
||||||
"成熟时间(分钟)",
|
"成熟时间(分钟)",
|
||||||
@ -80,15 +101,14 @@ class CFarmManager:
|
|||||||
return result.pic2bytes()
|
return result.pic2bytes()
|
||||||
|
|
||||||
sell = ""
|
sell = ""
|
||||||
|
|
||||||
for item in plant.split(','):
|
for item in plant.split(','):
|
||||||
if '|' in item:
|
if '|' in item:
|
||||||
plant_name, count = item.split('|', 1) # 分割一次,避免多竖线问题
|
plantName, count = item.split('|', 1) # 分割一次,避免多竖线问题
|
||||||
try:
|
try:
|
||||||
plantInfo = g_pJsonManager.m_pPlant['plant'][plant_name] # type: ignore
|
plantInfo = g_pJsonManager.m_pPlant['plant'][plantName] # type: ignore
|
||||||
|
|
||||||
icon = ""
|
icon = ""
|
||||||
icon_path = g_sResourcePath / f"plant/{plant_name}/icon.png"
|
icon_path = g_sResourcePath / f"plant/{plantName}/icon.png"
|
||||||
if icon_path.exists():
|
if icon_path.exists():
|
||||||
icon = (icon_path, 33, 33)
|
icon = (icon_path, 33, 33)
|
||||||
|
|
||||||
@ -100,7 +120,7 @@ class CFarmManager:
|
|||||||
data_list.append(
|
data_list.append(
|
||||||
[
|
[
|
||||||
icon,
|
icon,
|
||||||
plant_name,
|
plantName,
|
||||||
count,
|
count,
|
||||||
plantInfo['experience'],
|
plantInfo['experience'],
|
||||||
plantInfo['harvest'],
|
plantInfo['harvest'],
|
||||||
@ -123,4 +143,43 @@ class CFarmManager:
|
|||||||
|
|
||||||
return result.pic2bytes()
|
return result.pic2bytes()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
async def sowing(cls, uid: str, name: str, num: int = 1) -> str:
|
||||||
|
"""播种
|
||||||
|
|
||||||
|
Args:
|
||||||
|
uid (str): 用户Uid
|
||||||
|
name (str): 播种种子名称
|
||||||
|
num (int, optional): 播种数量
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str:
|
||||||
|
"""
|
||||||
|
plant = await g_pSqlManager.getUserPlantByUid(uid)
|
||||||
|
|
||||||
|
if plant == None:
|
||||||
|
return "你的种子仓库是空的,快去买点吧!"
|
||||||
|
|
||||||
|
for item in plant.split(','):
|
||||||
|
if '|' in item:
|
||||||
|
plantName, count = item.split('|', 1) # 分割一次,避免多竖线问题
|
||||||
|
|
||||||
|
#判断仓库是否有当前播种种子
|
||||||
|
if plantName == name:
|
||||||
|
count = int(count)
|
||||||
|
|
||||||
|
#获取用户解锁多少块地
|
||||||
|
soilName = ""
|
||||||
|
soilNumber = await g_pSqlManager.getUserSoilByUid(uid)
|
||||||
|
#遍历地块,查看地块是否可以播种
|
||||||
|
for i in arange(1, soilNumber + 1):
|
||||||
|
if count > 0:
|
||||||
|
soilName = f"soil{str(i)}"
|
||||||
|
#如果可以播种
|
||||||
|
if await g_pSqlManager.getUserSoilStatusBySoilID(uid, soilName):
|
||||||
|
count -= 1
|
||||||
|
await g_pSqlManager.updateUserSoilStatusBySowing(uid, soilName, plantName)
|
||||||
|
return f"播种{plantName}成功!"
|
||||||
|
return "播种失败"
|
||||||
|
|
||||||
g_pFarmManager = CFarmManager()
|
g_pFarmManager = CFarmManager()
|
||||||
|
|||||||
BIN
resource/background/expansion.png
Normal file
BIN
resource/background/expansion.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.5 KiB |
BIN
resource/background/gains.png
Normal file
BIN
resource/background/gains.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
Loading…
Reference in New Issue
Block a user