| | |
| | | import SkillShell
|
| | | import BuffSkill
|
| | | import BaseAttack
|
| | | import ChNetSendPack
|
| | | import SkillCommon
|
| | | import AttackCommon
|
| | | import ItemControler
|
| | | import ItemCommon
|
| | | import FBLogic
|
| | | import ReadChConfig
|
| | | import PetControl
|
| | | import NPCAI
|
| | | import OperControlManager
|
| | | import ShareDefine
|
| | |
| | | import DataRecordPack
|
| | | import NetPackCommon
|
| | | import FBCommon
|
| | | import PlayerPrestigeSys
|
| | | import GY_Query_BossFirstKill
|
| | | import FormulaControl
|
| | | import PlayerBossReborn
|
| | | import PlayerCrossYaomoBoss
|
| | | import PlayerActCollectWords
|
| | | import PlayerTongTianLing
|
| | | import CrossPlayerData
|
| | | import PlayerFeastWish
|
| | | import PlayerFeastTravel
|
| | | import PlayerGoldInvest
|
| | | import PlayerWeekParty
|
| | | import NPCRealmRefresh
|
| | | import PlayerActLogin
|
| | | import PlayerActTask
|
| | | #import PlayerZhanling
|
| | | import IpyGameDataPY
|
| | | import PlayerState
|
| | | import TurnAttack
|
| | | import PyGameData
|
| | | import GameObj
|
| | | import ChNPC
|
| | |
| | | # NPC等级
|
| | | if hasattr(curNPC, "GetCurLV"):
|
| | | return max(curNPC.GetCurLV(), curNPC.GetLV())
|
| | | if curPlayer and PlayerControl.GetRealmDifficulty(curPlayer):
|
| | | npcID = curNPC.GetNPCID()
|
| | | needRealmLV = PlayerControl.GetDifficultyRealmLV(PlayerControl.GetRealmDifficulty(curPlayer))
|
| | | realmNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCRealmStrengthen", npcID, needRealmLV)
|
| | | if realmNPCIpyData:
|
| | | return realmNPCIpyData.GetLV()
|
| | | return curNPC.GetLV()
|
| | |
|
| | | def GetNPCDataPy(npcID):
|
| | |
| | | #存一个满足要求的所有的物品的列表 然后从当中随机选一个
|
| | | #注: 阶、颜色、套装ID、职业、部位,这5个条件可确认唯一一件装备
|
| | |
|
| | | if not PyGameData.InitPyItem:
|
| | | if not PyGameData.g_initPyItem:
|
| | | GameWorld.ErrLog("地图还未启动好载物品!")
|
| | | return []
|
| | |
|
| | |
| | | ownerDetail = GetSummonOwnerDetel(npcObj)
|
| | |
|
| | | elif npcObjType == IPY_GameWorld.gnotPet:
|
| | | #查找宠物主人
|
| | | ownerDetail = PetControl.GetPetOwner(npcObj) |
| | | pass
|
| | |
|
| | | return ownerDetail
|
| | | #---------------------------------------------------------------------
|
| | |
| | |
|
| | | ChNPC.OnNPCSetDead(curNPC)
|
| | |
|
| | | if npcid == IpyGameDataPY.GetFuncCfg("CrossYaomoBoss", 1):
|
| | | PlayerCrossYaomoBoss.OnCrossYaomoBossDead(curNPC)
|
| | | |
| | | # 清除队伍成员伤血列表
|
| | | AttackCommon.ClearTeamPlayerHurtValue(curNPC)
|
| | | if curNPC.GetType() == ChConfig.ntRobot:
|
| | |
| | |
|
| | | #宠物特殊处理
|
| | | if curNPC.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
|
| | | PetControl.RefurbishPetAttr(curNPC, canSyncClient)
|
| | | return
|
| | |
|
| | | DoNPCAttrStrengthen(curNPC, isReborn)
|
| | |
| | |
|
| | | #宠物死亡调用独立接口
|
| | | if curNPC_GameNPCObjType == IPY_GameWorld.gnotPet:
|
| | | PetControl.SetPetDead(curNPC)
|
| | | return
|
| | |
|
| | | #---通用死亡逻辑---
|
| | |
| | | else:
|
| | | if GetNPCLV(curNPC) >= curPlayer.GetLV() - IpyGameDataPY.GetFuncCfg('DailyQuestKillMonster'):
|
| | | PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_KillNPC)
|
| | | #PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_KillNPC, 1)
|
| | |
|
| | | if ChConfig.IsGameBoss(curNPC):
|
| | | OnPlayerKillBoss(curPlayer, npcID, mapID, False)
|
| | |
| | | # @return 返回值, 获得经验
|
| | | # @remarks 获得经验, 可能是小数
|
| | | def __GetExp(self, playerLV, isTeam=False, player=None):
|
| | | curNPC = self.__Instance
|
| | | baseExp = 0
|
| | | #玩家不在副本中
|
| | | if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
|
| | | baseExp = FBLogic.OnGetNPCExp(player, curNPC)
|
| | | if baseExp > 0:
|
| | | return baseExp
|
| | | |
| | | npcID = curNPC.GetNPCID()
|
| | | realmLV = PlayerControl.GetDifficultyRealmLV(curNPC.GetSightLevel())
|
| | | realmNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCRealmStrengthen", npcID, realmLV)
|
| | | if realmNPCIpyData:
|
| | | baseExp = realmNPCIpyData.GetExp()
|
| | | npcLV = realmNPCIpyData.GetLV()
|
| | | else:
|
| | | baseExp = curNPC.GetExp()
|
| | | npcLV = curNPC.GetLV()
|
| | | |
| | | if baseExp == 0:
|
| | | #GameWorld.Log("杀怪经验异常,该NPC = %s,无经验"%(curNPC.GetID()))
|
| | | return 0
|
| | | |
| | | playerID = 0 if not player else player.GetPlayerID()
|
| | | # 如果是队伍,则按伤害贡献度计算所获得经验比例
|
| | | if isTeam:
|
| | | if not player:
|
| | | return 0
|
| | | hurtPer = AttackCommon.GetTeamPlayerHurtPer(player, curNPC)
|
| | | if not hurtPer:
|
| | | return 0
|
| | | #GameWorld.DebugLog("队员击杀基础经验: npcID=%s,baseExp=%s,hurtPer=%s" % (curNPC.GetNPCID(), baseExp, hurtPer), playerID)
|
| | | baseExp *= hurtPer
|
| | | #else:
|
| | | # GameWorld.DebugLog("个人击杀基础经验: npcID=%s,baseExp=%s" % (curNPC.GetNPCID(), baseExp), playerID)
|
| | | |
| | | #经验衰减公式 = max(杀怪经验 * max(1-max(玩家等级-怪物等级-10,0)*0.02),0),1)
|
| | | exp = eval(FormulaControl.GetCompileFormula("ExpAttenuation", IpyGameDataPY.GetFuncCfg("ExpAttenuation", 1)))
|
| | | #exp = CalcNPCExp(baseExp, playerLV, npcLV)
|
| | | #GameWorld.DebugLog("击杀NPC最终基础经验: npcID=%s,npcLV=%s,playerLV=%s,baseExp=%s,exp=%s" |
| | | # % (curNPC.GetNPCID(), npcLV, playerLV, baseExp, exp), playerID)
|
| | | return exp
|
| | | return 0
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | |
| | | npcData = GameWorld.GetGameData().FindNPCDataByID(npcID)
|
| | | if not npcData:
|
| | | return 0
|
| | | needRealmLV = PlayerControl.GetDifficultyRealmLV(PlayerControl.GetRealmDifficulty(curPlayer))
|
| | | realmNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCRealmStrengthen", npcID, needRealmLV)
|
| | | if realmNPCIpyData:
|
| | | baseExp = realmNPCIpyData.GetExp()
|
| | | else:
|
| | | baseExp = npcData.GetExp()
|
| | | baseExp = npcData.GetExp()
|
| | | if not baseExp:
|
| | | return 0
|
| | | npcLV = npcData.GetLV()
|
| | |
| | | if not buyTimesVIPPriID:
|
| | | return
|
| | | canBuyCnt = 0
|
| | | canBuyCnt += PlayerGoldInvest.GetAddBossBuyCnt(curPlayer, killBossMark)
|
| | | hasBuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntBuyCnt%killBossMark, 0)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | if hasBuyCnt >= canBuyCnt:
|
| | |
| | | return
|
| | | # 增加购买次数
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Boss_KillCntBuyCnt%killBossMark, hasBuyCnt + 1)
|
| | | |
| | | CrossPlayerData.SendMergePlayerDataNow(curPlayer)
|
| | | return
|
| | |
|
| | | #// A2 23 NPC秀结束 #tagCMNPCShowEnd
|