| | |
| | | #
|
| | | # @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
|
| | |
|