| | |
| | | import ShareDefine
|
| | | import ChItem
|
| | | #import AICommon
|
| | | import PlayerAction
|
| | | import ChPyNetSendPack
|
| | | import DataRecordPack
|
| | | import NetPackCommon
|
| | |
| | | # % (mapID, npcCountDict, exp_rate, mailTypeKey, isMail, extraItemList))
|
| | | #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掉落相关的最大概率, 数值设定
|
| | |
| | | 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
|
| | |
|
| | |
| | | #可以放入背包
|
| | | 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被杀死逻辑处理
|
| | |
| | | lastTimeHurtObj = self.__FindLastTimeHurtObj()
|
| | | if lastTimeHurtObj[0] == None and lastTimeHurtObj[1] == None:
|
| | | return
|
| | | |
| | | PlayerAction.GetAwardOnKillNPC(lastTimeHurtObj, curNPC) |
| | | |
| | | return
|
| | |
|
| | | ## 最后一击处理
|
| | |
| | | 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:
|