#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerCutTree
|
#
|
# @todo:¿³Ê÷
|
# @author hxp
|
# @date 2023-12-13
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¿³Ê÷
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2023-12-13 11:00"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import ItemCommon
|
import ShareDefine
|
import NetPackCommon
|
import IpyGameDataPY
|
import ChPyNetSendPack
|
import PlayerPrestigeSys
|
import FormulaControl
|
import PlayerControl
|
import IPY_GameWorld
|
import ItemControler
|
import PlayerArena
|
import PlayerTask
|
import NPCCommon
|
import ChConfig
|
import ChEquip
|
|
import random
|
import time
|
|
def OnPlayerLogin(curPlayer):
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
if not treeLV:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLV, 1)
|
RefreshTreeLVUPTime(curPlayer)
|
SyncTreeInfo(curPlayer)
|
return
|
|
#// B2 21 Íæ¼Ò¿³Ê÷ #tagCMCutTree
|
#
|
#struct tagCMCutTree
|
#{
|
# tagHead Head;
|
# BYTE CutCount; // ¿³¼¸´Î£¬Ä¬ÈÏ1
|
#};
|
def OnCutTree(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
cutCount = clientData.CutCount
|
playerID = curPlayer.GetPlayerID()
|
|
if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_CutTree, tick):
|
GameWorld.DebugLog("¿³Ê÷CDÖÐ...", playerID)
|
return
|
|
identifyPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptIdentify)
|
packCount = identifyPack.GetCount()
|
for i in range(0, packCount):
|
curItem = identifyPack.GetAt(i)
|
if curItem and not curItem.IsEmpty():
|
GameWorld.DebugLog("¿³Ê÷±³°üÖл¹ÓÐδ´¦ÀíÎïÆ·£¬ÎÞ·¨¿³Ê÷! i=%s" % i, playerID)
|
return
|
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
canCutMax = 0
|
lvCutMaxList = IpyGameDataPY.GetFuncEvalCfg("CutTree", 2)
|
for curMax, needLV in enumerate(lvCutMaxList, 1):
|
if treeLV >= needLV:
|
canCutMax = curMax
|
else:
|
break
|
cutCount = min(cutCount, canCutMax, identifyPack.GetCount())
|
GameWorld.DebugLog("Íæ¼Ò¿³Ê÷: cutCount=%s,treeLV=%s,canCutMax=%s,packCount=%s" % (cutCount, treeLV, canCutMax, packCount), playerID)
|
if not cutCount:
|
return
|
if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, cutCount):
|
return
|
|
ipyData = IpyGameDataPY.GetIpyGameData("TreeLV", treeLV)
|
if not ipyData:
|
return
|
equipColorRateList = ipyData.GetEquipColorRateList()
|
exAwardItemRateList = ipyData.GetExAwardItemRateList()
|
|
GameWorld.DebugLog(" equipColorRateList=%s" % equipColorRateList, playerID)
|
|
maxRate = 10000
|
totalRate = 0
|
colorRateList = []
|
for equipColor, colorRate in enumerate(equipColorRateList, 1):
|
if not colorRate:
|
continue
|
totalRate += colorRate
|
colorRateList.append([totalRate, equipColor])
|
|
if totalRate != maxRate:
|
GameWorld.SendGameError("GameWarning", "CutTreeTotalRateError:%s!=%s,treeLV=%s" % (totalRate, maxRate, treeLV))
|
if not colorRateList:
|
return
|
GameWorld.DebugLog(" colorRateList=%s,totalRate=%s" % (colorRateList, totalRate), playerID)
|
|
cutCountAppointEquipDict = IpyGameDataPY.GetFuncEvalCfg("CutTree", 4)
|
appointCutTreeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AppointCutTreeCount)
|
GameWorld.DebugLog(" appointCutTreeCount=%s" % (appointCutTreeCount), playerID)
|
classLV, isSuit = 1, None # ĬÈÏ1½×£¬²»ÏÞÖÆÊÇ·ñÌ××°
|
placeList = ChConfig.EquipPlace_Base + ChConfig.EquipPlace_Special
|
jobList = [curPlayer.GetJob()]
|
randEquipIDList = []
|
for _ in range(cutCount):
|
itemColor = GameWorld.GetResultByRandomList(colorRateList)
|
if not itemColor:
|
continue
|
equipIDList = NPCCommon.__GetEquipIDList(0, classLV, itemColor, isSuit, placeList, jobList, findType="CutTree")
|
if not equipIDList:
|
continue
|
appointCutTreeCount += 1
|
if appointCutTreeCount in cutCountAppointEquipDict:
|
randEquipID, appointID = cutCountAppointEquipDict[appointCutTreeCount]
|
GameWorld.DebugLog(" ¶¨ÖÆ×°±¸ID: %s, appointID=%s,appointCutTreeCount=%s" % (randEquipID, appointID, appointCutTreeCount), playerID)
|
else:
|
appointID = 0
|
randEquipID = random.choice(equipIDList)
|
GameWorld.DebugLog(" Ëæ»ú×°±¸ID: %s, itemColor=%s,%s" % (randEquipID, itemColor, equipIDList), playerID)
|
randEquipIDList.append([randEquipID, appointID])
|
|
GameWorld.DebugLog(" Ô¤²ú³ö×°±¸: randEquipIDList=%s" % randEquipIDList, playerID)
|
|
giveItemListEx = []
|
giveEquipIDList = []
|
for equipItemID, appointID in randEquipIDList:
|
setAttrDict = {}
|
if appointID:
|
setAttrDict[ShareDefine.Def_CItemKey_AppointID] = appointID
|
curItem = ItemControler.GetOutPutItemObj(equipItemID, 1, False, curPlayer=curPlayer, setAttrDict=setAttrDict)
|
if curItem == None:
|
continue
|
if not ItemControler.DoLogic_PutItemInPack(curPlayer, curItem, packIndexList=[IPY_GameWorld.rptIdentify]):
|
continue
|
giveEquipIDList.append(equipItemID)
|
|
exItem = GameWorld.GetResultByRandomList(exAwardItemRateList)
|
if exItem and PlayerArena.CheckCanGiveBattleCountItem(curPlayer, exItem[0]):
|
giveItemListEx.append([exItem[0], exItem[1], 0])
|
|
if not giveEquipIDList:
|
return
|
giveEquipCount = len(giveEquipIDList)
|
|
PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, giveEquipCount, isNotify=False)
|
|
ItemControler.GivePlayerItemOrMail(curPlayer, giveItemListEx)
|
|
GameWorld.DebugLog(" ʵ¼Ê²ú³ö: giveEquipIDList=%s,giveItemListEx=%s" % (giveEquipIDList, giveItemListEx), playerID)
|
SyncCutTreeResult(curPlayer, giveEquipCount, giveItemListEx)
|
|
OnAddCutTreeCnt(curPlayer, giveEquipCount)
|
return
|
|
def OnAddCutTreeCnt(curPlayer, addCount):
|
## Ôö¼Ó¿³Ê÷´ÎÊý¸½¼ÓÂß¼ - ³ý×°±¸²ú³öÍâµÄÆäËûÂß¼
|
cutExp = IpyGameDataPY.GetFuncCfg("CutTree", 1)
|
addExp = addCount * cutExp
|
if addExp > 0:
|
PlayerControl.PlayerControl(curPlayer).AddExp(addExp)
|
|
#GameWorld.DebugLog("OnAddCutTreeCnt: addCount=%s,addExp=%s" % (addCount, addExp), curPlayer.GetPlayerID())
|
|
cutCountAppointEquipDict = IpyGameDataPY.GetFuncEvalCfg("CutTree", 4)
|
appointCountMax = max(cutCountAppointEquipDict) if cutCountAppointEquipDict else 0
|
appointCutTreeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AppointCutTreeCount)
|
updAppointCutTreeCount = min(appointCutTreeCount + addCount, appointCountMax)
|
if updAppointCutTreeCount != appointCutTreeCount:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_AppointCutTreeCount, updAppointCutTreeCount)
|
GameWorld.DebugLog("¸üж¨ÖÆ¿³Ê÷´ÎÊý: updAppointCutTreeCount=%s" % (updAppointCutTreeCount), curPlayer.GetPlayerID())
|
|
PlayerPrestigeSys.AddRealmLVUpCutTreeCnt(curPlayer, addCount)
|
PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_CutTree, addCount)
|
return
|
|
|
#// B2 22 ¿³Ê÷×°±¸²Ù×÷ #tagCMCutTreeEquipOP
|
#
|
#struct tagCMCutTreeEquipOP
|
#{
|
# tagHead Head;
|
# BYTE IndexCount;
|
# BYTE ItemIndexList[IndexCount]; // ÎïÆ·ÔÚ¿³Ê÷±³°üµÄË÷ÒýÁбí
|
# BYTE OPType; // ²Ù×÷ÀàÐÍ£º1-Ìæ»»£»2-·Ö½â
|
# BYTE AutoDecompose; // Ìæ»»ºóÊÇ·ñ×Ô¶¯·Ö½âÔ×°±¸£º0·ñ1ÊÇ£¬½öÌæ»»²Ù×÷ÏÂÓÐÓÃ
|
#};
|
def OnCutTreeEquipOP(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
opType = clientData.OPType
|
itemIndexList = clientData.ItemIndexList
|
autoDecompose = clientData.AutoDecompose
|
playerID = curPlayer.GetPlayerID()
|
|
identifyPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptIdentify)
|
GameWorld.DebugLog("¿³Ê÷×°±¸²Ù×÷: itemIndexList=%s,opType=%s,autoDecompose=%s" % (itemIndexList, opType, autoDecompose), playerID)
|
for itemIndex in itemIndexList:
|
if itemIndex >= identifyPack.GetCount():
|
GameWorld.DebugLog("¿³Ê÷±³°üË÷Òý²»´æÔÚ: itemIndex=%s" % itemIndex, playerID)
|
continue
|
curEquip = identifyPack.GetAt(itemIndex)
|
if not ItemCommon.CheckItemCanUse(curEquip):
|
GameWorld.DebugLog("¿³Ê÷±³°üÎïÆ·²»´æÔÚ: itemIndex=%s" % itemIndex, playerID)
|
continue
|
|
# Ìæ»»
|
if opType == 1:
|
equipIndex = ItemCommon.GetEquipPackIndex(curEquip)
|
if not ChEquip.DoPlayerEquipItem(curPlayer, curEquip, equipIndex, tick):
|
continue
|
|
if autoDecompose:
|
__DoEquipDecompose(curPlayer, identifyPack.GetAt(itemIndex)) # ÐèÖØÐ»ñµÃ×°±¸¶ÔÏó
|
|
# ·Ö½â
|
elif opType == 2:
|
__DoEquipDecompose(curPlayer, curEquip)
|
|
# ·ÅÈ뱸Óòֿâ
|
elif opType == 3:
|
pass
|
|
curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitCutTreeEquipOP, ChConfig.Def_ComposeState_Sucess)
|
return
|
|
def __DoEquipDecompose(curPlayer, curEquip):
|
if not ItemCommon.CheckItemCanUse(curEquip):
|
return
|
itemID = curEquip.GetItemTypeID()
|
itemColor = curEquip.GetItemColor()
|
itemLV = ItemControler.GetItemLV(curEquip)
|
playerID = curPlayer.GetPlayerID()
|
|
colorIpyData = IpyGameDataPY.GetIpyGameData("EquipColor", itemColor)
|
moneyBase = colorIpyData.GetMoneyBase() if colorIpyData else 0
|
GameWorld.DebugLog("×°±¸·Ö½â: itemID=%s,itemColor=%s,itemLV=%s,moneyBase=%s" % (itemID, itemColor, itemLV, moneyBase), playerID)
|
|
ItemCommon.DelItem(curPlayer, curEquip, curEquip.GetCount(), True, ChConfig.ItemDel_EquipDecompose)
|
|
moneyType, moneyFormat = IpyGameDataPY.GetFuncEvalCfg("CutTree", 3)
|
moneyValye = eval(FormulaControl.GetCompileFormula("CutTreeDecomposeMoney", moneyFormat))
|
if moneyValye:
|
addDataDict = {ChConfig.Def_Give_Reason_SonKey:itemID, "itemColor":itemColor, "itemLV":itemLV}
|
PlayerControl.GiveMoney(curPlayer, moneyType, moneyValye, "EquipDecompose", addDataDict)
|
|
PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_EquipDecompose, 1)
|
return
|
|
#// B2 23 ÏÉÊ÷Éý¼¶ #tagCMTreeLVUP
|
#
|
#struct tagCMTreeLVUP
|
#{
|
# tagHead Head;
|
# BYTE Type; // 0-¿ªÊ¼Éý¼¶£¨ÇëÇó¿Û³ýÏûºÄ£¬¿ªÊ¼Éý¼¶µ¹¼ÆÊ±£©£»1-Ö´ÐÐÉý¼¶£¨µ¹¼ÆÊ±Ê±¼äµ½ºó·¢Ë͸ÃÀàÐÍ£©
|
#};
|
def OnTreeLVUP(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
upType = clientData.Type
|
if upType == 1:
|
DoTreeLVUP(curPlayer)
|
return
|
|
playerID = curPlayer.GetPlayerID()
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
if lvupState:
|
GameWorld.DebugLog("ÏÉÊ÷ÒѾÔÚÉý¼¶ÖÐ! lvupState=%s" % lvupState, playerID)
|
return
|
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
ipyData = IpyGameDataPY.GetIpyGameData("TreeLV", treeLV)
|
if not ipyData:
|
return
|
needMoney = ipyData.GetLVUPNeedMoney()
|
nextTreeLV = treeLV + 1
|
nextIpyData = IpyGameDataPY.GetIpyGameDataNotLog("TreeLV", nextTreeLV)
|
if needMoney <= 0 or not nextIpyData:
|
GameWorld.DebugLog("ÏÉÊ÷ÒÑÂú¼¶! treeLV=%s" % treeLV, playerID)
|
return
|
|
moneyType = IpyGameDataPY.GetFuncCfg("TreeLVUP", 1)
|
if not PlayerControl.PayMoney(curPlayer, moneyType, needMoney, "TreeLVUP", {"treeLV":treeLV}):
|
return
|
needTime = ipyData.GetLVUPNeedTime()
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPState, 1)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, needTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRefreshTime, int(time.time()))
|
GameWorld.DebugLog("ÏÉÊ÷ÇëÇó¿ªÊ¼Éý¼¶! treeLV=%s,nextTreeLV=%s,needTime=%s" % (treeLV, nextTreeLV, needTime), playerID)
|
SyncTreeInfo(curPlayer)
|
return
|
|
#// B2 24 ʹÓÃÏÉÊ÷Éý¼¶¼õʱÎïÆ· #tagCMUseTreeLVUPTimeItem
|
#
|
#struct tagCMUseTreeLVUPTimeItem
|
#{
|
# tagHead Head;
|
# DWORD UseCount; // ʹÓøöÊý
|
# BYTE IsAutoBuy; // ²»×ã¸öÊýÊÇ·ñ×Ô¶¯¹ºÂò
|
#};
|
def OnUseTreeLVUPTimeItem(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
useCount = clientData.UseCount
|
isAutoBuy = clientData.IsAutoBuy
|
|
playerID = curPlayer.GetPlayerID()
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
if not lvupState or not LVUPRemainTime:
|
GameWorld.DebugLog("ÏÉÊ÷·ÇÉý¼¶ÖлòÊ£Óàʱ¼äΪ0£¬²»ÐèÒª¼õÉÙʱ¼ä! lvupState=%s,LVUPRemainTime=%s"
|
% (lvupState, LVUPRemainTime), playerID)
|
return
|
|
costItemID, reduceSeconds = IpyGameDataPY.GetFuncEvalCfg("TreeLVUP", 2)
|
GameWorld.DebugLog("ʹÓÃÏÉÊ÷Éý¼¶¼õʱÎïÆ·! costItemID=%s,reduceSeconds=%s,useCount=%s" % (costItemID, reduceSeconds, useCount), playerID)
|
if not costItemID or not useCount:
|
return
|
|
costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, useCount)
|
lackCnt = useCount - bindCnt - unBindCnt
|
if lackCnt > 0 and not isAutoBuy:
|
GameWorld.DebugLog("ÏûºÄµÀ¾ß²»×ã! costItemID=%s,useCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s"
|
% (costItemID, useCount, bindCnt, unBindCnt, lackCnt), playerID)
|
return
|
|
delCnt = useCount
|
if lackCnt > 0:
|
moneyType = IPY_GameWorld.TYPE_Price_Gold_Money
|
lackCost = ItemCommon.GetAutoBuyItemNeedGold({costItemID:lackCnt})
|
if lackCost <= 0:
|
return
|
GameWorld.DebugLog("×Ô¶¯¹ºÂòµÀ¾ß: lackCnt=%s,moneyType=%s,lackCost=%s" % (lackCnt, moneyType, lackCost), playerID)
|
infoDict = {ChConfig.Def_Cost_Reason_SonKey:costItemID}
|
if not PlayerControl.PayMoney(curPlayer, moneyType, lackCost, ChConfig.Def_Cost_BuyStoreItem, infoDict):
|
return
|
delCnt -= lackCnt
|
|
# ¿Û³ýÏûºÄ
|
if delCnt:
|
ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "TreeLVUPTimeItem")
|
|
reduceTime = reduceSeconds * useCount
|
ReduceTreeLVUPTime(curPlayer, reduceTime)
|
return
|
|
def RefreshTreeLVUPTime(curPlayer):
|
## Ë¢ÐÂÏÉÊ÷Éý¼¶Ê£Óàʱ¼ä
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
if not lvupState or not LVUPRemainTime:
|
return
|
curTime = int(time.time())
|
lastRefreshTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRefreshTime)
|
if not lastRefreshTime:
|
lastRefreshTime = curTime
|
passSeconds = max(0, curTime - lastRefreshTime)
|
updLVUPRemainTime = max(0, LVUPRemainTime - passSeconds)
|
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, updLVUPRemainTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRefreshTime, curTime)
|
GameWorld.DebugLog("Ë¢ÐÂÏÉÊ÷Éý¼¶Ê£Óàʱ¼ä! updLVUPRemainTime=%s,treeLV=%s,LVUPRemainTime=%s,passSeconds=%s,lastRefreshTime=%s"
|
% (updLVUPRemainTime, treeLV, LVUPRemainTime, passSeconds, lastRefreshTime), curPlayer.GetPlayerID())
|
return
|
|
def ReduceTreeLVUPTime(curPlayer, reduceTime):
|
## ¼õÉÙÏÉÊ÷Éý¼¶Ê£Óàʱ¼ä£¬¿ÉÄÜÊÇʹÓõÀ¾ß»òÆäËû¹¦ÄܵÈ
|
RefreshTreeLVUPTime(curPlayer)
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
if not lvupState or not LVUPRemainTime:
|
GameWorld.DebugLog("ÏÉÊ÷·ÇÉý¼¶ÖлòÊ£Óàʱ¼äΪ0£¬²»ÐèÒª¼õÉÙʱ¼ä! lvupState=%s,LVUPRemainTime=%s"
|
% (lvupState, LVUPRemainTime), curPlayer.GetPlayerID())
|
return
|
updLVUPRemainTime = max(0, LVUPRemainTime - reduceTime)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, updLVUPRemainTime)
|
GameWorld.DebugLog("¼õÉÙÏÉÊ÷Éý¼¶Ê£Óàʱ¼ä! updLVUPRemainTime=%s,LVUPRemainTime=%s,reduceTime=%s"
|
% (updLVUPRemainTime, LVUPRemainTime, reduceTime), curPlayer.GetPlayerID())
|
SyncTreeInfo(curPlayer)
|
return True
|
|
def DoTreeLVUP(curPlayer):
|
## Ö´ÐÐÏÉÊ÷Éý¼¶
|
RefreshTreeLVUPTime(curPlayer)
|
playerID = curPlayer.GetPlayerID()
|
lvupState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
if not lvupState:
|
GameWorld.DebugLog("ÏÉÊ÷·ÇÉý¼¶ÖУ¬ÎÞ·¨Ö´ÐÐÉý¼¶! lvupState=%s" % lvupState, playerID)
|
return
|
LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
if LVUPRemainTime > 0:
|
GameWorld.DebugLog("ÏÉÊ÷Éý¼¶Ê£Óàʱ¼äδµ½£¬ÎÞ·¨Ö´ÐÐÉý¼¶! LVUPRemainTime=%s" % LVUPRemainTime, playerID)
|
return
|
|
treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
updTreeLV = treeLV + 1
|
ipyData = IpyGameDataPY.GetIpyGameData("TreeLV", updTreeLV)
|
if not ipyData:
|
return
|
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLV, updTreeLV)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPState, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRemainTime, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreeLVUPRefreshTime, 0)
|
GameWorld.DebugLog("Ö´ÐÐÏÉÊ÷Éý¼¶! updTreeLV=%s" % updTreeLV, playerID)
|
SyncTreeInfo(curPlayer)
|
|
PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_TreeLV)
|
return
|
|
def SyncTreeInfo(curPlayer):
|
clientPack = ChPyNetSendPack.tagMCTreeInfo()
|
clientPack.TreeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV)
|
clientPack.LVUPState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPState)
|
clientPack.LVUPRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLVUPRemainTime)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|
|
def SyncCutTreeResult(curPlayer, equipCount, giveItemListEx):
|
clientPack = ChPyNetSendPack.tagMCCutTreeResult()
|
clientPack.EquipCount = equipCount
|
clientPack.ExItemList = []
|
for itemID, itemCount, _ in giveItemListEx:
|
item = ChPyNetSendPack.tagMCCutTreeExItem()
|
item.ItemID = itemID
|
item.ItemCount = itemCount
|
clientPack.ExItemList.append(item)
|
clientPack.ExItemCount = len(clientPack.ExItemList)
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|