#!/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 BuffSkill
import PlayerEventCounter
import PlayerTeam
import PlayerHorse
import NPCCommon
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 PlayerPet
import PlayerPrestigeSys
import PlayerFamily
import PlayerLoginDayAward
import PlayerGodWeapon
import PlayerWorldAverageLv
import PlayerGoldInvest
import PlayerActivity
import FBCommon
import BossHurtMng
import PlayerWishingWell
import PlayerAttrFruit
import PlayerSuccess
import PlayerDienstgrad
import PlayerFreeGoods
import PlayerRecover
import GameLogic_IceLode
import GameLogic_SkyTower
import PlayerEquipDecompose
import PlayerGreatMaster
import PlayerGatherSoul
import PlayerGatherTheSoul
import PlayerFairyDomain
import PlayerCrossRealmPK
import PlayerCrossChampionship
import PlayerCrossBattlefield
import GameFuncComm
import PlayerMagicWeapon
import GameLogic_FamilyBoss
import GameLogic_TrialTower
import GameLogic_FamilyWar
import PlayerBossReborn
import PlayerWeekParty
import PlayerFeastWeekParty
import PlayerFeastTravel
import PlayerFeastLogin
import PlayerFeastWish
import PlayerActLogin
import PlayerTreasure
import GameLogic_GodArea
import PlayerRune
import PlayerFamilyRedPacket
import IpyGameDataPY
import EventReport
import OpenServerCampaign
import PlayerVip
import PlayerRefineStove
import PassiveBuffEffMng
import GameLogic_XMZZ
import PlayerFlashSale
import PlayerFlashGiftbag
import PlayerDailyGiftbag
import PlayerCostRebate
import PlayerActBuyOne
import PlayerActGrowupBuy
import PlayerActCollectWords
import PlayerActTotalRecharge
import PlayerActRechargePrize
import PlayerActGarbageSorting
import PlayerActXianXiaMJ
import PlayerActGubao
import PlayerActHorsePetTrain
import PlayerActLianqi
import PlayerActGodGift
import PlayerActFamilyCTGAssist
import PlayerActRechargeRebateGold
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
import PlayerActHorsePetFeast
import PlayerActBossTrial
import PlayerSpringSale
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import GY_Query_BossFirstKill
import PlayerCrossYaomoBoss
import PlayerFeastRedPacket
import PlayerLuckyCloudBuy
import PlayerLuckyTreasure
import Item_ResetAttrPoint
import CrossActCTGBillboard
import CrossActAllRecharge
import PlayerFuncSysPrivilege
import PlayerActTurntable
import PlayerTongTianLing
import CrossRealmPlayer
import ChNetSendPack
import FamilyRobBoss
import FBHelpBattle
import PlayerAssist
import PlayerArena
import PyGameData
import PlayerCoin
import PlayerCharm
import PlayerDogz
import PlayerCoat
import PlayerFB
import PlayerFaQi
import SkillShell
import PlayerGubao
import PlayerShentong
import PlayerCustomAward
import PlayerZhanling
import PlayerTree
import PlayerLianTi
import PlayerTask
import PlayerYinji
import PlayerLove
import GameObj
import PlayerChangeJob
import PlayerGuaji
import PlayerFace
import PlayerChatBox
import PlayerXiangong
import PlayerMineArea
import PlayerActLoginNew
import PlayerActBuyCountGift
import PlayerActLunhuidian
import PlayerActFamilyGCZ
import PlayerActYunshi
import PlayerActTask
import PlayerMail
import DBDataMgr
import GameServerRefresh
import IPY_ServerDefine
import CommFunc
from PyMongoDB import RecvPackToMapDB
import PlayerTalk
import datetime
import time
import math
import re
import base64
#---------------------------------------------------------------------
#---------------------------------------------------------------------
##C++µ÷Ó÷â°ü, µØÍ¼¿ªÆô³É¹¦, ³õʼ»¯ÐÅÏ¢
#@param tick ʱ¼ä´Á
#@return ·µ»ØÖµÎÞÒâÒå
#@remarks µØÍ¼¿ªÆô³É¹¦, ³õʼ»¯ÐÅÏ¢
def InitPlayer(tick):
return
#---------------------------------------------------------------------
##Íæ¼ÒµÇ½ÓÎÏ·³õʼ»¯
#@param curPlayer Íæ¼ÒʵÀý
#@param tick ʱ¼ä´Á
#@return ·µ»ØÖµÎÞÒâÒå
#@remarks Íæ¼ÒµÇ½ÓÎÏ·³õʼ»¯
def InitLoginPlayer(curPlayer, tick):
#³õʼ»¯Íæ¼ÒµÄʱÖÓ¸öÊý
if curPlayer.GetTickTypeCount() == 0:
curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count)
return
#---------------------------------------------------------------------
##C++·â°üGameServer_InitOK ´¦Àí
#@param curPlayer Íæ¼ÒʵÀý
#@param tick ʱ¼ä´Á
#@return ·µ»ØÖµÎÞÒâÒå
#@remarks ×Ô¶¨Ò庯Êý, C++·â°üGameServer_InitOK ´¦Àí
def OnAllServerInitOK(curPlayer, tick):
if FBLogic.PlayerLoginInFBCheck(curPlayer, tick):
#Íæ¼ÒÊǵÚÒ»´ÎµÇ¼, ²¢ÇÒÍæ¼ÒÐèÒªÌß»ØÔÀ´µØÍ¼
return
#Ë¢ÐÂÈËÎïÈÕÆÚ״̬
#GameWorld.Log('PlayerEventCounter.UpdatePlayerLoginTime')
PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
return
#// A1 20 »õ±Ò¶Ò»» #tagCMMoneyExchange
#
#struct tagCMMoneyExchange
#{
# tagHead Head;
# BYTE SrcMoneyType; // Ô´»õ±ÒÀàÐÍ
# BYTE TagMoneyType; // Ä¿±ê»õ±ÒÀàÐÍ
# DWORD ExchangeValue; // ¶Ò»»ÊýÁ¿£¨ÏûºÄÔ´»õ±ÒµÄÊýÁ¿£©
#};
def OnMoneyExchange(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
srcMoneyType = clientData.SrcMoneyType
tagMoneyType = clientData.TagMoneyType
exchangeValue = clientData.ExchangeValue
exchangeMoneyInfo = IpyGameDataPY.GetFuncEvalCfg("EqualValueMoney", 1, {})
if str(srcMoneyType) not in exchangeMoneyInfo:
return
exchangeInfo = exchangeMoneyInfo[str(srcMoneyType)]
if tagMoneyType != exchangeInfo[0]:
return
multiple = exchangeInfo[1]
if exchangeValue <= 0:
return
if not PlayerControl.PayMoney(curPlayer, srcMoneyType, exchangeValue, "MoneyExchange"):
return
tagMoneyAdd = exchangeValue * multiple
PlayerControl.GiveMoney(curPlayer, tagMoneyType, tagMoneyAdd, "MoneyExchange")
GameWorld.Log("»õ±Ò¶Ò»»: srcMoneyType=%s,exchangeValue=%s,tagMoneyType=%s,tagMoneyAdd=%s"
% (srcMoneyType, exchangeValue, tagMoneyType, tagMoneyAdd), curPlayer.GetPlayerID())
return
#// A1 21 תְҵ #tagCMChangeJob
#
#struct tagCMChangeJob
#{
# tagHead Head;
# BYTE TagJob;
#};
def OnChangeJob(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
PlayerChangeJob.DoChangeJob(curPlayer, curPlayer.GetJob(), clientData.TagJob)
return
#// A1 08 Ë¢ÐÂÖ÷·þ½ÇÉ«ÐÅÏ¢ #tagCMRefreshMainServerRole
#
#struct tagCMRefreshMainServerRole
#{
# tagHead Head;
#};
def OnRefreshMainServerRole(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
Sync_DBPlayer(curPlayer)
# ËÀÍö¸´»î
if GameObj.GetHP(curPlayer) <=0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
PlayerRebornByType(curPlayer, ChConfig.rebornType_System, tick)
# ǿˢһ´ÎÊôÐÔ£¬Ë¢Ö®Ç°ÖØÖû¹Ã»Í¬²½¹ýËùÓÐÊôÐÔ
curPlayer.SetDict(ChConfig.Def_PlayerKey_NotifyAllAttrState, 0)
playerControl = PlayerControl.PlayerControl(curPlayer)
playerControl.ReCalcAllState()
# ͬ²½ËùÓÐbuff
__Sync_ClientBuff(curPlayer)
PlayerState.Sync_PKBossState(curPlayer)
if PlayerControl.GetCrossMapID(curPlayer):
CrossRealmPlayer.DoExitCrossRealm(curPlayer)
if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
PlayerFB.DoExitCustomScene(curPlayer)
PetControl.DoLogic_PetLoadMapOK(curPlayer)
# »Ö¸´ÊÓÒ°£¬Ë¢ÐÂ×Ô¼ºµÄÊÓÒ°
curPlayer.SetVisible(True)
PlayerControl.SetSight(curPlayer, 0)
curPlayer.RefreshView()
PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default)
curPlayer.RefreshView()
msgInfo = ""
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "RefreshMainServerRole", msgInfo, len(msgInfo))
return
def Sync_DBPlayer(curPlayer):
## ͬ²½DBPlayerÐÅÏ¢£¬Í¬0102·â°ü
dbPlayer = ChPyNetSendPack.tagMCDBPlayer()
dbPlayer.AccID = curPlayer.GetAccID()
dbPlayer.PlayerID = curPlayer.GetPlayerID()
dbPlayer.PlayerName = curPlayer.GetPlayerName()
dbPlayer.AccState = curPlayer.GetAccState()
dbPlayer.GMLevel = curPlayer.GetGMLevel()
dbPlayer.Sex = curPlayer.GetSex()
dbPlayer.Job = curPlayer.GetJob()
dbPlayer.ReincarnationLv = curPlayer.GetReincarnationLv()
dbPlayer.LV = curPlayer.GetLV()
dbPlayer.LVEx = curPlayer.GetLVEx()
dbPlayer.LV2 = curPlayer.GetLV2()
dbPlayer.ExpPoint = curPlayer.GetExpPoint()
dbPlayer.TotalExp = curPlayer.GetTotalExp()
dbPlayer.Family = curPlayer.GetFamilyID()
dbPlayer.FamilyName = curPlayer.GetFamilyName()
dbPlayer.TeamHornor = curPlayer.GetTeamHornor()
dbPlayer.FamilyHornor = curPlayer.GetFamilyHornor()
dbPlayer.FamilyActiveValue = curPlayer.GetFamilyActiveValue()
dbPlayer.LastWeekFamilyActiveValue = curPlayer.GetLastWeekFamilyActiveValue()
dbPlayer.CountryHornor = curPlayer.GetCountryHornor()
dbPlayer.CountryLastWeekHornor = curPlayer.GetCountryLastWeekHornor()
dbPlayer.Mate = curPlayer.GetMate()
dbPlayer.Gold = curPlayer.GetGold()
dbPlayer.GoldPaper = curPlayer.GetGoldPaper()
dbPlayer.Silver = curPlayer.GetSilver()
dbPlayer.SilverPaper = curPlayer.GetSilverPaper()
dbPlayer.FightPoint = curPlayer.GetFightPoint()
dbPlayer.HappyPoint = curPlayer.GetHappyPoint()
dbPlayer.LineID = curPlayer.GetLineID()
dbPlayer.MapID = curPlayer.GetMapID() # Íæ¼ÒÉíÉ쵀 GetMapID ·µ»ØµÄ¾ÍÊÇ GetDataMapID
dbPlayer.PosX = curPlayer.GetPosX()
dbPlayer.PosY = curPlayer.GetPosY()
dbPlayer.RebornMapID = curPlayer.GetRebornMapID()
dbPlayer.RebornPosX = curPlayer.GetRebornPosX()
dbPlayer.RebornPosY = curPlayer.GetRebornPosY()
dbPlayer.State = curPlayer.GetState()
dbPlayer.HP = curPlayer.GetHP()
dbPlayer.HPEx = curPlayer.GetHPEx()
dbPlayer.XP = curPlayer.GetXP()
dbPlayer.HPRestoreSetting = curPlayer.GetHPRestoreSetting()
dbPlayer.MPRestoreSetting = curPlayer.GetMPRestoreSetting()
dbPlayer.FreePoint = curPlayer.GetFreePoint()
dbPlayer.FreeSkillPoint = curPlayer.GetFreeSkillPoint()
dbPlayer.BaseSTR = curPlayer.GetBaseSTR()
dbPlayer.BasePNE = curPlayer.GetBasePNE()
dbPlayer.BasePHY = curPlayer.GetBasePHY()
dbPlayer.BaseCON = curPlayer.GetBaseCON()
dbPlayer.STR = curPlayer.GetSTR()
dbPlayer.PNE = curPlayer.GetPNE()
dbPlayer.PHY = curPlayer.GetPHY()
dbPlayer.CON = curPlayer.GetCON()
#dbPlayer.Setting = curPlayer.GetSetting() # ûÓÐ
dbPlayer.PKValue = curPlayer.GetPKValue()
#dbPlayer.ActiveValue = curPlayer.GetActiveValue() # ûÓÐ
dbPlayer.BackpackLV = curPlayer.GetBackpackLV()
dbPlayer.WarehouseLV = curPlayer.GetWarehouseLV()
dbPlayer.TeamID = curPlayer.GetTeamID()
dbPlayer.UseGoldType = curPlayer.GetUseGoldType()
dbPlayer.UseSilverType = curPlayer.GetUseSilverType()
dbPlayer.AttackMode = curPlayer.GetAttackMode()
dbPlayer.LastWeekOnlineTime = curPlayer.GetLastWeekOnlineTime()
dbPlayer.FBID = curPlayer.GetClientLineID()
dbPlayer.FamilyLV = curPlayer.GetFamilyLV()
dbPlayer.FriendFavor = curPlayer.GetFriendFavor()
dbPlayer.Energy = curPlayer.GetEnergy()
dbPlayer.EquipShowSwitch = curPlayer.GetEquipShowSwitch()
dbPlayer.LuckValue = curPlayer.GetLuckValue()
dbPlayer.ExAttr1 = curPlayer.GetExAttr1()
dbPlayer.ExAttr2 = curPlayer.GetExAttr2()
dbPlayer.ExAttr3 = curPlayer.GetExAttr3()
dbPlayer.ExAttr4 = curPlayer.GetExAttr4()
dbPlayer.ExAttr5 = curPlayer.GetExAttr5()
dbPlayer.Faction = curPlayer.GetFaction()
dbPlayer.InfamyValue = curPlayer.GetInfamyValue()
dbPlayer.OfficialRank = curPlayer.GetOfficialRank()
dbPlayer.ChangeCoinPointTotal = curPlayer.GetChangeCoinPointTotal()
dbPlayer.VIPLv = curPlayer.GetVIPLv()
dbPlayer.VIPLvForPhone = curPlayer.GetVIPLvForPhone()
dbPlayer.ExAttr6 = curPlayer.GetExAttr6()
dbPlayer.ExAttr7 = curPlayer.GetExAttr7()
dbPlayer.ExAttr8 = curPlayer.GetExAttr8()
dbPlayer.ExAttr9 = curPlayer.GetExAttr9()
dbPlayer.ExAttr10 = curPlayer.GetExAttr10()
dbPlayer.ModelMark = curPlayer.GetModelMark()
dbPlayer.ExAttr11 = curPlayer.GetExAttr11()
dbPlayer.ExAttr12 = curPlayer.GetExAttr12()
dbPlayer.ExAttr13 = curPlayer.GetExAttr13()
dbPlayer.ExAttr14 = curPlayer.GetExAttr14()
dbPlayer.OperateInfo = curPlayer.GetOperateInfo()
dbPlayer.Operate = curPlayer.GetOperate()
dbPlayer.ServerID = curPlayer.GetServerID()
dbPlayer.ExAttr15 = curPlayer.GetExAttr15()
dbPlayer.ExAttr16 = curPlayer.GetExAttr16()
dbPlayer.ExAttr17 = curPlayer.GetExAttr17()
dbPlayer.ExAttr18 = curPlayer.GetExAttr18()
dbPlayer.ExAttr19 = curPlayer.GetExAttr19()
dbPlayer.ExAttr20 = curPlayer.GetExAttr20()
dbPlayer.Face = curPlayer.GetFace()
dbPlayer.FacePic = curPlayer.GetFacePic()
dbPlayer.RoleType = curPlayer.GetRoleType()
NetPackCommon.SendFakePack(curPlayer, dbPlayer)
return
#---------------------------------------------------------------------
'''
µÇ¼Á÷³Ì
UserCrtlDB
onAuthentication Íæ¼ÒµÇ¼ £ºÑéÖ¤Õ˺Å-ÈôûÓнÇÉ«Ôò´´½Ç-·µ»Ø½ÇÉ«ÐÅÏ¢-֪ͨMap C++
Map C++µ÷ÓÃ PlayerLogin
MapServer
ChPlayer:def PlayerLogin(index, tick)
DoPlayerLogin
curPlayer.Sync_ClientPlayerLogin() #01 02 Íæ¼Ò³õʼ»¯#tagCDBPlayer
curPlayer.BalanceServer_PlayerLoginInitOK() #ÏòrouteÉèÖÃÍæ¼ÒÔÚmapÖеÄË÷Òý
curPlayer.SendToBServerServerInitOK() #֪ͨrouteµÇ¼³É¹¦ £¬routeÏò¿Í»§¶Ë·¢ËÍ//01 09 ·þÎñÆ÷×¼±¸¾ÍÐ÷#tagServerPrepareOK
ChPlayer:def OnAllServerInitOK(curPlayer, tick)
ChPlayer:def __Func_LoadMapOK(curPlayer, tick) #£¡£¡£¡Ö±½Óµ÷Óò»µÈ´ý¿Í»§¶Ë·â°ü //01 07 µØÍ¼¶ÁÈ¡OK#tagCInitMapOK
curPlayer.SetMapLoadOK(True)
curPlayer.SetInitOK(True)
curPlayer.EndLoadMap() #֪ͨ¿Í»§¶Ë 04 03 Íæ¼ÒµÇ¼Êý¾Ý·¢ËÍÍê±ÏOK#tagPlayerLoginLoadOK
GameServerRefresh:GameSever_PlayerInitOK
curPlayer.SetGameServerInitOK(True)
ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick) Íæ¼ÒÕæÕýµÇ¼³É¹¦´¦Àí£¬ÓÃÓÚÌæ»» __DoPlayerLoginServer ÖеŦÄܵǼÂß¼
'''
##Íæ¼ÒµÇ½ÓÎÏ·Âß¼´¦Àí
#@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() #01 02 Íæ¼Ò³õʼ»¯#tagCDBPlayer
# ÆÁ±Î¿ç·þϹرպÍ×Ó·þÖØ¸´µÄÊý¾ÝµÄ·¢ËÍ pushsend½Ó¿Ú£¬ notifyallÕý³£·¢ËÍ
# £¡£¡£¡±ØÒª·¢Ë͵ÄÊý¾ÝҪעÒâλÖÃ
if GameWorld.IsCrossServer():
curPlayer.SetForbiddenSyncClientState(True)
__DoPlayerLoginServer(curPlayer, tick)
# ÆÁ±Î¿ç·þϹرպÍ×Ó·þÖØ¸´µÄÊý¾ÝµÄ·¢ËÍ pushsend½Ó¿Ú£¬ notifyallÕý³£·¢ËÍ
# £¡£¡£¡±ØÒª·¢Ë͵ÄÊý¾ÝҪעÒâλÖÃ
if GameWorld.IsCrossServer():
curPlayer.SetForbiddenSyncClientState(False)
PlayerControl.SetCrossMapID(curPlayer, curPlayer.GetMapID()) # ÒòΪÖ÷·þÉÏ´«Êý¾Ý֮ǰ¸ÃֵΪ0£¬ËùÒԵǼ¿ç·þºóÔÚ¿ç·þ·þÎñÆ÷ÒªÉèÖÃΪ¶ÔÓ¦µØÍ¼
#֪ͨÔËÐгɹ¦
curPlayer.BalanceServer_PlayerLoginInitOK() #ÏòrouteÉèÖÃÍæ¼ÒÔÚmapÖеÄË÷Òý
return
def __DoPlayerLoginServer(curPlayer, tick):
''' Íæ¼ÒµÇ¼ÐèÒª´¦ÀíµÄÄÚÈÝ£¬±¾·þ¼°¿ç·þ·þÎñÆ÷·Ö¿ª
'''
#ÉèÖÃÉÏÏßʱ¼ä
curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr())
#³õʼ»¯Íæ¼Ò±³°ü
InitPlayerPack(curPlayer)
#Í¨ÖªÍæ¼ÒÎïÆ·ÐÅÏ¢
__Sync_PackDetel(curPlayer)
if GameWorld.IsCrossServer():
SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick)
# ÖØÖÃËùÓм¼ÄÜCD
DoPlayerLoginInMap(curPlayer, tick)
DataRecordPack.DR_PlayerLogin(curPlayer)
EventReport.WriteEvent_login(curPlayer)
#---Íæ¼ÒÉÏÏß, ³èÎïÂß¼´¦Àí---
PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
PlayerTeam.OnPlayerLoginCrossServer(curPlayer)
return
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())
# ÀëÏß¹ý¾Ã»Ö¸´Îª·Ç¿ç·þ״̬
if PlayerControl.GetCrossMapID(curPlayer):
PlayerControl.SetCrossMapID(curPlayer, 0)
SyncGuideState(curPlayer)
#ÉÏÏß¼ì²éÒ»´Î×°±¸ÊôÐÔ
ItemControler.OnPlayerLogin(curPlayer)
#¸üзþÎñÆ÷×éID
PlayerControl.UpdPlayerServerGroupID(curPlayer)
#ÉÏÏßѧϰ¼¼ÄÜ
SkillCommon.PlayerLoginCheckLearnSkill(curPlayer)
#ˢм¼ÄÜCD
SkillCommon.PlayerLoginUpdateSkillCD(curPlayer, tick)
#Í¨ÖªÍæ¼Ò¼¼ÄÜÐÅÏ¢
__Sync_ClientSkill(curPlayer)
#Çå³ýVIPbuff
#BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_VIPExp_SkillTypeID, tick)
#Í¨ÖªÍæ¼ÒµÄbuff
__Sync_ClientBuff(curPlayer)
#³õʼ»¯ÏÖʵʱ¼äÎïÆ·
InitRealityTimeItem(curPlayer, tick)
#---Ë¢ÐÂÁËÍæ¼ÒÊôÐÔ, µÇ½ֻˢÐÂÒ»´Î£¬ÆäËûµØ·½²»ÓÃË¢
DoPlayerLoginInMap(curPlayer, tick)
PlayerControl.SyncOnLineTimeTotal(curPlayer)
#PlayerControl.SyncOnLineTimeLastOpenPack(curPlayer, IPY_GameWorld.rptItem)
PlayerControl.SyncTrainRealmLV(curPlayer)
PlayerGodWeapon.OnLogin(curPlayer)
PlayerPrestigeSys.OnLogin(curPlayer)
#DataRecordPack.DR_PlayerLogin(curPlayer)
EventReport.WriteEvent_login(curPlayer)
__FirstLoginOnEnter(curPlayer)
# ºÏ·þÊ׵Ǵ¦Àí
__DoMixServerFirstLogin(curPlayer)
PlayerBillboard.BillboardOnLogin(curPlayer)
#ÉÏÏßʱ֪ͨÍÑ»ú¹Òʱ±»»÷ɱµÄÀëÏßʱ¼ä
__Sync_PlayerOffline(curPlayer, tick)
#Íæ¼ÒÀ©Õ¹ÐÅÏ¢
__SyncPlayerInfoEx(curPlayer)
#²¹¶¡°üÏÂÔØ½±Àø
GiveDownloadPatchAward(curPlayer)
#PKģʽ
SyncPKModel(curPlayer)
#×°±¸Ïà¹ØÐÅÏ¢
ChEquip.OnPlayerEquipLoginLogic(curPlayer)
#´óʦ
PlayerGreatMaster.MasterOnLogin(curPlayer)
#֪ͨVIP
PlayerVip.DoOnLogin(curPlayer, tick)
#֪ͨ·¨±¦¾«Á¶µÈ¼¶
PlayerRefineStove.DoOnLogin(curPlayer, tick)
#---Íæ¼ÒÉÏÏß, ³èÎïÂß¼´¦Àí---
PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
PlayerPet.OnPlayerPetLogin(curPlayer)
#Çå¿ÕÍæ¼ÒÍòÄܱ³°üÖеÄÈÎÎñÎïÆ·
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)
#֪ͨ¹ºÂò¹¦ÄÜÖи÷¹ºÂòÀàÐ͵ÄÒѹºÂòºÍ¿É¹ºÂò´ÎÊý
Operate_PlayerBuyZhenQi.DoPlayerLogin(curPlayer)
#
# #֪ͨ¹¦ÄÜÊ״δ¥·¢Çé¿ö
GameFuncComm.Sync_FuncOpenState(curPlayer)
#
# #֪ͨ¿Í»§¶ËÇ©µ½ÐÅÏ¢
PlayerSignDay.SignDayOnLogin(curPlayer)
#Í¨ÖªÍæ¼ÒËÀÍöʱ¼ä
PlayerControl.PlayerControl(curPlayer).NotifyPlayerDeadTime(curPlayer)
#ClearPlayerDeadInfo(curPlayer)
#³äÖµ»î¶¯Íæ¼ÒµÇÈë´¦Àí
#PlayerGoldAction.DoLogic_PlayerOnLogin(curPlayer)
# Ìáʾ¹ó±ö¾ãÀÖ²¿ÐÅÏ¢
#PlayerVip.NoteVIPClubInfo(curPlayer)
#½ÇÉ«¸ÄÃû´ÎÊý
UpdatePlayerName.Sync_UpdatePlayerNameCount(curPlayer)
# ×øÆïÏà¹ØÍ¨Öª
PlayerHorse.PlayerHorseLogin(curPlayer)
# ·¨Æ÷
PlayerFaQi.PlayerFaQiLogin(curPlayer)
# Á¶Ìå
PlayerLianTi.OnPlayerLogin(curPlayer)
PlayerTreasure.OnTreasureLogin(curPlayer)
# ֪ͨÀۼƵǽÀñ
PlayerLoginDayAward.OnLoginNotifyLoginDayAward(curPlayer)
# ¿ª·þ»î¶¯½±ÀøÐÅÏ¢
OpenServerCampaign.OnOpenServerCampaignLogin(curPlayer)
# ÊÔÁ¶Ö®Ëþ
GameLogic_TrialTower.OnFBPlayerLogin(curPlayer)
# ¹ÅÉñ½ûµØ
GameLogic_GodArea.GodAreaOnLogin(curPlayer)
# ²É¼¯NPC´ÎÊý֪ͨ
NPCCommon.SyncCollNPCTime(curPlayer)
# ÿÈÕ»îÔ¾¶È
PlayerActivity.OnLogin(curPlayer)
# ¸±±¾½øÈëʱ¼ä
FBCommon.FBOnLogin(curPlayer)
#ÊÀ½çµÈ¼¶
PlayerWorldAverageLv.OnLogin(curPlayer)
# Ͷ×ÊÀí²Æ
PlayerGoldInvest.OnLogin(curPlayer)
#ÊôÐÔ¹ûʵʹÓÃÇé¿ö
PlayerAttrFruit.AttrFruitOnLogin(curPlayer)
#³É¾Í
PlayerSuccess.SuccOnLogin(curPlayer)
#÷ÈÁ¦
PlayerCharm.OnPlayerLogin(curPlayer)
#ÇéÔµ
PlayerLove.DoPlayerLogin(curPlayer)
#ͬ²½×Ô¶¯Õ½¶·ÅäÖüǼ
# Sync_AutoFightSetting(curPlayer)
PlayerFamily.OnPlayerLogin(curPlayer, tick)
#¸Äµ½ GameServerRefresh GameSever_PlayerInitOKºó´¦Àí²ÅÄܱ£Ö¤Íæ¼ÒÒѾÔÚGameserver×¢²á
#PlayerDienstgrad.RefreshBillBoardDienstgrad(curPlayer)
# ³ÆºÅ
PlayerDienstgrad.Sync_AllDienstgradOnLogin(curPlayer)
# ×ÊÔ´ÕÒ»ØOnLogin
PlayerRecover.RecoverOnLogin(curPlayer)
# ʱװ
PlayerCoat.OnLogin_Coat(curPlayer)
# ¿ç·þPK
PlayerCrossRealmPK.DoPlayerLogin(curPlayer)
PlayerCrossChampionship.DoPlayerLogin(curPlayer)
PlayerCrossBattlefield.DoPlayerLogin(curPlayer)
# ÐÒÔËÔÆ¹º
PlayerLuckyCloudBuy.OnPlayerLogin(curPlayer)
# ¾º¼¼³¡
PlayerArena.OnLogin(curPlayer)
# ×Ô¶¨Òå»õ±Òֵͬ²½
PlayerControl.NotifyPlayerAllCurrency(curPlayer)
PlayerControl.NotifyUseMoneyTotal(curPlayer)
#֪ͨ»ù´¡ÊôÐÔ
NotifyPlayerBasePoint(curPlayer)
#¿ç·þ³äÖµÅÅÐÐ
CrossActCTGBillboard.OnPlayerLogin(curPlayer)
#¿ç·þÈ«Ãñ³äÖµ
CrossActAllRecharge.OnPlayerLogin(curPlayer)
#Ïû·Ñ·µÀû
PlayerCostRebate.OnPlayerLogin(curPlayer)
#ÀۼƳäÖµ
PlayerActTotalRecharge.OnPlayerLogin(curPlayer)
#ÀۼƳäÖµ·µÀûÏÉÓñ
PlayerActRechargeRebateGold.OnPlayerLogin(curPlayer)
#³äÖµ·µÀû
PlayerActRechargePrize.OnPlayerLogin(curPlayer)
#³É³¤±ØÂò
PlayerActGrowupBuy.OnPlayerLogin(curPlayer)
#ÏÞÊ±ÌØ»Ý
PlayerSpringSale.OnPlayerLogin(curPlayer)
#ÏÞʱÀñ°ü
PlayerFlashGiftbag.OnPlayerLogin(curPlayer)
#ÿÈÕÀñ°ü
PlayerDailyGiftbag.OnPlayerLogin(curPlayer)
#ÏÞʱÇÀ¹º
PlayerFlashSale.OnPlayerLogin(curPlayer)
#ÂòÒ»ËͶà»î¶¯
PlayerActBuyOne.OnPlayerLogin(curPlayer)
#ÏÉÃ˳äÖµ»¥Öú
PlayerActFamilyCTGAssist.OnPlayerLogin(curPlayer)
#¼¯×ֻ
PlayerActCollectWords.OnPlayerLogin(curPlayer)
# ÊÀ½çboss
BossHurtMng.OnLogin(curPlayer)
ChItem.Sync_ItemDayUseCnt(curPlayer)
# ·ûÓ¡µÇ¼֪ͨ
PlayerRune.PlayerRuneLogin(curPlayer)
# ÏÉÃ˺ì°üµÇ¼֪ͨ
PlayerFamilyRedPacket.OnPlayerLogin(curPlayer)
PlayerFeastRedPacket.DoPlayerOnLogin(curPlayer)
# ·¨±¦µÇ¼֪ͨ
PlayerMagicWeapon.PlayerMagicWeaponLogin(curPlayer)
# É̵êÎïÆ·¹ºÂò´ÎÊýµÇ¼֪ͨ
FunctionNPCCommon.ShopItemOnLogin(curPlayer)
# ֪ͨÉèÖõı»¶¯¹¦·¨
#PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
#ÏÉħ֮Õù
GameLogic_XMZZ.OnXMZZLogin(curPlayer)
PlayerOnlinePrize.OnPlayerLogin(curPlayer)
#×°±¸·Ö½â
PlayerEquipDecompose.PlayerLogin(curPlayer)
#·À³ÁÃÔ
PlayerGameWallow.DoLogic_CheckWallow(curPlayer, tick)
# ÐÖú
PlayerAssist.OnPlayerLogin(curPlayer)
# ¼«Æ·°×ÄÃ
PlayerFreeGoods.OnLogin(curPlayer)
# BOSS¸´»î»î¶¯
PlayerBossReborn.OnLogin(curPlayer)
# bossÀúÁ·
PlayerActBossTrial.OnPlayerLogin(curPlayer)
# Æï³èÊ¢Ñç»î¶¯
PlayerActHorsePetFeast.OnLogin(curPlayer)
# ÖÜ¿ñ»¶»î¶¯
PlayerWeekParty.OnLogin(curPlayer)
# ¹ºÂò´ÎÊýÀñ°ü»î¶¯
PlayerActBuyCountGift.OnPlayerLogin(curPlayer)
# ÈÎÎñ»î¶¯
PlayerActTask.OnPlayerLogin(curPlayer)
# ÔËÊÆ»î¶¯
PlayerActYunshi.OnPlayerLogin(curPlayer)
# Âֻصî»î¶¯
PlayerActLunhuidian.OnPlayerLogin(curPlayer)
# µÇ¼»î¶¯
PlayerActLoginNew.OnPlayerLogin(curPlayer)
# ½ÚÈÕѲÀñ»î¶¯
PlayerFeastWeekParty.OnLogin(curPlayer)
# ½ÚÈյǼ»î¶¯
PlayerFeastLogin.OnPlayerLogin(curPlayer)
# ½ÚÈÕ×£¸£»î¶¯
PlayerFeastWish.OnPlayerLogin(curPlayer)
# ½ÚÈÕÓÎÀú»î¶¯
PlayerFeastTravel.OnPlayerLogin(curPlayer)
# µÇ¼½±Àø»î¶¯
PlayerActLogin.OnLogin(curPlayer)
# À¬»ø·ÖÀà»î¶¯
PlayerActGarbageSorting.OnPlayerLogin(curPlayer)
# ÏÉÏ»ÃØ¾³»î¶¯
PlayerActXianXiaMJ.OnPlayerLogin(curPlayer)
# ¹Å±¦Ñø³É»î¶¯
PlayerActGubao.OnPlayerLogin(curPlayer)
# Æï³èÑø³É»î¶¯
PlayerActHorsePetTrain.OnPlayerLogin(curPlayer)
# Á¶Æ÷»î¶¯
PlayerActLianqi.OnPlayerLogin(curPlayer)
# ÌìµÛÀñ°ü»î¶¯
PlayerActGodGift.OnPlayerLogin(curPlayer)
# ¶àÈÕÁ¬³ä»î¶¯
PlayerActManyDayRecharge.OnPlayerLogin(curPlayer)
# µ¥±ÊÀÛ³ä»î¶¯
PlayerActSingleRecharge.OnPlayerLogin(curPlayer)
# תÅ̻
PlayerActTurntable.OnPlayerLogin(curPlayer)
# ÏɽçÊ¢µä»î¶¯
PlayerFairyCeremony.OnLogin(curPlayer)
# ÐÂÏɽçÊ¢µä»î¶¯
PlayerNewFairyCeremony.OnLogin(curPlayer)
# ·ÖÖ§ÏÂÔØ½±Àø¼Ç¼֪ͨ
SyncPackDownloadAward(curPlayer)
# µÇ¼´¥·¢¹¦ÄÜ¿ªÆô£¨ÀϺŴ¦Àí£©
GameFuncComm.DoFuncOpenLogic(curPlayer)
# ÉñÊÞ
PlayerDogz.OnPlayerLogin(curPlayer)
# Æï³è
FamilyRobBoss.OnPlayerLogin(curPlayer)
# ÐíÔ¸³Ø
PlayerWishingWell.OnLogin(curPlayer)
#ÐÒÔ˼ø±¦
PlayerLuckyTreasure.OnLogin(curPlayer)
# СÖúÊÖ
SyncLittleHelper(curPlayer)
# ¸±±¾ÖúÕ½
FBHelpBattle.DoPlayerLogin(curPlayer)
# ¾Û»ê
PlayerGatherSoul.PlayerLogin(curPlayer)
PlayerGatherTheSoul.OnPlayerLogin(curPlayer)
#çÎç¿ÏÉÓò
PlayerFairyDomain.OnLogin(curPlayer)
PlayerFB.OnLogin(curPlayer)
#¼¼ÄÜר¾«ÐÅÏ¢
SkillShell.NotifyElementSkillInfo(curPlayer)
#BossÊ×ɱ
GY_Query_BossFirstKill.OnPlayerLogin(curPlayer)
#ͨÌìÁî
PlayerTongTianLing.OnPlayerLogin(curPlayer)
#´´½Ç½±Àø
Sync_CreateRoleAwardInfo(curPlayer)
#×Ô¶¨Òå½±Àø
PlayerCustomAward.OnPlayerLogin(curPlayer)
#¹¦ÄÜÏµÍ³ÌØÈ¨
PlayerFuncSysPrivilege.OnPlayerLogin(curPlayer)
#Íæ·¨Ç°Õ°½±Àø
gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
if gameNoticeAwardState:
Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_GameNotice, gameNoticeAwardState)
#ÿÈÕ·ÖÏí½±Àø
shareGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShareGameAwardState)
if shareGameAwardState:
Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ShareGame, shareGameAwardState)
#ÓÎÏ·ºÃÆÀ½±Àø
goodGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoodGameAwardState)
if goodGameAwardState:
Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_GoodGame, goodGameAwardState)
#ÓÎÏ·µãÔÞ½±Àø
likeGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LikeGameAwardState)
if likeGameAwardState:
Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_LikeGame, likeGameAwardState)
#¿ª·þÿÈÕ½±Àø
awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OpenSererDailyAward)
if awardState:
Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_OpenServerDailyAward, awardState)
#ÀÛ³äÿÈÕ½±Àø
awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeDayAward)
if awardState:
Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_RechargeDayAward, awardState)
curPlayer.SetState(0) # ÍÑ»ú¹Ò»Ö¸´ÎªÕý³£ÉÏÏß
curPlayer.SetCountryLastWeekHornor(0) # ֪ͨÊý¾Ý¿âÊÇ·ñ±£´æ»¹ÊÇÏÂÏߣ¬×öÒ»´Î»Ö¸´£¬1Ϊ±£´æ 0ΪÕý³£ÏÂÏß
PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
DataRecordPack.DR_PlayerLogin(curPlayer) # ·Å×îºó£¬¼Ç¼µÈ¼¶¡¢¾ÑéµÈÐÅÏ¢
return
def DoPlayerRealLoginOK(curPlayer, tick):
''' Íæ¼Ò×îÖյǼ³É¹¦´¦Àí£¬ ÓÉ GameServerRefresh GameSever_PlayerInitOK µ÷ÓÃ
¸Ãº¯ÊýΪµØÍ¼×îÖյǼ³É¹¦²Å»áÖ´Ðе½£¬ÒÔºóһЩ¹¦ÄÜÀàµÄµÇ¼´¦Àí½¨Òé¾ùдµ½ÕâÀï
¾ÉµÄ¹¦ÄÜÏȲ»¶¯( __DoPlayerLoginServer º¯ÊýÖеŦÄÜ)£¬Èç¹ûÓеǼÏà¹ØµÄbugÔÙ¿¼ÂÇÊÇ·ñÒÆ¶¯µ½´Ëº¯Êý
'''
GameWorld.Log("MapServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
if GameWorld.IsCrossServer():
pass
else:
PlayerMail.OnPlayerLogin(curPlayer)
PlayerChatBox.OnPlayerLogin(curPlayer)
PlayerFace.OnPlayerLogin(curPlayer)
PlayerXiangong.OnPlayerLogin(curPlayer)
PlayerGubao.OnPlayerLogin(curPlayer)
PlayerShentong.OnPlayerLogin(curPlayer)
PlayerZhanling.OnPlayerLogin(curPlayer)
PlayerTask.OnPlayerLogin(curPlayer)
PlayerTree.OnPlayerLogin(curPlayer)
PlayerMineArea.OnPlayerLogin(curPlayer)
PlayerGuaji.OnPlayerLogin(curPlayer)
PlayerActFamilyGCZ.OnPlayerLogin(curPlayer)
PlayerTalk.OnPlayerLogin(curPlayer)
# ÉÏÏß²éѯһ´Î³äÖµ¶©µ¥
curPlayer.SendDBQueryRecharge()
# ֪ͨGameServerµØÍ¼×îÖյǼ³É¹¦ÁË
isMixServerFirstLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MixServerFirstLogin)
msg = str([isMixServerFirstLogin])
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "PlayerRealLoginOK", msg, len(msg))
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
def __FirstLoginOnEnter(curPlayer):
## Ê׵Ǵ¦Àí
playerID = curPlayer.GetID()
if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FirstLogin):
return
GameWorld.Log('Íæ¼ÒÊǵÚÒ»´Î½øÈëÓÎÏ·', playerID)
# ÌØÊâ˵Ã÷£º Èç¹ûµØÍ¼Ã»ÓÐÍêÈ«³õʼ»¯ºÃ£¬¿Í»§¶Ë¶Ï¿ª»òÕßÒì³£µÈÇé¿ö»á´¥·¢RunGateGameServerMapServerKickOutPlayerNoSave
# ÄÇôÔÚDoPlayerLogin ÖÐÉèÖõÄÊý¾Ý½«²»»á±»±£´æ£¬ Èç»áµ¼ÖµÚÒ»¸öÈÎÎñÖØ¸´´¥·¢ÎÊÌ⣬¼Ç¼¶à´Î·¢ËÍ
EventReport.WriteEvent_Entry(curPlayer, 4)
#EventReport.EventReport(ShareDefine.Def_UserAction_FirstLogin, "", curPlayer)
#---²¹ÂúѪÂúħ---
GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer))
curPlayer.SetMP(curPlayer.GetMaxMP())
#ĬÈÏ´¥·¢Ò»´Î¹¦ÄÜ¿ªÆô
if curPlayer.GetLV() == 1:
GameFuncComm.DoFuncOpenLogic(curPlayer)
#³õʼ»¯×é¶Ó״̬
autoJoinReqCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 1)
autoInviteCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 2)
PlayerControl.SetTeamCheckStateEx(curPlayer, int(not autoJoinReqCheck), int(not autoInviteCheck))
#Íæ¼ÒĬÈ϶ñÃûÖµ
curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue)
#curPlayer.SetDict("ThunderLogin", 1)
#¼Ç¼µÚÒ»´ÎµÇ½
DataRecordPack.DR_FirstLogin(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)
#Ê×µÇÓʼþ
mailList = IpyGameDataPY.GetFuncEvalCfg("MailLVAward", 2)
for mailTypeKey, mailItemList in mailList:
PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FirstLogin, 1)
return
def __DoMixServerFirstLogin(curPlayer):
## ºÏ·þÊ׵Ǵ¦Àí
isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
if not isMixServer:
return
playerID = curPlayer.GetPlayerID()
lastMixServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_LastMixServerDay)
playerDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixLoginDay)
if playerDay == lastMixServerDay:
GameWorld.DebugLog("±¾´ÎºÏ·þÒѾµÇ¼¹ý. lastMixServerDay=%s" % (lastMixServerDay), playerID)
return
mixServerWorldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_LastMixServerWorldLV) # ºÏ·þʱµÄÊÀ½çµÈ¼¶
GameWorld.Log("Íæ¼ÒºÏ·þÊ׵Ǵ¦Àí! lastMixServerDay=%s,mixServerWorldLV=%s" % (lastMixServerDay, mixServerWorldLV), playerID)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDay, lastMixServerDay)
if curPlayer.GetLV() <= 1:
GameWorld.Log(" ÐºŲ»¸øºÏ·þ½±Àø!", playerID)
return
curPlayer.SetDict(ChConfig.Def_PlayerKey_MixServerFirstLogin, 1)
# ÖØÖÃÊ׳äË«±¶
PlayerCoin.DoResetCTGCount(curPlayer, "MixServer")
# ÖØÖÃÉ̵깺Âò´ÎÊý£¬Ôݶ¨Ö»ÖØÖÃÀàÐÍ 7 µÄ
FunctionNPCCommon.ResetShopItemBuyCount(curPlayer, [7])
# ºÏ·þÓʼþ£¬ÃËÖ÷רÊôÓʼþÔÚGameServer´¦Àí
mailItemList = IpyGameDataPY.GetFuncEvalCfg("MixServerMail", 1)
worldLVMailItemList = IpyGameDataPY.GetFuncEvalCfg("MixServerMail", 2)
mailMoneyList = IpyGameDataPY.GetFuncEvalCfg("MixServerMail", 3)
worldLVDown = IpyGameDataPY.GetFuncCfg("MixServerMail", 5) # µÈ¼¶µ¤Ïà¶ÔºÏ·þÊÀ½çµÈ¼¶²îÖµ
itemWorldLV = max(150, mixServerWorldLV - worldLVDown)
gold, silver = mailMoneyList
worldLVItemList = []
for itemID, itemCount, isBind in worldLVMailItemList:
itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
if not itemData:
continue
curEff = itemData.GetEffectByIndex(0)
curEffID = curEff.GetEffectID()
if curEffID != ChConfig.Def_Effect_ItemAddLV:
continue
lvLimit = curEff.GetEffectValue(1)
if not lvLimit:
continue
if lvLimit <= itemWorldLV:
worldLVItemList = [[itemID, itemCount, isBind]]
else:
break
detailDict = {"MixServerWorldLV":mixServerWorldLV, "LastMixServerDay":lastMixServerDay, "ItemWorldLV":itemWorldLV}
addItemList = mailItemList + worldLVItemList
GameWorld.Log(" ·¢ËͺϷþ²¹³¥Óʼþ: itemWorldLV=%s,addItemList=%s" % (itemWorldLV, addItemList), playerID)
PlayerControl.SendMailByKey("MixServer1", [playerID], addItemList, gold=gold, silver=silver, detail=detailDict)
# ͬ²½ÅÅÐаñ
PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
# ÌìÐÇËþÈ«·þ¹ý¹Ø¼Ç¼
GameLogic_SkyTower.OnMixFirstLogin(curPlayer)
# bossƾ֤
PlayerActBossTrial.OnMixFirstLogin(curPlayer)
# ÏÉÏ»ÃØ¾³
PlayerActXianXiaMJ.OnMixFirstLogin(curPlayer)
# ¹Å±¦Ñø³É
PlayerActGubao.OnMixFirstLogin(curPlayer)
# Æï³èÑø³É
PlayerActHorsePetTrain.OnMixFirstLogin(curPlayer)
# ÖØÖÃÍæ¼Ò¸ÄÃû´ÎÊý
#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:
rolePack = itemManager.GetPack(packIndex)
rolePack.Sync_Refresh()
# Ë¢ÏÂ×°±¸ÆÀ·Ö£¬²Ö¿â¿ÉÒÔÔݲ»´¦Àí£¬È¡³ö×°±¸ºóµÇ¼´¥·¢Ë¢ÐÂ
for i in xrange(rolePack.GetCount()):
curItem = rolePack.GetAt(i)
if curItem.IsEmpty():
continue
newScore = ItemCommon.CalcEquipGS(curItem)
hisScore = ItemCommon.GetEquipGearScore(curItem)
if hisScore != newScore:
ItemCommon.SetEquipGearScore(curItem, newScore)
GameWorld.Log("µÇ¼¸üÐÂ×°±¸ÆÀ·Ö: packType=%s,i=%s,hisScore=%s,newScore=%s,itemID=%s,guid=%s"
% (packIndex, i, hisScore, newScore, curItem.GetItemTypeID(), curItem.GetGUID()), curPlayer.GetPlayerID())
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):
sendPack = ChPyNetSendPack.tagMCPlayerSkills()
sendPack.Clear()
sendPack.Skills = []
skillManager = curPlayer.GetSkillManager()
for i in range(skillManager.GetSkillCount()):
curSkill = skillManager.GetSkillByIndex(i)
#curSkill.Sync_Skill()
skillInfo = ChPyNetSendPack.tagPlayerSkill()
skillInfo.SkillID = curSkill.GetSkillID()
skillInfo.RemainTime = curSkill.GetRemainTime()
skillInfo.Proficiency = curSkill.GetProficiency()
sendPack.Skills.append(skillInfo)
sendPack.Count = len(sendPack.Skills)
NetPackCommon.SendFakePack(curPlayer, sendPack)
return
#---------------------------------------------------------------------
##Í¨ÖªÍæ¼ÒbuffÐÅÏ¢
#@param curPlayer Íæ¼ÒʵÀý
#@return ·µ»ØÖµÎÞÒâÒå
#@remarks Í¨ÖªÍæ¼ÒbuffÐÅÏ¢
def __Sync_ClientBuff(curPlayer):
__SyncClearBuff(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()
return
def __SyncClearBuff(curPlayer):
clientPack = ChNetSendPack.tagClearObjBuff()
clientPack.Clear()
clientPack.ObjType = curPlayer.GetGameObjType()
clientPack.ObjID = curPlayer.GetID()
clientPack.BuffType = 99 # 99´ú±íÇåËùÓÐ
NetPackCommon.SendFakePack(curPlayer, clientPack)
return
#---------------------------------------------------------------------
##ÉÏÏßʱ֪ͨÀëÏßʱ¼ä£¨ÀëÏß¹Ò»ú¹¦ÄÜ£©
# @param curPlayer Íæ¼ÒʵÀý
# @param tick ʱ¼ä´Á
# @return ·µ»ØÖµÎÞÒâÒå
# @remarks ÉÏÏßʱ֪ͨÀëÏßʱ¼ä£¨ÀëÏß¹Ò»ú¹¦ÄÜ£©
def __Sync_PlayerOffline(curPlayer, tick):
#---µÈ¼¶ÏÞÖÆ---
if GameWorld.IsCrossServer():
return
#===============================================================================
# #---µÈ¼¶ÏÞÖÆ---
# lvLimit = ReadChConfig.GetEvalChConfig('OfflineSys_LVLimit')
# if curPlayer.GetLV() < lvLimit:
# return
#
# if GameWorld.IsCrossServer():
# 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
#---------------------------------------------------------------------
##Íæ¼ÒÔÚµØÍ¼·þÎñÆ÷ÖеǼ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)
#ÇеØÍ¼ÒªÇå³ýµÄbuff
__CheckClearBuffOnMapChange(curPlayer, tick)
if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
#¸±±¾µØÍ¼ÉÏÏßÇл»²Å¼ÓÎÞµÐbuff
SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick)
#Ë¢ÐÂÍæ¼ÒµÄÊÓÒ°
if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or PlayerControl.GetCustomMapID(curPlayer)):
GameWorld.DebugLog("===µÇ¼±¾·þµØÍ¼Ê±£¬´¦ÓÚ¿ç·þ»ò×Ô¶¨Ò峡¾°×´Ì¬£¬²»Ë¢ÐÂÊÓÒ°!", curPlayer.GetPlayerID())
PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
elif not GameWorld.IsCrossServer():
realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer)
if realmDifficulty:
GameWorld.DebugLog("===µÇ¼±¾·þµØÍ¼Ê±£¬´¦ÓÚ¾³½çÄѶȵØÍ¼£¬×Ô¶¯ÉèÖÃÄѶÈ! realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID())
PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty)
PlayerState.ChangePlayerSigh(curPlayer, tick)
if GameWorld.IsCrossServer():
curPlayer.SetForbiddenSyncClientState(False)
playerControl = PlayerControl.PlayerControl(curPlayer)
#Ë¢ÐÂËùÓÐ״̬
playerControl.ReCalcAllState()
if GameWorld.IsCrossServer():
curPlayer.SetForbiddenSyncClientState(True)
#Ë¢ÐÂÒÑ·ÖÖÓµ¥Î»ÏûºÄµÄÎïÆ·(²»ÈÃÍæ¼ÒÒ»ÉÏÏ߾͵ôÄ;Ã)
curPlayer.SetProcessEquipDurgTick(tick)
#³õʼ»¯Íæ¼Òµ±Ç°ÉÏÏßʱ¼ä
curPlayer.SetLoginTick(tick)
#µÇ¼ÐµØÍ¼£¬ÖØÖüÆËãÔÚÏßʱ³¤tick
curPlayer.SetDict(ChConfig.Def_PlayerKey_CalcOLTimeTick, tick)
#³õʼ»¯Íæ¼ÒµÄÖØÉúµã
PlayerControl.RefreshRebornPoint(curPlayer, tick)
#Ç¿ÖÆ¼ÇÂ¼Íæ¼ÒµÄһЩÐÅÏ¢
SavePlayerMessionInDataServer(curPlayer)
#¼ì²é¸üÐÂ×ÜÕ½¶·Á¦
#PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer, True)
EventReport.WriteEvent_FightPower(curPlayer)
#Çå³ýÔÚ±¾µØÍ¼ÀëÏ߼ǼÐÅÏ¢
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)
try:
InitLoginPlayer(curPlayer, tick)
DoPlayerLogin(curPlayer, tick)
#Ëø×¡Íæ¼Ò, µÈµ½¶ÁÈ¡µØÍ¼³É¹¦, ÔÙ½âËø
curPlayer.SetCanMove(False)
curPlayer.SendToBServerServerInitOK() #֪ͨrouteµÇ¼³É¹¦ £¬routeÏò¿Í»§¶Ë·¢ËÍ0109°ü
OnAllServerInitOK(curPlayer, tick)
#µ½´Ë´¦ÒѾ¿ÉÒÔ±£´æÊý¾Ý£¬¼´Ê¹¿Í»§¶Ë²»»Ø°ü¶ÏÏß
#Ô //01 07 µØÍ¼¶ÁÈ¡OK#tagCInitMapOK Âß¼ Ö±½Óµ÷ÓÃ
__Func_LoadMapOK(index, tick)
GameServerRefresh.GameSever_PlayerInitOK(index, tick)
except:
curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
import traceback
GameWorld.RaiseException("Íæ¼ÒÉÏÏßÂß¼´íÎó\r\n%s" % traceback.format_exc())
return
#---------------------------------------------------------------------
##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()
#---³õʼ»¯×Ô¼ºµÄÕÙ»½ÊÞ---
#===========================================================================
# for i in range(curPlayer.GetSummonCount()):
# curSummon = curPlayer.GetSummonNPCAt(i)
# #³õʼ»¯µ±Ç°ÕÙ»½ÊÞ״̬
# SkillCommon.SetSummonNPCProperty(curPlayer, curSummon)
# summonControl = NPCCommon.NPCControl(curSummon)
# #¸üгðºÞ
# summonControl.ClearNPCAngry()
# #Ë¢ÐÂNPC״̬/buff
# summonControl.RefreshNPCState()
# #Òòµ±Ç°ÑªÁ¿ÏÈË¢,×î´óѪÁ¿ºóË¢£¬ÓпÉÄܵ±Ç°ÑªÁ¿´óÓÚ×î´óѪÁ¿
# GameObj.SetHPFull(curSummon)
#===========================================================================
#³õʼ»¯³èÎï ֪ͨ¿Í»§¶Ë
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(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem))
curPack.Sync_PackCanUseCount()
#³õʼ»¯ÉñÊÞ×°±¸±³°ü
curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzEquip))
curPack.Sync_PackCanUseCount()
#³õʼ»¯À¬»ø·ÖÀà±³°ü
curPack = itemManager.GetPack(ShareDefine.rptGarbage)
curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptGarbage))
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(ItemCommon.GetPackInitCount(IPY_GameWorld.rptEquip))
#³õʼ»¯À¬»øÍ°
#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(ItemCommon.GetPackInitCount(ShareDefine.rptPet))
#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 __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())
#Ë¢ÐÂ×Ô¼ºµÄÊÓÒ°
if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene)):
GameWorld.DebugLog("===±¾·þLoadMapOKÊ±Íæ¼Ò´¦ÓÚ¿ç·þ»ò×Ô¶¨Ò峡¾°×´Ì¬£¬²»ÉèÖÿɼû£¡", curPlayer.GetPlayerID())
PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
elif not GameWorld.IsCrossServer():
realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer)
if realmDifficulty:
GameWorld.DebugLog("===±¾·þLoadMapOKÊ±Íæ¼Ò´¦ÓÚ¾³½çÄѶȵØÍ¼£¬×Ô¶¯ÉèÖÃÄѶȣ¡realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID())
PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty)
curPlayer.RefreshView()
curPlayer.SetVisible(True)
#Èç¹ûÍæ¼ÒhpΪ0,ÉèÖÃÍæ¼ÒΪËÀÍö״̬
if GameObj.GetHP(curPlayer) <= 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)
PlayerTeam.PlayerLoginSetTeam(curPlayer, tick)
#¼¤»îÍæ¼Ò(±£Ö¤³ÖÐøÐÔBuff´¦Àí¼ä¸ô)
PlayerControl.SetIsNeedProcess(curPlayer, True)
#³õʼ»¯GM²Ù×÷
PlayerGMOper.DoGMOperLogic(curPlayer, tick)
#Èç¹ûµÇ¼µÄ¸±±¾,Ö´ÐнøÈ븱±¾Âß¼, ÒòΪÓÐʱ¼äÏìÓ¦, ±ØÐëÔÚEndLoadMapÖ®ºó...
FBLogic.DoEnterFBLogic(curPlayer, tick)
#´¥·¢Çл»µØÍ¼³èÎïÂß¼
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 GameObj.GetHP(curPlayer) <= 0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
#Èç¹ûÍæ¼ÒÉÏÏߺóËÀÍö,»Ø³Ì¸´»î
isLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LoadMapIsLogin)
rebornType = ChConfig.rebornType_City if isLogin else ChConfig.rebornType_System
if GameWorld.IsCrossServer():
rebornType = 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()
#·ÀÖ¹Íæ¼Ò¶ÁÈ¡µØÍ¼Ê±Î´´¥·¢OnDay£¬¶ÁÈ¡µØÍ¼ºóÔÙ´ÎÑéÖ¤(2009.9.11)
PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
#ÉèÖÃÕóÓª
if curPlayer.GetFaction() != ChConfig.CampType_Neutral \
and FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID()) not in ChConfig.Def_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)
PlayerYinji.OnLoadMap(curPlayer)
ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount() # Ë¢ÐÂ×°±¸Õ䯷ÐǼ¶
#EndLoadMapÐè·ÅÔÚ×îºó, 0403 tagPlayerLoginLoadOK
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
#// B2 06 Íæ¼Ò¼Óµã #tagCMAddPoint
#
#struct tagCMAddPoint
#{
# tagHead Head;
# BYTE PointAttrIDCount; // ¼ÓµãÊôÐÔID¸öÊý
# BYTE PointAttrIDList[PointAttrIDCount]; // ¼ÓµãÊôÐÔIDÁбí
# WORD PointValueList[PointAttrIDCount]; // ¼ÓµãÊôÐÔID¶ÔÓ¦µÄµãÊýÁбí
#};
def OnAddPoint(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
pointAttrIDList = clientData.PointAttrIDList
pointValueList = clientData.PointValueList
if not pointAttrIDList or not pointValueList or len(pointAttrIDList) != len(pointValueList):
return
needTotalPoint = 0
for i, attrID in enumerate(pointAttrIDList):
if not IpyGameDataPY.GetIpyGameData("RolePoint", attrID):
return
needTotalPoint += pointValueList[i]
curFreePoint = curPlayer.GetFreePoint()
if needTotalPoint > curFreePoint:
GameWorld.DebugLog("Ê£ÓàµãÊý²»×ã! curFreePoint(%s) < needTotalPoint(%s)" % (curFreePoint, needTotalPoint))
return
curPlayer.SetFreePoint(curFreePoint - needTotalPoint)
for i, attrID in enumerate(pointAttrIDList):
addPoint = pointValueList[i]
curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID)
updPoint = curPoint + addPoint
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AddPointValue % attrID, updPoint)
GameWorld.DebugLog("Íæ¼Ò¼Óµã: attrID=%s,curPoint=%s,addPoint=%s,updPoint=%s" % (attrID, curPoint, addPoint, updPoint))
NotifyPlayerBasePoint(curPlayer, pointAttrIDList)
playerControl = PlayerControl.PlayerControl(curPlayer)
playerControl.RefreshPlayerAttrState()
PlayerControl.SetLingGenMaxIndex(curPlayer)
return
#// B2 07 ÖØÖüӵã #tagCMResetAttrPoint
#struct tagCMResetAttrPoint
#{
# tagHead Head;
#};
def OnResetAttrPoint(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
ipyDataMgr = IpyGameDataPY.IPY_Data()
canResetIDList = [ipyDataMgr.GetRolePointByIndex(index).GetAttrID() for index in xrange(ipyDataMgr.GetRolePointCount())]
canReset = False
for attrID in canResetIDList:
curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID)
if curPoint:
canReset = True
break
if not canReset:
GameWorld.DebugLog('ÖØÖüӵã ûÓеãÊýÐèÒªÖØÖÃ')
return
isFree = curPlayer.GetLV() < IpyGameDataPY.GetFuncCfg('LVUPAddPoint', 4)
if not isFree:
#ÓÅÏÈʹÓÃÊ£Óàʱ¼ä×î¶ÌµÄʱЧÎïÆ·
needItemIDList = IpyGameDataPY.GetFuncEvalCfg('LVUPAddPoint', 5)
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
delIndex = -1
expireTime = 0
for itemID in needItemIDList:
hasEnough, itemIndexList = ItemCommon.GetItem_FromPack_ByID(itemID, itemPack, 10)
if not itemIndexList:
#GameWorld.DebugLog("ÖØÖüӵã item(%s) isn't enough" % (needItemID))
continue
for itemIndex in itemIndexList:
curItem = itemPack.GetAt(itemIndex)
if not ItemCommon.CheckItemCanUse(curItem):
continue
isExpireItem, remainingTime = ItemCommon.GetItemRemainingTime(curItem)
if isExpireItem:
if remainingTime <= 0:
#¹ýÆÚ
continue
if not expireTime or remainingTime < expireTime:
expireTime = remainingTime
delIndex = itemIndex
else:
delIndex = itemIndex
break
if delIndex != -1:
break
if delIndex is -1:
return
ItemCommon.ReduceItem(curPlayer, itemPack, [delIndex], 1, False, ChConfig.ItemDel_ResetAttrPoint)
Item_ResetAttrPoint.DoResetAttrPoint(curPlayer, 0, 0, 0)
return
def NotifyPlayerBasePoint(curPlayer, syncAttrIDList=[]):
# ֪ͨ»ù´¡ÊôÐԵ㣬ÒÑ·ÖÅäµÄ×ÔÓɵãÊý
if not syncAttrIDList:
ipyDataMgr = IpyGameDataPY.IPY_Data()
syncAttrIDList = [ipyDataMgr.GetRolePointByIndex(index).GetAttrID() for index in xrange(ipyDataMgr.GetRolePointCount())]
pointAttrIDList = []
pointValueList = []
for attrID in syncAttrIDList:
curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID)
pointAttrIDList.append(attrID)
pointValueList.append(curPoint)
pointInfo = ChPyNetSendPack.tagMCRolePointInfo()
pointInfo.PointAttrIDList = pointAttrIDList
pointInfo.PointValueList = pointValueList
pointInfo.PointAttrIDCount = len(pointAttrIDList)
NetPackCommon.SendFakePack(curPlayer, pointInfo)
return
#===============================================================================
# //B4 14 ¸ù¾ÝÀàÐÍÀ´¾ö¶¨Òƶ¯µÄ·½Ê½ #tagMCMoveByType
#
# struct tagMCMoveByType
# {
# tagHead Head;
# DWORD ID; //Íæ¼ÒID
# WORD PosX; // Ä¿±êX
# WORD PosY; // Ä¿±êY
# BYTE MoveType; //ÒÆ¶¯·½Ê½
# };
#===============================================================================
def OnMoveByType(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#Íæ¼ÒÒÆ¶¯Í¨Óüì²é
if not __CheckPlayerCanMove(curPlayer):
return
#ÏÈÑé֤Ŀ±êµãÊÇ·ñºÏ·¨
if not GameWorld.GetMap().CanMove(clientData.PosX, clientData.PosY):
return
curPlayer.StopMove()
curPlayer.ChangePos(clientData.PosX, clientData.PosY)
sendPack = ChPyNetSendPack.tagMCMoveByType()
sendPack.Clear()
sendPack.ID = curPlayer.GetID()
sendPack.ObjType = curPlayer.GetGameObjType()
sendPack.PosX = clientData.PosX
sendPack.PosY = clientData.PosY
sendPack.MoveType = clientData.MoveType
PlayerControl.PyNotifyAll(curPlayer, sendPack, False, -1)
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 GameObj.GetHP(curTag) ==0:
# return
#
# #ÓëÄ¿±êÏà²î̫Զ
# if GameWorld.GetDist(curTag.GetPosX(), curTag.GetPosY(), clientData.PosX, clientData.PosY) > 6:
# return
#===========================================================================
#³¬³öÊÓÒ°£¬ºó¶Ë²»ÑéÖ¤£¬Ç°¶ËÑéÖ¤¼´¿É£¬·ÀÖ¹±»À»Ø
#if curPlayer.GetSight() and GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), clientData.PosX, clientData.PosY) > curPlayer.GetSight():
# return
#Íæ¼ÒÒÆ¶¯Í¨Óüì²é
if not __CheckPlayerCanMove(curPlayer):
return
#ÏÈÑé֤Ŀ±êµãÊÇ·ñºÏ·¨
if not GameWorld.GetMap().CanMove(clientData.PosX, clientData.PosY):
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
#ɾ³ýÓÐÏÞÎÞµÐ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
#---------------------------------------------------------------------
##ÑéÖ¤Íæ¼ÒÊÇ·ñ¿ÉÒÔÒÆ¶¯.
# @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 GameObj.GetHP(curPlayer) <= 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
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
#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
##ÒÆ¶¯µã¼ì²é, 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
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()
#¸´»îÀàÐÍ
rebornType = sendPack.GetType()
GameWorld.DebugLog("Íæ¼Òµã»÷¸´»î: rebornType=%s" % rebornType, curPlayer.GetPlayerID())
if GameWorld.IsCrossServer():
GameWorld.DebugLog("¿ç·þ·þÎñÆ÷²»½ÓÊܸ´»îÇëÇó!")
return
if PlayerControl.GetCrossMapID(curPlayer):
OnReqCrossServerReborn(curPlayer, rebornType)
return
#FBÖнûÖ¹¸´»î
if FBLogic.DoFBForbidReborn(curPlayer, rebornType):
PlayerControl.NotifyCode(curPlayer, "Reborn_lhs_31379")
return
#Íæ¼Ò¸´»î
if PlayerRebornByType(curPlayer, rebornType, tick):
#Íæ¼Ò¸´»î³É¹¦,ÅжÏÊÇ·ñÔÚ¸±±¾Öи´»î
PlayerReborn_InFB(curPlayer, rebornType, tick)
return
def OnReqCrossServerReborn(curPlayer, rebornType):
## ÇëÇó¿ç·þ·þÎñÆ÷¸´»îÍæ¼Ò
crossMapID = PlayerControl.GetCrossMapID(curPlayer)
if not crossMapID:
GameWorld.DebugLog("µ±Ç°ÎÞ¿ç·þµØÍ¼!")
return
if not __CheckCanReborn(curPlayer, rebornType, checkHPState=False):
return
msgDict = {"PlayerID":curPlayer.GetPlayerID(), "RebornType":rebornType}
GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_Reborn, msgDict)
GameWorld.DebugLog("¿ç·þÖÐÇëÇó¸´»î, crossMapID=%s,msgDict=%s" % (crossMapID, msgDict), curPlayer.GetPlayerID())
return
def ClientServerMsg_Reborn(curPlayer, msgData, serverGroupID, tick):
## ÊÕµ½×Ó·þÇëÇó¸´»îÐÅÏ¢
rebornType = msgData["RebornType"]
gameMap = GameWorld.GetMap()
if not __CheckCanReborn(curPlayer, rebornType, gameMap):
return
isAddReviveTired = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsAddReviveTired)
# ¿ç·þ·þÎñÆ÷²»Ö´ÐÐÏûºÄ£¬¸´»îºóͬ²½ÏûÏ¢»ØÖ÷·þ¿Û³ýÏûºÄ
__DoPlayerReborn(curPlayer, rebornType, tick)
# ·¢Ëͻر¾·þ¸´»î½á¹û
msgInfo = {"Result":1, "ReviveTired":isAddReviveTired}
msgInfo.update(msgData)
GameWorld.SendMsgToClientServer(ShareDefine.CrossServerMsg_RebornRet, msgInfo, [serverGroupID])
return
def CrossServerMsg_RebornRet(curPlayer, msgData, tick):
## ÊÕµ½¿ç·þ·þÎñÆ÷¸´»î½á¹û
result = msgData["Result"]
if result != 1:
return
rebornType = msgData["RebornType"]
isAddReviveTired = msgData["ReviveTired"]
__RebornCost(curPlayer, rebornType, True)
if isAddReviveTired:
__AddReviveTired(curPlayer, 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
#---------------------------------------------------------------------
##C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß
#@param index Íæ¼ÒË÷Òý
#@param tick ʱ¼ä´Á
#@return ·µ»ØÖµÎÞÒâÒå
#@remarks C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß
def PlayerDisconnect(index, tick):
GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick)
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.RaiseException("Íæ¼ÒÏÂÏßÂß¼´íÎó\r\n%s" % traceback.format_exc())
RecvPackToMapDB.MapCallDB(GetPackSaveData(curPlayer))
#µ÷ÓõײãÊ¹Íæ¼ÒÏÂÏß
curPlayer.DoDisconnect(tick)
# ¼ò»¯c++µÄ±£´æÊý¾Ý·â°ü
def GetPackSaveData(curPlayer):
roleSaveData = base64.b64decode(curPlayer.GetPackData()) # base64¼ÓÃÜÁË
allData = ""
allData = CommFunc.WriteBYTE(allData, IPY_ServerDefine.gstUpdate)
allData = CommFunc.WriteString(allData, len(roleSaveData), roleSaveData)
return allData
##Íæ¼ÒÕý³£ÏÂÏß
#@param curPlayer Íæ¼ÒË÷Òý
#@param tick ʱ¼ä´Á
#@return ·µ»ØÖµÎÞÒâÒå
#@remarks C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß
def DoPlayerDisconnect(curPlayer, tick):
GameWorld.Log("PlayerDisconnect!" , curPlayer.GetPlayerID())
#ÏÂÏßÁË£¬½«´æ´¢ÔÚ×ÖµäÖеÄÕæÊµXPÖµ£¬ÉèÖøøÍæ¼Ò£¬Íê³É֪ͨºÍ´æ´¢
#curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue))
#######################################################################
#ÏÂÏßÂß¼
PlayerControl.PlayerLeaveServer(curPlayer, tick)
#######################################################################
#Éè¶¨Íæ¼ÒµÄÏÂÏßʱ¼ä
curPlayer.SetLogoffTime(GameWorld.GetCurrentDataTimeStr())
#Á÷Ïò¼ÇÂ¼Íæ¼ÒÏÂÏß
DataRecordPack.DR_PlayerDisconnect(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_PlayerKey_CrossRegisterMap, 0)
#ÏÂÏßÕٻسèÎï
PetControl.ReCallFightPet(curPlayer)
#ÀëÏß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 29 ÉèÖÃСÖúÊÖ #tagCMSetLittleHelper
#
#struct tagCMSetLittleHelper
#{
# tagHead Head;
# BYTE SetNum; // Íйܹ¦ÄÜÉèÖñàºÅ1~20£¬Ã¿¸ö±àºÅ¶ÔÓ¦µÄÍйܹ¦ÄÜǰ¶Ë×Ô¶¨Òå
# DWORD Value1; // ×Ô¶¨ÒåÖµ1
# DWORD Value2; // ×Ô¶¨ÒåÖµ2
# DWORD Value3; // ×Ô¶¨ÒåÖµ3
# DWORD Value4; // ×Ô¶¨ÒåÖµ4
# DWORD Value5; // ×Ô¶¨ÒåÖµ5
# DWORD Value6; // ×Ô¶¨ÒåÖµ6
#};
def OnSetLittleHelper(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
setNum = clientData.SetNum
if setNum > ChConfig.LittleHelperSetNumCount:
GameWorld.ErrLog("СÖúÊÖ²»Ö§³Ö¸ÃÉèÖñàºÅ! setNum=%s" % setNum, curPlayer.GetPlayerID())
return
for i in xrange(1, ChConfig.LittleHelperValueCount + 1):
if not hasattr(clientData, "Value%s" % i):
GameWorld.ErrLog("СÖúÊÖ²»Ö§³Ö¸ÃÖµ±àºÅÉèÖÃ! setNum=%s,value%s" % (setNum, i), curPlayer.GetPlayerID())
continue
value = getattr(clientData, "Value%s" % i)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_LittleHelperValue % (setNum, i), value)
GameWorld.DebugLog("СÖúÊÖÖµÉèÖÃ: setNum=%s,value%s=%s" % (setNum, i, value), curPlayer.GetPlayerID())
return
def SyncLittleHelper(curPlayer):
## ͬ²½Ð¡ÖúÊÖÉèÖ㬽öÓÐÖµµÄͬ²½
funcSetList = []
for setNum in xrange(ChConfig.LittleHelperSetNumCount + 1):
funcSet = None
for i in xrange(1, ChConfig.LittleHelperValueCount + 1):
value = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_LittleHelperValue % (setNum, i))
if not value:
continue
if not funcSet:
funcSet = ChPyNetSendPack.tagMCLittleHelperFuncSet()
funcSet.SetNum = setNum
if hasattr(funcSet, "Value%s" % i):
setattr(funcSet, "Value%s" % i, value)
if funcSet:
funcSetList.append(funcSet)
if not funcSetList:
return
setPack = ChPyNetSendPack.tagMCLittleHelperSet()
setPack.FuncSetList = funcSetList
setPack.FuncSetCount = len(setPack.FuncSetList)
NetPackCommon.SendFakePack(curPlayer, setPack)
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
## Íæ¼Ò״̬±ä¸ü
# @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
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 GameObj.GetHP(curPlayer) > 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 GameObj.GetHP(curPlayer) > 0 :
#µ÷ÓÃ×Ô¶¯»ØÄ§
PlayerControl.PlayerAutoRestoreMP(curPlayer, tick)
return
#//03 0A ¸ü¸Ä¹¥»÷ģʽ#tagCChangeAttackMode
##¸Ä±äÍæ¼Ò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
#===============================================================================
# //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
#---------------------------------------------------------------------
##¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔÍ£Ö¹ÒÆ¶¯
#@param curPlayer Íæ¼ÒʵÀý
#@return ·µ»ØÖµÎÞÒâÒå
#@remarks ¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔÍ£Ö¹ÒÆ¶¯
def CheckPlayerStopMove(curPlayer):
if not curPlayer.GetMapLoadOK() :
#Íæ¼ÒµØÍ¼¶ÁȡΪ³É¹¦, Ìß³öÕâÈË
#curPlayer.Kick(IPY_GameWorld.disPlayerMovedWhenNotPrepare)
#GameWorld.Log("Íæ¼ÒµØÍ¼¶ÁȡûÓгɹ¦")
return
if GameObj.GetHP(curPlayer) == 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)
GameWorld.Log("µØÍ¼Çл»Ê§°Ü", curPlayer.GetID())
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 and curPlayer.GetMapID() not in IpyGameDataPY.GetFuncEvalCfg("MapLine", 4):
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
if GameWorld.IsCrossServer():
# ¿ç·þ·þÎñÆ÷ÎÞ·¨ÇÐÏß
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.GetPlayerVehicle() not in ChConfig.Def_PlayerChangLine_Vehicle:
#GeRen_liubo_760310 ¶Ô²»Æð£¬Äú´¦ÓÚѺÔË״̬ÖУ¬ÎÞ·¨Çл»Ïß·! 256 -
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_760310")
return False
return True
def GetRebronTime(curPlayer, rebornType):
''' ËÀÍö״̬²ÅÑé֤ʱ¼ä£¬±¾·þ¿ç·þͨÓÃ
¿ç·þ·þÎñÆ÷ËÀÍöµÄ¸´»îÒ²ÊÇÏÈ·¢µ½±¾·þ£¬Õý³£Çé¿öϱ¾·þÊÇ»î×ŵģ¬ÎÞ·¨ÑéÖ¤
ËùÒÔ¿É·ñ¸´»îÓÉ¿ç·þ·þÎñÆ÷ËÀÍö״̬ϵÄÍæ¼ÒʵÀýÅжϣ¬¼òµ¥½²¾ÍÊÇÄĸö·þÎñÆ÷ËÀÍöµÄÄĸö·þÎñÆ÷ÅжÏ
ËùÒԸú¯Êý¿ÉÒÔÖ±½ÓʹÓÃÍæ¼ÒËùÔڵĵØÍ¼ÅжÏ
'''
# ·ÇËÀÍö״̬Ï£¬Ò²¾ÍÊÇÄĸö·þÎñÆ÷½ÇÉ«ËÀÍöÓÉÄĸö·þÎñÆ÷ÅжÏ
if GameObj.GetHP(curPlayer) > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
return 0
# »Ø³Ç¸´»îµÄ²ÅÐèÒªCD
if rebornType not in [ChConfig.rebornType_City, ChConfig.rebornType_MainCity]:
return 0
# ¸±±¾µØÍ¼CD
mapType = GameWorld.GetMap().GetMapFBType()
if mapType != IPY_GameWorld.fbtNull:
fbRebornTimeDict = IpyGameDataPY.GetFuncEvalCfg('DuplicatesRebornTime', 1)
curMapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
if curMapID in fbRebornTimeDict:
return fbRebornTimeDict[curMapID]
return fbRebornTimeDict.get(0, 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
## ËÀÍöÀäȴʱ¼äÊÇ·ñÍêÁË
#@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
#---------------------------------------------------------------------
def __CheckCanReborn(curPlayer, rebornType, gameMap=None, checkHPState=True):
''' ¼ì²é¿É·ñ¸´»î£¬ÎªÁËÂ߼ͳһ£¬ÕâÀï²»ÊÊÓÃÍæ¼ÒËùÔڵĵØÍ¼£¬Ö§³Ö¿ç·þ״̬ÏÂÅжϿç·þµØÍ¼
±¾º¯Êý²»ÑéÖ¤Íæ¼ÒËÀÍö״̬µÈ£¬ÒòΪÓпÉÄÜǰºó¶Ë¸´»î״̬²»Ò»Ö£¬Èç¹ûÕâÀïÀ¹×¡¿ÉÄܵ¼ÖÂǰ¶ËÌÉʬ¸´»î²»ÁË
'''
if checkHPState and GameObj.GetHP(curPlayer) > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
# µ±ÑªÁ¿´óÓÚ0ÊÕµ½¸´»îÇëÇóʱ£¬Ò»°ãÊÇǰºó¶Ë¸´»î״̬²»Ò»ÖµÄÇé¿öϵ¼ÖµÄ
# ÓÉÓÚǰ¶ËÐèÒª¸ù¾Ý¸´»î״̬Åжϸ´»î½çÃæÏà¹ØÂß¼£¬ËùÒÔÕâÀïÐèÒª×öÒ»Ð©ÌØÊâ´¦Àí£¬·ÀֹijЩÇé¿öÏÂǰºó¶Ë¸´»î״̬²»Ò»Öµ¼ÖµÄһЩÒì³£ÎÊÌâ
# ºó¶Ë·ÇËÀÍö״̬µÄÇé¿ö£¬²¹Í¬²½Ò»´Î¸´»î°ü¸øÇ°¶Ë
SyncPlayerReborn(curPlayer, rebornType)
return
if rebornType not in ChConfig.Def_RebornTypeList:
return
## ÓÉÓÚ±¾·þ¼°¿ç·þµØÍ¼Êý¾Ý²»»¥Í¨£¬ËùÒÔÕâÀï¸ù¾ÝÊÇ·ñÓеØÍ¼Êý¾Ý½øÐÐÅжϴ¦Àí
if gameMap:
playerID = curPlayer.GetPlayerID()
if rebornType in [ChConfig.rebornType_Health, ChConfig.rebornType_UseItem] and not gameMap.GetLocalReborn():
GameWorld.ErrLog("¸ÃµØÍ¼²»¿ÉԵظ´»î! mapID=%s,rebornType=%s" % (gameMap.GetMapID(), rebornType), curPlayer.GetPlayerID())
return
# ÑéÖ¤¸´»îCD
rebornCD = GetRebronTime(curPlayer, rebornType)
if rebornCD:
curTime = int(time.time())
deadTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_DeadTime)
if curTime - deadTime < rebornCD:
PlayerControl.NotifyCode(curPlayer, "RebornCD")
GameWorld.Log("¸´»îÀäȴʱ¼äÖУ¬ÎÞ·¨¸´»î! curTime(%s) - deadTime(%s) < rebornCD(%s)" % (curTime, deadTime, rebornCD), playerID)
return
# ÑéÖ¤¸´»îÏûºÄ£¬ÔÚ±¾·þÑéÖ¤£¬¿ç·þ·þÎñÆ÷Ö»Ñé֤״̬
if not GameWorld.IsCrossServer():
if not __RebornCost(curPlayer, rebornType, False):
return
# ¸±±¾¶îÍâÑéÖ¤
if not FBLogic.OnCanFBReborn(curPlayer, rebornType):
return
return True
def __RebornCost(curPlayer, rebornType, isDoCost):
## ¿Û³ý¸´»îÏûºÄ
# @param isDoCost: ÊÇ·ñÖ´ÐÐÏûºÄ
crossMapID = PlayerControl.GetCrossMapID(curPlayer)
playerID = curPlayer.GetPlayerID()
if rebornType == ChConfig.rebornType_Health:
rebornCfg = IpyGameDataPY.GetFuncEvalCfg('RebornArguments', 1)
moneyPrice = rebornCfg[2]
costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, moneyPrice)
if not costMoneyList:
GameWorld.ErrLog("»õ±Ò²»×㣬ÎÞ·¨ÔµØ¸´»î! moneyPrice=%s" % (moneyPrice), playerID)
return
if isDoCost:
for moneyType, moneyCnt in costMoneyList:
if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_Revive):
return
elif rebornType == ChConfig.rebornType_UseItem:
if crossMapID == ChConfig.Def_FBMapID_CrossBattlefield:
rebornItemID = IpyGameDataPY.GetFuncCfg("CrossBattlefieldReborn", 1)
rebornItem = ItemCommon.FindItemInPackByItemID(curPlayer, rebornItemID, IPY_GameWorld.rptItem)
else:
rebornItem = ItemCommon.FindItemInPackByEffectEx(curPlayer, ChConfig.Def_Effect_Reborn)
if not rebornItem:
GameWorld.ErrLog("¸´»îµÀ¾ß²»×㣬ÎÞ·¨ÔµØ¸´»î! ", playerID)
return
if isDoCost:
ItemCommon.DelItem(curPlayer, rebornItem, 1, True, "Reborn")
return True
def __DoPlayerReborn(curPlayer, rebornType, tick, mapBornPlace=0, isAddSuperBuff=True):
## Ö´ÐÐÍæ¼Ò¸´»îÂß¼£¬¸Ãº¯ÊýûÓÐÖ´ÐÐÑéÖ¤ÊÇ·ñ¿É¸´»îµÈ£¬²»¿ÉÖ±½Óµ÷ÓÃ
resetHpPercent = ChConfig.Def_MaxRateValue
isFBReborn = False
if rebornType == ChConfig.rebornType_City:
if FBLogic.OnPlayerReborn():
isFBReborn = True
else:
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsReBorn, 1)
elif rebornType == ChConfig.rebornType_MainCity:
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsReBorn, 2)
#֪ͨ¿Í»§¶ËÍæ¼Ò¸´»î³É¹¦
curPlayer.Reborn(rebornType)
#Ö´ÐÐÍæ¼Ò¸±±¾¸´»î
if isFBReborn:
FBLogic.OnResetFBRebornPlacePos(curPlayer, mapBornPlace, tick)
#¸´»î¼ÓÎÞµÐBuff
if isAddSuperBuff:
SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer , ChConfig.Def_SkillID_LimitSuperBuff, tick)
#¸´»îÆ£ÀÍBUff
if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsAddReviveTired):
__AddReviveTired(curPlayer, tick)
#¸´»îºóÇå³ý½ÇÉ«ÉíÉϵĴòBOSSºÍPK״̬
validTime = IpyGameDataPY.GetFuncCfg("PKConfig", 4) * 1000
if PlayerState.IsInPKState(curPlayer):
PlayerState.SetPKStateTick(curPlayer, tick - validTime)
if PlayerState.IsInBossState(curPlayer):
PlayerState.SetBossStateTick(curPlayer, tick- validTime)
#ÖØËãÊôÐÔ
playerControl = PlayerControl.PlayerControl(curPlayer)
playerControl.RefreshAllState()
#ÉèÖÃѪÁ¿
GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer) * resetHpPercent / ChConfig.Def_MaxRateValue)
#curPlayer.SetMP(curPlayer.GetMaxMP() * resetMpPercent / ChConfig.Def_MaxRateValue)
#»¤¶Ü
PlayerControl.SetProDef(curPlayer, PlayerControl.GetMaxProDef(curPlayer))
#Íæ¼Ò¸´»îºó¸±±¾´¦Àí
FBLogic.OnPlayerRebornOver(curPlayer, rebornType)
gameMap = GameWorld.GetMap()
#ÕϰµãÖÐԵظ´»î, ´ò»ØÖØÉúµã
if (rebornType == ChConfig.rebornType_City and not isFBReborn) \
or not GameWorld.GetMap().CanMove(curPlayer.GetPosX(), curPlayer.GetPosY()) \
or (rebornType == ChConfig.rebornType_MainCity and gameMap.GetRebornMapID() == curPlayer.GetMapID()):
#Íæ¼ÒÇл»µ½ÖØÉúµã
playerControl.SetToBornPlace()
elif rebornType == ChConfig.rebornType_MainCity:
#Ö±½ÓÈ¡dbÖÐÅäÖõĸ´»îµã
PlayerControl.PlayerResetWorldPos(curPlayer, gameMap.GetRebornMapID(), gameMap.GetRebornMapX(), gameMap.GetRebornMapY())
#ÖØÐÂÕÙ»½³èÎï
PlayerPet.AutoSummonPet(curPlayer)
#¸´»î³É¹¦,ÖØÖÃ״̬
PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)
return
def __AddReviveTired(curPlayer, tick):
## Ôö¼Ó¸´»îÆ£ÀÍ
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)
return
def PlayerRebornByType(curPlayer, rebornType, tick, mapBornPlace=0, isAddSuperBuff=True):
''' Íæ¼Ò¸´»î
'''
gameMap = GameWorld.GetMap()
if not __CheckCanReborn(curPlayer, rebornType, gameMap):
return
if not GameWorld.IsCrossServer():
if not __RebornCost(curPlayer, rebornType, True):
return
__DoPlayerReborn(curPlayer, rebornType, tick, mapBornPlace, isAddSuperBuff)
return True
#---------------------------------------------------------------------
##¸±±¾½Ó¿Ú:Íæ¼Ò¸´»î
#@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
#---------------------------------------------------------------------
#// C1 05 ½øÈë¿ç·þµØÍ¼ #tagCMEnterCrossServer
#
#struct tagCMEnterCrossServer
#{
# tagHead Head;
# DWORD DataMapID;
# WORD LineID;
#};
def OnEnterCrossServer(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
PlayerControl.PlayerEnterCrossServer(curPlayer, clientData.DataMapID, clientData.LineID)
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
#// 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 GameWorld.IsCrossServer():
if curPlayer.GetMapID() != mapID:
return
lineID = -1 # ¿ç·þĬÈÏÖ»Äܱ¾Ïß
#ÊÀ½ç´«ËÍ·â°üÔÊÐíÀàÐÍ£¨ÊÀ½ç£¬´óµØÍ¼£¬ÈÎÎñ£©
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
#ÊÇÈÎÎñ´«ËÍ£¬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 lineID Ïß·ID -1´ú±íµ±Ç°Ïß
# @param msg Çл»µØÍ¼Ð¯´øµÄÐÅÏ¢
# @param canLock ÊÇ·ñ¿ÉÒÔËø¶¨Íæ¼Ò(´«Ë͵㲻¿ÉËø¶¨, ÒòΪҪ¿çµØÍ¼Ñ°Â·)
# @return: ÊÇ·ñÔÚÀ½ø¶ÈÌõ
def BeginTrans(curPlayer, mapID, posX, posY, 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, 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, IPY_GameWorld.TYPE_Price_Gold_Paper, costMoney, transportType):
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):
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):
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
#===============================================================================
##//A2 05 ÇëÇó¶Ò»»ÀëÏß¾Ñé·â°ü#tagPyCMOfflineExpExchange
#@param index Íæ¼ÒË÷Òý
#@param curPackData ·â°ü½á¹¹Ìå
#@param tick ʱ¼ä´Á
#@return ·µ»ØÖµÎÞÒâÒå
#@remarks ÀëÏß¾Ñé¶Ò»»
def PlayerExpExchange(index, curPackData, tick):
# ¿ç·þ·þÎñÆ÷¹¦ÄÜÏÞÖÆ
if GameWorld.IsCrossServer():
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
#//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 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
#
#struct tagCMPlayerGetReward
#
#{
# tagHead Head;
# BYTE RewardType; //½±ÀøÀàÐÍ
# DWORD DataEx; //¸½´øÐÅÏ¢
# BYTE DataExStrLen; //¸½¼Ó×Ö·ûÐÅÏ¢³¤¶È
# char DataExStr[DataExStrLen]; //¸½¼Ó×Ö·ûÐÅÏ¢
#};
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_ActivityPlace:
PlayerActivity.GetActivityPlaceReward(curPlayer)
# ¹Ò»ú½±Àø
elif rewardType == ChConfig.Def_RewardType_Guaji:
PlayerGuaji.OnGetGuajiAward(curPlayer, dataEx)
# ÿÈÕÃâ·ÑÖ±¹ºÀñ°ü
elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
# ÏÉÃËÁªÈü¹Ú¾üÏÉÃËÿÈÕٺ»½±Àø
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_GoldGiftFirst:
PlayerGoldGift.GetPlayerGoldGiftFirst(curPlayer, dataEx)
# ÁìÈ¡¼«Æ·°×ÄÃ
elif rewardType == ChConfig.Def_RewardType_FreeGoods:
PlayerFreeGoods.OnGetFreeGoods(curPlayer, dataEx)
# ÁìÈ¡Ïû·Ñ·µÀû½±Àø
elif rewardType == ChConfig.Def_RewardType_CostRebate:
PlayerCostRebate.OnGetCostRebateAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡ÀۼƳäÖµ½±Àø
elif rewardType == ChConfig.Def_RewardType_TotalRecharge:
PlayerActTotalRecharge.OnGetTotalRechargeAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡¶àÈÕÁ¬³äÁìÈ¡
elif rewardType == ChConfig.Def_RewardType_ManyDayRecharge:
PlayerActManyDayRecharge.OnGetManyDayRechargeAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡µ¥±ÊÀÛ³äÁìÈ¡
elif rewardType == ChConfig.Def_RewardType_SingleRecharge:
PlayerActSingleRecharge.OnGetSingleRechargeAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡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 == ChConfig.Def_RewardType_WishingWell:
PlayerWishingWell.DoGetWishingAward(curPlayer)
# ¹¦ÄÜ¿ªÆô½±Àø
elif rewardType == ChConfig.Def_RewardType_OpenFunc:
GameFuncComm.GetFuncOpenAward(curPlayer, dataEx)
# ±ù¾§¿óÂöÐǼ¶½±Àø
elif rewardType == ChConfig.Def_RewardType_IceLodeStar:
GameLogic_IceLode.GetIceLodeStarAward(curPlayer, dataEx)
# ÁìÈ¡ÖÜ¿ñ»¶»î¶¯½±Àø
elif rewardType == ChConfig.Def_RewardType_WeekPartyAct:
PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡ÖÜ¿ñ»¶»ý·Ö½±Àø
elif rewardType == ChConfig.Def_RewardType_WeekPartyPoint:
PlayerWeekParty.GetWeekPartyPointAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡µÇ¼½±Àø»î¶¯½±Àø
elif rewardType == ChConfig.Def_RewardType_ActLoginAwardAct:
PlayerActLogin.GetLoginAwardActionAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡ÐÂÏɽçÊ¢µä³äÖµ´óÀñ
elif rewardType == ChConfig.Def_RewardType_NewFairyCRecharge:
PlayerNewFairyCeremony.GetFCRechargeAward(curPlayer)
# ÁìÈ¡ÐÂÏɽçÊ¢µäÈ«ÃñÀ´àË
elif rewardType == ChConfig.Def_RewardType_NewFairyCParty:
PlayerNewFairyCeremony.GetFCPartyAward(curPlayer, dataEx)
# ÁìÈ¡½ÚÈÕѲÀñ»î¶¯½±Àø
elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyAct:
PlayerFeastWeekParty.GetFeastWeekPartyActionAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡½ÚÈÕѲÀñ»ý·Ö½±Àø
elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyPoint:
PlayerFeastWeekParty.GetFeastWeekPartyPointAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡½ÚÈյǼ½±Àø
elif rewardType == ChConfig.Def_RewardType_FeastLogin:
PlayerFeastLogin.GetFeastLoginAward(curPlayer, dataEx)
# ÁìÈ¡½ÚÈÕÓÎÀú½±Àø
elif rewardType == ChConfig.Def_RewardType_FeastTravel:
PlayerFeastTravel.GetFeastTravelAward(curPlayer, dataEx)
# ÁìÈ¡µÇ¼»î¶¯½±Àø
elif rewardType == ChConfig.Def_RewardType_ActLoginAwardNew:
PlayerActLoginNew.OnGetActLoginAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡¹ºÂò´ÎÊýÀñ°ü»î¶¯
elif rewardType == ChConfig.Def_RewardType_ActBuyCountGift:
PlayerActBuyCountGift.OnGetBuyCountGiftAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡ÈÎÎñ»î¶¯½±Àø
elif rewardType == ChConfig.Def_RewardType_ActTask:
PlayerActTask.OnGetActTaskAward(curPlayer, dataEx, dataExStr)
# ÁìÈ¡¿ç·þ³äÖµÅÅÐл´ï±ê½±Àø
elif rewardType == ChConfig.Def_RewardType_CACTGBillboardDabiao:
CrossActCTGBillboard.GetDabiaoAward(curPlayer, dataEx)
# ¿ç·þÈ«Ãñ³äÖµ½±Àø
elif rewardType == ChConfig.Def_RewardType_CAAllRecharge:
CrossActAllRecharge.GetCrossActAllRechargeAward(curPlayer, dataEx)
# ¿ç·þÑýħbossÉ˺¦½±Àø
elif rewardType == ChConfig.Def_RewardType_CrossYaomoBossHurt:
PlayerCrossYaomoBoss.GetCrossYaomoBossHurtAward(curPlayer, dataEx, tick)
# ¹Å±¦ÌØÊâЧ¹ûÎïÆ·½±Àø
elif rewardType == ChConfig.Def_RewardType_GubaoItemEff:
PlayerGubao.GetGubaoItemEffAward(curPlayer, dataEx, dataExStr)
# ³É¾Í»ý·Ö½±Àø
elif rewardType == ChConfig.Def_RewardType_SuccessScore:
PlayerSuccess.GetSuccessScoreAward(curPlayer, dataEx)
# ÂòÒ»ËͶà»î¶¯Ãâ·Ñ½±Àø
elif rewardType == ChConfig.Def_RewardType_BuyOne:
PlayerActBuyOne.GetBuyOneFreeAward(curPlayer, dataEx, dataExStr)
# ÏÉÃ˳äÖµ»¥Öú»î¶¯½±Àø
elif rewardType == ChConfig.Def_RewardType_FamilyCTGAssist:
PlayerActFamilyCTGAssist.GetFamilyCTGAssistAward(curPlayer, dataEx, dataExStr)
# ÏÉÃ˹¥³ÇÕ½»î¶¯½±Àø
elif rewardType == ChConfig.Def_RewardType_FamilyGCZ:
PlayerActFamilyGCZ.GetFamilyGCZAward(curPlayer, dataEx, tick)
# ÌìµÀÊ÷½±Àø
elif rewardType == ChConfig.Def_RewardType_TiandaoTree:
PlayerXiangong.GetTiandaoTreeAward(curPlayer, dataEx)
# Ѱ±¦ÀۼƴÎÊý½±Àø
elif rewardType == ChConfig.Def_RewardType_TreasureCntAward:
PlayerTreasure.GetTreasureCntAward(curPlayer, dataEx, dataExStr)
# ÂֻصÀø
elif rewardType == ChConfig.Def_RewardType_LunhuidianAward:
PlayerActLunhuidian.GetLunhuidianAward(curPlayer, dataEx, dataExStr)
#çÎç¿ÆæÓöÁìÈ¡
elif rewardType == ChConfig.Def_RewardType_FairyAdventuresAward:
PlayerFairyDomain.GetFairyAdventuresAward(curPlayer, dataEx, dataExStr)
#ÀúÊ·ÀۼƳäÖµÁìÈ¡
elif rewardType == ChConfig.Def_RewardType_HistoryChargeAward:
PlayerGoldGift.OnGetHistoryRechargeAward(curPlayer, dataEx)
#ÔÚÏßÌØ»Ý³äÖµ¶îÍâ½±Àø
elif rewardType == ChConfig.Def_RewardType_OnlineRechargeTH:
PlayerCoin.OnGetOnlineRechargeTH(curPlayer)
#ÌìÐÇËþÈ«·þÌôÕ½²ãÁì½±
elif rewardType == ChConfig.Def_RewardType_SkyTowerServerChallengeReward:
GameLogic_SkyTower.OnGetSkyTowerServerChallengeReward(curPlayer, dataEx, dataExStr)
#´´½Ç½±Àø
elif rewardType == ChConfig.Def_RewardType_CreateRole:
OnGetCreateRoleAward(curPlayer)
#×Ô¶¨Òå½±Àø
elif rewardType == ChConfig.Def_RewardType_CustomAward:
PlayerCustomAward.OnGetCustomAward(curPlayer, dataEx)
#¾³½ç¶É½ÙÈÎÎñÌõ¼þ½±Àø
elif rewardType == ChConfig.Def_RewardType_RealmLVUpTask:
PlayerPrestigeSys.GetRealmLVUpTaskAward(curPlayer, dataEx)
#ÏÉÃËbossÉ˺¦½±Àø
elif rewardType == ChConfig.Def_RewardType_FamilyBossHurt:
GameLogic_FamilyBoss.GetFamilyBossHurtAward(curPlayer, dataEx, dataExStr)
#´ò°üÖ±¹ºÀñ°ü½±Àø
elif rewardType == ChConfig.Def_RewardType_DailyPackBuyGift:
PlayerGoldGift.GetDailyPackBuyGift(curPlayer, dataEx)
#ÈÎÎñ½±Àø
elif rewardType == ChConfig.Def_RewardType_Task:
PlayerTask.GetTaskAward(curPlayer, dataEx)
#Õ½Áî½±Àø
elif rewardType == ChConfig.Def_RewardType_Zhanling:
PlayerZhanling.GetZhanlingReward(curPlayer, dataEx, dataExStr)
#¸£µØ¾Û±¦Åè½±Àø
elif rewardType == ChConfig.Def_RewardType_MineTreasure:
PlayerMineArea.GetMineTreasureAward(curPlayer, dataEx)
#Íæ·¨Ç°Õ°½±Àø
elif rewardType == ChConfig.Def_RewardType_GameNotice:
OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_GameNoticeAwardState, IpyGameDataPY.GetFuncEvalCfg("GameNoticeReward", 1))
#ÿÈÕ·ÖÏí½±Àø34
elif rewardType == ChConfig.Def_RewardType_ShareGame:
OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_ShareGameAwardState, IpyGameDataPY.GetFuncEvalCfg("ShareGameReward", 1))
#ÓÎÏ·ºÃÆÀ½±Àø35
elif rewardType == ChConfig.Def_RewardType_GoodGame:
OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_GoodGameAwardState, IpyGameDataPY.GetFuncEvalCfg("GoodGameReward", 1))
#ÓÎÏ·µãÔÞ½±Àø67
elif rewardType == ChConfig.Def_RewardType_LikeGame:
OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_LikeGameAwardState, IpyGameDataPY.GetFuncEvalCfg("GoodGameReward", 4))
#ÁìÈ¡¿ª·þÿÈÕ½±Àø
elif rewardType == ChConfig.Def_RewardType_OpenServerDailyAward:
openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
openServerDayLimit = IpyGameDataPY.GetFuncCfg("OpenServerDailyAward", 1)
if openServerDay >= openServerDayLimit:
OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_OpenSererDailyAward, IpyGameDataPY.GetFuncEvalCfg("OpenServerDailyAward", 2), "OpenServerDailyAward")
#ÀÛ³äÿÈÕ½±Àø
elif rewardType == ChConfig.Def_RewardType_RechargeDayAward:
OnGetRechargeDayAward(curPlayer, rewardType)
return
def OnGetRechargeDayAward(curPlayer, rewardType):
## ÁìÈ¡ÀÛ³äÿÈÕ½±Àø£¬È¡×î¸ßµµ
realTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealTotal)
awardCoinRecord = awardCoin = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeDayAward) # ÒÑÁì½±µµÎ»Öµ
awardItemList = []
dayAwardDict = IpyGameDataPY.GetFuncEvalCfg("RechargeDayAward", 1, {})
for needCoinStr, itemList in dayAwardDict.items():
needCoin = int(needCoinStr)
if realTotal >= needCoin and needCoin > awardCoin:
awardCoin = needCoin
awardItemList = itemList
GameWorld.DebugLog("ÁìÈ¡ÀÛ³äÿÈÕ×î¸ßµµ½±Àø: awardCoinRecord=%s,realTotal=%s,awardCoin=%s,%s" % (awardCoinRecord, realTotal, awardCoin, awardItemList), curPlayer.GetPlayerID())
if not awardItemList:
return
if not ItemCommon.GiveAwardItem(curPlayer, awardItemList, "RechargeDayAward"):
return
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeDayAward, awardCoin)
Sync_RewardGetRecordInfo(curPlayer, rewardType, awardCoin)
return
## ÁìÈ¡´´½Ç½±Àø
def OnGetCreateRoleAward(curPlayer):
if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CreateRoleAwardState):
GameWorld.DebugLog("ÒÑÁìÈ¡´´½Ç½±Àø!")
return
if not ItemCommon.GiveAwardItem(curPlayer, IpyGameDataPY.GetFuncEvalCfg("CreateRoleAward")):
return
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CreateRoleAwardState, 1)
Sync_CreateRoleAwardInfo(curPlayer)
return
## ֪ͨ´´½ÇÁì½±¼Ç¼
def Sync_CreateRoleAwardInfo(curPlayer):
sendPack = ChPyNetSendPack.tagMCCreateRoleAwardState()
sendPack.Clear()
sendPack.GetState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CreateRoleAwardState)
NetPackCommon.SendFakePack(curPlayer, sendPack)
return
def OnGiveAwardByClient(curPlayer, rewardType, dictKey, awardCfg, eventName=""):
## ·¢·Åǰ¶Ë¿ØÖƵĽ±Àø£¬ºó¶ËÖ»¸ºÔ𷢷ޱÀø£¬ÊÇ·ñ¿ÉÁ콱ǰ¶Ë×ÔÐÐÅжÏ
if curPlayer.NomalDictGetProperty(dictKey):
GameWorld.DebugLog("ÒÑÁìÈ¡¹ý¸Ã½±Àø! rewardType=%s, dictKey=%s" % (rewardType, dictKey))
return
if not ItemCommon.GiveAwardItem(curPlayer, awardCfg, eventName):
return
PlayerControl.NomalDictSetProperty(curPlayer, dictKey, 1)
Sync_RewardGetRecordInfo(curPlayer, rewardType, 1)
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
#// A2 27 ²éѯµØÍ¼NPCÊýÁ¿ÐÅÏ¢ #tagCMQueryNPCCntInfo
#
#struct tagCMQueryNPCCntInfo
#{
# tagHead Head;
# DWORD MapID; // Ä¿±êµØÍ¼ID
# WORD LineID; // Ïß·ID
# BYTE IsNoTimeLimit;//ÊÇ·ñûÓвéѯʱ¼äÏÞÖÆ,ĬÈÏÓÐÏÞÖÆ
# BYTE NPCIDListLen;
# char NPCIDList[NPCIDListLen]; // ÐèÒª²éѯµÄNPCIDÁбí
#};
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
# ¸ÄΪ¿Í»§¶ËÖ÷¶¯ÇëÇó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
serverDateTime.CrossServerTime = GameWorld.GetCrossServerTimeStr()
# ֪ͨ¿Í»§¶Ëͬ²½Ê±¼ä
NetPackCommon.SendFakePack(curPlayer, serverDateTime)
return
## ֪ͨ¿ª·þÌìÊý
# @param curPlayer: Íæ¼ÒʵÀý
# @return: None
def Sync_OpenServerDay(curPlayer):
serverTime = GameWorld.GetCurrentTime()
if not serverTime:
return
clientPack = ChPyNetSendPack.tagMCOpenServerDay()
clientPack.Day = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_ServerDay)
clientPack.IsMixServer = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_IsMixServer)
clientPack.MixDay = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_MixServerDay)
clientPack.OpenWeekday = DBDataMgr.GetEventTrigMgr().GetValue(ShareDefine.Def_OpenServerWeekday)
clientPack.NowYear = serverTime.year
clientPack.NowMonth = serverTime.month
clientPack.NowDay = serverTime.day
clientPack.NowHour = serverTime.hour
clientPack.NowMinute = serverTime.minute
clientPack.NowSecond = serverTime.second
clientPack.NowMicSecond = serverTime.microsecond
clientPack.WeekOfYear = GameWorld.GetWeekOfYear()
NetPackCommon.SendFakePack(curPlayer, clientPack)
#¾É°üÏȱ£Áô£¬Ö®ºóɾ³ý
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
packData.WeekOfYear = GameWorld.GetWeekOfYear()
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)
MoveDistCalcTick = "PYMoveDistCalcTick"
MoveDistSum = "PYMoveDistSum"
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:
curPlayer.SetDict(MoveDistCalcTick, tick)
curPlayer.SetDict(MoveDistSum, 0)
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
calcTick = curPlayer.GetDictByKey(MoveDistCalcTick)
distSum = min(curPlayer.GetDictByKey(MoveDistSum) + dist, 100000000)
curPlayer.SetDict(MoveDistSum, distSum)
if distSum > IpyGameDataPY.GetFuncCfg("PyMoveCheck", 1):
speed = curPlayer.GetSpeed() # ÒÆ¶¯Ò»¸ñËùÐèºÁÃë
passCalcTick = tick - calcTick
needTick = distSum * speed
checkNeedTick = needTick * IpyGameDataPY.GetFuncCfg("PyMoveCheck", 2) / 100.0
if passCalcTick < checkNeedTick:
GameWorld.DebugLog(" dist=%s,distSum=%s,speed=%s,needTick=%s, ËùÐèÒÆ¶¯Ê±¼äÒì³£ passCalcTick(%s) < (%s)"
% (dist, distSum, speed, needTick, passCalcTick, checkNeedTick), curPlayer.GetID())
return False
#GameWorld.DebugLog(" dist=%s,distSum=%s,speed=%s,needTick=%s, ÑéÖ¤ÒÆ¶¯Ê±¼äÕý³£ passCalcTick(%s) < (%s)"
# % (dist, distSum, speed, needTick, passCalcTick, checkNeedTick), curPlayer.GetID())
curPlayer.SetDict(MoveDistCalcTick, tick)
curPlayer.SetDict(MoveDistSum, 0)
#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, 0)
return
def GiveDownloadPatchAward(curPlayer):
## ·¢·ÅÏÂÔØ²¹¶¡°ü½±Àø
playerID = curPlayer.GetPlayerID()
patchAwardNum = IpyGameDataPY.GetFuncCfg('DownReward', 4)
curAwardNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadPatchAward)
if curAwardNum == patchAwardNum:
GameWorld.DebugLog("ÒÑ·¢·ÅÏÂÔØ²¹¶¡°ü½±Àø! curAwardNum(%s) == patchAwardNum(%s)" % (curAwardNum, patchAwardNum), playerID)
return
awardItemList = IpyGameDataPY.GetFuncEvalCfg('DownReward', 3)
if not awardItemList:
return
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DownloadPatchAward, patchAwardNum)
GameWorld.DebugLog("·¢·Å²¹¶¡°üÏÂÔØ½±Àø: curAwardNum=%s,patchAwardNum=%s" % (curAwardNum, patchAwardNum), playerID)
PlayerControl.SendMailByKey("DownloadPatchAward", [playerID], awardItemList)
return
def GetDownloadAward(curPlayer, dataEx):
##·Ö°üÏÂÔØ½±Àø dataEx 0Ö±½ÓÁìÈ¡ 1·¢Óʼþ
playerID = curPlayer.GetPlayerID()
downloadAwardNum = IpyGameDataPY.GetFuncCfg('DownReward', 5)
curAwardNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState)
if curAwardNum == downloadAwardNum:
GameWorld.DebugLog("ÒÑÁìÈ¡·Ö°ü½±Àø! curAwardNum(%s) == downloadAwardNum(%s)" % (curAwardNum, downloadAwardNum), playerID)
return
awardItemList = IpyGameDataPY.GetFuncEvalCfg('DownReward', 1)
if not awardItemList:
return
# ¼ì²é±³°ü
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, downloadAwardNum)
GameWorld.DebugLog("ÁìÈ¡·Ö°üÏÂÔØ½±Àø: curAwardNum=%s,downloadAwardNum=%s" % (curAwardNum, downloadAwardNum), playerID)
if dataEx == 1:
PlayerControl.SendMailByKey('SubpackageDownload', [curPlayer.GetID()], awardItemList)
else:
for itemID, itemCnt, isBind in awardItemList:
ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
SyncPackDownloadAward(curPlayer)
return
def SyncPackDownloadAward(curPlayer):
#·Ö°üÏÂÔØ½±Àø¼Ç¼֪ͨ
downloadAwardNum = IpyGameDataPY.GetFuncCfg('DownReward', 5)
sendPack = ChPyNetSendPack.tagMCPackDownloadRecord()
sendPack.Clear()
sendPack.Record = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState) == downloadAwardNum
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
#// B4 0E Íæ¼ÒµôѪ #tagCMRoleLostHP
#
#struct tagCMRoleLostHP
#{
# tagHead Head;
# DWORD LostHP;
# DWORD LostHPEx;
#};
def OnRoleLostHP(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
lostHP = clientData.LostHP + clientData.LostHPEx * ShareDefine.Def_PerPointValue
curHP = GameObj.GetHP(curPlayer)
updHP = curHP - lostHP
if updHP <= 0:
#Íæ¼ÒÒѾËÀÍö
playerControl = PlayerControl.PlayerControl(curPlayer)
playerControl.SetDead()
else:
GameObj.SetHP(curPlayer, updHP)
return
#// A2 35 Ñ¡Ôñ¾³½çÄѶȲ㼶 #tagCMSelectRealmDifficulty
#
#struct tagCMSelectRealmDifficulty
#{
# tagHead Head;
# WORD RealmDifficulty; //¾³½çÄÑ¶È = 1000 + ËùÑ¡¾³½çµÈ¼¶£¬Èç¾³½ç13£¬Ôò·¢1013
#};
def OnSelectRealmDifficulty(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
PlayerControl.SetRealmDifficulty(curPlayer, clientData.RealmDifficulty)
return