| | |
| | | import IPY_GameWorld
|
| | | import PlayerControl
|
| | | import NPCCommon
|
| | | #import ItemControler
|
| | | import SkillCommon
|
| | | import EffGetSet
|
| | | import FBLogic
|
| | | import EventShell
|
| | | import ReadChConfig
|
| | | import PetControl
|
| | | import GameMap
|
| | | import PlayerTruck
|
| | | #import PlayerPrestigeSys
|
| | | import PlayerFamily
|
| | | #import BossHurtMng
|
| | | import PassiveBuffEffMng
|
| | | import PlayerSuccess
|
| | | import GameFuncComm
|
| | | import ShareDefine
|
| | | import SkillShell
|
| | | import PlayerVip
|
| | | import FormulaControl
|
| | | import IpyGameDataPY
|
| | | import PyGameData
|
| | |
| | | curTagPlayer.GameServer_AddEnemy(curPlayer.GetID(), curPlayer.GetName())
|
| | | return
|
| | |
|
| | |
|
| | | ## 当玩家杀死镖车的时候触发
|
| | | # @param curPlayer 杀人者
|
| | | # @param defender 被杀者
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | # @remarks 函数详细说明.
|
| | | def OnPlayerKillTruck(curPlayer, curTruck, tick):
|
| | | |
| | | if curPlayer == None or curTruck == None:
|
| | | return
|
| | | |
| | | #区域
|
| | | curPlayerAreaType = GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY())
|
| | | truckAreaType = GameMap.GetAreaTypeByMapPos(curTruck.GetPosX(), curTruck.GetPosY())
|
| | | |
| | | #自由区域,合法,返回True
|
| | | if curPlayerAreaType == IPY_GameWorld.gatFreePK or truckAreaType == IPY_GameWorld.gatFreePK: |
| | | return
|
| | | |
| | | #家族区域,PK不是同一家族的玩家或其宠物,合法,返回True
|
| | | if curPlayerAreaType == IPY_GameWorld.gatFamilyPK or truckAreaType == IPY_GameWorld.gatFamilyPK:
|
| | | return
|
| | | |
| | | #已经死亡了,不变色
|
| | | if GameObj.GetHP(curPlayer) <= 0:
|
| | | return
|
| | | |
| | | curPlayerNameColor = curPlayer.GetPlayerNameColor()
|
| | | #自己如果不是白名就不变色
|
| | | if curPlayerNameColor != IPY_GameWorld.pncNormal:
|
| | | return
|
| | | |
| | | curTruckNameColor = PlayerTruck.GetTruckNameColor(curTruck)
|
| | | if curTruckNameColor != IPY_GameWorld.pncNormal:
|
| | | #目标玩家不是白名就不变色
|
| | | return
|
| | | |
| | | #灰名(9)
|
| | | #SkillCommon.AddBuffBySkillType(curPlayer , ChConfig.Def_SkillID_Gray , tick)
|
| | | return
|
| | |
|
| | |
|
| | | ## 当玩家杀死玩家的时候触发
|
| | | # @param curPlayer 杀人者
|
| | | # @param defender 被杀者
|
| | |
| | | def OnPlayerKillPlayer(curPlayer, defender, tick):
|
| | |
|
| | | PlayerState.SetPKStateTick(curPlayer, tick)
|
| | | |
| | | #触发击杀玩家事件
|
| | | EventShell.EventResponse_OnKillEnemy(curPlayer, defender)
|
| | | |
| | | #触发被杀事件
|
| | | EventShell.EventResponse_OnEnemyKill(defender, curPlayer)
|
| | |
|
| | | #֪ͨ
|
| | | PlayerControl.NotifyCode(defender, "PK_lhs_318691", [curPlayer.GetName()])
|
| | |
| | | return
|
| | |
|
| | | curTeam = curObj.GetTeam()
|
| | | |
| | | #2012-04-23 jiang 攻击镖车只算个人伤害
|
| | | if curTagObj.GetGameObjType() == IPY_GameWorld.gotNPC and \
|
| | | curTagObj.GetGameNPCObjType() == IPY_GameWorld.gnotTruck or curTeam == None:
|
| | | if curTeam == None:
|
| | | #无队伍,添加个人伤害
|
| | | AddHurtValue(curTagObj, curObj.GetPlayerID(), ChConfig.Def_NPCHurtTypePlayer, hurtHP)
|
| | | return True
|
| | |
| | | #设置宠物剩余血量
|
| | | PetControl.SetPetHP(defObj, remainHP)
|
| | |
|
| | | elif defObj.GetGameNPCObjType() == IPY_GameWorld.gnotTruck:
|
| | | remainHP = max(PlayerTruck.GetTruckDestroyMinHP(defObj), remainHP)
|
| | | GameObj.SetHP(defObj, remainHP)
|
| | | |
| | | elif defObj.GetType() == ChConfig.ntHelpBattleRobot:
|
| | | remainHP = min(dHP, max(GameObj.GetMaxHP(defObj)/2, remainHP)) # 助战机器人剩余血量不能少于一半
|
| | | GameObj.SetHP(defObj, remainHP)
|
| | |
| | | return (taget.GetPlayerAction() == IPY_GameWorld.paDie)
|
| | |
|
| | | elif tagetType == IPY_GameWorld.gotNPC:
|
| | | if taget.GetGameNPCObjType() == IPY_GameWorld.gnotTruck:
|
| | | #镖车判定是否可以攻击( 损坏的镖车是无敌的 GetCanAttack = 0 )
|
| | | return (not taget.GetCanAttack())
|
| | | |
| | | return (taget.GetCurAction() == IPY_GameWorld.laNPCDie)
|
| | |
|
| | | GameWorld.Log('###GetIsDead = %s ' % (tagetType))
|
| | |
| | | #敌人关系,可PK,可加减益buff
|
| | | return ChConfig.Type_Relation_Enemy , ChConfig.Def_PASysMessage_None
|
| | |
|
| | | #def GetPeaceBuff(curPlayer):
|
| | | # return SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_Peace)[0]
|
| | |
|
| | | ## 获取玩家和镖车的关系
|
| | | # @param curPlayer: 攻击方实例
|
| | | # @param curTagTruck: 镖车实例
|
| | | # @return: 可否攻击
|
| | | def GetPlayerAndTruckRelation(curPlayer, curTagTruck):
|
| | | |
| | | if curPlayer == None or curTagTruck == None:
|
| | | return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None
|
| | | |
| | | #攻击方玩家区域
|
| | | curPlayerAreaType = GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY())
|
| | | |
| | | #镖车所在区域
|
| | | truckAreaType = GameMap.GetAreaTypeByMapPos(curTagTruck.GetPosX(), curTagTruck.GetPosY())
|
| | | |
| | | #攻击方或镖车在安全区
|
| | | if curPlayerAreaType == IPY_GameWorld.gatSafe or truckAreaType == IPY_GameWorld.gatSafe:
|
| | | return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_IsSafeArea
|
| | | |
| | | #攻守双方不在同一区域,不可PK,不可加增益buff
|
| | | if curPlayerAreaType != truckAreaType:
|
| | | return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_CurAreaNotPK
|
| | | |
| | | curTagPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curTagTruck)
|
| | | if curTagPlayer:
|
| | | if curPlayer.GetID() == curTagPlayer.GetID():
|
| | | #不能攻击自己的镖车
|
| | | return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None
|
| | |
|
| | | if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Truck):
|
| | | #Truck_hgg_31379:功能未开启,不能攻击镖车
|
| | | PlayerControl.NotifyCode(curPlayer, "Truck_hgg_31379", [GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_Truck)]) |
| | | return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None
|
| | | |
| | | curTruckOTeamID = PlayerTruck.GetTruckTeamID(curTagTruck)
|
| | | curTruckFamilyID = PlayerTruck.GetTruckFamilyID(curTagTruck)
|
| | | curTruckNameColor = PlayerTruck.GetTruckNameColor(curTagTruck)
|
| | | |
| | | #普通区域
|
| | | if curPlayerAreaType == IPY_GameWorld.gatNormal:
|
| | | #和平模式
|
| | | if curPlayer.GetAttackMode() == IPY_GameWorld.amPeace :
|
| | | #如镖车主人不是红名也不是黄名,则给系统提示:不可攻击
|
| | | if curTruckNameColor not in [IPY_GameWorld.pncGray, IPY_GameWorld.pncRed]:
|
| | | return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_CurAreaNotPK
|
| | | |
| | | curPlayerTeamID = curPlayer.GetTeamID() # 攻击方队伍ID
|
| | | curPlayerFamilyID = curPlayer.GetFamilyID() # 攻击方家族ID
|
| | | if curPlayerTeamID and curTruckOTeamID and curTruckOTeamID == curPlayerTeamID:
|
| | | #攻击方和镖车主人同队伍
|
| | | return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_NotAttackTeam
|
| | | |
| | | if curTruckFamilyID and curPlayerFamilyID and curTruckFamilyID == curPlayerFamilyID:
|
| | | #攻击方和镖车主人同家族
|
| | | return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_NotAttackFamily
|
| | | |
| | | return ChConfig.Type_Relation_Enemy, ChConfig.Def_PASysMessage_None
|
| | |
|
| | | def IsPKProtectTime():
|
| | | ## 是否是PK保护时间段
|
| | | pkProtecTimeList = IpyGameDataPY.GetFuncEvalCfg("PKConfig", 1)
|
| | |
| | | defendPkValue = defender.GetPKValue() # 防守者pk值
|
| | | defendFightPower = PlayerControl.GetFightPower(defender) # 防守者战斗力
|
| | |
|
| | | # #今日杀人获得威望值
|
| | | # prestigeByDay = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_KillPlayerAddPrestige)
|
| | | # |
| | | # addPrestige = int(eval(ReadChConfig.GetChConfig("KillPlayerPrestige")))
|
| | | # if addPrestige > 0:
|
| | | # maxPrestigeByDay = ReadChConfig.GetEvalChConfig("KillPlayerMaxPrestigeByDay")
|
| | | # if prestigeByDay < maxPrestigeByDay:
|
| | | # #没超过每日杀人获得威望最大值, 给予威望
|
| | | # addPrestige = min(addPrestige, maxPrestigeByDay - prestigeByDay)
|
| | | # PlayerPrestigeSys.AddPrestigeOffcialLV(curPlayer, addPrestige, ChConfig.Def_AddPrestige_Kill)
|
| | | # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_KillPlayerAddPrestige, prestigeByDay + addPrestige)
|
| | | # else:
|
| | | # #GeRen_wll_0:今日获得威望已达上限
|
| | | # PlayerControl.NotifyCode(curPlayer, "PK_liubo_372238")
|
| | | # |
| | | # elif addPrestige < 0:
|
| | | # GameWorld.ErrLog("KillPlayerPrestige计算结果:%s" % addPrestige)
|
| | | |
| | | #恶名值
|
| | | curPlayer.SetInfamyValue(min(attackNotoriety + ChConfig.Def_KillValue_Notoriety,
|
| | | ChConfig.Def_UpperLimit_DWord))
|
| | |
|
| | | #活跃度
|
| | | # activeByDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_KillPlayerAddActive)
|
| | | # addActiveValue = int(eval(ReadChConfig.GetChConfig("KillPlayerFamilyAvtive")))
|
| | | # if addActiveValue > 0 and curPlayer.GetFamilyID() != 0:
|
| | | # maxAvtiveByDay = ReadChConfig.GetEvalChConfig("KillPlayerMaxAvtiveByDay")
|
| | | # if activeByDay < maxAvtiveByDay:
|
| | | # addActiveValue = min(addActiveValue, maxAvtiveByDay - activeByDay)
|
| | | # PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, addActiveValue, True, \
|
| | | # PlayerFamily.Def_AddFAVReason_KillPlayer)
|
| | | # PlayerControl.NotifyCode(curPlayer, "GeRen_admin_425673", [addActiveValue])
|
| | | # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_KillPlayerAddActive, activeByDay + addActiveValue)
|
| | | # else:
|
| | | # PlayerControl.NotifyCode(curPlayer, "PK_liubo_161795") |
| | | #
|
| | | # elif addActiveValue < 0:
|
| | | # GameWorld.ErrLog("KillPlayerFamilyAvtive计算结果:%s" % addActiveValue)
|
| | |
|
| | | #---防守者
|
| | | #威望值
|
| | | # lostPrestige = int(eval(ReadChConfig.GetChConfig("BeKilledPlayerPrestige")))
|
| | | # if lostPrestige > 0:
|
| | | # PlayerPrestigeSys.SubPrestigeOffcialLV(defender, lostPrestige, ChConfig.Def_SubPrestige_BeKilled)
|
| | | # elif lostPrestige < 0:
|
| | | # GameWorld.ErrLog("BeKilledPlayerPrestige计算结果:%s" % lostPrestige)
|
| | | |
| | | #恶名值
|
| | | defender.SetInfamyValue(max(defendNotoriety - ChConfig.Def_BeKilledValue_Notoriety, 0))
|
| | | return
|