#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package Player.PlayerGodWeapon # # @todo:Éñ±ø # @author alee # @date 2017-07-20 # @version 1.0 # # ÏêϸÃèÊö: Éñ±ø # #--------------------------------------------------------------------- #"""Version = 2017-07-20 16:00""" #--------------------------------------------------------------------- import GameWorld import EventShell import ChConfig import PlayerControl import ItemCommon import IPY_GameWorld import ChPyNetSendPack import NetPackCommon import PlayerSuccess import ShareDefine import SkillShell import DataRecordPack import GameFuncComm import SkillCommon import BuffSkill import ItemControler #import EventReport import IpyGameDataPY import PassiveBuffEffMng import random ## ÉñÆ÷¹¦ÄܵǼ´¦Àí # @param curPlayer Íæ¼Ò # @return None def OnLogin(curPlayer): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_GodWeapon): return Sync_GodWeaponLVInfo(curPlayer) return ## ÉñÆ÷¿ªÆô # @return: ÊÇ·ñ¼¤»î³É¹¦ def DoGodWeaponOpen(curPlayer): # ĬÈϼ¤»î1¼¶µÄÀàÐÍ for i in IpyGameDataPY.GetFuncEvalCfg('GodWeaponActive'): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodWeaponLV % i, 1) PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_GodWeapon, 1, [i]) Sync_GodWeaponLVInfo(curPlayer) return True ## Ë¢ÐÂÉñ±øÊôÐÔ def RefreshGodWeaponAttr(curPlayer): CalcGodWeaponAttr(curPlayer) # ²»Á¢¼´Ë¢Ð PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() return ## ¼ÆËãÊôÐÔ # @param curPlayer Íæ¼Ò # @param allAttrList ÊôÐÔÁбí # @return None def CalcGodWeaponAttr(curPlayer): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_GodWeapon): return ipyDataMgr = IpyGameDataPY.IPY_Data() maxType = ipyDataMgr.GetGodWeaponByIndex(ipyDataMgr.GetGodWeaponCount()-1).GetType() allAttrList = [{} for i in range(4)] for gwType in xrange(1, maxType + 1): attrLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % gwType) godWeaponData = IpyGameDataPY.GetIpyGameData('GodWeapon', gwType, attrLV) if not godWeaponData: continue attrTypeList, attrValueList = godWeaponData.GetAttrType(), godWeaponData.GetAttrNum() for i, attrID in enumerate(attrTypeList): PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList) # ±£´æ¼ÆËãÖµ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_GodWeapon, allAttrList) return #--------------------------------------------------------------------------------------------------- #=============================================================================== # // A5 55 Éñ±øÉý¼¶ #tagCMGodWeaponPlus # # struct tagCMGodWeaponPlus # { # tagHead Head; # DWORD WeaponType; // Éñ±øÀàÐÍ # DWORD ItemID; //ÏûºÄµÄÎïÆ·ID # }; #=============================================================================== def OnPlusGodWeapon(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) weaponType = clientData.WeaponType useItemID = clientData.ItemID if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_GodWeapon): #µÈ¼¶²»×ã return #1.ÅжϱíÖÐÓÐû´ËÀàÐÍ£¬2.ÊÇ·ñÂú¼¶£¬3.ÅжÏÊÇ·ñÓÐÎïÆ· attrLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % weaponType) beforeAttrLV = attrLV # ÓÃÓÚÌáʾ godWeaponData = IpyGameDataPY.GetIpyGameData('GodWeapon', weaponType, attrLV) if not godWeaponData: GameWorld.DebugLog('Éñ±øÉý¼¶ÕÒ²»µ½Êý¾Ý %s-%s'%(weaponType, attrLV)) return totalExp = godWeaponData.GetExp() if totalExp == 0: #Âú¼¶ return #ÑéÖ¤ÊÇ·ñÖ¸¶¨µÄÎïÆ·ID if useItemID not in IpyGameDataPY.GetFuncEvalCfg("GodWeapon%s"%weaponType): return curItem = ItemCommon.FindItemInPackByItemID(curPlayer, useItemID, IPY_GameWorld.rptItem) if not curItem: GameWorld.DebugLog('###Éñ±ø¼Ù°ü£¬Ã»ÓÐÎïÆ·ID=%s'%useItemID) return effect = ItemCommon.GetItemEffectByEffectID(curItem, ChConfig.Def_Item_Eff_GodWeaponExp) if not effect: GameWorld.DebugLog('###Éñ±ø¼Ù°ü£¬ÎïÆ·ID=%sûÓо­ÑéÖµ'%useItemID) return addExp = effect.GetEffectValue(0) if not addExp: GameWorld.DebugLog('###Éñ±ø¼Ù°ü£¬ÎïÆ·ID=%sûÓо­ÑéÖµ'%useItemID) return delCnt = 1 ItemCommon.DelItem(curPlayer, curItem, delCnt, False, ChConfig.ItemDel_GodWeapon) curExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponExp % weaponType) curExp = curExp + addExp isLVUP = False # °²È«ÎªÖ÷²»ÓÃwhile for i in xrange(100): if curExp < totalExp: break godWeaponData = IpyGameDataPY.GetIpyGameData('GodWeapon', weaponType, attrLV+1) if not godWeaponData: GameWorld.DebugLog('Éñ±øÉý¼¶ÕÒ²»µ½Êý¾Ý %s-%s'%(weaponType, attrLV)) break curExp = curExp - totalExp attrLV += 1 isLVUP = True GodWeaponLVUP(curPlayer, godWeaponData, attrLV) totalExp = godWeaponData.GetExp() if totalExp == 0: curExp = 0 #Âú¼¶ break PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodWeaponLV % weaponType, attrLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodWeaponExp % weaponType, curExp) if isLVUP: RefreshGodWeaponAttr(curPlayer) #xÉñÆ÷´ïµ½X¼¶³É¾Í PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_GodWeapon, attrLV, [weaponType]) if beforeAttrLV == 0: # ½â·â֪ͨ sysMark = IpyGameDataPY.GetFuncEvalCfg('GodWeaponSys', 1, {}).get(weaponType, 'GetGodWeapon') PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetName(), weaponType]) #{1:[100,200,300,400],2:[100,200,300,400],3:[100,200,300,400]} notifyDict = IpyGameDataPY.GetFuncEvalCfg('GodLv', 1, {}) if weaponType in notifyDict: for notifyLV in notifyDict[weaponType]: if beforeAttrLV < notifyLV and attrLV >= notifyLV: PlayerControl.WorldNotify(0, 'GodWeaponLv', [curPlayer.GetName(), weaponType, notifyLV]) Sync_GodWeaponLVInfo(curPlayer, weaponType) #ÈÎÎñ EventShell.EventRespons_PlusGodWeapon(curPlayer) return #Éñ±øÉý¼¶´¥·¢ÆäËû¹¦ÄÜ£º¼¼ÄÜ def GodWeaponLVUP(curPlayer, godWeaponData, attrLV): skillID = godWeaponData.GetSkillID() if skillID: if __GiveGodWeaponSkill(curPlayer, skillID): sysMark = godWeaponData.GetSysMark() if sysMark: PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetName(), attrLV, skillID]) ## ͬ²½ÉñÆ÷µÈ¼¶ # @param curPlayer # @param godWeaponId ÉñÆ÷ID # @return None def Sync_GodWeaponLVInfo(curPlayer, godWeaponID=0): sendPack = ChPyNetSendPack.tagMCGodWeaponLVList() sendPack.Clear() sendPack.WeaponInfoList = [] if godWeaponID <= 0: # weaponStateStr = bin(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponState))[::-1][:-2] # for i in range(0, len(weaponStateStr)): # if weaponStateStr[i] == '0': # #ÕÒ³ö¼¤»îµÄÉñ±ø # continue ipyDataMgr = IpyGameDataPY.IPY_Data() maxType = ipyDataMgr.GetGodWeaponByIndex(ipyDataMgr.GetGodWeaponCount()-1).GetType() for i in xrange(1, maxType + 1): weaponInfo = ChPyNetSendPack.tagMCGodWeaponLVInfo() weaponInfo.Clear() weaponInfo.WeaponType = i weaponInfo.WeaponLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % i) weaponInfo.WeaponExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponExp % i) sendPack.WeaponInfoList.append(weaponInfo) else: weaponInfo = ChPyNetSendPack.tagMCGodWeaponLVInfo() weaponInfo.Clear() weaponInfo.WeaponType = godWeaponID weaponInfo.WeaponLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % godWeaponID) weaponInfo.WeaponExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponExp % godWeaponID) sendPack.WeaponInfoList.append(weaponInfo) sendPack.WeaponNum = len(sendPack.WeaponInfoList) NetPackCommon.SendFakePack(curPlayer, sendPack) return def __GiveGodWeaponSkill(curPlayer, skillResId): # ÉñÆ÷ѧϰ¼¼ÄÜ skillManager = curPlayer.GetSkillManager() if skillManager.FindSkillBySkillTypeID(skillResId): GameWorld.DebugLog("godSkill() have learned skill(%s)" % skillResId) return skillData = GameWorld.GetGameData().FindSkillByType(skillResId, 1) if skillData == None: GameWorld.DebugLog("godSkill() hasn't find skill(%s)" % skillResId) return if not SkillShell.CheckLearnSkillCondition(curPlayer, skillData): GameWorld.DebugLog("godSkill() learn skill(%s) condition isn't enough" % skillResId) return skillManager.LVUpSkillBySkillTypeID(skillResId) #PlayerControl.NotifyCode(curPlayer, "Skill_andyshao_31379", [skillResId]) GameWorld.DebugLog("godSkill() skill(%s) success!" % skillResId) DataRecordPack.DR_LearnORUPSkill(curPlayer, skillResId, 0) #if SkillCommon.isPassiveSkill(skillData): # buffType = SkillCommon.GetBuffType(skillData) # BuffSkill.DoAddBuff(curPlayer, buffType, skillData, GameWorld.GetGameWorld().GetTick(), [], curPlayer) PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer, skillResId) PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerEx(skillResId, 0) return True