hxp
2019-03-30 de41dec1a6518eea70a4ac7f36576cb709af266a
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -37,7 +37,6 @@
import ShareDefine
import ChItem
#import AICommon
import PlayerAction
import ChPyNetSendPack
import DataRecordPack
import NetPackCommon
@@ -45,11 +44,9 @@
import PlayerActivity
import PlayerSuccess
import BossHurtMng
import PlayerSuperMarket
import GameLogic_FamilyInvade
import GameLogic_GatherSoul
import FormulaControl
import PlayerMagicWeapon
import PlayerBossReborn
import PlayerFairyCeremony
import PlayerNewFairyCeremony
@@ -587,6 +584,27 @@
    #GameWorld.DebugLog("    totalExp=%s,totalMoney=%s,needSpace=%s,jsonItemList=%s" % (totalExp, totalMoney, needSpace, jsonItemList))
    return jsonItemList, totalExp, totalMoney
def DoVirtualItemDrop(curPlayer, dropItemList, dropPosX, dropPosY):
    ##前端假掉落表现
    gameMap = GameWorld.GetMap()
    index = 0
    for posX, posY in ChConfig.Def_DropItemAreaMatrix:
        resultX = dropPosX + posX
        resultY = dropPosY + posY
        if not gameMap.CanMove(resultX, resultY):
            #玩家不可移动这个点
            continue
        if index > len(dropItemList) - 1:
            break
        itemInfo = dropItemList[index]
        index += 1
        itemID, itemCount, isAuctionItem = itemInfo
        curItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem)
        dropItemDataStr = ChItem.GetMapDropItemDataStr(curItem)
        SendVirtualItemDrop(curPlayer, itemID, resultX, resultY, dropItemDataStr)
        curItem.Clear()
    return
################################### NPC掉落 ###################################
Def_NPCMaxDropRate = 1000000 # NPC掉落相关的最大概率, 数值设定
@@ -871,8 +889,8 @@
    tagClassLV, tagColor, tagIsSuit, tagPlaceKey = 0, 0, 0, 0
    killCountDropEquipPub = ipyDrop.GetKillCountDropEquipPub() # 第x次击杀附加必掉装备 {次数:[阶,颜色,是否套装,部位集合key], ...}
    killCountDropItemPub = ipyDrop.GetKillCountDropPub() # 击杀次数必掉(公共){击杀次数:[[物品ID, ...], [随机物品ID, ...]], ...}
    maxRecordDropEquipKillCountPub = max(killCountDropEquipPub) # 需要记录的最大击杀次数, 超过此击杀次数后暂时不累加记录
    maxRecordDropItemIDKillCountPub = max(killCountDropItemPub)
    maxRecordDropEquipKillCountPub = 0 if not killCountDropEquipPub else max(killCountDropEquipPub) # 需要记录的最大击杀次数, 超过此击杀次数后暂时不累加记录
    maxRecordDropItemIDKillCountPub = 0 if not killCountDropItemPub else max(killCountDropItemPub)
    #GameWorld.DebugLog("maxRecordDropEquipKillCountPub=%s,maxRecordDropItemIDKillCountPub=%s" % (maxRecordDropEquipKillCountPub, maxRecordDropItemIDKillCountPub))
    #GameWorld.DebugLog("dropEquipKillCountPub=%s,dropItemIDKillCountPub=%s" % (dropEquipKillCountPub, dropItemIDKillCountPub))
    if isKillCountDrop and killCountDropEquipPub and dropEquipKillCountPub in killCountDropEquipPub:
@@ -4156,7 +4174,7 @@
            if mapID == ChConfig.Def_FBMapID_GatherSoul:#聚魂副本特殊处理
                GameLogic_GatherSoul.KillGatherSoulNPCDropAward(itemID, itemCnt, isAuctionItem)
                dropItemDataStr = ChItem.GetMapDropItemDataStr(curItem)
                self.SendVirtualItemDrop(ownerPlayer, itemID, resultX, resultY, dropItemDataStr)
                SendVirtualItemDrop(ownerPlayer, itemID, resultX, resultY, dropItemDataStr)
                curItem.Clear()
                continue
            
@@ -4166,21 +4184,10 @@
                #可以放入背包
                if ItemControler.DoLogic_PutItemInPack(ownerPlayer, curItem, event=["NPCDrop", False, {"npcID":npcID}]):
                    #通知客户端
                    self.SendVirtualItemDrop(ownerPlayer, itemID, resultX, resultY, dropItemDataStr)
                    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被杀死逻辑处理
@@ -4410,8 +4417,7 @@
        lastTimeHurtObj = self.__FindLastTimeHurtObj()
        if lastTimeHurtObj[0] == None and lastTimeHurtObj[1] == None:
            return
        PlayerAction.GetAwardOnKillNPC(lastTimeHurtObj, curNPC)
        return
    
    ## 最后一击处理
@@ -5080,6 +5086,17 @@
        return curItem
    
#---------------------------------------------------------------------
def SendVirtualItemDrop(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
def GetNPCExp(curPlayer, npcID):
    npcData = GameWorld.GetGameData().FindNPCDataByID(npcID)
    if not npcData: