From 167357e8425d0dc12f41ed5fdfd4d95f2c2a5aaf Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 29 五月 2025 19:19:20 +0800 Subject: [PATCH] 16 卡牌服务端(删除旧版xml任务、镖车等不需要内容) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 2062 +--------------------------------------------------------- 1 files changed, 63 insertions(+), 1,999 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py index 31c87e1..1678a8b 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py @@ -17,14 +17,11 @@ 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 @@ -99,7 +96,6 @@ import PlayerRefineStove import PassiveBuffEffMng import PlayerDiceEx -import QuestCommon import GameLogic_XMZZ import PlayerFlashSale import PlayerFlashGiftbag @@ -202,30 +198,9 @@ #@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) - -#=============================================================================== -# #初始化玩家鉴定管理器物品最大个数 -# identifyItemManager = curPlayer.GetIdentifyManager() -# -# #设置最大数量 -# if identifyItemManager.GetCount() == 0: -# identifyItemManager.SetCount(ChConfig.TYPE_Player_identifyManagerCount) -# -# #初始化宝石挖除管理器最大个数 -# stoneBreakManager = curPlayer.GetStoneBreakManager() -# -# if stoneBreakManager.GetCount() == 0: -# stoneBreakManager.SetCount(ChConfig.TYPE_Player_StoneBreakManagerCount) -#=============================================================================== - #初始化物品 - #ChItem.InitPlayerLoginItem(curPlayer, tick) return #--------------------------------------------------------------------- ##C++封包GameServer_InitOK 处理 @@ -238,21 +213,9 @@ #玩家是第一次登录, 并且玩家需要踢回原来地图 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 ##非同一天二次登陆 @@ -619,7 +582,7 @@ __DoMixServerFirstLogin(curPlayer) PlayerBillboard.BillboardOnLogin(curPlayer) - #非同一天二次登陆, 应该放在该函数中的SetLoginTime之后,EventResponse_OnEnter之前 + #非同一天二次登陆, 应该放在该函数中的SetLoginTime之后 NoteOtherDayLogin(curPlayer) #上线时通知脱机挂时被击杀的离线时间 @@ -650,20 +613,7 @@ PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick) PlayerPet.OnPlayerPetLogin(curPlayer) - #要在SetCanMove之后做这个事情, 否则OnEnter不会卡住玩家 - EventShell.EventResponse_OnEnter(curPlayer) - - EventShell.EventResponse_OnLogin(curPlayer) - #通知环奖励记录 - EventShell.NotifyRunEndAward(curPlayer) - #通知玩家有补偿可以领取 - #curPlayer.DataServer_GetExpiationCount() - - #通知玩家有宠物补偿可以领取 - #curPlayer.DataServer_GetPetExpiationCount() - - #玩家离线邮件通知 - #curPlayer.DataServer_GetMailListReq() + __FirstLoginOnEnter(curPlayer) #清空玩家万能背包中的任务物品 ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere) @@ -688,9 +638,6 @@ # # #通知客户端签到信息 PlayerSignDay.SignDayOnLogin(curPlayer) -# -# #通知客户端镖车AI模式 -# PlayerTruck.Sync_TruckMode(curPlayer) #通知玩家死亡时间 PlayerControl.PlayerControl(curPlayer).NotifyPlayerDeadTime(curPlayer) @@ -815,8 +762,6 @@ # 世界boss BossHurtMng.OnLogin(curPlayer) ChItem.Sync_ItemDayUseCnt(curPlayer) - # 悬赏登录通知 - #PlayerArrestTask.OnLogin(curPlayer) # 符印登录通知 PlayerRune.PlayerRuneLogin(curPlayer) # 仙盟红包登录通知 @@ -830,8 +775,6 @@ #PassiveBuffEffMng.OnLoginGFPassive(curPlayer) #我要太极 PlayerDiceEx.DiceExOnLogin(curPlayer) - # 剧情任务完成状态 - QuestCommon.Sync_StoryMissionState(curPlayer) #仙魔之争 GameLogic_XMZZ.OnXMZZLogin(curPlayer) PlayerOnlinePrize.OnPlayerLogin(curPlayer) @@ -1010,6 +953,48 @@ playerInfoEx.CreateRoleTime = curPlayer.GetCreateRoleTime() NetPackCommon.SendFakePack(curPlayer, playerInfoEx) + return + +def __FirstLoginOnEnter(curPlayer): + ## 首登处理,先return + return + playerID = curPlayer.GetID() + + GameWorld.Log('玩家是第一次进入游戏', playerID) + # 特殊说明: 如果地图没有完全初始化好,客户端断开或者异常等情况会触发RunGateGameServerMapServerKickOutPlayerNoSave + # 那么在DoPlayerLogin 中设置的数据将不会被保存, 如会导致第一个任务重复触发问题,记录多次发送 + EventReport.WriteEvent_Entry(curPlayer, 4) + #EventReport.EventReport(ShareDefine.Def_UserAction_FirstLogin, "", curPlayer) + + #---补满血满魔--- + GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer)) + curPlayer.SetMP(curPlayer.GetMaxMP()) + + #---给予玩家新手物品--- + + #默认触发一次功能开启 + if curPlayer.GetLV() == 1: + GameFuncComm.DoFuncOpenLogic(curPlayer) + + #初始化组队状态 + autoJoinReqCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 1) + autoInviteCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 2) + PlayerControl.SetTeamCheckStateEx(curPlayer, int(not autoJoinReqCheck), int(not autoInviteCheck)) + + #玩家默认恶名值 + curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue) + + #标记已登陆过,用于非同一天二次登陆 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_OtherDayLogin, 1) + + #curPlayer.SetDict("ThunderLogin", 1) + #记录第一次登陆 + DataRecordPack.DR_FirstLogin(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer) + + #首登邮件 + mailList = IpyGameDataPY.GetFuncEvalCfg("MailLVAward", 2) + for mailTypeKey, mailItemList in mailList: + PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList) return ## 合服首登处理 @@ -1323,12 +1308,7 @@ 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) @@ -1500,22 +1480,7 @@ # ------------------------------------------------------ #玩家切换地图成功, 初始化玩家的附加信息(骠车, 召唤兽) 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) - - #---初始化自己的召唤兽--- #=========================================================================== # for i in range(curPlayer.GetSummonCount()): @@ -1649,18 +1614,6 @@ #@param tick 时间戳 #@return 返回值无意义 #@remarks C++封包触发, 切换地图成功( 目标地图 ) -def LoadMapOK(index, tick): - #不需要等待客户端,以前有视野客户端未加载成功会被偷袭的问题,可以通过加x秒无敌BUFF解决,不应该增加流程 - # GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick) - # GameServerRefresh.GameSever_PlayerInitOK(index, tick) - return - -#--------------------------------------------------------------------- -##C++封包触发, 切换地图成功( 目标地图 ) -#@param index 玩家索引 -#@param tick 时间戳 -#@return 返回值无意义 -#@remarks C++封包触发, 切换地图成功( 目标地图 ) def __Func_LoadMapOK(index, tick): #在玩家切换场景/登录的时候, 会调用到这里, 地图读取成功 curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) @@ -1702,20 +1655,18 @@ #将玩家放置在这个地图上 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()) - elif not GameWorld.IsCrossServer(): - realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer) - if realmDifficulty: - GameWorld.DebugLog("===本服LoadMapOK时玩家处于境界难度地图,自动设置难度!realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID()) - PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty) - - curPlayer.RefreshView() - curPlayer.SetVisible(True) + #刷新自己的视野 + if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene)): + GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服或自定义场景状态,不设置可见!", curPlayer.GetPlayerID()) + PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID()) + elif not GameWorld.IsCrossServer(): + realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer) + if realmDifficulty: + GameWorld.DebugLog("===本服LoadMapOK时玩家处于境界难度地图,自动设置难度!realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID()) + PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty) + + curPlayer.RefreshView() + curPlayer.SetVisible(True) #如果玩家hp为0,设置玩家为死亡状态 if GameObj.GetHP(curPlayer) <= 0: @@ -1764,12 +1715,6 @@ #此时已经是下马状态不需要刷状态 但是需要通知客户端下马 PlayerHorse.PlayerRideHorseDown(curPlayer, False) - elif playerVehicle == IPY_GameWorld.pvTruck: - #玩家上骠车, 不重置自己的位置, 因为玩家现在还在切换地图中(强制上车,因为有可能被攻击) - PlayerTruck.PlayerTruckUP(curPlayer, False , False , False) - - InitPlayerTruck(curPlayer, tick) - PlayerTeam.PlayerLoginSetTeam(curPlayer, tick) #激活玩家(保证持续性Buff处理间隔) @@ -1780,12 +1725,6 @@ #如果登录的副本,执行进入副本逻辑, 因为有时间响应, 必须在EndLoadMap之后... FBLogic.DoEnterFBLogic(curPlayer, tick) - - #触发玩家进入地图的事件 - EventShell.EventResponse_OnMap(curPlayer) - - #触发玩家进入地图的事件 - EventShell.EventResponse_OnMapEx(curPlayer) #触发切换地图宠物逻辑 PetControl.DoLogic_PetLoadMapOK(curPlayer) @@ -1825,16 +1764,6 @@ #申请得到奖励物品 #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) @@ -1916,76 +1845,6 @@ 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 @@ -2024,7 +1883,6 @@ NotifyPlayerBasePoint(curPlayer, pointAttrIDList) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.RefreshPlayerAttrState() - EventShell.EventRespons_AddPoint(curPlayer) PlayerControl.SetLingGenMaxIndex(curPlayer) return @@ -2081,8 +1939,6 @@ 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=[]): @@ -2275,10 +2131,6 @@ curPlayer.ResetPos(curPlayer.GetPosX(), curPlayer.GetPosY()) return - #如果是小游戏中则停止小游戏 - if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent: - PlayerGameEvent.StopGameEvent(curPlayer, tick) - #删除有限无敌BUFF PlayerControl.DelLimitSuperBuff(curPlayer, tick) @@ -2298,125 +2150,6 @@ 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 #--------------------------------------------------------------------- @@ -2471,11 +2204,6 @@ 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): @@ -2486,14 +2214,6 @@ 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 @@ -2508,40 +2228,6 @@ #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 移动对象 @@ -2587,151 +2273,8 @@ 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 \ -# GameObj.GetHP(curObj) <= 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(); @@ -2841,209 +2384,6 @@ 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'] = GameObj.GetMaxHP(tagObj) - # 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 GameObj.GetHP(curPlayer) <= 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 时间戳 @@ -3146,9 +2486,6 @@ #设置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) @@ -3293,36 +2630,6 @@ 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 当前时间 @@ -3338,9 +2645,6 @@ if lastAction == curAction: return - #如果上一个状态是小游戏状态 - if lastAction == IPY_GameWorld.paGameEvent: - PlayerGameEvent.TakeoffFishermanEquipment(curPlayer) return #--------------------------------------------------------------------- @@ -3406,117 +2710,7 @@ 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 - +#//03 0A 更改攻击模式#tagCChangeAttackMode ##改变玩家PK模式 #@param curPlayer 玩家 #@param attackMode @@ -3545,154 +2739,6 @@ 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 GameObj.GetHP(curPlayer) == 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 # @@ -3709,59 +2755,6 @@ 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 GameObj.GetHP(curPlayer) <= 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 玩家实例 @@ -3832,321 +2825,6 @@ 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 GameObj.GetHP(summonNPC) <= 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 GameObj.GetHP(summonNPC) <= 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 GameObj.GetHP(summonNPC) <= 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 #--------------------------------------------------------------------- @@ -4277,56 +2955,12 @@ #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): ''' 死亡状态才验证时间,本服跨服通用 @@ -4507,7 +3141,7 @@ playerControl.SetToBornPlace() elif rebornType == ChConfig.rebornType_MainCity: #直接取db中配置的复活点 - PlayerControl.PlayerResetWorldPos(curPlayer, gameMap.GetRebornMapID(), gameMap.GetRebornMapX(), gameMap.GetRebornMapY(), False) + PlayerControl.PlayerResetWorldPos(curPlayer, gameMap.GetRebornMapID(), gameMap.GetRebornMapX(), gameMap.GetRebornMapY()) #重新召唤宠物 PlayerPet.AutoSummonPet(curPlayer) @@ -4558,243 +3192,6 @@ 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 @@ -4844,186 +3241,6 @@ 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 @@ -5110,12 +3327,11 @@ # @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): +def BeginTrans(curPlayer, mapID, posX, posY, lineID= -1, msg='', canLock=True, exData1=0): #=========================================================================== # if PlayerControl.IsPlayerInFight(curPlayer): # #记录传送坐标, 用于进度条结束后传送 @@ -5129,7 +3345,7 @@ # return True #=========================================================================== - PlayerControl.PlayerResetWorldPos(curPlayer, mapID, posX, posY, takeTruck, lineID, msg, canLock, exData1) + PlayerControl.PlayerResetWorldPos(curPlayer, mapID, posX, posY, lineID, msg, canLock, exData1) #PlayerControl.NotifyCode(curPlayer, "Map_Deliver_Succeed", [mapID]) return False @@ -5180,7 +3396,7 @@ if not hasEnough: #道具不够默认扣钱 costMoney = IpyGameDataPY.GetFuncCfg('TransportPay', 2) - if not TransportPayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, costMoney, transportType, ChConfig.GMTool_Offline_WorldTransfer): + if not TransportPayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, costMoney, transportType): GameWorld.DebugLog(' 传送消耗处理 传送道具不足 itemID=%s, 钱也不够costMoney=%s'%(itemID, costMoney)) return False else: @@ -5206,7 +3422,7 @@ #@param noteMark 记录类型 #@return 返回值真, 扣费成功 #@remarks 传送付费记录 -def TransportPayMoney(curPlayer, moneyType, money, transportType, noteMark): +def TransportPayMoney(curPlayer, moneyType, money, transportType): moneyList = PlayerControl.HaveMoneyEx(curPlayer, moneyType, money) if moneyList == []: return False @@ -5219,75 +3435,6 @@ 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 @@ -5370,63 +3517,6 @@ 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 # @@ -5502,28 +3592,6 @@ 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 @@ -6215,10 +4283,6 @@ # % (dist, distSum, speed, needTick, passCalcTick, checkNeedTick), curPlayer.GetID()) curPlayer.SetDict(MoveDistCalcTick, tick) curPlayer.SetDict(MoveDistSum, 0) - - #如果是小游戏中则停止小游戏 - if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent: - PlayerGameEvent.StopGameEvent(curPlayer, tick) #2010/04/30 移动修改为全C++控制, Python状态机设置为空闲(清空采集等状态) PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull) -- Gitblit v1.8.0