hxp
2024-12-26 22c964784d465c77365c2495f6d43117618d8482
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package GM.Commands.PlayerMirror
#
# @todo:¾µÏñÊý¾Ý
# @author hxp
# @date 2024-12-26
# @version 1.0
#
# ÏêϸÃèÊö: ¾µÏñÊý¾Ý
#
#-------------------------------------------------------------------------------
#"""Version = 2024-12-26 17:00"""
#-------------------------------------------------------------------------------
 
import ChConfig
import ShareDefine
import PyDataManager
import PlayerPackData
import ReadChConfig
import GameWorld
 
import base64
import random
 
## Ö´ÐÐÂß¼­
#  @param curPlayer µ±Ç°Íæ¼Ò
#  @param gmList []
#  @return None
def OnExec(curPlayer, gmList):
    if not gmList:
        return
    value = gmList[0]
    if value == "a":
        __addFackPackData(gmList[1:])
    elif value == "d":
        __delFackPackData()
    elif value == "p":
        __printPackData(gmList[1:])
    return
 
def OnGetMergeParam(curPlayer):
    return []
 
def OnMergeServerExec(gmList, tick):
    ## ¿ç·þÖ´ÐÐÃüÁî
    value = gmList[0]
    if value == "a":
        __addFackPackData(gmList[1:])
    elif value == "d":
        __delFackPackData()
    elif value == "p":
        __printPackData(gmList[1:])
    return
 
def __addFackPackData(gmList):
    ## Ìí¼Ó¼ÙµÄ´ò°üÊý¾Ý£¬Ò»°ãÓÃÓÚ¿ª·¢²âÊÔ¹¦ÄÜÓÃ
    FakeName = "¼ÙÃû×Ö".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
    packDataMgr = PyDataManager.GetDBPlayerPackDataManager()
    #GameWorld.DebugAnswer(curPlayer, "Ìí¼Ó¾µÏñ: PlayerMirror a ¸öÊý [ÆðʼID Õ½Á¦ Çø·þID Ä£°ækey]")
    addCount = gmList[0] if len(gmList) > 0 else 1
    startID = gmList[1] if len(gmList) > 1 else 1
    fightPower = gmList[2] if len(gmList) > 2 else 0
    serverID = gmList[3] if len(gmList) > 3 else 0
    packDataTempKey = gmList[4] if len(gmList) > 4 else ""
    
    jobFackPackDataDict = ReadChConfig.GetEvalChConfig("FackPackData")
    
    addOKCount = 0
    for index in range(addCount):
        fackID = startID + index
        if packDataMgr.IsPlayerIn(fackID):
            continue
        
        job = random.randint(1, 2)
        tempKey = packDataTempKey if packDataTempKey else "job%s" % job
        if tempKey not in jobFackPackDataDict:
            GameWorld.DebugAnswer(None, "ÅäÖÃFackPackData.txtûÓиÃÄ£°ækey:%s" % tempKey)
            return
        packDataTeam = jobFackPackDataDict[tempKey]
        packDataTeamBuff = base64.b64decode(packDataTeam)
        
        tempDBPlayer = PlayerPackData.GetDBPlayerByPackData(packDataTeam)
        tempDBPlayer.PlayerID = fackID
        tempDBPlayer.PlayerName = "%s%s" % (FakeName, fackID)
        curServerID = serverID if serverID else fackID / 100
        if not curServerID:
            curServerID = 9999
        tempDBPlayer.AccID = "fack%s@test@s%s" % (fackID, curServerID)
        # Ã»ÓÐÖ¸¶¨Ä£°æ£¬ÔòËæ»úÊý¾Ý
        if not packDataTempKey:
            tempDBPlayer.Job = job
            tempDBPlayer.LV = random.randint(tempDBPlayer.LV, tempDBPlayer.LV + 2)
            tempDBPlayer.OfficialRank = random.randint(tempDBPlayer.OfficialRank, tempDBPlayer.OfficialRank + 2)
            
        curFightPower = fightPower if fightPower else (tempDBPlayer.FightPowerEx * ChConfig.Def_PerPointValue + tempDBPlayer.FightPower)
        curFightPower += index
        tempDBPlayer.FightPower = curFightPower % ChConfig.Def_PerPointValue
        tempDBPlayer.FightPowerEx = curFightPower / ChConfig.Def_PerPointValue
        
        updBuff = tempDBPlayer.getBuffer() + packDataTeamBuff[tempDBPlayer.getLength():]
        updPackData = base64.b64encode(updBuff)
        packDataMgr.UpdPlayerPackData(fackID, updPackData)
        addOKCount += 1
        
    packDataMgr.Sort()
    
    GameWorld.DebugAnswer(None, "Ìí¼Ó¼ÙÍæ¼Ò´ò°üÊý¾ÝÊý:%s,×Ü:%s" % (addOKCount, packDataMgr.GetCount()))
    return
 
def __delFackPackData():
    
    delCount = 0
    packDataMgr = PyDataManager.GetDBPlayerPackDataManager()
    for index in range(packDataMgr.GetCount())[::-1]:
        packObj = packDataMgr.At(index)
        if packObj.playerID >= 10000:
            continue
        packDataMgr.DelPlayerPackData(packObj.playerID)
        delCount += 1
        
    GameWorld.DebugAnswer(None, "ɾ³ý¼ÙÍæ¼Ò´ò°üÊý¾ÝÊý:%s,Ê£:%s" % (delCount, packDataMgr.GetCount()))
    return
 
def __printPackData(gmList):
    startIndex = gmList[0] if len(gmList) > 0 else 0
    printCount = gmList[1] if len(gmList) > 1 else 100
    packDataMgr = PyDataManager.GetDBPlayerPackDataManager()
    packDataMgr.Sort()
    dataCount = packDataMgr.GetCount()
    GameWorld.DebugLog("=== ´ò°üÊý¾Ý×ÜÊý: dataCount=%s,startIndex=%s" % (dataCount, startIndex))
    for index in range(startIndex, startIndex + printCount):
        if index >= dataCount:
            break
        packObj = packDataMgr.At(index)
        playerID = packObj.playerID
        fightPower = packObj.fightPower
        serverID = packObj.serverID
        GameWorld.DebugLog("index=%s,playerID=%s,serverID=%s,fightPower=%s,%s" % (index, playerID, serverID, fightPower, packObj.GetBaseDict()))
    GameWorld.DebugAnswer(None, "Êä³öÍê±ÏÏê¼ûGameServerÈÕÖ¾!×Ü:%s" % (dataCount))
    return