| | |
| | | def PlayerLoginMergeServerSkillLogic(curPlayer, tick):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | | if not GameWorld.IsMergeServer():
|
| | | if not GameWorld.IsCrossServer():
|
| | | GameWorld.DebugLog("非跨服服务器上线不清除buff...", playerID)
|
| | | return
|
| | |
|
| | |
| | |
|
| | | return int(value)
|
| | |
|
| | | |
| | |
|
| | | ## 玩家召唤NPC(当前玩家,召唤技能,召唤兽ID,召唤兽属性列表, 召唤兽离自己的距离, 当前时间)
|
| | | # @param curPlayer 当前玩家
|
| | | # @param curSkill 召唤技能
|
| | |
| | | summonPos = GameMap.GetEmptyPlaceInArea(curPlayer.GetPosX(), curPlayer.GetPosY(), summonDist)
|
| | | summonNPC.Reborn(summonPos.GetPosX(), summonPos.GetPosY())
|
| | | summonNPC.SetBornTime(tick)
|
| | | # 继承技能等级
|
| | | SetSummonNPCSkillLV(summonNPC, curSkill)
|
| | | if curSkill:
|
| | | summonNPC.SetLastTime(curSkill.GetLastTime())
|
| | | #----设置为无敌,在AI中解除无敌
|
| | |
| | | summonNPC.SetCanAttack(False)
|
| | |
|
| | | return
|
| | |
|
| | | # 召唤兽技能继承,玩家释放技能的等级
|
| | | def SetSummonNPCSkillLV(summonNPC, curSkill):
|
| | | if curSkill.GetEffect(0).GetEffectValue(1) == 0:
|
| | | return
|
| | | skillLV = curSkill.GetSkillLV() - 1
|
| | | if skillLV == 0:
|
| | | return
|
| | | |
| | | skillManager = summonNPC.GetSkillManager()
|
| | | learnSkillIDList =[]
|
| | | for index in range(0, skillManager.GetSkillCount()):
|
| | | useSkill = skillManager.GetSkillByIndex(index)
|
| | | #已经到尾部了
|
| | | if not useSkill or useSkill.GetSkillTypeID() == 0:
|
| | | break
|
| | | |
| | | useSkillTypeID = useSkill.GetSkillTypeID()
|
| | | # 找到可学习的技能
|
| | | learnSkillID = useSkillTypeID + skillLV
|
| | | findSkill = GameWorld.GetGameData().GetSkillBySkillID(learnSkillID)
|
| | | if not findSkill:
|
| | | continue
|
| | | if findSkill.GetSkillTypeID() != useSkillTypeID:
|
| | | # 不是同一个技能
|
| | | continue
|
| | | learnSkillIDList.append(learnSkillID)
|
| | | |
| | | for skillID in learnSkillIDList:
|
| | | skillManager.LearnSkillByID(skillID, False)
|
| | | return
|
| | |
|
| | |
|
| | | ## 设置召唤兽属性
|
| | | # @param curPlayer 当前玩家
|
| | |
| | |
|
| | | notifyLostValue = lostValue
|
| | | curObjHP_BeforeAttack = GameObj.GetHP(curObj)
|
| | | if curObjHP_BeforeAttack == 0:
|
| | | # 没有血量不能再触发
|
| | | return
|
| | |
|
| | | if reduceHP :
|
| | | lostValue = AttackCommon.CalcAtkProDef(buffOwner, curObj, lostValue, curSkill, tick)
|
| | |
| | | # 已广播的不重复
|
| | | GameObj.SetHP(curObj, remainHP, not view)
|
| | |
|
| | | AttackCommon.WriteHurtLog(buffOwner, curObj, curSkill, lostValue, hurtType, "持续掉血")
|
| | | |
| | | if view:
|
| | | #广播伤血类型
|
| | | AttackCommon.ChangeHPView(curObj, buffOwner, skillTypeID, notifyLostValue, hurtType)
|
| | |
| | | AttackCommon.DoLogic_ObjDead(None, curObj, curSkill, tick)
|
| | | return
|
| | |
|
| | |
|
| | | #NPC需要手动添加伤血和仇恨, 因为无调用DoAttack
|
| | | if curObjType == IPY_GameWorld.gotNPC:
|
| | |
|