| | |
| | | import SkillShell
|
| | | import BuffSkill
|
| | | import BaseAttack
|
| | | import PlayerTruck
|
| | | import ChNetSendPack
|
| | | import SkillCommon
|
| | | import AttackCommon
|
| | | import ItemControler
|
| | |
| | | import BossHurtMng
|
| | | import PlayerSuperMarket
|
| | | import GameLogic_FamilyInvade
|
| | | #import GameLogic_MunekadoTrial
|
| | | import GameLogic_GatherSoul
|
| | | import FormulaControl
|
| | | import PlayerMagicWeapon
|
| | | import PlayerBossReborn
|
| | |
| | |
|
| | | attrDict = {}
|
| | | paramDict = attrStrengthenInfo[NPCAttr_ParamDict] # 过程参数公式字典
|
| | | attrStrengthenList = attrStrengthenInfo[NPCAttr_AttrStrengthenList] # 属性成长公式字典
|
| | | attrStrengthenDict = attrStrengthenInfo[NPCAttr_AttrStrengthenList] # 属性成长公式字典
|
| | | playerCntCoefficient = attrStrengthenInfo[NPCAttr_PlayerCntCoefficient] # 人数系数
|
| | | npcIDPlayerCntCoefficient = attrStrengthenInfo[NPCAttr_NPCPlayerCntCoefficient] # 特殊NPC人数系数
|
| | | baseMaxHP = npcData.GetHPEx() * ShareDefine.Def_PerPointValue + npcData.GetHP()
|
| | |
| | | paramDict["AtkReplyCoefficient"])) # 怪物攻击回复调整值
|
| | | MonterHurt = eval(FormulaControl.GetCompileFormula("NPCParam_MonterHurt", paramDict["MonterHurt"])) # 怪物固定伤害
|
| | | LostHPPerSecond = eval(FormulaControl.GetCompileFormula("NPCParam_LostHPPerSecond", paramDict["LostHPPerSecond"])) # 玩家每秒掉血量
|
| | | |
| | | LVStrengthenMark = strengthenIpyData.GetLVStrengthenMark()
|
| | | attrStrengthenList = attrStrengthenDict.get(LVStrengthenMark, [])
|
| | | for attrKey, strengthenFormat in attrStrengthenList:
|
| | | strengthenValue = int(eval(FormulaControl.GetCompileFormula("NPCStrengthen_%s" % attrKey, strengthenFormat)))
|
| | | strengthenValue = int(eval(FormulaControl.GetCompileFormula("NPCStrengthen_%s_%s" % (attrKey,LVStrengthenMark), strengthenFormat)))
|
| | | #GameWorld.DebugLog(" %s=%s" % (attrKey, strengthenValue))
|
| | | locals()[attrKey] = strengthenValue # 创建该属性局部变量作为参数提供给后面属性计算时用
|
| | | attrDict[attrKey] = strengthenValue
|
| | |
| | | if not speedPer:
|
| | | if curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_SpeedPer):
|
| | | curNPC.SetDict(ChConfig.Def_NPC_Dict_SpeedPer, 0)
|
| | | return
|
| | | speed = int(curNPC.GetSpeed() * (ShareDefine.Def_MaxRateValue) / max(100.0, float(ShareDefine.Def_MaxRateValue + speedPer)))
|
| | | |
| | | curNPC.SetSpeed(speed)
|
| | | curNPC.SetDict(ChConfig.Def_NPC_Dict_SpeedPer, speedPer)
|
| | | else:
|
| | | speed = int(curNPC.GetSpeed() * (ShareDefine.Def_MaxRateValue) / max(100.0, float(ShareDefine.Def_MaxRateValue + speedPer)))
|
| | | curNPC.SetSpeed(speed)
|
| | | curNPC.SetDict(ChConfig.Def_NPC_Dict_SpeedPer, speedPer)
|
| | | if GameWorld.GetMap().GetMapID() == ChConfig.Def_FBMapID_GatherSoul:
|
| | | #目前只在聚魂副本里通知
|
| | | NPCSpeedChangeNotify(curNPC, curNPC.GetSpeed())
|
| | | return
|
| | |
|
| | |
|
| | |
| | | ownerType, ownerID = hurtType, hurtID
|
| | | itemCnt = moneyValue if itemID == moneyID else 1
|
| | | isBind = dropIDBindDict.get(itemID, 1)
|
| | | |
| | | |
| | | curItem = self.__CreateDropItem(curNPC, itemID, itemCnt, isBind)
|
| | | if not curItem:
|
| | | continue
|
| | | |
| | | if mapID == ChConfig.Def_FBMapID_GatherSoul:#聚魂副本特殊处理
|
| | | GameLogic_GatherSoul.KillGatherSoulNPCDropAward(itemID, itemCnt, isBind)
|
| | | dropItemDataStr = ChItem.GetMapDropItemDataStr(curItem)
|
| | | self.SendVirtualItemDrop(ownerPlayer, itemID, resultX, resultY, dropItemDataStr)
|
| | | curItem.Clear()
|
| | | continue
|
| | |
|
| | | if isDropInItemPack:
|
| | |
| | | if ItemControler.DoLogic_PutItemInPack(ownerPlayer, curItem, True, True,
|
| | | event=["NPCDrop", False, {"npcID":npcID}]):
|
| | | #通知客户端
|
| | | vItemDrop = ChPyNetSendPack.tagMCVirtualItemDrop()
|
| | | vItemDrop.ItemTypeID = itemID
|
| | | vItemDrop.PosX = resultX
|
| | | vItemDrop.PosY = resultY
|
| | | vItemDrop.UserData = dropItemDataStr
|
| | | vItemDrop.UserDataLen = len(vItemDrop.UserData)
|
| | | NetPackCommon.SendFakePack(ownerPlayer, vItemDrop)
|
| | | self.SendVirtualItemDrop(ownerPlayer, itemID, resultX, resultY, dropItemDataStr)
|
| | | |
| | | else:
|
| | | self.__MapCreateItem(curItem, resultX, resultY, ownerType, ownerID)
|
| | | return
|
| | |
|
| | | def SendVirtualItemDrop(self, player, itemID, posX, posY, userDataStr):
|
| | | #通知客户端
|
| | | vItemDrop = ChPyNetSendPack.tagMCVirtualItemDrop()
|
| | | vItemDrop.ItemTypeID = itemID
|
| | | vItemDrop.PosX = posX
|
| | | vItemDrop.PosY = posY
|
| | | vItemDrop.UserData = userDataStr
|
| | | vItemDrop.UserDataLen = len(vItemDrop.UserData)
|
| | | NetPackCommon.SendFakePack(player, vItemDrop)
|
| | | return
|
| | | #---------------------------------------------------------------------
|
| | | ## NPC被杀死逻辑处理
|
| | | # @param self 类实例
|
| | |
| | | GameWorld.DebugLog("通知GameServer地图Boss分流信息: mapID=%s,lineID=%s,shuntPlayerDict=%s" % (mapID, lineID, shuntPlayerDict), lineID)
|
| | | return
|
| | |
|
| | | def NPCSpeedChangeNotify(curNPC, speed):
|
| | | ##通知NPC速度
|
| | | sendPack = ChNetSendPack.tagObjInfoRefresh()
|
| | | sendPack.Clear()
|
| | | sendPack.ObjID = curNPC.GetID()
|
| | | sendPack.ObjType = curNPC.GetGameObjType()
|
| | | sendPack.RefreshType = IPY_GameWorld.CDBPlayerRefresh_Speed
|
| | | sendPack.Value = speed
|
| | | curNPC.NotifyAll(sendPack.GetBuffer(), sendPack.GetLength())
|
| | | return
|