#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
##@package ChEquip
|
# ×°±¸Âß¼´¦Àí
|
#
|
# @author alee
|
# @date 2017-07-29 00:30
|
# @version 1.0
|
#
|
# ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ
|
#------------------------------------------------------------------------------
|
#"""Version = 2017-07-29 00:30"""
|
#------------------------------------------------------------------------------
|
import IPY_GameWorld
|
import GameWorld
|
import ItemControler
|
import SkillShell
|
import PlayerControl
|
import ChConfig
|
import ChItem
|
import ItemCommon
|
import FBLogic
|
import ReadChConfig
|
import OperControlManager
|
import Operate_EquipWash
|
import ShareDefine
|
import PyMapTable
|
import ChPyNetSendPack
|
import NetPackCommon
|
import EventShell
|
import IpyGameDataPY
|
import PlayerWing
|
import Operate_EquipStone
|
import Operate_EquipSuitCompose
|
import PlayerMagicWeapon
|
import time
|
import json
|
import FormulaControl
|
#---------------------------------------------------------------------
|
|
|
##¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔ»»×°
|
# @param curPlayer Íæ¼ÒʵÀý
|
# @return ·µ»ØÖµ, ÊÇ·ñͨ¹ý¼ì²é
|
# @remarks ¼ì²éÍæ¼ÒÊÇ·ñ¿ÉÒÔ»»×°
|
def CheckPlayerCanEquipItem(curPlayer):
|
if curPlayer.GetPlayerAction() not in ChConfig.Def_Player_DoEquip_State:
|
#InsteadEquip ¶Ô²»Æð,µ±Ç°×´Ì¬ÎÞ·¨¸ü»»×°±¸
|
#InsteadEquipÌæ»»ÎªGeRen_chenxin_436832
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_436832")
|
return False
|
|
return True
|
|
|
## Ö´ÐÐÍæ¼Ò»»×°Âß¼
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param curItem ÎïÆ·ÊµÀý
|
# @param equipPackIndex ×°±¸±³°üË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return ²¼¶ûÖµ
|
# @remarks Ö´ÐÐÍæ¼Ò»»×°Âß¼
|
def DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick):
|
if equipPackIndex < 0:
|
return False
|
playerItemControl = ItemControler.PlayerItemControler(curPlayer)
|
|
#---ÑéÖ¤ÊÇ·ñ¿ÉÒÔ»»Õâ¼þ×°±¸---
|
if not ItemCommon.CheckItemCanUse(curItem):
|
return False
|
|
if not ItemCommon.CheckItemCanUseByExpireTime(curItem):
|
# ¹ýÆÚ
|
GameWorld.DebugLog("×°±¸ÒѹýÆÚ!")
|
return False
|
|
changeItemEquipPlace = curItem.GetEquipPlace()
|
if changeItemEquipPlace not in ShareDefine.RoleEquipType:
|
return False
|
|
if ItemCommon.GetEquipPackIndex(curItem) != equipPackIndex:
|
#¼ì²é×°±¸Î»ÖúÍÌî±íÊÇ·ñÒ»ÖÂ
|
return False
|
|
#--ÉèÖô©ÉÏÎïÆ·ÐǼ¶--
|
#===========================================================================
|
# if changeItemEquipPlace in ChConfig.Type_Equip_CanTake:
|
# equipPartStar = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, changeItemEquipPlace)
|
# if equipPartStar != curItem.GetItemStarLV():
|
# curItem.SetItemStarLV(equipPartStar)
|
#===========================================================================
|
#GameWorld.DebugLog("´©ÉϵÄ×°±¸ÉèÖÃÐǼ¶: index=%s,star=%s" % (changeItemEquipPlace, equipPartStar))
|
|
#---¿ªÊ¼»»×°Âß¼---
|
|
#¼Ç¼»»×°ÎïÆ·ÐÅÏ¢
|
itemClassLV = ItemCommon.GetItemClassLV(curItem)
|
changeItemID = curItem.GetItemTypeID()
|
changeItemStarLV = 0 #curItem.GetItemStarLV()
|
changeItemStoneCnt = 0 #curItem.GetUseStoneCount()
|
changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount()
|
changeItemUseData = curItem.GetUserData()
|
itemQuality = curItem.GetItemQuality()
|
endureReduceType = curItem.GetEndureReduceType()
|
#changeItemIsHorse = (curItem.GetType() == ChConfig.Def_Item_Type_Horse)
|
|
#Ö´Ðл»×°¶¯×÷
|
equipPlace = playerItemControl.EquipItem(curItem, equipPackIndex)
|
|
if equipPlace == -1:
|
return False
|
|
equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
curEquip = equipPack.GetAt(equipPackIndex)
|
#SetEquipItemSuiteLVInfo(curPlayer, packEquipIndex, curEquip)
|
if curEquip.GetUserAttr(ShareDefine.Def_IudetCreateTime) == 0:
|
curEquip.SetUserAttr(ShareDefine.Def_IudetCreateTime, int(time.time()))
|
#---»»×°³É¹¦---
|
if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer):
|
#֪ͨ¿Í»§¶Ë½»»»ÎïÆ·
|
curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
|
|
if not endureReduceType:
|
EventShell.EventRespons_EquipByPlace(curPlayer, itemClassLV, equipPlace)
|
#¼Ç¼³È×°¡¢ºì×°
|
#===========================================================================
|
# if itemQuality in [ChConfig.Def_Quality_Orange, ChConfig.Def_Quality_Red]:
|
# classLV = ItemCommon.GetItemClassLV(curItem)
|
# EventReport.WriteEvent_orange_equip(curPlayer, changeItemEquipPlace, classLV, itemQuality)
|
#===========================================================================
|
|
#ÌØÊâ×°±¸, ²»ÐèҪˢÊôÐÔ
|
if changeItemEquipPlace in ChConfig.EquipItemNoRefreshState:
|
return True
|
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Equip)
|
|
#ÏÈË¢×°±¸BUFF ÔÙ¼ÆËãÊôÐÔ
|
if changeItemEquipPlace == ShareDefine.retWing:
|
PlayerWing.CalcWingAttr(curPlayer)
|
else:
|
RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
|
|
#Ë¢ÐÂËùÓÐÊôÐÔ
|
playControl = PlayerControl.PlayerControl(curPlayer)
|
playControl.RefreshPlayerAttrState()
|
return True
|
|
|
def SetEquipItemSuiteLVInfo(curPlayer, equipIndex, curItem):
|
# ÉèÖò¿Î»Ì××°ÐÅÏ¢
|
if not curItem or curItem.IsEmpty():
|
return
|
|
isSuitePart = False
|
equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
|
for equipIndexList in equipSuitTypeDict.values():
|
if equipIndex in equipIndexList:
|
isSuitePart = True
|
break
|
|
if not isSuitePart:
|
return
|
|
suiteLVList = GetEquipPartSuiteLVList(curPlayer, equipIndex, curItem)
|
attrCount = curItem.GetUserAttrCount(ShareDefine.Def_IudetPartSuiteLV)
|
|
if suiteLVList and len(suiteLVList) == attrCount:
|
for i, suiteLV in enumerate(suiteLVList):
|
if curItem.GetUserAttrByIndex(ShareDefine.Def_IudetPartSuiteLV, i) != suiteLV:
|
curItem.UpdataUserAttrByIndex(ShareDefine.Def_IudetPartSuiteLV, i, suiteLV)
|
else:
|
if attrCount:
|
curItem.ClearUserAttr(ShareDefine.Def_IudetPartSuiteLV)
|
for suiteLV in suiteLVList:
|
curItem.AddUserAttr(ShareDefine.Def_IudetPartSuiteLV, suiteLV)
|
return
|
|
|
## Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐԵĸıä
|
# @param self ÀàʵÀý
|
# @return ·µ»ØÖµÎÞÒâÒå
|
# @remarks Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐԵĸıä
|
def RefreshPlayerEquipAttribute(curPlayer, classlv=0):
|
GameWorld.DebugLog("Start RefreshPlayerEquipAttribute classlv=%s!!!" % classlv)
|
classlvList = range(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1) if classlv == 0 else [classlv]
|
for rclasslv in classlvList:
|
__CalcEquips_Effect(curPlayer, rclasslv)
|
|
#if isRefreshEquipBuff:
|
# __RefreshPlayerAllEquipBuff(curPlayer)
|
return
|
|
## Ë¢ÐÂËùÓÐ×°±¸¶ÔÈËÎïÊôÐԵĸıä
|
# @param self ÀàʵÀý
|
# @return ·µ»ØÖµÎÞÒâÒå
|
# @remarks Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐԵĸıä
|
#===============================================================================
|
# def __RefreshPlayerAllEquipBuff(curPlayer):
|
# #³õʼ»¯ÈËÎï×°±¸buff
|
# curPlayer.GetEquipBuff().Clear()
|
#
|
# packType = IPY_GameWorld.rptEquip
|
#
|
# equipPackList = [IPY_GameWorld.rptEquip, IPY_GameWorld.rptHorseEquip]
|
#
|
# #stoneLVCntList = []
|
# #===========================================================================
|
# orangeQualityCnt = 0 #³Èɫװ±¸ÊýÁ¿(°üº¬³ÈɫƷÖÊÒÔÉϵÄ×°±¸ÊýÁ¿)
|
# for packIndex in equipPackList:
|
# equipPack = curPlayer.GetItemManager().GetPack(packIndex)
|
#
|
# for equipIndex in range(0, equipPack.GetCount()):
|
#
|
# #±¸ÓÃ×°±¸À¸²»´¦Àí
|
# if packIndex == IPY_GameWorld.rptEquip and equipIndex not in ChConfig.Type_Equip_CanTake :
|
# continue
|
#
|
# curEquip = equipPack.GetAt(equipIndex)
|
#
|
# if curEquip.IsEmpty():
|
# continue
|
#
|
# if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
|
# # ¹ýÆÚ
|
# continue
|
#
|
# #×°±¸´¥·¢µÄ¼¼ÄÜ £¨È«Éí£©
|
# CalcCurEquip_SkillBuff(curPlayer, curEquip)
|
#
|
#
|
#
|
# # ºóÃæµÄΪ½Çɫװ±¸×¨Óô¦Àí
|
# #===================================================================
|
# # if packIndex != IPY_GameWorld.rptEquip:
|
# # continue
|
# #
|
# # if isSuite or curEquip.GetItemTypeID() in ReadChConfig.GetEvalChConfig("AddSuiteNumEquitList"):
|
# # suiteEquipCnt += 1
|
# #===================================================================
|
#
|
# #Ì××°¼Óbuff ¸ù¾Ý×°±¸ÏÖÓеÄÌ××°µÄ¸öÊý×Öµä
|
# #===============================================================================
|
# # #È«Éí³Èɫװ±¸ÊýÁ¿´¥·¢Ïà¹Ø
|
# # OnOrangeQualityCntChange(curPlayer, orangeQualityCnt)
|
# #
|
# # # ÖØÖü¤»îÌáʾÀàÐÍΪNone
|
# # curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_None)
|
# #===============================================================================
|
#
|
# # ×°±¸ÄÚ²ãbuff
|
# allAttrListEquip = [{} for i in range(4)] # ²»°üº¬³á°ò¼°×°±¸ÉÏÏâǶµÄ±¦Ê¯
|
# SkillShell.CalcCurBuffer_Effect(curPlayer.GetEquipBuff(), curPlayer, allAttrListEquip)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBuff, allAttrListEquip)
|
#
|
# # ×°±¸Íâ²ãbuffÊôÐÔ£¬´ËbuffËãÕ½Á¦
|
# allAttrListEquptBuffs = [{} for i in range(4)]
|
# SkillShell.CalcCurBuffer_Effect(curPlayer.GetEquipBuff(), curPlayer,
|
# allAttrListEquptBuffs, [], ChConfig.CalcBuffLevel_1)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBuff1, allAttrListEquptBuffs)
|
#
|
# return
|
#===============================================================================
|
|
|
#===============================================================================
|
# #//07 03 ÈËÎï×°±¸ÎïÆ·#tagCEquipItem
|
# //½Çɫװ±¸ÀàÐÍ
|
# int GetRoleEquipType();
|
# //ÎïÆ·ÔÚÎïÆ·±³°üµÄË÷Òý
|
# int GetItemIndex();
|
#===============================================================================
|
## ÈËÎï×°±¸ÎïÆ·
|
# @param index ±³°üË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //07 03 ÈËÎï×°±¸ÎïÆ·#tagCEquipItem
|
def PlayerEquipItem(index, tick):
|
GameWorld.GetPsycoFunc(__Func_PlayerEquipItem)(index, tick)
|
return
|
|
|
## ÈËÎï×°±¸ÎïÆ·
|
# @param index ±³°üË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //07 03 ÈËÎï×°±¸ÎïÆ·#tagCEquipItem
|
def __Func_PlayerEquipItem(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameWorld.IPY_CEquipItem()
|
#ÎïÆ·ÔÚÎïÆ·±³°üµÄË÷Òý
|
packItemIndex = sendPack.GetItemIndex()
|
#½Çɫװ±¸²¿Î»
|
equipPackIndex = sendPack.GetRoleEquipType()
|
|
#¼ì²éÍæ¼Ò״̬ÊÇ·ñ¿ÉÒÔ»»×°
|
if not CheckPlayerCanEquipItem(curPlayer):
|
return
|
|
#¼ì²é»»×°¼ä¸ô
|
#===========================================================================
|
# if tick - curPlayer.GetLastChangeEquipTick() <= ChConfig.Def_MinChangeEquipTime:
|
# #GameWorld.Log("¸ü»»×°±¸Ê±¼ä¹ý¶Ì! %d"%(tick - curPlayer.GetLastChangeEquipTick()))
|
# return
|
#
|
# curPlayer.SetLastChangeEquipTick(tick)
|
#===========================================================================
|
|
#---»ñÈ¡·â°üÐèҪװ±¸µÄÎïÆ·---
|
rolePack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
curItem = rolePack.GetAt(packItemIndex)
|
#---Ö´ÐÐÍæ¼Ò»»×°Âß¼---
|
if DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick):
|
return
|
|
#»»×°Ê§°Ü֪ͨ¿Í»§¶ËÐÅÏ¢
|
curPlayer.Notify_ItemPutFail(IPY_GameWorld.rptItem, packItemIndex, IPY_GameWorld.rptEquip, 0)
|
return
|
|
|
#---------------------------------------------------------------------
|
## Ò»¼ü»»×°£¨·â°ü£©
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def OneKeyChangeEquip(index, tick):
|
return
|
|
|
## Íæ¼ÒжÏÂ×°±¸(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def PlayerUnEquip(index, tick):
|
GameWorld.GetPsycoFunc(__Func_PlayerUnEquip)(index, tick)
|
return
|
|
|
#---------------------------------------------------------------------
|
## Íæ¼ÒжÏÂ×°±¸(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Func_PlayerUnEquip(index, tick):
|
sendPack = IPY_GameWorld.IPY_CUnEquipItem()
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
if not CheckPlayerCanEquipItem(curPlayer):
|
return
|
|
equipPackIndex = sendPack.GetEquipIndex()
|
|
#Èç¹ûжϵÄÊÇÂíÆ¥£¬ÐèÒªÅж¨Èç¹ûÂíÆ¥×°±¸±³°üÓÐÎïÆ·£¬²»È÷ÅÏÂ
|
#===========================================================================
|
# if equipIndex == IPY_GameWorld.rptHorse :
|
# itemEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptHorseEquip)
|
#
|
# if not ItemControler.GetPackIsEmpty(itemEquipPack):
|
# PlayerControl.NotifyCode(curPlayer, "7E355D97-520A-4A8C-8BC993AAEAF6071F")
|
# return
|
#===========================================================================
|
|
playerItemControl = ItemControler.PlayerItemControler(curPlayer)
|
result = playerItemControl.UnEquipItem(equipPackIndex, sendPack.GetPackIndex())
|
|
if not result:
|
#жÏÂ×°±¸Ê§°Ü
|
return
|
|
equipID = result[0]
|
equipPlace = result[1]
|
|
##ÌØÊâ×°±¸ , ²»ÐèÒª³åË¢ÊôÐÔ
|
if equipPlace in ChConfig.EquipItemNoRefreshState:
|
curPlayer.Sync_UnEquipItem(equipID, equipPackIndex)
|
return
|
|
#ÏÈË¢×°±¸BUFF ÔÙ¼ÆËãÊôÐÔ
|
if equipPlace == ShareDefine.retWing:
|
PlayerWing.CalcWingAttr(curPlayer)
|
else:
|
RefreshPlayerEquipAttribute(curPlayer)
|
|
#Ë¢ÐÂËùÓÐÊôÐÔ
|
playControl = PlayerControl.PlayerControl(curPlayer)
|
playControl.RefreshPlayerAttrState()
|
|
if equipPlace in ChConfig.Def_SyncEquipStateByIndex:
|
curPlayer.Sync_UnEquipItem(equipID, equipPackIndex)
|
return
|
|
|
#---------------------------------------------------------------------
|
## Íæ¼ÒʹÓÃ×°±¸(ÔÚ×°±¸À¸ÉϵÄÌØÊâÎïÆ·:Èçµ°°×)(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def __Func_PlayerUseEquipSelf(index, tick):
|
sendPack = IPY_GameWorld.IPY_CUseEquip()
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
#ʹÓÃÎïÆ·ÐÐΪ״̬, ÅжϿͻ§¶ËÏÞÖÆ
|
if not OperControlManager.IsObjCanDoAction(
|
curPlayer,
|
ChConfig.Def_Obj_ActState_ClientAct,
|
IPY_GameWorld.oalUseItem
|
):
|
return
|
|
#¼ì²éʹÓÃÎïÆ·µÄÍæ¼ÒÊôÐÔ
|
if not ChItem.CheckUseItemSelf_Player(curPlayer):
|
return
|
|
roleEquipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
#»ñµÃËùҪʹÓõÄ×°±¸
|
equipIndex = sendPack.GetEquipIndex()
|
curEquip = roleEquipPack.GetAt(equipIndex)
|
|
if not ItemCommon.CheckItemCanUse(curEquip):
|
return
|
|
#FB½ûֹʹÓÃÎïÆ·
|
if FBLogic.DoFBForbidUseItem(curPlayer, curEquip):
|
return
|
|
if ItemControler.IsEventItem(curEquip):
|
PlayerControl.NotifyCode(curPlayer, "TaskRes")
|
return
|
|
else:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_774045")
|
return
|
|
return
|
|
|
## ¼ÆËã×°±¸¶Ô»ù±¾ÊôÐԵĸıä
|
# @param classlv
|
# @return None
|
def __CalcEquips_Effect(curPlayer, classlv):
|
# baseEquipAttrDict = {}
|
# baseEquipAttr_Weapon = [{} for _ in range(4)] # ÎäÆ÷»ù´¡, ÎïÆ·±í×°±¸»ù´¡Ð§¹ûÊôÐÔ
|
# baseEquipAttr_Armor = [{} for _ in range(4)] # ·À¾ß»ù´¡, ÎïÆ·±í×°±¸»ù´¡Ð§¹ûÊôÐÔ
|
# baseEquipAttr_Relics = [{} for _ in range(4)] # Ê¥Æ÷»ù´¡, ÎïÆ·±í×°±¸»ù´¡Ð§¹ûÊôÐÔ
|
|
|
allAttrListStar = [{} for _ in range(4)] # ÐÇÊýÊôÐÔ
|
#allAttrListEquip = [{} for _ in range(4)] # ×°±¸ÆäËû
|
#allAttrListPlusBase = [{} for _ in range(4)] # »ù´¡Ç¿»¯ÊôÐÔ
|
allAttrListStone = [{} for _ in range(4)] # ±¦Ê¯ÊôÐÔ
|
#allAttrListSuit = [{} for _ in range(4)] # Ì××°ÊôÐÔ
|
#allAttrListWash = [{} for _ in range(4)] # Ï´Á·ÊôÐÔ
|
#allAttrListOutOfPrintEquip = [{} for _ in range(4)] # ¾ø°æ×°±¸ÊôÐÔ ÐèÔڵȼ¶±ä»¯¶ÀÁ¢¼ÆËã
|
|
packType = IPY_GameWorld.rptEquip
|
playerEquip = curPlayer.GetItemManager().GetPack(packType)
|
equipPartStarIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
|
#maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2) #×î´óÌ××°ÀàÐÍ
|
#equipPlaceList = [] # Óд©´÷×°±¸µÄ×°±¸Î»Áбí
|
#suitCntDict = {} #Ì××°ÊýÁ¿×Öµä
|
#legendAttrDict = {} #ËùÓд«ÆæÊôÐÔ
|
equipScoreTotal = 0 #Ϊ½â¾ö×°±¸ÆÀ·Ö¡¢Õ½Á¦²»Ò»ÖµÄÇé¿ö£¬×°±¸Õ½Á¦¸ÄΪÓÉÆÀ·Ö×÷Ϊ²ÎÊý¼ÆËãÕ½Á¦
|
|
#Íæ¼Òµ±Ç°¿É×°±¸µÄ×°±¸ÀàÐÍ
|
for equipPlace in equipPartStarIndexList:
|
ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
|
if not ipyData:
|
continue
|
equipIndex = ipyData.GetGridIndex()
|
curEquip = playerEquip.GetAt(equipIndex)
|
if curEquip.IsEmpty():
|
continue
|
|
if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
|
# ¹ýÆÚ
|
continue
|
|
#equipPlaceList.append(equipIndex)
|
equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
|
|
#»ù´¡ÊôÐÔЧ¹û
|
for i in xrange(curEquip.GetEffectCount()):
|
curEffect = curEquip.GetEffectByIndex(i)
|
if not curEffect:
|
break
|
effectID = curEffect.GetEffectID()
|
if effectID == 0:
|
#×îºóÒ»¸ö
|
break
|
effectValue = curEffect.GetEffectValue(0)
|
if not effectValue:
|
continue
|
# if equipIndex in ChConfig.BaseEquipPlace_Weapon:
|
# PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Weapon)
|
# elif equipIndex in ChConfig.BaseEquipPlace_Armor:
|
# PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Armor)
|
# elif equipIndex in ChConfig.BaseEquipPlace_Relics:
|
# PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Relics)
|
# #ÆäËû·Ç»ù´¡²¿Î»µÄ
|
# else:
|
# PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
|
# baseEquipAttrDict[effectID] = baseEquipAttrDict.get(effectID, 0) + effectValue
|
|
# groupType = GetEquipPartSuiteGroupType(curPlayer, equipIndex)
|
# for suiteType in range(1, maxSuiteType + 1):
|
# suitelv = GetEquipPartSuiteLV(curPlayer, equipIndex, suiteType)
|
# if suitelv:
|
# maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
|
# suiteLV = min(suitelv, maxSuiteLV)
|
# if suiteLV:
|
# suiteKey = '%s_%s_%s' % (groupType, suiteType, suitelv)
|
# suitCntDict[suiteKey] = suitCntDict.get(suiteKey, 0) + 1
|
|
#ÐÇÊýÊôÐÔ
|
equipPartStar = GetEquipPartStarByRank(curPlayer, equipIndex, curEquip) #ÉúЧµÄÐÇÊý
|
CalcEquipStarAttr(curPlayer, classlv, equipPlace, equipPartStar, allAttrListStar)
|
#¼ÆËã×°±¸±¦Ê¯¼Ó³É
|
CalcEquipStone_Effect(curPlayer, equipIndex, allAttrListStone)
|
|
#ÎïÆ·Ç¿»¯ÊôÐÔ£¬ÅåÊÎÇ¿»¯²»Í¬ÒªÇø·Ö
|
# if equipIndex in equipPartStarIndexList:
|
# equipPartStarLV = GetEquipPartPlusLVByRank(curPlayer, packType, equipIndex, curEquip)
|
# CalcAttr_ItemPlus(curPlayer, curEquip, allAttrListPlusBase, equipPartStarLV)
|
|
#´«ÆæÊôÐÔ
|
#CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict)
|
#¾øÊÀÊôÐÔ
|
#CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
|
#Ï´Á·ÊôÐÔ
|
#Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, allAttrListWash)
|
|
#Ï´Á·Ì××°ÊôÐÔ
|
#Operate_EquipWash.CalcAttr_EquipWashSpec(curPlayer, equipPlaceList, allAttrListWash)
|
#Ì××°ÊôÐÔ
|
#CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit)
|
#GameWorld.DebugLog("ËùÓд«ÆæÊôÐÔ: %s" % legendAttrDict)
|
#±£´æ¼ÆËãÖµ
|
#PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allAttrListStone)
|
#PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allAttrListStar)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseWeapon, baseEquipAttr_Weapon)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseArmor, baseEquipAttr_Armor)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseRelics, baseEquipAttr_Relics)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allAttrListEquip)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PlusBase, allAttrListPlusBase)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Suit, allAttrListSuit)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allAttrListWash)
|
# PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
|
|
#¼ÆËã×°±¸»ù´¡ÊôÐÔ¸½¼ÓÕ½Á¦ (Ŀǰ×é³É: ÆÀ·ÖÕ½Á¦ + ...)
|
equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
|
#GameWorld.DebugLog("×°±¸ÆÀ·ÖÕ½Á¦: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Equip, equipFightPowerEx)
|
return
|
|
|
def CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict={}):
|
## ¼ÆËã´«ÆæÊôÐÔ
|
|
# ´«ÆæÊôÐÔIDÁбí
|
legendAttrIDList = [curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i) \
|
for i in range(curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID))]
|
# ´«ÆæÊôÐÔÖµÁбí
|
legendAttrValueList = [curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i) \
|
for i in range(curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue))]
|
if not legendAttrIDList or len(legendAttrIDList) != len(legendAttrValueList):
|
#GameWorld.DebugLog("ûÓд«ÆæÊôÐÔ£¡")
|
return
|
#GameWorld.DebugLog("´«ÆæÊôÐÔ: place=%s,IDList=%s, v=%s" % (curEquip.GetEquipPlace(), legendAttrIDList, legendAttrValueList))
|
|
for i, attrID in enumerate(legendAttrIDList):
|
value = legendAttrValueList[i]
|
#GameWorld.DebugLog("¼Ó´«ÆæÊôÐÔ: %s +%s" % (attrID, value))
|
PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListEquip)
|
#legendAttrDict[attrID] = legendAttrDict.get(attrID, 0) + value
|
|
return
|
|
|
# ×°±¸¾ø°æÊôÐÔ£¬ËæµÈ¼¶±ä»¯ÐèÔÚÉý¼¶ÔÙ´¦Àí
|
def CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip):
|
## ¼ÆËã¾ø°æÊôÐÔ
|
|
# ¾ø°æÊôÐÔIDÁбí
|
OutOfPrintAttrIDList = [curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetOutOfPrintAttrID, i) \
|
for i in range(curEquip.GetUserAttrCount(ShareDefine.Def_IudetOutOfPrintAttrID))]
|
# ¾ø°æÊôÐÔÖµÁбí
|
OutOfPrintAttrValueList = [curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetOutOfPrintAttrValue, i) \
|
for i in range(curEquip.GetUserAttrCount(ShareDefine.Def_IudetOutOfPrintAttrValue))]
|
if not OutOfPrintAttrIDList or len(OutOfPrintAttrIDList) != len(OutOfPrintAttrValueList):
|
return
|
|
lv = curPlayer.GetLV()
|
OutOfPrintAttrFormatDict = IpyGameDataPY.GetFuncEvalCfg("OutOfPrintValue", 2, {})
|
for i, attrID in enumerate(OutOfPrintAttrIDList):
|
if str(attrID) not in OutOfPrintAttrFormatDict:
|
continue
|
attrFormat = OutOfPrintAttrFormatDict[str(attrID)]
|
maxOOPValue = OutOfPrintAttrValueList[i]
|
value = eval(FormulaControl.GetCompileFormula("OutOfPrintAttrFormat_%s" % attrID, attrFormat))
|
GameWorld.DebugLog("¼Ó¾ø°æÊôÐÔ: %s +%s" % (attrID, value))
|
PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListOutOfPrintEquip)
|
|
return
|
|
|
## ¼ÆËã×°±¸¶Ô»ù±¾ÊôÐԵĸıä
|
# @return None
|
def CalcEquips_OutOfPrint(curPlayer):
|
allAttrListOutOfPrintEquip = [{} for _ in range(4)] # ¾ø°æ×°±¸ÊôÐÔ ÐèÔڵȼ¶±ä»¯¶ÀÁ¢¼ÆËã
|
|
packType = IPY_GameWorld.rptEquip
|
playerEquip = curPlayer.GetItemManager().GetPack(packType)
|
|
#Íæ¼Òµ±Ç°¿É×°±¸µÄ×°±¸ÀàÐÍ
|
for equipIndex in xrange(playerEquip.GetCount()):
|
if equipIndex not in ShareDefine.RoleEquipType :
|
continue
|
|
# ³á°òÊôÐÔÔÚ³á°ò¹¦Äܵ¥¶ÀË¢ÐÂ
|
if equipIndex == ShareDefine.retWing:
|
continue
|
|
curEquip = playerEquip.GetAt(equipIndex)
|
if curEquip.IsEmpty():
|
continue
|
|
if not ItemCommon.CheckItemCanUseByExpireTime(curEquip):
|
# ¹ýÆÚ
|
continue
|
|
#¾øÊÀÊôÐÔ
|
CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
|
|
#±£´æ¼ÆËãÖµ
|
PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
|
return
|
|
|
## ¼ÆËã×°±¸Ç¿»¯ºóµÄÊôÐÔ
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param curPlayer allAttrList ÊôÐÔ»º´æ
|
# @return None
|
def CalcAttr_ItemPlus(curPlayer, curEquip, allAttrList, equipPartStarLV=None):
|
if not equipPartStarLV:
|
return
|
plusType = GetEquipPlusType(curEquip)
|
if plusType is None:
|
return
|
|
ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", plusType, equipPartStarLV)
|
if not ipyData:
|
return
|
attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue()
|
for i, attrID in enumerate(attrTypeList):
|
PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
|
return
|
|
|
## Ìí¼ÓÈ«Éí×°±¸Æ·ÖʶÔÓ¦BUFF
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
def AddEquipsQualityBuff(curPlayer, qualityEquipCnt, suiteEquipCnt):
|
suiteCntRecord = 0
|
notifySuiteCnt = 0
|
notifyType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyNotify)
|
isAll, addAttrList = ReadChConfig.GetEvalChConfig('EquipQualityAddAttr')
|
for confInfo in addAttrList:
|
confQuality = confInfo[1] # ÅäÖÃÆ·Öʱêʶ 1-׿Խ£¬2-Ì××°
|
cnt = 0
|
if confQuality == 1:
|
cnt = qualityEquipCnt
|
elif confQuality == 2:
|
cnt = suiteEquipCnt
|
|
confCnt = confInfo[0]
|
if cnt >= confCnt: # Èç¹û¼þÊýÂú×ã
|
EquipAddBuff(curPlayer, confInfo[2])
|
|
if confQuality == 2 and confCnt > notifySuiteCnt and notifyType == \
|
ChConfig.Def_AttrActivatyNotify_Equip:
|
notifySuiteCnt = confCnt
|
|
if confQuality == 2 and confCnt > suiteCntRecord:
|
suiteCntRecord = confCnt
|
|
if not isAll:
|
break
|
|
lastSuiteCntRecord = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyRecordSuiteCnt)
|
if notifySuiteCnt > 0 and notifySuiteCnt > lastSuiteCntRecord:
|
PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_917284", [curPlayer.GetPlayerName(),
|
notifySuiteCnt])
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyRecordSuiteCnt, suiteCntRecord)
|
#GameWorld.DebugLog("Ì××°¼þÊý ÉϴμǼ=%s,¸üмǼ=%s" % (lastSuiteCntRecord, suiteCntRecord))
|
return
|
|
|
## Ìí¼Ó×°±¸È«ÉíÇ¿»¯µÈ¼¶¶ÔÓ¦ÊôÐÔ
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
def CalcAllEquipAllPlusLVAttr(curPlayer):
|
totalLV = GetTotalPlusLV(curPlayer, False)
|
activeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipActiveStarLV)
|
totalLV = min(totalLV, activeLV)
|
ipyData = IpyGameDataPY.InterpolationSearch("ItemPlusSumAttr", "PlusCntNeed", totalLV)
|
if not ipyData:
|
return {}
|
|
attrTypeList = ipyData.GetAttrType()
|
attrValueList = ipyData.GetAttrValue()
|
#allAttrList = [{} for i in range(4)]
|
attrDict = {}
|
for i, attrID in enumerate(attrTypeList):
|
value = attrValueList[i]
|
attrDict[attrID] = attrDict.get(attrID, 0) + value
|
#PlayerControl.CalcAttrDict_Type(attrID, value, allAttrList)
|
|
#PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PlusEx, allAttrList)
|
|
return attrDict
|
|
|
## ×°±¸Ì××°ÊôÐÔ¼ÆËã
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @return None
|
def CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListEquip):
|
Def_EquipSuitMaxCount = 3 #Ì××°×î´ó½×¶Î
|
myjob = curPlayer.GetJob()
|
name = curPlayer.GetName()
|
|
for suiteKey, cnt in suitCntDict.items():
|
groupType, suiteType, suiteLV = suiteKey.split('_')
|
suiteLV = int(suiteLV)
|
job = 0 if groupType == ChConfig.EquipGroupType_Relics else myjob #ÏÉÆ÷×éºÏĬÈÏÖ°Òµ0
|
ipyData = IpyGameDataPY.GetIpyGameData('EquipSuitAttr', int(groupType), int(suiteType), int(suiteLV), job)
|
if not ipyData:
|
continue
|
|
for i in range(1, Def_EquipSuitMaxCount + 1):
|
countKeyName = 'GetCount%d' % i
|
attrTypeKeyName = 'GetAttrType%d' % i
|
attrValueKeyName = 'GetAttrValue%d' % i
|
needCnt = getattr(ipyData, countKeyName)()
|
if cnt >= needCnt:
|
attrTypeList = getattr(ipyData, attrTypeKeyName)()
|
attrValueList = getattr(ipyData, attrValueKeyName)()
|
for j, attrID in enumerate(attrTypeList):
|
value = attrValueList[j]
|
PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListEquip)
|
|
#Ì××°¼¤»îÌáʾ(Ö»Ìáʾ1´Î)
|
paramList = [name, cnt, suiteLV, groupType, suiteType]
|
notifyRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteNotify % (groupType, suiteType, cnt))
|
if not notifyRecord & pow(2, suiteLV):
|
if groupType == ChConfig.EquipGroupType_Armor:
|
if cnt >= 5:
|
PlayerControl.WorldNotify(0, 'EquipSuit5', paramList)
|
notifyRecord |= pow(2, suiteLV)
|
else:
|
PlayerControl.WorldNotify(0, 'EquipSuit5', paramList)
|
notifyRecord |= pow(2, suiteLV)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartSuiteNotify % (groupType, suiteType, cnt), notifyRecord)
|
|
return
|
|
|
##È«Éí³Èɫװ±¸ÊýÁ¿´¥·¢Ïà¹Ø(°üº¬³ÈɫƷÖÊÒÔÉϵÄ×°±¸ÊýÁ¿)
|
def OnOrangeQualityCntChange(curPlayer, orangeQualityCnt):
|
notifyType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyNotify)
|
if notifyType == ChConfig.Def_AttrActivatyNotify_Equip:
|
EventShell.EventRespons_OrangeQualityCnt(curPlayer, orangeQualityCnt)
|
return
|
|
|
## 1Ëã×°±¸´¥·¢µÄ¼¼ÄÜ £¨È«Éí£©
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param curEquip µ±Ç°×°±¸
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def CalcCurEquip_SkillBuff(curPlayer, curEquip):
|
SkillShell.RefreshSkillBuffByEquip(curPlayer, curEquip)
|
return
|
|
|
## ¼ÆËã×°±¸ÏâǶ±¦Ê¯¸½¼ÓЧ¹û->»ù±¾ÊôÐÔ (±¦Ê¯)
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param curEquip µ±Ç°×°±¸
|
# @param allAttrList ÊôÐÔÐÅÏ¢
|
# @return ÎÞ·µ»ØÖµ
|
def CalcEquipStone_Effect(curPlayer, equipIndex, allAttrList):
|
gameData = GameWorld.GetGameData()
|
|
effIndexList = [1, 2, 3, 4] # µÚÒ»¸öЧ¹ûÖµÊÇÀàÐ͵ȼ¶Ð§¹ûÖµ£¬·ÇÊôÐÔЧ¹ûÖµ
|
gemLVList = []
|
for holeIndex in Operate_EquipStone.GetAllEquipPlaceHoleIndex():
|
|
curGemID = Operate_EquipStone.GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
|
if curGemID == 0:
|
continue
|
curGem = gameData.GetItemByTypeID(curGemID)
|
if not curGem:
|
GameWorld.ErrLog('equip stone id:%s not in item table' % (curGemID))
|
continue
|
for effIndex in effIndexList:
|
curGemEffect = curGem.GetEffectByIndex(effIndex)
|
effectID, effectValue = curGemEffect.GetEffectID(), curGemEffect.GetEffectValue(0)
|
if effectID and effectValue:
|
PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrList)
|
gemEffect = curGem.GetEffectByIndex(0)
|
gemLV = gemEffect.GetEffectValue(1)
|
gemLVList.append(gemLV)
|
return gemLVList
|
|
def CalcEquipStarAttr(curPlayer, classlv, equipPlace, equipPartStar, allAttrListStar):
|
## ¼ÆËã×°±¸ÐÇÊýÊôÐÔ
|
ipyData = IpyGameDataPY.GetIpyGameData('EquipStarUp', classlv, equipPlace, equipPartStar)
|
if not ipyData:
|
return
|
starAttrDict = ipyData.GetStarAttrInfo()
|
for attrID, attrValue in starAttrDict.items():
|
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
|
baseAttrDict = ipyData.GetBaseAttrInfo()
|
for attrID, attrValue in baseAttrDict.items():
|
PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
|
return
|
|
#---------------------------------------------------------------------
|
## ×°±¸Ìí¼ÓBuff
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param addSkillID ¼¼ÄÜID
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def EquipAddBuff(curPlayer, addSkillID, value=0):
|
|
curBuff = curPlayer.GetEquipBuff().AddBuff(addSkillID, 0, False)
|
curBuff.SetOwnerID(curPlayer.GetID())
|
curBuff.SetOwnerType(curPlayer.GetGameObjType())
|
if value > 0:
|
curBuff.SetValue(value)
|
return
|
|
|
#---------------------------------------------------------------------
|
#===============================================================================
|
# #//03 2F ÇëÇó×°±¸ÏÔÒþ#tagRequestEquipShowHide
|
# //×°±¸ÏÔʾ¿ª¹Ø
|
# int GetEquipShowSwitch(); µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××°
|
#===============================================================================
|
##ÇëÇó×°±¸ÏÔÒþ. £¨ÉèÖÃÏÔʾÄÄÌ××°±¸Íâ¹Û£©
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick ʱ¼ä´Á
|
# @return ·µ»ØÖµÎÞÒâÒå
|
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //03 2F ÇëÇó×°±¸ÏÔÒþ#tagRequestEquipShowHide
|
def RequestEquipShowHide(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
|
#---¼ì²éˢмä¸ô--
|
interval = ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_RequestEquipShowHide]
|
|
if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide) < interval:
|
#ûÓе½Ë¢Ð¼ä¸ô£¬54Íâ¹Ò£¬²»¸øÌáʾ
|
# GameWorld.ErrLog('ÇëÇó×°±¸ÏÔÒþ, ûÓе½Ë¢Ð¼ä¸ô')
|
return
|
|
sendPack = IPY_GameWorld.IPY_CRequestEquipShowHide()
|
updEquipShowSwitch = sendPack.GetEquipShowSwitch()
|
oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
|
if updEquipShowSwitch == oldEquipShowSwitch:
|
return
|
|
#֪ͨÍâ¹Û×°±¸
|
updFaceEquipIndex = 0
|
equipIndexList = []
|
for equipPlace in [ShareDefine.retWeapon, ShareDefine.retWeapon2, ShareDefine.retClothes]:
|
ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', 1, equipPlace)
|
if not ipyData:
|
continue
|
gridIndex = ipyData.GetGridIndex()
|
updFaceEquipIndex = updFaceEquipIndex * 1000 + gridIndex
|
equipIndexList.append(gridIndex)
|
PlayerControl.SetFaceEquipIndex(curPlayer, updFaceEquipIndex)
|
equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
for equipPackIndex in equipIndexList:
|
curEquip = equipPack.GetAt(equipPackIndex)
|
if not ItemCommon.CheckItemCanUse(curEquip):
|
continue
|
changeItemID = curEquip.GetItemTypeID()
|
changeItemStarLV = 0 #curItem.GetItemStarLV()
|
changeItemStoneCnt = 0 #curItem.GetUseStoneCount()
|
changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount()
|
changeItemUseData = curEquip.GetUserData()
|
curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
|
|
curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
|
curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide, tick)
|
return
|
|
|
## »ñÈ¡¹«¹²²¿Î»Ç¿»¯ÊìÁ·¶È
|
def GetEquipPartProficiency(curPlayer, packType, index):
|
return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartProficiency % (packType, index))
|
|
|
## ÉèÖù«¹²²¿Î»Ç¿»¯ÊìÁ·¶È
|
def SetEquipPartProficiency(curPlayer, packType, index, value):
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartProficiency % (packType, index), value)
|
|
|
## »ñÈ¡¹«¹²²¿Î»Ç¿»¯ÐǼ¶, Òò×°±¸µÄ×î¸ß¿ÉÇ¿»¯ÐǼ¶Ó°Ï죬ÓÃÓÚË㵱ǰװ±¸ÊôÐÔʹÓ㬠²»Ó°ÏìÈ«ÉíÐǼ¶
|
def GetEquipPartPlusLVByRank(curPlayer, packType, index, curEquip):
|
maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
|
return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index)), maxStarLV)
|
|
|
## »ñÈ¡¹«¹²²¿Î»Ç¿»¯ÐǼ¶
|
def GetEquipPartPlusLV(curPlayer, packType, index):
|
return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index))
|
|
|
## ÉèÖù«¹²²¿Î»Ç¿»¯ÐǼ¶
|
def SetEquipPartPlusLV(curPlayer, packType, index, curEquip, starLV):
|
if GetEquipPartPlusLV(curPlayer, packType, index) == starLV:
|
return
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusLV % (packType, index), starLV)
|
#===========================================================================
|
# if curEquip and not curEquip.IsEmpty():
|
# curEquip.SetItemStarLV(starLV)
|
#===========================================================================
|
|
return
|
|
|
## ֪ͨ¹«¹²²¿Î»Ç¿»¯µÈ¼¶
|
def NotifyEquipPartPlusLV(curPlayer, packType=None, index=None):
|
ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarLVInfo()
|
ePartStarLVPack.Clear()
|
ePartStarLVPack.InfoList = []
|
|
for pType, indexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
|
|
if packType != None and packType != pType:
|
continue
|
|
for i in indexList:
|
if packType != None:
|
if index != None and index != i:
|
continue
|
|
ePartStarLV = ChPyNetSendPack.tagMCEquipPartStarLV()
|
ePartStarLV.Clear()
|
ePartStarLV.PackType = pType
|
ePartStarLV.EquipIndex = i
|
ePartStarLV.EquipPartStarLV = GetEquipPartPlusLV(curPlayer, pType, i)
|
ePartStarLV.Proficiency = GetEquipPartProficiency(curPlayer, pType, i)
|
ePartStarLVPack.InfoList.append(ePartStarLV)
|
|
ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
|
NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)
|
return
|
|
|
## È«ÉíÇ¿»¯µÈ¼¶
|
def GetTotalPlusLV(curPlayer, isActive=True):
|
totalPlusLV = 0
|
equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar[IPY_GameWorld.rptEquip]
|
for i in equipPartIndexList:
|
if isActive:
|
curEquip = equipPack.GetAt(i)
|
if not curEquip or curEquip.IsEmpty():
|
continue
|
|
partStarLV = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, i)
|
totalPlusLV += partStarLV
|
return totalPlusLV
|
|
|
# »ñȡװ±¸µÄÇ¿»¯ÀàÐÍ
|
def GetEquipPlusType(curEquip):
|
equipPlace = curEquip.GetEquipPlace()
|
plusTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 2)
|
if not plusTypeDict:
|
GameWorld.ErrLog("ûÓÐÇ¿»¯ÀàÐÍÓ³Éä±í")
|
return -1
|
|
return plusTypeDict.get(equipPlace, -1)
|
|
|
def SetEquipPartSuiteLV(curPlayer, index, suiteType, suiteLV):
|
#ÉèÖù«¹²²¿Î»Ì××°µÈ¼¶
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartSuiteLV % (index, suiteType), suiteLV)
|
equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
SetEquipItemSuiteLVInfo(curPlayer, index, equipPack.GetAt(index))
|
return
|
|
|
def GetEquipPartSuiteLV(curPlayer, index, suiteType):
|
#»ñÈ¡¹«¹²²¿Î»Ì××°µÈ¼¶
|
return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteLV % (index, suiteType))
|
|
|
def GetEquipPartSuiteGroupType(curPlayer, equipIndex):
|
#»ñÈ¡¹«¹²²¿Î»Ì××°×éºÏÀàÐÍ
|
findGroupType = 0
|
equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
|
for groupType, indexList in equipSuitTypeDict.items():
|
if equipIndex in indexList:
|
findGroupType = int(groupType)
|
break
|
return findGroupType
|
|
|
# »ñÈ¡ÂúÌ××°»¯µÄ×îµÍ½×Êý£¬Èç5¼þÌ×£¬4¼þ5¼¶£¬1¼þ3¼¶£¬Ôò·µ»Ø3
|
def GetEquipSuitsLVByType(curPlayer, suitType, groupType):
|
suiteLV = 999
|
equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
|
if groupType not in equipSuitTypeDict:
|
return 0
|
maxCnt = len(equipSuitTypeDict[groupType])
|
cnt = 0
|
for equipPlace in equipSuitTypeDict[groupType]:
|
curSuiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suitType)
|
if curSuiteLV > 0:
|
cnt += 1
|
suiteLV = min(curSuiteLV, suiteLV)
|
|
if cnt != maxCnt:
|
return 0
|
return 0 if suiteLV == 999 else suiteLV
|
|
|
## ֪ͨ¹«¹²²¿Î»Ì××°µÈ¼¶
|
def NotifyEquipPartSuiteLV(curPlayer, index=None):
|
ePartSuitePack = ChPyNetSendPack.tagMCEquipPartSuiteLVInfo()
|
ePartSuitePack.Clear()
|
ePartSuitePack.InfoList = []
|
|
equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType')
|
for equipIndexList in equipSuitTypeDict.values():
|
for i in equipIndexList:
|
if index != None and index != i:
|
continue
|
ePartSuiteInfo = ChPyNetSendPack.tagMCEquipPartSuiteLV()
|
ePartSuiteInfo.Clear()
|
ePartSuiteInfo.EquipIndex = i
|
suiteInfo = GetSuiteInfoByPlace(curPlayer, i)
|
ePartSuiteInfo.SuiteLVInfo = json.dumps(suiteInfo, ensure_ascii=False)
|
ePartSuiteInfo.Len = len(ePartSuiteInfo.SuiteLVInfo)
|
ePartSuitePack.InfoList.append(ePartSuiteInfo)
|
|
ePartSuitePack.Count = len(ePartSuitePack.InfoList)
|
NetPackCommon.SendFakePack(curPlayer, ePartSuitePack)
|
return
|
|
|
def GetSuiteInfoByPlace(curPlayer, equipPlace, curEquip=None):
|
suiteInfo = {} #{Ì××°ÀàÐÍ:µÈ¼¶}
|
groupType = GetEquipPartSuiteGroupType(curPlayer, equipPlace)
|
maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)
|
for suiteType in range(1, maxSuiteType + 1):
|
suiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suiteType)
|
if suiteLV:
|
if curEquip:
|
maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
|
suiteLV = min(suiteLV, maxSuiteLV)
|
suiteInfo[suiteType] = suiteLV
|
return suiteInfo
|
|
|
def GetEquipPartSuiteLVList(curPlayer, equipPlace, curEquip=None):
|
## ²¿Î»Ì××°µÈ¼¶Áбí
|
groupType = GetEquipPartSuiteGroupType(curPlayer, equipPlace)
|
|
suiteLVList = []
|
maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)
|
for suiteType in xrange(1, maxSuiteType + 1):
|
suiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suiteType)
|
if curEquip and suiteLV:
|
maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
|
suiteLV = min(suiteLV, maxSuiteLV)
|
|
suiteLVList.append(suiteLV)
|
return suiteLVList
|
|
|
def SetEquipPartStar(curPlayer, equipPackindex, star):
|
#ÉèÖù«¹²²¿Î»ÐÇÊý
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStar % equipPackindex, star)
|
return
|
|
|
def GetEquipPartStar(curPlayer, equipPackindex):
|
#»ñÈ¡¹«¹²²¿Î»ÐÇÊý
|
return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % equipPackindex)
|
|
|
## »ñÈ¡¹«¹²²¿Î»ÉúЧµÄÐÇÊý, Òò×°±¸µÄ×î¸ß¿Éµ½ÐÇÊýÓ°Ï죬ÓÃÓÚË㵱ǰװ±¸ÊôÐÔʹÓ㬠²»Ó°ÏìÈ«ÉíÐǼ¶
|
def GetEquipPartStarByRank(curPlayer, equipPackindex, curEquip):
|
maxStarLV = ItemCommon.GetItemMaxStar(curEquip)
|
return min(GetEquipPartStar(curPlayer, equipPackindex), maxStarLV)
|
|
|
## ֪ͨ¹«¹²²¿Î»ÐÇÊý
|
def NotifyEquipPartStar(curPlayer, index=None):
|
ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo()
|
ePartStarLVPack.Clear()
|
ePartStarLVPack.InfoList = []
|
syncIndexList = []
|
if index == None:
|
equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
|
for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, []):
|
for classlv in xrange(equipMaxClasslv):
|
ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
|
if not ipyData:
|
continue
|
syncIndexList.append(ipyData.GetGridIndex())
|
else:
|
syncIndexList = [index]
|
|
for index in syncIndexList:
|
ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar()
|
ePartStarLV.Clear()
|
ePartStarLV.EquipPackIndex = index
|
ePartStarLV.Star = GetEquipPartStar(curPlayer, index)
|
ePartStarLVPack.InfoList.append(ePartStarLV)
|
|
ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
|
NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)
|
return
|
|
|
#// A5 03 È«ÉíÊôÐÔ¼¤»î #tagCMActiveAllEquipAttr
|
#
|
#struct tagCMActiveAllEquipAttr
|
#
|
#{
|
# tagHead Head;
|
# BYTE Type; //0Ç¿»¯ 1ÐÇÊý
|
# DWORD Cnt; //¼¤»îÊýÁ¿
|
#};
|
def OnActiveAllEquipAttr(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
activeType = clientData.Type
|
activeCnt = clientData.Cnt
|
if activeType == 0:
|
key = ChConfig.Def_PDict_EquipActiveStarLV
|
elif activeType == 1:
|
key = ChConfig.Def_PDict_EquipActiveStars
|
else:
|
return
|
curCnt = curPlayer.NomalDictGetProperty(key)
|
if activeCnt <= curCnt:
|
GameWorld.Log(' È«ÉíÊôÐÔ¼¤»î ¸ÃÊýÁ¿ÒѼ¤»î¹ý£¡ activeType=%s,activeCnt=%s,curCnt=%s' % (activeType, activeCnt, curCnt))
|
return
|
|
PlayerControl.NomalDictSetProperty(curPlayer, key, activeCnt)
|
|
SyncAllEquipAttrActiveInfo(curPlayer, activeType)
|
if activeType == 0:
|
PlayerMagicWeapon.CalcMagicWeaponSoulAttr(curPlayer)
|
else:
|
RefreshPlayerEquipAttribute(curPlayer)
|
|
#Ë¢ÐÂËùÓÐÊôÐÔ
|
playControl = PlayerControl.PlayerControl(curPlayer)
|
playControl.RefreshPlayerAttrState()
|
return
|
|
|
def SyncAllEquipAttrActiveInfo(curPlayer, activeType=-1):
|
## ֪ͨȫÉíÊôÐÔ¼¤»îÊýÁ¿
|
packData = ChPyNetSendPack.tagMCAllEquipAttrActiveInfo()
|
packData.ActiveInfo = []
|
for aType in [0, 1]:
|
if activeType != -1 and activeType != aType:
|
continue
|
if aType == 0:
|
key = ChConfig.Def_PDict_EquipActiveStarLV
|
elif aType == 1:
|
key = ChConfig.Def_PDict_EquipActiveStars
|
else:
|
return
|
curCnt = curPlayer.NomalDictGetProperty(key)
|
activeInfo = ChPyNetSendPack.tagMCEquipActiveInfo()
|
activeInfo.Type = aType
|
activeInfo.Cnt = curCnt
|
packData.ActiveInfo.append(activeInfo)
|
|
packData.Count = len(packData.ActiveInfo)
|
NetPackCommon.SendFakePack(curPlayer, packData)
|
return
|