From 2a3e2e53da4ff2005fc84f702483fd3f29b9c569 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 17 十月 2025 20:28:44 +0800
Subject: [PATCH] 237 【福利内容】每日任务/每周任务/章节奖励-服务端(章节奖励英雄之路,成就系统)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 2969 +++++++----------------------------------------------------
1 files changed, 357 insertions(+), 2,612 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 5eb0616..4d3cf94 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -17,35 +17,25 @@
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
@@ -54,33 +44,15 @@
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 PlayerGatherTheSoul
-import PlayerFairyDomain
import PlayerCrossRealmPK
import PlayerCrossChampionship
-import PlayerCrossBattlefield
import GameFuncComm
-import PlayerMagicWeapon
-import GameLogic_FamilyBoss
-import GameLogic_TrialTower
-import GameLogic_FamilyWar
import PlayerBossReborn
import PlayerWeekParty
import PlayerFeastWeekParty
@@ -89,19 +61,11 @@
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
@@ -111,24 +75,15 @@
import PlayerActCollectWords
import PlayerActTotalRecharge
import PlayerActRechargePrize
-import PlayerActGarbageSorting
-import PlayerActXianXiaMJ
-import PlayerActGubao
-import PlayerActHorsePetTrain
import PlayerActLianqi
import PlayerActGodGift
import PlayerActFamilyCTGAssist
import PlayerActRechargeRebateGold
import PlayerActManyDayRecharge
import PlayerActSingleRecharge
-import PlayerActHorsePetFeast
-import PlayerActBossTrial
import PlayerSpringSale
-import PlayerFairyCeremony
-import PlayerNewFairyCeremony
import GY_Query_BossFirstKill
import PlayerCrossYaomoBoss
-import PlayerFeastRedPacket
import PlayerLuckyCloudBuy
import PlayerLuckyTreasure
import Item_ResetAttrPoint
@@ -139,13 +94,9 @@
import PlayerTongTianLing
import CrossRealmPlayer
import ChNetSendPack
-import FamilyRobBoss
-import FBHelpBattle
-import PlayerAssist
import PlayerArena
import PyGameData
import PlayerCoin
-import PlayerGeTui
import PlayerCharm
import PlayerDogz
import PlayerCoat
@@ -156,16 +107,15 @@
import PlayerShentong
import PlayerCustomAward
import PlayerZhanling
+import PlayerTree
import PlayerLianTi
+import PlayerTask
import PlayerYinji
import PlayerLove
import GameObj
import PlayerChangeJob
-import PlayerGuaji
-import PlayerFace
-import PlayerChatBox
import PlayerXiangong
-import PlayerMineArea
+import PlayerGoldRush
import PlayerActLoginNew
import PlayerActBuyCountGift
import PlayerActLunhuidian
@@ -174,12 +124,24 @@
import PlayerActTask
import PlayerMail
import DBDataMgr
+import UpdatePlayerName
import GameServerRefresh
+import IPY_ServerDefine
+import CommFunc
+from PyMongoDB import RecvPackToMapDB
+import PyMongoMain
+import PlayerTalk
+import PlayerHero
+import PlayerOnline
+import TurnAttack
+import PlayerHJG
+import ObjPool
import datetime
import time
import math
import re
+import base64
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -197,34 +159,10 @@
#@return 返回值无意义
#@remarks 玩家登陆游戏初始化
def InitLoginPlayer(curPlayer, tick):
- ##初始化交易列表
- if curPlayer.GetTradeList().GetTradeItemCount() == 0:
- curPlayer.GetTradeList().SetTradeListCount(ChConfig.Def_PlayerTradeMaxItemCount)
-
+ PlayerOnline.OnPlayerLogin(curPlayer)
#初始化玩家的时钟个数
if curPlayer.GetTickTypeCount() == 0:
curPlayer.SetTickTypeCount(ChConfig.TYPE_Player_Tick_Count)
-
- #初始化玩家聊天频道
- if curPlayer.GetMaxChannelCount() == 0:
- curPlayer.SetMaxChannelCount(ChConfig.Def_PlayerTalkChannelMaxCount)
-
-#===============================================================================
-# #初始化玩家鉴定管理器物品最大个数
-# identifyItemManager = curPlayer.GetIdentifyManager()
-#
-# #设置最大数量
-# if identifyItemManager.GetCount() == 0:
-# identifyItemManager.SetCount(ChConfig.TYPE_Player_identifyManagerCount)
-#
-# #初始化宝石挖除管理器最大个数
-# stoneBreakManager = curPlayer.GetStoneBreakManager()
-#
-# if stoneBreakManager.GetCount() == 0:
-# stoneBreakManager.SetCount(ChConfig.TYPE_Player_StoneBreakManagerCount)
-#===============================================================================
- #初始化物品
- #ChItem.InitPlayerLoginItem(curPlayer, tick)
return
#---------------------------------------------------------------------
##C++封包GameServer_InitOK 处理
@@ -237,52 +175,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
-
-##非同一天二次登陆
-# @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 20 货币兑换 #tagCMMoneyExchange
@@ -358,9 +253,6 @@
if PlayerControl.GetCrossMapID(curPlayer):
CrossRealmPlayer.DoExitCrossRealm(curPlayer)
-
- if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
- PlayerFB.DoExitCustomScene(curPlayer)
PetControl.DoLogic_PetLoadMapOK(curPlayer)
@@ -483,52 +375,29 @@
#---------------------------------------------------------------------
'''
-旧登录流程 -- 留着对比
+登录流程
+UserCrtlDB
+ onAuthentication 玩家登录 :验证账号-若没有角色则创角-返回角色信息-通知Map C++
+ Map C++调用 PlayerLogin
MapServer
ChPlayer:def PlayerLogin(index, tick)
- DoPlayerLogin
- curPlayer.Sync_ClientPlayerLogin()
- curPlayer.Sync_GameServer_MapID() #同步GameServer自己的地图ID
- curPlayer.BalanceServer_PlayerLoginInitOK()
-
-GameServer
- ChPlayer:def PlayerLoadMapState(index, tick) pack.GetLoadState()=0 此时的 LoadState 为0
- curPlayer.SetIsLoadMap(True) 设置在加载地图
-
- ChPlayer:def PlayerLogin(index, tick)
- curPlayer.MapServer_InitOK() 通知地图自己OK了
-
-MapServer
- PlayerEventCounter:def GameServer_InitOK(index, tick)
- curPlayer.SendToBServerServerInitOK() #通知BServer自己OK了
- ChPlayer:def OnAllServerInitOK(curPlayer, tick)
+ DoPlayerLogin
+ curPlayer.Sync_ClientPlayerLogin() #01 02 玩家初始化#tagCDBPlayer
+ curPlayer.BalanceServer_PlayerLoginInitOK() #向route设置玩家在map中的索引
+
+ curPlayer.SendToBServerServerInitOK() #通知route登录成功 ,route向客户端发送//01 09 服务器准备就绪#tagServerPrepareOK
+ ChPlayer:def OnAllServerInitOK(curPlayer, tick)
- ChPlayer:def LoadMapOK(curPlayer, tick)
- curPlayer.GameServer_SetLoadMapState(1) #通知GameServer切换地图停止
- curPlayer.SetMapLoadOK(True)
- curPlayer.SetInitOK(True)
- curPlayer.EndLoadMap()
-
-GameServer
- ChPlayer:def PlayerLoadMapState(index, tick) pack.GetLoadState()=1 此时的 LoadState 为1
- PlayerLoginLoadMapOK
+ ChPlayer:def __Func_LoadMapOK(curPlayer, tick) #!!!直接调用不等待客户端封包 //01 07 地图读取OK#tagCInitMapOK
+ curPlayer.SetMapLoadOK(True)
curPlayer.SetInitOK(True)
- curPlayer.MapServer_GameServerRefreshOK() #通知地图服务器玩家初始化成功
- curPlayer.SetIsLoadMap(False)
-
-MapServer
- GameServerRefresh:GameSever_PlayerInitOK curPlayer.GetGameServerInitOK()=0
- curPlayer.SetGameServerInitOK(True)
-
-后续补充流程
-MapServer
- ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick)
- 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑
- 通知GameServer地图最终登录成功了
-
-GameServer
- ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick)
- 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑
+ curPlayer.EndLoadMap() #通知客户端 04 03 玩家登录数据发送完毕OK#tagPlayerLoginLoadOK
+
+ GameServerRefresh:GameSever_PlayerInitOK
+ curPlayer.SetGameServerInitOK(True)
+
+ ChPlayer:def DoPlayerRealLoginOK(curPlayer, tick) 玩家真正登录成功处理,用于替换 __DoPlayerLoginServer 中的功能登录逻辑
+
'''
##玩家登陆游戏逻辑处理
@@ -539,7 +408,6 @@
def DoPlayerLogin(curPlayer, tick):
#这里只做初始化逻辑
curPlayer.SetDict(ChConfig.Def_PlayerKey_LoadMapIsLogin, 1)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 0) # 每次登录重置
#通知时间
Sync_PyServerDataTimeToClient(curPlayer)
@@ -572,11 +440,9 @@
curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr())
#初始化玩家背包
InitPlayerPack(curPlayer)
- #通知玩家物品信息
- __Sync_PackDetel(curPlayer)
if GameWorld.IsCrossServer():
- SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick)
+ #SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick)
# 重置所有技能CD
DoPlayerLoginInMap(curPlayer, tick)
@@ -584,9 +450,7 @@
DataRecordPack.DR_PlayerLogin(curPlayer)
EventReport.WriteEvent_login(curPlayer)
#---玩家上线, 宠物逻辑处理---
- PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
-
- PlayerTeam.OnPlayerLoginCrossServer(curPlayer)
+ #PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
return
leaveServerSecond = PlayerControl.GetPlayerLeaveServerSecond(curPlayer)
@@ -599,7 +463,10 @@
# 离线过久恢复为非跨服状态
if PlayerControl.GetCrossMapID(curPlayer):
PlayerControl.SetCrossMapID(curPlayer, 0)
-
+
+ __FirstLoginOnEnter(curPlayer)
+
+ TurnAttack.OnPlayerLogin(curPlayer)
SyncGuideState(curPlayer)
#上线检查一次装备属性
@@ -608,23 +475,18 @@
PlayerControl.UpdPlayerServerGroupID(curPlayer)
#上线学习技能
- SkillCommon.PlayerLoginCheckLearnSkill(curPlayer)
+ #SkillCommon.PlayerLoginCheckLearnSkill(curPlayer)
#刷新技能CD
- SkillCommon.PlayerLoginUpdateSkillCD(curPlayer, tick)
+ #SkillCommon.PlayerLoginUpdateSkillCD(curPlayer, tick)
#通知玩家技能信息
- __Sync_ClientSkill(curPlayer)
- #清除国家答题Buff
- #PlayerExam.DoLogic_ExitExam(curPlayer, tick, needRefresh = False)
+ #__Sync_ClientSkill(curPlayer)
#清除VIPbuff
#BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_VIPExp_SkillTypeID, tick)
#通知玩家的buff
- __Sync_ClientBuff(curPlayer)
-
- #初始化现实时间物品
- InitRealityTimeItem(curPlayer, tick)
+ #__Sync_ClientBuff(curPlayer)
#---刷新了玩家属性, 登陆只刷新一次,其他地方不用刷
DoPlayerLoginInMap(curPlayer, tick)
@@ -636,16 +498,10 @@
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)
@@ -654,49 +510,11 @@
GiveDownloadPatchAward(curPlayer)
#PK模式
- SyncPKModel(curPlayer)
-
- #装备相关信息
- ChEquip.OnPlayerEquipLoginLogic(curPlayer)
-
- #大师
- PlayerGreatMaster.MasterOnLogin(curPlayer)
-
- # 推送提醒
- PlayerGeTui.LoginNotifySetting(curPlayer)
-
- #通知VIP
- PlayerVip.DoOnLogin(curPlayer, tick)
-
- #通知法宝精炼等级
- PlayerRefineStove.DoOnLogin(curPlayer, tick)
+ #SyncPKModel(curPlayer)
#---玩家上线, 宠物逻辑处理---
- 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()
-
- #清空玩家万能背包中的任务物品
- ItemControler.ClearPackEventItem(curPlayer, IPY_GameWorld.rptAnyWhere)
-
- #PlayerLoginNotify(curPlayer, tick)
-
- #防沉迷计算下线累积时间
- PlayerGameWallow.Calc_Wallow_OfflineTime(curPlayer, tick)
+ #PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
+ #PlayerPet.OnPlayerPetLogin(curPlayer)
# 通知等级奖励领取记录
PlayerLVAward.Sync_LVAwardGetRecordInfo(curPlayer)
@@ -705,30 +523,14 @@
# 首充/天天首充/充值豪礼
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)
-
- # 提示贵宾俱乐部信息
- #PlayerVip.NoteVIPClubInfo(curPlayer)
-
- #角色改名次数
- UpdatePlayerName.Sync_UpdatePlayerNameCount(curPlayer)
+ #PlayerControl.PlayerControl(curPlayer).NotifyPlayerDeadTime(curPlayer)
# 坐骑相关通知
PlayerHorse.PlayerHorseLogin(curPlayer)
@@ -746,28 +548,15 @@
# 开服活动奖励信息
OpenServerCampaign.OnOpenServerCampaignLogin(curPlayer)
-
- # 试炼之塔
- GameLogic_TrialTower.OnFBPlayerLogin(curPlayer)
- # 古神禁地
- GameLogic_GodArea.GodAreaOnLogin(curPlayer)
- # 采集NPC次数通知
- NPCCommon.SyncCollNPCTime(curPlayer)
- # 每日活跃度
- PlayerActivity.OnLogin(curPlayer)
+ # 采集NPC次数通知
+ #NPCCommon.SyncCollNPCTime(curPlayer)
# 副本进入时间
FBCommon.FBOnLogin(curPlayer)
- #世界等级
- PlayerWorldAverageLv.OnLogin(curPlayer)
-
# 投资理财
PlayerGoldInvest.OnLogin(curPlayer)
-
- #属性果实使用情况
- PlayerAttrFruit.AttrFruitOnLogin(curPlayer)
#成就
PlayerSuccess.SuccOnLogin(curPlayer)
@@ -782,12 +571,6 @@
# Sync_AutoFightSetting(curPlayer)
PlayerFamily.OnPlayerLogin(curPlayer, tick)
- #改到 GameServerRefresh GameSever_PlayerInitOK后处理才能保证玩家已经在Gameserver注册
- #PlayerDienstgrad.RefreshBillBoardDienstgrad(curPlayer)
- # 称号
- PlayerDienstgrad.Sync_AllDienstgradOnLogin(curPlayer)
- # 资源找回OnLogin
- PlayerRecover.RecoverOnLogin(curPlayer)
# 时装
PlayerCoat.OnLogin_Coat(curPlayer)
@@ -795,7 +578,6 @@
# 跨服PK
PlayerCrossRealmPK.DoPlayerLogin(curPlayer)
PlayerCrossChampionship.DoPlayerLogin(curPlayer)
- PlayerCrossBattlefield.DoPlayerLogin(curPlayer)
# 幸运云购
PlayerLuckyCloudBuy.OnPlayerLogin(curPlayer)
@@ -807,7 +589,7 @@
PlayerControl.NotifyPlayerAllCurrency(curPlayer)
PlayerControl.NotifyUseMoneyTotal(curPlayer)
#通知基础属性
- NotifyPlayerBasePoint(curPlayer)
+ #NotifyPlayerBasePoint(curPlayer)
#跨服充值排行
CrossActCTGBillboard.OnPlayerLogin(curPlayer)
@@ -837,45 +619,17 @@
PlayerActFamilyCTGAssist.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)
- # 协助
- PlayerAssist.OnPlayerLogin(curPlayer)
# 极品白拿
PlayerFreeGoods.OnLogin(curPlayer)
# BOSS复活活动
PlayerBossReborn.OnLogin(curPlayer)
- # boss历练
- PlayerActBossTrial.OnPlayerLogin(curPlayer)
- # 骑宠盛宴活动
- PlayerActHorsePetFeast.OnLogin(curPlayer)
# 周狂欢活动
PlayerWeekParty.OnLogin(curPlayer)
# 购买次数礼包活动
@@ -898,14 +652,6 @@
PlayerFeastTravel.OnPlayerLogin(curPlayer)
# 登录奖励活动
PlayerActLogin.OnLogin(curPlayer)
- # 垃圾分类活动
- PlayerActGarbageSorting.OnPlayerLogin(curPlayer)
- # 仙匣秘境活动
- PlayerActXianXiaMJ.OnPlayerLogin(curPlayer)
- # 古宝养成活动
- PlayerActGubao.OnPlayerLogin(curPlayer)
- # 骑宠养成活动
- PlayerActHorsePetTrain.OnPlayerLogin(curPlayer)
# 炼器活动
PlayerActLianqi.OnPlayerLogin(curPlayer)
# 天帝礼包活动
@@ -916,36 +662,21 @@
PlayerActSingleRecharge.OnPlayerLogin(curPlayer)
# 转盘活动
PlayerActTurntable.OnPlayerLogin(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)
# 小助手
SyncLittleHelper(curPlayer)
- # 副本助战
- FBHelpBattle.DoPlayerLogin(curPlayer)
- # 聚魂
- PlayerGatherSoul.PlayerLogin(curPlayer)
- PlayerGatherTheSoul.OnPlayerLogin(curPlayer)
- #缥缈仙域
- PlayerFairyDomain.OnLogin(curPlayer)
PlayerFB.OnLogin(curPlayer)
#技能专精信息
- SkillShell.NotifyElementSkillInfo(curPlayer)
+ #SkillShell.NotifyElementSkillInfo(curPlayer)
#Boss首杀
GY_Query_BossFirstKill.OnPlayerLogin(curPlayer)
#通天令
@@ -983,10 +714,7 @@
curPlayer.SetState(0) # 脱机挂恢复为正常上线
curPlayer.SetCountryLastWeekHornor(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
- #tjgTime = PlayerTJG.GetTJGTime(curPlayer)
- #if tjgTime:
- # PlayerControl.SendGameServerRefreshState(curPlayer, IPY_GameWorld.CDBPlayerRefresh_HappyPoint, tjgTime)
-
+
PlayerControl.DoGMForbidenTalkOnLogin(curPlayer)
DataRecordPack.DR_PlayerLogin(curPlayer) # 放最后,记录等级、经验等信息
return
@@ -996,27 +724,28 @@
该函数为地图最终登录成功才会执行到,以后一些功能类的登录处理建议均写到这里
旧的功能先不动( __DoPlayerLoginServer 函数中的功能),如果有登录相关的bug再考虑是否移动到此函数
'''
-
- if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_RealLoginOK):
- #切地图的不处理,切地图的也会触发该函数
- return
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RealLoginOK, 1)
GameWorld.Log("MapServer->DoPlayerRealLoginOK", curPlayer.GetPlayerID())
if GameWorld.IsCrossServer():
pass
else:
+ PyMongoMain.GetUserCtrlDB().OnPlayerLogin(curPlayer)
+ PlayerHero.OnPlayerLogin(curPlayer)
PlayerMail.OnPlayerLogin(curPlayer)
- PlayerChatBox.OnPlayerLogin(curPlayer)
- PlayerFace.OnPlayerLogin(curPlayer)
+ PlayerHJG.OnPlayerLogin(curPlayer)
PlayerXiangong.OnPlayerLogin(curPlayer)
PlayerGubao.OnPlayerLogin(curPlayer)
PlayerShentong.OnPlayerLogin(curPlayer)
PlayerZhanling.OnPlayerLogin(curPlayer)
- PlayerMineArea.OnPlayerLogin(curPlayer)
- PlayerGuaji.OnPlayerLogin(curPlayer)
+ PlayerTask.OnPlayerLogin(curPlayer)
+ PlayerTree.OnPlayerLogin(curPlayer)
+ PlayerGoldRush.OnPlayerLogin(curPlayer)
PlayerActFamilyGCZ.OnPlayerLogin(curPlayer)
+ PlayerTalk.OnPlayerLogin(curPlayer)
+ SyncADCntInfo(curPlayer)
+ UpdatePlayerName.OnPlayerLogin(curPlayer)
+ PlayerActivity.OnPlayerLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
@@ -1039,10 +768,56 @@
NetPackCommon.SendFakePack(curPlayer, playerInfoEx)
return
-## 合服首登处理
-# @param curPlayer
-# @return None
+def __FirstLoginOnEnter(curPlayer):
+ ## 首登处理
+
+ playerID = curPlayer.GetID()
+ if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FirstLogin):
+ return
+
+ GameWorld.Log('玩家是第一次进入游戏', playerID)
+ # 特殊说明: 如果地图没有完全初始化好,客户端断开或者异常等情况会触发RunGateGameServerMapServerKickOutPlayerNoSave
+ # 那么在DoPlayerLogin 中设置的数据将不会被保存, 如会导致第一个任务重复触发问题,记录多次发送
+ EventReport.WriteEvent_Entry(curPlayer, 4)
+ #EventReport.EventReport(ShareDefine.Def_UserAction_FirstLogin, "", curPlayer)
+
+ curPlayer.SetFightPoint(1) # 初始化为1倍消耗
+
+ #---补满血满魔---
+ GameObj.SetHP(curPlayer, GameObj.GetMaxHP(curPlayer))
+ #curPlayer.SetMP(curPlayer.GetMaxMP())
+
+ #默认触发一次功能开启
+ if curPlayer.GetLV() == 1:
+ GameFuncComm.DoFuncOpenLogic(curPlayer)
+
+ #初始化组队状态
+ #autoJoinReqCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 1)
+ #autoInviteCheck = IpyGameDataPY.GetFuncCfg("TeamCheckSet", 2)
+ #PlayerControl.SetTeamCheckStateEx(curPlayer, int(not autoJoinReqCheck), int(not autoInviteCheck))
+
+ #玩家默认恶名值
+ #curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue)
+
+ #curPlayer.SetDict("ThunderLogin", 1)
+ #记录第一次登陆
+ DataRecordPack.DR_FirstLogin(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)
+
+ #首登邮件
+ mailList = IpyGameDataPY.GetFuncEvalCfg("MailLVAward", 2)
+ for mailTypeKey, mailItemList in mailList:
+ PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList)
+
+ PlayerHero.OnPlayerFirstLogin(curPlayer)
+
+ #淘金初始化
+ PlayerGoldRush.InitGoldEnergy(curPlayer)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FirstLogin, 1)
+ return
+
def __DoMixServerFirstLogin(curPlayer):
+ ## 合服首登处理
isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)
if not isMixServer:
return
@@ -1064,6 +839,8 @@
return
curPlayer.SetDict(ChConfig.Def_PlayerKey_MixServerFirstLogin, 1)
+
+ PlayerSignDay.ResetDaySign(curPlayer) # 重置签到
# 重置首充双倍
PlayerCoin.DoResetCTGCount(curPlayer, "MixServer")
@@ -1101,20 +878,6 @@
# 同步排行榜
PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
-
- # 天星塔全服过关记录
- GameLogic_SkyTower.OnMixFirstLogin(curPlayer)
-
- # boss凭证
- PlayerActBossTrial.OnMixFirstLogin(curPlayer)
- # 仙匣秘境
- PlayerActXianXiaMJ.OnMixFirstLogin(curPlayer)
- # 古宝养成
- PlayerActGubao.OnMixFirstLogin(curPlayer)
- # 骑宠养成
- PlayerActHorsePetTrain.OnMixFirstLogin(curPlayer)
- # 重置玩家改名次数
- #UpdatePlayerName.ResetChangeNameCnt(curPlayer)
return
#---------------------------------------------------------------------
@@ -1126,51 +889,6 @@
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') #某时间段内上线提示
- 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])
-
#---------------------------------------------------------------------
##通知背包详细信息
@@ -1184,18 +902,6 @@
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)
@@ -1226,16 +932,6 @@
# #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
#---------------------------------------------------------------------
@@ -1287,55 +983,6 @@
return
#---------------------------------------------------------------------
-##上线时通知离线时间(离线挂机功能)
-# @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 时间戳
@@ -1351,37 +998,27 @@
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())
+
+ #卡牌改为0视野
+ if curPlayer.GetSightLevel() != curPlayer.GetID():
PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
- elif not GameWorld.IsCrossServer():
- realmDifficulty = PlayerControl.GetMapRealmDifficulty(curPlayer)
- if realmDifficulty:
- GameWorld.DebugLog("===登录本服地图时,处于境界难度地图,自动设置难度! realmDifficulty=%s" % realmDifficulty, curPlayer.GetPlayerID())
- PlayerControl.SetRealmDifficulty(curPlayer, realmDifficulty)
-
+ if curPlayer.GetSight() != 0:
+ PlayerControl.SetSight(curPlayer, 0)
+
PlayerState.ChangePlayerSigh(curPlayer, tick)
if GameWorld.IsCrossServer():
curPlayer.SetForbiddenSyncClientState(False)
- playerControl = PlayerControl.PlayerControl(curPlayer)
- #刷新所有状态
- playerControl.ReCalcAllState()
+ olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
+ olPlayer.ReCalcAllAttr()
if GameWorld.IsCrossServer():
curPlayer.SetForbiddenSyncClientState(True)
@@ -1473,7 +1110,9 @@
curPlayer.SendToBServerServerInitOK() #通知route登录成功 ,route向客户端发送0109包
OnAllServerInitOK(curPlayer, tick)
#到此处已经可以保存数据,即使客户端不回包断线
- #后续登录流程等客户端回复 //01 07 地图读取OK#tagCInitMapOK 调用 LoadMapOK
+ #原 //01 07 地图读取OK#tagCInitMapOK 逻辑 直接调用
+ __Func_LoadMapOK(index, tick)
+ GameServerRefresh.GameSever_PlayerInitOK(index, tick)
except:
curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
import traceback
@@ -1526,22 +1165,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()):
@@ -1561,7 +1185,7 @@
PetControl.Sync_PetInfo_ChangeMap(curPlayer, tick)
#通知GameServer自己现在的地图
- curPlayer.Sync_GameServer_MapID()
+ #curPlayer.Sync_GameServer_MapID()
#如果本地图是副本的话, 则通知GameServer玩家进入副本
if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtTeam:
@@ -1580,54 +1204,63 @@
#@return 返回值无意义
#@remarks 初始化玩家背包
def InitPlayerPack(curPlayer) :
- itemManager = curPlayer.GetItemManager()
+
+ #设置装备实际个数,默认最大个数
+ PlayerControl.Init_PackCount(curPlayer, IPY_GameWorld.rptEquip, defaultMax=True, isSync=False)
#初始化玩家背包
- PlayerControl.Init_ItemPack(curPlayer)
+ PlayerControl.Init_PackCount(curPlayer, IPY_GameWorld.rptItem)
#初始化玩家仓库
- PlayerControl.Init_Warehouse(curPlayer)
+ #PlayerControl.Init_Warehouse(curPlayer)
+
+ #初始化鉴定背包,默认最大个数用于存放主线掉落
+ PlayerControl.Init_PackCount(curPlayer, IPY_GameWorld.rptIdentify, defaultMax=True)
+
+ #初始化英雄背包
+ PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptHero)
+
+ #初始化临时交换背包,默认最大个数
+ PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptTempSwap, defaultMax=True, isSync=False)
+
+ #初始化临时存放背包,默认最大个数
+ PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptTempItem, defaultMax=True, isSync=False)
#初始化寻宝背包
- PlayerControl.Init_TreasurePack(curPlayer)
+ PlayerControl.Init_PackCount(curPlayer, ShareDefine.rptTreasure)
#初始化神兽物品背包
- curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
- curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem))
- curPack.Sync_PackCanUseCount()
+ #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzItem)
+ #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzItem))
+ #curPack.Sync_PackCanUseCount()
#初始化神兽装备背包
- curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
- curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzEquip))
- curPack.Sync_PackCanUseCount()
+ #curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip)
+ #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptDogzEquip))
+ #curPack.Sync_PackCanUseCount()
#初始化垃圾分类背包
- curPack = itemManager.GetPack(ShareDefine.rptGarbage)
- curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptGarbage))
- curPack.Sync_PackCanUseCount()
-
- #初始化临时交换背包
- curPack = itemManager.GetPack(ShareDefine.rptTempSwap)
- curPack.SetCount(ChConfig.Def_PackCnt_TempSwap)
-
- #初始化临时存放背包
- curPack = itemManager.GetPack(ShareDefine.rptTempItem)
- curPack.SetCount(ChConfig.Def_PackCnt_TempItem)
-
- #设置装备实际个数
- curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
- curPack.SetCount(ItemCommon.GetPackInitCount(IPY_GameWorld.rptEquip))
+ #curPack = itemManager.GetPack(ShareDefine.rptGarbage)
+ #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptGarbage))
+ #curPack.Sync_PackCanUseCount()
#初始化垃圾桶
#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(IPY_GameWorld.rptAnyWhere)
+ #curPack.SetCount(IPY_GameWorld.Def_AnyWherePackCount)
#初始化宠物背包
- curPack = itemManager.GetPack(ShareDefine.rptPet)
- curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptPet))
+ #curPack = itemManager.GetPack(ShareDefine.rptPet)
+ #curPack.SetCount(ItemCommon.GetPackInitCount(ShareDefine.rptPet))
#curPack.Sync_PackCanUseCount()
+
+ ItemCommon.SyncPackBuyCnt(curPlayer)
+
+ #通知玩家物品信息
+ __Sync_PackDetel(curPlayer)
+
+ ItemControler.CheckGiveBindMoneyTypeItem(curPlayer)
return
#---------------------------------------------------------------------
@@ -1668,17 +1301,6 @@
return False
return True
-
-#---------------------------------------------------------------------
-##C++封包触发, 切换地图成功( 目标地图 )
-#@param index 玩家索引
-#@param tick 时间戳
-#@return 返回值无意义
-#@remarks C++封包触发, 切换地图成功( 目标地图 )
-def LoadMapOK(index, tick):
- GameWorld.GetPsycoFunc(__Func_LoadMapOK)(index, tick)
- GameServerRefresh.GameSever_PlayerInitOK(index, tick)
- return
#---------------------------------------------------------------------
##C++封包触发, 切换地图成功( 目标地图 )
@@ -1727,20 +1349,14 @@
#将玩家放置在这个地图上
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)
+ #卡牌改为0视野
+ if curPlayer.GetSightLevel() != curPlayer.GetID():
+ PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
+ if curPlayer.GetSight() != 0:
+ PlayerControl.SetSight(curPlayer, 0)
+
+ curPlayer.RefreshView()
+ curPlayer.SetVisible(True)
#如果玩家hp为0,设置玩家为死亡状态
if GameObj.GetHP(curPlayer) <= 0:
@@ -1788,15 +1404,7 @@
#=======================================================================
#此时已经是下马状态不需要刷状态 但是需要通知客户端下马
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)
@@ -1805,12 +1413,6 @@
#如果登录的副本,执行进入副本逻辑, 因为有时间响应, 必须在EndLoadMap之后...
FBLogic.DoEnterFBLogic(curPlayer, tick)
-
- #触发玩家进入地图的事件
- EventShell.EventResponse_OnMap(curPlayer)
-
- #触发玩家进入地图的事件
- EventShell.EventResponse_OnMapEx(curPlayer)
#触发切换地图宠物逻辑
PetControl.DoLogic_PetLoadMapOK(curPlayer)
@@ -1851,16 +1453,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)
@@ -1871,13 +1463,7 @@
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:
@@ -1887,7 +1473,6 @@
PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
PlayerYinji.OnLoadMap(curPlayer)
- ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount() # 刷新装备珍品星级
#EndLoadMap需放在最后, 0403 tagPlayerLoginLoadOK
curPlayer.EndLoadMap()
@@ -1941,76 +1526,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
@@ -2049,8 +1564,7 @@
NotifyPlayerBasePoint(curPlayer, pointAttrIDList)
playerControl = PlayerControl.PlayerControl(curPlayer)
playerControl.RefreshPlayerAttrState()
- EventShell.EventRespons_AddPoint(curPlayer)
- PlayerControl.SetLingGenMaxIndex(curPlayer)
+ #PlayerControl.SetLingGenMaxIndex(curPlayer)
return
#// B2 07 重置加点 #tagCMResetAttrPoint
@@ -2106,8 +1620,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=[]):
@@ -2300,10 +1812,6 @@
curPlayer.ResetPos(curPlayer.GetPosX(), curPlayer.GetPosY())
return
- #如果是小游戏中则停止小游戏
- if curPlayer.GetPlayerAction() == IPY_GameWorld.paGameEvent:
- PlayerGameEvent.StopGameEvent(curPlayer, tick)
-
#删除有限无敌BUFF
PlayerControl.DelLimitSuperBuff(curPlayer, tick)
@@ -2323,125 +1831,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
#---------------------------------------------------------------------
@@ -2496,11 +1885,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):
@@ -2511,14 +1895,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
@@ -2533,40 +1909,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 移动对象
@@ -2612,151 +1954,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();
@@ -2866,209 +2065,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 时间戳
@@ -3077,28 +2073,6 @@
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 玩家索引
@@ -3113,10 +2087,19 @@
except:
import traceback
GameWorld.RaiseException("玩家下线逻辑错误\r\n%s" % traceback.format_exc())
-
+ RecvPackToMapDB.MapCallDB(GetPackSaveData(curPlayer))
#调用底层使玩家下线
curPlayer.DoDisconnect(tick)
+# 简化c++的保存数据封包
+def GetPackSaveData(curPlayer):
+ roleSaveData = base64.b64decode(curPlayer.GetPackData()) # base64加密了
+ allData = ""
+ allData = CommFunc.WriteBYTE(allData, IPY_ServerDefine.gstUpdate)
+ allData = CommFunc.WriteString(allData, len(roleSaveData), roleSaveData)
+ return allData
+
+
##玩家正常下线
#@param curPlayer 玩家索引
#@param tick 时间戳
@@ -3139,15 +2122,6 @@
#流向记录玩家下线
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) \
@@ -3163,18 +2137,16 @@
#设置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)
#下线召回宠物
PetControl.ReCallFightPet(curPlayer)
- #PlayerTJG.CalcPlayerTJG(curPlayer, tick)
-
#离线session
EventReport.WriteEvent_session(curPlayer)
+
+ #需放最后
+ PlayerOnline.OnPlayerLogoff(curPlayer)
return
#---------------------------------------------------------------------
@@ -3311,36 +2283,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 当前时间
@@ -3356,9 +2298,6 @@
if lastAction == curAction:
return
- #如果上一个状态是小游戏状态
- if lastAction == IPY_GameWorld.paGameEvent:
- PlayerGameEvent.TakeoffFishermanEquipment(curPlayer)
return
#---------------------------------------------------------------------
@@ -3424,117 +2363,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
@@ -3563,154 +2392,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
#
@@ -3727,59 +2408,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 玩家实例
@@ -3850,321 +2478,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
#---------------------------------------------------------------------
@@ -4295,56 +2608,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):
''' 死亡状态才验证时间,本服跨服通用
@@ -4454,11 +2723,7 @@
return
elif rebornType == ChConfig.rebornType_UseItem:
- if crossMapID == ChConfig.Def_FBMapID_CrossBattlefield:
- rebornItemID = IpyGameDataPY.GetFuncCfg("CrossBattlefieldReborn", 1)
- rebornItem = ItemCommon.FindItemInPackByItemID(curPlayer, rebornItemID, IPY_GameWorld.rptItem)
- else:
- rebornItem = ItemCommon.FindItemInPackByEffectEx(curPlayer, ChConfig.Def_Effect_Reborn)
+ rebornItem = ItemCommon.FindItemInPackByEffectEx(curPlayer, ChConfig.Def_Effect_Reborn)
if not rebornItem:
GameWorld.ErrLog("复活道具不足,无法原地复活! ", playerID)
return
@@ -4525,7 +2790,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)
@@ -4576,243 +2841,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
@@ -4862,186 +2890,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
@@ -5128,12 +2976,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):
# #记录传送坐标, 用于进度条结束后传送
@@ -5147,7 +2994,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
@@ -5198,7 +3045,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:
@@ -5211,7 +3058,7 @@
# @param transportType 传送类型
# @return 是否vip等级限制
def TransportVipLvRestrict(curPlayer, transportType):
- return PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FreeTransport)
+ return 0
@@ -5224,7 +3071,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
@@ -5237,75 +3084,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
@@ -5352,7 +3130,7 @@
#参考经验
rExp = PlayerControl.GetPlayerReExp(curPlayer)
reLV = curPlayer.GetLV() #参考等级
- worldLvExpRate = PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) #世界等级经验加成
+ worldLvExpRate = 0
#经验公式
redeemExp = int(eval(recList[1]))
@@ -5388,63 +3166,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
#
@@ -5460,34 +3181,6 @@
# @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
@@ -5521,46 +3214,28 @@
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))
+def PlayerOnDay(curPlayer):
+ #玩法前瞻奖励
+ gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
+ if gameNoticeAwardState:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GameNoticeAwardState, 0)
+ Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_GameNotice, 0)
+ #每日分享奖励重置
+ shareGameAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShareGameAwardState)
+ if shareGameAwardState:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ShareGameAwardState, 0)
+ Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_ShareGame, 0)
+ #开服每日奖励
+ awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OpenSererDailyAward)
+ if awardState:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OpenSererDailyAward, 0)
+ Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_OpenServerDailyAward, 0)
+ #开服每日奖励
+ awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargeDayAward)
+ if awardState:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargeDayAward, 0)
+ Sync_RewardGetRecordInfo(curPlayer, ChConfig.Def_RewardType_RechargeDayAward, 0)
+ ADCntOnDay(curPlayer)
return
#//A5 04 玩家领取奖励 #tagCMPlayerGetReward
@@ -5587,33 +3262,30 @@
# 活跃度奖励
if rewardType == ChConfig.Def_RewardType_Activity:
PlayerActivity.GetActivityAward(curPlayer, dataEx)
- # 活跃放置奖励
- elif rewardType == ChConfig.Def_RewardType_ActivityPlace:
- PlayerActivity.GetActivityPlaceReward(curPlayer)
- # 挂机奖励
- elif rewardType == ChConfig.Def_RewardType_Guaji:
- PlayerGuaji.OnGetGuajiAward(curPlayer, dataEx)
+ # 每日任务奖励
+ elif rewardType == ChConfig.Def_RewardType_DailyTask:
+ PlayerActivity.GetDailyTaskAward(curPlayer, dataEx)
+ # 成就奖励
+ elif rewardType == ChConfig.Def_RewardType_Success:
+ PlayerSuccess.GetSuccessAward(curPlayer, dataEx)
+ # 仙树免费减时
+ elif rewardType == ChConfig.Def_RewardType_TreeFreeTime:
+ PlayerTree.FreeReduceTreeLVTime(curPlayer)
+ # 广告奖励
+ elif rewardType == ChConfig.Def_RewardType_ADAward:
+ OnGetADAward(curPlayer, dataEx)
# 每日免费直购礼包
elif rewardType == ChConfig.Def_RewardType_DayFreeGoldGift:
PlayerDailyGiftbag.OnGetDailyFreeGiftbag(curPlayer)
- # 仙盟联赛冠军仙盟每日俸禄奖励
- elif rewardType == ChConfig.Def_RewardType_ChampionFamilyDailyReward:
- GameLogic_FamilyWar.GetChampionFamilyDailyReward(curPlayer)
- # 仙魔之争胜利场数奖励
- elif rewardType == ChConfig.Def_RewardType_XMZZWinCnt:
- GameLogic_XMZZ.GetXMZZWinPrize(curPlayer, dataEx)
# 仙盟每日福利奖励
- elif rewardType == ChConfig.Def_RewardType_FamilyDayAward:
- PlayerFamily.GetFamilyDayAward(curPlayer)
+ #elif rewardType == ChConfig.Def_RewardType_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_FirstCharge:
+ PlayerGoldGift.GetPlayerFirstCharge(curPlayer, dataEx, dataExStr)
# 领取极品白拿
elif rewardType == ChConfig.Def_RewardType_FreeGoods:
PlayerFreeGoods.OnGetFreeGoods(curPlayer, dataEx)
@@ -5632,12 +3304,6 @@
# 领取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)
@@ -5647,9 +3313,6 @@
# 功能开启奖励
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)
@@ -5659,12 +3322,6 @@
# 领取登录奖励活动奖励
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)
@@ -5695,12 +3352,6 @@
# 跨服妖魔boss伤害奖励
elif rewardType == ChConfig.Def_RewardType_CrossYaomoBossHurt:
PlayerCrossYaomoBoss.GetCrossYaomoBossHurtAward(curPlayer, dataEx, tick)
- # 古宝特殊效果物品奖励
- elif rewardType == ChConfig.Def_RewardType_GubaoItemEff:
- PlayerGubao.GetGubaoItemEffAward(curPlayer, dataEx, dataExStr)
- # 成就积分奖励
- elif rewardType == ChConfig.Def_RewardType_SuccessScore:
- PlayerSuccess.GetSuccessScoreAward(curPlayer, dataEx)
# 买一送多活动免费奖励
elif rewardType == ChConfig.Def_RewardType_BuyOne:
PlayerActBuyOne.GetBuyOneFreeAward(curPlayer, dataEx, dataExStr)
@@ -5719,42 +3370,30 @@
# 轮回殿奖励
elif rewardType == ChConfig.Def_RewardType_LunhuidianAward:
PlayerActLunhuidian.GetLunhuidianAward(curPlayer, dataEx, dataExStr)
- #缥缈奇遇领取
- elif rewardType == ChConfig.Def_RewardType_FairyAdventuresAward:
- PlayerFairyDomain.GetFairyAdventuresAward(curPlayer, dataEx, dataExStr)
#历史累计充值领取
elif rewardType == ChConfig.Def_RewardType_HistoryChargeAward:
PlayerGoldGift.OnGetHistoryRechargeAward(curPlayer, dataEx)
#在线特惠充值额外奖励
elif rewardType == ChConfig.Def_RewardType_OnlineRechargeTH:
PlayerCoin.OnGetOnlineRechargeTH(curPlayer)
- #天星塔全服挑战层领奖
- elif rewardType == ChConfig.Def_RewardType_SkyTowerServerChallengeReward:
- GameLogic_SkyTower.OnGetSkyTowerServerChallengeReward(curPlayer, dataEx, dataExStr)
#创角奖励
elif rewardType == ChConfig.Def_RewardType_CreateRole:
OnGetCreateRoleAward(curPlayer)
#自定义奖励
elif rewardType == ChConfig.Def_RewardType_CustomAward:
PlayerCustomAward.OnGetCustomAward(curPlayer, dataEx)
- #境界修仙之路奖励
- elif rewardType == ChConfig.Def_RewardType_RealmXXZL:
- PlayerPrestigeSys.GetXXZLAward(curPlayer, dataEx)
#境界渡劫任务条件奖励
elif rewardType == ChConfig.Def_RewardType_RealmLVUpTask:
PlayerPrestigeSys.GetRealmLVUpTaskAward(curPlayer, dataEx)
- #仙盟boss伤害奖励
- elif rewardType == ChConfig.Def_RewardType_FamilyBossHurt:
- GameLogic_FamilyBoss.GetFamilyBossHurtAward(curPlayer, dataEx, dataExStr)
#打包直购礼包奖励
elif rewardType == ChConfig.Def_RewardType_DailyPackBuyGift:
PlayerGoldGift.GetDailyPackBuyGift(curPlayer, dataEx)
+ #任务奖励
+ elif rewardType == ChConfig.Def_RewardType_Task:
+ PlayerTask.GetTaskAward(curPlayer, dataEx)
#战令奖励
elif rewardType == ChConfig.Def_RewardType_Zhanling:
PlayerZhanling.GetZhanlingReward(curPlayer, dataEx, dataExStr)
- #福地聚宝盆奖励
- elif rewardType == ChConfig.Def_RewardType_MineTreasure:
- PlayerMineArea.GetMineTreasureAward(curPlayer, dataEx)
#玩法前瞻奖励
elif rewardType == ChConfig.Def_RewardType_GameNotice:
OnGiveAwardByClient(curPlayer, rewardType, ChConfig.Def_PDict_GameNoticeAwardState, IpyGameDataPY.GetFuncEvalCfg("GameNoticeReward", 1))
@@ -5777,7 +3416,71 @@
elif rewardType == ChConfig.Def_RewardType_RechargeDayAward:
OnGetRechargeDayAward(curPlayer, rewardType)
return
+
+def OnGetADAward(curPlayer, adID):
+ ipyData = IpyGameDataPY.GetIpyGameData("ADAward", adID)
+ if not ipyData:
+ return
+ adCntMax = ipyData.GetADCntMax()
+ adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID)
+ if adCnt >= adCntMax:
+ GameWorld.DebugLog("今日该广告奖励已达上限! adID=%s,adCnt=%s > %s" % (adID, adCnt, adCntMax))
+ return
+ adCnt += 1
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ADCnt % adID, adCnt)
+ awardItemList = ipyData.GetADAwardItemList()
+ adMapID = ipyData.GetADMapID()
+ GameWorld.DebugLog("领取广告奖励! adID=%s,adCnt=%s,adMapID=%s,awardItemList=%s" % (adID, adCnt, adMapID, awardItemList))
+ SyncADCntInfo(curPlayer, [adID])
+ if adMapID:
+ FBCommon.AddFBADCnt(curPlayer, adMapID)
+
+ if awardItemList:
+ ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["ADAward", False, {}])
+
+ return
+
+def ADCntOnDay(curPlayer):
+ syncADIDList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetADAwardCount()):
+ ipyData = ipyDataMgr.GetADAwardByIndex(index)
+ adID = ipyData.GetADID()
+ if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID):
+ continue
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ADCnt % adID, 0)
+ syncADIDList.append(adID)
+ if syncADIDList:
+ SyncADCntInfo(curPlayer, syncADIDList)
+ return
+
+def SyncADCntInfo(curPlayer, syncADIDList=None):
+ if not syncADIDList:
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ adIDList = [ipyDataMgr.GetADAwardByIndex(i).GetADID() for i in xrange(ipyDataMgr.GetADAwardCount())]
+ else:
+ adIDList = syncADIDList
+
+ adInfoList = []
+ for adID in adIDList:
+ adCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ADCnt % adID)
+ if not adCnt and syncADIDList == None:
+ continue
+ adInfo = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfo)
+ adInfo.ADID = adID
+ adInfo.ADCnt = adCnt
+ adInfoList.append(adInfo)
+
+ if not adInfoList:
+ return
+
+ clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCADInfoList)
+ clientPack.ADInfoList = adInfoList[:255]
+ clientPack.Count = len(clientPack.ADInfoList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
def OnGetRechargeDayAward(curPlayer, rewardType):
## 领取累充每日奖励,取最高档
realTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealTotal)
@@ -5920,7 +3623,6 @@
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
if not curPlayer:
return
- BossHurtMng.OnQueryBossHurtList(curPlayer, clientData)
return
@@ -6234,10 +3936,6 @@
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)
#删除有限无敌BUFF
@@ -6394,7 +4092,54 @@
# WORD RealmDifficulty; //境界难度 = 1000 + 所选境界等级,如境界13,则发1013
#};
def OnSelectRealmDifficulty(index, clientData, tick):
- curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
- PlayerControl.SetRealmDifficulty(curPlayer, clientData.RealmDifficulty)
+ #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ #PlayerControl.SetRealmDifficulty(curPlayer, clientData.RealmDifficulty)
return
+#// A0 08 查看通用记录 #tagCSViewGameRec
+#
+#struct tagCSViewGameRec
+#{
+# tagHead Head;
+# WORD RecType; //记录类型
+# DWORD RecID; //自定义记录ID
+#};
+def OnViewGameRec(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ recType = clientData.RecType
+ recID = clientData.RecID
+ if recType not in ShareDefine.Def_GameRecTypeList:
+ return
+ if recType in ShareDefine.Def_ViewGameRecSelfList:
+ recID = curPlayer.GetPlayerID()
+ recTypeIDMgr = DBDataMgr.GetGameRecMgr().GetRecTypeIDMgr(recType, recID)
+ SyncGameRecInfo(curPlayer, recType, recID, recTypeIDMgr.GetDataList())
+ return
+
+def SyncGameRecInfo(curPlayer, recType, recID, recDataList):
+ recList = []
+ for recData in recDataList:
+ if not recData:
+ continue
+ rec = ChPyNetSendPack.tagSCGameRec()
+ rec.Time = recData.GetTime()
+ rec.Value1 = recData.GetValue1()
+ rec.Value2 = recData.GetValue2()
+ rec.Value3 = recData.GetValue3()
+ rec.Value4 = recData.GetValue4()
+ rec.Value5 = recData.GetValue5()
+ rec.Value6 = recData.GetValue6()
+ rec.Value7 = recData.GetValue7()
+ rec.Value8 = recData.GetValue8()
+ rec.UserData = recData.GetUserData()
+ rec.UserDataLen = len(rec.UserData)
+ recList.append(rec)
+
+ clientPack = ChPyNetSendPack.tagSCGameRecInfo()
+ clientPack.Clear()
+ clientPack.RecType = recType
+ clientPack.RecID = recID
+ clientPack.RecList = recList
+ clientPack.Count = len(clientPack.RecList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
--
Gitblit v1.8.0