#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
# @todo:
|
#
|
# @author: Alee
|
# @date 2017-12-1 ÏÂÎç01:37:09
|
# @version 1.0
|
#
|
# @note:
|
#
|
#---------------------------------------------------------------------
|
#µ¼Èë
|
import PlayerState
|
import IPY_GameWorld
|
import GameWorld
|
import PlayerControl
|
import GameMap
|
import ChConfig
|
import EventShell
|
import BuffSkill
|
import PlayerEventCounter
|
import PlayerTeam
|
import PlayerHorse
|
import PlayerTruck
|
import NPCCommon
|
import PlayerGameEvent
|
import SkillCommon
|
import FBLogic
|
import ChItem
|
import ItemCommon
|
import ItemControler
|
import ChEquip
|
import FunctionNPCCommon
|
import PlayerGMOper
|
import ReadChConfig
|
import PetControl
|
import OperControlManager
|
import ShareDefine
|
import PlayerAutoCheckOnline
|
import PlayerGameWallow
|
import NetPackCommon
|
import ChPyNetSendPack
|
import Operate_PlayerBuyZhenQi
|
import DataRecordPack
|
import PlayerBillboard
|
import UpdatePlayerName
|
import PlayerOnlinePrize
|
import PlayerLVAward
|
import PlayerGoldGift
|
import PlayerSignDay
|
import PlayerPet
|
import PlayerPrestigeSys
|
import PlayerFamily
|
import PlayerLoginDayAward
|
import PlayerGodWeapon
|
import PlayerWorldAverageLv
|
import PlayerGoldInvest
|
import PlayerActivity
|
import FBCommon
|
import PlayerBindJadeWheel
|
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 PlayerFairyDomain
|
import PlayerCrossRealmPK
|
import GameFuncComm
|
import PlayerMagicWeapon
|
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 PlayerDiceEx
|
import QuestCommon
|
import PlayerTJG
|
import GameLogic_XMZZ
|
import PlayerFlashSale
|
import PlayerFlashGiftbag
|
import PlayerDailyGiftbag
|
import PlayerCostRebate
|
import PlayerActGrowupBuy
|
import PlayerActCollectWords
|
import PlayerActTotalRecharge
|
import PlayerActRechargePrize
|
import PlayerSpringSale
|
import PlayerFairyCeremony
|
import PlayerNewFairyCeremony
|
import GY_Query_BossFirstKill
|
import PlayerFeastRedPacket
|
import PlayerLuckyTreasure
|
import Item_ResetAttrPoint
|
import CrossActCTGBillboard
|
import CrossRealmPlayer
|
import ChNetSendPack
|
import FamilyRobBoss
|
import FBHelpBattle
|
import PlayerArena
|
import PyGameData
|
import PlayerCoin
|
import PlayerGeTui
|
import PlayerDogz
|
import PlayerCoat
|
import PlayerFB
|
import SkillShell
|
import PlayerYinji
|
|
import datetime
|
import time
|
import math
|
import re
|
#---------------------------------------------------------------------
|
|
#---------------------------------------------------------------------
|
##C++µ÷Ó÷â°ü, µØÍ¼¿ªÆô³É¹¦, ³õʼ»¯ÐÅÏ¢
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks µØÍ¼¿ªÆô³É¹¦, ³õʼ»¯ÐÅÏ¢
|
def InitPlayer(tick):
|
return
|
|
#---------------------------------------------------------------------
|
##Íæ¼ÒµÇ½ÓÎÏ·³õʼ»¯
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks Íæ¼ÒµÇ½ÓÎÏ·³õʼ»¯
|
def InitLoginPlayer(curPlayer, tick):
|
##³õʼ»¯½»Ò×Áбí
|
if curPlayer.GetTradeList().GetTradeItemCount() == 0:
|
curPlayer.GetTradeList().SetTradeListCount(ChConfig.Def_PlayerTradeMaxItemCount)
|
|
#³õʼ»¯Íæ¼ÒµÄʱÖÓ¸öÊý
|
if curPlayer.GetTickTypeCount() == 0:
|
curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count)
|
|
#³õʼ»¯Íæ¼ÒÁÄÌìÆµµÀ
|
if curPlayer.GetMaxChannelCount() == 0:
|
curPlayer.SetMaxChannelCount(ChConfig.Def_PlayerTalkChannelMaxCount)
|
|
#===============================================================================
|
# #³õʼ»¯Íæ¼Ò¼ø¶¨¹ÜÀíÆ÷ÎïÆ·×î´ó¸öÊý
|
# identifyItemManager = curPlayer.GetIdentifyManager()
|
#
|
# #ÉèÖÃ×î´óÊýÁ¿
|
# if identifyItemManager.GetCount() == 0:
|
# identifyItemManager.SetCount(ChConfig.TYPE_Player_identifyManagerCount)
|
#
|
# #³õʼ»¯±¦Ê¯ÍÚ³ý¹ÜÀíÆ÷×î´ó¸öÊý
|
# stoneBreakManager = curPlayer.GetStoneBreakManager()
|
#
|
# if stoneBreakManager.GetCount() == 0:
|
# stoneBreakManager.SetCount(ChConfig.TYPE_Player_StoneBreakManagerCount)
|
#===============================================================================
|
#³õʼ»¯ÎïÆ·
|
#ChItem.InitPlayerLoginItem(curPlayer, tick)
|
PlayerControl.ClearUnLoginOKPlayerMailCache(curPlayer.GetPlayerID())
|
return
|
#---------------------------------------------------------------------
|
##C++·â°üGameServer_InitOK ´¦Àí
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ×Ô¶¨Ò庯Êý, C++·â°üGameServer_InitOK ´¦Àí
|
def OnAllServerInitOK(curPlayer, tick):
|
if FBLogic.PlayerLoginInFBCheck(curPlayer, tick):
|
#Íæ¼ÒÊǵÚÒ»´ÎµÇ¼, ²¢ÇÒÍæ¼ÒÐèÒªÌß»ØÔÀ´µØÍ¼
|
return
|
|
#--------------------------------֪ͨ¿Í»§¶ËÈÎÎñ-------------
|
#ÏÈ·¢ËÍËùÓÐÈÎÎñ, ÔÙË¢ÐÂÈÕÆÚ, ·ñÔò»áÓÐ2¸öÏàͬµÄÈÎÎñÔÚÍæ¼ÒÉíÉÏ
|
#°ÑÍæ¼Òµ±Ç°µÄËùÓÐÈÎÎñ·¢Ë͸ø¿Í»§¶Ë
|
#GameWorld.Log('EventShell.NotifyAllQuestDetail')
|
if not GameWorld.IsCrossServer():
|
EventShell.NotifyAllQuestDetail(curPlayer, True)
|
|
#Ë¢ÐÂÈËÎïÈÕÆÚ״̬
|
#GameWorld.Log('PlayerEventCounter.UpdatePlayerLoginTime')
|
PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
|
|
#2010/4/20 Õâ¸öʼþÔÚ EventResponse_OnLoginÖд¥·¢,ÕâÀïÖØ¸´´¥·¢ÁË
|
#GameWorld.Log('EventShell.PlayerGMEventTrig')
|
#EventShell.PlayerGMEventTrig(curPlayer)
|
#--------------------------------------------------------
|
return
|
|
##·ÇͬһÌì¶þ´ÎµÇ½
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @return None
|
def NoteOtherDayLogin(curPlayer):
|
#¼Ç¼¹ý»òÕßδµÇ½¹ý ²»¼Ç¼
|
if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_OtherDayLogin) != 1:
|
return
|
|
logoffTimeStr = curPlayer.GetLogoffTime().strip()
|
loginTimeStr = curPlayer.GetLoginTime().strip()
|
#curTimeStr = GameWorld.GetCurrentDataTimeStr()
|
|
#·À·¶ÍⲿÂß¼´íÎ󣬻òÒì³£Çé¿ö
|
if logoffTimeStr in ['', '0'] or loginTimeStr in ['', '0']:
|
return
|
|
logoffTimeDate = GameWorld.GetDateTimeByStr(logoffTimeStr.split()[0], ChConfig.TYPE_Time_Format_Day)
|
|
#ͬһÌì²»¼Ç¼
|
if logoffTimeDate == GameWorld.GetDateTimeByStr(loginTimeStr.split()[0], ChConfig.TYPE_Time_Format_Day):
|
return
|
|
#GameWorld.Log("OtherDayLogin offtime = %s" % logoffTimeDate)
|
|
DataRecordPack.DR_OtherDayLogin(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)
|
|
#±ê¼ÇΪÒѼǼ
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_OtherDayLogin, 2)
|
|
return
|
|
#// A1 08 Ë¢ÐÂÖ÷·þ½ÇÉ«ÐÅÏ¢ #tagCMRefreshMainServerRole
|
#
|
#struct tagCMRefreshMainServerRole
|
#{
|
# tagHead Head;
|
#};
|
def OnRefreshMainServerRole(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
Sync_DBPlayer(curPlayer)
|
|
# ËÀÍö¸´»î
|
if curPlayer.GetHP() <=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)
|
|
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.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()
|
NetPackCommon.SendFakePack(curPlayer, dbPlayer)
|
return
|
|
#---------------------------------------------------------------------
|
##Íæ¼ÒµÇ½ÓÎÏ·Âß¼´¦Àí
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks Íæ¼ÒµÇ½ÓÎÏ·Âß¼´¦Àí
|
def DoPlayerLogin(curPlayer, tick):
|
#ÕâÀïÖ»×ö³õʼ»¯Âß¼
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1)
|
#֪ͨʱ¼ä
|
Sync_PyServerDataTimeToClient(curPlayer)
|
Sync_OpenServerDay(curPlayer)
|
#Í¨ÖªÍæ¼Ò»ù±¾ÐÅÏ¢
|
curPlayer.Sync_ClientPlayerLogin()
|
|
#ͬ²½GameServer×Ô¼ºµÄµØÍ¼ID
|
curPlayer.Sync_GameServer_MapID()
|
|
# ÆÁ±Î¿ç·þϹرպÍ×Ó·þÖØ¸´µÄÊý¾ÝµÄ·¢ËÍ 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£¬ËùÒԵǼ¿ç·þºóÔÚ¿ç·þ·þÎñÆ÷ÒªÉèÖÃΪ¶ÔÓ¦µØÍ¼
|
|
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)
|
|
PlayerFamily.FamilyPlayerOnLoginCross(curPlayer)
|
|
PlayerTeam.OnPlayerLoginCrossServer(curPlayer)
|
|
#֪ͨÔËÐгɹ¦
|
curPlayer.BalanceServer_PlayerLoginInitOK()
|
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.PlayerItemControler(curPlayer).CheckRolePackEquipAttr()
|
#¸üзþÎñÆ÷×éID
|
PlayerControl.UpdPlayerServerGroupID(curPlayer)
|
|
#ÉÏÏßѧϰ¼¼ÄÜ
|
SkillCommon.PlayerLoginCheckLearnSkill(curPlayer)
|
|
#ˢм¼ÄÜCD
|
SkillCommon.PlayerLoginUpdateSkillCD(curPlayer, tick)
|
|
#Í¨ÖªÍæ¼Ò¼¼ÄÜÐÅÏ¢
|
__Sync_ClientSkill(curPlayer)
|
#Çå³ý¹ú¼Ò´ðÌâBuff
|
#PlayerExam.DoLogic_ExitExam(curPlayer, tick, needRefresh = False)
|
#Çå³ý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)
|
PlayerGodWeapon.OnLogin(curPlayer)
|
PlayerPrestigeSys.OnLogin(curPlayer)
|
DataRecordPack.DR_PlayerLogin(curPlayer)
|
EventReport.WriteEvent_login(curPlayer)
|
|
# ºÏ·þÊ׵Ǵ¦Àí
|
__DoMixServerFirstLogin(curPlayer)
|
PlayerBillboard.BillboardOnLogin(curPlayer)
|
|
#·ÇͬһÌì¶þ´ÎµÇ½, Ó¦¸Ã·ÅÔڸú¯ÊýÖеÄSetLoginTimeÖ®ºó£¬EventResponse_OnEnter֮ǰ
|
NoteOtherDayLogin(curPlayer)
|
|
#ÉÏÏßʱ֪ͨÍÑ»ú¹Òʱ±»»÷ɱµÄÀëÏßʱ¼ä
|
__Sync_PlayerOffline(curPlayer, tick)
|
|
#Íæ¼ÒÀ©Õ¹ÐÅÏ¢
|
__SyncPlayerInfoEx(curPlayer)
|
|
#PKģʽ
|
SyncPKModel(curPlayer)
|
|
#×°±¸Ïà¹ØÐÅÏ¢
|
ChEquip.OnPlayerEquipLoginLogic(curPlayer)
|
|
#´óʦ
|
PlayerGreatMaster.MasterOnLogin(curPlayer)
|
|
# ÍÆËÍÌáÐÑ
|
PlayerGeTui.LoginNotifySetting(curPlayer)
|
|
#֪ͨVIP
|
PlayerVip.DoOnLogin(curPlayer, tick)
|
|
#֪ͨ·¨±¦¾«Á¶µÈ¼¶
|
PlayerRefineStove.DoOnLogin(curPlayer, tick)
|
|
#---Íæ¼ÒÉÏÏß, ³èÎïÂß¼´¦Àí---
|
PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
|
|
#ÒªÔÚSetCanMoveÖ®ºó×öÕâ¸öÊÂÇé, ·ñÔòOnEnter²»»á¿¨×¡Íæ¼Ò
|
EventShell.EventResponse_OnEnter(curPlayer)
|
|
EventShell.EventResponse_OnLogin(curPlayer)
|
#֪ͨ»·½±Àø¼Ç¼
|
EventShell.NotifyRunEndAward(curPlayer)
|
#Í¨ÖªÍæ¼ÒÓв¹³¥¿ÉÒÔÁìÈ¡
|
#curPlayer.DataServer_GetExpiationCount()
|
|
#Í¨ÖªÍæ¼ÒÓгèÎï²¹³¥¿ÉÒÔÁìÈ¡
|
#curPlayer.DataServer_GetPetExpiationCount()
|
|
#Íæ¼ÒÀëÏßÓʼþ֪ͨ
|
#curPlayer.DataServer_GetMailListReq()
|
|
#Çå¿ÕÍæ¼ÒÍòÄܱ³°üÖеÄÈÎÎñÎïÆ·
|
ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere)
|
|
#PlayerLoginNotify(curPlayer, tick)
|
|
#·À³ÁÃÔ¼ÆËãÏÂÏßÀÛ»ýʱ¼ä
|
PlayerGameWallow.Calc_Wallow_OfflineTime(curPlayer, tick)
|
|
# ֪ͨµÈ¼¶½±ÀøÁìÈ¡¼Ç¼
|
PlayerLVAward.Sync_LVAwardGetRecordInfo(curPlayer)
|
|
PlayerCoin.OnLogin(curPlayer)
|
# Ê׳ä/ÌìÌìÊ׳ä/³äÖµºÀÀñ
|
PlayerGoldGift.OnLogin(curPlayer)
|
|
#֪ͨ¹ºÂò¹¦ÄÜÖи÷¹ºÂòÀàÐ͵ÄÒѹºÂòºÍ¿É¹ºÂò´ÎÊý
|
Operate_PlayerBuyZhenQi.DoPlayerLogin(curPlayer)
|
#
|
# #֪ͨ¹¦ÄÜÊ״δ¥·¢Çé¿ö
|
GameFuncComm.Sync_FuncOpenState(curPlayer)
|
#
|
# #֪ͨ¿Í»§¶ËÇ©µ½ÐÅÏ¢
|
PlayerSignDay.SignDayOnLogin(curPlayer)
|
#
|
# #֪ͨ¿Í»§¶ËïÚ³µAIģʽ
|
# PlayerTruck.Sync_TruckMode(curPlayer)
|
|
#Í¨ÖªÍæ¼ÒËÀÍöʱ¼ä
|
PlayerControl.PlayerControl(curPlayer).NotifyPlayerDeadTime(curPlayer)
|
#ClearPlayerDeadInfo(curPlayer)
|
|
#³äÖµ»î¶¯Íæ¼ÒµÇÈë´¦Àí
|
#PlayerGoldAction.DoLogic_PlayerOnLogin(curPlayer)
|
|
# Í¨ÖªÍæ¼ÒÊÇ·ñ¿ÉÒԲμӼÒ×å»î¶¯
|
#PlayerFamily.SendClientForbidFamilyAction(curPlayer)
|
# Ìáʾ¹ó±ö¾ãÀÖ²¿ÐÅÏ¢
|
#PlayerVip.NoteVIPClubInfo(curPlayer)
|
|
#½ÇÉ«¸ÄÃû´ÎÊý
|
UpdatePlayerName.Sync_UpdatePlayerNameCount(curPlayer)
|
|
#֪ͨÔËÐгɹ¦
|
curPlayer.BalanceServer_PlayerLoginInitOK()
|
|
# ×øÆïÏà¹ØÍ¨Öª
|
PlayerHorse.PlayerHorseLogin(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)
|
|
#ͬ²½×Ô¶¯Õ½¶·ÅäÖüǼ
|
# Sync_AutoFightSetting(curPlayer)
|
|
PlayerFamily.FamilyPlayerOnLogin(curPlayer, tick)
|
#¸Äµ½ GameServerRefresh GameSever_PlayerInitOKºó´¦Àí²ÅÄܱ£Ö¤Íæ¼ÒÒѾÔÚGameserver×¢²á
|
#PlayerDienstgrad.RefreshBillBoardDienstgrad(curPlayer)
|
# ³ÆºÅ
|
PlayerDienstgrad.Sync_AllDienstgradOnLogin(curPlayer)
|
# ×ÊÔ´ÕÒ»ØOnLogin
|
PlayerRecover.RecoverOnLogin(curPlayer)
|
|
# ʱװ
|
PlayerCoat.OnLogin_Coat(curPlayer)
|
|
# ¿ç·þPK
|
PlayerCrossRealmPK.DoPlayerLogin(curPlayer)
|
|
# ¾º¼¼³¡
|
PlayerArena.OnLogin(curPlayer)
|
|
# ×Ô¶¨Òå»õ±Òֵͬ²½
|
PlayerControl.NotifyPlayerAllCurrency(curPlayer)
|
#֪ͨ»ù´¡ÊôÐÔ
|
NotifyPlayerBasePoint(curPlayer)
|
|
#¿ç·þ³äÖµÅÅÐÐ
|
CrossActCTGBillboard.OnPlayerLogin(curPlayer)
|
#Ïû·Ñ·µÀû
|
PlayerCostRebate.OnPlayerLogin(curPlayer)
|
#ÀۼƳäÖµ
|
PlayerActTotalRecharge.OnPlayerLogin(curPlayer)
|
#³äÖµ·µÀû
|
PlayerActRechargePrize.OnPlayerLogin(curPlayer)
|
#³É³¤±ØÂò
|
PlayerActGrowupBuy.OnPlayerLogin(curPlayer)
|
#ÏÞÊ±ÌØ»Ý
|
PlayerSpringSale.OnPlayerLogin(curPlayer)
|
#ÏÞʱÀñ°ü
|
PlayerFlashGiftbag.OnPlayerLogin(curPlayer)
|
#ÿÈÕÀñ°ü
|
PlayerDailyGiftbag.OnPlayerLogin(curPlayer)
|
#ÏÞʱÇÀ¹º
|
PlayerFlashSale.OnPlayerLogin(curPlayer)
|
#¼¯×ֻ
|
PlayerActCollectWords.OnPlayerLogin(curPlayer)
|
# ÊÀ½çboss
|
BossHurtMng.OnLogin(curPlayer)
|
ChItem.Sync_ItemDayUseCnt(curPlayer)
|
# ÐüÉ͵Ǽ֪ͨ
|
#PlayerArrestTask.OnLogin(curPlayer)
|
# ·ûÓ¡µÇ¼֪ͨ
|
PlayerRune.PlayerRuneLogin(curPlayer)
|
# ÏÉÃ˺ì°üµÇ¼֪ͨ
|
PlayerFamilyRedPacket.OnPlayerLogin(curPlayer)
|
PlayerFeastRedPacket.DoPlayerOnLogin(curPlayer)
|
# ·¨±¦µÇ¼֪ͨ
|
PlayerMagicWeapon.PlayerMagicWeaponLogin(curPlayer)
|
# É̵êÎïÆ·¹ºÂò´ÎÊýµÇ¼֪ͨ
|
FunctionNPCCommon.ShopItemOnLogin(curPlayer)
|
# ֪ͨÉèÖõı»¶¯¹¦·¨
|
#PassiveBuffEffMng.OnLoginGFPassive(curPlayer)
|
#ÎÒҪ̫¼«
|
PlayerDiceEx.DiceExOnLogin(curPlayer)
|
# ¾çÇéÈÎÎñÍê³É״̬
|
QuestCommon.Sync_StoryMissionState(curPlayer)
|
#ÏÉħ֮Õù
|
GameLogic_XMZZ.OnXMZZLogin(curPlayer)
|
PlayerOnlinePrize.OnPlayerLogin(curPlayer)
|
#×°±¸·Ö½â
|
PlayerEquipDecompose.PlayerLogin(curPlayer)
|
#·À³ÁÃÔ
|
PlayerGameWallow.DoLogic_CheckWallow(curPlayer, tick)
|
# ֪ͨÍÑ»ú¹ÒÐÅÏ¢
|
PlayerTJG.NotifyTJGInfo(curPlayer)
|
|
# ¼«Æ·°×ÄÃ
|
PlayerFreeGoods.OnLogin(curPlayer)
|
# BOSS¸´»î»î¶¯
|
PlayerBossReborn.OnLogin(curPlayer)
|
# ÖÜ¿ñ»¶»î¶¯
|
PlayerWeekParty.OnLogin(curPlayer)
|
# ½ÚÈÕѲÀñ»î¶¯
|
PlayerFeastWeekParty.OnLogin(curPlayer)
|
# ½ÚÈյǼ»î¶¯
|
PlayerFeastLogin.OnPlayerLogin(curPlayer)
|
# ½ÚÈÕ×£¸£»î¶¯
|
PlayerFeastWish.OnPlayerLogin(curPlayer)
|
# ½ÚÈÕÓÎÀú»î¶¯
|
PlayerFeastTravel.OnPlayerLogin(curPlayer)
|
# µÇ¼½±Àø»î¶¯
|
PlayerActLogin.OnLogin(curPlayer)
|
# ÏɽçÊ¢µä»î¶¯
|
PlayerFairyCeremony.OnLogin(curPlayer)
|
# ÐÂÏɽçÊ¢µä»î¶¯
|
PlayerNewFairyCeremony.OnLogin(curPlayer)
|
# ·ÖÖ§ÏÂÔØ½±Àø¼Ç¼֪ͨ
|
SyncPackDownloadAward(curPlayer)
|
# µÇ¼´¥·¢¹¦ÄÜ¿ªÆô£¨ÀϺŴ¦Àí£©
|
GameFuncComm.DoFuncOpenLogic(curPlayer)
|
# ÉñÊÞ
|
PlayerDogz.OnPlayerLogin(curPlayer)
|
# Æï³è
|
FamilyRobBoss.OnPlayerLogin(curPlayer)
|
# °óÓñתÅÌ
|
PlayerBindJadeWheel.OnLogin(curPlayer)
|
# ÐíÔ¸³Ø
|
PlayerWishingWell.OnLogin(curPlayer)
|
#ÐÒÔ˼ø±¦
|
PlayerLuckyTreasure.OnLogin(curPlayer)
|
# ÉÏÏß²éѯһ´Î³äÖµ¶©µ¥
|
curPlayer.SendDBQueryRecharge()
|
# СÖúÊÖ
|
SyncLittleHelper(curPlayer)
|
# ÁÄÌìÆøÅÝ¿ò
|
SyncChatBubbleBoxState(curPlayer)
|
# ¸±±¾ÖúÕ½
|
FBHelpBattle.DoPlayerLogin(curPlayer)
|
# ¾Û»ê
|
PlayerGatherSoul.PlayerLogin(curPlayer)
|
#çÎç¿ÏÉÓò
|
PlayerFairyDomain.OnLogin(curPlayer)
|
PlayerFB.OnLogin(curPlayer)
|
#¼¼ÄÜר¾«ÐÅÏ¢
|
SkillShell.NotifyElementSkillInfo(curPlayer)
|
#BossÊ×ɱ
|
GY_Query_BossFirstKill.OnPlayerLogin(curPlayer)
|
#´´½Ç½±Àø
|
Sync_CreateRoleAwardInfo(curPlayer)
|
#ÿÈÕ·ÖÏí½±Àø
|
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)
|
|
curPlayer.SetState(0) # ÍÑ»ú¹Ò»Ö¸´ÎªÕý³£ÉÏÏß
|
curPlayer.SetFacePic(0) # ֪ͨÊý¾Ý¿âÊÇ·ñ±£´æ»¹ÊÇÏÂÏߣ¬×öÒ»´Î»Ö¸´£¬1Ϊ±£´æ 0ΪÕý³£ÏÂÏß
|
tjgTime = PlayerTJG.GetTJGTime(curPlayer)
|
if tjgTime:
|
curPlayer.SendGameServerRefreshState(IPY_GameWorld.CDBPlayerRefresh_HappyPoint, tjgTime)
|
|
PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
|
|
return
|
|
|
## Íæ¼ÒÀ©Õ¹ÐÅϢͬ²½
|
# @param curPlayer
|
# @return None
|
def __SyncPlayerInfoEx(curPlayer):
|
playerInfoEx = ChPyNetSendPack.tagMCPlayerInfo()
|
playerInfoEx.Clear()
|
playerInfoEx.IsAdult = curPlayer.IsAdult()
|
playerInfoEx.CreateRoleTime = curPlayer.GetCreateRoleTime()
|
|
NetPackCommon.SendFakePack(curPlayer, playerInfoEx)
|
return
|
|
## ºÏ·þÊ׵Ǵ¦Àí
|
# @param curPlayer
|
# @return None
|
def __DoMixServerFirstLogin(curPlayer):
|
isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
|
if not isMixServer:
|
return
|
|
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
|
|
# ÖØÖÃÊ׳äË«±¶
|
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
|
PlayerControl.SendMailByKey("MixServer1", [playerID], addItemList, gold=gold, silver=silver, detail=detailDict)
|
GameWorld.Log(" ·¢ËͺϷþ²¹³¥Óʼþ: itemWorldLV=%s,addItemList=%s" % (itemWorldLV, addItemList), playerID)
|
|
# ͬ²½ÅÅÐаñ
|
PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
|
|
# ÖØÖÃÍæ¼Ò¸ÄÃû´ÎÊý
|
#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):
|
curPlayer.GetBuffState().Sync_Buff()
|
curPlayer.GetDeBuffState().Sync_Buff()
|
curPlayer.GetAura().Sync_Buff()
|
curPlayer.GetIncBuff().Sync_Buff()
|
curPlayer.GetProcessBuffState().Sync_Buff()
|
curPlayer.GetProcessDeBuffState().Sync_Buff()
|
|
#---------------------------------------------------------------------
|
##ÉÏÏßʱ֪ͨÀëÏßʱ¼ä£¨ÀëÏß¹Ò»ú¹¦ÄÜ£©
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param tick ʱ¼ä´Á
|
# @return ·µ»ØÖµÎÞÒâÒå
|
# @remarks ÉÏÏßʱ֪ͨÀëÏßʱ¼ä£¨ÀëÏß¹Ò»ú¹¦ÄÜ£©
|
def __Sync_PlayerOffline(curPlayer, tick):
|
#---µÈ¼¶ÏÞÖÆ---
|
if GameWorld.IsCrossServer():
|
return
|
PlayerTJG.TJGDeadOffline(curPlayer)
|
|
#===============================================================================
|
# #---µÈ¼¶ÏÞÖÆ---
|
# 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)
|
|
#Í˳öµöÓãÇå³ýÓæ·ò×°
|
if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent:
|
PlayerGameEvent.StopGameEvent(curPlayer, tick)
|
else:
|
PlayerGameEvent.TakeoffFishermanEquipment(curPlayer)
|
#ÇеØÍ¼ÒªÇå³ýµÄ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())
|
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)
|
|
#Çå³ýÔÚ±¾µØÍ¼ÀëÏ߼ǼÐÅÏ¢
|
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)
|
|
#µÇ½·¢Í¼ÐÎÑéÖ¤Âë
|
PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, 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()
|
#֪ͨGameServeræô³µÏÖÔڵĵØÍ¼Î»ÖÃ
|
curTruck = curPlayer.GetTruck()
|
if curTruck != None:
|
curTruck.GameServer_Sync_TruckMapID()
|
|
#ïÚ³µÎÞµÐ
|
SkillCommon.AddBuffBySkillType_NoRefurbish(curTruck, ChConfig.Def_SkillID_LimitSuperBuff, tick)
|
|
#ÉèÖÃïÚ³µµÈ¼¶
|
truckLv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PawnTruckLV)
|
curTruck.SetLV(truckLv)
|
|
#¸ü¸ÄïÚ³µ¼Ç¼µÄ²¿·ÖÖ÷ÈËÐÅÏ¢
|
PlayerTruck.ChangeTruckNoteInfo(curPlayer)
|
|
#¸üÐÂïÚ³µ½øÅÅÐаñ
|
PlayerBillboard.UpdateBillboardPlayerTruck(curPlayer.GetPlayerID(), curPlayer.GetName(), curPlayer.GetOperateInfo(),
|
curPlayer.GetLV(), truckLv, curPlayer.GetMapID())
|
|
#---³õʼ»¯×Ô¼ºµÄÕÙ»½ÊÞ---
|
#===========================================================================
|
# for i in range(curPlayer.GetSummonCount()):
|
# curSummon = curPlayer.GetSummonNPCAt(i)
|
# #³õʼ»¯µ±Ç°ÕÙ»½ÊÞ״̬
|
# SkillCommon.SetSummonNPCProperty(curPlayer, curSummon)
|
# summonControl = NPCCommon.NPCControl(curSummon)
|
# #¸üгðºÞ
|
# summonControl.ClearNPCAngry()
|
# #Ë¢ÐÂNPC״̬/buff
|
# summonControl.RefreshNPCState()
|
# #Òòµ±Ç°ÑªÁ¿ÏÈË¢,×î´óѪÁ¿ºóË¢£¬ÓпÉÄܵ±Ç°ÑªÁ¿´óÓÚ×î´óѪÁ¿
|
# curSummon.SetHP(min(curSummon.GetHP() , curSummon.GetMaxHP()))
|
#===========================================================================
|
|
#³õʼ»¯³èÎï ֪ͨ¿Í»§¶Ë
|
PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick)
|
|
#֪ͨGameServer×Ô¼ºÏÖÔڵĵØÍ¼
|
curPlayer.Sync_GameServer_MapID()
|
|
#Èç¹û±¾µØÍ¼ÊǸ±±¾µÄ»°, Ôò֪ͨGameServerÍæ¼Ò½øÈ븱±¾
|
if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtTeam:
|
curPlayer.GameServer_TeamEnterFB(1)
|
else:
|
curPlayer.GameServer_TeamEnterFB(0)
|
|
#֪ͨÔËÐгɹ¦
|
curPlayer.BalanceServer_PlayerChangeMapInitOK()
|
#Ëø×¡Íæ¼Ò, µÈµ½¶ÁÈ¡µØÍ¼³É¹¦, ÔÙ½âËø
|
curPlayer.SetCanMove(False)
|
|
#---------------------------------------------------------------------
|
##³õʼ»¯Íæ¼Ò±³°ü
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ³õʼ»¯Íæ¼Ò±³°ü
|
def InitPlayerPack(curPlayer) :
|
itemManager = curPlayer.GetItemManager()
|
|
#³õʼ»¯Íæ¼Ò±³°ü
|
PlayerControl.Init_ItemPack(curPlayer)
|
|
#³õʼ»¯Íæ¼Ò²Ö¿â
|
PlayerControl.Init_Warehouse(curPlayer)
|
|
#³õʼ»¯Ñ°±¦±³°ü
|
PlayerControl.Init_TreasurePack(curPlayer)
|
|
#³õʼ»¯ÉñÊÞÎïÆ·±³°ü
|
curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
|
curPack.SetCount(ChConfig.Def_PackCnt_DogzItem)
|
curPack.Sync_PackCanUseCount()
|
#³õʼ»¯ÉñÊÞ×°±¸±³°ü
|
curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
|
curPack.SetCount(ChConfig.Def_PackCnt_DogzEquip)
|
curPack.Sync_PackCanUseCount()
|
|
#³õʼ»¯ÁÙʱ½»»»±³°ü
|
curPack = itemManager.GetPack(ShareDefine.rptTempSwap)
|
curPack.SetCount(ChConfig.Def_PackCnt_TempSwap)
|
|
#³õʼ»¯ÁÙʱ´æ·Å±³°ü
|
curPack = itemManager.GetPack(ShareDefine.rptTempItem)
|
curPack.SetCount(ChConfig.Def_PackCnt_TempItem)
|
|
#ÉèÖÃ×°±¸Êµ¼Ê¸öÊý
|
curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
|
curPack.SetCount(ChConfig.Def_PackCnt_Equip)
|
|
#³õʼ»¯À¬»øÍ°
|
#curPack = itemManager.GetPack(IPY_GameWorld.rptRecycle)
|
#curPack.SetCount(ChConfig.Def_PackCnt_Recycle)
|
|
#³õʼ»¯ÍòÄܱ³°ü
|
curPack = itemManager.GetPack(IPY_GameWorld.rptAnyWhere)
|
curPack.SetCount(IPY_GameWorld.Def_AnyWherePackCount)
|
|
#³õʼ»¯³èÎï±³°ü
|
curPack = itemManager.GetPack(ShareDefine.rptPet)
|
curPack.SetCount(ChConfig.Def_PackCnt_Pet)
|
#curPack.Sync_PackCanUseCount()
|
return
|
|
#---------------------------------------------------------------------
|
##ÊÇ·ñÓÐÎÞµÐBuff
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@return ·µ»ØÖµÕæ, ÓÐÎÞµÐBuff
|
#@remarks ×Ô¶¨Ò庯Êý, ÊÇ·ñÓÐÎÞµÐBuff
|
def __CheckLimitSuperBuff(curPlayer):
|
skillID = ChConfig.Def_SkillID_LimitSuperBuff
|
|
return CheckHasBuffBySkillID(curPlayer, skillID)
|
|
|
## ÅжÏÊÇ·ñÓÐij¼¼ÄÜbuff
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param skillID
|
# @return ·µ»ØÖµÕæ
|
def CheckHasBuffBySkillID(curPlayer, skillID):
|
buffSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
#Òì³£´íÎó
|
if not buffSkill:
|
GameWorld.Log("Íæ¼ÒÈ¡Ïûbuffʧ°Ü,Êý¾Ý¿âÎÞ´Ëbuff,buffid = %s " % (skillID) , curPlayer.GetPlayerID())
|
return False
|
|
buffType = SkillCommon.GetBuffType(buffSkill)
|
buffTuple = SkillCommon.GetBuffManagerByBuffType(curPlayer, buffType)
|
#ͨ¹ýÀàÐÍ»ñȡĿ±êµÄbuff¹ÜÀíÆ÷Ϊ¿Õ£¬ÔòÌø³ö
|
if buffTuple == ():
|
return False
|
|
buffState = buffTuple[0]
|
|
#ÅжÏÊÇ·ñ´æÔÚµÄBUFF
|
buffSkillTypeID = buffSkill.GetSkillTypeID()
|
curBuff = buffState.FindBuff(buffSkillTypeID)
|
|
if not curBuff:
|
return False
|
|
return True
|
|
#---------------------------------------------------------------------
|
##C++·â°ü´¥·¢, Çл»µØÍ¼³É¹¦( Ä¿±êµØÍ¼ )
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks C++·â°ü´¥·¢, Çл»µØÍ¼³É¹¦( Ä¿±êµØÍ¼ )
|
def LoadMapOK(index, tick):
|
GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
|
return
|
|
#---------------------------------------------------------------------
|
##C++·â°ü´¥·¢, Çл»µØÍ¼³É¹¦( Ä¿±êµØÍ¼ )
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks C++·â°ü´¥·¢, Çл»µØÍ¼³É¹¦( Ä¿±êµØÍ¼ )
|
def __Func_LoadMapOK(index, tick):
|
#ÔÚÍæ¼ÒÇл»³¡¾°/µÇ¼µÄʱºò, »áµ÷Óõ½ÕâÀï, µØÍ¼¶ÁÈ¡³É¹¦
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if curPlayer.GetMapLoadOK():
|
#Íæ¼ÒÒѾ¶ÁÈ¡µØÍ¼OK, ÎÞÐèÔÙ³õʼ»¯
|
#GameWorld.Log("Íæ¼ÒÒѾ¶ÁÈ¡µØÍ¼OK, ÎÞÐèÔÙ³õʼ»¯" , curPlayer.GetPlayerID())
|
resetFBLinePosX = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ResetFBLinePosX)
|
resetFBLinePosY = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ResetFBLinePosY)
|
if resetFBLinePosX and resetFBLinePosY:
|
GameWorld.Log("Íæ¼Ò¸±±¾Öбä¸ü¹¦ÄÜÏß·ÐéÄâÇеØÍ¼³É¹¦!!!", curPlayer.GetPlayerID())
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_ResetFBLinePosX, 0)
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_ResetFBLinePosY, 0)
|
|
#curPlayer.ResetPos(resetFBLinePosX, resetFBLinePosY)
|
# »Ö¸´ÊÓÒ°£¬Ë¢ÐÂ×Ô¼ºµÄÊÓÒ°
|
curPlayer.SetVisible(True)
|
PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default)
|
curPlayer.RefreshView()
|
|
FBLogic.DoEnterFB(curPlayer, tick)
|
return
|
|
#¼ì²éGMÕʺÅÊÇ·ñÓÐȨÏ޵ǽ
|
#if not __CheckGMCanLoadMapOK(curPlayer):
|
# return
|
|
|
#¼ì²âÕ˺ÅÊÇ·ñËø¶¨
|
if not __CheckForbidLogin(curPlayer):
|
return
|
|
GameWorld.Log("µØÍ¼¶ÁÈ¡³É¹¦" , curPlayer.GetPlayerID())
|
|
#֪ͨGameServerÇл»µØÍ¼Í£Ö¹
|
curPlayer.GameServer_SetLoadMapState(1)
|
curPlayer.SetMapLoadOK(True)
|
|
#½«Íæ¼Ò·ÅÖÃÔÚÕâ¸öµØÍ¼ÉÏ
|
curPlayer.InitPos(curPlayer.GetPosX(), curPlayer.GetPosY())
|
|
firstMission = QuestCommon.GetCommonMission(curPlayer)
|
if not (firstMission and firstMission.GetProperty(QuestCommon.Def_NewGuyNoSight) == 1):
|
#Ë¢ÐÂ×Ô¼ºµÄÊÓÒ°
|
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())
|
curPlayer.RefreshView()
|
curPlayer.SetVisible(True)
|
|
#Èç¹ûÍæ¼ÒhpΪ0,ÉèÖÃÍæ¼ÒΪËÀÍö״̬
|
if curPlayer.GetHP() <= 0:
|
curPlayer.SetPlayerAction(IPY_GameWorld.paDie)
|
#curPlayer.SetDead()
|
|
#°ÑÍæ¼ÒÉèÖÃΪ³õʼ»¯³É¹¦×´Ì¬
|
curPlayer.SetInitOK(True)
|
|
#===========================================================================
|
# #bug:GMºÅ·´ÒþÐÎÔÚÍæ¼ÒÇл»µØÍ¼Ö®ºó,½Å±¾Î´ÉèÖÃÍæ¼ÒÊôÐÔ֮ǰ£¬C++֪ͨºÏ²¢·â°üµ¼Ö¿ͻ§¶ËËÀB
|
# #½«·´ÒþÐοªÆô×ªÒÆµ½½Å±¾
|
# if curPlayer.GetGMLevel():
|
# curPlayer.SetIsDefVisible(True)
|
#===========================================================================
|
|
#ÓÐÏÞÎÞµÐBuff
|
if not __CheckLimitSuperBuff(curPlayer):
|
curPlayer.SetCanAttack(True)
|
|
#Èç¹ûÔÚʼþ״̬ , ¾Í²»½â³ýËø¶¨ ÈÎÎñ1ËøËÀÁË
|
#if curPlayer.GetPlayerAction() != IPY_GameWorld.paEvent:
|
curPlayer.SetCanMove(True)
|
|
#ͬ²½¿Í»§¶Ëtick
|
#Õâ¸ö·â°üÒªÔÚEndLoadMap, ÉÏÂí֮ǰ·¢, ·ñÔò¿Í»§¶Ë´¦Àíʱ»ú²»¶Ô(¿Í»§¶Ë·â°ü»º´æ»úÖÆ)
|
#curPlayer.Sync_ClientTick()
|
|
#×öÉÏÒ»¸öµØÍ¼µÄÉÏÂí/æô³µÂß¼
|
#»Ö¸´×Ô¼ºµÄ״̬
|
playerVehicle = curPlayer.GetLastMapPlayerVehicle()
|
if playerVehicle == IPY_GameWorld.pvHorse:
|
#Íæ¼ÒÔÚÆïÂíÖÐ
|
if not PlayerHorse.PlayerRideHorseUp(curPlayer, False, False):
|
#=======================================================================
|
# playerHorseState = curPlayer.GetLastMapPlayerRidehorseState()
|
# if playerHorseState != IPY_GameWorld.prsNormal:
|
# #Çл»µØÍ¼, »Ö¸´¼±ÐÐ״̬
|
# curPlayer.SetPlayerRidehorseState(playerHorseState)
|
#
|
# #Ë¢ÐÂÈËÎïÊôÐÔ ËùÓÐ״̬
|
# playerControl = PlayerControl.PlayerControl(curPlayer)
|
# playerControl.RefreshAllState()
|
# else:
|
#=======================================================================
|
#´ËʱÒѾÊÇÏÂÂí״̬²»ÐèҪˢ״̬ µ«ÊÇÐèҪ֪ͨ¿Í»§¶ËÏÂÂí
|
PlayerHorse.PlayerRideHorseDown(curPlayer, False)
|
|
elif playerVehicle == IPY_GameWorld.pvTruck:
|
#Íæ¼ÒÉÏæô³µ, ²»ÖØÖÃ×Ô¼ºµÄλÖÃ, ÒòÎªÍæ¼ÒÏÖÔÚ»¹ÔÚÇл»µØÍ¼ÖÐ(Ç¿ÖÆÉϳµ,ÒòΪÓпÉÄܱ»¹¥»÷)
|
PlayerTruck.PlayerTruckUP(curPlayer, False , False , False)
|
|
InitPlayerTruck(curPlayer, tick)
|
|
PlayerTeam.PlayerLoginSetTeam(curPlayer, tick)
|
|
#¼¤»îÍæ¼Ò(±£Ö¤³ÖÐøÐÔBuff´¦Àí¼ä¸ô)
|
PlayerControl.SetIsNeedProcess(curPlayer, True)
|
|
#³õʼ»¯GM²Ù×÷
|
PlayerGMOper.DoGMOperLogic(curPlayer, tick)
|
|
#Èç¹ûµÇ¼µÄ¸±±¾,Ö´ÐнøÈ븱±¾Âß¼, ÒòΪÓÐʱ¼äÏìÓ¦, ±ØÐëÔÚEndLoadMapÖ®ºó...
|
FBLogic.DoEnterFBLogic(curPlayer, tick)
|
|
#´¥·¢Íæ¼Ò½øÈëµØÍ¼µÄʼþ
|
EventShell.EventResponse_OnMap(curPlayer)
|
|
#´¥·¢Íæ¼Ò½øÈëµØÍ¼µÄʼþ
|
EventShell.EventResponse_OnMapEx(curPlayer)
|
|
#´¥·¢Çл»µØÍ¼³èÎïÂß¼
|
PetControl.DoLogic_PetLoadMapOK(curPlayer)
|
|
#---¼ì²éÊÇ·ñ¿¨Õϰ---
|
curMap = GameWorld.GetMap()
|
posX = curPlayer.GetPosX()
|
posY = curPlayer.GetPosY()
|
|
# ¸´»îËæ»úλÖÃ
|
if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsReBorn):
|
if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsReBorn) == 2:
|
PlayerControl.PlayerControl(curPlayer).SetToBornPlace()
|
else:
|
posX, posY = GameMap.GetNearbyPosByDis(posX, posY, ChConfig.Def_RebornPos_Area_Range)
|
curPlayer.ResetPos(posX, posY)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsReBorn, 0)
|
|
if curPlayer.GetHP() <= 0 or curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
|
#Èç¹ûÍæ¼ÒÉÏÏߺóËÀÍö,»Ø³Ì¸´»î
|
isLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LoadMapIsLogin)
|
rebornType = ChConfig.rebornType_City if isLogin else ChConfig.rebornType_System
|
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()
|
|
#===========================================================================
|
# #if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Frist_Lock) == 1 \
|
# if PlayerAutoCheckOnline.CheckBeginEvent(curPlayer):
|
# #·ÀÍâ¹ÒËø¶¨
|
# #Íæ¼ÒµÚÒ»´Î½øÈë, ´¥·¢ÁËOnEnter, OnEnter»áËø×¡Íæ¼Ò
|
# #µ«ÊÇÔÚÉÏÃæ»á½âËøÍæ¼Ò
|
# #ËùÒÔÔÚÕâÀïÇ¿ÖÆÅж¨, Èç¹û´¥·¢ÁËOnEnter, ÄÇôÔÚÕâÀï¼ÓËø
|
# curPlayer.BeginEvent()
|
#===========================================================================
|
|
#·ÀÖ¹Íæ¼Ò¶ÁÈ¡µØÍ¼Ê±Î´´¥·¢OnDay£¬¶ÁÈ¡µØÍ¼ºóÔÙ´ÎÑéÖ¤(2009.9.11)
|
PlayerEventCounter.UpdatePlayerLoginTime(curPlayer)
|
|
#ÉèÖÃÕóÓª
|
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Ðè·ÅÔÚ×îºó
|
curPlayer.EndLoadMap()
|
return True
|
|
## Çл»µØÍ¼Í¬²½Ò»´ÎPKģʽ
|
# @param curPlayer
|
# @return None
|
def SyncPKModel(curPlayer):
|
# ͬ²½¿Í»§¶ËPKģʽ
|
sendPack = ChPyNetSendPack.tagMCAttackMode()
|
sendPack.Clear()
|
sendPack.Mode = curPlayer.GetAttackMode()
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
return
|
|
#---------------------------------------------------------------------
|
##¼ì²éGMÊÇ·ñ¿ÉÒԵǽµØÍ¼
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@return ·µ»ØÖµÕæ, ¿ÉÒԵǽ
|
#@remarks ¼ì²éGMÊÇ·ñ¿ÉÒԵǽµØÍ¼
|
def __CheckGMCanLoadMapOK(curPlayer):
|
return True
|
# if not curPlayer.GetGMLevel() :
|
# #²»ÊÇGM, ¿ÉÒԵǽ
|
# return True
|
#
|
# curPlayerIP = curPlayer.GetIP()
|
#
|
# if curPlayerIP.find('192.168.') == 0 or curPlayerIP.find('10.30.') == 0:
|
# GameWorld.Log('ÄÚÍøGM = %s , %s IP = %s,µÇ½µØÍ¼·þÎñÆ÷, ²»ÑéÖ¤IP' % (curPlayer.GetID() , curPlayer.GetName() , curPlayerIP))
|
# return True
|
#
|
# #GM, IPÑéÖ¤²»Í¨¹ý
|
# if not curPlayer.IsPlayerInPermitIP():
|
# curPlayer.Kick(IPY_GameWorld.disIPNotPermit)
|
# return
|
#
|
# #IPÑé֤ͨ¹ý
|
# return True
|
|
|
## ¼ì²âÕ˺ÅÊÇ·ñËø¶¨
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@return ÊÇ·ñËø¶¨
|
def __CheckForbidLogin(curPlayer):
|
|
if (curPlayer.GetAccState() & pow(2, ChConfig.Def_PysForbidByPy)) <= 0:
|
return True
|
|
curPlayer.Kick(IPY_GameWorld.disGMKick)
|
return
|
|
|
#---------------------------------------------------------------------
|
##³õʼ»¯Íæ¼ÒïÚ³µ
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ³õʼ»¯Íæ¼ÒïÚ³µ
|
def InitPlayerTruck(curPlayer, tick):
|
curPlayer.SetTruckCalcStartTime(tick)
|
#Íæ¼Òæô³µÂß¼:
|
#Íæ¼ÒÈç¹ûÓÐæô³µ:
|
#1. ÔÚ±¾µØÍ¼ÕÒѰ×Ô¼ºµÄæô³µ
|
#2. Èç¹ûûÓÐÕÒµ½, ·¢¸øGameServerÒªÇó×Ô¼ºæô³µ
|
truckID = curPlayer.GetTruckID()
|
GameWorld.Log("³õʼ»¯æô³µ ID = %d ..." % (truckID) , curPlayer.GetPlayerID())
|
if truckID == 0:
|
#2009.9.24 bug
|
#Íæ¼ÒûÓÐïÚ³µID, µ«ÊÇÓÐïÚ³µ×´Ì¬, Ç¿ÖÆ¸ÄΪ0
|
if curPlayer.GetTruckState() != 0:
|
GameWorld.Log("###Fix Truck State!", curPlayer.GetPlayerID())
|
curPlayer.SetTruckState(0)
|
return
|
|
#֪ͨgameserverË¢ÐÂ×Ô¼ºµÄæô³µ
|
curPlayer.GameServer_RefreshTruckReq()
|
GameWorld.Log("֪ͨgameserverË¢ÐÂ×Ô¼ºµÄæô³µ id = %d" % (truckID) , curPlayer.GetPlayerID())
|
|
curTruck = GameWorld.GetNPCManager().FindTruckByID(truckID)
|
|
if not curTruck:
|
return
|
|
curPlayer.SetTruck(curTruck)
|
#Õâ¾ä»°Ò»¶¨Òª¼Ó, ÓÃÀ´Í¨Öª¿Í»§¶Ëæô³µ¿ªÊ¼, ÏÔʾæô³µ²Ù¿ØÃæ°å
|
curPlayer.SetTruckID(curTruck.GetID())
|
curTruck.SetOwner(curPlayer)
|
# GameWorld.Log("Íæ¼ÒÒÑÓÐæô³µ" , curPlayer.GetPlayerID())
|
|
#===============================================================================
|
# #¼Ó¾ÑéÖµ
|
# def AddExp(index, tick):
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# sendTest = IPY_GameWorld.IPY_CSendTest()
|
# addExp = sendTest.GetExp()
|
# playerControl = PlayerControl.PlayerControl(curPlayer)
|
# playerControl.AddExp(addExp,True)
|
#===============================================================================
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 01 ¼ÓÊôÐÔµã#tagCAddPoint
|
# tagCAddPoint * GettagCAddPoint();
|
#
|
# class IPY_CAddPoint
|
# {
|
# public:
|
# //0:Á¦Á¿ 1:¾«Éñ 2:Ãô½Ý 3:ÌåÆÇ 4:ÖÇÁ¦ 5:ÐÒÔË
|
# int GetType();
|
#
|
# int GetPoint();
|
# };
|
#===============================================================================
|
##//03 01 ¼ÓÊôÐÔµã#tagCAddPoint
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks //03 01 ¼ÓÊôÐÔµã#tagCAddPoint
|
def AddPoint(index, tick):
|
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()
|
EventShell.EventRespons_AddPoint(curPlayer)
|
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)
|
|
EventShell.EventRespons_LingGenReset(curPlayer)
|
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 curTag.GetHP() ==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
|
|
#Èç¹ûÊÇСÓÎÏ·ÖÐÔòֹͣСÓÎÏ·
|
if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent:
|
PlayerGameEvent.StopGameEvent(curPlayer, tick)
|
|
#ɾ³ýÓÐÏÞÎÞµÐBUFF
|
PlayerControl.DelLimitSuperBuff(curPlayer, tick)
|
|
curPlayer.ChangePos(sendPack_DestX, sendPack_DestY)
|
#curPlayer.SetClientMoveTick(sendPack_WorldTick)
|
|
fightPet = curPlayer.GetPetMgr().GetFightPet()
|
#ÎÞ³öÕ½³èÎï
|
if fightPet == None:
|
return
|
|
if GameWorld.GetDist(fightPet.GetPosX(), fightPet.GetPosY(), sendPack_DestX, sendPack_DestY) <= 4:
|
#Õ½¶·Öв»Æµ·±Òƶ¯
|
return
|
|
#³öÕ½³èÎïÍ¬Ê±ÒÆ¶¯
|
PetControl.FightPetFollowMove(curPlayer, sendPack_StartX, sendPack_StartY)
|
|
|
return
|
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove
|
# tagCPlayerMove * GettagCPlayerMove();
|
#
|
# class IPY_CPlayerMove
|
# {
|
# public:
|
#
|
# int GetStartX();
|
#
|
# int GetStartY();
|
#
|
# int GetDestX();
|
#
|
# int GetDestY();
|
#
|
# int GetWorldTick();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦//05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove
|
def PlayerMove(index, tick):
|
GameWorld.GetPsycoFunc(__Func_PlayerMove)(index, tick)
|
return
|
|
##¿Í»§¶Ë·â°üÏìÓ¦//05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//05 01Íæ¼ÒÒÆ¶¯#tagCPlayerMove
|
def __Func_PlayerMove(index, tick):
|
return
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
#·ÀÍâ¹Ò ²»¿ÉÒÆ¶¯
|
if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
|
== ChConfig.Def_AutoCheck_State_Danger:
|
return
|
|
|
#²»¿ÉÒÆ¶¯ÐÐΪ״̬, ÅжϿͻ§¶ËÏÞÖÆ
|
if not OperControlManager.IsObjCanDoAction(
|
curPlayer,
|
ChConfig.Def_Obj_ActState_ServerAct,
|
IPY_GameWorld.oalMove
|
):
|
|
return False
|
|
#Íæ¼ÒÒÆ¶¯Í¨Óüì²é
|
if not __CheckPlayerCanMove(curPlayer):
|
return
|
|
#·â°ü²ÎÊý
|
sendPack = IPY_GameWorld.IPY_CPlayerMove()
|
sendPack_StartX = sendPack.GetStartX()
|
sendPack_StartY = sendPack.GetStartY()
|
sendPack_DestX = sendPack.GetDestX()
|
sendPack_DestY = sendPack.GetDestY()
|
sendPack_WorldTick = sendPack.GetWorldTick()
|
|
#ÏÈÑé֤Ŀ±êµãÊÇ·ñºÏ·¨
|
if not GameWorld.GetMap().CanMove(sendPack_DestX, sendPack_DestY):
|
return
|
|
#Ïàͬµã²»Òƶ¯
|
if (sendPack_StartX == sendPack_DestX) and (sendPack_StartY == sendPack_DestY):
|
#GameWorld.ErrLog('PlayerMove Ïàͬµã²»Òƶ¯', curPlayer.GetID())
|
return
|
|
#---¸±±¾µØÍ¼Òƶ¯¼ì²é---
|
if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
|
|
if not FBLogic.DoFBCanMove(curPlayer, sendPack_DestX, sendPack_DestY, tick):
|
return
|
|
#---Õý³£Òƶ¯---
|
vehicle = curPlayer.GetPlayerVehicle()
|
|
if vehicle not in [IPY_GameWorld.pvNull, IPY_GameWorld.pvHorse]:
|
#GameWorld.ErrLog("²»ÄÜÒÆ¶¯, ½»Í¨¹¤¾ß²»Ã÷ %d" % (vehicle), curPlayer.GetID())
|
return
|
|
#Íæ¼ÒÕý³£Òƶ¯
|
PlayerNormalMove(curPlayer, sendPack_StartX, sendPack_StartY, sendPack_DestX,
|
sendPack_DestY, sendPack_WorldTick, tick)
|
#===============================================================================
|
# attackTime = tick - curPlayer.GetPlayerAttackTick()
|
# if attackTime <= curPlayer.GetAtkInterval() / 2:
|
# #Íæ¼Ò¹¥»÷ÔÚ½©Ö±Ê±¼äÖÐ, ²»ÄÜ×ß·
|
# #GameWorld.Log("Íæ¼Ò¹¥»÷ÔÚ½©Ö±Ê±¼äÖÐ, ²»ÄÜ×ß· %d" %(attackTime) , curPlayer.GetPlayerID())
|
# return
|
#===============================================================================
|
#===============================================================================
|
# #Íæ¼ÒÆï³Ë״̬
|
# vehicle = curPlayer.GetPlayerVehicle()
|
#
|
# #Èç¹ûÔÚÆïÂí״̬£¬ÐèÒªÅж¨ÌØÊâ×øÆï
|
# if vehicle == IPY_GameWorld.pvHorse and not __CheckHorseCanMove( curPlayer ):
|
# __DoLogic_DropHorse( curPlayer , tick )
|
# return
|
#
|
# #Íæ¼ÒÕý³£Òƶ¯
|
# if vehicle == IPY_GameWorld.pvNull or vehicle == IPY_GameWorld.pvHorse:
|
# #Íæ¼ÒÕý³£Òƶ¯
|
# PlayerNormalMove(curPlayer , moveData)
|
# elif curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck :
|
# #ÈËïÚºÏÒ»,Íæ¼ÒÒÆ¶¯
|
# PlayerMoveByCarryerTruck(curPlayer , moveData)
|
# else:
|
# GameWorld.Log("²»ÄÜÒÆ¶¯, ½»Í¨¹¤¾ß²»Ã÷ %d"%(vehicle) , curPlayer.GetPlayerID())
|
#===============================================================================
|
return
|
|
#---------------------------------------------------------------------
|
##ÑéÖ¤Íæ¼ÒÊÇ·ñ¿ÉÒÔÒÆ¶¯.
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @return ²¼¶ûÖµ
|
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦
|
def __CheckPlayerCanMove(curPlayer):
|
if not curPlayer.GetMapLoadOK():
|
#Íæ¼ÒµØÍ¼¶Áȡδ³É¹¦, Ìß³öÕâÈË
|
#curPlayer.Kick(IPY_GameWorld.disPlayerMovedWhenNotPrepare)
|
return False
|
|
#Ëø¶¨²»¿ÉÒÆ¶¯
|
if not curPlayer.GetCanMove():
|
return False
|
|
#Íæ¼ÒÒѾËÀÍö
|
if curPlayer.GetHP() <= 0:
|
return False
|
|
# #Ñ£ÔÎʱ£¬²»¿ÉÒÆ¶¯ zhengyang 2010-6-2
|
# if curPlayer.GetAbnormalState() == IPY_GameWorld.sctFaint:
|
# return False
|
|
#²»¿ÉÒÆ¶¯ÐÐΪ״̬, ÅжϷþÎñ¶ËÏÞÖÆ
|
if not OperControlManager.IsObjCanDoAction(
|
curPlayer,
|
ChConfig.Def_Obj_ActState_ServerAct,
|
IPY_GameWorld.oalMove
|
):
|
return False
|
|
#Íæ¼ÒͨÓõÄ״̬ת»»¼ì²é
|
if not PlayerControl.PlayerCanStateTransfer(curPlayer):
|
return False
|
|
return True
|
|
|
#---------------------------------------------------------------------
|
##Íæ¼ÒÆÕÍ¨ÒÆ¶¯
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param client_StartX ¿Í»§¶ËÆðµãX
|
#@param client_StartX ¿Í»§¶ËÆðµãY
|
#@param client_DestX ¿Í»§¶ËÄ¿±êµãX
|
#@param client_DestY ¿Í»§¶ËÄ¿±êµãY
|
#@param tick ʱ¼ä
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks Íæ¼ÒÆÕÍ¨ÒÆ¶¯
|
def PlayerNormalMove(curPlayer, client_StartX, client_StartY, client_DestX,
|
client_DestY, clientWorldTick, tick) :
|
# ·ÏÆú¸Ä³ÉPYÒÆ¶¯
|
return
|
|
#Èç¹ûÍæ¼ÒʼþÖÐ, Í˳öÈÎÎñ
|
# if curPlayer.GetPlayerAction() == IPY_GameWorld.paEvent:
|
# EventShell.DoExitEvent(curPlayer)
|
|
curMap = GameWorld.GetMap()
|
#УÑé¿Í»§¶Ëʱ¼ä
|
if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, clientWorldTick, client_StartX, client_StartY):
|
curPlayer.Sync_ClientTick()
|
return
|
|
#ÒÆ¶¯µã¼ì²é
|
if not CheckMovePos(curPlayer, curPlayer, curMap, client_StartX, client_StartY, client_DestX, client_DestY):
|
return
|
|
#¼ÙÉè¿Í»§¶Ë¶¼ÊÇÕýÈ·µÄ£¬¿ÉÐÐ×ßÕϰµã
|
#if PlayerControl.DoLogic_PlayerInBarrierPoint(curPlayer):
|
# return
|
|
#Èç¹ûÊÇСÓÎÏ·ÖÐÔòֹͣСÓÎÏ·
|
if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent:
|
PlayerGameEvent.StopGameEvent(curPlayer, tick)
|
|
#2010/04/30 ÒÆ¶¯ÐÞ¸ÄΪȫC++¿ØÖÆ, Python״̬»úÉèÖÃΪ¿ÕÏÐ(Çå¿Õ²É¼¯µÈ״̬)
|
PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)
|
#ɾ³ýÓÐÏÞÎÞµÐBUFF
|
#PlayerControl.DelLimitSuperBuff(curPlayer, tick)
|
|
#GameWorld.DebugLog("ÒÆ¶¯Ç°-----Íæ¼Ò×ø±ê %s-%s Ä¿µÄµØ%s -%s"%(curPlayer.GetPosX(), curPlayer.GetPosY(), client_DestX, client_DestY))
|
# ÔÚUpdatePos µ÷Óüä¸ôÄÚ¶à´Îµ÷ÓÃmove»áʹ m_StartMoveTick ÖØÖ㬵¼ÖÂÎÞ·¨Òƶ¯
|
# ¶øÔÚ CheckMovePos -> PlayerRefreshPos -> __FixPlayerPos -> ChangePos Ôì³ÉÒÆ¶¯µÄÏÖÏó
|
curPlayer.Move(client_DestX, client_DestY)
|
|
#³öÕ½³èÎïÍ¬Ê±ÒÆ¶¯
|
#PetControl.FightPetFollowMove(curPlayer, client_DestX, client_DestY, client_StartX, client_StartY)
|
return
|
|
#---------------------------------------------------------------------
|
##ÈËïÚºÏÒ»,Íæ¼ÒÒÆ¶¯
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param moveData ÒÆ¶¯·â°ü
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ÈËïÚºÏÒ»,Íæ¼ÒÒÆ¶¯
|
#===============================================================================
|
# def PlayerMoveByCarryerTruck(curPlayer , moveData) :
|
# curPlayerTruck = curPlayer.GetTruck()
|
# curMap = GameWorld.GetMap()
|
#
|
# #²»¿ÉÒÆ¶¯ÐÐΪ״̬, ·þÎñ¶ËÏÞÖÆ
|
# if not OperControlManager.IsObjCanDoAction(curPlayerTruck,
|
# ChConfig.Def_Obj_ActState_ServerAct,
|
# IPY_GameWorld.oalMove):
|
# return
|
#
|
#
|
# if curPlayerTruck == None:
|
# #À뿪ÈËïÚºÏһ״̬
|
# GameWorld.Log("À뿪ÈËïÚºÏһ״̬" , curPlayer.GetPlayerID())
|
# return
|
#
|
# if CheckMovePos(curPlayer, curPlayerTruck, curMap, moveData.GetStartX(), moveData.GetStartY(), moveData.GetDestX(), moveData.GetDestY()) != True :
|
# return
|
#
|
# #ïÚ³µÒƶ¯
|
# #curPlayer.SetSpeed(curPlayerTruck.GetSpeed())
|
# curPlayerTruck.Move(moveData.GetDestX(), moveData.GetDestY())
|
# curPlayer.Sync_Move(moveData.GetDestX(), moveData.GetDestY())
|
# return
|
#===============================================================================
|
|
#---------------------------------------------------------------------
|
##ÒÆ¶¯µã¼ì²é, checkObj ÊÇÒÆ¶¯¶ÔÏó(ÔÚÈËïÚºÏһ״̬ÏÂ, ÊäÈëΪæô³µ
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param checkObj ÒÆ¶¯¶ÔÏó
|
#@param curMap µ±Ç°µØÍ¼
|
#@param startX ¿ªÊ¼Òƶ¯×ø±êX
|
#@param startY ¿ªÊ¼Òƶ¯×ø±êY
|
#@param destX ÒÆ¶¯Ä¿±êX
|
#@param destY ÒÆ¶¯Ä¿±êY
|
#@param sendPlayerMoveFail ÊÇ·ñ·¢ËÍÒÆ¶¯Ê§°Ü
|
#@return ·µ»ØÖµÕæ, ¼ì²é³É¹¦
|
#@remarks ÒÆ¶¯µã¼ì²é, checkObj ÊÇÒÆ¶¯¶ÔÏó(ÔÚÈËïÚºÏһ״̬ÏÂ, ÊäÈëΪæô³µ
|
def CheckMovePos(curPlayer, checkObj, curMap, startX, startY, destX, destY, sendPlayerMoveFail=True):
|
#Æðʼµã,Ä¿±êµã
|
#Ë¢ÐÂÍæ¼Òµ±Ç°Î»ÖÃ
|
if not PlayerControl.PlayerRefreshPos(curPlayer, checkObj, startX, startY):
|
#Íæ¼Òµ±Ç°Î»ÖÃË¢ÐÂʧ°Ü
|
#GameWorld.Log("Íæ¼Òµ±Ç°Î»ÖÃË¢ÐÂʧ°Ü" , curPlayer.GetPlayerID())
|
if sendPlayerMoveFail and curPlayer.GetID() == checkObj.GetID():
|
#Ô˶¯ÕßÊÇÍæ¼Ò, ÄÇÃ´ÖØÖÃÍæ¼ÒλÖÃ
|
curPlayer.ResetPos(curPlayer.GetPosX(), curPlayer.GetPosY())
|
|
return False
|
|
#µ±Ç°¶ÔÏó×ø±ê
|
objPosX = checkObj.GetPosX()
|
objPosY = checkObj.GetPosY()
|
|
#Ä¿µÄµØÊÇ·ñ¿ÉÒÔµ½´ï
|
if not curMap.CanMove(destX, destY):
|
#µØ·½²»¿É×ß, ÖØÖÃÍæ¼ÒµÄλÖÃ
|
#GameWorld.Log("µØ·½²»¿É×ß, ÖØÖÃÍæ¼ÒµÄλÖÃ" , curPlayer.GetPlayerID())
|
if sendPlayerMoveFail:
|
curPlayer.MoveFail()
|
|
return False
|
|
#¼ì²éÍæ¼ÒÒÆ¶¯¾àÀëÊÇ·ñ¹ýÔ¶
|
moveDist = GameWorld.GetDist(objPosX, objPosY, destX, destY)
|
if moveDist > ChConfig.Def_PlayerMaxMoveDist:
|
#GameWorld.Log("ÒÆ¶¯Ê§°Ü£¬¼ì²éÍæ¼ÒÒÆ¶¯¾àÀëÊÇ·ñ¹ýÔ¶" , curPlayer.GetPlayerID())
|
if sendPlayerMoveFail:
|
curPlayer.MoveFail()
|
|
return False
|
|
#===============================================================================
|
# ¿¼Âǵ½»á²»Í¬²½µÄÎÊÌâ, ²»¼ÓÕâ¸öÅж¨
|
# #¼ì²éÄ¿±êµãÉÏ,ÊÇ·ñÓжÔÏó,Óв»ÈÃÒÆ¶¯
|
# mapObj = GameWorld.GetMap().GetPosObj(destX, destY)
|
#
|
# if not mapObj:
|
# return
|
#
|
# for i in range(0, mapObj.GetObjCount()):
|
# curObj = mapObj.GetObjByIndex(i)
|
# #Ö»ÓÐÒ»ÖÖÇé¿öÌØÊâ:ËÀÍöµÄNPC¿ÉÒÔÈÃÍæ¼Ò×ß¹ýÈ¥
|
# if curObj.GetGameObjType() == IPY_GameWorld.gotNPC and \
|
# curObj.GetHP() <= 0 :
|
# continue
|
# curPlayer.MoveFail()
|
# GameWorld.Log("ÒÆ¶¯Ê§°Ü£¬Ä¿±êµãÓÐÍæ¼Ò»òÕßNPC")
|
# return
|
#===============================================================================
|
|
#¼ì²éÍæ¼Òµ½Ä¿µÄµØ2µãÖ®¼äÊÇ·ñ¿ÉÒÔÖ±½Ó×ß
|
#===========================================================================
|
# if moveDist > 15 and (not curMap.CanLineTo(destX, destY, objPosX, objPosY) \
|
# and not curMap.CanLineTo(objPosX, objPosY, destX, destY)):
|
#
|
# #Õý·´·½ÏòÓÐÒ»µã²»¿É×ß, Ôò²»¿É×ß
|
# #GameWorld.Log("ÒÆ¶¯Ê§°Ü£¬¼ì²éÍæ¼Òµ½Ä¿µÄµØ2µãÖ®¼äÊÇ·ñ¿ÉÒÔÖ±½Ó×ß(%d,%d)->(%d,%d), ClientCurPos:(%d,%d)"%(
|
# # objPosX, objPosY,destX, destY,startX,startY ) , curPlayer.GetPlayerID())
|
# #µØ·½²»¿É×ß
|
# if sendPlayerMoveFail:
|
# curPlayer.MoveFail()
|
#
|
# return False
|
#===========================================================================
|
|
return True
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove
|
# tagCPlayerStopMove * GettagCPlayerStopMove();
|
#
|
# class IPY_CPlayerStopMove
|
# {
|
# public:
|
#
|
# int GetPosX();
|
#
|
# int GetPosY();
|
#
|
# int GetDir();
|
#
|
# int GetWorldTick();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove
|
def PlayerStopMove(index, tick):
|
GameWorld.GetPsycoFunc(__Func_PlayerStopMove)(index, tick)
|
return
|
|
##¿Í»§¶Ë·â°üÏìÓ¦ //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //05 02 Íæ¼ÒÍ£Ö¹ÒÆ¶¯#tagCPlayerStopMove
|
def __Func_PlayerStopMove(index, tick):
|
#===========================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#
|
# #»ñÈ¡·â°ü²ÎÊý
|
# sendPack = IPY_GameWorld.IPY_CPlayerStopMove()
|
# sendPack_Tick = sendPack.GetWorldTick()
|
# sendPack_PosX = sendPack.GetPosX()
|
# sendPack_PosY = sendPack.GetPosY()
|
# sendPack_Dir = sendPack.GetDir()
|
#
|
# #½»Í¨¹¤¾ß
|
# vehicle = curPlayer.GetPlayerVehicle()
|
#
|
# #Íæ¼ÒÍ£Ö¹ÒÆ¶¯
|
# if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvNull or vehicle == IPY_GameWorld.pvHorse:
|
# PlayerNormalStopMove(curPlayer, sendPack_Tick, sendPack_PosX, sendPack_PosY, sendPack_Dir)
|
#
|
# #ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯
|
# elif vehicle == IPY_GameWorld.pvTruck :
|
# #ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯
|
# PlayerStopMoveByCarryTruck(curPlayer, sendPack_Tick, sendPack_PosX, sendPack_PosY)
|
#
|
# else:
|
# GameWorld.Log("²»ÄÜÒÆ¶¯, ½»Í¨¹¤¾ß²»Ã÷%d" % (vehicle) , curPlayer.GetPlayerID())
|
#===========================================================================
|
|
return
|
|
#---------------------------------------------------------------------
|
##Íæ¼ÒÍ£Ö¹ÒÆ¶¯
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param sendPack_Tick ʱ¼ä´Á
|
#@param sendPack_PosX Ä¿±êX×ø±ê
|
#@param sendPack_PosY Ä¿±êY×ø±ê
|
#@param sendPack_Dir ÃæÏò
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ×Ô¶¨Ò庯Êý Íæ¼ÒÍ£Ö¹ÒÆ¶¯
|
#===============================================================================
|
# def PlayerNormalStopMove(curPlayer, sendPack_Tick, sendPack_PosX, sendPack_PosY, sendPack_Dir) :
|
# #Íæ¼ÒÍ£Ö¹ÒÆ¶¯¼ì²é
|
# if CheckPlayerStopMove(curPlayer) != True :
|
# return
|
#
|
# if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, sendPack_Tick, sendPack_PosX, sendPack_PosY):
|
# return
|
#
|
# if PlayerControl.PlayerRefreshPos(curPlayer, curPlayer, sendPack_PosX, sendPack_PosY) != True:
|
# return
|
#
|
# #curPlayer.SetFaceDir(sendPack_Dir)
|
# curPlayer.StopMove()
|
# return True
|
#
|
# #---------------------------------------------------------------------
|
# ##ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯
|
# #@param curPlayer Íæ¼ÒʵÀý
|
# #@param sendPack_Tick ʱ¼ä´Á
|
# #@return ·µ»ØÖµÎÞÒâÒå
|
# #@remarks ×Ô¶¨Ò庯Êý ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯
|
# def PlayerStopMoveByCarryTruck(curPlayer, clientWorldTick, sendPack_PosX, sendPack_PosY):
|
# curPlayerTruck = curPlayer.GetTruck()
|
# if curPlayerTruck == None:
|
# GameWorld.Log("ÈËïÚºÏÒ»Í£Ö¹ÒÆ¶¯ -> ûÓÐæô³µ!" , curPlayer.GetPlayerID())
|
# return
|
#
|
# if curPlayerTruck.GetCurAction() != IPY_GameWorld.laNPCMove :
|
# return
|
#
|
# if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, clientWorldTick, sendPack_PosX, sendPack_PosY):
|
# return
|
#
|
# curPlayerTruck.StopMove()
|
# return True
|
#===============================================================================
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 05Ö÷½Çµã»÷¸´»î#tagCCliectReborn
|
# tagCCliectReborn * GettagCCliectReborn();
|
#
|
# class IPY_CCliectReborn
|
# {
|
# public:
|
#
|
# int GetType();
|
# //0: 񿮱 1:Òø×Ó
|
# int GetMoneyType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 05Ö÷½Çµã»÷¸´»î#tagCCliectReborn
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 05Ö÷½Çµã»÷¸´»î#tagCCliectReborn
|
def PlayerClickReborn(index, tick):
|
#Íæ¼Òµã»÷: ÖØÉú
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
#¸ù¾ÝÍæ¼ÒÑ¡ÔñÖØÉúÑ¡ÏîÖØÉú
|
sendPack = IPY_GameWorld.IPY_CCliectReborn()
|
#¸´»îÀàÐÍ
|
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
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //04 01 »ñÈ¡ÇøÓòÄÚ¶ÔÏóÐÅÏ¢#tagCAreaObjInfo
|
# tagCAreaObjInfo * GettagCAreaObjInfo();
|
#
|
# class IPY_CAreaObjInfo
|
# {
|
# public:
|
#
|
# int GetObjType();
|
#
|
# int GetObjID();
|
# };
|
#===============================================================================
|
##//04 01 »ñÈ¡ÇøÓòÄÚ¶ÔÏóÐÅÏ¢#tagCAreaObjInfo
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks //04 01 »ñÈ¡ÇøÓòÄÚ¶ÔÏóÐÅÏ¢#tagCAreaObjInfo
|
def PlayerNeedSeeOther(index, tick):
|
#ÏÖÔÚ¸ÄΪ, Ö±½Ó·¢ËÍÐÅÏ¢¸ø¿Í»§¶Ë, Õâ¸ö·â°ü²»´¦ÀíÁË
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# sendReq = IPY_GameWorld.IPY_CAreaObjInfo()
|
# tagObj = GameWorld.GetObj(sendReq.GetObjID(), sendReq.GetObjType())
|
#
|
# if tagObj == None:
|
# GameWorld.Log("Íæ¼ÒÇëÇóÆäËûÍæ¼ÒµÄÏàòÐÅϢʧ°Ü, ¶ÔÏó²»´æÔÚ")
|
# return
|
#
|
# if GameWorld.IsSameObj(curPlayer, tagObj):
|
# #×Ô¼º²»Äܵõ½×Ô¼ºµÄÐÅÏ¢
|
# return
|
#
|
# dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), tagObj.GetPosX(), tagObj.GetPosY())
|
# #¶ÔÏóÔÚ×Ô¼ºÁ½±¶ÊÓÒ°ÍâÃæ, Ôò¾Ü¾ø
|
# if dist > curPlayer.GetSight() * 2:
|
# #Ä¿±êÍæ¼ÒÔÚÊÓÒ°ÍâÃæ
|
# GameWorld.Log("Íæ¼ÒÇëÇóÆäËûÍæ¼ÒµÄÏàòÐÅϢʧ°Ü£¬Ä¿±êÍæ¼ÒÔÚÊÓÒ°ÍâÃæ %d" % dist)
|
# curPlayer.Sync_GetPlayerInfoFail(sendReq.GetObjID())
|
# return
|
#
|
# if tagObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
# return
|
# curPlayer.SeeOtherPlayer(tagObj)
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo
|
# tagCClickObjGetInfo * GettagCClickObjGetInfo();
|
#
|
# class IPY_CClickObjGetInfo
|
# {
|
# public:
|
#
|
# int GetObjID();
|
#
|
# int GetObjType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦//04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo
|
def PlayerClickOtherPlayerGetInfo(index, tick):
|
GameWorld.GetPsycoFunc(__Func_PlayerClickOtherPlayerGetInfo)(index, tick)
|
return
|
|
##¿Í»§¶Ë·â°üÏìÓ¦//04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//04 02 »ñÈ¡Êó±ê×ó¼üµã»÷Ö®ºó¶ÔÏóµÄÏêϸÐÅÏ¢#tagCClickObjGetInfo
|
def __Func_PlayerClickOtherPlayerGetInfo(index, tick):
|
#===========================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#
|
# sendPack = IPY_GameWorld.IPY_CClickObjGetInfo()
|
# sendPack_ID = sendPack.GetObjID()
|
# sendPack_Type = sendPack.GetObjType()
|
#
|
# tagObj = GameWorld.GetObj(sendPack_ID, sendPack_Type)
|
#
|
# if tagObj == None:
|
# #GameWorld.Log("Íæ¼ÒÇëÇóÆäËûÍæ¼ÒµÄÏàòÐÅϢʧ°Ü, ¶ÔÏó²»´æÔÚ", curPlayer.GetPlayerID())
|
# return
|
#
|
# dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), tagObj.GetPosX(), tagObj.GetPosY())
|
# #ÊÇ·ñ¿ÉÒÔÄ¿±êÏêϸÐÅÏ¢
|
# canGetDetail = (dist <= curPlayer.GetSight())
|
# #Ä¿±êÀàÐÍ
|
# tagObjType = tagObj.GetGameObjType()
|
#
|
# #½ö´¦ÀíPlayerºÍNPC
|
# if tagObjType not in [IPY_GameWorld.gotPlayer, IPY_GameWorld.gotNPC]:
|
# return
|
#
|
# #---Íæ¼Ò´¦Àí---
|
# if tagObjType == IPY_GameWorld.gotPlayer:
|
# #»ñÈ¡Íæ¼ÒÏêϸÐÅÏ¢³É¹¦
|
# if canGetDetail:
|
# extendDataDict = {}
|
# extendDataDict['maxHP'] = tagObj.GetMaxHP()
|
# extendDataDict['maxMP'] = tagObj.GetMaxMP()
|
# extendDataDict['hit'] = tagObj.GetHit()
|
# extendDataDict['miss'] = tagObj.GetMiss()
|
# extendDataDict['atkSpeed'] = PlayerControl.GetAtkSpeed(tagObj)
|
# extendDataDict['superHitRate'] = tagObj.GetSuperHitRate()
|
# extendDataDict['superHit'] = tagObj.GetSuperHit()
|
# extendDataDict['luckyHitRate'] = tagObj.GetLuckyHitRate()
|
# extendDataDict['greatHitRate'] = tagObj.GetGreatHitRate()
|
# extendDataDict['ignoreDefRate'] = tagObj.GetIgnoreDefRate()
|
# extendDataDict['damageReduceRate'] = tagObj.GetDamageReduceRate()
|
# extendDataDict['damageBackRate'] = tagObj.GetDamageBackRate()
|
#
|
# extendData = str(extendDataDict)
|
# extendDataLen = len(extendData)
|
# curPlayer.PlayerClickOtherPlayerDetail(tagObj, extendDataLen, extendData)
|
# return
|
#
|
# #»ñÈ¡Íæ¼ÒÏêϸÐÅϢʧ°Ü
|
# curPlayer.Sync_GetPlayerInfoFail(sendPack_ID)
|
# return
|
#
|
# #---NPC´¦Àí---
|
#
|
# #»ñÈ¡NPCÏêϸÐÅÏ¢³É¹¦
|
# if canGetDetail:
|
# curPlayer.PlayerClickOtherNPCDetail(tagObj)
|
# return
|
#
|
#===========================================================================
|
#»ñÈ¡NPCÏêϸÐÅϢʧ°Ü
|
#Ôݲ»´¦Àí
|
return
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 02 Íæ¼Ò×øÏÂ/Õ¾Á¢#tagCSit
|
# tagCSit * GettagCSit();
|
#
|
# class IPY_CSit
|
# {
|
# public:
|
# //0:×øÏ 1:Õ¾Á¢
|
# int GetType();
|
# };
|
#===============================================================================
|
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 02 Íæ¼Ò×øÏÂ/Õ¾Á¢#tagCSit
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 02 Íæ¼Ò×øÏÂ/Õ¾Á¢#tagCSit
|
def PlayerSit(index, tick):
|
GameWorld.DebugLog("PlayerSit...")
|
|
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
#¹¦ÄÜ¿ªÆôÅжϻ»³É
|
#GameFuncComm.GetFuncCanUse(curPlayer, funcID)
|
|
#¹¦ÄÜ¿ªÆôÅжϻ»³É
|
#GameFuncComm.GetFuncCanUse(curPlayer, funcID)
|
|
if curPlayer.GetHP() <= 0:
|
return
|
sendPack = IPY_GameWorld.IPY_CSit()
|
setType = sendPack.GetType()
|
if setType == 1: #ÊÖÓΰæ Ö»×öÕ¾Á¢
|
PlayerControl.DoPlayerStand(curPlayer)
|
return
|
|
if curPlayer.IsMoving():
|
PlayerControl.NotifyCode(curPlayer, "CanNotSitWrongState")
|
return
|
|
#ÔÚ½»Í¨¹¤¾ßÖÐ, ²»¿É´ò×ø
|
if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvNull:
|
return
|
|
#´ò×øÐÐΪ£¬¿Í»§¶ËÏÞÖÆ
|
if not OperControlManager.IsObjCanDoAction(curPlayer,
|
ChConfig.Def_Obj_ActState_ServerAct,
|
IPY_GameWorld.oalSit):
|
return
|
|
#ÉèÖûØÑª/»ØÄ§¿ªÊ¼±êʾλ
|
curPlayer.SetRestoreTime(tick)
|
#»ñµÃ·â°ü
|
sendPack = IPY_GameWorld.IPY_CSit()
|
setType = sendPack.GetType()
|
playAction = curPlayer.GetPlayerAction()
|
#---Ïë×øÏÂ---
|
if setType == 0 and playAction == IPY_GameWorld.paNull:
|
PlayerControl.DoPlayerSit(curPlayer, tick)
|
|
return
|
|
#---ÏëÕ¾ÆðÀ´---
|
PlayerControl.DoPlayerStand(curPlayer)
|
return
|
#---------------------------------------------------------------------
|
##C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß
|
def PlayerDisconnect(index, tick):
|
GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick)
|
return
|
#---------------------------------------------------------------------
|
|
##¼Ç¼ÐÂÔöÓÐЧµÇÂ½Íæ¼Ò£¬µÇ½10·ÖÖÓÒÔÉÏÍæ¼Ò²ÅËãÓÐЧ
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @return None
|
def NoteLoginValid(curPlayer):
|
if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_LoginValid) == 1:
|
#ÒѼǼ
|
return
|
|
#¼ÆËãʱ¼ä, µ±Ç°¼õÈ¥µÇ½ʱ¼ä
|
diffTime = GameWorld.GetCurrentTime() - GameWorld.GetDateTimeByStr(curPlayer.GetLoginTime().strip())
|
|
#10·ÖÖÓÒÔÉϲÅËãÓÐÐ§Íæ¼Ò
|
if diffTime.days == 0 and diffTime.seconds < 10 * 60:
|
return
|
|
DataRecordPack.DR_LoginValid(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_LoginValid, 1)
|
return
|
|
|
##C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß
|
def __Func_PlayerDisconnect(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
try:
|
# ±ÜÃâÒòÂß¼´íÎóµ¼ÖÂÏÂÏßʧ°Ü£¬¿ÉÄܵ¼Ö»صµµÄÇé¿ö
|
DoPlayerDisconnect(curPlayer, tick)
|
except:
|
import traceback
|
GameWorld.RaiseException("Íæ¼ÒÏÂÏßÂß¼´íÎó\r\n%s" % traceback.format_exc())
|
|
#µ÷ÓõײãÊ¹Íæ¼ÒÏÂÏß
|
curPlayer.DoDisconnect(tick)
|
|
##Íæ¼ÒÕý³£ÏÂÏß
|
#@param curPlayer Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks C++·â°ü´¥·¢, Íæ¼ÒÏÂÏß
|
def DoPlayerDisconnect(curPlayer, tick):
|
|
GameWorld.Log("PlayerDisconnect!" , curPlayer.GetPlayerID())
|
|
#ÏÂÏßÁË£¬½«´æ´¢ÔÚ×ÖµäÖеÄÕæÊµXPÖµ£¬ÉèÖøøÍæ¼Ò£¬Íê³É֪ͨºÍ´æ´¢
|
#curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue))
|
#######################################################################
|
#ÏÂÏßÂß¼
|
PlayerControl.PlayerLeaveServer(curPlayer, tick)
|
|
#######################################################################
|
#Éè¶¨Íæ¼ÒµÄÏÂÏßʱ¼ä
|
curPlayer.SetLogoffTime(GameWorld.GetCurrentDataTimeStr())
|
|
#Á÷Ïò¼ÇÂ¼Íæ¼ÒÏÂÏß
|
DataRecordPack.DR_PlayerDisconnect(curPlayer)
|
|
#¼Ç¼ÐÂÔöÓÐЧµÇÂ½Íæ¼Ò
|
NoteLoginValid(curPlayer)
|
|
#VIPʱ¼ä
|
#PlayerVip.CalcVIPTimeByTick(curPlayer, tick, False)
|
#ÔÚÏßʱ¼ä
|
PlayerOnlinePrize.CalcOnlineTime(curPlayer)
|
#Ê׳äÌáʾʱ¼ä
|
PlayerGoldGift.UpdateFirstGoldTime(curPlayer)
|
#Íæ¼Òδ»ØÍ¼ÐÎÑéÖ¤ÂëÏÂÏß½«»á¼Ç¼´íÎó´ÎÊý
|
#===========================================================================
|
# if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_WaitSign) \
|
# == PlayerAutoCheckOnline.Def_Captcha_WaitAnswer:
|
# PlayerAutoCheckOnline.CaptchaAnswerErr(curPlayer, tick, False)
|
#
|
# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_Captcha_WaitSign, PlayerAutoCheckOnline.Def_Captcha_Safe)
|
#
|
#===========================================================================
|
#@warning: µÈ×Ö¶ÎͳһÐ޸ģ¬É¾³ýË«±¶¾ÑéBUFF
|
#PlayerDoubleExpSys.DeleteDoubleExpBuff(curPlayer, ChConfig.Def_DoubleExpNote_StopOff)
|
|
#ÉèÖÃRouteServerInitOK×Öµä
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RouteServerInitOK, 0)
|
|
#È¡Ïû×Ô¶¯ÔËïÚ״̬
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoTruck, 0)
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_CrossRegisterMap, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PlayerKey_IsCrossPKMatching, 0)
|
|
#ÏÂÏßÕٻسèÎï
|
PetControl.ReCallFightPet(curPlayer)
|
|
PlayerTJG.CalcPlayerTJG(curPlayer, tick)
|
|
#ÀëÏßsession
|
EventReport.WriteEvent_session(curPlayer)
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 03 ÉèÖÿì½ÝÀ¸±£´æ#tagCSetShutCutData
|
# tagCSetShutCutData * GettagCSetShutCutData();
|
#
|
# class IPY_CSetShutCutData
|
# {
|
# public:
|
#
|
# char * GetSetting();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 03 ÉèÖÿì½ÝÀ¸±£´æ#tagCSetShutCutData
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 03 ÉèÖÿì½ÝÀ¸±£´æ#tagCSetShutCutData
|
def SetShutcutSettingHV(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CSetShutCutData()
|
|
setting = sendPack.GetSetting()
|
if not GameWorld.EncodingToUnicode(setting):
|
#±àÂë¸ñʽ²»ºÏ·¨
|
setting = ""
|
GameWorld.ErrLog("SetShutCutData Encoding Err", curPlayer.GetID())
|
return
|
|
if len(setting) > 100:
|
return
|
|
curPlayer.SetSetting(setting)
|
return
|
|
#// A2 30 ÉèÖÃÁÄÌìÆøÅÝ¿ò #tagCMSetChatBubbleBox
|
#
|
#struct tagCMSetChatBubbleBox
|
#{
|
# tagHead Head;
|
# BYTE BubbleBoxType; //ÆøÅÝ¿òÀàÐÍ
|
#};
|
def OnSetChatBubbleBox(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
useBoxID = clientData.BubbleBoxType
|
GameWorld.DebugLog("ÉèÖÃʹÓõÄÁÄÌìÆøÅÝ¿òID: useBoxID=%s" % useBoxID, curPlayer.GetPlayerID())
|
|
ipyData = IpyGameDataPY.GetIpyGameData("ChatBubbleBox", useBoxID)
|
if not ipyData:
|
return
|
|
curBoxState = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_ChatBubbleBoxState, useBoxID)
|
if not curBoxState:
|
needLV = ipyData.GetNeedLV()
|
if needLV and curPlayer.GetLV() < needLV:
|
GameWorld.DebugLog(" µÈ¼¶²»×㣬ÎÞ·¨Ê¹ÓÃ¸ÃÆøÅÝ¿ò£¡needLV=%s" % needLV, curPlayer.GetPlayerID())
|
return
|
|
needVIPLVGift = ipyData.GetNeedVIPLVGift() # ¼æÈÝÒѹºÂòVIPÀñ°üµÄÀϺÅÓÃ
|
if needVIPLVGift:
|
record = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_VipAwardRecord)
|
hasBuy = record & pow(2, needVIPLVGift)
|
if not hasBuy:
|
GameWorld.DebugLog(" δ¹ºÂòVIPÀñ°ü£¬ÎÞ·¨Ê¹ÓÃ¸ÃÆøÅÝ¿ò£¡needVIPLVGift=%s" % needVIPLVGift, curPlayer.GetPlayerID())
|
return
|
|
PlayerControl.SetChatBubbleBox(curPlayer, useBoxID)
|
return
|
|
def DoActivateChatBubbleBox(curPlayer, boxID):
|
## ¼¤»îÁÄÌìÆøÅÝ¿ò
|
ipyData = IpyGameDataPY.GetIpyGameData("ChatBubbleBox", boxID)
|
if not ipyData:
|
return
|
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_ChatBubbleBoxState, boxID, 1)
|
SyncChatBubbleBoxState(curPlayer)
|
return True
|
|
def SyncChatBubbleBoxState(curPlayer):
|
## ͬ²½ÁÄÌìÆøÅÝ¿ò״̬
|
boxState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ChatBubbleBoxState % 0)
|
if not boxState:
|
return
|
boxStatePack = ChPyNetSendPack.tagMCChatBubbleBoxState()
|
boxStatePack.BoxState = boxState
|
NetPackCommon.SendFakePack(curPlayer, boxStatePack)
|
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
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //05 03 Íæ¼ÒÌøÔ¾#tagCJump
|
# tagCJump * GettagCJump();
|
#
|
# class IPY_CJump
|
# {
|
# public:
|
#
|
# int GetSkillID();
|
#
|
# int GetStartPosX();
|
#
|
# int GetStartPosY();
|
#
|
# int GetEndPosX();
|
#
|
# int GetEndPosY();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //05 03 Íæ¼ÒÌøÔ¾#tagCJump
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //05 03 Íæ¼ÒÌøÔ¾#tagCJump
|
def PlayerJump(index, tick):
|
#ûÕâ¸ö¹¦ÄÜÁË
|
return
|
|
|
## Íæ¼Ò״̬±ä¸ü
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
def OnPlayerChangeAction(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
if not curPlayer:
|
return
|
|
lastAction = curPlayer.GetPlayerLastAction()
|
curAction = curPlayer.GetPlayerAction()
|
|
if lastAction == curAction:
|
return
|
|
#Èç¹ûÉÏÒ»¸ö״̬ÊÇСÓÎϷ״̬
|
if lastAction == IPY_GameWorld.paGameEvent:
|
PlayerGameEvent.TakeoffFishermanEquipment(curPlayer)
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 06 ÉèÖÃÉúÃü»Ö¸´ÊýÖµ#tagCSetHPRestore
|
# tagCSetHPRestore * GettagCSetHPRestore();
|
#
|
# class IPY_CSetHPRestore
|
# {
|
# public:
|
#
|
# int GetValue();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 06 ÉèÖÃÉúÃü»Ö¸´ÊýÖµ#tagCSetHPRestore
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 06 ÉèÖÃÉúÃü»Ö¸´ÊýÖµ#tagCSetHPRestore
|
def HPRestoreSetting(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CSetHPRestore()
|
curValue = sendPack.GetValue()
|
if curValue < 0 or curValue > 100:
|
return
|
curPlayer.SetHPRestoreSetting(curValue)
|
#Íæ¼Ò»î×ŵÄʱºòµ÷ÓÃ
|
if curPlayer.GetHP() > 0 :
|
#µ÷ÓÃ×Ô¶¯»ØÑª
|
PlayerControl.PlayerAutoRestoreHP(curPlayer, tick)
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 07 ÉèÖÃħ·¨»Ö¸´ÊýÖµ#tagCSetMPRestore
|
# tagCSetMPRestore * GettagCSetMPRestore();
|
#
|
# class IPY_CSetMPRestore
|
# {
|
# public:
|
#
|
# int GetValue();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 07 ÉèÖÃħ·¨»Ö¸´ÊýÖµ#tagCSetMPRestore
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 07 ÉèÖÃħ·¨»Ö¸´ÊýÖµ#tagCSetMPRestore
|
def MPRestoreSetting(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CSetMPRestore()
|
curValue = sendPack.GetValue()
|
if curValue < 0 or curValue > 100:
|
return
|
|
curPlayer.SetMPRestoreSetting(curValue)
|
|
#Íæ¼Ò»î×ŵÄʱºòµ÷ÓÃ
|
if curPlayer.GetHP() > 0 :
|
#µ÷ÓÃ×Ô¶¯»ØÄ§
|
PlayerControl.PlayerAutoRestoreMP(curPlayer, tick)
|
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 0B ÉèÖýðÇ®ÀàÐÍ#tagCSetMoneyType
|
# tagCSetMoneyType * GettagCSetMoneyType();
|
#
|
# class IPY_CSetMoneyType
|
# {
|
# public:
|
# //1:½ð×Ó/½ðƱ 2:Òø×Ó/񿮱
|
# int GetType();
|
# //TMoneyType
|
# int GetMoneyType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 0B ÉèÖýðÇ®ÀàÐÍ#tagCSetMoneyType
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0B ÉèÖýðÇ®ÀàÐÍ#tagCSetMoneyType
|
def SetMoneyType(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CSetMoneyType()
|
curType = sendPack.GetType()
|
curMoneyType = sendPack.GetMoneyType()
|
if curType == 1 and curMoneyType == IPY_GameWorld.TYPE_Price_Gold_Money :
|
curPlayer.SetUseGoldType(IPY_GameWorld.TYPE_Price_Gold_Money)
|
elif curType == 1 and curMoneyType == IPY_GameWorld.TYPE_Price_Gold_Paper :
|
curPlayer.SetUseGoldType(IPY_GameWorld.TYPE_Price_Gold_Paper)
|
elif curType == 2 and curMoneyType == IPY_GameWorld.TYPE_Price_Silver_Money :
|
curPlayer.SetUseSilverType(IPY_GameWorld.TYPE_Price_Silver_Money)
|
elif curType == 2 and curMoneyType == IPY_GameWorld.TYPE_Price_Silver_Paper :
|
curPlayer.SetUseSilverType(IPY_GameWorld.TYPE_Price_Silver_Paper)
|
else:
|
GameWorld.Log("SetMoneyType = > ½ðÇ®ÀàÐÍ = %s´íÎó" % (curType) , curPlayer.GetPlayerID())
|
return
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 08 ´ò¿ª´óµØÍ¼#tagCOpenMap
|
# tagCOpenMap * GettagCOpenMap();
|
#
|
# class IPY_COpenMap
|
# {
|
# public:
|
#
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 08 ´ò¿ª´óµØÍ¼#tagCOpenMap
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 08 ´ò¿ª´óµØÍ¼#tagCOpenMap
|
def PlayerMapInfo(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if tick - curPlayer.GetPosInfoTick() < ChConfig.Def_GetOtherPosInterval:
|
return
|
|
curPlayer.SetPosInfoTick(tick)
|
|
#¶ÓÎéÐÅϢͬ²½
|
PlayerTeam.NotifyPosInfoToPlayer(curPlayer, tick)
|
|
#æô³µÐÅϢͬ²½
|
PlayerTruck.NotifyPosInfoToPlayer(curPlayer, tick)
|
|
#֪ͨ´óµØÍ¼±ê¼ÇµãÊýÁ¿
|
OnSendMapSignCnt(curPlayer)
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 0A ¸ü¸Ä¹¥»÷ģʽ#tagCChangeAttackMode
|
# tagCChangeAttackMode * GettagCChangeAttackMode();
|
#
|
# class IPY_CChangeAttackMode
|
# {
|
# public:
|
# //TAttackMode
|
# int GetMode();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 0A ¸ü¸Ä¹¥»÷ģʽ#tagCChangeAttackMode
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0A ¸ü¸Ä¹¥»÷ģʽ#tagCChangeAttackMode
|
def PlayerChangeAttackMode(index, tick) :
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CChangeAttackMode()
|
sendPackMode = sendPack.GetMode()
|
|
#²»¿ÉÇл»Ä£Ê½µÄµØÍ¼
|
mapID = GameWorld.GetMap().GetMapID()
|
if mapID in ChConfig.Def_CanNotChangeAtkModelMap:
|
GameWorld.Log("±¾µØÍ¼²»¿ÉÇл»PKģʽ,mapID=%s" % (mapID), curPlayer.GetPlayerID())
|
return
|
|
#===============================================================================================
|
# #Ö»ÓÐamPeaceºÍamAll
|
# #if sendPackMode < 0 or sendPackMode > IPY_GameWorld.amAll :
|
# if sendPackMode not in [IPY_GameWorld.amPeace, IPY_GameWorld.amAll, IPY_GameWorld.amFamily]:
|
# GameWorld.Log("Çл»¹¥»÷ģʽ·â°ü,ÀàÐÍ = %s´íÎó" % (sendPackMode) , curPlayer.GetPlayerID())
|
# return
|
#===============================================================================================
|
|
ChangeAttackMode(curPlayer, sendPackMode)
|
return
|
|
##¸Ä±äÍæ¼ÒPKģʽ
|
#@param curPlayer Íæ¼Ò
|
#@param attackMode
|
#@return
|
def ChangeAttackMode(curPlayer, attackMode):
|
|
if attackMode < IPY_GameWorld.amPeace or attackMode >= IPY_GameWorld.amMax:
|
GameWorld.DebugLog("±ä¸üPKģʽÒì³££¬²»´æÔÚ¸Ãģʽ!attackMode=%s" % attackMode)
|
return
|
if curPlayer.GetAttackMode() == attackMode:
|
GameWorld.DebugLog("PKģʽÏàͬ£¬²»±ä¸ü!attackMode=%s" % attackMode)
|
return
|
|
attackModels = GameWorld.GetMap().GetAttackModels()
|
if not attackModels & pow(2, attackMode):
|
GameWorld.DebugLog("±¾µØÍ¼½ûÖ¹Çл»¸Ãģʽ£¡attackModels=%s,changeMode=%s" % (attackModels, attackMode))
|
return
|
|
#Èç¹ûÇл»µ½ºÍƽģʽ,Çå¿ÕËùÓÐÕÙ»½Ê޵ijðºÞ
|
if attackMode == IPY_GameWorld.amPeace:
|
NPCCommon.ClearSummonAngry_Player(curPlayer)
|
|
curPlayer.SetAttackMode(attackMode)
|
|
# ͬ²½¿Í»§¶ËPKģʽ
|
SyncPKModel(curPlayer)
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //06 06 È¡ÏûBuff#tagCCancelBuff
|
# tagCCancelBuff * GettagCCancelBuff();
|
#
|
# class IPY_CCancelBuff
|
# {
|
# public:
|
#
|
# int GetBuffID();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //06 06 È¡ÏûBuff#tagCCancelBuff
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //06 06 È¡ÏûBuff#tagCCancelBuff
|
def PlayerCancelBuff(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CCancelBuff()
|
skillID = sendPack.GetBuffID()
|
#---²éÕÒÈ¡ÏûµÄ¼¼ÄÜ---
|
|
#---Çå¿ÕBuff---
|
#@bug 2607: ³ÖÐøÐÔ¼¼Äܵ÷ÓÃDoBuffDisApper, µ¼Ö³ÖÐøÐÔ»ØÑªBuff, Ò»´ÎÐÔ½«Ê£ÓàµÄ»Ø¸´Á¿¶¼¼ÓÉÏÁË
|
#===========================================================================
|
# if buffSkill.GetSkillType() not in ChConfig.Def_LstBuff_List:
|
# BuffSkill.DoBuffDisApper(curPlayer, curPlayerCancelbuff, tick)
|
#===========================================================================
|
|
BuffSkill.DelBuffBySkillID(curPlayer, skillID, tick)
|
|
#Ë¢ÐÂÈËÎïÊôÐÔ
|
playerControl = PlayerControl.PlayerControl(curPlayer)
|
#Ë¢ÐÂËùÓÐ״̬
|
playerControl.RefreshPlayerAttrByBuff()
|
#GameWorld.Log("Íæ¼ÒÈ¡Ïûbuff³É¹¦,buffTypeID = %s"%(buffSkillTypeID) , curPlayer.GetPlayerID())
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent
|
# tagCStartGameEvent * GettagCStartGameEvent();
|
#
|
# class IPY_CStartGameEvent
|
# {
|
# public:
|
# //ÓÎϷʼþ Type = TGameEvent
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent
|
def StartGameEvent(index, tick):
|
GameWorld.GetPsycoFunc(__Func_StartGameEvent)(index, tick)
|
return
|
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0C ¿ªÊ¼ÌøÎè/µöÓã#tagCStartGameEvent
|
def __Func_StartGameEvent(index, tick):
|
#ÓÎϷʼþ Type = TGameEvent
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if curPlayer.GetHP() == 0:
|
#GameWorld.Log("Íæ¼ÒËÀÍö£¬Ã»ÓÐʼþ")
|
return
|
|
sendPack = IPY_GameWorld.IPY_CStartGameEvent()
|
|
eventType = sendPack.GetType()
|
#---Í£Ö¹ÓÎϷʼþ---
|
if eventType == IPY_GameWorld.geNull:
|
PlayerGameEvent.StopGameEvent(curPlayer, tick)
|
return
|
|
#2010-5-26 Ö»¿ªÆôµöÓã,¹Ø±ÕÌøÎè
|
if eventType != IPY_GameWorld.geFish:
|
return
|
|
#ͨ¹ý¶¯×÷»ñµÃÏàÓ¦¶¯×÷λ
|
curActBit = OperControlManager.GetActBitByAction(ChConfig.Def_ActBit_GameEvent, eventType)
|
|
if curActBit != None:
|
#À½ø¶ÈÌõÖР״̬,¿Í»§¶ËÏÞÖÆ
|
if not OperControlManager.IsObjCanDoAction(curPlayer,
|
ChConfig.Def_Obj_ActState_ClientAct,
|
curActBit):
|
return
|
|
#---ÑéÖ¤ÊÇ·ñ¿ÉÒÔ¿ªÊ¼Ð¡ÓÎϷʼþ---
|
lastShowEventTick = curPlayer.GetGameEventTick()
|
|
if tick - lastShowEventTick < ChConfig.Def_ShowEventTime:
|
#GameWorld.Log("ʼþ²¥·Å¼ä¸ôÌ«¶Ì")
|
return
|
|
#¼ì²éÊÇ·ñ¿ÉÒÔ¿ªÊ¼Ð¡ÓÎÏ·
|
if not PlayerGameEvent.CheckCanBeginGameEvent(curPlayer, tick):
|
return
|
|
if not PlayerGameEvent.CanProcessGameEvent(curPlayer, eventType, tick):
|
#PlayerGameEvent.StopGameEvent(curPlayer,tick)
|
return
|
|
#---¿ªÊ¼Ö´ÐÐСÓÎϷʼþ---
|
|
#ÉèÖÃÍæ¼Òµ±ÆÚΪÓÎϷʼþ״̬
|
PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paGameEvent)
|
#É趨¿ªÊ¼ÓÎϷʼþ
|
PlayerGameEvent.StartGameEvent(curPlayer, eventType, tick)
|
return
|
|
#// B0 50 µöÓãÊÕ¸Ë #tagCMDoFish
|
#
|
#struct tagCMDoFish
|
#
|
#{
|
# tagHead Head;
|
# BYTE FishNum; // µöÓã±àºÅ1~N
|
# BYTE PosIndex; // Í£ÁôλÖÃ1~N
|
#};
|
## µöÓãÊÕ¸Ë
|
# @param curPlayer
|
# @return None
|
#===============================================================================
|
# def OnDoFish(index, clientData, tick):
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# if not curPlayer:
|
# return
|
#
|
# if curPlayer.GetPlayerAction() != IPY_GameWorld.paGameEvent:
|
# GameWorld.DebugLog("·ÇСÓÎϷ״̬Ï£¬²»¿ÉÊոˣ¡", curPlayer.GetPlayerID())
|
# return
|
#
|
# if curPlayer.GetPlayerGameEvent() != IPY_GameWorld.geFish:
|
# GameWorld.DebugLog("·ÇµöÓã״̬Ï£¬²»¿ÉÊոˣ¡", curPlayer.GetPlayerID())
|
# return
|
#
|
# fishType = clientData.PosIndex
|
# PlayerGameEvent.DoFishLogic(curPlayer, fishType)
|
# return
|
#===============================================================================
|
#===============================================================================
|
# //A1 03 ÉèÖÃÊÇ·ñ³ÉÄê #tagCMAdult
|
#
|
# struct tagCMAdult
|
# {
|
# tagHead Head;
|
# BYTE Adult;
|
# };
|
#===============================================================================
|
# Ö»Ð޸ĵØÍ¼µÄadult£¬Ï´εǼ»áÔڵǼ°ü·¢£¬×¢Òâ²âÊÔÇл»µØÍ¼
|
def PySetAdult(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
adult = 1 if clientData.Adult else 0
|
curPlayer.ChangeAdult(adult)
|
return
|
|
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 0D Íæ¼Ò×Ô¶¨Ò嶯×÷#tagCShowFace
|
# tagCShowFace * GettagCShowFace();
|
#
|
# class IPY_CShowFace
|
# {
|
# public:
|
# //±íÇéÀàÐÍ, ¿Í»§¶Ë×Ô¶¨, ·þÎñÆ÷¹ã²¥Õâ¸öType
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 0D Íæ¼Ò×Ô¶¨Ò嶯×÷#tagCShowFace
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0D Íæ¼Ò×Ô¶¨Ò嶯×÷#tagCShowFace
|
def ShowFace(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if tick - curPlayer.GetShowFaceTick() < ChConfig.Def_ShowEventTime:
|
return
|
|
if curPlayer.GetHP() <= 0:
|
return
|
|
#±íÇéÐÐΪ£¬ ¿Í»§¶ËÏÞÖÆ
|
if not OperControlManager.IsObjCanDoAction(curPlayer,
|
ChConfig.Def_Obj_ActState_ClientAct,
|
IPY_GameWorld.oalLook):
|
return
|
|
#ÒÆ¶¯Öв»Ö´Ðд˲Ù×÷
|
if curPlayer.IsMoving():
|
#PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_0")
|
return
|
|
if curPlayer.GetPlayerAction() != IPY_GameWorld.paNull:
|
return
|
|
if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvNull:
|
return
|
|
#ÉèÖüä¸ô
|
curPlayer.SetShowFaceTick(tick)
|
|
sendPack = IPY_GameWorld.IPY_CShowFace()
|
PlayerControl.DoPlayerShowPlayerFace(curPlayer, sendPack.GetType())
|
return True
|
|
#----------------------------×Ô¶¨Òå·½·¨
|
#---------------------------------------------------------------------
|
##¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔÍ£Ö¹ÒÆ¶¯
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔÍ£Ö¹ÒÆ¶¯
|
def CheckPlayerStopMove(curPlayer):
|
if not curPlayer.GetMapLoadOK() :
|
#Íæ¼ÒµØÍ¼¶ÁȡΪ³É¹¦, Ìß³öÕâÈË
|
#curPlayer.Kick(IPY_GameWorld.disPlayerMovedWhenNotPrepare)
|
#GameWorld.Log("Íæ¼ÒµØÍ¼¶ÁȡûÓгɹ¦")
|
return
|
|
if curPlayer.GetHP() == 0:
|
#Íæ¼ÒÒѾËÀÍö
|
#GameWorld.Log("Íæ¼ÒÍ£Ö¹ÒÆ¶¯,Íæ¼ÒÒѾËÀÍö")
|
return
|
|
if PlayerControl.PlayerCanStateTransfer(curPlayer) != True:
|
#GameWorld.Log("ÒÆ¶¯×´Ì¬´íÎó")
|
return
|
|
if curPlayer.GetCanMove() != True:
|
#GameWorld.Log("Íæ¼Ò²»¿ÉÍ£Ö¹")
|
return
|
|
return True
|
|
#---------------------------------------------------------------------
|
##C++·â°ü´¥·¢, Íæ¼ÒÄܹ»ÖØÖÃ×Ô¼ºµÄλÖÃ
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks C++·â°ü´¥·¢, Íæ¼ÒÄܹ»ÖØÖÃ×Ô¼ºµÄλÖÃ
|
def PlayerCanResetWorldPos(index, tick):
|
GameWorld.GetPsycoFunc(__Func_PlayerCanResetWorldPos)(index, tick)
|
return
|
#---------------------------------------------------------------------
|
##C++·â°ü´¥·¢, Íæ¼ÒÄܹ»ÖØÖÃ×Ô¼ºµÄλÖÃ
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks C++·â°ü´¥·¢, Íæ¼ÒÄܹ»ÖØÖÃ×Ô¼ºµÄλÖÃ
|
def __Func_PlayerCanResetWorldPos(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
PlayerControl.DoPlayerResetWorldPos(curPlayer, tick)
|
return
|
|
#---------------------------------------------------------------------
|
##C++·â°ü´¥·¢, Çл»µØÍ¼Ê§°Ü·â°ü´¥·¢
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks C++·â°ü´¥·¢, Çл»µØÍ¼Ê§°Ü·â°ü´¥·¢
|
def PlayerChangeMapFailCallback(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#´«ËÍʱ, Ëø¶¨Íæ¼Ò, ´«Ëͳɹ¦, ÔÚÄ¿±êµØÍ¼½âËø, ´«ËÍʧ°Ü, ÔÚ´«Ëͻص÷º¯ÊýPlayerChangeMapFailCallbackÖнâËø
|
curPlayer.ExitEvent()
|
NotifyChangeMapFail(curPlayer)
|
return
|
|
|
# ֪ͨÇл»µØÍ¼Ê§°Ü
|
def NotifyChangeMapFail(curPlayer):
|
curPlayer.SetVisible(True)
|
sendPack = ChPyNetSendPack.tagMCChangeMapFail()
|
sendPack.Clear()
|
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
|
GameWorld.Log("µØÍ¼Çл»Ê§°Ü", curPlayer.GetID())
|
return
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //01 04 ÔÚÏß»ØÓ¦#tagCOnlineReturn
|
# tagCOnlineReturn * GettagCOnlineReturn();
|
#
|
# class IPY_COnlineReturn
|
# {
|
# public:
|
#
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //01 04 ÔÚÏß»ØÓ¦#tagCOnlineReturn
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //01 04 ÔÚÏß»ØÓ¦#tagCOnlineReturn
|
def OnlineReply(index, tick):
|
#Ŀǰ×öµ½RouteServerÖÐÈ¥ÁË
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#
|
# lastOnlineReplyTick = curPlayer.GetLastOnlineReplyTick()
|
#
|
# #»ØÓ¦´ÎÊý+1
|
# curPlayer.SetLastOnlineReplyTick(tick)
|
# curPlayer.SetOnlineReplyCount(curPlayer.GetOnlineReplyCount() + 1)
|
# if lastOnlineReplyTick == 0:
|
# GameWorld.Log("³õʼ»¯ÔÚÏß»ØÓ¦")
|
# #GameWorld.Log("GetLastOnlineReplyTick %d"%curPlayer.GetLastOnlineReplyTick())
|
# return
|
#
|
# #GameWorld.Log("tick %d"%tick)
|
# diffTick = tick - lastOnlineReplyTick - ChConfig.Def_PlayerOnLineReply_ClientReply
|
# if diffTick < -ChConfig.Def_PlayerOnLineReply_ClientReply:
|
# GameWorld.Log("ÔÚÏß»ØÓ¦¼ä¸ô´íÎó = %d"%diffTick)
|
# curPlayer.Kick(IPY_GameWorld.disOnlineReplyError)
|
# return
|
#
|
#
|
## GameWorld.Log(str(curPlayer.GetTotalOnlineReplyTick()))
|
## GameWorld.Log(str(diffTick))
|
# curPlayer.SetTotalOnlineReplyTick(curPlayer.GetTotalOnlineReplyTick() + diffTick)
|
#
|
# GameWorld.Log("ÔÚÏß»ØÓ¦´ÎÊý = %d ×Üʱ¼ä = %d"%(curPlayer.GetOnlineReplyCount(), curPlayer.GetTotalOnlineReplyTick()))
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //06 08 ÕÙ»½ÊÞÒÆ¶¯#tagCSummonMove
|
# tagCSummonMove * GettagCSummonMove();
|
#
|
# class IPY_CSummonMove
|
# {
|
# public:
|
#
|
# int GetSummonID();
|
#
|
# int GetPosX();
|
#
|
# int GetPosY();
|
#
|
# int GetDestPosX();
|
#
|
# int GetDestPosY();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //06 08 ÕÙ»½ÊÞÒÆ¶¯#tagCSummonMove
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //06 08 ÕÙ»½ÊÞÒÆ¶¯#tagCSummonMove
|
def PlayerSummonMove(index, tick):
|
#Âß¼×ö·þÎñÆ÷¶Ë
|
return
|
#===============================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# sendPack = IPY_GameWorld.IPY_CSummonMove()
|
# summonID = sendPack.GetSummonID()
|
# posX = sendPack.GetPosX()
|
# posY = sendPack.GetPosY()
|
# destX = sendPack.GetDestPosX()
|
# destY = sendPack.GetDestPosY()
|
# #ÕÒµ½Õâ¸öÕÙ»½ÊÞ
|
# summonNPC = curPlayer.FindSummonByID(summonID)
|
# #ÎÞ·¨²éÕÒµ½Õâ¸öÕÙ»½ÊÞ
|
# if summonNPC == None or summonNPC.GetHP() <= 0:
|
# GameWorld.Log('ÎÞ·¨²éÕÒµ½Õâ¸öÕÙ»½ÊÞ summonID=%d'%summonID)
|
# return
|
#
|
# if ChConfig.Def_ClientControlSummonNPCID.count(summonNPC.GetFunctionType()) == 0:
|
# #Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ
|
# #GameWorld.Log('Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ')
|
# return
|
#
|
#
|
# #Ä¿µÄµØÊÇ·ñ¿ÉÒÔµ½´ï
|
# curMap = GameWorld.GetMap()
|
# if curMap.CanMove(destX, destY) != True:
|
# #µØ·½²»¿É×ß, ÖØÖÃÍæ¼ÒµÄλÖÃ
|
# GameWorld.Log("ÕÙ»½Ê޵ط½²»¿É×ß, destX=%s, destY=%s"%(destX, destY))
|
# return
|
# #===============================================================================
|
# # curMap = GameWorld.GetMap()
|
# # if CheckMovePos(curPlayer, summonNPC,curMap, posX, posY, destX, destY, sendPlayerMoveFail = False) != True :
|
# # #·â°üÐÅÏ¢´íÎó
|
# # return
|
# #===============================================================================
|
#
|
#
|
# #ÒÆ¶¯µã×ø±ê
|
# dist = GameWorld.GetDist(posX, posY, destX, destY)
|
# if dist > 20 :
|
# #Ë²ÒÆ
|
# GameWorld.Log('ÕÙ»½ÊÞË²ÒÆsummonID=%d'%summonID)
|
# summonNPC.ResetPos(destX, destY)
|
# return
|
#
|
# #Õý³£Òƶ¯
|
# summonNPC.Move(destX, destY)
|
# return
|
#===============================================================================
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //06 09 ÕÙ»½ÊÞ¹¥»÷#tagCSummonAttack
|
# tagCSummonAttack * GettagCSummonAttack();
|
#
|
# class IPY_CSummonAttack
|
# {
|
# public:
|
#
|
# int GetSummonID();
|
#
|
# int GetObjType();
|
#
|
# int GetObjID();
|
#
|
# int GetPosX();
|
#
|
# int GetPosY();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //06 09 ÕÙ»½ÊÞ¹¥»÷#tagCSummonAttack
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //06 09 ÕÙ»½ÊÞ¹¥»÷#tagCSummonAttack
|
def PlayerSummonAttack(index, tick):
|
#Âß¼×ö·þÎñÆ÷¶Ë
|
return
|
#===============================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# sendPack = IPY_GameWorld.IPY_CSummonAttack()
|
# summonID = sendPack.GetSummonID()
|
# posX = sendPack.GetPosX()
|
# posY = sendPack.GetPosY()
|
# attackType = sendPack.GetObjType()
|
# attackID = sendPack.GetObjID()
|
#
|
# #ÕÒµ½Õâ¸öÕÙ»½ÊÞ
|
# summonNPC = curPlayer.FindSummonByID(summonID)
|
# #ÎÞ·¨²éÕÒµ½Õâ¸öÕÙ»½ÊÞ
|
# if summonNPC == None or summonNPC.GetHP() <= 0:
|
# GameWorld.Log('ÕÒ²»µ½ÕÙ»½ÊÞ')
|
# return
|
#
|
# if ChConfig.Def_ClientControlSummonNPCID.count(summonNPC.GetFunctionType()) == 0:
|
# #Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ
|
# GameWorld.Log('Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ')
|
# return
|
#
|
# #ÅжϹ«¹²CD
|
# if tick - summonNPC.GetAttackTick() < summonNPC.GetAtkInterval():
|
# GameWorld.Log("¹¥»÷¼ä¸ôûÓе½")
|
# return
|
#
|
# if PlayerControl.PlayerRefreshPos(curPlayer, summonNPC, posX, posY) != True:
|
# #µ±Ç°Î»ÖÃË¢ÐÂʧ°Ü
|
# GameWorld.Log("ÕÙ»½ÊÞ¹¥»÷µ±Ç°Î»ÖÃË¢ÐÂʧ°Ü")
|
# return
|
#
|
# #±»¹¥»÷Õß
|
# attackTag = None
|
# if attackType == IPY_GameWorld.gotPlayer:
|
# attackTag = GameWorld.GetPlayerManager().FindPlayerByID(attackID)
|
# elif attackType == IPY_GameWorld.gotNPC:
|
# attackTag = GameWorld.FindNPCByID(attackID)
|
# else:
|
# #·â°üÀàÐÍ´íÎó,»ò¶ÔÏóÎÞ·¨¹¥»÷
|
# GameWorld.Log("ÕÙ»½ÊÞ·â°ü¹¥»÷ÀàÐÍ´íÎó attackType = %s"%(attackType))
|
# return
|
#
|
# #ÎÞ·¨²éÕÒ¹¥»÷Ä¿±ê
|
# if attackTag == None :
|
# GameWorld.Log("ÎÞ·¨²éÕÒ¹¥»÷Ä¿±ê,attackID = %s"%(attackID))
|
# return
|
#
|
# if not BaseAttack.GetCanAttack(summonNPC, attackTag, None, tick):
|
# return
|
#
|
# if not __CheckPlayerSummonAttack(curPlayer , summonNPC , attackTag , tick):
|
# return
|
#
|
# #ÆÕͨ¹¥»÷
|
# BaseAttack.Attack(summonNPC,attackTag, None, 0, 1,tick)
|
#
|
# return
|
#===============================================================================
|
|
#===============================================================================
|
# def __CheckPlayerSummonAttack(curPlayer , summonNPC , attackTag , tick):
|
# #1. Èç¹ûÖ÷ÈËÔÚÕ½¶·×´Ì¬, ²¢ÇÒ¹¥»÷¶ÔÏóΪ·â°üÖеĹ¥»÷¶ÔÏó, ·µ»ØTrue
|
# #Õâ¸öÂß¼,½«»áµ¼ÖÂ,Èç¹ûÍæ¼ÒÍ£Ö¹¹¥»÷ÊØÎÀ,ÄÇôÕÙ»½ÊÞ½«²»¹¥»÷ÊØÎÀ
|
# if curPlayer.IsBattleState() :
|
# curOwnerActionObj = curPlayer.GetActionObj()
|
# if curOwnerActionObj != None and GameWorld.IsSameObj(curOwnerActionObj, attackTag):
|
# return True
|
#
|
# #2. Åж¨¹ØÏµ
|
# #ÅжÏÊÇ·ñµÐ¶Ô¹ØÏµ
|
# relation = BaseAttack.GetTagRelation(summonNPC, attackTag, None, tick)
|
#
|
# if relation[0] != ChConfig.Type_Relation_Enemy :
|
# GameWorld.Log("Attack Fail : Message = %s"%relation[1])
|
# AttackCommon.PlayerAttackFailSysMessanage(curPlayer,relation[1])
|
# return False
|
#
|
# return True
|
#===============================================================================
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //06 0A ÕÙ»½ÊÞÍ£Ö¹#tagCSummonStop
|
# tagCSummonStop * GettagCSummonStop();
|
#
|
# class IPY_CSummonStop
|
# {
|
# public:
|
#
|
# int GetSummonID();
|
#
|
# int GetPosX();
|
#
|
# int GetPosY();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //06 0A ÕÙ»½ÊÞÍ£Ö¹#tagCSummonStop
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //06 0A ÕÙ»½ÊÞÍ£Ö¹#tagCSummonStop
|
def PlayerSummonStop(index , tick):
|
#Âß¼×ö·þÎñÆ÷¶Ë
|
return
|
#===============================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# sendPack = IPY_GameWorld.IPY_CSummonStop()
|
# summonID = sendPack.GetSummonID()
|
# posX = sendPack.GetPosX()
|
# posY = sendPack.GetPosY()
|
#
|
# #ÕÒµ½Õâ¸öÕÙ»½ÊÞ
|
# summonNPC = curPlayer.FindSummonByID(summonID)
|
#
|
# #ÎÞ·¨²éÕÒµ½Õâ¸öÕÙ»½ÊÞ
|
# if summonNPC == None or summonNPC.GetHP() <= 0:
|
# return
|
#
|
# if ChConfig.Def_ClientControlSummonNPCID.count(summonNPC.GetFunctionType()) == 0:
|
# #Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ
|
# #GameWorld.Log('Õâ¸öÕÙ»½ÊÞ¿Í»§¶Ë²»ÄÜ¿ØÖÆ')
|
# return
|
#
|
# if PlayerControl.PlayerRefreshPos(curPlayer, summonNPC, posX, posY) != True:
|
# #µ±Ç°Î»ÖÃË¢ÐÂʧ°Ü
|
# GameWorld.Log("ÕÙ»½ÊÞ¹¥»÷µ±Ç°Î»ÖÃË¢ÐÂʧ°Ü")
|
# return
|
#
|
# summonNPC.StopMove()
|
#
|
# return
|
#===============================================================================
|
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 0F ÊÇ·ñÒþ²ØÃæ¾ß#tagCHideMask
|
# tagCHideMask * GettagCHideMask();
|
#
|
# class IPY_CHideMask
|
# {
|
# public:
|
# //ÊÇ·ñÒþ²Ø
|
# int GetIsHide();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 0F ÊÇ·ñÒþ²ØÃæ¾ß#tagCHideMask
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 0F ÊÇ·ñÒþ²ØÃæ¾ß#tagCHideMask
|
def HideMask(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CHideMask()
|
isHide = sendPack.GetIsHide()
|
|
if isHide != 0 and isHide != 1:
|
GameWorld.Log("HideMask -> ·â°üÀàÐÍ´íÎóisHide = %s" % (isHide) , curPlayer.GetPlayerID())
|
return
|
|
if curPlayer.GetIsHideMask() == isHide:
|
return
|
|
curPlayer.SetIsHideMask(isHide)
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 10 Í˳ö¸±±¾#tagCExitFB
|
# tagCExitFB * GettagCExitFB();
|
#
|
# class IPY_CExitFB
|
# {
|
# public:
|
# //ÎÞÒâÒå
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 10 Í˳ö¸±±¾#tagCExitFB
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 10 Í˳ö¸±±¾#tagCExitFB
|
def ExitFB(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
__Func_ExitFB(curPlayer, tick)
|
return
|
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 10 Í˳ö¸±±¾#tagCExitFB
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 10 Í˳ö¸±±¾#tagCExitFB
|
def __Func_ExitFB(curPlayer, tick):
|
if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull 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 <n color="0,255,0">¶Ô²»Æð£¬ÄúÇл»ÓÎÏ·Ïß·¹ýÓÚÆµ·±£¬ÇëÉÔºóÖØÊÔ!</n> 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 <n color="0,255,0">¶Ô²»Æð£¬Äú´¦ÓÚʼþ״̬ÖУ¬ÎÞ·¨Çл»Ïß·!</n> 256 -
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_71563")
|
#GameWorld.Log("·Ç¿ÕÏÐ״̬ÎÞ·¨»»Ïß")
|
return False
|
|
#---Õ½¶·ÖÐ---
|
if PlayerControl.IsPlayerInFight(curPlayer):
|
#GeRen_liubo_850801 <n color="0,255,0">¶Ô²»Æð£¬Äú´¦ÓÚÕ½¶·×´Ì¬ÖУ¬ÎÞ·¨Çл»Ïß·!</n> 256 -
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_850801")
|
#GameWorld.Log("Õ½¶·ÖÐÎÞ·¨»»Ïß")
|
return False
|
|
#---ÓÐïÚ³µ---
|
if curPlayer.GetTruck() != None:
|
#GeRen_liubo_760310 <n color="0,255,0">¶Ô²»Æð£¬Äú´¦ÓÚѺÔË״̬ÖУ¬ÎÞ·¨Çл»Ïß·!</n> 256 -
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_760310")
|
return False
|
|
if curPlayer.GetPlayerVehicle() not in ChConfig.Def_PlayerChangLine_Vehicle:
|
#GeRen_liubo_760310 <n color="0,255,0">¶Ô²»Æð£¬Äú´¦ÓÚѺÔË״̬ÖУ¬ÎÞ·¨Çл»Ïß·!</n> 256 -
|
PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_760310")
|
return False
|
|
return True
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //01 0C µÃµ½µ±Ç°·þÎñÆ÷Ïß·״̬#tagCGetLineState
|
# tagCGetLineState * GettagCGetLineState();
|
#
|
# class IPY_CGetLineState
|
# {
|
# public:
|
# //ÎÞÒâÒå
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //01 0C µÃµ½µ±Ç°·þÎñÆ÷Ïß·״̬#tagCGetLineState
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //01 0C µÃµ½µ±Ç°·þÎñÆ÷Ïß·״̬#tagCGetLineState
|
def LineState(index, tick):
|
#¸ÄΪGameServerͬ²½Òª²éѯµÄµØÍ¼ID
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# #1. Ö»ÓÐÆÕͨµØÍ¼²é¿´Ïß·
|
# gameMap = GameWorld.GetMap()
|
#
|
# if gameMap.GetMapFBType() != IPY_GameWorld.fbtNull:
|
# #Line_lose_Examine <n color="0,255,0">`o¶Ô²»Æð£¬Ä¿Ç°¸ÃµØÍ¼Ã»Óпª·Å·ÖÁ÷,ÎÞ·¨²é¿´Ïß·״̬!</n>
|
# #PlayerControl.NotifyCode(curPlayer, "Line_lose_Examine")
|
# return
|
#
|
# if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_LineState) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_LineState]:
|
# #Line_Examinelose_Frequent <n color="0,255,0">`o¶Ô²»Æð£¬¶Ô²»Æð£¬Äú²é¿´ÓÎÏ·Ïß·״̬¹ýÓÚÆµ·±£¬ÇëÉÔºóÖØÊÔ!</n> 256
|
# #PlayerControl.NotifyCode(curPlayer, "Line_Examinelose_Frequent")
|
# return
|
#
|
# curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_LineState, tick)
|
# #GameWorld.Log("²é¿´·ÖÁ÷³É¹¦" , curPlayer.GetPlayerID())
|
# curPlayer.GameServer_LineState()
|
return
|
|
def GetRebronTime(curPlayer, rebornType):
|
''' ËÀÍö״̬²ÅÑé֤ʱ¼ä£¬±¾·þ¿ç·þͨÓÃ
|
¿ç·þ·þÎñÆ÷ËÀÍöµÄ¸´»îÒ²ÊÇÏÈ·¢µ½±¾·þ£¬Õý³£Çé¿öϱ¾·þÊÇ»î×ŵģ¬ÎÞ·¨ÑéÖ¤
|
ËùÒÔ¿É·ñ¸´»îÓÉ¿ç·þ·þÎñÆ÷ËÀÍö״̬ϵÄÍæ¼ÒʵÀýÅжϣ¬¼òµ¥½²¾ÍÊÇÄĸö·þÎñÆ÷ËÀÍöµÄÄĸö·þÎñÆ÷ÅжÏ
|
ËùÒԸú¯Êý¿ÉÒÔÖ±½ÓʹÓÃÍæ¼ÒËùÔڵĵØÍ¼ÅжÏ
|
'''
|
|
# ·ÇËÀÍö״̬Ï£¬Ò²¾ÍÊÇÄĸö·þÎñÆ÷½ÇÉ«ËÀÍöÓÉÄĸö·þÎñÆ÷ÅжÏ
|
if curPlayer.GetHP() > 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 = 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 curPlayer.GetHP() > 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
|
|
return True
|
|
def __RebornCost(curPlayer, rebornType, isDoCost):
|
## ¿Û³ý¸´»îÏûºÄ
|
# @param isDoCost: ÊÇ·ñÖ´ÐÐÏûºÄ
|
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:
|
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()
|
|
#ÉèÖÃѪÁ¿
|
curPlayer.SetHP(curPlayer.GetMaxHP() * 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(), False)
|
#ÖØÐÂÕÙ»½³èÎï
|
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
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 11 ʹÓöÍÔì¯#tagCUseMakeStove
|
# tagCUseMakeStove * GettagCUseMakeStove();
|
#
|
# class IPY_CUseMakeStove
|
# {
|
# public:
|
# //ÎÞÒâÒå
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 11 ʹÓöÍÔì¯#tagCUseMakeStove
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 11 ʹÓöÍÔì¯#tagCUseMakeStove
|
def PlayerUseMakeStove(index , tick):
|
#===============================================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#
|
# #¹¦ÄÜ¿ªÆôÅжϻ»³É
|
# #GameFuncComm.GetFuncCanUse(curPlayer, funcID)
|
#
|
# #·Ç¿ÕÏÐ״̬ÎÞ·¨Ê¹ÓÃ
|
# if curPlayer.GetPlayerAction() not in ChConfig.Def_Player_DoEvent_State:
|
# PlayerControl.NotifyCode(curPlayer, "Factory_Execution_Wrong")
|
# return
|
#
|
# #ÒÆ¶¯Öв»Ö´Ðд˲Ù×÷
|
# if curPlayer.IsMoving():
|
# #PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_0")
|
# return False
|
#
|
# #¿ªÊ¼¶ÍÔìʼþ
|
# ItemCommon.DoLogic_UseStoveEvent(curPlayer)
|
#===============================================================================================
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 12 ²é¿´¼Ò×åÕ½ÅÅÆÚ#tagCGetFamilyWarTime
|
# tagCGetFamilyWarTime * GettagCGetFamilyWarTime();
|
#
|
# class IPY_CGetFamilyWarTime
|
# {
|
# public:
|
# //ÎÞÒâÒå
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 12 ²é¿´¼Ò×åÕ½ÅÅÆÚ#tagCGetFamilyWarTime
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 12 ²é¿´¼Ò×åÕ½ÅÅÆÚ#tagCGetFamilyWarTime
|
def QueryFamilyWarPlan(index, tick):
|
#===================================================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#
|
# if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_QueryFamilyWar, tick):
|
# #²Ù×÷¹ýÓÚÆµ·±
|
# return
|
#
|
# if curPlayer.GetFamilyID() == 0:
|
# #ÎÞ¼Ò×å²»²éѯ
|
# return
|
#
|
# #¿ªÊ¼²éѯ
|
# curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_sqtFamilyWar, 0, '', '', 0)
|
#===================================================================================================
|
return
|
#-------------------------------------------------------------------
|
#===============================================================================
|
# //03 13 ²éѯïÚ³µÎ»ÖÃ#tagCGetTruckPos
|
# tagCGetTruckPos * GettagCGetTruckPos();
|
#
|
# class IPY_CGetTruckPos
|
# {
|
# public:
|
# //ÎÞÒâÒå
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 13 ²éѯïÚ³µÎ»ÖÃ#tagCGetTruckPos
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 13 ²éѯïÚ³µÎ»ÖÃ#tagCGetTruckPos
|
def QueryTruckPos(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# GameWorld.Log('½øÈëïÚ³µ²éѯ ID:%s'%curPlayer.GetID())
|
|
if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_QueryTruckPos) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_QueryTruckPos]:
|
#²éѯ¹ýÓÚÆµ·±
|
PlayerControl.NotifyCode(curPlayer, "Old_hgg_31379")
|
return
|
|
curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_QueryTruckPos, tick)
|
#¿ªÊ¼²éѯ
|
curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_sqtTruck, curPlayer.GetTruckID(), 'TruckPos', '', 0)
|
return
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 14 ´«ËÍïÚ³µÎ»ÖÃ#tagCMoveToTruckPos
|
# tagCMoveToTruckPos * GettagCMoveToTruckPos();
|
#
|
# class IPY_CMoveToTruckPos
|
# {
|
# public:
|
# //ÎÞÒâÒå
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 14 ´«ËÍïÚ³µÎ»ÖÃ#tagCMoveToTruckPos
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 14 ´«ËÍïÚ³µÎ»ÖÃ#tagCMoveToTruckPos
|
def MoveToTruckPos(index, tick):
|
#===============================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#
|
# if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_MoveToTruckPos) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_MoveToTruckPos]:
|
# #´«Ë͹ýÓÚÆµ·±
|
# PlayerControl.NotifyCode(curPlayer, "Convey_Car_Frequently")
|
# return
|
#
|
# curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_MoveToTruckPos, tick)
|
#
|
# #Åж¨Íæ¼Ò״̬
|
# if not PlayerControl.CheckTransState(curPlayer):
|
# return
|
#
|
# #Õ½¶·×´Ì¬²»ÈÃÍæ¼Ò´«ËÍ
|
# if curPlayer.IsBattleState():
|
# PlayerControl.NotifyCode(curPlayer, "CannotAtk09")
|
# return
|
#
|
# #¿ªÊ¼´«ËÍ
|
# curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_sqtTruck, curPlayer.GetTruckID(), 'MoveToTruck', '', 0)
|
#===============================================================================
|
return
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 15 ¿ªÊ¼Ô¶³Ì¼ø¶¨#tagCRemoteIdentify
|
# tagCRemoteIdentify * GettagCRemoteIdentify();
|
#
|
# class IPY_CRemoteIdentify
|
# {
|
# public:
|
# //ÎÞÒâÒå
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 15 ¿ªÊ¼Ô¶³Ì¼ø¶¨#tagCRemoteIdentify
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 15 ¿ªÊ¼Ô¶³Ì¼ø¶¨#tagCRemoteIdentify
|
def FarIdentify(index, tick):
|
#¹Ø±Õ´Ë¹¦ÄÜ
|
return
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 16 µÃµ½¸±±¾×´Ì¬#tagCGetFBState
|
# tagCGetFBState * GettagCGetFBState();
|
#
|
# class IPY_CGetFBState
|
# {
|
# public:
|
# //ÎÞÒâÒå
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦//03 16 µÃµ½¸±±¾×´Ì¬#tagCGetFBState
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//03 16 µÃµ½¸±±¾×´Ì¬#tagCGetFBState
|
def GetFBState(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_FBState) < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_FBState]:
|
#²éѯ¹ýÓÚÆµ·±
|
return
|
|
curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_FBState, tick)
|
|
|
if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
|
#ÆÕͨµØÍ¼²»²éѯ
|
return
|
|
FBLogic.DoGetFBState(curPlayer , tick)
|
|
return
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 19 ¸±±¾°ïÖú½çÃæ#tagCFbHelp
|
# tagCFbHelp * GettagCFbHelp();
|
#
|
# class IPY_CFbHelp
|
# {
|
# public:
|
# //ÎÞÒâÒå
|
# int GetType();
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 19 ¸±±¾°ïÖú½çÃæ#tagCFbHelp
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 19 ¸±±¾°ïÖú½çÃæ#tagCFbHelp
|
#¸±±¾°ïÖú½çÃæ
|
def FBHelp(index , tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if not curPlayer.GetMapLoadOK():
|
#Íæ¼ÒδµÇ½³É¹¦¸±±¾²»´¦Àí
|
return
|
|
if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_FBHelp) < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_FBHelp]:
|
#²éѯ¹ýÓÚÆµ·±
|
return
|
|
curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_FBHelp, tick)
|
|
# if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
|
# #ÆÕͨµØÍ¼²»²éѯ
|
# return
|
|
FBLogic.DoFBHelp(curPlayer , tick)
|
|
return
|
#---------------------------------------------------------------------
|
|
#---------------------------------------------------------------------
|
#// 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
|
|
#---------------------------------------------------------------------
|
|
#===============================================================================
|
#//07 24 ¶¨µã´«ËÍ#tagCDingDianTransport
|
#tagHead Head;
|
#BYTE ItemIndex;
|
#WORD TransportIndex;
|
|
## ¶¨µã´«ËÍ
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def PointTransport(index, tick):
|
#===============================================================================
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# # if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_WorldTransport, tick):
|
# # #¼ä¸ôδµ½
|
# # return
|
# sendPack = IPY_GameWorld.IPY_CDingDianTransport()
|
# lineID = sendPack.GetItemIndex() #±¾ÏîÄ¿ÓÃÀ´Ö¸¶¨´«Ë͵ÄÄ¿±êÏß·, -1ΪĬÈÏ
|
# sendPack_TransportIndex = sendPack.GetTransportIndex() #´«Ë͵ãË÷Òý
|
# lineID = lineID if lineID > 0 else -1
|
#
|
# if not PlayerControl.CheckPlayerTransport(curPlayer):
|
# #Íæ¼Òµ±Ç°×´Ì¬²»¿É´«ËÍ
|
# return
|
# PointTransportList = ReadChConfig.GetEvalChConfig('PointTransport')
|
# PointCount = len(PointTransportList)
|
# #Ë÷Òý´íÎó
|
# if sendPack_TransportIndex < 0 or sendPack_TransportIndex >= PointCount:
|
# return
|
# curPointDict = PointTransportList[sendPack_TransportIndex]
|
#
|
# mapID = curPointDict["MapID"]
|
# lvLimit = curPointDict["LVLimit"]
|
# posX = curPointDict["PosX"]
|
# posY = curPointDict["PosY"]
|
# money = curPointDict["Money"]
|
# moneyType = curPointDict["MoneyType"]
|
#
|
# #Ö°ÒµÏÞÖÆ
|
# if lvLimit > curPlayer.GetLV():
|
# #¶Ô²»Æð£¬¸Ã³¡¾°ÐèÒªXX¼¶²ÅÄܽøÈë!
|
# PlayerControl.NotifyCode(curPlayer, "Carry_hwj35_0", [lvLimit])
|
# return
|
# #½ðÇ®ÏÞÖÆ
|
# if not PlayerControl.HaveMoneyEx(curPlayer, moneyType, money):
|
# return
|
# #Ä¿±êµØÍ¼Åжϣ¨´æÔÚ·ñ£¬µÐ¹ú£¬¸±±¾£©
|
# if not PlayerControl.CheckTagCountry(curPlayer, mapID):
|
# return
|
#
|
# #×ø±êµãÅжÏ
|
# posX, posY = GetTransportPos(curPlayer, 0, mapID, posX, posY)
|
# if (posX, posY) == (0, 0):
|
# #04BBF813-7A30-47A8-927DE1ACCC4F378E Ä¿±êµãΪÕϰµã
|
# PlayerControl.NotifyCode(curPlayer, "04BBF813-7A30-47A8-927DE1ACCC4F378E")
|
# return
|
#
|
# if BeginTrans(curPlayer, mapID, posX, posY, lineID=lineID):
|
# curPlayer.SetDict(ChConfig.Def_PlayerKey_TransMoney, money)
|
# curPlayer.SetDict(ChConfig.Def_PlayerKey_TransMoneyType, moneyType)
|
# curPlayer.SetDict(ChConfig.Def_PlayerKey_TransType, ChConfig.Def_Transport_Type_FixedPoint)
|
# else:
|
# #ûÓнø¶ÈÌõ£¬Ö±½Ó¿ÛÈ¡
|
# infoDict = {ChConfig.Def_Cost_Reason_SonKey:mapID}
|
# PlayerControl.PayMoney(curPlayer, moneyType, money, ChConfig.Def_Cost_Transport, infoDict)
|
#
|
#===============================================================================
|
#PlayerControl.PlayerResetWorldPos(curPlayer, MapID, PosX, PosY, False)
|
#PlayerControl.NotifyCode(curPlayer, "Map_Deliver_Succeed", [MapID])
|
return
|
#===============================================================================
|
# # 04 04 ºÃÓÑ´«ËÍ #tagCFriendTransport
|
# #
|
# #struct tagCFriendTransport
|
# #{
|
# # tagHead Head;
|
# # DWORD FriendID;
|
# # Byte ExtField1;
|
# #};
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ 04 04 ºÃÓÑ´«ËÍ #tagCFriendTransport
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ 04 04 ºÃÓÑ´«ËÍ #tagCFriendTransport
|
def FriendTransPort(index, tick):
|
return
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#
|
# if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_FlyToFriend, tick):
|
# #¼ä¸ôδµ½
|
# return
|
#
|
# sendPack = IPY_GameWorld.IPY_CFriendTransport()
|
# sendPack_FriendID = sendPack.GetFriendID()
|
# sendPack_IsAutoBuy = sendPack.GetExtField1()
|
#
|
# if not curPlayer.FindFriend(sendPack_FriendID):
|
# #È·ÈϺÃÓÑʧ°Ü
|
# return
|
#
|
# if not PlayerControl.CheckPlayerTransport(curPlayer):
|
# #Íæ¼Òµ±Ç°×´Ì¬²»¿É´«ËÍ
|
# return
|
#
|
# type = ChConfig.Def_Transport_Type_Friend
|
# if not TransportVipLvRestrict(curPlayer, type):
|
# #vipµÈ¼¶ÏÞÖÆ
|
# return
|
#
|
# transportPayDict = ReadChConfig.GetEvalChConfig('TransportPay')
|
# payInfo = transportPayDict.get(type)
|
#
|
# if payInfo == None:
|
# GameWorld.ErrLog("±íTransportPayÐÅÏ¢´íÎó ûÓжÔÓ¦ÀàÐÍ %s" % (type))
|
# return
|
#
|
#
|
# #ÎïÆ·ID£¬ ÎïÆ·Ð§¹ûÖµ£¬ ¸¶·ÑÀàÐÍ£¬½ð¶î
|
# itemID, itemEffectID, moneyType, money = payInfo
|
#
|
# #֪ͨÏû·Ñ·½Ê½
|
# sendPayType = ChConfig.Def_FriendTransPort_UseItem
|
# #ʹÓõÀ¾ß´«ËÍ
|
# useItem = ItemCommon.FindItemInPackByEffectEx(curPlayer, itemEffectID)
|
#
|
# #ûÓÐÎïÆ·
|
# if useItem == None:
|
# if sendPack_IsAutoBuy:
|
# #ûÓÐÇ®
|
# if not PlayerControl.HaveMoneyEx(curPlayer, moneyType, money):
|
# return
|
#
|
# #½ðÇ®Ïû·Ñ
|
# sendPayType = ChConfig.Def_FriendTransPort_UseMoney
|
# else:
|
# #ÎïÆ·²»×ã
|
# PlayerControl.NotifyCode(curPlayer, "GeRen_pan_861048", [itemID])
|
# return
|
#
|
# sendMsg = '%s' % (sendPayType)
|
#
|
# #²éѯ²¢´«ËÍ
|
# curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_sqtPlayer, sendPack_FriendID,
|
# 'FlytoFriendByID', sendMsg, len(sendMsg))
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
#04 05 ÊÀ½ç´«ËÍtagCWorldTransfer
|
#
|
# struct tagCWorldTransfer
|
# {
|
# tagHead Head;
|
# DWORD MapID;
|
# WORD PosX;
|
# WORD posY;
|
# BYTE ExtField1;
|
# };
|
#===============================================================================
|
##
|
##¿Í»§¶Ë·â°üÏìÓ¦ 04 05 ÊÀ½ç´«ËÍtagCWorldTransfer
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ 04 05 ÊÀ½ç´«ËÍtagCWorldTransfer
|
def WorldTransPort(index, tick):
|
#---»ñÈ¡·â°üÐÅÏ¢---
|
packUseItem = IPY_GameWorld.IPY_CWorldTransfer()
|
packTransportType = packUseItem.GetType()
|
mapID = packUseItem.GetMapID()
|
posX = packUseItem.GetPosX()
|
posY = packUseItem.GetPosY()
|
lineID = packUseItem.GetExtField1()
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
__Func_WorldTransPort(curPlayer, packTransportType, mapID, posX, posY, tick, lineID)
|
return
|
|
#// B0 05 ¿ªÊ¼ÊÀ½ç´«ËÍ #tagCMWorldTransfer
|
#
|
#struct tagCMWorldTransfer
|
#{
|
# tagHead Head;
|
# BYTE Type;
|
# DWORD MapID;
|
# BYTE LineID;
|
# WORD PosX;
|
# WORD PosY;
|
# DWORD ExData1; //À©Õ¹×Ö¶Î1£¬¸÷¸öÏîÄ¿¸ù¾Ý×Ô¼ºµÄÐèÒª¾ö¶¨ÓÃ;
|
#};
|
def PYWorldTransPort(index, clientPack, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
packTransportType = clientPack.Type
|
mapID = clientPack.MapID
|
lineID = clientPack.LineID
|
posX = clientPack.PosX
|
posY = clientPack.PosY
|
exData1 = clientPack.ExData1
|
__Func_WorldTransPort(curPlayer, packTransportType, mapID, posX, posY, tick, lineID, exData1)
|
return
|
|
def __Func_WorldTransPort(curPlayer, packTransportType, mapID, posX, posY, tick, lineID=-1, exData1=0):
|
if curPlayer.GetMapID() != mapID:
|
#ÑéÖ¤¼ä¸ô
|
if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_WorldTransport) < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_WorldTransport]:
|
#ûµ½¼ä¸ô
|
return
|
|
curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_WorldTransport, tick)
|
|
playerID = curPlayer.GetPlayerID()
|
GameWorld.DebugLog("WorldTransPort packTransportType=%s,mapID=%s,lineID=%s,exData1=%s"
|
% (packTransportType, mapID, lineID, exData1), playerID)
|
lineID = -1 if lineID == 255 else lineID
|
if 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 takeTruck ÊÇ·ñЯ´øïÚ³µ
|
# @param lineID Ïß·ID -1´ú±íµ±Ç°Ïß
|
# @param msg Çл»µØÍ¼Ð¯´øµÄÐÅÏ¢
|
# @param canLock ÊÇ·ñ¿ÉÒÔËø¶¨Íæ¼Ò(´«Ë͵㲻¿ÉËø¶¨, ÒòΪҪ¿çµØÍ¼Ñ°Â·)
|
# @return: ÊÇ·ñÔÚÀ½ø¶ÈÌõ
|
def BeginTrans(curPlayer, mapID, posX, posY, takeTruck=False, lineID= -1, msg='', canLock=True, exData1=0):
|
#===========================================================================
|
# if PlayerControl.IsPlayerInFight(curPlayer):
|
# #¼Ç¼´«ËÍ×ø±ê, ÓÃÓÚ½ø¶ÈÌõ½áÊøºó´«ËÍ
|
# curPlayer.SetDict(ChConfig.Def_PlayerKey_TransMapId, mapID)
|
# curPlayer.SetDict(ChConfig.Def_PlayerKey_TransPosX, posX)
|
# curPlayer.SetDict(ChConfig.Def_PlayerKey_TransPosY, posY)
|
#
|
# #Õ½¶·×´Ì¬ÖÐÀ½ø¶ÈÌõ
|
# PlayerControl.Sync_PrepareBegin(curPlayer, ChConfig.Def_TransTime,
|
# ShareDefine.Def_PstTrans)
|
# return True
|
#===========================================================================
|
|
PlayerControl.PlayerResetWorldPos(curPlayer, mapID, posX, posY, takeTruck, lineID, msg, canLock, exData1)
|
#PlayerControl.NotifyCode(curPlayer, "Map_Deliver_Succeed", [mapID])
|
return False
|
|
|
##È¡µÃÕýÈ·´«ËÍ×ø±ê
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param transportType ´«ËÍÀàÐÍ
|
#@param transportMapID ·â°üµØÍ¼ID
|
#@param posX ·â°üµØÍ¼posX
|
#@param posY ·â°üµØÍ¼posY
|
#@return ×ø±êµã
|
#@remarks È¡µÃÕýÈ·´«ËÍ×ø±ê
|
def GetTransportPos(curPlayer, transportType, transportMapID, transportPosX, transportPosY):
|
#---ÊÀ½ç´«ËÍÂß¼ÌØÊâ´¦Àí---
|
#===========================================================================
|
# if transportType == ShareDefine.Def_Transport_World:
|
# cityPosDict = ReadChConfig.GetEvalChConfig('Def_List_City_Pos')
|
#
|
# posInfo = cityPosDict.get(transportMapID)
|
#
|
# if posInfo == None:
|
# #ÎÞ·¨²éÕÒºÏÊʵÄ×ø±ê
|
# return 0, 0
|
#
|
# transportPosX, transportPosY = posInfo
|
#===========================================================================
|
|
#---¹«ÓÃ×ø±êµã¼ì²âÂß¼---
|
if curPlayer.GetMapID() == transportMapID:
|
#±¾µØÍ¼ÐèÒªÑéÖ¤ÊÇ·ñÕϰµã
|
if not GameWorld.GetMap().CanMove(transportPosX, transportPosY):
|
transportPosX, transportPosY = GameMap.GetNearbyPosByDis(transportPosX, transportPosY, ChConfig.Def_RebornPos_Area_Range)
|
|
return transportPosX, transportPosY
|
|
##´«ËÍÏûºÄ´¦Àí
|
#@param curPlayer Íæ¼Ò
|
#@param transportType ´«ËÍÀàÐÍ
|
#@return BOOL Ö§¸¶ÊÇ·ñ³É¹¦
|
#@remarks ´«ËÍÏûºÄ´¦Àí
|
def PayForTransport(curPlayer, transportType):
|
itemID = IpyGameDataPY.GetFuncCfg('TransportPay')
|
if not itemID:
|
return True
|
useCount = 1 # ÏûºÄÊýÁ¿
|
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(itemID, itemPack, useCount)
|
if not hasEnough:
|
#µÀ¾ß²»¹»Ä¬ÈÏ¿ÛÇ®
|
costMoney = IpyGameDataPY.GetFuncCfg('TransportPay', 2)
|
if not TransportPayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, costMoney, transportType, ChConfig.GMTool_Offline_WorldTransfer):
|
GameWorld.DebugLog(' ´«ËÍÏûºÄ´¦Àí ´«Ë͵À¾ß²»×ã itemID=%s, ǮҲ²»¹»costMoney=%s'%(itemID, costMoney))
|
return False
|
else:
|
ItemCommon.ReduceItem(curPlayer, itemPack, itemList, useCount, False)
|
|
return True
|
|
## ´«ËÍvipµÈ¼¶ÏÞÖÆ
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @param transportType ´«ËÍÀàÐÍ
|
# @return ÊÇ·ñvipµÈ¼¶ÏÞÖÆ
|
def TransportVipLvRestrict(curPlayer, transportType):
|
return PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FreeTransport)
|
|
|
|
#---------------------------------------------------------------------
|
##´«Ë͸¶·Ñ¼Ç¼
|
#@param curPlayer Íæ¼ÒʵÀý
|
#@param moneyType ¸¶·ÑÀàÐÍ
|
#@param money ¼Û¸ñ
|
#@param transportType ´«ËÍÀàÐÍ
|
#@param noteMark ¼Ç¼ÀàÐÍ
|
#@return ·µ»ØÖµÕæ, ¿Û·Ñ³É¹¦
|
#@remarks ´«Ë͸¶·Ñ¼Ç¼
|
def TransportPayMoney(curPlayer, moneyType, money, transportType, noteMark):
|
moneyList = PlayerControl.HaveMoneyEx(curPlayer, moneyType, money)
|
if moneyList == []:
|
return False
|
|
for moneyType, money in moneyList:
|
if money > 0:
|
PlayerControl.PayMoney(curPlayer, moneyType, money, ChConfig.Def_Cost_Transport,
|
{"TransportType":transportType})
|
GameWorld.Login_Interface_GoldRec(curPlayer, transportType, 0, 'TransportType',
|
moneyType, money)
|
|
return True
|
|
|
#//03 26 ÊÖ¶¯Éý¼¶#tagCUserLVUp
|
#////////////////////////////////////////////////////////////////
|
#
|
#class IPY_CUserLVUp
|
#{
|
#private:
|
# CUserLVUp * m_Instance;
|
#public:
|
# //³õʼ»¯
|
# IPY_CUserLVUp();
|
#----------------------------
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 26 Íæ¼ÒÉý¼¶ÇëÇó#tagCUserLVUp
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ 03 26 Íæ¼ÒÉý¼¶ÇëÇó#tagCUserLVUp
|
def PlayerLvUpRequest(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
#---¿ªÊ¼Éý¼¶---
|
playerControl = PlayerControl.PlayerControl(curPlayer)
|
#²ÎÊýÌîTrue±íʾÊÖ¶¯Éý¼¶ ÔÚÈËÎï´ïµ½20¼¶ÒÔºó»áµ÷ÓÃÒ»´ÎÈËÎï»áÉýÒ»¼¶
|
playerControl.PlayerLvUp(True)
|
return
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# //03 2B Ë«±¶¾Ñ鼤»î/Í£Ö¹/²éѯ#tagCDoubleExp
|
#
|
# struct tagCDoubleExp
|
# {
|
# tagHead Head;
|
# BYTE Type; //1-¼¤»î;2-Í£Ö¹;3-²éѯ
|
#
|
# };
|
#===============================================================================
|
##¿Í»§¶Ë·â°üÏìÓ¦ //03 2B Ë«±¶¾Ñ鼤»î/Í£Ö¹/²éѯ#tagCDoubleExp
|
#@param index Íæ¼ÒË÷Òý
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 2B Ë«±¶¾Ñ鼤»î/Í£Ö¹/²éѯ#tagCDoubleExp
|
def DoubleExpState(index, tick):
|
return
|
|
## 03 31 ¸±±¾Íæ¼Ò¼¤»îÌØÊâ¼¼ÄÜ
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick ʱ¼ä´Á
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks ¸±±¾Íæ¼Ò¼¤»îÌØÊâ¼¼ÄÜ
|
def UseFBSpecilSkill(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
fbSkillPack = IPY_GameWorld.IPY_CFBSpecilSkill()
|
|
useType = fbSkillPack.GetType()
|
useState = fbSkillPack.GetState()
|
|
FBLogic.UseFBSpecilSkill(curPlayer, useType, useState, tick)
|
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
#//A2 05 ÇëÇó¶Ò»»ÀëÏß¾Ñé·â°ü#tagPyCMOfflineExpExchange
|
#struct tagPyCMOfflineExpExchange
|
#{
|
# tagHead Head;
|
# BYTE Index; //¾Ñé±¶ÂÊË÷Òý
|
# DWORD ExchangeTime; //¶Ò»»Ê±¼ä
|
#};
|
|
#===============================================================================
|
##//A2 05 ÇëÇó¶Ò»»ÀëÏß¾Ñé·â°ü#tagPyCMOfflineExpExchange
|
#@param index Íæ¼ÒË÷Òý
|
#@param curPackData ·â°ü½á¹¹Ìå
|
#@param tick ʱ¼ä´Á
|
#@return ·µ»ØÖµÎÞÒâÒå
|
#@remarks ÀëÏß¾Ñé¶Ò»»
|
def PlayerExpExchange(index, curPackData, tick):
|
# ¿ç·þ·þÎñÆ÷¹¦ÄÜÏÞÖÆ
|
if GameWorld.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
|
|
#------------------------------------------------------------------------------
|
## //A0 09 ¹ºÂò´óµØÍ¼±ê¼Çµã# tagPyBuyMapSignPoint
|
# @param index Íæ¼ÒË÷Òý
|
# @param curPackData ·â°ü½á¹¹Ìå
|
# @param tick ʱ¼ä´Á
|
# @return None
|
def BuyMapSignCount(index, curPackData, tick):
|
# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
# curVipLv = curPlayer.GetVIPLv()
|
#
|
# curMapsignCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayerMapSignCnt)
|
#
|
# #if curMapsignCnt >= min(PlayerVip.GetVipCanBuyTransportPointCnt(curVipLv), ChConfig.Def_Player_MapSignPointMaxCount):
|
# # #ÒѾȫ²¿¿ªÍ¨»òµ±Ç°vipµÈ¼¶Ö»ÄÜÂòÕâô¶à
|
# # return
|
# if curMapsignCnt >= ChConfig.Def_Player_MapSignPointMaxCount:
|
# #ÒѾȫ²¿¿ªÍ¨»òµ±Ç°vipµÈ¼¶Ö»ÄÜÂòÕâô¶à
|
# return
|
#
|
# buyCountIndex = curMapsignCnt + 1
|
# buyMoneyCostDict = ReadChConfig.GetEvalChConfig("MapSignCountBuyMoney")
|
# buyMoneyList = buyMoneyCostDict.get(buyCountIndex)
|
# if buyMoneyList == None:
|
# GameWorld.ErrLog("¹ºÂò´óµØÍ¼±êʶλÖà = %s ÔÚMapSignCountBuyMoney.txt±íÖÐÕÒ²»µ½¹ºÂò¼Û¸ñ" % buyCountIndex)
|
# return
|
#
|
# buyMoney = buyMoneyList[0] # ½ðÇ®ÊýÁ¿
|
# buyMoneyType = buyMoneyList[1] # ½ðÇ®ÀàÐÍ
|
#
|
# #¿ÛÇ®
|
# moneyList = PlayerControl.HaveMoneyEx(curPlayer, buyMoneyType, buyMoney)
|
# if moneyList == []:
|
# #½ðÇ®²»×ã
|
# return
|
#
|
# for moneyType, moneyCount in moneyList:
|
# PlayerControl.PayMoney(curPlayer, moneyType, moneyCount, 'BuyMapSignCount')
|
#
|
# curMapsignCnt = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PlayerMapSignCnt, buyCountIndex)
|
#
|
# #֪ͨ¿Í»§¶ËÊýÁ¿
|
# OnSendMapSignCnt(curPlayer)
|
return
|
|
|
## ֪ͨ´óµØÍ¼±ê¼ÇÊýÁ¿
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @return None
|
def OnSendMapSignCnt(curPlayer):
|
# curMapsignCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayerMapSignCnt)
|
# mapsignCnt = ChConfig.Def_Player_InitMapSignPointCount + curMapsignCnt
|
#
|
# mapSignPointCount = ChPyNetSendPack.tagPyMapSignPointCount()
|
# mapSignPointCount.Count = mapsignCnt
|
# NetPackCommon.SendFakePack(curPlayer, mapSignPointCount)
|
return
|
|
|
#//B0 24 ÁìÈ¡¼Ò×åÐüÉͽ±Àø #tagReceiveFamilyArrestAward
|
#
|
#struct tagReceiveFamilyArrestAward
|
#
|
#{
|
# tagHead Head;
|
# DWORD ArrestID; //ÐüÉÍÈÎÎñID
|
#};
|
## ÁìÈ¡¼Ò×åÐüÉͽ±Àø
|
# @param index: Íæ¼ÒË÷Òý
|
# @param clientData: ·â°ü½á¹¹Ìå
|
# @param tick: ʱ¼ä´Á
|
# @return: None
|
def ReceiveFamilyArrestAward(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
arrestID = clientData.ArrestID
|
|
bit = ShareDefine.Def_ArrestOverState_BitDic.get(arrestID)
|
if bit == None:
|
#ûÓÐÕâ¸ö¼Ò×åÐüÉÍÈÎÎñ
|
GameWorld.DebugLog("ûÓÐÕâ¸ö¼Ò×åÐüÉÍÈÎÎñ arrestID=%s" % arrestID)
|
return
|
|
receiveState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState)
|
|
if receiveState & pow(2, bit):
|
#¸ÃÈÎÎñ½±ÀøÒѾÁìÈ¡
|
GameWorld.DebugLog("¸ÃÈÎÎñ½±ÀøÒѾÁìÈ¡ arrestID=%s" % arrestID)
|
return
|
|
if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_FamilyArrestQueryState) == 1:
|
#ÒѾÔÚ²éѯÖÐ, ²»Öظ´²éѯ
|
GameWorld.DebugLog("ÒѾÔÚ²éѯÖÐ, ²»Öظ´²éѯ arrestID=%s" % arrestID)
|
return
|
|
sendMsg = '%s' % arrestID
|
|
#ÏòGameServerÇëÇó¸ÃÐüÉÍÈÎÎñÊÇ·ñÒѾÍê³É
|
curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_FamilyArrest, 0, 'FamilyArrestAward', sendMsg, len(sendMsg))
|
|
#ÉèÖÃ״̬²éѯÖÐ
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_FamilyArrestQueryState, 1)
|
return
|
|
|
#//B0 26 ÇëÇó¼Ò×åÐüÉͽ±ÀøÁìÈ¡Çé¿ö #tagQueryFamilyArrestAwardReceiveState
|
#
|
#struct tagQueryFamilyArrestAwardReceiveState
|
#
|
#{
|
# tagHead Head;
|
#};
|
## ÇëÇó¼Ò×åÐüÉͽ±ÀøÁìÈ¡Çé¿ö
|
# @param index: Íæ¼ÒË÷Òý
|
# @param clientData: ·â°ü½á¹¹Ìå
|
# @param tick: ʱ¼ä´Á
|
# @return: None
|
def QueryFamilyArrestAwardReceiveState(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
Sync_FamilyArrestAwardReceiveState(curPlayer)
|
return
|
|
|
## ֪ͨ¿Í»§¶Ë¼Ò×åÐüÉÍÈÎÎñ½±ÀøÁìÈ¡Çé¿ö
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @return: None
|
def Sync_FamilyArrestAwardReceiveState(curPlayer):
|
awardReceiveState = ChPyNetSendPack.tagFamilyArrestAwardReceiveState()
|
awardReceiveState.Clear()
|
|
state = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState)
|
awardReceiveState.ReceiveState = state
|
NetPackCommon.SendFakePack(curPlayer, awardReceiveState)
|
return
|
|
|
## ²éѯÊÇ·ñ»¹ÔÚ¼Ò×åµÄÉêÇëÁбíÖÐ(²»ÔÚÏßʱ±»¾Ü¾øÁË)
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @return: None
|
def QueryIsResFamily(curPlayer):
|
|
familyIDList = []
|
for index in range(0, ChConfig.Def_Player_RequestAddFamilyMaxCnt):
|
familyID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RequestAddFamilyID % index)
|
if familyID == 0:
|
continue
|
|
familyIDList.append(familyID)
|
|
#ÏòGameServerÇëÇóÊÇ·ñ»¹ÔڸüÒ×åÉêÇëÁбíÖÐ
|
sendMsg = str(familyIDList)
|
curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_RequestIsFamily, curPlayer.GetID(),
|
'RequestIsFamily', sendMsg, len(sendMsg))
|
return
|
|
#===============================================================================
|
|
## ÁìÈ¡½±Àø±í½±Àø
|
# @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_DayFreeGoldGift:
|
PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
|
# ÏÉÃË»îÔ¾¶È½±Àø
|
elif rewardType == ChConfig.Def_RewardType_FamilyActivity:
|
PlayerFamily.GetFamilyActivityAward(curPlayer, dataEx)
|
# ÏÉÃËÁªÈü¹Ú¾üÏÉÃËÿÈÕٺ»½±Àø
|
elif rewardType == ChConfig.Def_RewardType_ChampionFamilyDailyReward:
|
GameLogic_FamilyWar.GetChampionFamilyDailyReward(curPlayer)
|
# ÏÉħ֮ÕùʤÀû³¡Êý½±Àø
|
elif rewardType == ChConfig.Def_RewardType_XMZZWinCnt:
|
GameLogic_XMZZ.GetXMZZWinPrize(curPlayer, dataEx)
|
# ÏÉÃËÿÈÕ¸£Àû½±Àø
|
elif rewardType == ChConfig.Def_RewardType_FamilyDayAward:
|
PlayerFamily.GetFamilyDayAward(curPlayer)
|
# Íæ¼ÒµÈ¼¶½±Àø
|
elif rewardType == ChConfig.Def_RewardType_LVAward:
|
PlayerLVAward.GetPlayerLVAward(curPlayer, dataEx)
|
# Ïɱ¦Ñ°Ö÷½±Àø
|
elif rewardType == ChConfig.Def_RewardType_XBXZ:
|
PlayerMagicWeapon.OnGetXBXZAward(curPlayer, dataEx)
|
# Ê׳äÀñ°ü½±Àø
|
elif rewardType == ChConfig.Def_RewardType_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)
|
# ÁìÈ¡ÀۼƳäÖµ½±Àø
|
elif rewardType == ChConfig.Def_RewardType_TotalRecharge:
|
PlayerActTotalRecharge.OnGetTotalRechargeAward(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_CACTGBillboardDabiao:
|
CrossActCTGBillboard.GetDabiaoAward(curPlayer, dataEx)
|
#çÎç¿ÆæÓöÁìÈ¡
|
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_SkyTowerServerChallengeReward:
|
GameLogic_SkyTower.OnGetSkyTowerServerChallengeReward(curPlayer, dataEx)
|
#´´½Ç½±Àø
|
elif rewardType == ChConfig.Def_RewardType_CreateRole:
|
OnGetCreateRoleAward(curPlayer)
|
#ÿÈÕ·ÖÏí½±Àø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))
|
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):
|
## ·¢·Åǰ¶Ë¿ØÖƵĽ±Àø£¬ºó¶ËÖ»¸ºÔ𷢷ޱÀø£¬ÊÇ·ñ¿ÉÁ콱ǰ¶Ë×ÔÐÐÅжÏ
|
if curPlayer.NomalDictGetProperty(dictKey):
|
GameWorld.DebugLog("ÒÑÁìÈ¡¹ý¸Ã½±Àø! rewardType=%s, dictKey=%s" % (rewardType, dictKey))
|
return
|
if not ItemCommon.GiveAwardItem(curPlayer, awardCfg):
|
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
|
|
# ֪ͨ¿Í»§¶Ëͬ²½Ê±¼ä
|
NetPackCommon.SendFakePack(curPlayer, serverDateTime)
|
return
|
|
## ֪ͨ¿ª·þÌìÊý
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @return: None
|
def Sync_OpenServerDay(curPlayer):
|
serverTime = GameWorld.GetCurrentTime()
|
if not serverTime:
|
return
|
gw = GameWorld.GetGameWorld()
|
packData = ChPyNetSendPack.tagOpenServerDay()
|
packData.Clear()
|
packData.Day = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
|
packData.IsMixServer = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
|
packData.MixDay = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)
|
packData.OpenWeekday = gw.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_OpenServerWeekday)
|
packData.NowYear = serverTime.year
|
packData.NowMonth = serverTime.month
|
packData.NowDay = serverTime.day
|
packData.NowHour = serverTime.hour
|
packData.NowMinute = serverTime.minute
|
packData.NowSecond = serverTime.second
|
packData.NowMicSecond = serverTime.microsecond
|
NetPackCommon.SendFakePack(curPlayer, packData)
|
return
|
|
#===============================================================================
|
# //B4 09 Íæ¼ÒÒÆ¶¯ # tagCMPyMove
|
#
|
# struct tagCMPyMove
|
# {
|
# tagHead Head;
|
# WORD Dir; // ³¯Ïò
|
# WORD ClientPosX; // ¿Í»§¶Ë×ø±êX ºÁÃ×
|
# WORD ClientPosY; // ¿Í»§¶Ë×ø±êY
|
# WORD SeverPosX; // ·þÎñ¶Ë×ø±êX ¸ñ×Ó
|
# WORD SeverPosY; // ·þÎñ¶Ë×ø±êY
|
# DWORD WorldTick;
|
# BYTE MoveType; // 0 Í£Ö¹ 1ÒÆ¶¯
|
# };
|
#===============================================================================
|
|
# python´¦ÀíеÄÒÆ¶¯·½Ê½
|
def PYPlayerMove(index, clientPack, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
#·ÀÍâ¹Ò ²»¿ÉÒÆ¶¯
|
if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoCheckHack_State) \
|
== ChConfig.Def_AutoCheck_State_Danger:
|
return
|
|
if not PYPlayerNormalMove(curPlayer, clientPack, tick):
|
posX, posY = curPlayer.GetPosX(), curPlayer.GetPosY()
|
|
if GameWorld.GetMap().CanMove(posX, posY) != True:
|
resultPos = GameMap.GetEmptyPlaceInArea(posX, posY, 5)
|
|
if resultPos.GetPosX() == posX and resultPos.GetPosY() == posY:
|
GameWorld.ErrLog("Íæ¼Ò×ø±ê¿¨ËÀ %s %s"%(posX, posY))
|
return
|
posX = resultPos.GetPosX()
|
posY = resultPos.GetPosY()
|
|
curPlayer.ResetPos(posX, posY)
|
|
def PYPlayerNormalMove(curPlayer, clientPack, tick) :
|
|
#Íæ¼ÒÒÆ¶¯Í¨Óüì²é
|
if not __CheckPlayerCanMove(curPlayer):
|
return True
|
|
#·â°ü²ÎÊý
|
moveDir = clientPack.Dir # ÒÆ¶¯·½Ïò
|
clientPosX = clientPack.ClientPosX #ºÁÃ× Ö»×÷Ϊ»Ø°üÓÃ
|
clientPosY = clientPack.ClientPosY
|
sendPack_SeverPosX = clientPack.SeverPosX #¸ñ×Ó
|
sendPack_SeverPosY = clientPack.SeverPosY
|
sendPack_WorldTick = clientPack.WorldTick
|
moveType = clientPack.MoveType
|
|
lastMoveTick = curPlayer.GetClientMoveTick()
|
|
if moveType != 0 and sendPack_WorldTick - lastMoveTick < 50:
|
GameWorld.DebugLog("move ·¢°üÌ«¿ì ÊÕ°ü%s - ÉÏÒ»´Î%s"%(sendPack_WorldTick, lastMoveTick))
|
# ·¢°ü¹ý¿ì
|
return True
|
|
#ÏÈÑé֤Ŀ±êµãÊÇ·ñºÏ·¨
|
if not GameWorld.GetMap().CanMove(sendPack_SeverPosX, sendPack_SeverPosY):
|
GameWorld.DebugLog("ÒÆ¶¯Õϰµã")
|
return False
|
|
if curPlayer.GetPosX() == sendPack_SeverPosX and curPlayer.GetPosY() == sendPack_SeverPosY:
|
if moveType != 0 and sendPack_WorldTick - lastMoveTick < 222:
|
# ¼õÉÙͬ²½ÂÊ
|
return True
|
curPlayer.SetClientMoveTick(sendPack_WorldTick)
|
#GameWorld.DebugLog("ûÓиñ×ÓÒÆ¶¯µÄÒ²¹ã²¥")
|
# ûÓиñ×ÓÒÆ¶¯µÄÒ²¹ã²¥
|
PyNotifyPlayerMove(curPlayer, moveDir, clientPosX, clientPosY, sendPack_SeverPosX, sendPack_SeverPosY, moveType)
|
return True
|
|
|
#---¸±±¾µØÍ¼Òƶ¯¼ì²é---
|
if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
|
if not FBLogic.DoFBCanMove(curPlayer, sendPack_SeverPosX, sendPack_SeverPosY, tick):
|
return False
|
|
#---Õý³£Òƶ¯---
|
vehicle = curPlayer.GetPlayerVehicle()
|
|
if vehicle not in [IPY_GameWorld.pvNull, IPY_GameWorld.pvHorse]:
|
#GameWorld.ErrLog("²»ÄÜÒÆ¶¯, ½»Í¨¹¤¾ß²»Ã÷ %d" % (vehicle), curPlayer.GetID())
|
return False
|
|
|
#УÑé¿Í»§¶Ëʱ¼ä
|
if not PlayerControl.PlayerMoveCheckClientWorldTick(curPlayer, sendPack_WorldTick, sendPack_SeverPosX, sendPack_SeverPosY):
|
curPlayer.Sync_ClientTick()
|
return False
|
|
dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), sendPack_SeverPosX, sendPack_SeverPosY)
|
if dist > 4:
|
# ¶ª°ü À»Ø
|
GameWorld.DebugLog("ÒÆ¶¯¾àÀë¹ý´ó£¬ Íæ¼Ò×ø±ê %s-%s ÊÕ°ü %s-%s"%(curPlayer.GetPosX(), curPlayer.GetPosY(),
|
sendPack_SeverPosX, sendPack_SeverPosY), curPlayer.GetID())
|
return False
|
|
|
#Èç¹ûÊÇСÓÎÏ·ÖÐÔòֹͣСÓÎÏ·
|
if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent:
|
PlayerGameEvent.StopGameEvent(curPlayer, tick)
|
|
#2010/04/30 ÒÆ¶¯ÐÞ¸ÄΪȫC++¿ØÖÆ, Python״̬»úÉèÖÃΪ¿ÕÏÐ(Çå¿Õ²É¼¯µÈ״̬)
|
PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)
|
#ɾ³ýÓÐÏÞÎÞµÐBUFF
|
#PlayerControl.DelLimitSuperBuff(curPlayer, tick)
|
|
curPlayer.ChangePos(sendPack_SeverPosX, sendPack_SeverPosY)
|
PyNotifyPlayerMove(curPlayer, moveDir, clientPosX, clientPosY, sendPack_SeverPosX, sendPack_SeverPosY, moveType)
|
curPlayer.SetClientMoveTick(sendPack_WorldTick)
|
|
# ºóÃæ±ØÐë·µ»ØTrue
|
fightPet = curPlayer.GetPetMgr().GetFightPet()
|
if fightPet:
|
#³öÕ½³èÎïÍ¬Ê±ÒÆ¶¯
|
if moveType == 0 or tick - fightPet.GetActionTick() > 300:
|
|
PetControl.FightPetFollowMove(curPlayer,sendPack_SeverPosX, sendPack_SeverPosY)
|
fightPet.SetCurAction(IPY_GameWorld.laNPCNull)
|
|
return True
|
|
|
#===============================================================================
|
# //B4 0A Íæ¼ÒÒÆ¶¯ #tagMCPYPlayerMove
|
#
|
# struct tagMCPYPlayerMove
|
# {
|
# tagHead Head;
|
# WORD Dir; // ³¯Ïò
|
# WORD ClientPosX; // ¿Í»§¶Ë×ø±êX ºÁÃ×
|
# WORD ClientPosY; // ¿Í»§¶Ë×ø±êY
|
# WORD SeverPosX; // ·þÎñ¶Ë×ø±êX ¸ñ×Ó
|
# WORD SeverPosY; // ·þÎñ¶Ë×ø±êY
|
# DWORD ObjID;
|
# BYTE ObjType;
|
# WORD Speed;
|
# BYTE MoveType; // 0 Í£Ö¹ 1ÒÆ¶¯
|
# };
|
#===============================================================================
|
def PyNotifyPlayerMove(curPlayer, moveDir, clientPosX, clientPosY, posX, posY, moveType):
|
sendPack = ChPyNetSendPack.tagMCPYPlayerMove()
|
|
sendPack.Clear()
|
sendPack.ObjID = curPlayer.GetID()
|
sendPack.ObjType = IPY_GameWorld.gotPlayer
|
sendPack.Dir = moveDir
|
sendPack.ClientPosX = clientPosX
|
sendPack.ClientPosY = clientPosY
|
sendPack.SeverPosX = posX
|
sendPack.SeverPosY = posY
|
sendPack.Speed = curPlayer.GetSpeed()
|
sendPack.MoveType = moveType
|
# NotifyAll ×ö¹ýÂË»òÕßÊýÁ¿´¦Àí
|
PlayerControl.PyNotifyAll(curPlayer, sendPack, False, 0)
|
return
|
|
def GetDownloadAward(curPlayer, dataEx):
|
##·Ö°üÏÂÔØ½±Àø dataEx 0Ö±½ÓÁìÈ¡ 1·¢Óʼþ
|
awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState)
|
if awardState:
|
GameWorld.Log(' ·Ö°üÏÂÔØ½±ÀøÒÑÁìÈ¡£¬²»¿ÉÖØ¸´ÁìÈ¡£¡', curPlayer.GetID())
|
return
|
|
awardItemList = IpyGameDataPY.GetFuncEvalCfg('DownReward')
|
# ¼ì²é±³°ü
|
if dataEx == 0:
|
needSpace = len(awardItemList)
|
packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
|
if needSpace > packSpace:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
|
return
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DownloadAwardState, 1)
|
if dataEx == 1:
|
PlayerControl.SendMailByKey('SubpackageDownload', [curPlayer.GetID()], awardItemList)
|
else:
|
for itemID, itemCnt, isBind in awardItemList:
|
ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])
|
SyncPackDownloadAward(curPlayer)
|
return
|
|
def SyncPackDownloadAward(curPlayer):
|
#·Ö°üÏÂÔØ½±Àø¼Ç¼֪ͨ
|
sendPack = ChPyNetSendPack.tagMCPackDownloadRecord()
|
sendPack.Clear()
|
sendPack.Record = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DownloadAwardState)
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
return
|
|
def NotifyPlayerMove(curPlayer, posX, posY, npcID=0):
|
'''֪ͨǰ¶ËÏòij¸öµãÒÆ¶¯
|
ÕâÀïǰ¶Ë¿ÉÄÜÐèÒªÕë¶Ôij´ÎÒÆ¶¯×ö¶îÍâ´¦Àí£¬±ÈÈçÒÆ¶¯µ½Ä³¸öµãºóÐèÒª×Ô¶¯Õ½¶·µÈ
|
ËùÒÔÕâÀïÖ»×ö֪ͨǰ¶Ë¿ÉÒÔÏòij¸öµãÒÆ¶¯£¬×îÖÕÒÆ¶¯ÓÉǰ¶Ë·¢Æð
|
'''
|
sendPack = ChPyNetSendPack.tagMCNotifyPlayerMove()
|
sendPack.Clear()
|
sendPack.PosX = posX
|
sendPack.PosY = posY
|
sendPack.NPCID = npcID
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
return
|
|
#// B4 0E Íæ¼ÒµôѪ #tagCMRoleLostHP
|
#
|
#struct tagCMRoleLostHP
|
#{
|
# tagHead Head;
|
# DWORD LostHP;
|
#};
|
def OnRoleLostHP(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
lostHP = clientData.LostHP
|
curHP = curPlayer.GetHP()
|
updHP = curHP - lostHP
|
if updHP <= 0:
|
#Íæ¼ÒÒѾËÀÍö
|
playerControl = PlayerControl.PlayerControl(curPlayer)
|
playerControl.SetDead()
|
else:
|
curPlayer.SetHP(updHP)
|
|
return
|