#!/usr/bin/python # -*- coding: GBK -*- # # @todo: # # @author: Alee # @date 2017-12-1 ÏÂÎç01:37:09 # @version 1.0 # # @note: # #--------------------------------------------------------------------- #µ¼Èë import PlayerState import IPY_GameWorld import GameWorld import PlayerControl import GameMap import ChConfig import EventShell import SkillShell import BuffSkill import PlayerEventCounter import PlayerTeam import PlayerHorse import PlayerTruck import NPCCommon import PlayerGameEvent import SkillCommon import FBLogic import ChItem import ItemCommon import ItemControler import ChEquip import FunctionNPCCommon import PlayerGMOper import ReadChConfig import PetControl import OperControlManager import ShareDefine import PlayerAutoCheckOnline import PlayerGameWallow import NetPackCommon import ChPyNetSendPack import Operate_PlayerBuyZhenQi import DataRecordPack import PlayerBillboard import UpdatePlayerName import PlayerOnlinePrize import PlayerLVAward import PlayerGoldGift import PlayerSignDay import MixServerCampaign import PlayerPet import PlayerPrestigeSys import PlayerFamily import PlayerLoginDayAward import PlayerGodWeapon import PlayerWorldAverageLv import GameLogic_ManorWar import PlayerGoldInvest import PlayerActivity import PlayerTeHui import FBCommon import HighLadderTube import BossHurtMng import PlayerAction import PlayerAttrFruit import PlayerSuccess import PlayerDienstgrad import PlayerMixLoginDayAward import PlayerFreeGoods import ShopItemManage import PlayerRecover import Operate_EquipSuitCompose import PlayerEquipDecompose import PlayerCoat import PlayerQQ import PlayerCostVIP import PlayerMergeKing import PlayerMergePK import GameFuncComm import PlayerMagicWeapon import GameLogic_TrialTower import GameLogic_FamilyWar import PlayerBossReborn import Operate_EquipWash import PlayerTreasure import PlayerMergeEvent import GameLogic_GodArea import PlayerRune import PlayerFamilyRedPacket import IpyGameDataPY import EventReport import Operate_EquipStone import OpenServerCampaign import PlayerVip import PlayerRefineStove import PassiveBuffEffMng import PlayerDiceEx import QuestCommon import PlayerTJG import GameLogic_XMZZ import GameLogic_SealDemon import GameLogic_Dogz import PlayerFlashGiftbag import PlayerCostRebate import PlayerSpringSale import PlayerFairyCeremony import ChNetSendPack import FamilyRobBoss import PyGameData import PlayerCoin import PlayerGeTui import PlayerDogz import datetime import time import math import re #--------------------------------------------------------------------- #--------------------------------------------------------------------- ##C++µ÷Ó÷â°ü, µØÍ¼¿ªÆô³É¹¦, ³õʼ»¯ÐÅÏ¢ #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks µØÍ¼¿ªÆô³É¹¦, ³õʼ»¯ÐÅÏ¢ def InitPlayer(tick): return #--------------------------------------------------------------------- ##Íæ¼ÒµÇ½ÓÎÏ·³õʼ»¯ #@param curPlayer Íæ¼ÒʵÀý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks Íæ¼ÒµÇ½ÓÎÏ·³õʼ»¯ def InitLoginPlayer(curPlayer, tick): #³õʼ»¯Ö°Òµ½×Êý£¬Ä¬ÈÏ1 if PlayerControl.GetJobRank(curPlayer) == 0: PlayerControl.SetJobRank(curPlayer, 1) ##³õʼ»¯½»Ò×Áбí if curPlayer.GetTradeList().GetTradeItemCount() == 0: curPlayer.GetTradeList().SetTradeListCount(ChConfig.Def_PlayerTradeMaxItemCount) #³õʼ»¯Íæ¼ÒµÄʱÖÓ¸öÊý if curPlayer.GetTickTypeCount() == 0: curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count) #³õʼ»¯Íæ¼ÒÁÄÌìÆµµÀ if curPlayer.GetMaxChannelCount() == 0: curPlayer.SetMaxChannelCount(ChConfig.Def_PlayerTalkChannelMaxCount) #=============================================================================== # #³õʼ»¯Íæ¼Ò¼ø¶¨¹ÜÀíÆ÷ÎïÆ·×î´ó¸öÊý # identifyItemManager = curPlayer.GetIdentifyManager() # # #ÉèÖÃ×î´óÊýÁ¿ # if identifyItemManager.GetCount() == 0: # identifyItemManager.SetCount(ChConfig.TYPE_Player_identifyManagerCount) # # #³õʼ»¯±¦Ê¯ÍÚ³ý¹ÜÀíÆ÷×î´ó¸öÊý # stoneBreakManager = curPlayer.GetStoneBreakManager() # # if stoneBreakManager.GetCount() == 0: # stoneBreakManager.SetCount(ChConfig.TYPE_Player_StoneBreakManagerCount) #=============================================================================== #³õʼ»¯ÎïÆ· #ChItem.InitPlayerLoginItem(curPlayer, tick) return #--------------------------------------------------------------------- ##C++·â°üGameServer_InitOK ´¦Àí #@param curPlayer Íæ¼ÒʵÀý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ×Ô¶¨Ò庯Êý, C++·â°üGameServer_InitOK ´¦Àí def OnAllServerInitOK(curPlayer, tick): if FBLogic.PlayerLoginInFBCheck(curPlayer, tick): #Íæ¼ÒÊǵÚÒ»´ÎµÇ¼, ²¢ÇÒÍæ¼ÒÐèÒªÌß»ØÔ­À´µØÍ¼ return #--------------------------------֪ͨ¿Í»§¶ËÈÎÎñ------------- #ÏÈ·¢ËÍËùÓÐÈÎÎñ, ÔÙË¢ÐÂÈÕÆÚ, ·ñÔò»áÓÐ2¸öÏàͬµÄÈÎÎñÔÚÍæ¼ÒÉíÉÏ #°ÑÍæ¼Òµ±Ç°µÄËùÓÐÈÎÎñ·¢Ë͸ø¿Í»§¶Ë #GameWorld.Log('EventShell.NotifyAllQuestDetail') EventShell.NotifyAllQuestDetail(curPlayer, True) #Ë¢ÐÂÈËÎïÈÕÆÚ״̬ #GameWorld.Log('PlayerEventCounter.UpdatePlayerLoginTime') PlayerEventCounter.UpdatePlayerLoginTime(curPlayer) #2010/4/20 Õâ¸öʼþÔÚ EventResponse_OnLoginÖд¥·¢,ÕâÀïÖØ¸´´¥·¢ÁË #GameWorld.Log('EventShell.PlayerGMEventTrig') #EventShell.PlayerGMEventTrig(curPlayer) #-------------------------------------------------------- return ##·ÇͬһÌì¶þ´ÎµÇ½ # @param curPlayer Íæ¼ÒʵÀý # @return None def NoteOtherDayLogin(curPlayer): #¼Ç¼¹ý»òÕßδµÇ½¹ý ²»¼Ç¼ if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_OtherDayLogin) != 1: return logoffTimeStr = curPlayer.GetLogoffTime().strip() loginTimeStr = curPlayer.GetLoginTime().strip() #curTimeStr = GameWorld.GetCurrentDataTimeStr() #·À·¶ÍⲿÂß¼­´íÎ󣬻òÒì³£Çé¿ö if logoffTimeStr in ['', '0'] or loginTimeStr in ['', '0']: return logoffTimeDate = GameWorld.GetDateTimeByStr(logoffTimeStr.split()[0], ChConfig.TYPE_Time_Format_Day) #ͬһÌì²»¼Ç¼ if logoffTimeDate == GameWorld.GetDateTimeByStr(loginTimeStr.split()[0], ChConfig.TYPE_Time_Format_Day): return #GameWorld.Log("OtherDayLogin offtime = %s" % logoffTimeDate) DataRecordPack.DR_OtherDayLogin(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer) #±ê¼ÇΪÒѼǼ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_OtherDayLogin, 2) return #--------------------------------------------------------------------- ##Íæ¼ÒµÇ½ÓÎÏ·Âß¼­´¦Àí #@param curPlayer Íæ¼ÒʵÀý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks Íæ¼ÒµÇ½ÓÎÏ·Âß¼­´¦Àí def DoPlayerLogin(curPlayer, tick): #ÕâÀïÖ»×ö³õʼ»¯Âß¼­ curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1) #֪ͨʱ¼ä Sync_PyServerDataTimeToClient(curPlayer) Sync_OpenServerDay(curPlayer) #Í¨ÖªÍæ¼Ò»ù±¾ÐÅÏ¢ curPlayer.Sync_ClientPlayerLogin() #ͬ²½GameServer×Ô¼ºµÄµØÍ¼ID curPlayer.Sync_GameServer_MapID() SyncGuideState(curPlayer) #³õʼ»¯Íæ¼Ò±³°ü InitPlayerPack(curPlayer) #Í¨ÖªÍæ¼ÒÎïÆ·ÐÅÏ¢ __Sync_PackDetel(curPlayer) #¸üÐÂÖ÷·þIDÐÅÏ¢ #UpdatePlayerServerGroupID(curPlayer) #ÉÏÏßѧϰ¼¼ÄÜ SkillCommon.PlayerLoginCheckLearnSkill(curPlayer) SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick) #ˢм¼ÄÜCD SkillCommon.PlayerLoginUpdateSkillCD(curPlayer, tick) #Í¨ÖªÍæ¼Ò¼¼ÄÜÐÅÏ¢ __Sync_ClientSkill(curPlayer) #Çå³ýÉú²ú²É¼¯Buff #PlayerControl.DelProduceBuff(curPlayer, tick) #Çå³ý¹ú¼Ò´ðÌâBuff #PlayerExam.DoLogic_ExitExam(curPlayer, tick, needRefresh = False) #Çå³ýVIPbuff #BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_VIPExp_SkillTypeID, tick) #PlayerReincarnation.ReincarOnLogin(curPlayer) #Í¨ÖªÍæ¼ÒµÄbuff __Sync_ClientBuff(curPlayer) #³õʼ»¯ÏÖʵʱ¼äÎïÆ· InitRealityTimeItem(curPlayer, tick) #---Ë¢ÐÂÁËÍæ¼ÒÊôÐÔ, µÇ½ֻˢÐÂÒ»´Î£¬ÆäËûµØ·½²»ÓÃË¢ DoPlayerLoginInMap(curPlayer, tick) #ÉèÖÃÉÏÏßʱ¼ä curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr()) #PlayerControl.SyncOnLineTimeTotal(curPlayer) #PlayerControl.SyncOnLineTimeLastOpenPack(curPlayer, IPY_GameWorld.rptItem) PlayerGodWeapon.OnLogin(curPlayer) PlayerPrestigeSys.OnLogin(curPlayer) DataRecordPack.DR_PlayerLogin(curPlayer) EventReport.WriteEvent_login(curPlayer) leaveServerSecond = PlayerControl.GetPlayerLeaveServerSecond(curPlayer) if leaveServerSecond > ChConfig.Def_PlayerOfflineProtectTime / 1000: # ÀëÏß³¬¹ýÀëÏß±£»¤ÖØÖÃÇÐÏßÁÙʱ±£´æµÄÏà¹Ø¼Ç¼ֵ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PlayChangeLineID, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FuncChangeLineID, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HighChangeLineID, 0) #GameWorld.DebugLog("ÀëÏß³¬¹ý10ÃëÖØÖÃÇÐÏßÁÙʱ±£´æµÄÏà¹Ø¼Ç¼ֵ!leaveServerSecond=%s" % leaveServerSecond, curPlayer.GetPlayerID()) # ºÏ·þÊ׵Ǵ¦Àí __DoMixServerFirstLogin(curPlayer) PlayerBillboard.BillboardOnLogin(curPlayer) #·ÇͬһÌì¶þ´ÎµÇ½, Ó¦¸Ã·ÅÔڸú¯ÊýÖеÄSetLoginTimeÖ®ºó£¬EventResponse_OnEnter֮ǰ NoteOtherDayLogin(curPlayer) #ÉÏÏßʱ֪ͨÍÑ»ú¹Òʱ±»»÷ɱµÄÀëÏßʱ¼ä __Sync_PlayerOffline(curPlayer, tick) #Íæ¼ÒÀ©Õ¹ÐÅÏ¢ __SyncPlayerInfoEx(curPlayer) #PKģʽ SyncPKModel(curPlayer) #ͨÓÃÇ¿»¯ÐǼ¶ÐÅÏ¢ ChEquip.NotifyEquipPartStarLV(curPlayer) Operate_EquipWash.OnEquipWashLogin(curPlayer) #֪ͨÌ××°ÐÅÏ¢ ChEquip.NotifyEquipPartSuiteLV(curPlayer) ChEquip.SyncAllEquipAttrActiveInfo(curPlayer) #×°±¸Î»±¦Ê¯ÏâǶ֪ͨ Operate_EquipStone.OnLogin(curPlayer) #´óʦ #PlayerGreatMaster.MasterOnLogin(curPlayer) #֪ͨVIP PlayerVip.DoOnLogin(curPlayer, tick) #֪ͨ·¨±¦¾«Á¶µÈ¼¶ PlayerRefineStove.DoOnLogin(curPlayer, tick) #---Íæ¼ÒÉÏÏß, ³èÎïÂß¼­´¦Àí--- PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick) #ÒªÔÚSetCanMoveÖ®ºó×öÕâ¸öÊÂÇé, ·ñÔòOnEnter²»»á¿¨×¡Íæ¼Ò EventShell.EventResponse_OnEnter(curPlayer) EventShell.EventResponse_OnLogin(curPlayer) #֪ͨ»·½±Àø¼Ç¼ EventShell.NotifyRunEndAward(curPlayer) #Í¨ÖªÍæ¼ÒÓв¹³¥¿ÉÒÔÁìÈ¡ #curPlayer.DataServer_GetExpiationCount() #Í¨ÖªÍæ¼ÒÓгèÎï²¹³¥¿ÉÒÔÁìÈ¡ #curPlayer.DataServer_GetPetExpiationCount() #Íæ¼ÒÀëÏßÓʼþ֪ͨ #curPlayer.DataServer_GetMailListReq() #Çå¿ÕÍæ¼ÒÍòÄܱ³°üÖеÄÈÎÎñÎïÆ· ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere) #PlayerLoginNotify(curPlayer, tick) #·À³ÁÃÔ¼ÆËãÏÂÏßÀÛ»ýʱ¼ä PlayerGameWallow.Calc_Wallow_OfflineTime(curPlayer, tick) # ֪ͨµÈ¼¶½±ÀøÁìÈ¡¼Ç¼ PlayerLVAward.Sync_LVAwardGetRecordInfo(curPlayer) PlayerCoin.OnLogin(curPlayer) # Ê׳ä/ÌìÌìÊ׳ä/³äÖµºÀÀñ PlayerGoldGift.OnLogin(curPlayer) #Íæ¼Ò»Ø¹é֪ͨ #PlayerRecall.PlayerBack(curPlayer) #֪ͨ¹ºÂò¹¦ÄÜÖи÷¹ºÂòÀàÐ͵ÄÒѹºÂòºÍ¿É¹ºÂò´ÎÊý Operate_PlayerBuyZhenQi.DoPlayerLogin(curPlayer) # # #֪ͨ¹¦ÄÜÊ״δ¥·¢Çé¿ö GameFuncComm.Sync_FuncOpenState(curPlayer) # # #֪ͨ¿Í»§¶ËÇ©µ½ÐÅÏ¢ PlayerSignDay.SignDayOnLogin(curPlayer) # # #֪ͨ¿Í»§¶ËïÚ³µAIģʽ # PlayerTruck.Sync_TruckMode(curPlayer) #Í¨ÖªÍæ¼ÒËÀÍöʱ¼ä PlayerControl.PlayerControl(curPlayer).NotifyPlayerDeadTime(curPlayer) #ClearPlayerDeadInfo(curPlayer) #³äÖµ»î¶¯Íæ¼ÒµÇÈë´¦Àí #PlayerGoldAction.DoLogic_PlayerOnLogin(curPlayer) # Í¨ÖªÍæ¼ÒÊÇ·ñ¿ÉÒԲμӼÒ×å»î¶¯ #PlayerFamily.SendClientForbidFamilyAction(curPlayer) # Ìáʾ¹ó±ö¾ãÀÖ²¿ÐÅÏ¢ #PlayerVip.NoteVIPClubInfo(curPlayer) #½ÇÉ«¸ÄÃû´ÎÊý UpdatePlayerName.Sync_UpdatePlayerNameCount(curPlayer) #֪ͨÔËÐгɹ¦ curPlayer.BalanceServer_PlayerLoginInitOK() # ÐÂÊÖÖ¸µ¼Ô±ÉÏÏß´¦Àí # #PlayerFreshmanGuide.FreshmanGuiderOnLogin(curPlayer) # # ×øÆïÏà¹ØÍ¨Öª PlayerHorse.PlayerHorseLogin(curPlayer) PlayerTreasure.OnTreasureLogin(curPlayer) # # ֪ͨÀۼƵǽÀñ PlayerLoginDayAward.OnLoginNotifyLoginDayAward(curPlayer) # # ¿ª·þ»î¶¯½±ÀøÐÅÏ¢ OpenServerCampaign.OnOpenServerCampaignLogin(curPlayer) # # # ֪ͨºÏ·þ½±ÀøÁìȡ״̬ # PlayerMixLoginDayAward.OnLoginNotifyMixLoginDayAward(curPlayer) # # # ֪ͨºÏ·þ½±Àø # MixServerCampaign.OnMixServerCampaignLogin(curPlayer) # # # ½ÚÈյǽ½±Àø # PlayerFestivalLogin.OnLoginFestivalLogin(curPlayer) # ÊÔÁ¶Ö®Ëþ GameLogic_TrialTower.OnFBPlayerLogin(curPlayer) # ¹ÅÉñ½ûµØ GameLogic_GodArea.GodAreaOnLogin(curPlayer) # # ²É¼¯NPC´ÎÊý֪ͨ NPCCommon.SyncCollNPCTime(curPlayer) # # # ÌØ»Ý»î¶¯ # PlayerTeHui.PlayerLogin_TeHui(curPlayer) # # # ×Ô¶¨ÒåÉ̵ê # ShopItemManage.DoOnLogin(curPlayer) # # # ÿÈÕ»îÔ¾¶È PlayerActivity.OnLogin(curPlayer) # # # ¸±±¾½øÈëʱ¼ä FBCommon.FBOnLogin(curPlayer) # # #ÌìÌݾº¼¼³¡ # HighLadderTube.OnLogin(curPlayer) # # #ÊÀ½çµÈ¼¶ PlayerWorldAverageLv.OnLogin(curPlayer) # # Ͷ×ÊÀí²Æ PlayerGoldInvest.OnLogin(curPlayer) # # #½ÚÈջ # PlayerAction.ActionOnLogin(curPlayer) # # #ÊôÐÔ¹ûʵʹÓÃÇé¿ö PlayerAttrFruit.AttrFruitOnLogin(curPlayer) # # #³É¾Í PlayerSuccess.SuccOnLogin(curPlayer) # # #ͬ²½×Ô¶¯Õ½¶·ÅäÖüǼ # Sync_AutoFightSetting(curPlayer) # PlayerFamily.FamilyPlayerOnLogin(curPlayer, tick) #¸Äµ½ GameServerRefresh GameSever_PlayerInitOKºó´¦Àí²ÅÄܱ£Ö¤Íæ¼ÒÒѾ­ÔÚGameserver×¢²á #PlayerDienstgrad.RefreshBillBoardDienstgrad(curPlayer) # ³ÆºÅ PlayerDienstgrad.Sync_AllDienstgradOnLogin(curPlayer) # # ×ÊÔ´ÕÒ»ØOnLogin PlayerRecover.RecoverOnLogin(curPlayer) # # # ʱװ # PlayerCoat.OnLogin_Coat(curPlayer) # # # ¿ç·þÆ¥Åä # PlayerMergePK.MergePKOnLogin(curPlayer) # PlayerMergeKing.MergePKOnLogin(curPlayer) # ×Ô¶¨Òå»õ±Òֵͬ²½ PlayerControl.NotifyPlayerAllCurrency(curPlayer) #֪ͨ»ù´¡ÊôÐÔ NotifyPlayerBasePoint(curPlayer) #Ïû·Ñ·µÀû PlayerCostRebate.OnPlayerLogin(curPlayer) #ÏÞÊ±ÌØ»Ý PlayerSpringSale.OnPlayerLogin(curPlayer) #ÏÞʱÀñ°ü PlayerFlashGiftbag.OnPlayerLogin(curPlayer) # # Ïû·ÑVIP # PlayerCostVIP.CostVIPOnLogin(curPlayer, tick) # # # QQÏà¹Ø½±ÀøOnLogin # #PlayerQQ.Sync_QQAllAwardRecord(curPlayer) # # # ÊÀ½çboss BossHurtMng.OnLogin(curPlayer) ChItem.Sync_ItemDayUseCnt(curPlayer) # # ÐüÉ͵Ǽ֪ͨ # PlayerArrestTask.OnLogin(curPlayer) # ·ûÓ¡µÇ¼֪ͨ PlayerRune.PlayerRuneLogin(curPlayer) # ÏÉÃ˺ì°üµÇ¼֪ͨ PlayerFamilyRedPacket.OnPlayerLogin(curPlayer) # ·¨±¦µÇ¼֪ͨ PlayerMagicWeapon.PlayerMagicWeaponLogin(curPlayer) # É̵êÎïÆ·¹ºÂò´ÎÊýµÇ¼֪ͨ FunctionNPCCommon.ShopItemOnLogin(curPlayer) # ֪ͨÉèÖõı»¶¯¹¦·¨ PassiveBuffEffMng.OnLoginGFPassive(curPlayer) #ÎÒҪ̫¼« PlayerDiceEx.DiceExOnLogin(curPlayer) # ¾çÇéÈÎÎñÍê³É״̬ QuestCommon.Sync_StoryMissionState(curPlayer) #ÏÉħ֮Õù GameLogic_XMZZ.OnXMZZLogin(curPlayer) PlayerOnlinePrize.OnPlayerLogin(curPlayer) GameLogic_SealDemon.NotifyFMTDouble(curPlayer) #×°±¸·Ö½â PlayerEquipDecompose.PlayerLogin(curPlayer) #·À³ÁÃÔ PlayerGameWallow.DoLogic_CheckWallow(curPlayer, tick) # ֪ͨÍÑ»ú¹ÒÐÅÏ¢ PlayerTJG.NotifyTJGInfo(curPlayer) # ÍÆËÍÌáÐÑ PlayerGeTui.LoginNotifySetting(curPlayer) # ¼«Æ·°×Äà PlayerFreeGoods.OnLogin(curPlayer) # BOSS¸´»î»î¶¯ PlayerBossReborn.OnLogin(curPlayer) # ÏɽçÊ¢µä»î¶¯ PlayerFairyCeremony.OnLogin(curPlayer) # ·ÖÖ§ÏÂÔØ½±Àø¼Ç¼֪ͨ SyncPackDownloadAward(curPlayer) # µÇ¼´¥·¢¹¦ÄÜ¿ªÆô£¨ÀϺŴ¦Àí£© GameFuncComm.DoFuncOpenLogic(curPlayer) # ÉñÊÞ PlayerDogz.OnPlayerLogin(curPlayer) # ÉñÊÞ¸±±¾ GameLogic_Dogz.SyncNPCRefreshTime(curPlayer.GetID()) # Æï³è FamilyRobBoss.OnPlayerLogin(curPlayer) # ÉÏÏß²éѯһ´Î³äÖµ¶©µ¥ curPlayer.SendDBQueryRecharge() curPlayer.SetState(0) # ÍÑ»ú¹Ò»Ö¸´ÎªÕý³£ÉÏÏß curPlayer.SetFacePic(0) # ֪ͨÊý¾Ý¿âÊÇ·ñ±£´æ»¹ÊÇÏÂÏߣ¬×öÒ»´Î»Ö¸´£¬1Ϊ±£´æ 0ΪÕý³£ÏÂÏß tjgTime = PlayerTJG.GetTJGTime(curPlayer) if tjgTime: curPlayer.SendGameServerRefreshState(IPY_GameWorld.CDBPlayerRefresh_HappyPoint, tjgTime) # Èç¹û±»½ûÑԵģ¬ÉÏÏßͬ²½Ç°¶Ë if curPlayer.GetGMForbidenTalk(): curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_ForbidenTalk, curPlayer.GetGMForbidenTalk(), False) return ## Íæ¼ÒÀ©Õ¹ÐÅϢͬ²½ # @param curPlayer # @return None def __SyncPlayerInfoEx(curPlayer): playerInfoEx = ChPyNetSendPack.tagMCPlayerInfo() playerInfoEx.Clear() playerInfoEx.IsAdult = curPlayer.IsAdult() playerInfoEx.CreateRoleTime = curPlayer.GetCreateRoleTime() NetPackCommon.SendFakePack(curPlayer, playerInfoEx) return ## ºÏ·þÊ׵Ǵ¦Àí # @param curPlayer # @return None def __DoMixServerFirstLogin(curPlayer): isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer) if not isMixServer: return lastMixServerDayKey = ShareDefine.Def_Notify_WorldKey_LastMixServerDay lastMixServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(lastMixServerDayKey) GameWorld.DebugLog("ºÏ·þÊ׵Ǵ¦ÀílastMixServerDay=%s" % lastMixServerDay, curPlayer.GetPlayerID()) playerDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixLoginDay) if playerDay == lastMixServerDay: GameWorld.DebugLog("±¾´ÎºÏ·þÒѾ­µÇ¼¹ý.") return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDay, lastMixServerDay) # ͬ²½ÅÅÐаñ PlayerBillboard.UpdBillboardOnMixServerFirstLogin(curPlayer, lastMixServerDay) # ÆäËû # ... # ÖØÖõǼ½±ÀøÁìȡ״̬ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDayState, 0) PlayerMixLoginDayAward.NotifyPlayerAwardState(curPlayer) # ÖØÖø÷ºÏ·þ»î¶¯Êý¾Ý for campaignType in ShareDefine.Def_MixCampaign_Type_List: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_AwardRecord \ % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_RecordData \ % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign) # ÖØÖÃÍæ¼Ò¸ÄÃû´ÎÊý UpdatePlayerName.ResetChangeNameCnt(curPlayer) return #--------------------------------------------------------------------- ##Çå³ýÍæ¼ÒËÀÍöÐÅÏ¢ # @param curPlayer Ö÷½Ç # @return None def ClearPlayerDeadInfo(curPlayer): #¼Ç¼µ±Ç°ËÀÍö´ÎÊý£¬Ê±¼ä PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PlayerDeadCnt, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_DeadTime, 0) return ##Íæ¼ÒµÇ½, Ïà¹Ø»î¶¯Í¨Öª #@param curPlayer Íæ¼ÒʵÀý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks Íæ¼ÒµÇ½, Ïà¹Ø»î¶¯Í¨Öª def PlayerLoginNotify(curPlayer, tick): curTime = GameWorld.GetCurrentTime() #¶ÁÈ¡ÉÏÏßÌáʾ±í notifyByTimeSect = ReadChConfig.GetEvalChConfig('PlayerLoginNotify_TimeSect') #ijʱ¼ä¶ÎÄÚÉÏÏßÌáʾ notifyByDict = ReadChConfig.GetEvalChConfig('PlayerLoginNotify_Dict') #¸ù¾Ý×ÖµäÖµ¸øÌáʾ #Ôڹ涨ʱ¼ä¶ÎÄÚÉÏÏ߸øÌáʾ DoNotifyByTimeSect(curPlayer, curTime, notifyByTimeSect) #Ö¸¶¨×ÖµäÖµÄÚÌáʾ DoNotifyByDict(curPlayer, notifyByDict) return #--------------------------------------------------------------------- ##Ôڻ¹æ¶¨Ê±¼ä¶ÎÄÚÉÏÏ߸øÌáʾ #@param curPlayer Íæ¼ÒË÷Òý #@param curTime ´«Èëʱ¼ä #@param notifyInfo ÌáʾÐÅÏ¢ #@return ·µ»ØÖµÎÞÒâÒå #@remarks Ôڻ¹æ¶¨Ê±¼ä¶ÎÄÚÉÏÏ߸øÌáʾ def DoNotifyByTimeSect(curPlayer, curTime, notifyInfo): for curNotify in notifyInfo: #ÓÐʱ¼ä¶ÎÏÞÖÆ£¬Ñé֤ʱ¼ä¶Î if not GameWorld.IsAtActTime(curTime, curNotify[0]): continue PlayerControl.NotifyCode(curPlayer, curNotify[1], curNotify[2]) #--------------------------------------------------------------------- ##Ö¸¶¨×ÖµäÖµÄÚÌáʾ #@param curPlayer Íæ¼ÒʵÀý #@param notifyInfo ÌáʾÐÅÏ¢ #@return ·µ»ØÖµÎÞÒâÒå #@remarks Ö¸¶¨×ÖµäÖµÄÚÌáʾ def DoNotifyByDict(curPlayer, notifyInfo): gameWorld = GameWorld.GetGameWorld() for curNotify in notifyInfo: if gameWorld.GetGameWorldDictByKey(curNotify[0]) in curNotify[1]: PlayerControl.NotifyCode(curPlayer, curNotify[2], curNotify[3]) #--------------------------------------------------------------------- ##֪ͨ±³°üÏêϸÐÅÏ¢ #@param curPlayer Íæ¼ÒʵÀý #@return ·µ»ØÖµÎÞÒâÒå #@remarks ֪ͨ±³°üÏêϸÐÅÏ¢ def __Sync_PackDetel(curPlayer): itemManager = curPlayer.GetItemManager() for packIndex in ChConfig.Def_PlayerLoginInitPackIndexList: itemManager.GetPack(packIndex).Sync_Refresh() for packIndex in ChConfig.Def_VPackCnt_Dict.keys(): ItemControler.Sync_VPackItem_Refresh(curPlayer, packIndex) #=============================================================================== # # itemManager.GetPack(IPY_GameWorld.rptEquip).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptItem).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptRecycle).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptTitle).Sync_Refresh() # #itemManager.GetPack(IPY_GameWorld.rptInvestiture).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptHorse).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptAnyWhere).Sync_Refresh() # #itemManager.GetPack(IPY_GameWorld.rptFabao).Sync_Refresh() # #itemManager.GetPack(IPY_GameWorld.rptHorseEquip).Sync_Refresh() # #ʱװ±³°ü # itemManager.GetPack(IPY_GameWorld.rptCabinetWeaponCoat).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptCabinetHorse).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptCabinetDressCoat).Sync_Refresh() # #³èÎï´¢Îï¹ñ # itemManager.GetPack(IPY_GameWorld.rptPetCabinetPet).Sync_Refresh() # #´òÔì±³°ü(Òò´òÔì¸ÄΪԶ³Ì´òÔì,ÐèÒªÉÏÏß֪ͨ±³°üÄÚÈÝ) # itemManager.GetPack(IPY_GameWorld.rptCompose).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptResult).Sync_Refresh() # # itemManager.GetPack(IPY_GameWorld.rptJewelMerge).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptJewelMergeResult).Sync_Refresh() # itemManager.GetPack(IPY_GameWorld.rptFineSoulSlot).Sync_Refresh() # #itemManager.GetPack(IPY_GameWorld.rptBreakPrepare).Sync_Refresh() # #itemManager.GetPack(IPY_GameWorld.rptBreakItem).Sync_Refresh() #=============================================================================== return #--------------------------------------------------------------------- ##³õʼ»¯ÏÖʵʱ¼äÎïÆ· #@param curPlayer Íæ¼ÒʵÀý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ³õʼ»¯ÏÖʵʱ¼äÎïÆ· def InitRealityTimeItem(curPlayer, tick): PlayerState.ProcessTimeEquip(curPlayer, tick) return #--------------------------------------------------------------------- ##Í¨ÖªÍæ¼Ò¼¼ÄÜÐÅÏ¢ #@param curPlayer Íæ¼ÒʵÀý #@return ·µ»ØÖµÎÞÒâÒå #@remarks Í¨ÖªÍæ¼Ò¼¼ÄÜÐÅÏ¢ def __Sync_ClientSkill(curPlayer): skillManager = curPlayer.GetSkillManager() for i in range(skillManager.GetSkillCount()): curSkill = skillManager.GetSkillByIndex(i) curSkill.Sync_Skill() return #--------------------------------------------------------------------- ##Í¨ÖªÍæ¼ÒbuffÐÅÏ¢ #@param curPlayer Íæ¼ÒʵÀý #@return ·µ»ØÖµÎÞÒâÒå #@remarks Í¨ÖªÍæ¼ÒbuffÐÅÏ¢ def __Sync_ClientBuff(curPlayer): curPlayer.GetBuffState().Sync_Buff() curPlayer.GetDeBuffState().Sync_Buff() curPlayer.GetAura().Sync_Buff() curPlayer.GetIncBuff().Sync_Buff() curPlayer.GetProcessBuffState().Sync_Buff() curPlayer.GetProcessDeBuffState().Sync_Buff() #--------------------------------------------------------------------- ##ÉÏÏßʱ֪ͨÀëÏßʱ¼ä£¨ÀëÏß¹Ò»ú¹¦ÄÜ£© # @param curPlayer Íæ¼ÒʵÀý # @param tick ʱ¼ä´Á # @return ·µ»ØÖµÎÞÒâÒå # @remarks ÉÏÏßʱ֪ͨÀëÏßʱ¼ä£¨ÀëÏß¹Ò»ú¹¦ÄÜ£© def __Sync_PlayerOffline(curPlayer, tick): #---µÈ¼¶ÏÞÖÆ--- if GameWorld.IsMergeServer(): return PlayerTJG.TJGDeadOffline(curPlayer) #=============================================================================== # #---µÈ¼¶ÏÞÖÆ--- # lvLimit = ReadChConfig.GetEvalChConfig('OfflineSys_LVLimit') # if curPlayer.GetLV() < lvLimit: # return # # if GameWorld.IsMergeServer(): # return # # #µ±Ç°ÀëÏßʱ¼ä£¨·Ö£© # curOfflineMinutes = min(PlayerControl.GetPlayerLeaveServerMinute(curPlayer), # ChConfig.Def_UpperLimit_DWord) # # #·ÀÖ¹·þÎñÆ÷ʱ¼äÐ޸ĵ½¹ýÈ¥µÃµ½¸ºÖµ # if curOfflineMinutes < 0: # GameWorld.ErrLog("Login Time Error, outTime: %s - loginTime :%s" % # (curPlayer.GetLogoffTime(), GameWorld.GetCurrentDataTimeStr()), # curPlayer.GetPlayerID()) # curOfflineMinutes = 0 # # #ʱ¼äΪ·ÖÖÓ # minTimeLimit, maxTimeLimit = ReadChConfig.GetEvalChConfig("OfflineSys_AllTimeUpperLimit") # if curOfflineMinutes >= minTimeLimit: # #×ÜÀëÏßʱ¼ä£¨·Ö£© # allOfflineMinutes = min(curPlayer.GetOfflineMinutes() + curOfflineMinutes, maxTimeLimit) # #¼Ç¼ÀëÏß×Üʱ¼ä # curPlayer.SetOfflineMinutes(int(allOfflineMinutes)) # GameWorld.DebugLog("ÉèÖÃÀëÏß½±ÀøÊ±¼ä %s,curOfflineMinutes=%s" % (allOfflineMinutes, curOfflineMinutes), curPlayer.GetPlayerID()) # else: # GameWorld.DebugLog("ÀëÏßʱ¼ä¹ý¶Ì,²»¼ÆÈëÀëÏß½±Àø!curOfflineMinutes=%s" % curOfflineMinutes, curPlayer.GetPlayerID()) # # #֪ͨ¿Í»§¶ËÀëÏßʱ¼ä # # curPlayer.Syn_OfflineTimeRefresh(int(curOfflineMinutes)) # curPlayer.Syn_OfflineTimeQueryResult() #=============================================================================== return def UpdatePlayerServerGroupID(curPlayer): # ¸üÐÂ×Ô¼ºµÄ·þÎñÆ÷×éID, ¿ç·þ·þÎñÆ÷²»´¦Àí if GameWorld.IsMergeServer(): return serverGroupID = GameWorld.GetServerGroupID() if not serverGroupID: return playerServerGroupID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ServerGroupID) if playerServerGroupID != serverGroupID: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ServerGroupID, serverGroupID) GameWorld.DebugLog("¸üÐÂÍæ¼ÒËùÊô·þÎñÆ÷×éID: serverGroupID=%s" % serverGroupID) return #--------------------------------------------------------------------- ##Íæ¼ÒÔÚµØÍ¼·þÎñÆ÷ÖеǼok,³õʼ»¯×Ô¼º #@param curPlayer Íæ¼ÒʵÀý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks Íæ¼ÒÔÚµØÍ¼·þÎñÆ÷ÖеǼok,³õʼ»¯×Ô¼º def DoPlayerLoginInMap(curPlayer, tick): #֪ͨGameServerÇл»µØÍ¼¿ªÊ¼ curPlayer.GameServer_SetLoadMapState(0) #ÔÚÍæ¼ÒÇл»³¡¾°µÄʱºò, ²»»áµ÷Óõ½ÕâÀï curPlayer.SetCanMove(False) curPlayer.SetInitOK(False) #Íæ¼ÒµÇ¼³É¹¦ curPlayer.SetMapLoadOK(False) curPlayer.SetVisible(False) curPlayer.SetCanAttack(False) #Í˳öµöÓãÇå³ýÓæ·ò×° if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent: PlayerGameEvent.StopGameEvent(curPlayer, tick) else: PlayerGameEvent.TakeoffFishermanEquipment(curPlayer) #ÇеØÍ¼ÒªÇå³ýµÄbuff __CheckClearBuffOnMapChange(curPlayer, tick) #ÉÏÏߺÍÇеØÍ¼¼ÓÓÐÏÞÎÞµÐBuff SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick) #Ë¢ÐÂÍæ¼ÒµÄÊÓÒ° PlayerState.ChangePlayerSigh(curPlayer, tick) playerControl = PlayerControl.PlayerControl(curPlayer) #Ë¢ÐÂËùÓÐ״̬ playerControl.ReCalcAllState() #Ë¢ÐÂÒÑ·ÖÖÓµ¥Î»ÏûºÄµÄÎïÆ·(²»ÈÃÍæ¼ÒÒ»ÉÏÏ߾͵ôÄ;Ã) curPlayer.SetProcessEquipDurgTick(tick) #³õʼ»¯Íæ¼Òµ±Ç°ÉÏÏßʱ¼ä curPlayer.SetLoginTick(tick) #µÇ¼ÐµØÍ¼£¬ÖØÖüÆËãÔÚÏßʱ³¤tick curPlayer.SetDict(ChConfig.Def_PlayerKey_CalcOLTimeTick, tick) #³õʼ»¯Íæ¼ÒµÄÖØÉúµã PlayerControl.RefreshRebornPoint(curPlayer, tick) #Ç¿ÖÆ¼ÇÂ¼Íæ¼ÒµÄһЩÐÅÏ¢ SavePlayerMessionInDataServer(curPlayer) #¼ì²é¸üÐÂ×ÜÕ½¶·Á¦ #PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer, True) #Çå³ýÔÚ±¾µØÍ¼ÀëÏ߼ǼÐÅÏ¢ PlayerControl.RemoveLeaveServerPlayerInfo(curPlayer.GetPlayerID()) PyGameData.g_needRefreshMapServerState = True # ÓÐÍæ¼ÒµÇ¼µØÍ¼Ê±ÉèÖÃÐèҪˢРreturn ##¼ì²éÇеØÍ¼Çå³ý¸±±¾ÌØÊâbuff #@param curPlayer Íæ¼ÒʵÀý #@return def __CheckClearBuffOnMapChange(curPlayer, tick): curMapID = GameWorld.GetMap().GetMapID() fbBuffDict = ReadChConfig.GetEvalChConfig("FBBuff") buffIDList = [] for buffID, mapIDList in fbBuffDict.items(): # ²»ÊǸõØÍ¼µÄbuffÇå³ý if not mapIDList or curMapID not in mapIDList: if BuffSkill.DelBuffBySkillID(curPlayer, buffID, tick): GameWorld.DebugLog("ÇеØÍ¼É¾³ý¶àÓàbuff: %s" % buffID) buffIDList.append(buffID) # Çл»µØÍ¼²»»á´øBUFFeffect£¬ReCalcAllStateͳһ´¦Àí for buffID in ChConfig.ClearBuffOnMapChangeList: BuffSkill.DelBuffBySkillID(curPlayer, buffID, tick) return #--------------------------------------------------------------------- ##Ç¿ÖÆ¼ÇÂ¼Íæ¼ÒµÄһЩÐÅÏ¢ #@param curPlayer Íæ¼ÒʵÀý #@return ·µ»ØÖµÎÞÒâÒå #@remarks Ç¿ÖÆ¼ÇÂ¼Íæ¼ÒµÄһЩÐÅÏ¢ def SavePlayerMessionInDataServer(curPlayer): #mapID = curPlayer.GetMapID() #lineID = PlayerControl.GetPlayerLineID(curPlayer) #¼Ç¼µØÍ¼Ïß·£¬µ±Ç°¾­ÑéºÍ½ðÇ® return #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Íæ¼ÒµÇ½ÓÎÏ· #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Íæ¼ÒµÇ½ÓÎÏ· def PlayerLogin(index, tick): GameWorld.GetPsycoFunc(__Func_PlayerLogin)(index, tick) return #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Íæ¼ÒµÇ½ÓÎÏ· #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Íæ¼ÒµÇ½ÓÎÏ· def __Func_PlayerLogin(index, tick): #ÕâÀïÖ»×ö³õʼ»¯Âß¼­ #ÔÚÍæ¼ÒÇл»³¡¾°µÄʱºò, ²»»áµ÷Óõ½ÕâÀï curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) InitLoginPlayer(curPlayer, tick) DoPlayerLogin(curPlayer, tick) #Ëø×¡Íæ¼Ò, µÈµ½¶ÁÈ¡µØÍ¼³É¹¦, ÔÙ½âËø curPlayer.SetCanMove(False) #µÇ½·¢Í¼ÐÎÑéÖ¤Âë PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, tick) #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Íæ¼ÒÇл»µØÍ¼µÄʱºò, ÔÚ±¾µØÍ¼µÇ¼ #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Íæ¼ÒÇл»µØÍ¼µÄʱºò, ÔÚ±¾µØÍ¼µÇ¼ def ChangeMapInit(index, tick): GameWorld.GetPsycoFunc(__Func_ChangeMapInit)(index, tick) return #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Íæ¼ÒÇл»µØÍ¼µÄʱºò, ÔÚ±¾µØÍ¼µÇ¼ #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Íæ¼ÒÇл»µØÍ¼µÄʱºò, ÔÚ±¾µØÍ¼µÇ¼ def __Func_ChangeMapInit(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) InitLoginPlayer(curPlayer, tick) #=============================================================================== # #Çл»µØÍ¼£¬ # #ÖØË¢Íæ¼ÒÊôÐÔ,ÖØÉèѪÁ¿(ÒòÇл»µØÍ¼Ê±,·â°ü¿ÉÄܱ»½Ø¶Ï,µ¼Ö¶ª°ü,ÐèÖØË¢ÊôÐÔ°ü) # #ÖØËãÊôÐÔ # playerControl = PlayerControl.PlayerControl(curPlayer) # playerControl.RefreshAllState() #=============================================================================== #ÉèÖÃÍæ¼ÒµÄ¼¼ÄÜCD SkillCommon.PlayerChangeMapUpdateSkillCD(curPlayer, tick) #³õʼ»¯Íæ¼Ò±³°ü InitPlayerPack(curPlayer) #ÔÚÕâ¸öÀïÃæ»áÖØË¢ËùÓÐÊôÐÔ, ±ØÐëÔÚÕÙ»½ÊÞ³öÏÖǰ×ö, ÕâÑùºÍ×°±¸Ïà¹ØµÄ±»¶¯¼¼ÄܲÅÄÜ×÷ÓÃÔÚÕÙ»½ÊÞÉíÉÏ DoPlayerLoginInMap(curPlayer, tick) #----------±ØÐëÔÚÕâ¸öʱºò×ö, ²»ÄÜÔÚÍæ¼Ò·¢À´µØÍ¼¶ÁÈ¡okµÄʱºò×ö, ·ñÔò, Íæ¼ÒÈç¹û²»·¢À´µØÍ¼¶ÁÈ¡³É¹¦·â°ü, ¾Í²»ÄÜ´´½¨ÕâЩ¶«Î÷ÁË # ------------------------------------- # Íæ¼ÒÇл»µØÍ¼³É¹¦Ö®ºó, # 1.ҪˢÐÂGameServerÖÐæô³µµÄMapID # 2.ҪˢÐÂ×Ô¼ºÕÙ»½ÊÞµÄ״̬ # ------------------------------------------------------ #Íæ¼ÒÇл»µØÍ¼³É¹¦, ³õʼ»¯Íæ¼ÒµÄ¸½¼ÓÐÅÏ¢(æô³µ, ÕÙ»½ÊÞ) curPlayer.InitChangeMapPlayerSummonInfo() #֪ͨGameServeræô³µÏÖÔڵĵØÍ¼Î»Öà curTruck = curPlayer.GetTruck() if curTruck != None: curTruck.GameServer_Sync_TruckMapID() #ïÚ³µÎ޵РSkillCommon.AddBuffBySkillType_NoRefurbish(curTruck, ChConfig.Def_SkillID_LimitSuperBuff, tick) #ÉèÖÃïÚ³µµÈ¼¶ truckLv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PawnTruckLV) curTruck.SetLV(truckLv) #¸ü¸ÄïÚ³µ¼Ç¼µÄ²¿·ÖÖ÷ÈËÐÅÏ¢ PlayerTruck.ChangeTruckNoteInfo(curPlayer) #¸üÐÂïÚ³µ½øÅÅÐаñ PlayerBillboard.UpdateBillboardPlayerTruck(curPlayer.GetPlayerID(), curPlayer.GetName(), curPlayer.GetOperateInfo(), curPlayer.GetLV(), truckLv, curPlayer.GetMapID()) #---³õʼ»¯×Ô¼ºµÄÕÙ»½ÊÞ--- #=========================================================================== # for i in range(curPlayer.GetSummonCount()): # curSummon = curPlayer.GetSummonNPCAt(i) # #³õʼ»¯µ±Ç°ÕÙ»½ÊÞ״̬ # SkillCommon.SetSummonNPCProperty(curPlayer, curSummon) # summonControl = NPCCommon.NPCControl(curSummon) # #¸üгðºÞ # summonControl.ClearNPCAngry() # #Ë¢ÐÂNPC״̬/buff # summonControl.RefreshNPCState() # #Òòµ±Ç°ÑªÁ¿ÏÈË¢,×î´óѪÁ¿ºóË¢£¬ÓпÉÄܵ±Ç°ÑªÁ¿´óÓÚ×î´óѪÁ¿ # curSummon.SetHP(min(curSummon.GetHP() , curSummon.GetMaxHP())) #=========================================================================== #³õʼ»¯³èÎï ֪ͨ¿Í»§¶Ë PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick) #֪ͨGameServer×Ô¼ºÏÖÔڵĵØÍ¼ curPlayer.Sync_GameServer_MapID() #Èç¹û±¾µØÍ¼ÊǸ±±¾µÄ»°, Ôò֪ͨGameServerÍæ¼Ò½øÈ븱±¾ if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtTeam: curPlayer.GameServer_TeamEnterFB(1) else: curPlayer.GameServer_TeamEnterFB(0) #֪ͨÔËÐгɹ¦ curPlayer.BalanceServer_PlayerChangeMapInitOK() #Ëø×¡Íæ¼Ò, µÈµ½¶ÁÈ¡µØÍ¼³É¹¦, ÔÙ½âËø curPlayer.SetCanMove(False) #--------------------------------------------------------------------- ##³õʼ»¯Íæ¼Ò±³°ü #@param curPlayer Íæ¼ÒʵÀý #@return ·µ»ØÖµÎÞÒâÒå #@remarks ³õʼ»¯Íæ¼Ò±³°ü def InitPlayerPack(curPlayer) : itemManager = curPlayer.GetItemManager() #³õʼ»¯Íæ¼Ò±³°ü PlayerControl.Init_ItemPack(curPlayer) #³õʼ»¯Íæ¼Ò²Ö¿â PlayerControl.Init_Warehouse(curPlayer) #³õʼ»¯Ñ°±¦±³°ü PlayerControl.Init_TreasurePack(curPlayer) #³õʼ»¯ÉñÊÞÎïÆ·±³°ü curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem) curPack.SetCount(ChConfig.Def_PackCnt_DogzItem) curPack.Sync_PackCanUseCount() #³õʼ»¯ÉñÊÞ×°±¸±³°ü curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip) curPack.SetCount(ChConfig.Def_PackCnt_DogzEquip) curPack.Sync_PackCanUseCount() #³õʼ»¯ÁÙʱ½»»»±³°ü curPack = itemManager.GetPack(ShareDefine.rptTempSwap) curPack.SetCount(ChConfig.Def_PackCnt_TempSwap) #³õʼ»¯ÁÙʱ´æ·Å±³°ü curPack = itemManager.GetPack(ShareDefine.rptTempItem) curPack.SetCount(ChConfig.Def_PackCnt_TempItem) #ÉèÖÃ×°±¸Êµ¼Ê¸öÊý curPack = itemManager.GetPack(IPY_GameWorld.rptEquip) curPack.SetCount(ShareDefine.retMax) #³õʼ»¯À¬»øÍ° #curPack = itemManager.GetPack(IPY_GameWorld.rptRecycle) #curPack.SetCount(ChConfig.Def_PackCnt_Recycle) #³õʼ»¯ÍòÄܱ³°ü curPack = itemManager.GetPack(IPY_GameWorld.rptAnyWhere) curPack.SetCount(IPY_GameWorld.Def_AnyWherePackCount) #³õʼ»¯³èÎï±³°ü curPack = itemManager.GetPack(ShareDefine.rptPet) curPack.SetCount(ChConfig.Def_PackCnt_Pet) #curPack.Sync_PackCanUseCount() return #--------------------------------------------------------------------- ##ÊÇ·ñÓÐÎÞµÐBuff #@param curPlayer Íæ¼ÒʵÀý #@return ·µ»ØÖµÕæ, ÓÐÎÞµÐBuff #@remarks ×Ô¶¨Ò庯Êý, ÊÇ·ñÓÐÎÞµÐBuff def __CheckLimitSuperBuff(curPlayer): skillID = ChConfig.Def_SkillID_LimitSuperBuff return CheckHasBuffBySkillID(curPlayer, skillID) ## ÅжÏÊÇ·ñÓÐij¼¼ÄÜbuff # @param curPlayer Íæ¼ÒʵÀý # @param skillID # @return ·µ»ØÖµÕæ def CheckHasBuffBySkillID(curPlayer, skillID): buffSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID) #Òì³£´íÎó if not buffSkill: GameWorld.Log("Íæ¼ÒÈ¡Ïûbuffʧ°Ü,Êý¾Ý¿âÎÞ´Ëbuff,buffid = %s " % (skillID) , curPlayer.GetPlayerID()) return False buffType = SkillCommon.GetBuffType(buffSkill) buffTuple = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType) #ͨ¹ýÀàÐÍ»ñȡĿ±êµÄbuff¹ÜÀíÆ÷Ϊ¿Õ£¬ÔòÌø³ö if buffTuple == (): return False buffState = buffTuple[0] #ÅжÏÊÇ·ñ´æÔÚµÄBUFF buffSkillTypeID = buffSkill.GetSkillTypeID() curBuff = buffState.FindBuff(buffSkillTypeID) if not curBuff: return False return True #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Çл»µØÍ¼³É¹¦( Ä¿±êµØÍ¼ ) #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Çл»µØÍ¼³É¹¦( Ä¿±êµØÍ¼ ) def LoadMapOK(index, tick): GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick) return #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Çл»µØÍ¼³É¹¦( Ä¿±êµØÍ¼ ) #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Çл»µØÍ¼³É¹¦( Ä¿±êµØÍ¼ ) def __Func_LoadMapOK(index, tick): #ÔÚÍæ¼ÒÇл»³¡¾°/µÇ¼µÄʱºò, »áµ÷Óõ½ÕâÀï, µØÍ¼¶ÁÈ¡³É¹¦ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if curPlayer.GetMapLoadOK(): #Íæ¼ÒÒѾ­¶ÁÈ¡µØÍ¼OK, ÎÞÐèÔÙ³õʼ»¯ #GameWorld.Log("Íæ¼ÒÒѾ­¶ÁÈ¡µØÍ¼OK, ÎÞÐèÔÙ³õʼ»¯" , curPlayer.GetPlayerID()) resetFBLinePosX = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ResetFBLinePosX) resetFBLinePosY = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ResetFBLinePosY) if resetFBLinePosX and resetFBLinePosY: GameWorld.Log("Íæ¼Ò¸±±¾Öбä¸ü¹¦ÄÜÏß·ÐéÄâÇеØÍ¼³É¹¦!!!", curPlayer.GetPlayerID()) curPlayer.SetDict(ChConfig.Def_PlayerKey_ResetFBLinePosX, 0) curPlayer.SetDict(ChConfig.Def_PlayerKey_ResetFBLinePosY, 0) #curPlayer.ResetPos(resetFBLinePosX, resetFBLinePosY) # »Ö¸´ÊÓÒ°£¬Ë¢ÐÂ×Ô¼ºµÄÊÓÒ° curPlayer.SetVisible(True) PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default) curPlayer.RefreshView() FBLogic.DoEnterFB(curPlayer, tick) return #¼ì²éGMÕʺÅÊÇ·ñÓÐȨÏ޵ǽ #if not __CheckGMCanLoadMapOK(curPlayer): # return #¼ì²âÕ˺ÅÊÇ·ñËø¶¨ if not __CheckForbidLogin(curPlayer): return GameWorld.Log("µØÍ¼¶ÁÈ¡³É¹¦" , curPlayer.GetPlayerID()) #֪ͨGameServerÇл»µØÍ¼Í£Ö¹ curPlayer.GameServer_SetLoadMapState(1) curPlayer.SetMapLoadOK(True) #½«Íæ¼Ò·ÅÖÃÔÚÕâ¸öµØÍ¼ÉÏ curPlayer.InitPos(curPlayer.GetPosX(), curPlayer.GetPosY()) firstMission = QuestCommon.GetCommonMission(curPlayer) if not (firstMission and firstMission.GetProperty(QuestCommon.Def_NewGuyNoSight) == 1): #Ë¢ÐÂ×Ô¼ºµÄÊÓÒ° curPlayer.RefreshView() curPlayer.SetVisible(True) #Èç¹ûÍæ¼ÒhpΪ0,ÉèÖÃÍæ¼ÒΪËÀÍö״̬ if curPlayer.GetHP() <= 0: curPlayer.SetPlayerAction(IPY_GameWorld.paDie) #curPlayer.SetDead() #°ÑÍæ¼ÒÉèÖÃΪ³õʼ»¯³É¹¦×´Ì¬ curPlayer.SetInitOK(True) #bug:GMºÅ·´ÒþÐÎÔÚÍæ¼ÒÇл»µØÍ¼Ö®ºó,½Å±¾Î´ÉèÖÃÍæ¼ÒÊôÐÔ֮ǰ£¬C++֪ͨºÏ²¢·â°üµ¼Ö¿ͻ§¶ËËÀB #½«·´ÒþÐοªÆô×ªÒÆµ½½Å±¾ if curPlayer.GetGMLevel(): curPlayer.SetIsDefVisible(True) #ÓÐÏÞÎÞµÐBuff if not __CheckLimitSuperBuff(curPlayer): curPlayer.SetCanAttack(True) #Èç¹ûÔÚʼþ״̬ , ¾Í²»½â³ýËø¶¨ ÈÎÎñ1ËøËÀÁË #if curPlayer.GetPlayerAction() != IPY_GameWorld.paEvent: curPlayer.SetCanMove(True) #ͬ²½¿Í»§¶Ëtick #Õâ¸ö·â°üÒªÔÚEndLoadMap, ÉÏÂí֮ǰ·¢, ·ñÔò¿Í»§¶Ë´¦Àíʱ»ú²»¶Ô(¿Í»§¶Ë·â°ü»º´æ»úÖÆ) #curPlayer.Sync_ClientTick() #×öÉÏÒ»¸öµØÍ¼µÄÉÏÂí/æô³µÂß¼­ #»Ö¸´×Ô¼ºµÄ״̬ playerVehicle = curPlayer.GetLastMapPlayerVehicle() if playerVehicle == IPY_GameWorld.pvHorse: #Íæ¼ÒÔÚÆïÂíÖÐ if not PlayerHorse.PlayerRideHorseUp(curPlayer, False, False): #======================================================================= # playerHorseState = curPlayer.GetLastMapPlayerRidehorseState() # if playerHorseState != IPY_GameWorld.prsNormal: # #Çл»µØÍ¼, »Ö¸´¼±ÐÐ״̬ # curPlayer.SetPlayerRidehorseState(playerHorseState) # # #Ë¢ÐÂÈËÎïÊôÐÔ ËùÓÐ״̬ # playerControl = PlayerControl.PlayerControl(curPlayer) # playerControl.RefreshAllState() # else: #======================================================================= #´ËʱÒѾ­ÊÇÏÂÂí״̬²»ÐèҪˢ״̬ µ«ÊÇÐèҪ֪ͨ¿Í»§¶ËÏÂÂí PlayerHorse.PlayerRideHorseDown(curPlayer, False) elif playerVehicle == IPY_GameWorld.pvTruck: #Íæ¼ÒÉÏæô³µ, ²»ÖØÖÃ×Ô¼ºµÄλÖÃ, ÒòÎªÍæ¼ÒÏÖÔÚ»¹ÔÚÇл»µØÍ¼ÖÐ(Ç¿ÖÆÉϳµ,ÒòΪÓпÉÄܱ»¹¥»÷) PlayerTruck.PlayerTruckUP(curPlayer, False , False , False) InitPlayerTruck(curPlayer, tick) PlayerTeam.PlayerLoginSetTeam(curPlayer, tick) #ÒªÇóÊý¾Ý¿âµÃµ½Óʼþ״̬ #curPlayer.DataServer_GetPlayerMailState() #curPlayer.EndLoadMap() #¼¤»îÍæ¼Ò(±£Ö¤³ÖÐøÐÔBuff´¦Àí¼ä¸ô) PlayerControl.SetIsNeedProcess(curPlayer, True) #³õʼ»¯GM²Ù×÷ PlayerGMOper.DoGMOperLogic(curPlayer, tick) #Èç¹ûµÇ¼µÄ¸±±¾,Ö´ÐнøÈ븱±¾Âß¼­, ÒòΪÓÐʱ¼äÏìÓ¦, ±ØÐëÔÚEndLoadMapÖ®ºó... FBLogic.DoEnterFBLogic(curPlayer, tick) #´¥·¢Íæ¼Ò½øÈëµØÍ¼µÄʼþ EventShell.EventResponse_OnMap(curPlayer) #´¥·¢Íæ¼Ò½øÈëµØÍ¼µÄʼþ EventShell.EventResponse_OnMapEx(curPlayer) #´¥·¢Çл»µØÍ¼³èÎïÂß¼­ PetControl.DoLogic_PetLoadMapOK(curPlayer) #---¼ì²éÊÇ·ñ¿¨Õϰ­--- curMap = GameWorld.GetMap() posX = curPlayer.GetPosX() posY = curPlayer.GetPosY() # ¸´»îËæ»úλÖà if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsReBorn): if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsReBorn) == 2: PlayerControl.PlayerControl(curPlayer).SetToBornPlace() else: posX, posY = GameMap.GetNearbyPosByDis(posX, posY, ChConfig.Def_RebornPos_Area_Range) curPlayer.ResetPos(posX, posY) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsReBorn, 0) if curPlayer.GetHP() <= 0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie: #Èç¹ûÍæ¼ÒÉÏÏߺóËÀÍö,»Ø³Ì¸´»î isLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LoadMapIsLogin) rebornType = ChConfig.rebornType_City if isLogin else ChConfig.rebornType_System PlayerRebornByType(curPlayer, rebornType, tick) elif curMap.CanMove(posX, posY) != True: nearPosX, nearPosY = GameMap.GetNearbyPosByDis(posX, posY, ChConfig.Def_RebornPos_Area_Range) if nearPosX == 0 and nearPosY == 0: GameWorld.Log('Íæ¼ÒµÇÂ¼ÖØÖÃλÖÃʧ°Ü, °ÑÍæ¼Ò´ò»ØÖØÉúµã posX = %s posY = %s' % (posX, posY) , curPlayer.GetPlayerID()) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.SetToBornPlace() else: curPlayer.ResetPos(nearPosX, nearPosY) GameWorld.Log('Íæ¼ÒµÇÂ¼ÖØÖÃλÖÃʧ°Ü, ÉèÖø½½üµã nearPosX = %s nearPosY = %s' % (nearPosX, nearPosY) , curPlayer.GetPlayerID()) #ÉêÇëµÃµ½½±ÀøÎïÆ· curPlayer.DataServer_CheckPrizeItem() #=========================================================================== # #if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Frist_Lock) == 1 \ # if PlayerAutoCheckOnline.CheckBeginEvent(curPlayer): # #·ÀÍâ¹ÒËø¶¨ # #Íæ¼ÒµÚÒ»´Î½øÈë, ´¥·¢ÁËOnEnter, OnEnter»áËø×¡Íæ¼Ò # #µ«ÊÇÔÚÉÏÃæ»á½âËøÍæ¼Ò # #ËùÒÔÔÚÕâÀïÇ¿ÖÆÅж¨, Èç¹û´¥·¢ÁËOnEnter, ÄÇôÔÚÕâÀï¼ÓËø # curPlayer.BeginEvent() #=========================================================================== #·ÀÖ¹Íæ¼Ò¶ÁÈ¡µØÍ¼Ê±Î´´¥·¢OnDay£¬¶ÁÈ¡µØÍ¼ºóÔÙ´ÎÑéÖ¤(2009.9.11) PlayerEventCounter.UpdatePlayerLoginTime(curPlayer) #ÌØ»Ý»î¶¯Ê¼þ #PlayerTeHui.PlayerLoadMapOK(curPlayer) #ÉèÖÃÕóÓª if curPlayer.GetFaction() != ChConfig.CampType_Neutral \ and GameWorld.GetMap().GetMapID() not in ChConfig.Def_MapID_NeedCamp \ and GameWorld.GetMap().GetMapID() not in ReadChConfig.GetEvalChConfig("MapID_NeedCamp"): #ÖØÖÃÕóÓª curPlayer.SetFaction(ChConfig.CampType_Neutral) BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_Justice, tick) BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_Evil, tick) #ÔÙ´ÎÇëÇóË«±¶¾­ÑéÊÇ·ñÁìÈ¡ #PlayerDoubleExpSys.ChangeMapAfter_CalcDoubleExpTime(curPlayer, tick) #PlayerVip.SetStartCalcVIPTick(curPlayer, tick) #Ç¿ÖÆÇл»PKģʽ initAttackModel = curMap.GetInitAttackModel() if curPlayer.GetAttackMode() != initAttackModel: curPlayer.SetAttackMode(initAttackModel) SyncPKModel(curPlayer) GameWorld.DebugLog("½øÈëµØÍ¼Ç¿ÖÆÇл»PKģʽ: %s" % initAttackModel) PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer) ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount() # Ë¢ÐÂ×°±¸Õ䯷ÐǼ¶ #EndLoadMapÐè·ÅÔÚ×îºó curPlayer.EndLoadMap() return True ## Çл»µØÍ¼Í¬²½Ò»´ÎPKģʽ # @param curPlayer # @return None def SyncPKModel(curPlayer): # ͬ²½¿Í»§¶ËPKģʽ sendPack = ChPyNetSendPack.tagMCAttackMode() sendPack.Clear() sendPack.Mode = curPlayer.GetAttackMode() NetPackCommon.SendFakePack(curPlayer, sendPack) return #--------------------------------------------------------------------- ##¼ì²éGMÊÇ·ñ¿ÉÒԵǽµØÍ¼ #@param curPlayer Íæ¼ÒʵÀý #@return ·µ»ØÖµÕæ, ¿ÉÒԵǽ #@remarks ¼ì²éGMÊÇ·ñ¿ÉÒԵǽµØÍ¼ def __CheckGMCanLoadMapOK(curPlayer): return True # if not curPlayer.GetGMLevel() : # #²»ÊÇGM, ¿ÉÒԵǽ # return True # # curPlayerIP = curPlayer.GetIP() # # if curPlayerIP.find('192.168.') == 0 or curPlayerIP.find('10.30.') == 0: # GameWorld.Log('ÄÚÍøGM = %s , %s IP = %s,µÇ½µØÍ¼·þÎñÆ÷, ²»ÑéÖ¤IP' % (curPlayer.GetID() , curPlayer.GetName() , curPlayerIP)) # return True # # #GM, IPÑéÖ¤²»Í¨¹ý # if not curPlayer.IsPlayerInPermitIP(): # curPlayer.Kick(IPY_GameWorld.disIPNotPermit) # return # # #IPÑé֤ͨ¹ý # return True ## ¼ì²âÕ˺ÅÊÇ·ñËø¶¨ #@param curPlayer Íæ¼ÒʵÀý #@return ÊÇ·ñËø¶¨ def __CheckForbidLogin(curPlayer): if (curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidByPy)) <= 0: return True curPlayer.Kick(IPY_GameWorld.disGMKick) return #--------------------------------------------------------------------- ##³õʼ»¯Íæ¼ÒïÚ³µ #@param curPlayer Íæ¼ÒʵÀý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ³õʼ»¯Íæ¼ÒïÚ³µ def InitPlayerTruck(curPlayer, tick): curPlayer.SetTruckCalcStartTime(tick) #Íæ¼Òæô³µÂß¼­: #Íæ¼ÒÈç¹ûÓÐæô³µ: #1. ÔÚ±¾µØÍ¼ÕÒѰ×Ô¼ºµÄæô³µ #2. Èç¹ûûÓÐÕÒµ½, ·¢¸øGameServerÒªÇó×Ô¼ºæô³µ truckID = curPlayer.GetTruckID() GameWorld.Log("³õʼ»¯æô³µ ID = %d ..." % (truckID) , curPlayer.GetPlayerID()) if truckID == 0: #2009.9.24 bug #Íæ¼ÒûÓÐïÚ³µID, µ«ÊÇÓÐïÚ³µ×´Ì¬, Ç¿ÖÆ¸ÄΪ0 if curPlayer.GetTruckState() != 0: GameWorld.Log("###Fix Truck State!", curPlayer.GetPlayerID()) curPlayer.SetTruckState(0) return #֪ͨgameserverË¢ÐÂ×Ô¼ºµÄæô³µ curPlayer.GameServer_RefreshTruckReq() GameWorld.Log("֪ͨgameserverË¢ÐÂ×Ô¼ºµÄæô³µ id = %d" % (truckID) , curPlayer.GetPlayerID()) curTruck = GameWorld.GetNPCManager().FindTruckByID(truckID) if not curTruck: return curPlayer.SetTruck(curTruck) #Õâ¾ä»°Ò»¶¨Òª¼Ó, ÓÃÀ´Í¨Öª¿Í»§¶Ëæô³µ¿ªÊ¼, ÏÔʾæô³µ²Ù¿ØÃæ°å curPlayer.SetTruckID(curTruck.GetID()) curTruck.SetOwner(curPlayer) # GameWorld.Log("Íæ¼ÒÒÑÓÐæô³µ" , curPlayer.GetPlayerID()) #=============================================================================== # #¼Ó¾­ÑéÖµ # def AddExp(index, tick): # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # sendTest = IPY_GameWorld.IPY_CSendTest() # addExp = sendTest.GetExp() # playerControl = PlayerControl.PlayerControl(curPlayer) # playerControl.AddExp(addExp,True) #=============================================================================== #--------------------------------------------------------------------- #=============================================================================== # //03 01 ¼ÓÊôÐÔµã#tagCAddPoint # tagCAddPoint * GettagCAddPoint(); # # class IPY_CAddPoint # { # public: # //0:Á¦Á¿ 1:¾«Éñ 2:Ãô½Ý 3:ÌåÆÇ 4:ÖÇÁ¦ 5:ÐÒÔË # int GetType(); # # int GetPoint(); # }; #=============================================================================== ##//03 01 ¼ÓÊôÐÔµã#tagCAddPoint #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks //03 01 ¼ÓÊôÐÔµã#tagCAddPoint def AddPoint(index, tick): GameWorld.GetPsycoFunc(__Func_AddPoint)(index, tick) return ##//03 01 ¼ÓÊôÐÔµã#tagCAddPoint #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks //03 01 ¼ÓÊôÐÔµã#tagCAddPoint def __Func_AddPoint(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerControl = PlayerControl.PlayerControl(curPlayer) #JobQuotiety = PlayerControl.JobQuotiety curFreePoint = curPlayer.GetFreePoint() #job = curPlayer.GetJob() recvAddPoint = IPY_GameWorld.IPY_CAddPoint() addValue = recvAddPoint.GetPoint() #¼ìÑéÊÇ·ñÄܹ»¼Óµã if addValue < 1 or addValue > curFreePoint: #¼ìÑ鲻ͨ¹ý, ·µ»Ø #GameWorld.ErrLog("(%s,%s)¼ìÑéÊÇ·ñÄܹ»¼Óµã£¬¼ìÑ鲻ͨ¹ý, ·µ»Ø"%(addValue,curFreePoint) , curPlayer.GetPlayerID()) return #·â°ü¼ÓµãÀàÐÍ addPointType = recvAddPoint.GetType() #¼Óµã if addPointType == ShareDefine.Def_Effect_STR: curPlayer.SetBaseSTR(addValue + curPlayer.GetBaseSTR()) elif addPointType == ShareDefine.Def_Effect_PNE: curPlayer.SetBasePNE(addValue + curPlayer.GetBasePNE()) elif addPointType == ShareDefine.Def_Effect_PHY: curPlayer.SetBasePHY(addValue + curPlayer.GetBasePHY()) elif addPointType == ShareDefine.Def_Effect_CON: curPlayer.SetBaseCON(addValue + curPlayer.GetBaseCON()) else: #Òì³£³¬³ö±ß½ç GameWorld.ErrLog("AddPoint GetTypeErr = %s" % (addPointType) , curPlayer.GetID()) return curPlayer.SetFreePoint(curFreePoint - addValue) DataRecordPack.DR_Freepoint(curPlayer, "AddPoint", curFreePoint, {"AddPointType":addPointType}) playerControl.RefreshPlayerAttrState() return def NotifyPlayerBasePoint(curPlayer): #ÉÏÏß֪ͨ»ù´¡ÊôÐÔµã notifyList = [] notifyBasePointDict = { IPY_GameWorld.CDBPlayerRefresh_BaseSTR:'BaseSTR', IPY_GameWorld.CDBPlayerRefresh_BasePHY:'BasePHY', IPY_GameWorld.CDBPlayerRefresh_BaseCON:'BaseCON', IPY_GameWorld.CDBPlayerRefresh_BasePNE:'BasePNE', } for refreshType, keyStr in notifyBasePointDict.items(): notifyStruct = ChPyNetSendPack.tagRefreshType() notifyStruct.RefreshType = refreshType notifyStruct.Value = getattr(curPlayer, 'Get%s'%keyStr)() notifyList.append(notifyStruct) #ÊôÐÔ×éºÏ°ü ֪ͨ×Ô¼º sendPack = ChPyNetSendPack.tagObjInfoListRefresh() sendPack.Clear() sendPack.ObjID = curPlayer.GetID() sendPack.ObjType = curPlayer.GetGameObjType() sendPack.Count = len(notifyList) sendPack.RefreshType = notifyList NetPackCommon.SendFakePack(curPlayer, sendPack) return #=============================================================================== # //B4 04 սǰ³å·æ #tagCMRush # # struct tagCMRush # { # tagHead Head; # DWORD ObjID; //·ÇÅä±íNPCID£¬Ä¿Ç°Ö»Ö§³ÖNPC # BYTE PosX; // Ä¿±êX # BYTE PosY; // Ä¿±êY # }; #=============================================================================== # Óë¿Í»§¶ËÔ¼¶¨³å·æµ½Ä¿±êºó·¢°ü Óë¼¼Äܳ巿²»Í¬ def OnPlayerRush(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_Rush) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_Rush]: return curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_Rush, tick) #ÎÞ·¨Ñé֤Ŀ±ê #=========================================================================== # curTag = GameWorld.GetObj(clientData.ObjID, IPY_GameWorld.gotNPC) # if not curTag or curTag.GetHP() ==0: # return # # #ÓëÄ¿±êÏà²î̫Զ # if GameWorld.GetDist(curTag.GetPosX(), curTag.GetPosY(), clientData.PosX, clientData.PosY) > 6: # return #=========================================================================== #³¬³öÊÓÒ° if GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), clientData.PosX, clientData.PosY) > curPlayer.GetSight(): return curPlayer.StopMove() #GameWorld.DebugLog("սǰ³å·æ %s %s"%([curPlayer.GetPosX(), curPlayer.GetPosY()], [clientData.PosX, clientData.PosY])) curPlayer.ChangePos(clientData.PosX, clientData.PosY) sendPack = ChPyNetSendPack.tagMCRush() sendPack.Clear() sendPack.ID = curPlayer.GetID() sendPack.ObjType = curPlayer.GetGameObjType() sendPack.PosX = clientData.PosX sendPack.PosY = clientData.PosY PlayerControl.PyNotifyAll(curPlayer, sendPack, False, -1) return #=============================================================================== # //B4 06 Õ½¶·Òƶ¯ # tagCMFightMove # # struct tagCMFightMove # { # tagHead Head; # WORD StartX; # WORD StartY; # WORD DestX; # WORD DestY; # DWORD WorldTick; # }; #=============================================================================== # ÓëÒÆ¶¯µÄÇø±ðÔÚÓÚ²»¹ã²¥ def PlayerFightMove(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #·ÀÍâ¹Ò ²»¿ÉÒÆ¶¯ if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \ == ChConfig.Def_AutoCheck_State_Danger: return #²»¿ÉÒÆ¶¯ÐÐΪ״̬, ÅжϿͻ§¶ËÏÞÖÆ if not OperControlManager.IsObjCanDoAction( curPlayer, ChConfig.Def_Obj_ActState_ServerAct, IPY_GameWorld.oalMove ): return False #Íæ¼ÒÒÆ¶¯Í¨Óüì²é if not __CheckPlayerCanMove(curPlayer): return #·â°ü²ÎÊý sendPack_StartX = clientData.StartX sendPack_StartY = clientData.StartY sendPack_DestX = clientData.DestX sendPack_DestY = clientData.DestY sendPack_WorldTick = clientData.WorldTick #Ïàͬµã²»Òƶ¯ if (sendPack_StartX == sendPack_DestX) and (sendPack_StartY == sendPack_DestY): #GameWorld.ErrLog('PlayerMove Ïàͬµã²»Òƶ¯', curPlayer.GetID()) return #ÏÈÑé֤Ŀ±êµãÊÇ·ñºÏ·¨ if not GameWorld.GetMap().CanMove(sendPack_DestX, sendPack_DestY): curPlayer.ResetPos(curPlayer.GetPosX(), curPlayer.GetPosY()) return if tick - curPlayer.GetDictByKey("FightMoveTick") < 50: #curPlayer.ResetPos(curPlayer.GetPosX(), curPlayer.GetPosY()) return curPlayer.SetDict("FightMoveTick", tick) #---Õý³£Òƶ¯--- vehicle = curPlayer.GetPlayerVehicle() if vehicle not in [IPY_GameWorld.pvNull, IPY_GameWorld.pvHorse]: #GameWorld.ErrLog("²»ÄÜÒÆ¶¯, ½»Í¨¹¤¾ß²»Ã÷ %d" % (vehicle), curPlayer.GetID()) return curMap = GameWorld.GetMap() #УÑé¿Í»§¶Ëʱ¼ä #if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, sendPack_WorldTick, sendPack_StartX, sendPack_StartY): # return #ÒÆ¶¯µã¼ì²é if not CheckMovePos(curPlayer, curPlayer, curMap, sendPack_StartX, sendPack_StartY, sendPack_DestX, sendPack_DestY): return if GameWorld.GetDist(sendPack_StartX, sendPack_StartY, sendPack_DestX, sendPack_DestY) > 20: curPlayer.ResetPos(curPlayer.GetPosX(), curPlayer.GetPosY()) return #Èç¹ûÊÇСÓÎÏ·ÖÐÔòֹͣСÓÎÏ· if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent: PlayerGameEvent.StopGameEvent(curPlayer, tick) #ɾ³ýÓÐÏÞÎÞµÐBUFF PlayerControl.DelLimitSuperBuff(curPlayer, tick) curPlayer.ChangePos(sendPack_DestX, sendPack_DestY) #curPlayer.SetClientMoveTick(sendPack_WorldTick) fightPet = curPlayer.GetPetMgr().GetFightPet() #ÎÞ³öÕ½³èÎï if fightPet == None: return if GameWorld.GetDist(fightPet.GetPosX(), fightPet.GetPosY(), sendPack_DestX, sendPack_DestY) <= 4: #Õ½¶·Öв»Æµ·±Òƶ¯ return #³öÕ½³èÎïÍ¬Ê±ÒÆ¶¯ PetControl.FightPetFollowMove(curPlayer, sendPack_StartX, sendPack_StartY) return #--------------------------------------------------------------------- #=============================================================================== # //05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove # tagCPlayerMove * GettagCPlayerMove(); # # class IPY_CPlayerMove # { # public: # # int GetStartX(); # # int GetStartY(); # # int GetDestX(); # # int GetDestY(); # # int GetWorldTick(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦//05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦//05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove def PlayerMove(index, tick): GameWorld.GetPsycoFunc(__Func_PlayerMove)(index, tick) return ##¿Í»§¶Ë·â°üÏìÓ¦//05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦//05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove def __Func_PlayerMove(index, tick): return curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #·ÀÍâ¹Ò ²»¿ÉÒÆ¶¯ if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \ == ChConfig.Def_AutoCheck_State_Danger: return #²»¿ÉÒÆ¶¯ÐÐΪ״̬, ÅжϿͻ§¶ËÏÞÖÆ if not OperControlManager.IsObjCanDoAction( curPlayer, ChConfig.Def_Obj_ActState_ServerAct, IPY_GameWorld.oalMove ): return False #Íæ¼ÒÒÆ¶¯Í¨Óüì²é if not __CheckPlayerCanMove(curPlayer): return #·â°ü²ÎÊý sendPack = IPY_GameWorld.IPY_CPlayerMove() sendPack_StartX = sendPack.GetStartX() sendPack_StartY = sendPack.GetStartY() sendPack_DestX = sendPack.GetDestX() sendPack_DestY = sendPack.GetDestY() sendPack_WorldTick = sendPack.GetWorldTick() #ÏÈÑé֤Ŀ±êµãÊÇ·ñºÏ·¨ if not GameWorld.GetMap().CanMove(sendPack_DestX, sendPack_DestY): return #Ïàͬµã²»Òƶ¯ if (sendPack_StartX == sendPack_DestX) and (sendPack_StartY == sendPack_DestY): #GameWorld.ErrLog('PlayerMove Ïàͬµã²»Òƶ¯', curPlayer.GetID()) return #---¸±±¾µØÍ¼Òƶ¯¼ì²é--- if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: if not FBLogic.DoFBCanMove(curPlayer, sendPack_DestX, sendPack_DestY, tick): return #---Õý³£Òƶ¯--- vehicle = curPlayer.GetPlayerVehicle() if vehicle not in [IPY_GameWorld.pvNull, IPY_GameWorld.pvHorse]: #GameWorld.ErrLog("²»ÄÜÒÆ¶¯, ½»Í¨¹¤¾ß²»Ã÷ %d" % (vehicle), curPlayer.GetID()) return #Íæ¼ÒÕý³£Òƶ¯ PlayerNormalMove(curPlayer, sendPack_StartX, sendPack_StartY, sendPack_DestX, sendPack_DestY, sendPack_WorldTick, tick) #=============================================================================== # attackTime = tick - curPlayer.GetPlayerAttackTick() # if attackTime <= curPlayer.GetAtkInterval() / 2: # #Íæ¼Ò¹¥»÷ÔÚ½©Ö±Ê±¼äÖÐ, ²»ÄÜ×ß· # #GameWorld.Log("Íæ¼Ò¹¥»÷ÔÚ½©Ö±Ê±¼äÖÐ, ²»ÄÜ×ß· %d" %(attackTime) , curPlayer.GetPlayerID()) # return #=============================================================================== #=============================================================================== # #Íæ¼ÒÆï³Ë״̬ # vehicle = curPlayer.GetPlayerVehicle() # # #Èç¹ûÔÚÆïÂí״̬£¬ÐèÒªÅж¨ÌØÊâ×øÆï # if vehicle == IPY_GameWorld.pvHorse and not __CheckHorseCanMove( curPlayer ): # __DoLogic_DropHorse( curPlayer , tick ) # return # # #Íæ¼ÒÕý³£Òƶ¯ # if vehicle == IPY_GameWorld.pvNull or vehicle == IPY_GameWorld.pvHorse: # #Íæ¼ÒÕý³£Òƶ¯ # PlayerNormalMove(curPlayer , moveData) # elif curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck : # #ÈËïÚºÏÒ»,Íæ¼ÒÒÆ¶¯ # PlayerMoveByCarryerTruck(curPlayer , moveData) # else: # GameWorld.Log("²»ÄÜÒÆ¶¯, ½»Í¨¹¤¾ß²»Ã÷ %d"%(vehicle) , curPlayer.GetPlayerID()) #=============================================================================== return #--------------------------------------------------------------------- ##ÑéÖ¤Íæ¼ÒÊÇ·ñ¿ÉÒÔÒÆ¶¯. # @param curPlayer Íæ¼ÒʵÀý # @return ²¼¶ûÖµ # @remarks ¿Í»§¶Ë·â°üÏìÓ¦ def __CheckPlayerCanMove(curPlayer): if not curPlayer.GetMapLoadOK(): #Íæ¼ÒµØÍ¼¶Áȡδ³É¹¦, Ìß³öÕâÈË #curPlayer.Kick(IPY_GameWorld.disPlayerMovedWhenNotPrepare) return False #Ëø¶¨²»¿ÉÒÆ¶¯ if not curPlayer.GetCanMove(): return False #Íæ¼ÒÒѾ­ËÀÍö if curPlayer.GetHP() <= 0: return False # #Ñ£ÔÎʱ£¬²»¿ÉÒÆ¶¯ zhengyang 2010-6-2 # if curPlayer.GetAbnormalState() == IPY_GameWorld.sctFaint: # return False #²»¿ÉÒÆ¶¯ÐÐΪ״̬, ÅжϷþÎñ¶ËÏÞÖÆ if not OperControlManager.IsObjCanDoAction( curPlayer, ChConfig.Def_Obj_ActState_ServerAct, IPY_GameWorld.oalMove ): return False #Íæ¼ÒͨÓõÄ״̬ת»»¼ì²é if not PlayerControl.PlayerCanStateTransfer(curPlayer): return False return True #--------------------------------------------------------------------- ##Íæ¼ÒÆÕÍ¨ÒÆ¶¯ #@param curPlayer Íæ¼ÒʵÀý #@param client_StartX ¿Í»§¶ËÆðµãX #@param client_StartX ¿Í»§¶ËÆðµãY #@param client_DestX ¿Í»§¶ËÄ¿±êµãX #@param client_DestY ¿Í»§¶ËÄ¿±êµãY #@param tick ʱ¼ä #@return ·µ»ØÖµÎÞÒâÒå #@remarks Íæ¼ÒÆÕÍ¨ÒÆ¶¯ def PlayerNormalMove(curPlayer, client_StartX, client_StartY, client_DestX, client_DestY, clientWorldTick, tick) : # ·ÏÆú¸Ä³ÉPYÒÆ¶¯ return #Èç¹ûÍæ¼ÒʼþÖÐ, Í˳öÈÎÎñ # if curPlayer.GetPlayerAction() == IPY_GameWorld.paEvent: # EventShell.DoExitEvent(curPlayer) curMap = GameWorld.GetMap() #УÑé¿Í»§¶Ëʱ¼ä if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, clientWorldTick, client_StartX, client_StartY): curPlayer.Sync_ClientTick() return #ÒÆ¶¯µã¼ì²é if not CheckMovePos(curPlayer, curPlayer, curMap, client_StartX, client_StartY, client_DestX, client_DestY): return #¼ÙÉè¿Í»§¶Ë¶¼ÊÇÕýÈ·µÄ£¬¿ÉÐÐ×ßÕϰ­µã #if PlayerControl.DoLogic_PlayerInBarrierPoint(curPlayer): # return #Èç¹ûÊÇСÓÎÏ·ÖÐÔòֹͣСÓÎÏ· if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent: PlayerGameEvent.StopGameEvent(curPlayer, tick) #2010/04/30 ÒÆ¶¯ÐÞ¸ÄΪȫC++¿ØÖÆ, Python״̬»úÉèÖÃΪ¿ÕÏÐ(Çå¿Õ²É¼¯µÈ״̬) PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull) #ɾ³ýÓÐÏÞÎÞµÐBUFF #PlayerControl.DelLimitSuperBuff(curPlayer, tick) #GameWorld.DebugLog("ÒÆ¶¯Ç°-----Íæ¼Ò×ø±ê %s-%s Ä¿µÄµØ%s -%s"%(curPlayer.GetPosX(), curPlayer.GetPosY(), client_DestX, client_DestY)) # ÔÚUpdatePos µ÷Óüä¸ôÄÚ¶à´Îµ÷ÓÃmove»áʹ m_StartMoveTick ÖØÖ㬵¼ÖÂÎÞ·¨Òƶ¯ # ¶øÔÚ CheckMovePos -> PlayerRefreshPos -> __FixPlayerPos -> ChangePos Ôì³ÉÒÆ¶¯µÄÏÖÏó curPlayer.Move(client_DestX, client_DestY) #³öÕ½³èÎïÍ¬Ê±ÒÆ¶¯ #PetControl.FightPetFollowMove(curPlayer, client_DestX, client_DestY, client_StartX, client_StartY) return #--------------------------------------------------------------------- ##ÈËïÚºÏÒ»,Íæ¼ÒÒÆ¶¯ #@param curPlayer Íæ¼ÒʵÀý #@param moveData ÒÆ¶¯·â°ü #@return ·µ»ØÖµÎÞÒâÒå #@remarks ÈËïÚºÏÒ»,Íæ¼ÒÒÆ¶¯ #=============================================================================== # def PlayerMoveByCarryerTruck(curPlayer , moveData) : # curPlayerTruck = curPlayer.GetTruck() # curMap = GameWorld.GetMap() # # #²»¿ÉÒÆ¶¯ÐÐΪ״̬, ·þÎñ¶ËÏÞÖÆ # if not OperControlManager.IsObjCanDoAction(curPlayerTruck, # ChConfig.Def_Obj_ActState_ServerAct, # IPY_GameWorld.oalMove): # return # # # if curPlayerTruck == None: # #À뿪ÈËïÚºÏһ״̬ # GameWorld.Log("À뿪ÈËïÚºÏһ״̬" , curPlayer.GetPlayerID()) # return # # if CheckMovePos(curPlayer, curPlayerTruck, curMap, moveData.GetStartX(), moveData.GetStartY(), moveData.GetDestX(), moveData.GetDestY()) != True : # return # # #ïÚ³µÒƶ¯ # #curPlayer.SetSpeed(curPlayerTruck.GetSpeed()) # curPlayerTruck.Move(moveData.GetDestX(), moveData.GetDestY()) # curPlayer.Sync_Move(moveData.GetDestX(), moveData.GetDestY()) # return #=============================================================================== #--------------------------------------------------------------------- ##ÒÆ¶¯µã¼ì²é, checkObj ÊÇÒÆ¶¯¶ÔÏó(ÔÚÈËïÚºÏһ״̬ÏÂ, ÊäÈëΪæô³µ #@param curPlayer Íæ¼ÒʵÀý #@param checkObj ÒÆ¶¯¶ÔÏó #@param curMap µ±Ç°µØÍ¼ #@param startX ¿ªÊ¼Òƶ¯×ø±êX #@param startY ¿ªÊ¼Òƶ¯×ø±êY #@param destX ÒÆ¶¯Ä¿±êX #@param destY ÒÆ¶¯Ä¿±êY #@param sendPlayerMoveFail ÊÇ·ñ·¢ËÍÒÆ¶¯Ê§°Ü #@return ·µ»ØÖµÕæ, ¼ì²é³É¹¦ #@remarks ÒÆ¶¯µã¼ì²é, checkObj ÊÇÒÆ¶¯¶ÔÏó(ÔÚÈËïÚºÏһ״̬ÏÂ, ÊäÈëΪæô³µ def CheckMovePos(curPlayer, checkObj, curMap, startX, startY, destX, destY, sendPlayerMoveFail=True): #Æðʼµã,Ä¿±êµã #Ë¢ÐÂÍæ¼Òµ±Ç°Î»Öà if not PlayerControl.PlayerRefreshPos(curPlayer, checkObj, startX, startY): #Íæ¼Òµ±Ç°Î»ÖÃË¢ÐÂʧ°Ü #GameWorld.Log("Íæ¼Òµ±Ç°Î»ÖÃË¢ÐÂʧ°Ü" , curPlayer.GetPlayerID()) if sendPlayerMoveFail and curPlayer.GetID() == checkObj.GetID(): #Ô˶¯ÕßÊÇÍæ¼Ò, ÄÇÃ´ÖØÖÃÍæ¼ÒλÖà curPlayer.ResetPos(curPlayer.GetPosX(), curPlayer.GetPosY()) return False #µ±Ç°¶ÔÏó×ø±ê objPosX = checkObj.GetPosX() objPosY = checkObj.GetPosY() #Ä¿µÄµØÊÇ·ñ¿ÉÒÔµ½´ï if not curMap.CanMove(destX, destY): #µØ·½²»¿É×ß, ÖØÖÃÍæ¼ÒµÄλÖà #GameWorld.Log("µØ·½²»¿É×ß, ÖØÖÃÍæ¼ÒµÄλÖÃ" , curPlayer.GetPlayerID()) if sendPlayerMoveFail: curPlayer.MoveFail() return False #¼ì²éÍæ¼ÒÒÆ¶¯¾àÀëÊÇ·ñ¹ýÔ¶ moveDist = GameWorld.GetDist(objPosX, objPosY, destX, destY) if moveDist > ChConfig.Def_PlayerMaxMoveDist: #GameWorld.Log("ÒÆ¶¯Ê§°Ü£¬¼ì²éÍæ¼ÒÒÆ¶¯¾àÀëÊÇ·ñ¹ýÔ¶" , curPlayer.GetPlayerID()) if sendPlayerMoveFail: curPlayer.MoveFail() return False #=============================================================================== # ¿¼Âǵ½»á²»Í¬²½µÄÎÊÌâ, ²»¼ÓÕâ¸öÅж¨ # #¼ì²éÄ¿±êµãÉÏ,ÊÇ·ñÓжÔÏó,Óв»ÈÃÒÆ¶¯ # mapObj = GameWorld.GetMap().GetPosObj(destX, destY) # # if not mapObj: # return # # for i in range(0, mapObj.GetObjCount()): # curObj = mapObj.GetObjByIndex(i) # #Ö»ÓÐÒ»ÖÖÇé¿öÌØÊâ:ËÀÍöµÄNPC¿ÉÒÔÈÃÍæ¼Ò×ß¹ýÈ¥ # if curObj.GetGameObjType() == IPY_GameWorld.gotNPC and \ # curObj.GetHP() <= 0 : # continue # curPlayer.MoveFail() # GameWorld.Log("ÒÆ¶¯Ê§°Ü£¬Ä¿±êµãÓÐÍæ¼Ò»òÕßNPC") # return #=============================================================================== #¼ì²éÍæ¼Òµ½Ä¿µÄµØ2µãÖ®¼äÊÇ·ñ¿ÉÒÔÖ±½Ó×ß #=========================================================================== # if moveDist > 15 and (not curMap.CanLineTo(destX, destY, objPosX, objPosY) \ # and not curMap.CanLineTo(objPosX, objPosY, destX, destY)): # # #Õý·´·½ÏòÓÐÒ»µã²»¿É×ß, Ôò²»¿É×ß # #GameWorld.Log("ÒÆ¶¯Ê§°Ü£¬¼ì²éÍæ¼Òµ½Ä¿µÄµØ2µãÖ®¼äÊÇ·ñ¿ÉÒÔÖ±½Ó×ß(%d,%d)->(%d,%d), ClientCurPos:(%d,%d)"%( # # objPosX, objPosY,destX, destY,startX,startY ) , curPlayer.GetPlayerID()) # #µØ·½²»¿É×ß # if sendPlayerMoveFail: # curPlayer.MoveFail() # # return False #=========================================================================== return True #--------------------------------------------------------------------- #=============================================================================== # //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove # tagCPlayerStopMove * GettagCPlayerStopMove(); # # class IPY_CPlayerStopMove # { # public: # # int GetPosX(); # # int GetPosY(); # # int GetDir(); # # int GetWorldTick(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove def PlayerStopMove(index, tick): GameWorld.GetPsycoFunc(__Func_PlayerStopMove)(index, tick) return ##¿Í»§¶Ë·â°üÏìÓ¦ //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove def __Func_PlayerStopMove(index, tick): #=========================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # # #»ñÈ¡·â°ü²ÎÊý # sendPack = IPY_GameWorld.IPY_CPlayerStopMove() # sendPack_Tick = sendPack.GetWorldTick() # sendPack_PosX = sendPack.GetPosX() # sendPack_PosY = sendPack.GetPosY() # sendPack_Dir = sendPack.GetDir() # # #½»Í¨¹¤¾ß # vehicle = curPlayer.GetPlayerVehicle() # # #Íæ¼ÒÍ£Ö¹ÒÆ¶¯ # if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvNull or vehicle == IPY_GameWorld.pvHorse: # PlayerNormalStopMove(curPlayer, sendPack_Tick, sendPack_PosX, sendPack_PosY, sendPack_Dir) # # #ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯ # elif vehicle == IPY_GameWorld.pvTruck : # #ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯ # PlayerStopMoveByCarryTruck(curPlayer, sendPack_Tick, sendPack_PosX, sendPack_PosY) # # else: # GameWorld.Log("²»ÄÜÒÆ¶¯, ½»Í¨¹¤¾ß²»Ã÷%d" % (vehicle) , curPlayer.GetPlayerID()) #=========================================================================== return #--------------------------------------------------------------------- ##Íæ¼ÒÍ£Ö¹ÒÆ¶¯ #@param curPlayer Íæ¼ÒʵÀý #@param sendPack_Tick ʱ¼ä´Á #@param sendPack_PosX Ä¿±êX×ø±ê #@param sendPack_PosY Ä¿±êY×ø±ê #@param sendPack_Dir ÃæÏò #@return ·µ»ØÖµÎÞÒâÒå #@remarks ×Ô¶¨Ò庯Êý Íæ¼ÒÍ£Ö¹ÒÆ¶¯ #=============================================================================== # def PlayerNormalStopMove(curPlayer, sendPack_Tick, sendPack_PosX, sendPack_PosY, sendPack_Dir) : # #Íæ¼ÒÍ£Ö¹ÒÆ¶¯¼ì²é # if CheckPlayerStopMove(curPlayer) != True : # return # # if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, sendPack_Tick, sendPack_PosX, sendPack_PosY): # return # # if PlayerControl.PlayerRefreshPos(curPlayer, curPlayer, sendPack_PosX, sendPack_PosY) != True: # return # # #curPlayer.SetFaceDir(sendPack_Dir) # curPlayer.StopMove() # return True # # #--------------------------------------------------------------------- # ##ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯ # #@param curPlayer Íæ¼ÒʵÀý # #@param sendPack_Tick ʱ¼ä´Á # #@return ·µ»ØÖµÎÞÒâÒå # #@remarks ×Ô¶¨Ò庯Êý ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯ # def PlayerStopMoveByCarryTruck(curPlayer, clientWorldTick, sendPack_PosX, sendPack_PosY): # curPlayerTruck = curPlayer.GetTruck() # if curPlayerTruck == None: # GameWorld.Log("ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯ -> ûÓÐæô³µ!" , curPlayer.GetPlayerID()) # return # # if curPlayerTruck.GetCurAction() != IPY_GameWorld.laNPCMove : # return # # if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, clientWorldTick, sendPack_PosX, sendPack_PosY): # return # # curPlayerTruck.StopMove() # return True #=============================================================================== #--------------------------------------------------------------------- #=============================================================================== # //03 05Ö÷½Çµã»÷¸´»î#tagCCliectReborn # tagCCliectReborn * GettagCCliectReborn(); # # class IPY_CCliectReborn # { # public: # # int GetType(); # //0: 񿮱 1:Òø×Ó # int GetMoneyType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 05Ö÷½Çµã»÷¸´»î#tagCCliectReborn #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 05Ö÷½Çµã»÷¸´»î#tagCCliectReborn def PlayerClickReborn(index, tick): #Íæ¼Òµã»÷: ÖØÉú curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #¸ù¾ÝÍæ¼ÒÑ¡ÔñÖØÉúÑ¡ÏîÖØÉú sendPack = IPY_GameWorld.IPY_CCliectReborn() #¸´»îÀàÐÍ playerRebornType = sendPack.GetType() if curPlayer.GetHP() > 0: # µ±ÑªÁ¿´óÓÚ0ÊÕµ½¸´»îÇëÇó°üʱ£¬Ò»°ãÊÇǰºó¶Ë¸´»î״̬²»Ò»ÖµÄÇé¿öϵ¼Ö嵀 # ÓÉÓÚǰ¶ËÐèÒª¸ù¾Ý¸´»î״̬Åжϸ´»î½çÃæÏà¹ØÂß¼­£¬ËùÒÔÕâÀïÐèÒª×öÒ»Ð©ÌØÊâ´¦Àí£¬·ÀֹijЩÇé¿öÏÂǰºó¶Ë¸´»î״̬²»Ò»Öµ¼ÖµÄһЩÒì³£ÎÊÌâ # ºó¶Ë·ÇËÀÍö״̬µÄÇé¿ö£¬²¹Í¬²½Ò»´Î¸´»î°ü¸øÇ°¶Ë if curPlayer.GetPlayerAction() != IPY_GameWorld.paDie: SyncPlayerReborn(curPlayer, playerRebornType) # ºó¶ËÒ²ÊÇËÀÍö״̬µÄÇé¿ö£¬Ö±½ÓÖØÐ´¥·¢Ò»´Î¸´»î else: PlayerRebornByType(curPlayer, playerRebornType, tick) #ÉúÃüÖµ²»Îª0 , ²»ÄÜÖØÉú # GameWorld.Log("Íæ¼Òµã»÷: ÖØÉúʧ°Ü,ÉúÃüÖµ²»Îª0 , ²»ÄÜÖØÉú" , curPlayer.GetPlayerID()) return #FBÖнûÖ¹¸´»î if FBLogic.DoFBForbidReborn(curPlayer, playerRebornType): PlayerControl.NotifyCode(curPlayer, "Reborn_lhs_31379") return #Íæ¼Ò¸´»î if PlayerRebornByType(curPlayer, playerRebornType, tick): #Íæ¼Ò¸´»î³É¹¦,ÅжÏÊÇ·ñÔÚ¸±±¾Öи´»î PlayerReborn_InFB(curPlayer, playerRebornType, tick) return def SyncPlayerReborn(curPlayer, rebornType): rebornInfo = ChNetSendPack.tagPlayerReborn() rebornInfo.Clear() rebornInfo.PlayerID = curPlayer.GetPlayerID() rebornInfo.Type = rebornType rebornInfo.PosX = curPlayer.GetPosX() rebornInfo.PosY = curPlayer.GetPosY() NetPackCommon.SendFakePack(curPlayer, rebornInfo) return #--------------------------------------------------------------------- #=============================================================================== # //04 01 »ñÈ¡ÇøÓòÄÚ¶ÔÏóÐÅÏ¢#tagCAreaObjInfo # tagCAreaObjInfo * GettagCAreaObjInfo(); # # class IPY_CAreaObjInfo # { # public: # # int GetObjType(); # # int GetObjID(); # }; #=============================================================================== ##//04 01 »ñÈ¡ÇøÓòÄÚ¶ÔÏóÐÅÏ¢#tagCAreaObjInfo #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks //04 01 »ñÈ¡ÇøÓòÄÚ¶ÔÏóÐÅÏ¢#tagCAreaObjInfo def PlayerNeedSeeOther(index, tick): #ÏÖÔÚ¸ÄΪ, Ö±½Ó·¢ËÍÐÅÏ¢¸ø¿Í»§¶Ë, Õâ¸ö·â°ü²»´¦ÀíÁË # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # sendReq = IPY_GameWorld.IPY_CAreaObjInfo() # tagObj = GameWorld.GetObj(sendReq.GetObjID(), sendReq.GetObjType()) # # if tagObj == None: # GameWorld.Log("Íæ¼ÒÇëÇóÆäËûÍæ¼ÒµÄÏàòÐÅϢʧ°Ü, ¶ÔÏó²»´æÔÚ") # return # # if GameWorld.IsSameObj(curPlayer, tagObj): # #×Ô¼º²»Äܵõ½×Ô¼ºµÄÐÅÏ¢ # return # # dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), tagObj.GetPosX(), tagObj.GetPosY()) # #¶ÔÏóÔÚ×Ô¼ºÁ½±¶ÊÓÒ°ÍâÃæ, Ôò¾Ü¾ø # if dist > curPlayer.GetSight() * 2: # #Ä¿±êÍæ¼ÒÔÚÊÓÒ°ÍâÃæ # GameWorld.Log("Íæ¼ÒÇëÇóÆäËûÍæ¼ÒµÄÏàòÐÅϢʧ°Ü£¬Ä¿±êÍæ¼ÒÔÚÊÓÒ°ÍâÃæ %d" % dist) # curPlayer.Sync_GetPlayerInfoFail(sendReq.GetObjID()) # return # # if tagObj.GetGameObjType() != IPY_GameWorld.gotPlayer: # return # curPlayer.SeeOtherPlayer(tagObj) return #--------------------------------------------------------------------- #=============================================================================== # //04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo # tagCClickObjGetInfo * GettagCClickObjGetInfo(); # # class IPY_CClickObjGetInfo # { # public: # # int GetObjID(); # # int GetObjType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦//04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦//04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo def PlayerClickOtherPlayerGetInfo(index, tick): GameWorld.GetPsycoFunc(__Func_PlayerClickOtherPlayerGetInfo)(index, tick) return ##¿Í»§¶Ë·â°üÏìÓ¦//04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦//04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo def __Func_PlayerClickOtherPlayerGetInfo(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CClickObjGetInfo() sendPack_ID = sendPack.GetObjID() sendPack_Type = sendPack.GetObjType() tagObj = GameWorld.GetObj(sendPack_ID, sendPack_Type) if tagObj == None: #GameWorld.Log("Íæ¼ÒÇëÇóÆäËûÍæ¼ÒµÄÏàòÐÅϢʧ°Ü, ¶ÔÏó²»´æÔÚ", curPlayer.GetPlayerID()) return dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), tagObj.GetPosX(), tagObj.GetPosY()) #ÊÇ·ñ¿ÉÒÔÄ¿±êÏêϸÐÅÏ¢ canGetDetail = (dist <= curPlayer.GetSight()) #Ä¿±êÀàÐÍ tagObjType = tagObj.GetGameObjType() #½ö´¦ÀíPlayerºÍNPC if tagObjType not in [IPY_GameWorld.gotPlayer, IPY_GameWorld.gotNPC]: return #---Íæ¼Ò´¦Àí--- if tagObjType == IPY_GameWorld.gotPlayer: #»ñÈ¡Íæ¼ÒÏêϸÐÅÏ¢³É¹¦ if canGetDetail: extendDataDict = {} extendDataDict['maxHP'] = tagObj.GetMaxHP() extendDataDict['maxMP'] = tagObj.GetMaxMP() extendDataDict['hit'] = tagObj.GetHit() extendDataDict['miss'] = tagObj.GetMiss() extendDataDict['atkSpeed'] = PlayerControl.GetAtkSpeed(tagObj) extendDataDict['superHitRate'] = tagObj.GetSuperHitRate() extendDataDict['superHit'] = tagObj.GetSuperHit() extendDataDict['luckyHitRate'] = tagObj.GetLuckyHitRate() extendDataDict['greatHitRate'] = tagObj.GetGreatHitRate() extendDataDict['ignoreDefRate'] = tagObj.GetIgnoreDefRate() extendDataDict['damageReduceRate'] = tagObj.GetDamageReduceRate() extendDataDict['damageBackRate'] = tagObj.GetDamageBackRate() extendData = str(extendDataDict) extendDataLen = len(extendData) curPlayer.PlayerClickOtherPlayerDetail(tagObj, extendDataLen, extendData) return #»ñÈ¡Íæ¼ÒÏêϸÐÅϢʧ°Ü curPlayer.Sync_GetPlayerInfoFail(sendPack_ID) return #---NPC´¦Àí--- #»ñÈ¡NPCÏêϸÐÅÏ¢³É¹¦ if canGetDetail: curPlayer.PlayerClickOtherNPCDetail(tagObj) return #»ñÈ¡NPCÏêϸÐÅϢʧ°Ü #Ôݲ»´¦Àí return #--------------------------------------------------------------------- #=============================================================================== # //03 02 Íæ¼Ò×øÏÂ/Õ¾Á¢#tagCSit # tagCSit * GettagCSit(); # # class IPY_CSit # { # public: # //0:×øÏ 1:Õ¾Á¢ # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 02 Íæ¼Ò×øÏÂ/Õ¾Á¢#tagCSit #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 02 Íæ¼Ò×øÏÂ/Õ¾Á¢#tagCSit def PlayerSit(index, tick): GameWorld.DebugLog("PlayerSit...") curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #¹¦ÄÜ¿ªÆôÅжϻ»³É #GameFuncComm.GetFuncCanUse(curPlayer, funcID) #¹¦ÄÜ¿ªÆôÅжϻ»³É #GameFuncComm.GetFuncCanUse(curPlayer, funcID) if curPlayer.GetHP() <= 0: return sendPack = IPY_GameWorld.IPY_CSit() setType = sendPack.GetType() if setType == 1: #ÊÖÓΰæ Ö»×öÕ¾Á¢ PlayerControl.DoPlayerStand(curPlayer) return if curPlayer.IsMoving(): PlayerControl.NotifyCode(curPlayer, "CanNotSitWrongState") return #ÔÚ½»Í¨¹¤¾ßÖÐ, ²»¿É´ò×ø if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvNull: return #´ò×øÐÐΪ£¬¿Í»§¶ËÏÞÖÆ if not OperControlManager.IsObjCanDoAction(curPlayer, ChConfig.Def_Obj_ActState_ServerAct, IPY_GameWorld.oalSit): return #ÉèÖûØÑª/»ØÄ§¿ªÊ¼±êʾλ curPlayer.SetRestoreTime(tick) #»ñµÃ·â°ü sendPack = IPY_GameWorld.IPY_CSit() setType = sendPack.GetType() playAction = curPlayer.GetPlayerAction() #---Ïë×øÏÂ--- if setType == 0 and playAction == IPY_GameWorld.paNull: PlayerControl.DoPlayerSit(curPlayer, tick) return #---ÏëÕ¾ÆðÀ´--- PlayerControl.DoPlayerStand(curPlayer) return #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß def PlayerDisconnect(index, tick): GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick) return #--------------------------------------------------------------------- ##¼Ç¼ÐÂÔöÓÐЧµÇÂ½Íæ¼Ò£¬µÇ½10·ÖÖÓÒÔÉÏÍæ¼Ò²ÅËãÓÐЧ # @param curPlayer Íæ¼ÒʵÀý # @return None def NoteLoginValid(curPlayer): if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_LoginValid) == 1: #ÒѼǼ return #¼ÆËãʱ¼ä, µ±Ç°¼õÈ¥µÇ½ʱ¼ä diffTime = GameWorld.GetCurrentTime() - GameWorld.GetDateTimeByStr(curPlayer.GetLoginTime().strip()) #10·ÖÖÓÒÔÉϲÅËãÓÐÐ§Íæ¼Ò if diffTime.days == 0 and diffTime.seconds < 10 * 60: return DataRecordPack.DR_LoginValid(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_LoginValid, 1) return ##C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß def __Func_PlayerDisconnect(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) try: # ±ÜÃâÒòÂß¼­´íÎóµ¼ÖÂÏÂÏßʧ°Ü£¬¿ÉÄܵ¼Ö»صµµÄÇé¿ö DoPlayerDisconnect(curPlayer, tick) except: import traceback GameWorld.ErrLog("Íæ¼ÒÏÂÏßÂß¼­´íÎó~~~~~\r\n%s" % traceback.format_exc()) if GameWorld.GetGameWorld().GetDebugLevel(): raise Exception("Íæ¼ÒÏÂÏß~~~~~\r\n%s" % traceback.format_exc()) #µ÷ÓõײãÊ¹Íæ¼ÒÏÂÏß curPlayer.DoDisconnect(tick) ##Íæ¼ÒÕý³£ÏÂÏß #@param curPlayer Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß def DoPlayerDisconnect(curPlayer, tick): GameWorld.Log("PlayerDisconnect!" , curPlayer.GetPlayerID()) PlayerMergeEvent.BroadcastMergePlayerEvent() #ÏÂÏßÁË£¬½«´æ´¢ÔÚ×ÖµäÖеÄÕæÊµXPÖµ£¬ÉèÖøøÍæ¼Ò£¬Íê³É֪ͨºÍ´æ´¢ #curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue)) ####################################################################### #ÏÂÏßÂß¼­ PlayerControl.PlayerLeaveServer(curPlayer, tick) ####################################################################### #Éè¶¨Íæ¼ÒµÄÏÂÏßʱ¼ä curPlayer.SetLogoffTime(GameWorld.GetCurrentDataTimeStr()) #Á÷Ïò¼ÇÂ¼Íæ¼ÒÏÂÏß DataRecordPack.DR_PlayerDisconnect(curPlayer) #¼Ç¼ÐÂÔöÓÐЧµÇÂ½Íæ¼Ò NoteLoginValid(curPlayer) #VIPʱ¼ä #PlayerVip.CalcVIPTimeByTick(curPlayer, tick, False) #ÔÚÏßʱ¼ä PlayerOnlinePrize.CalcOnlineTime(curPlayer) #Ê׳äÌáʾʱ¼ä PlayerGoldGift.UpdateFirstGoldTime(curPlayer) #Íæ¼Òδ»ØÍ¼ÐÎÑéÖ¤ÂëÏÂÏß½«»á¼Ç¼´íÎó´ÎÊý #=========================================================================== # if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_WaitSign) \ # == PlayerAutoCheckOnline.Def_Captcha_WaitAnswer: # PlayerAutoCheckOnline.CaptchaAnswerErr(curPlayer, tick, False) # # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_WaitSign, PlayerAutoCheckOnline.Def_Captcha_Safe) # #=========================================================================== #@warning: µÈ×Ö¶ÎͳһÐ޸ģ¬É¾³ýË«±¶¾­ÑéBUFF #PlayerDoubleExpSys.DeleteDoubleExpBuff(curPlayer, ChConfig.Def_DoubleExpNote_StopOff) #ÉèÖÃRouteServerInitOK×Öµä PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RouteServerInitOK, 0) #È¡Ïû×Ô¶¯ÔËïÚ״̬ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoTruck, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RoomID, 0) #ÏÂÏßÕٻسèÎï #PetControl.ReCallFightPet(curPlayer) PlayerTJG.CalcPlayerTJG(curPlayer, tick) #ÀëÏßsession EventReport.WriteEvent_session(curPlayer) return #--------------------------------------------------------------------- #=============================================================================== # //03 03 ÉèÖÿì½ÝÀ¸±£´æ#tagCSetShutCutData # tagCSetShutCutData * GettagCSetShutCutData(); # # class IPY_CSetShutCutData # { # public: # # char * GetSetting(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 03 ÉèÖÿì½ÝÀ¸±£´æ#tagCSetShutCutData #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 03 ÉèÖÿì½ÝÀ¸±£´æ#tagCSetShutCutData def SetShutcutSettingHV(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CSetShutCutData() setting = sendPack.GetSetting() if not GameWorld.EncodingToUnicode(setting): #±àÂë¸ñʽ²»ºÏ·¨ setting = "" GameWorld.ErrLog("SetShutCutData Encoding Err", curPlayer.GetID()) return if len(setting) > 100: return curPlayer.SetSetting(setting) return #// A2 22 ÉèÖÃÒýµ¼³É¹¦ #tagCMSetGuideOK # #struct tagCMSetGuideOK #{ # tagHead Head; # BYTE GuideIndex; // ¼Ç¼λË÷Òý, ·¢ËÍ255ʱ,´ú±íÉèÖÃÈ«²¿ # BYTE IsOK; #}; def OnSetGuideOK(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) guideIndex = clientData.GuideIndex isOK = clientData.IsOK # È«²¿ÉèÖà if guideIndex == 255: value = 0 if not isOK else (pow(2, 31) - 1) for i in xrange(ChConfig.Def_GuideStateKeyCount): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_GuideState % i, value) GameWorld.DebugLog("ÉèÖÃÈ«²¿Òýµ¼×´Ì¬: isOK=%s,value=%s" % (isOK, value)) else: if guideIndex >= 31*ChConfig.Def_GuideStateKeyCount: GameWorld.ErrLog("ÉèÖÃÒýµ¼Ê§°Ü, ³¬¹ý×î´óÖ§³Ö¼Ç¼λ£¡ guideIndex=%s" % guideIndex) return GameWorld.DebugLog("ÉèÖÃÒýµ¼³É¹¦ guideIndex=%s,isOK=%s" % (guideIndex, isOK)) isOK = 1 if isOK else 0 GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_GuideState, guideIndex, isOK) # ÕâÀïÖ»¸üÐÂ״ֵ̬ #SyncGuideState(curPlayer) return def SyncGuideState(curPlayer): # ͬ²½Òýµ¼×´Ì¬¼Ç¼ guideStatePack = ChPyNetSendPack.tagMCGuideState() guideStatePack.GuideState = [] for i in xrange(ChConfig.Def_GuideStateKeyCount): guideStatePack.GuideState.append(curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_GuideState % i)) guideStatePack.Count = len(guideStatePack.GuideState) NetPackCommon.SendFakePack(curPlayer, guideStatePack) return def ShowGuide(curPlayer, guideID): # ֪ͨ¿Í»§¶ËÏÔʾÒýµ¼ showGuide = ChPyNetSendPack.tagMCShowGuide() showGuide.GuideID = guideID NetPackCommon.SendFakePack(curPlayer, showGuide) return #--------------------------------------------------------------------- #=============================================================================== # //05 03 Íæ¼ÒÌøÔ¾#tagCJump # tagCJump * GettagCJump(); # # class IPY_CJump # { # public: # # int GetSkillID(); # # int GetStartPosX(); # # int GetStartPosY(); # # int GetEndPosX(); # # int GetEndPosY(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //05 03 Íæ¼ÒÌøÔ¾#tagCJump #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //05 03 Íæ¼ÒÌøÔ¾#tagCJump def PlayerJump(index, tick): #ûÕâ¸ö¹¦ÄÜÁË return ## Íæ¼Ò״̬±ä¸ü # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None def OnPlayerChangeAction(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not curPlayer: return lastAction = curPlayer.GetPlayerLastAction() curAction = curPlayer.GetPlayerAction() if lastAction == curAction: return #Èç¹ûÉÏÒ»¸ö״̬ÊÇСÓÎϷ״̬ if lastAction == IPY_GameWorld.paGameEvent: PlayerGameEvent.TakeoffFishermanEquipment(curPlayer) return #--------------------------------------------------------------------- #=============================================================================== # //03 06 ÉèÖÃÉúÃü»Ö¸´ÊýÖµ#tagCSetHPRestore # tagCSetHPRestore * GettagCSetHPRestore(); # # class IPY_CSetHPRestore # { # public: # # int GetValue(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 06 ÉèÖÃÉúÃü»Ö¸´ÊýÖµ#tagCSetHPRestore #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 06 ÉèÖÃÉúÃü»Ö¸´ÊýÖµ#tagCSetHPRestore def HPRestoreSetting(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CSetHPRestore() curValue = sendPack.GetValue() if curValue < 0 or curValue > 100: return curPlayer.SetHPRestoreSetting(curValue) #Íæ¼Ò»î×ŵÄʱºòµ÷Óà if curPlayer.GetHP() > 0 : #µ÷ÓÃ×Ô¶¯»ØÑª PlayerControl.PlayerAutoRestoreHP(curPlayer, tick) return #--------------------------------------------------------------------- #=============================================================================== # //03 07 ÉèÖÃħ·¨»Ö¸´ÊýÖµ#tagCSetMPRestore # tagCSetMPRestore * GettagCSetMPRestore(); # # class IPY_CSetMPRestore # { # public: # # int GetValue(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 07 ÉèÖÃħ·¨»Ö¸´ÊýÖµ#tagCSetMPRestore #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 07 ÉèÖÃħ·¨»Ö¸´ÊýÖµ#tagCSetMPRestore def MPRestoreSetting(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CSetMPRestore() curValue = sendPack.GetValue() if curValue < 0 or curValue > 100: return curPlayer.SetMPRestoreSetting(curValue) #Íæ¼Ò»î×ŵÄʱºòµ÷Óà if curPlayer.GetHP() > 0 : #µ÷ÓÃ×Ô¶¯»ØÄ§ PlayerControl.PlayerAutoRestoreMP(curPlayer, tick) return #--------------------------------------------------------------------- #=============================================================================== # //03 0B ÉèÖýðÇ®ÀàÐÍ#tagCSetMoneyType # tagCSetMoneyType * GettagCSetMoneyType(); # # class IPY_CSetMoneyType # { # public: # //1:½ð×Ó/½ðƱ 2:Òø×Ó/񿮱 # int GetType(); # //TMoneyType # int GetMoneyType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 0B ÉèÖýðÇ®ÀàÐÍ#tagCSetMoneyType #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0B ÉèÖýðÇ®ÀàÐÍ#tagCSetMoneyType def SetMoneyType(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CSetMoneyType() curType = sendPack.GetType() curMoneyType = sendPack.GetMoneyType() if curType == 1 and curMoneyType == IPY_GameWorld.TYPE_Price_Gold_Money : curPlayer.SetUseGoldType(IPY_GameWorld.TYPE_Price_Gold_Money) elif curType == 1 and curMoneyType == IPY_GameWorld.TYPE_Price_Gold_Paper : curPlayer.SetUseGoldType(IPY_GameWorld.TYPE_Price_Gold_Paper) elif curType == 2 and curMoneyType == IPY_GameWorld.TYPE_Price_Silver_Money : curPlayer.SetUseSilverType(IPY_GameWorld.TYPE_Price_Silver_Money) elif curType == 2 and curMoneyType == IPY_GameWorld.TYPE_Price_Silver_Paper : curPlayer.SetUseSilverType(IPY_GameWorld.TYPE_Price_Silver_Paper) else: GameWorld.Log("SetMoneyType = > ½ðÇ®ÀàÐÍ = %s´íÎó" % (curType) , curPlayer.GetPlayerID()) return return #--------------------------------------------------------------------- #=============================================================================== # //03 08 ´ò¿ª´óµØÍ¼#tagCOpenMap # tagCOpenMap * GettagCOpenMap(); # # class IPY_COpenMap # { # public: # # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 08 ´ò¿ª´óµØÍ¼#tagCOpenMap #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 08 ´ò¿ª´óµØÍ¼#tagCOpenMap def PlayerMapInfo(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if tick - curPlayer.GetPosInfoTick() < ChConfig.Def_GetOtherPosInterval: return curPlayer.SetPosInfoTick(tick) #¶ÓÎéÐÅϢͬ²½ PlayerTeam.NotifyPosInfoToPlayer(curPlayer, tick) #æô³µÐÅϢͬ²½ PlayerTruck.NotifyPosInfoToPlayer(curPlayer, tick) #֪ͨ´óµØÍ¼±ê¼ÇµãÊýÁ¿ OnSendMapSignCnt(curPlayer) return #--------------------------------------------------------------------- #=============================================================================== # //03 0A ¸ü¸Ä¹¥»÷ģʽ#tagCChangeAttackMode # tagCChangeAttackMode * GettagCChangeAttackMode(); # # class IPY_CChangeAttackMode # { # public: # //TAttackMode # int GetMode(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 0A ¸ü¸Ä¹¥»÷ģʽ#tagCChangeAttackMode #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0A ¸ü¸Ä¹¥»÷ģʽ#tagCChangeAttackMode def PlayerChangeAttackMode(index, tick) : curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CChangeAttackMode() sendPackMode = sendPack.GetMode() #²»¿ÉÇл»Ä£Ê½µÄµØÍ¼ mapID = GameWorld.GetMap().GetMapID() if mapID in ChConfig.Def_CanNotChangeAtkModelMap: GameWorld.Log("±¾µØÍ¼²»¿ÉÇл»PKģʽ,mapID=%s" % (mapID), curPlayer.GetPlayerID()) return #=============================================================================================== # #Ö»ÓÐamPeaceºÍamAll # #if sendPackMode < 0 or sendPackMode > IPY_GameWorld.amAll : # if sendPackMode not in [IPY_GameWorld.amPeace, IPY_GameWorld.amAll, IPY_GameWorld.amFamily]: # GameWorld.Log("Çл»¹¥»÷ģʽ·â°ü,ÀàÐÍ = %s´íÎó" % (sendPackMode) , curPlayer.GetPlayerID()) # return #=============================================================================================== ChangeAttackMode(curPlayer, sendPackMode) return ##¸Ä±äÍæ¼ÒPKģʽ #@param curPlayer Íæ¼Ò #@param attackMode #@return def ChangeAttackMode(curPlayer, attackMode): if attackMode < IPY_GameWorld.amPeace or attackMode >= IPY_GameWorld.amMax: GameWorld.DebugLog("±ä¸üPKģʽÒì³££¬²»´æÔÚ¸Ãģʽ!attackMode=%s" % attackMode) return if curPlayer.GetAttackMode() == attackMode: GameWorld.DebugLog("PKģʽÏàͬ£¬²»±ä¸ü!attackMode=%s" % attackMode) return attackModels = GameWorld.GetMap().GetAttackModels() if not attackModels & pow(2, attackMode): GameWorld.DebugLog("±¾µØÍ¼½ûÖ¹Çл»¸Ãģʽ£¡attackModels=%s,changeMode=%s" % (attackModels, attackMode)) return #Èç¹ûÇл»µ½ºÍƽģʽ,Çå¿ÕËùÓÐÕÙ»½Ê޵ijðºÞ if attackMode == IPY_GameWorld.amPeace: NPCCommon.ClearSummonAngry_Player(curPlayer) curPlayer.SetAttackMode(attackMode) # ͬ²½¿Í»§¶ËPKģʽ SyncPKModel(curPlayer) return #--------------------------------------------------------------------- #=============================================================================== # //06 06 È¡ÏûBuff#tagCCancelBuff # tagCCancelBuff * GettagCCancelBuff(); # # class IPY_CCancelBuff # { # public: # # int GetBuffID(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //06 06 È¡ÏûBuff#tagCCancelBuff #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //06 06 È¡ÏûBuff#tagCCancelBuff def PlayerCancelBuff(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CCancelBuff() skillID = sendPack.GetBuffID() #---²éÕÒÈ¡ÏûµÄ¼¼ÄÜ--- #---Çå¿ÕBuff--- #@bug 2607: ³ÖÐøÐÔ¼¼Äܵ÷ÓÃDoBuffDisApper, µ¼Ö³ÖÐøÐÔ»ØÑªBuff, Ò»´ÎÐÔ½«Ê£ÓàµÄ»Ø¸´Á¿¶¼¼ÓÉÏÁË #=========================================================================== # if buffSkill.GetSkillType() not in ChConfig.Def_LstBuff_List: # BuffSkill.DoBuffDisApper(curPlayer, curPlayerCancelbuff, tick) #=========================================================================== BuffSkill.DelBuffBySkillID(curPlayer, skillID, tick) #Ë¢ÐÂÈËÎïÊôÐÔ playerControl = PlayerControl.PlayerControl(curPlayer) #Ë¢ÐÂËùÓÐ״̬ playerControl.RefreshPlayerAttrByBuff() #GameWorld.Log("Íæ¼ÒÈ¡Ïûbuff³É¹¦,buffTypeID = %s"%(buffSkillTypeID) , curPlayer.GetPlayerID()) return #--------------------------------------------------------------------- #=============================================================================== # //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent # tagCStartGameEvent * GettagCStartGameEvent(); # # class IPY_CStartGameEvent # { # public: # //ÓÎϷʼþ Type = TGameEvent # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent def StartGameEvent(index, tick): GameWorld.GetPsycoFunc(__Func_StartGameEvent)(index, tick) return ##¿Í»§¶Ë·â°üÏìÓ¦ //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent def __Func_StartGameEvent(index, tick): #ÓÎϷʼþ Type = TGameEvent curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if curPlayer.GetHP() == 0: #GameWorld.Log("Íæ¼ÒËÀÍö£¬Ã»ÓÐʼþ") return sendPack = IPY_GameWorld.IPY_CStartGameEvent() eventType = sendPack.GetType() #---Í£Ö¹ÓÎϷʼþ--- if eventType == IPY_GameWorld.geNull: PlayerGameEvent.StopGameEvent(curPlayer, tick) return #2010-5-26 Ö»¿ªÆôµöÓã,¹Ø±ÕÌøÎè if eventType != IPY_GameWorld.geFish: return #ͨ¹ý¶¯×÷»ñµÃÏàÓ¦¶¯×÷λ curActBit = OperControlManager.GetActBitByAction(ChConfig.Def_ActBit_GameEvent, eventType) if curActBit != None: #À­½ø¶ÈÌõÖР״̬,¿Í»§¶ËÏÞÖÆ if not OperControlManager.IsObjCanDoAction(curPlayer, ChConfig.Def_Obj_ActState_ClientAct, curActBit): return #---ÑéÖ¤ÊÇ·ñ¿ÉÒÔ¿ªÊ¼Ð¡ÓÎϷʼþ--- lastShowEventTick = curPlayer.GetGameEventTick() if tick - lastShowEventTick < ChConfig.Def_ShowEventTime: #GameWorld.Log("ʼþ²¥·Å¼ä¸ôÌ«¶Ì") return #¼ì²éÊÇ·ñ¿ÉÒÔ¿ªÊ¼Ð¡ÓÎÏ· if not PlayerGameEvent.CheckCanBeginGameEvent(curPlayer, tick): return if not PlayerGameEvent.CanProcessGameEvent(curPlayer, eventType, tick): #PlayerGameEvent.StopGameEvent(curPlayer,tick) return #---¿ªÊ¼Ö´ÐÐСÓÎϷʼþ--- #ÉèÖÃÍæ¼Òµ±ÆÚΪÓÎϷʼþ״̬ PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paGameEvent) #É趨¿ªÊ¼ÓÎϷʼþ PlayerGameEvent.StartGameEvent(curPlayer, eventType, tick) return #// B0 50 µöÓãÊÕ¸Ë #tagCMDoFish # #struct tagCMDoFish # #{ # tagHead Head; # BYTE FishNum; // µöÓã±àºÅ1~N # BYTE PosIndex; // Í£ÁôλÖÃ1~N #}; ## µöÓãÊÕ¸Ë # @param curPlayer # @return None #=============================================================================== # def OnDoFish(index, clientData, tick): # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # if not curPlayer: # return # # if curPlayer.GetPlayerAction() != IPY_GameWorld.paGameEvent: # GameWorld.DebugLog("·ÇСÓÎϷ״̬Ï£¬²»¿ÉÊոˣ¡", curPlayer.GetPlayerID()) # return # # if curPlayer.GetPlayerGameEvent() != IPY_GameWorld.geFish: # GameWorld.DebugLog("·ÇµöÓã״̬Ï£¬²»¿ÉÊոˣ¡", curPlayer.GetPlayerID()) # return # # fishType = clientData.PosIndex # PlayerGameEvent.DoFishLogic(curPlayer, fishType) # return #=============================================================================== #=============================================================================== # //A1 03 ÉèÖÃÊÇ·ñ³ÉÄê #tagCMAdult # # struct tagCMAdult # { # tagHead Head; # BYTE Adult; # }; #=============================================================================== # Ö»Ð޸ĵØÍ¼µÄadult£¬Ï´εǼ»áÔڵǼ°ü·¢£¬×¢Òâ²âÊÔÇл»µØÍ¼ def PySetAdult(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) adult = 1 if clientData.Adult else 0 curPlayer.ChangeAdult(adult) return #--------------------------------------------------------------------- #=============================================================================== # //03 0D Íæ¼Ò×Ô¶¨Ò嶯×÷#tagCShowFace # tagCShowFace * GettagCShowFace(); # # class IPY_CShowFace # { # public: # //±íÇéÀàÐÍ, ¿Í»§¶Ë×Ô¶¨, ·þÎñÆ÷¹ã²¥Õâ¸öType # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 0D Íæ¼Ò×Ô¶¨Ò嶯×÷#tagCShowFace #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0D Íæ¼Ò×Ô¶¨Ò嶯×÷#tagCShowFace def ShowFace(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if tick - curPlayer.GetShowFaceTick() < ChConfig.Def_ShowEventTime: return if curPlayer.GetHP() <= 0: return #±íÇéÐÐΪ£¬ ¿Í»§¶ËÏÞÖÆ if not OperControlManager.IsObjCanDoAction(curPlayer, ChConfig.Def_Obj_ActState_ClientAct, IPY_GameWorld.oalLook): return #ÒÆ¶¯Öв»Ö´Ðд˲Ù×÷ if curPlayer.IsMoving(): #PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_0") return if curPlayer.GetPlayerAction() != IPY_GameWorld.paNull: return if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvNull: return #ÉèÖüä¸ô curPlayer.SetShowFaceTick(tick) sendPack = IPY_GameWorld.IPY_CShowFace() PlayerControl.DoPlayerShowPlayerFace(curPlayer, sendPack.GetType()) return True #----------------------------×Ô¶¨Òå·½·¨ #--------------------------------------------------------------------- ##¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔÍ£Ö¹ÒÆ¶¯ #@param curPlayer Íæ¼ÒʵÀý #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔÍ£Ö¹ÒÆ¶¯ def CheckPlayerStopMove(curPlayer): if not curPlayer.GetMapLoadOK() : #Íæ¼ÒµØÍ¼¶ÁȡΪ³É¹¦, Ìß³öÕâÈË #curPlayer.Kick(IPY_GameWorld.disPlayerMovedWhenNotPrepare) #GameWorld.Log("Íæ¼ÒµØÍ¼¶ÁȡûÓгɹ¦") return if curPlayer.GetHP() == 0: #Íæ¼ÒÒѾ­ËÀÍö #GameWorld.Log("Íæ¼ÒÍ£Ö¹ÒÆ¶¯,Íæ¼ÒÒѾ­ËÀÍö") return if PlayerControl.PlayerCanStateTransfer(curPlayer) != True: #GameWorld.Log("ÒÆ¶¯×´Ì¬´íÎó") return if curPlayer.GetCanMove() != True: #GameWorld.Log("Íæ¼Ò²»¿ÉÍ£Ö¹") return return True #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Íæ¼ÒÄܹ»ÖØÖÃ×Ô¼ºµÄλÖà #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Íæ¼ÒÄܹ»ÖØÖÃ×Ô¼ºµÄλÖà def PlayerCanResetWorldPos(index, tick): GameWorld.GetPsycoFunc(__Func_PlayerCanResetWorldPos)(index, tick) return #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Íæ¼ÒÄܹ»ÖØÖÃ×Ô¼ºµÄλÖà #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Íæ¼ÒÄܹ»ÖØÖÃ×Ô¼ºµÄλÖà def __Func_PlayerCanResetWorldPos(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) PlayerControl.DoPlayerResetWorldPos(curPlayer, tick) return #--------------------------------------------------------------------- ##C++·â°ü´¥·¢, Çл»µØÍ¼Ê§°Ü·â°ü´¥·¢ #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks C++·â°ü´¥·¢, Çл»µØÍ¼Ê§°Ü·â°ü´¥·¢ def PlayerChangeMapFailCallback(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #´«ËÍʱ, Ëø¶¨Íæ¼Ò, ´«Ëͳɹ¦, ÔÚÄ¿±êµØÍ¼½âËø, ´«ËÍʧ°Ü, ÔÚ´«Ëͻص÷º¯ÊýPlayerChangeMapFailCallbackÖнâËø curPlayer.ExitEvent() NotifyChangeMapFail(curPlayer) return # ֪ͨÇл»µØÍ¼Ê§°Ü def NotifyChangeMapFail(curPlayer): curPlayer.SetVisible(True) sendPack = ChPyNetSendPack.tagMCChangeMapFail() sendPack.Clear() NetPackCommon.SendFakePack(curPlayer, sendPack) return #--------------------------------------------------------------------- #=============================================================================== # //01 04 ÔÚÏß»ØÓ¦#tagCOnlineReturn # tagCOnlineReturn * GettagCOnlineReturn(); # # class IPY_COnlineReturn # { # public: # # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //01 04 ÔÚÏß»ØÓ¦#tagCOnlineReturn #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //01 04 ÔÚÏß»ØÓ¦#tagCOnlineReturn def OnlineReply(index, tick): #Ŀǰ×öµ½RouteServerÖÐÈ¥ÁË # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # # lastOnlineReplyTick = curPlayer.GetLastOnlineReplyTick() # # #»ØÓ¦´ÎÊý+1 # curPlayer.SetLastOnlineReplyTick(tick) # curPlayer.SetOnlineReplyCount(curPlayer.GetOnlineReplyCount() + 1) # if lastOnlineReplyTick == 0: # GameWorld.Log("³õʼ»¯ÔÚÏß»ØÓ¦") # #GameWorld.Log("GetLastOnlineReplyTick %d"%curPlayer.GetLastOnlineReplyTick()) # return # # #GameWorld.Log("tick %d"%tick) # diffTick = tick - lastOnlineReplyTick - ChConfig.Def_PlayerOnLineReply_ClientReply # if diffTick < -ChConfig.Def_PlayerOnLineReply_ClientReply: # GameWorld.Log("ÔÚÏß»ØÓ¦¼ä¸ô´íÎó = %d"%diffTick) # curPlayer.Kick(IPY_GameWorld.disOnlineReplyError) # return # # ## GameWorld.Log(str(curPlayer.GetTotalOnlineReplyTick())) ## GameWorld.Log(str(diffTick)) # curPlayer.SetTotalOnlineReplyTick(curPlayer.GetTotalOnlineReplyTick() + diffTick) # # GameWorld.Log("ÔÚÏß»ØÓ¦´ÎÊý = %d ×Üʱ¼ä = %d"%(curPlayer.GetOnlineReplyCount(), curPlayer.GetTotalOnlineReplyTick())) return #--------------------------------------------------------------------- #=============================================================================== # //06 08 ÕÙ»½ÊÞÒÆ¶¯#tagCSummonMove # tagCSummonMove * GettagCSummonMove(); # # class IPY_CSummonMove # { # public: # # int GetSummonID(); # # int GetPosX(); # # int GetPosY(); # # int GetDestPosX(); # # int GetDestPosY(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //06 08 ÕÙ»½ÊÞÒÆ¶¯#tagCSummonMove #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //06 08 ÕÙ»½ÊÞÒÆ¶¯#tagCSummonMove def PlayerSummonMove(index, tick): #Âß¼­×ö·þÎñÆ÷¶Ë return #=============================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # sendPack = IPY_GameWorld.IPY_CSummonMove() # summonID = sendPack.GetSummonID() # posX = sendPack.GetPosX() # posY = sendPack.GetPosY() # destX = sendPack.GetDestPosX() # destY = sendPack.GetDestPosY() # #ÕÒµ½Õâ¸öÕÙ»½ÊÞ # summonNPC = curPlayer.FindSummonByID(summonID) # #ÎÞ·¨²éÕÒµ½Õâ¸öÕÙ»½ÊÞ # if summonNPC == None or summonNPC.GetHP() <= 0: # GameWorld.Log('ÎÞ·¨²éÕÒµ½Õâ¸öÕÙ»½ÊÞ summonID=%d'%summonID) # return # # if ChConfig.Def_ClientControlSummonNPCID.count(summonNPC.GetFunctionType()) == 0: # #Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ # #GameWorld.Log('Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ') # return # # # #Ä¿µÄµØÊÇ·ñ¿ÉÒÔµ½´ï # curMap = GameWorld.GetMap() # if curMap.CanMove(destX, destY) != True: # #µØ·½²»¿É×ß, ÖØÖÃÍæ¼ÒµÄλÖà # GameWorld.Log("ÕÙ»½Ê޵ط½²»¿É×ß, destX=%s, destY=%s"%(destX, destY)) # return # #=============================================================================== # # curMap = GameWorld.GetMap() # # if CheckMovePos(curPlayer, summonNPC,curMap, posX, posY, destX, destY, sendPlayerMoveFail = False) != True : # # #·â°üÐÅÏ¢´íÎó # # return # #=============================================================================== # # # #ÒÆ¶¯µã×ø±ê # dist = GameWorld.GetDist(posX, posY, destX, destY) # if dist > 20 : # #Ë²ÒÆ # GameWorld.Log('ÕÙ»½ÊÞË²ÒÆsummonID=%d'%summonID) # summonNPC.ResetPos(destX, destY) # return # # #Õý³£Òƶ¯ # summonNPC.Move(destX, destY) # return #=============================================================================== #--------------------------------------------------------------------- #=============================================================================== # //06 09 ÕÙ»½ÊÞ¹¥»÷#tagCSummonAttack # tagCSummonAttack * GettagCSummonAttack(); # # class IPY_CSummonAttack # { # public: # # int GetSummonID(); # # int GetObjType(); # # int GetObjID(); # # int GetPosX(); # # int GetPosY(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //06 09 ÕÙ»½ÊÞ¹¥»÷#tagCSummonAttack #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //06 09 ÕÙ»½ÊÞ¹¥»÷#tagCSummonAttack def PlayerSummonAttack(index, tick): #Âß¼­×ö·þÎñÆ÷¶Ë return #=============================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # sendPack = IPY_GameWorld.IPY_CSummonAttack() # summonID = sendPack.GetSummonID() # posX = sendPack.GetPosX() # posY = sendPack.GetPosY() # attackType = sendPack.GetObjType() # attackID = sendPack.GetObjID() # # #ÕÒµ½Õâ¸öÕÙ»½ÊÞ # summonNPC = curPlayer.FindSummonByID(summonID) # #ÎÞ·¨²éÕÒµ½Õâ¸öÕÙ»½ÊÞ # if summonNPC == None or summonNPC.GetHP() <= 0: # GameWorld.Log('ÕÒ²»µ½ÕÙ»½ÊÞ') # return # # if ChConfig.Def_ClientControlSummonNPCID.count(summonNPC.GetFunctionType()) == 0: # #Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ # GameWorld.Log('Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ') # return # # #ÅжϹ«¹²CD # if tick - summonNPC.GetAttackTick() < summonNPC.GetAtkInterval(): # GameWorld.Log("¹¥»÷¼ä¸ôûÓе½") # return # # if PlayerControl.PlayerRefreshPos(curPlayer, summonNPC, posX, posY) != True: # #µ±Ç°Î»ÖÃË¢ÐÂʧ°Ü # GameWorld.Log("ÕÙ»½ÊÞ¹¥»÷µ±Ç°Î»ÖÃË¢ÐÂʧ°Ü") # return # # #±»¹¥»÷Õß # attackTag = None # if attackType == IPY_GameWorld.gotPlayer: # attackTag = GameWorld.GetPlayerManager().FindPlayerByID(attackID) # elif attackType == IPY_GameWorld.gotNPC: # attackTag = GameWorld.FindNPCByID(attackID) # else: # #·â°üÀàÐÍ´íÎó,»ò¶ÔÏóÎÞ·¨¹¥»÷ # GameWorld.Log("ÕÙ»½ÊÞ·â°ü¹¥»÷ÀàÐÍ´íÎó attackType = %s"%(attackType)) # return # # #ÎÞ·¨²éÕÒ¹¥»÷Ä¿±ê # if attackTag == None : # GameWorld.Log("ÎÞ·¨²éÕÒ¹¥»÷Ä¿±ê,attackID = %s"%(attackID)) # return # # if not BaseAttack.GetCanAttack(summonNPC, attackTag, None, tick): # return # # if not __CheckPlayerSummonAttack(curPlayer , summonNPC , attackTag , tick): # return # # #ÆÕͨ¹¥»÷ # BaseAttack.Attack(summonNPC,attackTag, None, 0, 1,tick) # # return #=============================================================================== #=============================================================================== # def __CheckPlayerSummonAttack(curPlayer , summonNPC , attackTag , tick): # #1. Èç¹ûÖ÷ÈËÔÚÕ½¶·×´Ì¬, ²¢ÇÒ¹¥»÷¶ÔÏóΪ·â°üÖеĹ¥»÷¶ÔÏó, ·µ»ØTrue # #Õâ¸öÂß¼­,½«»áµ¼ÖÂ,Èç¹ûÍæ¼ÒÍ£Ö¹¹¥»÷ÊØÎÀ,ÄÇôÕÙ»½ÊÞ½«²»¹¥»÷ÊØÎÀ # if curPlayer.IsBattleState() : # curOwnerActionObj = curPlayer.GetActionObj() # if curOwnerActionObj != None and GameWorld.IsSameObj(curOwnerActionObj, attackTag): # return True # # #2. Åж¨¹ØÏµ # #ÅжÏÊÇ·ñµÐ¶Ô¹ØÏµ # relation = BaseAttack.GetTagRelation(summonNPC, attackTag, None, tick) # # if relation[0] != ChConfig.Type_Relation_Enemy : # GameWorld.Log("Attack Fail : Message = %s"%relation[1]) # AttackCommon.PlayerAttackFailSysMessanage(curPlayer,relation[1]) # return False # # return True #=============================================================================== #--------------------------------------------------------------------- #=============================================================================== # //06 0A ÕÙ»½ÊÞÍ£Ö¹#tagCSummonStop # tagCSummonStop * GettagCSummonStop(); # # class IPY_CSummonStop # { # public: # # int GetSummonID(); # # int GetPosX(); # # int GetPosY(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //06 0A ÕÙ»½ÊÞÍ£Ö¹#tagCSummonStop #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //06 0A ÕÙ»½ÊÞÍ£Ö¹#tagCSummonStop def PlayerSummonStop(index , tick): #Âß¼­×ö·þÎñÆ÷¶Ë return #=============================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # sendPack = IPY_GameWorld.IPY_CSummonStop() # summonID = sendPack.GetSummonID() # posX = sendPack.GetPosX() # posY = sendPack.GetPosY() # # #ÕÒµ½Õâ¸öÕÙ»½ÊÞ # summonNPC = curPlayer.FindSummonByID(summonID) # # #ÎÞ·¨²éÕÒµ½Õâ¸öÕÙ»½ÊÞ # if summonNPC == None or summonNPC.GetHP() <= 0: # return # # if ChConfig.Def_ClientControlSummonNPCID.count(summonNPC.GetFunctionType()) == 0: # #Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ # #GameWorld.Log('Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ') # return # # if PlayerControl.PlayerRefreshPos(curPlayer, summonNPC, posX, posY) != True: # #µ±Ç°Î»ÖÃË¢ÐÂʧ°Ü # GameWorld.Log("ÕÙ»½ÊÞ¹¥»÷µ±Ç°Î»ÖÃË¢ÐÂʧ°Ü") # return # # summonNPC.StopMove() # # return #=============================================================================== #--------------------------------------------------------------------- #=============================================================================== # //03 0F ÊÇ·ñÒþ²ØÃæ¾ß#tagCHideMask # tagCHideMask * GettagCHideMask(); # # class IPY_CHideMask # { # public: # //ÊÇ·ñÒþ²Ø # int GetIsHide(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 0F ÊÇ·ñÒþ²ØÃæ¾ß#tagCHideMask #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0F ÊÇ·ñÒþ²ØÃæ¾ß#tagCHideMask def HideMask(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CHideMask() isHide = sendPack.GetIsHide() if isHide != 0 and isHide != 1: GameWorld.Log("HideMask -> ·â°üÀàÐÍ´íÎóisHide = %s" % (isHide) , curPlayer.GetPlayerID()) return if curPlayer.GetIsHideMask() == isHide: return curPlayer.SetIsHideMask(isHide) return #--------------------------------------------------------------------- #=============================================================================== # //03 10 Í˳ö¸±±¾#tagCExitFB # tagCExitFB * GettagCExitFB(); # # class IPY_CExitFB # { # public: # //ÎÞÒâÒå # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 10 Í˳ö¸±±¾#tagCExitFB #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 10 Í˳ö¸±±¾#tagCExitFB def ExitFB(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) __Func_ExitFB(curPlayer, tick) return ##¿Í»§¶Ë·â°üÏìÓ¦ //03 10 Í˳ö¸±±¾#tagCExitFB #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 10 Í˳ö¸±±¾#tagCExitFB def __Func_ExitFB(curPlayer, tick): if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull: return GameWorld.Log('Íæ¼Ò = %s , Ö÷¶¯À뿪¸±±¾' % (curPlayer.GetName()) , curPlayer.GetID()) if not FBLogic.CanPlayerLeaveFB(curPlayer): return #Íæ¼ÒÖ÷¶¯Í˳öFB,ÏÈ´¦ÀíFBÏà¹ØÐÅÏ¢£¬ÔÙÈÃÍæ¼ÒÍ˳ö FBLogic.DoPlayerLeaveFB(curPlayer, tick) #Íæ¼ÒÖ÷¶¯À뿪¸±±¾ PlayerControl.PlayerLeaveFB(curPlayer) return #--------------------------------------------------------------------- #=============================================================================== # //01 0B Çл»·ÖÁ÷#tagCChangeLine # tagCChangeLine * GettagCChangeLine(); # # class IPY_CChangeLine # { # public: # //»»µ½¼¸Ïß # int GetLine(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //01 0B Çл»·ÖÁ÷#tagCChangeLine #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //01 0B Çл»·ÖÁ÷#tagCChangeLine def ChangeLine(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CChangeLine() changLineID = sendPack.GetLine() if changLineID < 0: GameWorld.ErrLog("ChangeLine -> ·â°ü´íÎó, ÎÞ´ËÏß· = %s" % (changLineID), curPlayer.GetID()) return mapID = curPlayer.GetMapID() activityLineID = 0 # »î¶¯Ïß, ĬÈÏ1Ïß activityMapLineDict = IpyGameDataPY.GetFuncEvalCfg("MapLine", 2, {}) if mapID in activityMapLineDict: activityLineID = max(0, activityMapLineDict[mapID] - 1) mapLineDict = IpyGameDataPY.GetFuncEvalCfg("MapLine", 1) if changLineID != activityLineID and mapID in mapLineDict and changLineID >= mapLineDict[mapID]: GameWorld.ErrLog("¸ÃµØÍ¼Ã»Óпª·Å´ËÏß·£¬ÎÞ·¨ÊÖ¶¯Çл»£¡mapID=%s,changLineID=%s,maxLine=%s" % (mapID, changLineID, mapLineDict[mapID]), curPlayer.GetID()) return #¼ì²éÊÇ·ñ¿ÉÒÔ»»Ïß if not __CheckCanChangLine(curPlayer, tick): return #¿ªÊ¼»»Ïß PlayerControl.PlayerChangeLine(curPlayer, changLineID) return #--------------------------------------------------------------------- ##Çл»·ÖÁ÷¼ì²âº¯Êý #@param curPlayer Íæ¼ÒʵÀý #@param tick ʱ¼ä´Á #@return ²¼¶ûÖµ #@remarks Çл»·ÖÁ÷¼ì²âº¯Êý def __CheckCanChangLine(curPlayer, tick): #---¼ä¸ô¼ì²é--- if tick - curPlayer.GetLoginTick() < ChConfig.Def_PlayerChangLine_Tick: #PK_liubo_500807 ¶Ô²»Æð£¬ÄúÇл»ÓÎÏ·Ïß·¹ýÓÚÆµ·±£¬ÇëÉÔºóÖØÊÔ! 256 - PlayerControl.NotifyCode(curPlayer, "PK_liubo_500807") #GameWorld.Log("µÇ¼¼ä¸ôСÓÚ%s,ÎÞ·¨»»Ïß"%ChConfig.Def_PlayerChangLine_Tick) return False #---״̬¼ì²é--- playerAction = curPlayer.GetPlayerAction() if playerAction == IPY_GameWorld.paSit: PlayerControl.DoPlayerStand(curPlayer) elif playerAction not in ChConfig.Def_PlayerChangLine_State: #GeRen_liubo_71563 ¶Ô²»Æð£¬Äú´¦ÓÚʼþ״̬ÖУ¬ÎÞ·¨Çл»Ïß·! 256 - PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_71563") #GameWorld.Log("·Ç¿ÕÏÐ״̬ÎÞ·¨»»Ïß") return False #---Õ½¶·ÖÐ--- if PlayerControl.IsPlayerInFight(curPlayer): #GeRen_liubo_850801 ¶Ô²»Æð£¬Äú´¦ÓÚÕ½¶·×´Ì¬ÖУ¬ÎÞ·¨Çл»Ïß·! 256 - PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_850801") #GameWorld.Log("Õ½¶·ÖÐÎÞ·¨»»Ïß") return False #---ÓÐïÚ³µ--- if curPlayer.GetTruck() != None: #GeRen_liubo_760310 ¶Ô²»Æð£¬Äú´¦ÓÚѺÔË״̬ÖУ¬ÎÞ·¨Çл»Ïß·! 256 - PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_760310") return False if curPlayer.GetPlayerVehicle() not in ChConfig.Def_PlayerChangLine_Vehicle: #GeRen_liubo_760310 ¶Ô²»Æð£¬Äú´¦ÓÚѺÔË״̬ÖУ¬ÎÞ·¨Çл»Ïß·! 256 - PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_760310") return False return True #--------------------------------------------------------------------- #=============================================================================== # //01 0C µÃµ½µ±Ç°·þÎñÆ÷Ïß·״̬#tagCGetLineState # tagCGetLineState * GettagCGetLineState(); # # class IPY_CGetLineState # { # public: # //ÎÞÒâÒå # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //01 0C µÃµ½µ±Ç°·þÎñÆ÷Ïß·״̬#tagCGetLineState #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //01 0C µÃµ½µ±Ç°·þÎñÆ÷Ïß·״̬#tagCGetLineState def LineState(index, tick): #¸ÄΪGameServerͬ²½Òª²éѯµÄµØÍ¼ID # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # #1. Ö»ÓÐÆÕͨµØÍ¼²é¿´Ïß· # gameMap = GameWorld.GetMap() # # if gameMap.GetMapFBType() != IPY_GameWorld.fbtNull: # #Line_lose_Examine `o¶Ô²»Æð£¬Ä¿Ç°¸ÃµØÍ¼Ã»Óпª·Å·ÖÁ÷,ÎÞ·¨²é¿´Ïß·״̬! # #PlayerControl.NotifyCode(curPlayer, "Line_lose_Examine") # return # # if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_LineState) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_LineState]: # #Line_Examinelose_Frequent `o¶Ô²»Æð£¬¶Ô²»Æð£¬Äú²é¿´ÓÎÏ·Ïß·״̬¹ýÓÚÆµ·±£¬ÇëÉÔºóÖØÊÔ! 256 # #PlayerControl.NotifyCode(curPlayer, "Line_Examinelose_Frequent") # return # # curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_LineState, tick) # #GameWorld.Log("²é¿´·ÖÁ÷³É¹¦" , curPlayer.GetPlayerID()) # curPlayer.GameServer_LineState() return ##»ñÈ¡ËÀÍöÀäȴʱ¼ä #@param curPlayer Íæ¼ÒʵÀý #@param playerRebornType ¸´»îÀàÐÍ #@return ËÀÍöÀäȴʱ¼ä def GetRebronTime(curPlayer, playerRebornType): mapType = GameWorld.GetMap().GetMapFBType() # ¸±±¾µØÍ¼CD if mapType != IPY_GameWorld.fbtNull: fbRebornTimeDict = IpyGameDataPY.GetFuncEvalCfg('DuplicatesRebornTime', 1) curMapID = GameWorld.GetMap().GetMapID() if curMapID in fbRebornTimeDict: return fbRebornTimeDict[curMapID] return fbRebornTimeDict.get(0, 0) if playerRebornType in [ChConfig.rebornType_Health, ChConfig.rebornType_UseItem]: #Ô­µØ¸´»î¡¢µÀ¾ß¸´»î²»ÓÃCD return 0 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsAddReviveTired): findBuff = SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_ReviveTired)[0] if findBuff: if findBuff.GetSkill().GetSkillLV() == findBuff.GetSkill().GetSkillMaxLV(): return IpyGameDataPY.GetFuncEvalCfg('RebornArguments', 1)[1] return 0 # playerRebornTimeDict = ReadChConfig.GetEvalChConfig('PlayerRebornTime') # # curMapID = GameWorld.GetMap().GetMapID() # # #²»ÔÚÅä±íµÄµØÍ¼IDÖÐȡĬÈ쵀 # if curMapID not in playerRebornTimeDict.keys(): # curMapID = 0 # # rebronTimeByTypeDict = playerRebornTimeDict.get(curMapID, {}) # # if not rebronTimeByTypeDict: # GameWorld.ErrLog("GetRebronTime rebronTimeByTypeDict=%s,,curMapID=%s" % # (rebronTimeByTypeDict, curMapID)) # return 0 # # #¹«Ê½²ÎÊý # playerLV = curPlayer.GetLV() # playerDeadCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayerDeadCnt) # # rebornTime = int(eval(rebronTimeByTypeDict.get(playerRebornType, "0"))) # # return rebornTime ## ËÀÍöÀäȴʱ¼äÊÇ·ñÍêÁË #@param curPlayer Íæ¼ÒʵÀý #@param rebornTime ËÀÍöÀäȴʱ¼ä #@return boolean def CanRebornByTimeOver(curPlayer, rebornTime): #ºÁÃë playerDeadTimeTick = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_DeadTime) curGameWorldTick = int(time.time()) GameWorld.DebugLog("¸´»îÀäȴʱ¼ä=%s,passTime=%s"%(rebornTime, max(0, curGameWorldTick - playerDeadTimeTick))) return max(0, curGameWorldTick - playerDeadTimeTick) >= rebornTime #--------------------------------------------------------------------- ##×Ô¶¨Ò庯Êý, Íæ¼Ò¸´»î #@param curPlayer Íæ¼ÒʵÀý #@param playerRebornType ¸´»îÀàÐÍ #@param tick ʱ¼ä´Á #@param mapBornPlace ¸´»îλÖã¬Ä¬ÈÏ0ΪԭµØ #@return ·µ»ØÖµÎÞÒâÒå #@remarks ×Ô¶¨Ò庯Êý, Íæ¼Ò¸´»î def PlayerRebornByType(curPlayer, playerRebornType, tick, mapBornPlace=0): curPlayerID = curPlayer.GetID() curVipLv = curPlayer.GetVIPLv() gameMap = GameWorld.GetMap() #ÐèÒªÖ§¸¶µÄÒø×ÓÊýÁ¿ moneyPrice = 0 #¸´»î»Ö¸´ÑªÁ¿¡¢Ä§µÄÍò·Ö±È resetHpPercent = ChConfig.Def_MaxRateValue resetMpPercent = ChConfig.Def_MaxRateValue #¸´»îÀäȴʱ¼ä£¨Ã룩 rebornTime = GetRebronTime(curPlayer, playerRebornType) #Àäȴʱ¼äµ½ÁË if not CanRebornByTimeOver(curPlayer, rebornTime): PlayerControl.NotifyCode(curPlayer, 'RebornCD') return False isFBReborn = False #-----------------------------------------»Ø³Ç¸´»î(Çл»µØÍ¼)----------------------------------- if playerRebornType == ChConfig.rebornType_City: if FBLogic.OnPlayerReborn(): isFBReborn = True else: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsReBorn, 1) #=============================================================================== # #²»ÔÚÌØÊâµÄµØÍ¼ÖÐ,Íæ¼Ò¸±±¾Öи´»îÏà¹Ø # if not FBLogic.OnPlayerReborn(): # #Êä³öϵͳÌáʾ # __NotifyReBornToPlace( curPlayer ) #=============================================================================== #----------------------------------------------ÆäËû¸´»î(²»Çл»µØÍ¼)------------------------------------ #¼¼Äܸ´»î elif playerRebornType == ChConfig.rebornType_Skill: if not gameMap.GetSkillReborn(): return False reBornSkill = GameWorld.GetGameData().GetSkillBySkillID(ChConfig.Def_SkillID_SkillReBorn) #»Ö¸´ÑªÁ¿Íò·Ö±È resetHpPercent = reBornSkill.GetEffect(1).GetEffectValue(0) #»Ö¸´Ä§Íò·Ö±È resetMpPercent = reBornSkill.GetEffect(2).GetEffectValue(0) BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_SkillReBorn, tick) #Ô­µØ½¡¿µ¸´»î elif playerRebornType == ChConfig.rebornType_Health: #if not PlayerVip.GetVipCanOriginalReborn(curVipLv): # #vipµÈ¼¶ÏÞÖÆ # return if not gameMap.GetLocalReborn(): GameWorld.DebugLog(' µØÍ¼ÅäÖò»ÄÜÔ­µØ¸´»î') return False if not __HealthRebornPayMoney(curPlayer): return False #ʹÓõÀ¾ß(»¹ÑôÖä)¸´»î elif playerRebornType == ChConfig.rebornType_UseItem: if not gameMap.GetLocalReborn(): return False if not __RebornDelItem(curPlayer): return False # ¸±±¾¸´»î elif playerRebornType in [ChConfig.rebornType_FBGold, ChConfig.rebornType_FBUseItem]: isFBReborn = True freeBorn = FBLogic.DecFreeRebornCount(curPlayer) if not freeBorn: if not gameMap.GetLocalReborn(): return False if playerRebornType == ChConfig.rebornType_FBGold: #if not PlayerVip.GetVipCanOriginalReborn(curVipLv): # #vipµÈ¼¶ÏÞÖÆ # return False if not __HealthRebornPayMoney(curPlayer): return False elif playerRebornType == ChConfig.rebornType_FBUseItem: if not __RebornDelItem(curPlayer): return False elif playerRebornType == ChConfig.rebornType_MainCity: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsReBorn, 2) elif playerRebornType == ChConfig.rebornType_System: pass else: #·â°ü´íÎó # GameWorld.Log("ÖØÉú·â°üÀàÐÍ = %s´íÎó"%(playerRebornType), curPlayerID ) return False #֪ͨ¿Í»§¶ËÍæ¼Ò¸´»î³É¹¦ curPlayer.Reborn(playerRebornType) #Ö´ÐÐÍæ¼Ò¸±±¾¸´»î if isFBReborn: FBLogic.OnResetFBRebornPlacePos(curPlayer, mapBornPlace, tick) #¸´»î¼ÓÎÞµÐBuff SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer , ChConfig.Def_SkillID_LimitSuperBuff, tick) #¸´»îÆ£ÀÍBUff if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsAddReviveTired): findBuff = SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_ReviveTired)[0] if findBuff: buffSkillLV = findBuff.GetSkill().GetSkillLV() if findBuff.GetSkill().GetSkillMaxLV() != buffSkillLV: buffSkillLV = buffSkillLV + 1 else: buffSkillLV = 1 SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer , ChConfig.Def_SkillID_ReviveTired, tick, buffSkillLV) GameWorld.DebugLog(' ¸´»îÆ£ÀÍBUff buffSkillLV=%s'%(buffSkillLV)) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsAddReviveTired,0) #ÖØËãÊôÐÔ playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.RefreshAllState() #ÉèÖÃѪÁ¿ curPlayer.SetHP(curPlayer.GetMaxHP() * resetHpPercent / ChConfig.Def_MaxRateValue) curPlayer.SetMP(curPlayer.GetMaxMP() * resetMpPercent / ChConfig.Def_MaxRateValue) #Íæ¼Ò¸´»îºó¸±±¾´¦Àí FBLogic.OnPlayerRebornOver(curPlayer, playerRebornType) #Õϰ­µãÖÐÔ­µØ¸´»î, ´ò»ØÖØÉúµã if (playerRebornType == ChConfig.rebornType_City and not isFBReborn)\ or not GameWorld.GetMap().CanMove(curPlayer.GetPosX(), curPlayer.GetPosY()) \ or (playerRebornType == ChConfig.rebornType_MainCity and gameMap.GetRebornMapID() == curPlayer.GetMapID()): #Íæ¼ÒÇл»µ½ÖØÉúµã playerControl.SetToBornPlace() elif playerRebornType == ChConfig.rebornType_MainCity: #Ö±½ÓÈ¡dbÖÐÅäÖõĸ´»îµã PlayerControl.PlayerResetWorldPos(curPlayer, gameMap.GetRebornMapID(), gameMap.GetRebornMapX(), gameMap.GetRebornMapY(), False) #ÖØÐÂÕÙ»½³èÎï PlayerPet.AutoSummonPet(curPlayer) #¸´»î³É¹¦,ÖØÖÃ״̬ PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull) return True ##¸´»î¿Û³ýÔª±¦ #@param curPlayer Íæ¼ÒʵÀý #@return ÊÇ·ñ¿Û³ý³É¹¦ def __HealthRebornPayMoney(curPlayer): rebornCfg = IpyGameDataPY.GetFuncEvalCfg('RebornArguments', 1) moneyPrice = rebornCfg[2] #Òì³£ if not moneyPrice: return True costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, moneyPrice) if not costMoneyList: return False infoDict = {} for moneyType, moneyCnt in costMoneyList: if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_Revive, infoDict): return False GameWorld.Login_Interface_GoldRec(curPlayer , 0 , 0 , 'HealthReborn' , moneyType , moneyPrice) return True ##¸´»î¿Û³ýµÀ¾ß #@param curPlayer Íæ¼ÒʵÀý #@return ÊÇ·ñ¿Û³ý³É¹¦ def __RebornDelItem(curPlayer): rebornItem = ItemCommon.FindItemInPackByEffectEx(curPlayer, ChConfig.Def_Effect_Reborn) if not rebornItem: #GeRen_chenxin_143504 ¶Ô²»Æð,ÄúûÓÐXXX! #PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_143504", [ChConfig.Def_ItemID_Reborn]) return False #µ÷ÓÃͨÓýӿÚɾ³ýµÀ¾ß ItemCommon.DelItem(curPlayer, rebornItem, 1, True, "Reborn") return True #--------------------------------------------------------------------- #=============================================================================== # def __NotifyReBornToPlace( curPlayer ): # #ÆÕͨµØÍ¼ # if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull: # #Revival_Home Ìáʾ£ºÄú¿ÉÒÔÔÚ¸÷´óÖ÷³ÇµÄÔÓ»õµêÏû³ýÉíÉÏЯ´øµÄÐéÈõ״̬! 256 - # PlayerControl.NotifyCode( curPlayer, "Revival_Home" ) # #¸±±¾ÖÐ # elif not FBLogic.DoNotifyReBorn( curPlayer ): # #Êä³öĬÈÏÌáʾ # PlayerControl.NotifyCode( curPlayer, "Revival_Home" ) # # return #=============================================================================== ##¸±±¾½Ó¿Ú:Íæ¼Ò¸´»î #@param curPlayer Íæ¼ÒʵÀý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¸±±¾½Ó¿Ú:Íæ¼Ò¸´»î def PlayerReborn_InFB(curPlayer, rebornType, tick): mapType = GameWorld.GetMap().GetMapFBType() #²»ÔÚ¸±±¾ÖÐ if mapType == IPY_GameWorld.fbtNull: return FBLogic.DoFBOnReborn(curPlayer, rebornType, tick) return #--------------------------------------------------------------------- #=============================================================================== # //03 11 ʹÓöÍÔì¯#tagCUseMakeStove # tagCUseMakeStove * GettagCUseMakeStove(); # # class IPY_CUseMakeStove # { # public: # //ÎÞÒâÒå # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 11 ʹÓöÍÔì¯#tagCUseMakeStove #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 11 ʹÓöÍÔì¯#tagCUseMakeStove def PlayerUseMakeStove(index , tick): #=============================================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # # #¹¦ÄÜ¿ªÆôÅжϻ»³É # #GameFuncComm.GetFuncCanUse(curPlayer, funcID) # # #·Ç¿ÕÏÐ״̬ÎÞ·¨Ê¹Óà # if curPlayer.GetPlayerAction() not in ChConfig.Def_Player_DoEvent_State: # PlayerControl.NotifyCode(curPlayer, "Factory_Execution_Wrong") # return # # #ÒÆ¶¯Öв»Ö´Ðд˲Ù×÷ # if curPlayer.IsMoving(): # #PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_0") # return False # # #¿ªÊ¼¶ÍÔìʼþ # ItemCommon.DoLogic_UseStoveEvent(curPlayer) #=============================================================================================== return #--------------------------------------------------------------------- #=============================================================================== # //03 12 ²é¿´¼Ò×åÕ½ÅÅÆÚ#tagCGetFamilyWarTime # tagCGetFamilyWarTime * GettagCGetFamilyWarTime(); # # class IPY_CGetFamilyWarTime # { # public: # //ÎÞÒâÒå # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 12 ²é¿´¼Ò×åÕ½ÅÅÆÚ#tagCGetFamilyWarTime #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 12 ²é¿´¼Ò×åÕ½ÅÅÆÚ#tagCGetFamilyWarTime def QueryFamilyWarPlan(index, tick): #=================================================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # # if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_QueryFamilyWar, tick): # #²Ù×÷¹ýÓÚÆµ·± # return # # if curPlayer.GetFamilyID() == 0: # #ÎÞ¼Ò×å²»²éѯ # return # # #¿ªÊ¼²éѯ # curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_sqtFamilyWar, 0, '', '', 0) #=================================================================================================== return #------------------------------------------------------------------- #=============================================================================== # //03 13 ²éѯïÚ³µÎ»ÖÃ#tagCGetTruckPos # tagCGetTruckPos * GettagCGetTruckPos(); # # class IPY_CGetTruckPos # { # public: # //ÎÞÒâÒå # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 13 ²éѯïÚ³µÎ»ÖÃ#tagCGetTruckPos #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 13 ²éѯïÚ³µÎ»ÖÃ#tagCGetTruckPos def QueryTruckPos(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # GameWorld.Log('½øÈëïÚ³µ²éѯ ID:%s'%curPlayer.GetID()) if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_QueryTruckPos) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_QueryTruckPos]: #²éѯ¹ýÓÚÆµ·± PlayerControl.NotifyCode(curPlayer, "Old_hgg_31379") return curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_QueryTruckPos, tick) #¿ªÊ¼²éѯ curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_sqtTruck, curPlayer.GetTruckID(), 'TruckPos', '', 0) return #--------------------------------------------------------------------- #=============================================================================== # //03 14 ´«ËÍïÚ³µÎ»ÖÃ#tagCMoveToTruckPos # tagCMoveToTruckPos * GettagCMoveToTruckPos(); # # class IPY_CMoveToTruckPos # { # public: # //ÎÞÒâÒå # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 14 ´«ËÍïÚ³µÎ»ÖÃ#tagCMoveToTruckPos #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 14 ´«ËÍïÚ³µÎ»ÖÃ#tagCMoveToTruckPos def MoveToTruckPos(index, tick): #=============================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # # if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_MoveToTruckPos) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_MoveToTruckPos]: # #´«Ë͹ýÓÚÆµ·± # PlayerControl.NotifyCode(curPlayer, "Convey_Car_Frequently") # return # # curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_MoveToTruckPos, tick) # # #Åж¨Íæ¼Ò״̬ # if not PlayerControl.CheckTransState(curPlayer): # return # # #Õ½¶·×´Ì¬²»ÈÃÍæ¼Ò´«ËÍ # if curPlayer.IsBattleState(): # PlayerControl.NotifyCode(curPlayer, "CannotAtk09") # return # # #¿ªÊ¼´«ËÍ # curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_sqtTruck, curPlayer.GetTruckID(), 'MoveToTruck', '', 0) #=============================================================================== return #--------------------------------------------------------------------- #=============================================================================== # //03 15 ¿ªÊ¼Ô¶³Ì¼ø¶¨#tagCRemoteIdentify # tagCRemoteIdentify * GettagCRemoteIdentify(); # # class IPY_CRemoteIdentify # { # public: # //ÎÞÒâÒå # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 15 ¿ªÊ¼Ô¶³Ì¼ø¶¨#tagCRemoteIdentify #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 15 ¿ªÊ¼Ô¶³Ì¼ø¶¨#tagCRemoteIdentify def FarIdentify(index, tick): #¹Ø±Õ´Ë¹¦ÄÜ return #--------------------------------------------------------------------- #=============================================================================== # //03 16 µÃµ½¸±±¾×´Ì¬#tagCGetFBState # tagCGetFBState * GettagCGetFBState(); # # class IPY_CGetFBState # { # public: # //ÎÞÒâÒå # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦//03 16 µÃµ½¸±±¾×´Ì¬#tagCGetFBState #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦//03 16 µÃµ½¸±±¾×´Ì¬#tagCGetFBState def GetFBState(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_FBState) < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_FBState]: #²éѯ¹ýÓÚÆµ·± return curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_FBState, tick) if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull: #ÆÕͨµØÍ¼²»²éѯ return FBLogic.DoGetFBState(curPlayer , tick) return #--------------------------------------------------------------------- #=============================================================================== # //03 19 ¸±±¾°ïÖú½çÃæ#tagCFbHelp # tagCFbHelp * GettagCFbHelp(); # # class IPY_CFbHelp # { # public: # //ÎÞÒâÒå # int GetType(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 19 ¸±±¾°ïÖú½çÃæ#tagCFbHelp #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 19 ¸±±¾°ïÖú½çÃæ#tagCFbHelp #¸±±¾°ïÖú½çÃæ def FBHelp(index , tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not curPlayer.GetMapLoadOK(): #Íæ¼ÒδµÇ½³É¹¦¸±±¾²»´¦Àí return if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_FBHelp) < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_FBHelp]: #²éѯ¹ýÓÚÆµ·± return curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_FBHelp, tick) # if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull: # #ÆÕͨµØÍ¼²»²éѯ # return FBLogic.DoFBHelp(curPlayer , tick) return #--------------------------------------------------------------------- #--------------------------------------------------------------------- #=============================================================================== # //03 21 ½øÈ븱±¾»î¶¯#tagCEnterFbGameEvent # tagCEnterFbGameEvent * GettagCEnterFbGameEvent(); # # class IPY_CEnterFbGameEvent # { # public: # //µØÍ¼ID # int GetMapID(); # //ÏßID # int GetLineID(); # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 21 ½øÈ븱±¾»î¶¯#tagCEnterFbGameEvent #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 21 ½øÈ븱±¾»î¶¯#tagCEnterFbGameEvent def EnterFbGameEvent(index, tick): GameWorld.GetPsycoFunc(__Func_EnterFbGameEvent)(index, tick) return ##¿Í»§¶Ë·â°üÏìÓ¦ //03 21 ½øÈ븱±¾»î¶¯#tagCEnterFbGameEvent #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 21 ½øÈ븱±¾»î¶¯#tagCEnterFbGameEvent def __Func_EnterFbGameEvent(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) sendPack = IPY_GameWorld.IPY_CEnterFbGameEvent() #ÊÕ µØÍ¼ºÍÏß·ID mapID = sendPack.GetMapID() clientSendLineID = sendPack.GetLineID() PlayerControl.PlayerEnterFB(curPlayer, mapID, clientSendLineID) return #--------------------------------------------------------------------- #=============================================================================== #//07 24 ¶¨µã´«ËÍ#tagCDingDianTransport #tagHead Head; #BYTE ItemIndex; #WORD TransportIndex; ## ¶¨µã´«ËÍ # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def PointTransport(index, tick): #=============================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # # if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_WorldTransport, tick): # # #¼ä¸ôδµ½ # # return # sendPack = IPY_GameWorld.IPY_CDingDianTransport() # lineID = sendPack.GetItemIndex() #±¾ÏîÄ¿ÓÃÀ´Ö¸¶¨´«Ë͵ÄÄ¿±êÏß·, -1ΪĬÈÏ # sendPack_TransportIndex = sendPack.GetTransportIndex() #´«Ë͵ãË÷Òý # lineID = lineID if lineID > 0 else -1 # # if not PlayerControl.CheckPlayerTransport(curPlayer): # #Íæ¼Òµ±Ç°×´Ì¬²»¿É´«ËÍ # return # PointTransportList = ReadChConfig.GetEvalChConfig('PointTransport') # PointCount = len(PointTransportList) # #Ë÷Òý´íÎó # if sendPack_TransportIndex < 0 or sendPack_TransportIndex >= PointCount: # return # curPointDict = PointTransportList[sendPack_TransportIndex] # # mapID = curPointDict["MapID"] # lvLimit = curPointDict["LVLimit"] # posX = curPointDict["PosX"] # posY = curPointDict["PosY"] # money = curPointDict["Money"] # moneyType = curPointDict["MoneyType"] # # #Ö°ÒµÏÞÖÆ # if lvLimit > curPlayer.GetLV(): # #¶Ô²»Æð£¬¸Ã³¡¾°ÐèÒªXX¼¶²ÅÄܽøÈë! # PlayerControl.NotifyCode(curPlayer, "Carry_hwj35_0", [lvLimit]) # return # #½ðÇ®ÏÞÖÆ # if not PlayerControl.HaveMoneyEx(curPlayer, moneyType, money): # return # #Ä¿±êµØÍ¼Åжϣ¨´æÔÚ·ñ£¬µÐ¹ú£¬¸±±¾£© # if not PlayerControl.CheckTagCountry(curPlayer, mapID): # return # # #×ø±êµãÅÐ¶Ï # posX, posY = GetTransportPos(curPlayer, 0, mapID, posX, posY) # if (posX, posY) == (0, 0): # #04BBF813-7A30-47A8-927DE1ACCC4F378E Ä¿±êµãΪÕϰ­µã # PlayerControl.NotifyCode(curPlayer, "04BBF813-7A30-47A8-927DE1ACCC4F378E") # return # # if BeginTrans(curPlayer, mapID, posX, posY, lineID=lineID): # curPlayer.SetDict(ChConfig.Def_PlayerKey_TransMoney, money) # curPlayer.SetDict(ChConfig.Def_PlayerKey_TransMoneyType, moneyType) # curPlayer.SetDict(ChConfig.Def_PlayerKey_TransType, ChConfig.Def_Transport_Type_FixedPoint) # else: # #ûÓнø¶ÈÌõ£¬Ö±½Ó¿ÛÈ¡ # infoDict = {ChConfig.Def_Cost_Reason_SonKey:mapID} # PlayerControl.PayMoney(curPlayer, moneyType, money, ChConfig.Def_Cost_Transport, infoDict) # #=============================================================================== #PlayerControl.PlayerResetWorldPos(curPlayer, MapID, PosX, PosY, False) #PlayerControl.NotifyCode(curPlayer, "Map_Deliver_Succeed", [MapID]) return #=============================================================================== # # 04 04 ºÃÓÑ´«ËÍ #tagCFriendTransport # # # #struct tagCFriendTransport # #{ # # tagHead Head; # # DWORD FriendID; # # Byte ExtField1; # #}; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ 04 04 ºÃÓÑ´«ËÍ #tagCFriendTransport #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ 04 04 ºÃÓÑ´«ËÍ #tagCFriendTransport def FriendTransPort(index, tick): return # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # # if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_FlyToFriend, tick): # #¼ä¸ôδµ½ # return # # sendPack = IPY_GameWorld.IPY_CFriendTransport() # sendPack_FriendID = sendPack.GetFriendID() # sendPack_IsAutoBuy = sendPack.GetExtField1() # # if not curPlayer.FindFriend(sendPack_FriendID): # #È·ÈϺÃÓÑʧ°Ü # return # # if not PlayerControl.CheckPlayerTransport(curPlayer): # #Íæ¼Òµ±Ç°×´Ì¬²»¿É´«ËÍ # return # # type = ChConfig.Def_Transport_Type_Friend # if not TransportVipLvRestrict(curPlayer, type): # #vipµÈ¼¶ÏÞÖÆ # return # # transportPayDict = ReadChConfig.GetEvalChConfig('TransportPay') # payInfo = transportPayDict.get(type) # # if payInfo == None: # GameWorld.ErrLog("±íTransportPayÐÅÏ¢´íÎó ûÓжÔÓ¦ÀàÐÍ %s" % (type)) # return # # # #ÎïÆ·ID£¬ ÎïÆ·Ð§¹ûÖµ£¬ ¸¶·ÑÀàÐÍ£¬½ð¶î # itemID, itemEffectID, moneyType, money = payInfo # # #֪ͨÏû·Ñ·½Ê½ # sendPayType = ChConfig.Def_FriendTransPort_UseItem # #ʹÓõÀ¾ß´«ËÍ # useItem = ItemCommon.FindItemInPackByEffectEx(curPlayer, itemEffectID) # # #ûÓÐÎïÆ· # if useItem == None: # if sendPack_IsAutoBuy: # #ûÓÐÇ® # if not PlayerControl.HaveMoneyEx(curPlayer, moneyType, money): # return # # #½ðÇ®Ïû·Ñ # sendPayType = ChConfig.Def_FriendTransPort_UseMoney # else: # #ÎïÆ·²»×ã # PlayerControl.NotifyCode(curPlayer, "GeRen_pan_861048", [itemID]) # return # # sendMsg = '%s' % (sendPayType) # # #²éѯ²¢´«ËÍ # curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_sqtPlayer, sendPack_FriendID, # 'FlytoFriendByID', sendMsg, len(sendMsg)) #--------------------------------------------------------------------- #=============================================================================== #04 05 ÊÀ½ç´«ËÍtagCWorldTransfer # # struct tagCWorldTransfer # { # tagHead Head; # DWORD MapID; # WORD PosX; # WORD posY; # BYTE ExtField1; # }; #=============================================================================== ## ##¿Í»§¶Ë·â°üÏìÓ¦ 04 05 ÊÀ½ç´«ËÍtagCWorldTransfer #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ 04 05 ÊÀ½ç´«ËÍtagCWorldTransfer def WorldTransPort(index, tick): #---»ñÈ¡·â°üÐÅÏ¢--- packUseItem = IPY_GameWorld.IPY_CWorldTransfer() packTransportType = packUseItem.GetType() mapID = packUseItem.GetMapID() posX = packUseItem.GetPosX() posY = packUseItem.GetPosY() lineID = packUseItem.GetExtField1() curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) __Func_WorldTransPort(curPlayer, packTransportType, mapID, posX, posY, tick, lineID) return #// B0 05 ¿ªÊ¼ÊÀ½ç´«ËÍ #tagCMWorldTransfer # #struct tagCMWorldTransfer #{ # tagHead Head; # BYTE Type; # DWORD MapID; # BYTE LineID; # WORD PosX; # WORD PosY; # DWORD ExData1; //À©Õ¹×Ö¶Î1£¬¸÷¸öÏîÄ¿¸ù¾Ý×Ô¼ºµÄÐèÒª¾ö¶¨ÓÃ; #}; def PYWorldTransPort(index, clientPack, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) packTransportType = clientPack.Type mapID = clientPack.MapID lineID = clientPack.LineID posX = clientPack.PosX posY = clientPack.PosY exData1 = clientPack.ExData1 __Func_WorldTransPort(curPlayer, packTransportType, mapID, posX, posY, tick, lineID, exData1) return def __Func_WorldTransPort(curPlayer, packTransportType, mapID, posX, posY, tick, lineID=-1, exData1=0): if curPlayer.GetMapID() != mapID: #ÑéÖ¤¼ä¸ô if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_WorldTransport) < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_WorldTransport]: #ûµ½¼ä¸ô return curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_WorldTransport, tick) playerID = curPlayer.GetPlayerID() GameWorld.DebugLog("WorldTransPort packTransportType=%s,mapID=%s,lineID=%s,exData1=%s" % (packTransportType, mapID, lineID, exData1), playerID) lineID = -1 if lineID == 255 else lineID #ÊÀ½ç´«ËÍ·â°üÔÊÐíÀàÐÍ£¨ÊÀ½ç£¬´óµØÍ¼£¬ÈÎÎñ£© if packTransportType not in ChConfig.Def_PackType_TransportType.keys(): GameWorld.ErrLog('WorldTransPort packTransportType = %s, NoFind' % (packTransportType), playerID) return transportType = ChConfig.Def_PackType_TransportType.get(packTransportType) # ·þÎñ¶ËÔݲ»×öVIPµÈ¼¶´«ËÍÏÞÖÆ£¬Óɿͻ§¶Ë¿ØÖÆ # if not TransportVipLvRestrict(curPlayer, transportType): # return #¼ì²éÍæ¼Ò״̬ if not PlayerControl.CheckPlayerTransport(curPlayer): return #Ä¿±êµØÍ¼Åжϣ¨´æÔÚ·ñ£¬µÐ¹ú£¬¸±±¾£© if not PlayerControl.CheckTagCountry(curPlayer, mapID): return #×ø±êµãÅÐ¶Ï posX, posY = GetTransportPos(curPlayer, packTransportType, mapID, posX, posY) if (posX, posY) == (0, 0): #04BBF813-7A30-47A8-927DE1ACCC4F378E Ä¿±êµãΪÕϰ­µã PlayerControl.NotifyCode(curPlayer, "04BBF813-7A30-47A8-927DE1ACCC4F378E") return #=============================================================================== # isFreedomTransBuff = SkillCommon.GetPlayerBuffBySkillTypeID(curPlayer, ShareDefine.Def_FreedomTransBuffID) # if not PlayerControl.IsPlayerInFight(curPlayer): # # if (transportType == ChConfig.Def_Transport_Type_BigMap) or (not isFreedomTransBuff): # #´«ËÍÖ§¸¶´¦Àí # # if not PayForTransport(curPlayer, transportType, isAutoBuy): # return #=============================================================================== #ÊÇÈÎÎñ´«ËÍ£¬VIPµÈ¼¶²»¹»£¬ÇÒ´«ËÍ·û²»×㣬²»´¦Àí if transportType == ChConfig.Def_Transport_Type_Mission and \ not TransportVipLvRestrict(curPlayer, transportType) and \ not PayForTransport(curPlayer, transportType): return #¿ªÊ¼´«ËÍ curPlayer.SetDict(ChConfig.Def_PlayerKey_TransType, transportType) #curPlayer.SetDict(ChConfig.Def_PlayerKey_TransAutoBuyItem, isAutoBuy) BeginTrans(curPlayer, mapID, posX, posY, lineID=lineID, exData1=exData1) return ## ¿ªÊ¼´«ËÍ # @param curPlayer Íæ¼ÒʵÀý # @param mapID µØÍ¼ID # @param posX ×ø±êX # @param posY ×ø±êY # @param takeTruck ÊÇ·ñЯ´øïÚ³µ # @param lineID Ïß·ID -1´ú±íµ±Ç°Ïß # @param msg Çл»µØÍ¼Ð¯´øµÄÐÅÏ¢ # @param canLock ÊÇ·ñ¿ÉÒÔËø¶¨Íæ¼Ò(´«Ë͵㲻¿ÉËø¶¨, ÒòΪҪ¿çµØÍ¼Ñ°Â·) # @return: ÊÇ·ñÔÚÀ­½ø¶ÈÌõ def BeginTrans(curPlayer, mapID, posX, posY, takeTruck=False, lineID= -1, msg='', canLock=True, exData1=0): #=========================================================================== # if PlayerControl.IsPlayerInFight(curPlayer): # #¼Ç¼´«ËÍ×ø±ê, ÓÃÓÚ½ø¶ÈÌõ½áÊøºó´«ËÍ # curPlayer.SetDict(ChConfig.Def_PlayerKey_TransMapId, mapID) # curPlayer.SetDict(ChConfig.Def_PlayerKey_TransPosX, posX) # curPlayer.SetDict(ChConfig.Def_PlayerKey_TransPosY, posY) # # #Õ½¶·×´Ì¬ÖÐÀ­½ø¶ÈÌõ # PlayerControl.Sync_PrepareBegin(curPlayer, ChConfig.Def_TransTime, # ShareDefine.Def_PstTrans) # return True #=========================================================================== PlayerControl.PlayerResetWorldPos(curPlayer, mapID, posX, posY, takeTruck, lineID, msg, canLock, exData1) #PlayerControl.NotifyCode(curPlayer, "Map_Deliver_Succeed", [mapID]) return False ##È¡µÃÕýÈ·´«ËÍ×ø±ê #@param curPlayer Íæ¼ÒʵÀý #@param transportType ´«ËÍÀàÐÍ #@param transportMapID ·â°üµØÍ¼ID #@param posX ·â°üµØÍ¼posX #@param posY ·â°üµØÍ¼posY #@return ×ø±êµã #@remarks È¡µÃÕýÈ·´«ËÍ×ø±ê def GetTransportPos(curPlayer, transportType, transportMapID, transportPosX, transportPosY): #---ÊÀ½ç´«ËÍÂß¼­ÌØÊâ´¦Àí--- #=========================================================================== # if transportType == ShareDefine.Def_Transport_World: # cityPosDict = ReadChConfig.GetEvalChConfig('Def_List_City_Pos') # # posInfo = cityPosDict.get(transportMapID) # # if posInfo == None: # #ÎÞ·¨²éÕÒºÏÊʵÄ×ø±ê # return 0, 0 # # transportPosX, transportPosY = posInfo #=========================================================================== #---¹«ÓÃ×ø±êµã¼ì²âÂß¼­--- if curPlayer.GetMapID() == transportMapID: #±¾µØÍ¼ÐèÒªÑéÖ¤ÊÇ·ñÕϰ­µã if not GameWorld.GetMap().CanMove(transportPosX, transportPosY): transportPosX, transportPosY = GameMap.GetNearbyPosByDis(transportPosX, transportPosY, ChConfig.Def_RebornPos_Area_Range) return transportPosX, transportPosY ##´«ËÍÏûºÄ´¦Àí #@param curPlayer Íæ¼Ò #@param transportType ´«ËÍÀàÐÍ #@return BOOL Ö§¸¶ÊÇ·ñ³É¹¦ #@remarks ´«ËÍÏûºÄ´¦Àí def PayForTransport(curPlayer, transportType): itemID = IpyGameDataPY.GetFuncCfg('TransportPay') if not itemID: return True useCount = 1 # ÏûºÄÊýÁ¿ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(itemID, itemPack, useCount) if not hasEnough: #µÀ¾ß²»¹»Ä¬ÈÏ¿ÛÇ® costMoney = IpyGameDataPY.GetFuncCfg('TransportPay', 2) if not TransportPayMoney(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costMoney, transportType, ChConfig.GMTool_Offline_WorldTransfer): GameWorld.DebugLog(' ´«ËÍÏûºÄ´¦Àí ´«Ë͵À¾ß²»×ã itemID=%s, ǮҲ²»¹»costMoney=%s'%(itemID, costMoney)) return False else: ItemCommon.ReduceItem(curPlayer, itemPack, itemList, useCount, False) return True ## ´«ËÍvipµÈ¼¶ÏÞÖÆ # @param curPlayer Íæ¼ÒʵÀý # @param transportType ´«ËÍÀàÐÍ # @return ÊÇ·ñvipµÈ¼¶ÏÞÖÆ def TransportVipLvRestrict(curPlayer, transportType): #´óµØÍ¼±ê¼Ç´«ËͲ»ÄÜÌåÑéÎÞÏÞ·Ébuff¹¦ÄÜ if transportType != ChConfig.Def_Transport_Type_BigMap: if SkillCommon.GetPlayerBuffBySkillTypeID(curPlayer, ShareDefine.Def_FreedomTransBuffID): #ÓÐÎÞÏÞ·Ébuff return True return PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FreeTransport) #--------------------------------------------------------------------- ##´«Ë͸¶·Ñ¼Ç¼ #@param curPlayer Íæ¼ÒʵÀý #@param moneyType ¸¶·ÑÀàÐÍ #@param money ¼Û¸ñ #@param transportType ´«ËÍÀàÐÍ #@param noteMark ¼Ç¼ÀàÐÍ #@return ·µ»ØÖµÕæ, ¿Û·Ñ³É¹¦ #@remarks ´«Ë͸¶·Ñ¼Ç¼ def TransportPayMoney(curPlayer, moneyType, money, transportType, noteMark): moneyList = PlayerControl.HaveMoneyEx(curPlayer, moneyType, money) if moneyList == []: return False for moneyType, money in moneyList: if money > 0: PlayerControl.PayMoney(curPlayer, moneyType, money, ChConfig.Def_Cost_Transport, {"TransportType":transportType}) GameWorld.Login_Interface_GoldRec(curPlayer, transportType, 0, 'TransportType', moneyType, money) return True #//03 26 ÊÖ¶¯Éý¼¶#tagCUserLVUp #//////////////////////////////////////////////////////////////// # #class IPY_CUserLVUp #{ #private: # CUserLVUp * m_Instance; #public: # //³õʼ»¯ # IPY_CUserLVUp(); #---------------------------- ##¿Í»§¶Ë·â°üÏìÓ¦ //03 26 Íæ¼ÒÉý¼¶ÇëÇó#tagCUserLVUp #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ 03 26 Íæ¼ÒÉý¼¶ÇëÇó#tagCUserLVUp def PlayerLvUpRequest(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #---¿ªÊ¼Éý¼¶--- playerControl = PlayerControl.PlayerControl(curPlayer) #²ÎÊýÌîTrue±íʾÊÖ¶¯Éý¼¶ ÔÚÈËÎï´ïµ½20¼¶ÒÔºó»áµ÷ÓÃÒ»´ÎÈËÎï»áÉýÒ»¼¶ playerControl.PlayerLvUp(True) return #--------------------------------------------------------------------- #=============================================================================== # //03 2B Ë«±¶¾­Ñ鼤»î/Í£Ö¹/²éѯ#tagCDoubleExp # # struct tagCDoubleExp # { # tagHead Head; # BYTE Type; //1-¼¤»î;2-Í£Ö¹;3-²éѯ # # }; #=============================================================================== ##¿Í»§¶Ë·â°üÏìÓ¦ //03 2B Ë«±¶¾­Ñ鼤»î/Í£Ö¹/²éѯ#tagCDoubleExp #@param index Íæ¼ÒË÷Òý #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 2B Ë«±¶¾­Ñ鼤»î/Í£Ö¹/²éѯ#tagCDoubleExp def DoubleExpState(index, tick): return ## 03 31 ¸±±¾Íæ¼Ò¼¤»îÌØÊâ¼¼ÄÜ # @param index Íæ¼ÒË÷Òý # @param tick ʱ¼ä´Á # @return ÎÞ·µ»ØÖµ # @remarks ¸±±¾Íæ¼Ò¼¤»îÌØÊâ¼¼ÄÜ def UseFBSpecilSkill(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) fbSkillPack = IPY_GameWorld.IPY_CFBSpecilSkill() useType = fbSkillPack.GetType() useState = fbSkillPack.GetState() FBLogic.UseFBSpecilSkill(curPlayer, useType, useState, tick) #--------------------------------------------------------------------- #=============================================================================== #//A2 05 ÇëÇó¶Ò»»ÀëÏß¾­Ñé·â°ü#tagPyCMOfflineExpExchange #struct tagPyCMOfflineExpExchange #{ # tagHead Head; # BYTE Index; //¾­Ñé±¶ÂÊË÷Òý # DWORD ExchangeTime; //¶Ò»»Ê±¼ä #}; #=============================================================================== ##//A2 05 ÇëÇó¶Ò»»ÀëÏß¾­Ñé·â°ü#tagPyCMOfflineExpExchange #@param index Íæ¼ÒË÷Òý #@param curPackData ·â°ü½á¹¹Ìå #@param tick ʱ¼ä´Á #@return ·µ»ØÖµÎÞÒâÒå #@remarks ÀëÏß¾­Ñé¶Ò»» def PlayerExpExchange(index, curPackData, tick): # ¿ç·þ·þÎñÆ÷¹¦ÄÜÏÞÖÆ if GameWorld.IsMergeServer(): return #¶Ò»»¹«Ê½×Öµä OfflineExpChangeDict = ReadChConfig.GetEvalChConfig("OfflineSys_ExpChange") curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #ÊÕ°ü×Ö¶Î mulIndex = curPackData.Index # ¾­Ñé±¶ÂÊË÷Òý exchangeTime = curPackData.ExchangeTime #¶Ò»»Ê±¼ä£¨·ÖÖÓ£© recList = OfflineExpChangeDict.get(int(mulIndex)) # ¸ù¾ÝË÷Òý»ñÈ¡¼Ç¼ if not recList: # ÕÒ²»µ½¼Ç¼ GameWorld.ErrLog('ÀëÏß¾­Ñé¶Ò»»Ë÷Òý´íÎóindex=%s' % mulIndex) return #×îСvipµÈ¼¶ÏÞÖÆ minVIPLv = recList[0] #vipµÈ¼¶ VIPLv = curPlayer.GetVIPLv() #ҪʹÓõÄʱ¼ä useMinutes = exchangeTime #ÀëÏßÀÛ»ýʱ¼ä haveMinutes = curPlayer.GetOfflineMinutes() if VIPLv < minVIPLv: GameWorld.ErrLog("ÀëÏß¹Ò»ú·â°ü¶Ò»»¾­ÑéÒì³££¬Íæ¼ÒvipµÈ¼¶ %s, ÏÔʾµÄvipµÈ¼¶ %s £¬" % (VIPLv, minVIPLv)) return if useMinutes > haveMinutes : GameWorld.ErrLog("ÀëÏß¹Ò»ú·â°ü¶Ò»»¾­ÑéÒì³££¬¶Ò»»Ê±¼ä %s, ÀÛ»ýʱ¼ä %s £¬" % (useMinutes, haveMinutes)) return #²Î¿¼¾­Ñé rExp = PlayerControl.GetPlayerReExp(curPlayer) reLV = curPlayer.GetLV() #²Î¿¼µÈ¼¶ worldLvExpRate = PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) #ÊÀ½çµÈ¼¶¾­Ñé¼Ó³É #¾­Ñ鹫ʽ redeemExp = int(eval(recList[1])) #»õ±ÒÐÅÏ¢Áбí moneyInfoList = recList[2] #»õ±ÒÀàÐÍ moneyType = int(moneyInfoList[0]) #ÏûºÄµÄ»õ±Ò¹«Ê½ costMoney = int(eval(moneyInfoList[1])) playerControl = PlayerControl.PlayerControl(curPlayer) # #³¬¹ý¾­Ñé´¢´æÉÏÏÞ£¬²»Óè¶Ò»»¾­Ñé # if redeemExp + curPlayer.GetTotalExp() > ChConfig.Def_UpperLimit_DWord: # PlayerControl.NotifyCode(curPlayer, "ExpChange_lhs_31379") # return haveMoneyList = PlayerControl.HaveMoneyEx(curPlayer, moneyType, costMoney) if not haveMoneyList:#½ðÇ®²»×ã return #¿Û½ðÇ® for moneyType, moneyCnt in haveMoneyList: if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_OffLineExp, {"ChangeTime":useMinutes, "Index":mulIndex, ChConfig.Def_Cost_Reason_SonKey:mulIndex}): # ½ðÇ®²»×ã GameWorld.ErrLog('¸ßЧÁ·¹¦£¬£¬½ðÇ®²»×ã##PlayerControl=%s,,moneyCnt=%s' % (PlayerControl, moneyCnt)) return playerControl.AddExp(redeemExp) # ¼Ó¾­Ñé offlineTime = int(max(haveMinutes - useMinutes, 0)) # ¿ÛÀëÏßʱ¼ä curPlayer.SetOfflineMinutes(offlineTime) # ÉèÖÃÀëÏßʱ¼ä curPlayer.Syn_OfflineTimeQueryResult() # ֪ͨ¿Í·þ¶ËÀëÏßʱ¼ä return #------------------------------------------------------------------------------ ## //A0 09 ¹ºÂò´óµØÍ¼±ê¼Çµã# tagPyBuyMapSignPoint # @param index Íæ¼ÒË÷Òý # @param curPackData ·â°ü½á¹¹Ìå # @param tick ʱ¼ä´Á # @return None def BuyMapSignCount(index, curPackData, tick): # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # curVipLv = curPlayer.GetVIPLv() # # curMapsignCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayerMapSignCnt) # # #if curMapsignCnt >= min(PlayerVip.GetVipCanBuyTransportPointCnt(curVipLv), ChConfig.Def_Player_MapSignPointMaxCount): # # #ÒѾ­È«²¿¿ªÍ¨»òµ±Ç°vipµÈ¼¶Ö»ÄÜÂòÕâô¶à # # return # if curMapsignCnt >= ChConfig.Def_Player_MapSignPointMaxCount: # #ÒѾ­È«²¿¿ªÍ¨»òµ±Ç°vipµÈ¼¶Ö»ÄÜÂòÕâô¶à # return # # buyCountIndex = curMapsignCnt + 1 # buyMoneyCostDict = ReadChConfig.GetEvalChConfig("MapSignCountBuyMoney") # buyMoneyList = buyMoneyCostDict.get(buyCountIndex) # if buyMoneyList == None: # GameWorld.ErrLog("¹ºÂò´óµØÍ¼±êʶλÖà = %s ÔÚMapSignCountBuyMoney.txt±íÖÐÕÒ²»µ½¹ºÂò¼Û¸ñ" % buyCountIndex) # return # # buyMoney = buyMoneyList[0] # ½ðÇ®ÊýÁ¿ # buyMoneyType = buyMoneyList[1] # ½ðÇ®ÀàÐÍ # # #¿ÛÇ® # moneyList = PlayerControl.HaveMoneyEx(curPlayer, buyMoneyType, buyMoney) # if moneyList == []: # #½ðÇ®²»×ã # return # # for moneyType, moneyCount in moneyList: # PlayerControl.PayMoney(curPlayer, moneyType, moneyCount, 'BuyMapSignCount') # # curMapsignCnt = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PlayerMapSignCnt, buyCountIndex) # # #֪ͨ¿Í»§¶ËÊýÁ¿ # OnSendMapSignCnt(curPlayer) return ## ֪ͨ´óµØÍ¼±ê¼ÇÊýÁ¿ # @param curPlayer Íæ¼ÒʵÀý # @return None def OnSendMapSignCnt(curPlayer): # curMapsignCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayerMapSignCnt) # mapsignCnt = ChConfig.Def_Player_InitMapSignPointCount + curMapsignCnt # # mapSignPointCount = ChPyNetSendPack.tagPyMapSignPointCount() # mapSignPointCount.Count = mapsignCnt # NetPackCommon.SendFakePack(curPlayer, mapSignPointCount) return #//B0 24 ÁìÈ¡¼Ò×åÐüÉͽ±Àø #tagReceiveFamilyArrestAward # #struct tagReceiveFamilyArrestAward # #{ # tagHead Head; # DWORD ArrestID; //ÐüÉÍÈÎÎñID #}; ## ÁìÈ¡¼Ò×åÐüÉͽ±Àø # @param index: Íæ¼ÒË÷Òý # @param clientData: ·â°ü½á¹¹Ìå # @param tick: ʱ¼ä´Á # @return: None def ReceiveFamilyArrestAward(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) arrestID = clientData.ArrestID bit = ShareDefine.Def_ArrestOverState_BitDic.get(arrestID) if bit == None: #ûÓÐÕâ¸ö¼Ò×åÐüÉÍÈÎÎñ GameWorld.DebugLog("ûÓÐÕâ¸ö¼Ò×åÐüÉÍÈÎÎñ arrestID=%s" % arrestID) return receiveState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState) if receiveState & pow(2, bit): #¸ÃÈÎÎñ½±ÀøÒѾ­ÁìÈ¡ GameWorld.DebugLog("¸ÃÈÎÎñ½±ÀøÒѾ­ÁìÈ¡ arrestID=%s" % arrestID) return if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyArrestQueryState) == 1: #ÒѾ­ÔÚ²éѯÖÐ, ²»Öظ´²éѯ GameWorld.DebugLog("ÒѾ­ÔÚ²éѯÖÐ, ²»Öظ´²éѯ arrestID=%s" % arrestID) return sendMsg = '%s' % arrestID #ÏòGameServerÇëÇó¸ÃÐüÉÍÈÎÎñÊÇ·ñÒѾ­Íê³É curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_FamilyArrest, 0, 'FamilyArrestAward', sendMsg, len(sendMsg)) #ÉèÖÃ״̬²éѯÖÐ curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyArrestQueryState, 1) return #//B0 26 ÇëÇó¼Ò×åÐüÉͽ±ÀøÁìÈ¡Çé¿ö #tagQueryFamilyArrestAwardReceiveState # #struct tagQueryFamilyArrestAwardReceiveState # #{ # tagHead Head; #}; ## ÇëÇó¼Ò×åÐüÉͽ±ÀøÁìÈ¡Çé¿ö # @param index: Íæ¼ÒË÷Òý # @param clientData: ·â°ü½á¹¹Ìå # @param tick: ʱ¼ä´Á # @return: None def QueryFamilyArrestAwardReceiveState(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) Sync_FamilyArrestAwardReceiveState(curPlayer) return ## ֪ͨ¿Í»§¶Ë¼Ò×åÐüÉÍÈÎÎñ½±ÀøÁìÈ¡Çé¿ö # @param curPlayer: Íæ¼ÒʵÀý # @return: None def Sync_FamilyArrestAwardReceiveState(curPlayer): awardReceiveState = ChPyNetSendPack.tagFamilyArrestAwardReceiveState() awardReceiveState.Clear() state = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState) awardReceiveState.ReceiveState = state NetPackCommon.SendFakePack(curPlayer, awardReceiveState) return ## ²éѯÊÇ·ñ»¹ÔÚ¼Ò×åµÄÉêÇëÁбíÖÐ(²»ÔÚÏßʱ±»¾Ü¾øÁË) # @param curPlayer: Íæ¼ÒʵÀý # @return: None def QueryIsResFamily(curPlayer): familyIDList = [] for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt): familyID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID % index) if familyID == 0: continue familyIDList.append(familyID) #ÏòGameServerÇëÇóÊÇ·ñ»¹ÔڸüÒ×åÉêÇëÁбíÖÐ sendMsg = str(familyIDList) curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_RequestIsFamily, curPlayer.GetID(), 'RequestIsFamily', sendMsg, len(sendMsg)) return #=============================================================================== #// AF 02 ºÏ·þ»î¶¯½±Àø #tagCMMixCampaignAward # #struct tagCMMixCampaignAward # #{ # tagHead Head; # BYTE Type; //0-²éѯ£»1-ÁìÈ¡ # DWORD CampaignType; //½±ÀøÀàÐÍ # BYTE Index; //½±ÀøÎ»£¬ÁìȡʱÓà #}; #=============================================================================== ## ºÏ·þ»î¶¯½±Àø # @param index: Íæ¼ÒË÷Òý # @param clientData: ·â°ü½á¹¹Ìå # @param tick: ʱ¼ä´Á # @return: def GiveMixServerCampaignAward(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) campaignType = clientData.CampaignType queryType = clientData.Type awardIndex = clientData.Index # ½±ÀøÎ» GameWorld.DebugLog("GiveMixServerCampaignAward campaignType=%s,queryType=%s,awardIndex=%s" % (campaignType, queryType, awardIndex)) if queryType == ShareDefine.Def_MSCGameServerQuery_MailAward: GameWorld.DebugLog(" ¿Í»§¶Ë²»¿É·¢ÁìÈ¡ºÏ·þÓʼþ½±ÀøÀàÐÍ") return isMix = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer) if not isMix: GameWorld.ErrLog(" µ±Ç°·ÇºÏ·þ״̬£¡") return if campaignType not in ShareDefine.Def_MixCampaign_Type_List: GameWorld.ErrLog(" ºÏ·þ»î¶¯ÀàÐÍ´íÎócampaignType=%s error! not define" % campaignType) return # Èç¹ûÖ±½ÓÔÚMapServerÖд¦Àí£¬Ôò·µ»Ø if MixServerCampaign.DoMixServerCampaignOnMapServer(curPlayer, campaignType, queryType, awardIndex): return awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_AwardRecord \ % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign) awardState = GameWorld.GetDataByDigitPlace(awardRecord, awardIndex) if awardState == MixServerCampaign.Def_AwardState_Got: if queryType == ShareDefine.Def_MSCGameServerQuery_QueryAward: recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_RecordData \ % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign) MixServerCampaign.Sync_MixServerCampaignAward(curPlayer, campaignType, awardState, recordData) GameWorld.DebugLog(" ÒѾ­ÁìÈ¡¹ý¸Ã½±Àø...") return #Áì½±µÄÐèÒªµÈ´ýGameServer»Ø°üÒÔºó²Å´¦ÀíÏÂÒ»¸ö·â°ü if queryType != ShareDefine.Def_MSCGameServerQuery_QueryAward: if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_QueryMixServerAwardState) == 1: GameWorld.DebugLog(" ÒѾ­ÔÚ²éѯÖÐ...") return curPlayer.SetDict(ChConfig.Def_PlayerKey_QueryMixServerAwardState, 1) familyID = curPlayer.GetFamilyID() #[ÇëÇóÀàÐÍ, »î¶¯ÀàÐÍ, ÁìÈ¡Ë÷Òý, ¼Ò×åID] msgList = [queryType, campaignType, awardIndex, familyID] GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'MixServerCampaignAward', \ '%s' % (msgList), len(str(msgList))) GameWorld.DebugLog(" msgList=%s" % str(msgList)) return #=============================================================================== ## ÁìÈ¡½±Àø±í½±Àø # @param None None # @return None def ClientPlayerGetReward(index, clientData, tick): playerManager = GameWorld.GetPlayerManager() curPlayer = playerManager.GetPlayerByIndex(index) # ±³°ü¿Õ¼ä²»×ã if not ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem): PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [IPY_GameWorld.rptItem]) return rewardType = clientData.RewardType #֪ͨGameServerÁìÈ¡½±Àø resultName = str(rewardType) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'PlayerGetReward', resultName, len(resultName)) return ## //A5 04 Íæ¼ÒÁìÈ¡½±Àø # tagCMPlayerGetReward ## ÁìÈ¡½±Àø # @param None None # @return None def PlayerGetReward(index, clientData, tick): playerManager = GameWorld.GetPlayerManager() curPlayer = playerManager.GetPlayerByIndex(index) rewardType = clientData.RewardType # ½±ÀøÀàÐÍ dataEx = clientData.DataEx # ¸½¼ÓÐÅÏ¢ dataExStr = clientData.DataExStr # ¸½¼Ó×Ö·ûÐÅÏ¢ GameWorld.DebugLog("PlayerGetReward: rewardType=%s,dataEx=%s,dataExStr=%s" % (rewardType, dataEx, dataExStr)) # »îÔ¾¶È½±Àø if rewardType == ChConfig.Def_RewardType_Activity: PlayerActivity.GetActivityAward(curPlayer, dataEx) # ÏÉÃË»îÔ¾¶È½±Àø elif rewardType == ChConfig.Def_RewardType_FamilyActivity: PlayerFamily.GetFamilyActivityAward(curPlayer, dataEx) # ÏÉÃËÁªÈü¹Ú¾üÏÉÃËÿÈÕٺ»½±Àø elif rewardType == ChConfig.Def_RewardType_ChampionFamilyDailyReward: GameLogic_FamilyWar.GetChampionFamilyDailyReward(curPlayer) # ÏÉħ֮ÕùʤÀû³¡Êý½±Àø elif rewardType == ChConfig.Def_RewardType_XMZZWinCnt: GameLogic_XMZZ.GetXMZZWinPrize(curPlayer, dataEx) # ÏÉÃËÿÈÕ¸£Àû½±Àø elif rewardType == ChConfig.Def_RewardType_FamilyDayAward: PlayerFamily.GetFamilyDayAward(curPlayer) # Íæ¼ÒµÈ¼¶½±Àø elif rewardType == ChConfig.Def_RewardType_LVAward: PlayerLVAward.GetPlayerLVAward(curPlayer, dataEx) # Ïɱ¦Ñ°Ö÷½±Àø elif rewardType == ChConfig.Def_RewardType_XBXZ: PlayerMagicWeapon.OnGetXBXZAward(curPlayer, dataEx) # ÿÈÕÈÎÎñÐÞÐе㽱Àø elif rewardType == ChConfig.Def_RewardType_DayRealmPoint: PlayerActivity.GetRealmPointAward(curPlayer) # Ê׳äÀñ°ü½±Àø elif rewardType == ChConfig.Def_RewardType_GoldGiftFirst: PlayerGoldGift.GetPlayerGoldGiftFirst(curPlayer) # ÁìÈ¡·¨±¦Ö®»ê½±Àø elif rewardType == ChConfig.Def_RewardType_MWSoulAward: PlayerMagicWeapon.GetMWSoulAward(curPlayer, dataEx) # ÁìÈ¡¼«Æ·°×Äà elif rewardType == ChConfig.Def_RewardType_FreeGoods: PlayerFreeGoods.OnGetFreeGoods(curPlayer, dataEx) # ÁìÈ¡Ïû·Ñ·µÀû½±Àø elif rewardType == ChConfig.Def_RewardType_CostRebate: PlayerCostRebate.OnGetCostRebateAward(curPlayer, dataEx) # ÁìÈ¡boss¸´»î»î¶¯½±Àø elif rewardType == ChConfig.Def_RewardType_BossReborn: PlayerBossReborn.GetBossRebornActionAward(curPlayer, dataEx) # ÁìÈ¡ÏɽçÊ¢µä³äÖµ´óÀñ elif rewardType == ChConfig.Def_RewardType_FCRecharge: PlayerFairyCeremony.GetFCRechargeAward(curPlayer) # ÁìÈ¡ÏɽçÊ¢µäÈ«ÃñÀ´àË elif rewardType == ChConfig.Def_RewardType_FCParty: PlayerFairyCeremony.GetFCPartyAward(curPlayer, dataEx) # ÁìÈ¡·Ö°üÏÂÔØ½±Àø elif rewardType == ChConfig.Def_RewardType_DownLoad: GetDownloadAward(curPlayer, dataEx) # # # ³äÖµºÀÀñ½±Àø # elif rewardType == ShareDefine.Def_RewardType_GoldGift: # PlayerGoldGift.GetPlayerGoldGift(curPlayer, dataEx) # # # ÀÛ¼ÆÇ©µ½½±Àø # #elif rewardType == ShareDefine.Def_RewardType_DaySign: # # PlayerSignDay.GiveSignCntAward(curPlayer, dataEx) # # # ÌìÌìÊ׳佱Àø # elif rewardType == ShareDefine.Def_RewardType_DailyGold: # PlayerGoldGift.GetPlayerDailyGoldChargeGift(curPlayer) # # # µ¥ÈÕ³äÖµ¶àѡһÀñ°ü # elif rewardType == ShareDefine.Def_RewardType_SingleGoldGift: # giftLV = 0 # ĬÈϵÚÒ»µµ0 # if dataExStr: # try: # giftLV = int(dataExStr) # except: # GameWorld.ErrLog("µ¥ÈÕ³äÖµ¶àѡһÀñ°ü½±Àøµµ´íÎó£¡%s" % dataExStr) # PlayerGoldGift.GetSingleGoldGift(curPlayer, dataEx, giftLV, 0) # # # µ±ÈÕ³äÖµÎÞÏÞÁìÈ¡Àñ°ü # elif rewardType == ShareDefine.Def_RewardType_UnlimitedGoldGift: # PlayerGoldGift.GetSingleGoldGift(curPlayer, 0, 0, 1) # # # µÇ½ǩµ½½±Àø # #elif rewardType == ShareDefine.Def_RewardType_DayLoginSign: # # PlayerSignDay.GetDaySignAward(curPlayer, dataEx) # # # ¿ç·þPK½±Àø # elif rewardType == ShareDefine.Def_RewardType_MergePKAward: # PlayerMergePK.OnQueryMergePKAward(curPlayer, dataEx, GameWorld.ToIntDef(dataExStr), tick) # # # ÍõÕßÕù°ÔÈ«·þÈÙÒ«½±Àø # elif rewardType == ShareDefine.Def_RewardType_ServerHonour: # PlayerMergeKing.GetMergeKingAward_ServerHonour(curPlayer) # # # ÍõÕßÕù°Ô½ú¼¶ÅÅÃû½±Àø # elif rewardType == ShareDefine.Def_RewardType_MergeKingRank: # PlayerMergeKing.GetMergeKingAward_Rank(curPlayer) # # # ÍõÕßÕù°Ô¾º²Â»ý·Ö½±Àø # elif rewardType == ShareDefine.Def_RewardType_MergeKingSupport: # PlayerMergeKing.GetMergeKingAward_Support(curPlayer, dataEx, tick) # # # QQ³É³¤Àñ°ü½±Àø # elif rewardType in [ShareDefine.Def_RewardType_QQUpYellow, ShareDefine.Def_RewardType_QQUpBlue]: # PlayerQQ.GetQQUpReward(curPlayer, rewardType, dataEx) # # # QQÐÂÊÖÀñ°ü½±Àø # elif rewardType == ShareDefine.Def_RewardType_QQNewMan: # PlayerQQ.GetQQNewManAward(curPlayer, rewardType, dataEx) # # # QQÿÈÕÀñ°ü½±Àø # elif rewardType == ShareDefine.Def_RewardType_QQDayGift: # PlayerQQ.GetQQDayGift(curPlayer, rewardType, dataEx) # # # Qzone³É³¤Àñ°ü½±Àø # elif rewardType == ShareDefine.Def_RewardType_QzoneUp: # PlayerQQ.GetQzoneUpReward(curPlayer, rewardType, dataEx) # # # QzoneÐÂÊÖÀñ°ü½±Àø # elif rewardType == ShareDefine.Def_RewardType_QzoneNewMan: # PlayerQQ.GetQzoneNewManAward(curPlayer, rewardType, dataEx) # # # QzoneÿÈÕÀñ°ü½±Àø # elif rewardType == ShareDefine.Def_RewardType_QzoneDayGift: # PlayerQQ.GetQzoneDayGift(curPlayer, rewardType, dataEx) # # # Ïû·ÑVIPµÈ¼¶½±Àø # elif rewardType == ShareDefine.Def_RewardType_CostVIPLV: # PlayerCostVIP.GetCostVIPAward(curPlayer, dataEx) # # # Ïû·ÑVIP³É³¤½±Àø # elif rewardType == ShareDefine.Def_RewardType_CostVIPGrowUp: # PlayerCostVIP.GetVIPGrowUpAward(curPlayer, dataEx) # # תÉúÁì½± # elif rewardType == ShareDefine.Def_RewardType_Reincarnation: # PlayerReincarnation.GetReincarnationAward(curPlayer, dataEx) # # ¿ç·þbossÊ״βÎÓë½±Àø # elif rewardType == ShareDefine.Def_RewardType_MergeBossFirstJoinAward: # GameLogic_MergeBoss.OnGetMergeBossFirstJoinAward(curPlayer) # # ÐüÉÍÈÎÎñ»ý·Ö½±Àø # elif rewardType == ShareDefine.Def_RewardType_ArrestTaskAward: # PlayerArrestTask.OnGetArrestPointAward(curPlayer, dataEx) return ## ֪ͨ¸÷½±ÀøÁìÈ¡¼Ç¼ÐÅÏ¢ # @param curPlayer: Íæ¼ÒʵÀý # @param rewardType: ½±ÀøÀàÐÍ # @param rewardGetRecord: Áì½±¼Ç¼ # @return None def Sync_RewardGetRecordInfo(curPlayer, rewardType, rewardGetRecord): sendPack = ChPyNetSendPack.tagMCPlayerRewardGetRecord() sendPack.Clear() sendPack.RewardType = rewardType sendPack.RewardGetRecord = rewardGetRecord NetPackCommon.SendFakePack(curPlayer, sendPack) return ##A5 1A Íæ¼Ò×Ô¶¯Õ½¶·ÉèÖÃÐÅÏ¢´¢´æ#tagCMSaveAutoFightSetting # @param index, clientData, tick # @return None def OnSaveAutoFightSetting(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) settingDict = eval(clientData.Data) #×ֵ䱣´æ #×Ô¶¯Õ½¶·ÅäÖà #¼¼ÄÜÊý BasicSkillCount, AreaSkillCount, BuffSkillCount = ReadChConfig.GetEvalChConfig("AutoFightSetting") BasicSkillList = settingDict.get("BasicSkill",[0]*BasicSkillCount) Key = "BasicSkill" for ValueIndex, Value in enumerate(BasicSkillList): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AutoFightSetting%(Key, ValueIndex), Value) AreaSkillList = settingDict.get("AreaSkill",[0]*AreaSkillCount) Key = "AreaSkill" for ValueIndex, Value in enumerate(AreaSkillList): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AutoFightSetting%(Key, ValueIndex), Value) BuffSkillList = settingDict.get("BuffSkill",[0]*BuffSkillCount) Key = "BuffSkill" for ValueIndex, Value in enumerate(BuffSkillList): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AutoFightSetting%(Key, ValueIndex), Value) Key = "HPPackagePercent" Value = settingDict.get(Key,0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AutoFightSetting%(Key, 0), Value) return ## ֪ͨ¿Í»§¶Ë×Ô¶¯Õ½¶·ÅäÖà # @param curPlayer # @return None def Sync_AutoFightSetting(curPlayer): BasicSkillCount, AreaSkillCount, BuffSkillCount = ReadChConfig.GetEvalChConfig("AutoFightSetting") settingDict = {} Key = "BasicSkill" BasicSkillList = [] for ValueIndex in xrange(BasicSkillCount): Value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AutoFightSetting%(Key, ValueIndex), 0) BasicSkillList.append(Value) settingDict[Key] = BasicSkillList Key = "AreaSkill" AreaSkillList = [] for ValueIndex in xrange(AreaSkillCount): Value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AutoFightSetting%(Key, ValueIndex), 0) AreaSkillList.append(Value) settingDict[Key] = AreaSkillList Key = "BuffSkill" BuffSkillList = [] for ValueIndex in xrange(BuffSkillCount): Value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AutoFightSetting%(Key, ValueIndex), 0) BuffSkillList.append(Value) settingDict[Key] = BuffSkillList Key = "HPPackagePercent" Value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AutoFightSetting%(Key, 0), 0) settingDict[Key] = Value #½«ÉèÖÃÄÚÈÝ֪ͨµ½¿Í»§¶Ë sendPack = ChPyNetSendPack.tagMCAutoFightSetting() sendPack.Clear() sendPack.Data = "%s"%settingDict sendPack.Size = len(sendPack.Data) NetPackCommon.SendFakePack(curPlayer, sendPack) return ## bossÉËѪÁбí·â°ü²éѯ # @param curPlayer # @return None def OnQueryBossHurtList(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not curPlayer: return BossHurtMng.OnQueryBossHurtList(curPlayer, clientData) return ## µØÍ¼NPCÐÅÏ¢²éѯ·â°ü # @param curPlayer # @return None def OnQueryMapNPCInfo(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not curPlayer: return # ²éѯ¼ä¸ô¿ØÖÆ if not clientData.IsNoTimeLimit: tickType = ChConfig.TYPE_Player_Tick_QueryMapNPCInfo if tick - curPlayer.GetTickByType(tickType) <= ChConfig.TYPE_Player_Tick_Time[tickType]: GameWorld.DebugLog("OnQueryMapNPCInfo ²éѯ¹ýÓÚÆµ·±£¡") return curPlayer.SetTickByType(tickType, tick) tagMapID = clientData.MapID tagLineID = clientData.LineID queryNPCStr = clientData.NPCIDList npcIDList = [] if queryNPCStr: try: npcIDList = eval(clientData.NPCIDList) except BaseException: GameWorld.ErrLog("OnQueryMapNPCInfo, npcIDList=%s" % clientData.NPCIDList) return if not isinstance(npcIDList, list): GameWorld.ErrLog("OnQueryMapNPCInfo, npcIDList=%s is not list£¡" % str(npcIDList)) return GameWorld.DebugLog("OnQueryMapNPCInfo tagMapID=%s,tagLineID=%s,npcIDList=%s" % (tagMapID, tagLineID, str(npcIDList))) curMapID = GameWorld.GetMap().GetMapID() # Èç¹ûÊÇͬÕŵØÍ¼£¬Ö±½Ó²éѯ֪ͨ if curMapID == tagMapID: npcInfoDict = NPCCommon.GetNPCInfo(npcIDList, tick) gameWorld = IPY_GameWorld.IPY_GameWorld(tagLineID) playerManager = gameWorld.GetMapCopyPlayerManagerByFbIndex(tagLineID) playerCnt = 0 if playerManager: playerCnt = playerManager.GetPlayerCount() GameWorld.DebugLog(" ͬµØÍ¼²éѯcurMapID=%s,tagLineID=%s,playerCnt=%s,npcInfoDict=%s" % (curMapID, tagLineID, playerCnt, str(npcInfoDict))) NPCCommon.SyncNPCInfo(curPlayer, tagMapID, playerCnt, npcInfoDict) else: # ÇëÇóGameServerÄ¿±êµØÍ¼NPCÐÅÏ¢ sendMsg = "%s" % str([tagMapID, tagLineID, npcIDList]) curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_NPCInfo, 0, 'NPCInfo', sendMsg, len(sendMsg)) return ## µØÍ¼NPCÊýÁ¿²éѯ·â°ü A2 27 ²éѯµØÍ¼NPCÊýÁ¿ÐÅÏ¢ #tagCMQueryNPCCntInfo # @param curPlayer # @return None def OnQueryMapNPCCntInfo(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if not curPlayer: return # ²éѯ¼ä¸ô¿ØÖÆ if not clientData.IsNoTimeLimit: if not GameWorld.CheckPlayerTick(curPlayer, ChConfig.TYPE_Player_Tick_QueryMapNPCInfo, tick): GameWorld.DebugLog("OnQueryMapNPCCntInfo ²éѯ¹ýÓÚÆµ·±£¡") return tagMapID = clientData.MapID tagLineID = clientData.LineID queryNPCStr = clientData.NPCIDList npcIDList = [] if queryNPCStr: try: npcIDList = eval(clientData.NPCIDList) except BaseException: GameWorld.ErrLog("OnQueryMapNPCCntInfo, npcIDList=%s" % clientData.NPCIDList) return if not isinstance(npcIDList, list): GameWorld.ErrLog("OnQueryMapNPCCntInfo, npcIDList=%s is not list£¡" % str(npcIDList)) return GameWorld.DebugLog("OnQueryMapNPCCntInfo tagMapID=%s,tagLineID=%s,npcIDList=%s" % (tagMapID, tagLineID, str(npcIDList))) curMapID = GameWorld.GetMap().GetMapID() # Èç¹ûÊÇͬÕŵØÍ¼£¬Ö±½Ó²éѯ֪ͨ if curMapID == tagMapID: npcInfoDict = NPCCommon.GetNPCCntInfo(npcIDList, tick) GameWorld.DebugLog(" ͬµØÍ¼²éѯcurMapID=%s,tagLineID=%s,npcInfoDict=%s" % (curMapID, tagLineID, str(npcInfoDict))) NPCCommon.SyncNPCCntInfo(curPlayer, tagMapID, npcInfoDict) else: # ÇëÇóGameServerÄ¿±êµØÍ¼NPCÐÅÏ¢ sendMsg = "%s" % str([tagMapID, tagLineID, npcIDList]) curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_NPCCnt, 0, 'NPCCnt', sendMsg, len(sendMsg)) return ## ¿ç·þÈü±¨Ãû״̬ # @param index Íæ¼ÒË÷Òý # @param tick µ±Ç°Ê±¼ä # @return None def SendRegisterState(curPlayer, state): resultPack = ChPyNetSendPack.tagMergeWarRegisterState() resultPack.Clear() resultPack.RegisterState = state NetPackCommon.SendFakePack(curPlayer, resultPack) return # ¸ÄΪ¿Í»§¶ËÖ÷¶¯ÇëÇótick A1 02 def QueryWorldTick(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) curPlayer.Sync_ClientTick() return ## ͬ²½Ê±¼ä # @param curPlayer # @param tick ʱ¼ä´Á # @return None def Sync_PyServerDataTimeToClient(curPlayer): # ·þÎñÆ÷ʱ¼ä serverTime = GameWorld.GetCurrentTime() if not serverTime: return serverDateTime = ChPyNetSendPack.tagServerDateTime() serverDateTime.Clear() serverDateTime.Year = serverTime.year serverDateTime.Month = serverTime.month serverDateTime.Day = serverTime.day serverDateTime.Hour = serverTime.hour serverDateTime.Minute = serverTime.minute serverDateTime.Second = serverTime.second serverDateTime.MicSecond = serverTime.microsecond # ֪ͨ¿Í»§¶Ëͬ²½Ê±¼ä NetPackCommon.SendFakePack(curPlayer, serverDateTime) return ## ֪ͨ¿ª·þÌìÊý # @param curPlayer: Íæ¼ÒʵÀý # @return: None def Sync_OpenServerDay(curPlayer): serverTime = GameWorld.GetCurrentTime() if not serverTime: return gw = GameWorld.GetGameWorld() packData = ChPyNetSendPack.tagOpenServerDay() packData.Clear() packData.Day = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) packData.IsMixServer = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer) packData.MixDay = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay) packData.OpenWeekday = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday) packData.NowYear = serverTime.year packData.NowMonth = serverTime.month packData.NowDay = serverTime.day packData.NowHour = serverTime.hour packData.NowMinute = serverTime.minute packData.NowSecond = serverTime.second packData.NowMicSecond = serverTime.microsecond NetPackCommon.SendFakePack(curPlayer, packData) return #=============================================================================== # //B4 09 Íæ¼ÒÒÆ¶¯ # tagCMPyMove # # struct tagCMPyMove # { # tagHead Head; # WORD Dir; // ³¯Ïò # WORD ClientPosX; // ¿Í»§¶Ë×ø±êX ºÁÃ× # WORD ClientPosY; // ¿Í»§¶Ë×ø±êY # WORD SeverPosX; // ·þÎñ¶Ë×ø±êX ¸ñ×Ó # WORD SeverPosY; // ·þÎñ¶Ë×ø±êY # DWORD WorldTick; # BYTE MoveType; // 0 Í£Ö¹ 1ÒÆ¶¯ # }; #=============================================================================== # python´¦ÀíеÄÒÆ¶¯·½Ê½ def PYPlayerMove(index, clientPack, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) #·ÀÍâ¹Ò ²»¿ÉÒÆ¶¯ if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \ == ChConfig.Def_AutoCheck_State_Danger: return if not PYPlayerNormalMove(curPlayer, clientPack, tick): posX, posY = curPlayer.GetPosX(), curPlayer.GetPosY() if GameWorld.GetMap().CanMove(posX, posY) != True: resultPos = GameMap.GetEmptyPlaceInArea(posX, posY, 5) if resultPos.GetPosX() == posX and resultPos.GetPosY() == posY: GameWorld.ErrLog("Íæ¼Ò×ø±ê¿¨ËÀ %s %s"%(posX, posY)) return posX = resultPos.GetPosX() posY = resultPos.GetPosY() curPlayer.ResetPos(posX, posY) def PYPlayerNormalMove(curPlayer, clientPack, tick) : #Íæ¼ÒÒÆ¶¯Í¨Óüì²é if not __CheckPlayerCanMove(curPlayer): return True #·â°ü²ÎÊý moveDir = clientPack.Dir # ÒÆ¶¯·½Ïò clientPosX = clientPack.ClientPosX #ºÁÃ× Ö»×÷Ϊ»Ø°üÓà clientPosY = clientPack.ClientPosY sendPack_SeverPosX = clientPack.SeverPosX #¸ñ×Ó sendPack_SeverPosY = clientPack.SeverPosY sendPack_WorldTick = clientPack.WorldTick moveType = clientPack.MoveType lastMoveTick = curPlayer.GetClientMoveTick() if moveType != 0 and sendPack_WorldTick - lastMoveTick < 50: GameWorld.DebugLog("move ·¢°üÌ«¿ì ÊÕ°ü%s - ÉÏÒ»´Î%s"%(sendPack_WorldTick, lastMoveTick)) # ·¢°ü¹ý¿ì return True #ÏÈÑé֤Ŀ±êµãÊÇ·ñºÏ·¨ if not GameWorld.GetMap().CanMove(sendPack_SeverPosX, sendPack_SeverPosY): GameWorld.DebugLog("ÒÆ¶¯Õϰ­µã") return False if curPlayer.GetPosX() == sendPack_SeverPosX and curPlayer.GetPosY() == sendPack_SeverPosY: if moveType != 0 and sendPack_WorldTick - lastMoveTick < 222: # ¼õÉÙͬ²½ÂÊ return True curPlayer.SetClientMoveTick(sendPack_WorldTick) #GameWorld.DebugLog("ûÓиñ×ÓÒÆ¶¯µÄÒ²¹ã²¥") # ûÓиñ×ÓÒÆ¶¯µÄÒ²¹ã²¥ PyNotifyPlayerMove(curPlayer, moveDir, clientPosX, clientPosY, sendPack_SeverPosX, sendPack_SeverPosY, moveType) return True #---¸±±¾µØÍ¼Òƶ¯¼ì²é--- if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: if not FBLogic.DoFBCanMove(curPlayer, sendPack_SeverPosX, sendPack_SeverPosY, tick): return False #---Õý³£Òƶ¯--- vehicle = curPlayer.GetPlayerVehicle() if vehicle not in [IPY_GameWorld.pvNull, IPY_GameWorld.pvHorse]: #GameWorld.ErrLog("²»ÄÜÒÆ¶¯, ½»Í¨¹¤¾ß²»Ã÷ %d" % (vehicle), curPlayer.GetID()) return False #УÑé¿Í»§¶Ëʱ¼ä if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, sendPack_WorldTick, sendPack_SeverPosX, sendPack_SeverPosY): curPlayer.Sync_ClientTick() return False dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), sendPack_SeverPosX, sendPack_SeverPosY) if dist > 4: # ¶ª°ü À­»Ø GameWorld.DebugLog("ÒÆ¶¯¾àÀë¹ý´ó£¬ Íæ¼Ò×ø±ê %s-%s ÊÕ°ü %s-%s"%(curPlayer.GetPosX(), curPlayer.GetPosY(), sendPack_SeverPosX, sendPack_SeverPosY), curPlayer.GetID()) return False #Èç¹ûÊÇСÓÎÏ·ÖÐÔòֹͣСÓÎÏ· if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent: PlayerGameEvent.StopGameEvent(curPlayer, tick) #2010/04/30 ÒÆ¶¯ÐÞ¸ÄΪȫC++¿ØÖÆ, Python״̬»úÉèÖÃΪ¿ÕÏÐ(Çå¿Õ²É¼¯µÈ״̬) PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull) #ɾ³ýÓÐÏÞÎÞµÐBUFF #PlayerControl.DelLimitSuperBuff(curPlayer, tick) curPlayer.ChangePos(sendPack_SeverPosX, sendPack_SeverPosY) PyNotifyPlayerMove(curPlayer, moveDir, clientPosX, clientPosY, sendPack_SeverPosX, sendPack_SeverPosY, moveType) curPlayer.SetClientMoveTick(sendPack_WorldTick) # ºóÃæ±ØÐë·µ»ØTrue fightPet = curPlayer.GetPetMgr().GetFightPet() if fightPet: #³öÕ½³èÎïÍ¬Ê±ÒÆ¶¯ if moveType == 0 or tick - fightPet.GetActionTick() > 300: PetControl.FightPetFollowMove(curPlayer,sendPack_SeverPosX, sendPack_SeverPosY) fightPet.SetCurAction(IPY_GameWorld.laNPCNull) return True #=============================================================================== # //B4 0A Íæ¼ÒÒÆ¶¯ #tagMCPYPlayerMove # # struct tagMCPYPlayerMove # { # tagHead Head; # WORD Dir; // ³¯Ïò # WORD ClientPosX; // ¿Í»§¶Ë×ø±êX ºÁÃ× # WORD ClientPosY; // ¿Í»§¶Ë×ø±êY # WORD SeverPosX; // ·þÎñ¶Ë×ø±êX ¸ñ×Ó # WORD SeverPosY; // ·þÎñ¶Ë×ø±êY # DWORD ObjID; # BYTE ObjType; # WORD Speed; # BYTE MoveType; // 0 Í£Ö¹ 1ÒÆ¶¯ # }; #=============================================================================== def PyNotifyPlayerMove(curPlayer, moveDir, clientPosX, clientPosY, posX, posY, moveType): sendPack = ChPyNetSendPack.tagMCPYPlayerMove() sendPack.Clear() sendPack.ObjID = curPlayer.GetID() sendPack.ObjType = IPY_GameWorld.gotPlayer sendPack.Dir = moveDir sendPack.ClientPosX = clientPosX sendPack.ClientPosY = clientPosY sendPack.SeverPosX = posX sendPack.SeverPosY = posY sendPack.Speed = curPlayer.GetSpeed() sendPack.MoveType = moveType # NotifyAll ×ö¹ýÂË»òÕßÊýÁ¿´¦Àí PlayerControl.PyNotifyAll(curPlayer, sendPack, False, -1) return def GetDownloadAward(curPlayer, dataEx): ##·Ö°üÏÂÔØ½±Àø dataEx 0Ö±½ÓÁìÈ¡ 1·¢Óʼþ awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState) if awardState: GameWorld.Log(' ·Ö°üÏÂÔØ½±ÀøÒÑÁìÈ¡£¬²»¿ÉÖØ¸´ÁìÈ¡£¡', curPlayer.GetID()) return awardItemList = IpyGameDataPY.GetFuncEvalCfg('DownReward') # ¼ì²é±³°ü if dataEx == 0: needSpace = len(awardItemList) packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) if needSpace > packSpace: PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371") return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DownloadAwardState, 1) if dataEx == 1: PlayerControl.SendMailByKey('SubpackageDownload', [curPlayer.GetID()], awardItemList) else: for itemID, itemCnt, isBind in awardItemList: ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind, [IPY_GameWorld.rptItem]) SyncPackDownloadAward(curPlayer) return def SyncPackDownloadAward(curPlayer): #·Ö°üÏÂÔØ½±Àø¼Ç¼֪ͨ sendPack = ChPyNetSendPack.tagMCPackDownloadRecord() sendPack.Clear() sendPack.Record = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState) NetPackCommon.SendFakePack(curPlayer, sendPack) return def NotifyPlayerMove(curPlayer, posX, posY, npcID=0): '''֪ͨǰ¶ËÏòij¸öµãÒÆ¶¯ ÕâÀïǰ¶Ë¿ÉÄÜÐèÒªÕë¶Ôij´ÎÒÆ¶¯×ö¶îÍâ´¦Àí£¬±ÈÈçÒÆ¶¯µ½Ä³¸öµãºóÐèÒª×Ô¶¯Õ½¶·µÈ ËùÒÔÕâÀïÖ»×ö֪ͨǰ¶Ë¿ÉÒÔÏòij¸öµãÒÆ¶¯£¬×îÖÕÒÆ¶¯ÓÉǰ¶Ë·¢Æð ''' sendPack = ChPyNetSendPack.tagMCNotifyPlayerMove() sendPack.Clear() sendPack.PosX = posX sendPack.PosY = posY sendPack.NPCID = npcID NetPackCommon.SendFakePack(curPlayer, sendPack) return