#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerCrossChampionship # # @todo:¿ç·þÅÅλÕù°ÔÈü # @author hxp # @date 2022-09-21 # @version 1.0 # # ÏêϸÃèÊö: ¿ç·þÅÅλÕù°ÔÈü # #------------------------------------------------------------------------------- #"""Version = 2022-09-21 21:30""" #------------------------------------------------------------------------------- import GameWorld import ShareDefine import PlayerControl import CrossRealmPlayer import ChPyNetSendPack import NetPackCommon import IpyGameDataPY import ChConfig import random import time def DoChampionshipOpen(curPlayer): DoPlayerLogin(curPlayer) return def DoPlayerLogin(curPlayer): if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount): Sync_ChampionshipPlayerInfo(curPlayer) return def DoPlayerOnDay(curPlayer): if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Championship_WorshipCount, 0) Sync_ChampionshipPlayerInfo(curPlayer) return #// C1 20 ¿ç·þÅÅλÏɹÙÉêÇë #tagCMChampionshipOfficialApply # #struct tagCMChampionshipOfficialApply #{ # tagHead Head; # BYTE ZoneID; //ÏɹÙÊý¾Ý·ÖÇøID # WORD MainOfficialID; //½çÖ÷¹ÙÖ°ID # WORD OfficialID; //ÉêÇë¹ÙÖ°ID # BYTE Cancel; //ÊÇ·ñÈ¡ÏûÉêÇ룬ĬÈÏ0-ÉêÇ룻1-È¡ÏûÉêÇë #}; def OnChampionshipOfficialApply(index, clientData, tick): if GameWorld.IsCrossServer(): return curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() zoneID = clientData.ZoneID mainOfficialID = clientData.MainOfficialID officialID = clientData.OfficialID cancel = clientData.Cancel realmLV = curPlayer.GetOfficialRank() needRealmLV = IpyGameDataPY.GetFuncCfg("CrossChamOfficial", 3) if realmLV < needRealmLV: GameWorld.DebugLog("ËùÐè¾³½ç²»×㣬ÎÞ·¨ÉêÇëÏɹÙ! realmLV(%s) < %s" % (realmLV, needRealmLV), playerID) return # ·¢ËÍ¿ç·þ·þÎñÆ÷ dataMsg = {"zoneID":zoneID, "mainOfficialID":mainOfficialID, "officialID":officialID, "cancel":cancel, "playerID":playerID, "PropData":CrossRealmPlayer.GetPlayerCrossPropDataShort(curPlayer)} GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChampionshipOfficialApply, dataMsg) return #// C1 21 ¿ç·þÅÅλÏɹÙÌôÕ½ #tagCMChampionshipOfficialChallenge # #struct tagCMChampionshipOfficialChallenge #{ # tagHead Head; # BYTE ZoneID; //ÏɹÙÊý¾Ý·ÖÇøID # WORD MainOfficialID; //½çÖ÷¹ÙÖ°ID # WORD OfficialID; //ÌôÕ½µÄÄ¿±ê¹ÙÖ°ID # DWORD PlayerID; //ÌôսʱµÄÄ¿±êÍæ¼ÒID #}; def OnChampionshipOfficialChallenge(index, clientData, tick): if GameWorld.IsCrossServer(): return curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() zoneID = clientData.ZoneID mainOfficialID = clientData.MainOfficialID officialID = clientData.OfficialID tagPlayerID = clientData.PlayerID realmLV = curPlayer.GetOfficialRank() needRealmLV = IpyGameDataPY.GetFuncCfg("CrossChamOfficial", 3) if realmLV < needRealmLV: GameWorld.DebugLog("ËùÐè¾³½ç²»×㣬ÎÞ·¨ÌôÕ½ÏɹÙ! realmLV(%s) < %s" % (realmLV, needRealmLV), playerID) return # ·¢ËÍ¿ç·þ·þÎñÆ÷ dataMsg = {"zoneID":zoneID, "mainOfficialID":mainOfficialID, "officialID":officialID, "playerID":playerID, "tagPlayerID":tagPlayerID, "PropData":CrossRealmPlayer.GetPlayerCrossPropDataShort(curPlayer)} GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChampionshipOfficialChallenge, dataMsg) return #// C1 22 ¿ç·þÅÅλ¾º²Â #tagCMChampionshipGuess # #struct tagCMChampionshipGuess #{ # tagHead Head; # BYTE ZoneID; //ÅÅλÊý¾Ý·ÖÇøID # BYTE GuessType; //¾º²ÂÀàÐÍ 8-8Ç¿£»4-4Ç¿ÅÅλ # DWORD PlayerID; //Ä¿±êÍæ¼ÒID # BYTE GuessCount; //Ͷע/×·¼Ó·ÝÊý # BYTE GuessRank; // ¾º²ÂÃû´Î£¬Ã»ÓÐÃû´ÎµÄ¾º²ÂĬÈÏ0£»1-´ú±íµÚÒ»Ãû #}; def OnChampionshipGuess(index, clientData, tick): if GameWorld.IsCrossServer(): return curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() zoneID = clientData.ZoneID guessType = clientData.GuessType tagPlayerID = clientData.PlayerID guessCount = clientData.GuessCount guessRank = clientData.GuessRank moneyType, moneyValue = IpyGameDataPY.GetFuncEvalCfg("CrossChamGuess", 1) guessMoney = moneyValue * guessCount if guessMoney <= 0: return if not PlayerControl.HaveMoney(curPlayer, moneyType, guessMoney): return if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Championship, tick): PlayerControl.NotifyCode(curPlayer, "RequestLater") return # ·¢ËÍ¿ç·þ·þÎñÆ÷ dataMsg = {"zoneID":zoneID, "guessType":guessType, "playerID":playerID, "tagPlayerID":tagPlayerID, "guessRank":guessRank, "guessMoney":guessMoney, "moneyType":moneyType, "exDataType":"ChampionshipGuess"} GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChampionshipGuess, dataMsg) return #// C1 23 ¿ç·þÅÅλĤ°Ý #tagCMChampionshipWorship # #struct tagCMChampionshipWorship #{ # tagHead Head; # BYTE ZoneID; //ÏɹÙÊý¾Ý·ÖÇøID # DWORD PlayerID; //Ä¿±êÍæ¼ÒID #}; def OnChampionshipWorship(index, clientData, tick): if GameWorld.IsCrossServer(): return curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() zoneID = clientData.ZoneID tagPlayerID = clientData.PlayerID worshipCountMax = IpyGameDataPY.GetFuncCfg("CrossChamWorship", 1) if worshipCountMax: worshipCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount) if worshipCountToday >= worshipCountMax: GameWorld.DebugLog("Ĥ°Ý´ÎÊý²»×ã! worshipCountToday=%s >= %s" % (worshipCountToday, worshipCountMax), curPlayer.GetPlayerID()) return False if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Championship, tick): PlayerControl.NotifyCode(curPlayer, "RequestLater") return # ·¢ËÍ¿ç·þ·þÎñÆ÷ dataMsg = {"zoneID":zoneID, "playerID":playerID, "tagPlayerID":tagPlayerID, "exDataType":"OfficialWorship", "WorshipTime":int(time.time())} GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChampionshipWorship, dataMsg) return def GameServer_Championship(curPlayer, msgData): playerID = curPlayer.GetPlayerID() msgType = msgData[0] if msgType == "ChampionshipGuess": dataMsg = msgData[1] if not isinstance(dataMsg, dict) or "moneyType" not in dataMsg: return moneyType = dataMsg["moneyType"] guessMoney = dataMsg["guessMoney"] infoDict = dataMsg PlayerControl.PayMoney(curPlayer, moneyType, guessMoney, msgType, infoDict) elif msgType == "OfficialWorship": dataMsg = msgData[1] worshipTime = dataMsg["WorshipTime"] worshipDouble = dataMsg.get("worshipDouble", 0) if GameWorld.CheckTimeIsSameServerDayEx(worshipTime): worshipCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount) + 1 worshipCountMax = IpyGameDataPY.GetFuncCfg("CrossChamWorship", 1) if worshipCountToday > worshipCountMax: return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Championship_WorshipCount, worshipCountToday) GameWorld.DebugLog("¸üÐÂĤ°Ý´ÎÊý! worshipCountToday=%s" % worshipCountToday, playerID) Sync_ChampionshipPlayerInfo(curPlayer) gongdePointRange = IpyGameDataPY.GetFuncEvalCfg("CrossChamWorship", 2) # Ëæ»ú½±Àø¹¦µÂµã·¶Î§ if len(gongdePointRange) != 2: return gongdePoint = random.randint(gongdePointRange[0], gongdePointRange[1]) GameWorld.DebugLog("Ĥ°ÝËæ»ú¹¦µÂµã: gongdePoint=%s" % gongdePoint, playerID) doubleHMList = IpyGameDataPY.GetFuncEvalCfg("CrossChamWorship", 3) # Ë«±¶Ä¤°Ýʱ¼ä·¶Î§ if worshipDouble and len(doubleHMList) == 2: fromHour, fromMinute = doubleHMList[0] toHour, toMinute = doubleHMList[1] serverTime = GameWorld.GetCurrentTime() curHour, curMinute = serverTime.hour, serverTime.minute fromValue = fromHour * 100 + fromMinute toValue = toHour * 100 + toMinute curValue = curHour * 100 + curMinute if fromValue <= curValue <= toValue: gongdePoint *= 2 GameWorld.DebugLog("Ĥ°ÝË«±¶¹¦µÂµã: gongdePoint=%s" % gongdePoint, playerID) else: GameWorld.DebugLog("·ÇË«±¶Ä¤°ÝÆÚ¼ä: doubleHM(%s~%s), curHM=%s" % (fromValue, toValue, curValue), playerID) if gongdePoint: PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_GongdePoint, gongdePoint, "OfficialWorship") return def Sync_ChampionshipPlayerInfo(curPlayer): clientPack = ChPyNetSendPack.tagMCChampionshipPlayerInfo() clientPack.WorshipCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Championship_WorshipCount) NetPackCommon.SendFakePack(curPlayer, clientPack) return