From 26958aff1b844a743a805b4f9075bee800b72a46 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 04 十一月 2025 14:35:37 +0800
Subject: [PATCH] 332 【主界面】座骑系统-服务端
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py | 186 ++++++++++++++++++++--------------------------
1 files changed, 82 insertions(+), 104 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py
index df771fc..de8c400 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Horse.py
@@ -6,132 +6,110 @@
#
# @todo:坐骑
# @author hxp
-# @date 2019-12-17
+# @date 2025-11-04
# @version 1.0
#
# 详细描述: 坐骑
#
#-------------------------------------------------------------------------------
-#"""Version = 2019-12-17 18:30"""
+#"""Version = 2025-11-04 14:30"""
#-------------------------------------------------------------------------------
import GameWorld
-import ChConfig
+import IpyGameDataPY
import PlayerControl
import PlayerHorse
-import IpyGameDataPY
-import time
+import ChConfig
-#---------------------------------------------------------------------
-#逻辑实现
-
-## GM命令执行入口
-# @param curPlayer 当前玩家
-# @param msgList 参数列表
-# @return None
-# @remarks 函数详细说明.
def OnExec(curPlayer, msgList):
if not msgList:
GameWorld.DebugAnswer(curPlayer, "重置所有: Horse 0")
- GameWorld.DebugAnswer(curPlayer, "设置进阶: Horse 等阶 丹数")
- GameWorld.DebugAnswer(curPlayer, "设置培养: Horse 培养类型 等阶 丹数")
- GameWorld.DebugAnswer(curPlayer, "全部幻化: Horse skin 1")
- GameWorld.DebugAnswer(curPlayer, "重置幻化: Horse skin 0")
- GameWorld.DebugAnswer(curPlayer, "设置幻化: Horse skin 幻化ID 状态")
- GameWorld.DebugAnswer(curPlayer, "设置星级: Horse star 坐骑ID 星级")
+ GameWorld.DebugAnswer(curPlayer, "设置阶级: Horse 阶 [等级 经验]")
+ GameWorld.DebugAnswer(curPlayer, "重置外观: Horse s0 [外观ID]")
+ GameWorld.DebugAnswer(curPlayer, "添加外观: Horse s1 外观ID [有效秒]")
+ GameWorld.DebugAnswer(curPlayer, "外观星级: Horse s2 外观ID 星级")
return
- if msgList[0] == "skin":
- if len(msgList) == 2:
- skinState = msgList[1]
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
- skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
- skinID = skinPlusIpyData.GetID()
- __GMSetHorseSkinState(curPlayer, skinID, skinState, skinPlusIpyData.GetSkinValidTime())
- elif len(msgList) == 3:
- skinID = msgList[1]
- skinState = msgList[2]
- skinPlusIpyData = IpyGameDataPY.GetIpyGameData("HorseSkinPlus", skinID)
- if not skinPlusIpyData:
- GameWorld.DebugAnswer(curPlayer, "坐骑幻化ID不存在! skinID=%s" % skinID)
- return
- __GMSetHorseSkinState(curPlayer, skinID, skinState, skinPlusIpyData.GetSkinValidTime())
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ syncSkinIDList = []
+ value1 = msgList[0]
+ if value1 == 0:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseClassLV, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseLV, PlayerHorse.HorseLVStart)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseExp, 0)
+ PlayerControl.SetHorseSkinID(curPlayer, PlayerHorse.GetDefaultHorseSkinID())
+ syncSkinIDList = __ResetHorseSkin(curPlayer, 0)
+
+ elif value1 == "s0":
+ horseSkinID = msgList[1] if len(msgList) > 1 else 0
+ syncSkinIDList = __ResetHorseSkin(curPlayer, horseSkinID)
+
+ elif value1 == "s1":
+ horseSkinID = msgList[1] if len(msgList) > 1 else 0
+ expireTimes = msgList[2] if len(msgList) > 2 else None
+ if PlayerHorse.AddHorseSkin(curPlayer, horseSkinID, expireTimes, True):
+ endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HorseSkinEndTime % horseSkinID)
+ endTimeStr = "永久" if not endTime else GameWorld.ChangeTimeNumToStr(endTime)
+ GameWorld.DebugAnswer(curPlayer, "添加外观成功:%s,到期:%s" % (horseSkinID, endTimeStr))
else:
- return
-
- elif msgList[0] == "star":
- horseID = msgList[1] if len(msgList) > 1 else 0
- horseStar = msgList[2] if len(msgList) > 2 else 0
- if not horseID or not horseStar:
- return
- skinID = 0
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
- skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
- if horseID != skinPlusIpyData.GetHorseID():
- continue
- if PlayerHorse.CheckHorseSkinState(curPlayer, skinPlusIpyData):
- skinID = skinPlusIpyData.GetID()
- break
- if not skinID:
- GameWorld.DebugAnswer(curPlayer, "该坐骑不存在或未激活:horseID=%s" % horseID)
- return
- if not IpyGameDataPY.GetIpyGameData("HorseStarUp", horseID, horseStar):
- GameWorld.DebugAnswer(curPlayer, "不存在该坐骑星级:horseID=%s,star=%s" % (horseID, horseStar))
- return
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserStar % horseID, horseStar)
- GameWorld.DebugAnswer(curPlayer, "设置坐骑星级:horseID=%s,star=%s,skinID=%s" % (horseID, horseStar, skinID))
-
- elif len(msgList) == 1:
- if msgList[0] == 0:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserLV, 1)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserEatItemCount, 0)
- for trainType in xrange(1, PlayerHorse.GetHorseTrainTypes() + 1):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainLV % trainType, 1)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainItemCount % trainType, 0)
-
- ipyDataMgr = IpyGameDataPY.IPY_Data()
- for index in xrange(ipyDataMgr.GetHorseSkinPlusCount()):
- skinPlusIpyData = ipyDataMgr.GetHorseSkinPlusByIndex(index)
- skinID = skinPlusIpyData.GetID()
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID, 0)
-
- for index in range(ipyDataMgr.GetHorseCount()):
- ipyData = ipyDataMgr.GetHorseByIndex(index)
- horseID = ipyData.GetHorseID()
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserStar % horseID, 0)
-
- elif len(msgList) == 2:
- lv, eatItemCount = msgList
- if lv < 1:
- GameWorld.DebugAnswer(curPlayer, "等级不能小于1")
- return
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserLV, lv)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserEatItemCount, eatItemCount)
-
- elif len(msgList) == 3:
- trainType, trainLV, eatItemCount = msgList
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainLV % trainType, trainLV)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserTrainItemCount % trainType, eatItemCount)
-
- else:
+ GameWorld.DebugAnswer(curPlayer, "添加外观失败:%s" % (horseSkinID))
return
+
+ elif value1 == "s2":
+ horseSkinID = msgList[1] if len(msgList) > 1 else 0
+ setStar = msgList[2] if len(msgList) > 2 else 0
+ ipyData = IpyGameDataPY.GetIpyGameData("HorseSkin", horseSkinID)
+ if not ipyData:
+ GameWorld.DebugAnswer(curPlayer, "该外观不存在:%s" % horseSkinID)
+ return
+ setStar = min(setStar, ipyData.GetStarMax())
+ GameWorld.DebugAnswer(curPlayer, "设置外观:%s,星:%s" % (horseSkinID, setStar))
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseSkinStar % horseSkinID, setStar)
+ syncSkinIDList.append(horseSkinID)
+ # 设置阶级: Horse 阶 [等级 经验]
+ else:
+ classLV = msgList[0] if len(msgList) > 0 else 0
+ horseLV = msgList[1] if len(msgList) > 1 else 0
+ exp = msgList[2] if len(msgList) > 2 else 0
+ maxIpyData = ipyDataMgr.GetHorseClassByIndex(-1)
+ classLV = min(classLV, maxIpyData.GetClassLV())
+ classIpyData = IpyGameDataPY.GetIpyGameData("HorseClass", classLV)
+ horseLV = max(PlayerHorse.HorseLVStart, min(horseLV, classIpyData.GetMaxHorseLV()))
+ exp = min(exp, classIpyData.GetLVUPItemCnt())
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseClassLV, classLV)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseLV, horseLV)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseExp, exp)
+ GameWorld.DebugAnswer(curPlayer, "设置坐骑阶:%s,等级:%s,经验:%s" % (classLV, horseLV, exp))
+
+ PlayerHorse.SyncHorseClassInfo(curPlayer)
+ syncSkinIDList and PlayerHorse.SyncHorseSkinInfo(curPlayer, syncSkinIDList)
PlayerHorse.RefreshHorseAttr(curPlayer)
- PlayerHorse.PlayerHorseLogin(curPlayer)
return
-def __GMSetHorseSkinState(curPlayer, skinID, skinState, validTime=0):
- if not skinState:
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, 0)
+def __ResetHorseSkin(curPlayer, horseSkinID=0):
+ syncSkinIDList = []
+ if not horseSkinID:
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetHorseSkinCount()):
+ ipyData = ipyDataMgr.GetHorseSkinByIndex(index)
+ horseSkinID = ipyData.GetSkinID()
+ if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorseSkinState, horseSkinID):
+ continue
+ GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorseSkinState, horseSkinID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseSkinEndTime % horseSkinID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseSkinStar % horseSkinID, 0)
+ syncSkinIDList.append(horseSkinID)
else:
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorserSkinPlusState, skinID, 1)
- if validTime > 0:
- updSkinEndTime = int(time.time()) + validTime
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorserSkinEndTime % skinID, updSkinEndTime)
- return
+ ipyData = IpyGameDataPY.GetIpyGameData("HorseSkin", horseSkinID)
+ if not ipyData:
+ GameWorld.DebugAnswer(curPlayer, "该外观不存在:%s" % horseSkinID)
+ return
+ GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HorseSkinState, horseSkinID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseSkinEndTime % horseSkinID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HorseSkinStar % horseSkinID, 0)
+ syncSkinIDList.append(horseSkinID)
+ GameWorld.DebugAnswer(curPlayer, "删除外观:%s" % syncSkinIDList)
+ return syncSkinIDList
--
Gitblit v1.8.0