| | |
| | | def DoGiveItemByVirtualDrop(curPlayer, giveItemList, npcID, dropPosX=0, dropPosY=0, isDropDisperse=True, mailTypeKey="ItemNoPickUp"):
|
| | | ## 给物品并且做假掉落表现,直接先堆叠给物品,再拆开做虚假掉落表现
|
| | |
|
| | | mapID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneMapID)
|
| | | lineID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneLineID)
|
| | | mapID = PlayerControl.GetCustomMapID(curPlayer)
|
| | | lineID = PlayerControl.GetCustomLineID(curPlayer)
|
| | | if not mapID:
|
| | | mapID = GameWorld.GetGameWorld().GetMapID()
|
| | |
|
| | |
| | | # tagHead Head;
|
| | | # DWORD NPCID;
|
| | | # BYTE Count; //默认1个,最多5个
|
| | | # DWORD HP; //默认0取最大值,其中一个血量数值大于0则用指定血量
|
| | | # DWORD HPEx; //默认0取最大值,其中一个血量数值大于0则用指定血量
|
| | | #};
|
| | | def OnSummonPriWoodPile(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | npcID = clientData.NPCID
|
| | | count = clientData.Count
|
| | | SummonPriWoodPile(curPlayer, npcID, count)
|
| | | hp = clientData.HP
|
| | | hpEx = clientData.HPEx
|
| | | SummonPriWoodPile(curPlayer, npcID, count, hp, hpEx)
|
| | | return
|
| | |
|
| | | def SummonPriWoodPile(curPlayer, npcID, count):
|
| | | def SummonPriWoodPile(curPlayer, npcID, count, hp=0, hpEx=0):
|
| | | ''' 召唤私有专属木桩怪
|
| | | '''
|
| | |
|
| | |
| | | GameWorld.DebugLog("玩家当前不是在自定义场景中,不允许招木桩!")
|
| | | return
|
| | |
|
| | | mapID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneMapID)
|
| | | lineID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneLineID)
|
| | | mapID = PlayerControl.GetCustomMapID(curPlayer)
|
| | | lineID = PlayerControl.GetCustomLineID(curPlayer)
|
| | | if mapID:
|
| | | if not FBLogic.OnCanSummonPriWoodPile(curPlayer, mapID, lineID, npcID, count):
|
| | | GameWorld.ErrLog("无法召唤木桩怪!mapID=%s,lineID=%s,npcID=%s,count=%s" % (mapID, lineID, npcID, count))
|
| | | return
|
| | | |
| | | if count != 1:
|
| | | hp, hpEx = 0, 0 # 指定血量的暂仅适用于单只的
|
| | |
|
| | | maxCount = 10
|
| | | nowCount = 0
|
| | |
| | | nowCount += 1
|
| | |
|
| | | summonCount = min(count, maxCount - nowCount)
|
| | | #GameWorld.DebugLog("召唤: count=%s,maxCount=%s,nowCount=%s,summonCount=%s" |
| | | # % (count, maxCount, nowCount, summonCount))
|
| | | #GameWorld.DebugLog("召唤: count=%s,maxCount=%s,nowCount=%s,summonCount=%s,hp=%s,hpEx=%s" |
| | | # % (count, maxCount, nowCount, summonCount, hp, hpEx))
|
| | | if summonCount <= 0:
|
| | | return
|
| | |
|
| | |
| | | #玩家周围随机出生点
|
| | | #技能召唤坐标 ChConfig.Def_SummonAppearDist
|
| | | summonPos = GameMap.GetEmptyPlaceInArea(curPlayer.GetPosX(), curPlayer.GetPosY(), 3)
|
| | | summonNPC.Reborn(summonPos.GetPosX(), summonPos.GetPosY())
|
| | | |
| | | if not curPlayer.GetSight():
|
| | | summonNPCAppear = ChNetSendPack.tagPlayerSummonNPCAppear()
|
| | | summonNPCAppear.Clear()
|
| | | summonNPCAppear.PlayerID = curPlayer.GetPlayerID()
|
| | | summonNPCAppear.ObjID = summonNPC.GetID()
|
| | | summonNPCAppear.NPCID = summonNPC.GetNPCID()
|
| | | summonNPCAppear.PosX = summonNPC.GetPosX()
|
| | | summonNPCAppear.PosY = summonNPC.GetPosY()
|
| | | summonNPCAppear.HP = summonNPC.GetHP()
|
| | | summonNPCAppear.HPEx = summonNPC.GetHPEx()
|
| | | summonNPCAppear.MaxHP = summonNPC.GetMaxHP()
|
| | | summonNPCAppear.MaxHPEx = summonNPC.GetMaxHPEx()
|
| | | summonNPCAppear.Speed = summonNPC.GetSpeed()
|
| | | summonNPCAppear.LV = GetNPCLV(summonNPC)
|
| | | summonNPCAppear.OwnerName = curPlayer.GetPlayerName()
|
| | | summonNPCAppear.OwnerNameLen = len(summonNPCAppear.OwnerName)
|
| | | NetPackCommon.SendFakePack(curPlayer, summonNPCAppear)
|
| | | summonNPC.Reborn(summonPos.GetPosX(), summonPos.GetPosY(), False)
|
| | | if hp or hpEx:
|
| | | summonNPC.SetHP(hp)
|
| | | summonNPC.SetHPEx(hpEx)
|
| | |
|
| | | #if not curPlayer.GetSight():
|
| | | summonNPCAppear = ChNetSendPack.tagPlayerSummonNPCAppear()
|
| | | summonNPCAppear.Clear()
|
| | | summonNPCAppear.PlayerID = curPlayer.GetPlayerID()
|
| | | summonNPCAppear.ObjID = summonNPC.GetID()
|
| | | summonNPCAppear.NPCID = summonNPC.GetNPCID()
|
| | | summonNPCAppear.PosX = summonNPC.GetPosX()
|
| | | summonNPCAppear.PosY = summonNPC.GetPosY()
|
| | | summonNPCAppear.HP = summonNPC.GetHP()
|
| | | summonNPCAppear.HPEx = summonNPC.GetHPEx()
|
| | | summonNPCAppear.MaxHP = summonNPC.GetMaxHP()
|
| | | summonNPCAppear.MaxHPEx = summonNPC.GetMaxHPEx()
|
| | | summonNPCAppear.Speed = summonNPC.GetSpeed()
|
| | | summonNPCAppear.LV = GetNPCLV(summonNPC)
|
| | | summonNPCAppear.OwnerName = curPlayer.GetPlayerName()
|
| | | summonNPCAppear.OwnerNameLen = len(summonNPCAppear.OwnerName)
|
| | | NetPackCommon.SendFakePack(curPlayer, summonNPCAppear)
|
| | | |
| | | return
|
| | |
|
| | | def ClearPriWoodPile(curPlayer):
|
| | |
| | | if not curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
|
| | | GameWorld.DebugLog("非自定义场景中,无法获取定义采集奖励!")
|
| | | return
|
| | | mapID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneMapID)
|
| | | lineID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneLineID)
|
| | | mapID = PlayerControl.GetCustomMapID(curPlayer)
|
| | | lineID = PlayerControl.GetCustomLineID(curPlayer)
|
| | | GameWorld.DebugLog("前端场景采集: mapID=%s,lineID=%s,npcID=%s" % (mapID, lineID, npcID))
|
| | |
|
| | | if mapID:
|
| | | #if FBCommon.GetCustomSceneState(curPlayer, mapID, lineID) != ChConfig.CustomSceneState_Fight:
|
| | | #if FBCommon.GetCustomMapStep(curPlayer, mapID, lineID) != ChConfig.CustomMapStep_Fight:
|
| | | # return
|
| | | FBLogic.OnCustomSceneCollectOK(curPlayer, mapID, lineID, npcID)
|
| | |
|
| | |
| | | if not dropItemList:
|
| | | return
|
| | |
|
| | | mapID = attackPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneMapID)
|
| | | mapID = PlayerControl.GetCustomMapID(attackPlayer)
|
| | | if mapID:
|
| | | DoGiveItemByVirtualDrop(attackPlayer, dropItemList, npcID)
|
| | | GameLogic_CrossGrassland.RecordGrasslandAward(attackPlayer, dropItemList)
|