hxp
2025-06-12 edc3910a9d090e5df4deb2dbc37709a740375938
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package GM.Commands.CrossBattle
#
# @todo:¿ç·þÕ½³¡
# @author hxp
# @date 2022-01-06
# @version 1.0
#
# ÏêϸÃèÊö: ¿ç·þÕ½³¡
#
#-------------------------------------------------------------------------------
#"""Version = 2022-01-06 20:30"""
#-------------------------------------------------------------------------------
 
import GameWorld
import GameLogic_CrossBattlefield
import ShareDefine
import ChConfig
import FBCommon
import operator
import random
 
 
## Âß¼­ÊµÏÖ
#  @param curPlayer
#  @param cmdList ²ÎÊýÁбí
#  @return None
def OnExec(curPlayer, cmdList):
    
    if not cmdList:
        GameWorld.DebugAnswer(curPlayer, "--------------------------------")
        GameWorld.DebugAnswer(curPlayer, "ÉèÖÃÍæ¼Ò»ý·Ö: CrossBattle 1 ×Ü»ý·Ö [¿ÉÑ¡Íæ¼ÒID]")
        GameWorld.DebugAnswer(curPlayer, "ÉèÖÃÍæ¼Ò»÷ɱ: CrossBattle 2 »÷ɱÊý [¿ÉÑ¡Íæ¼ÒID]")
        GameWorld.DebugAnswer(curPlayer, "ÉèÖÃÍæ¼Ò¹±Ï×: CrossBattle 3 ¹±Ï×¶È [¿ÉÑ¡Íæ¼ÒID]")
        GameWorld.DebugAnswer(curPlayer, "ÉèÖÃÕóÓª»ý·Ö: CrossBattle 4 ×Ü»ý·Ö [¿ÉÑ¡ÕóÓªID]")
        GameWorld.DebugAnswer(curPlayer, "ÖØÐÂËæ»ú´ó½±: CrossBattle 5")
        GameWorld.DebugAnswer(curPlayer, "¸´»îÕóÓªÊØÎÀ: CrossBattle 6")
        GameWorld.DebugAnswer(curPlayer, "ÐéÄâ²ÎÓëÍæ¼Ò: CrossBattle 7 ÕóÓªID ÈËÊý  »ý·Ö")
        GameWorld.DebugAnswer(curPlayer, "Êä³öÕóÓªÍæ¼Ò: CrossBattle 8 ÕóÓªID")
        GameWorld.DebugAnswer(curPlayer, "¿ÉÑ¡Íæ¼Ò/ÕóÓªIDûÌîÔòĬÈÏ×ÔÉí")
        return
    
    tick = GameWorld.GetGameWorld().GetTick()
    playerID = curPlayer.GetPlayerID()
    mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
    value1 = cmdList[0]
    if value1 in [1, 2, 3, 4, 5, 6] and not GameWorld.IsCrossServer() or mapID != ChConfig.Def_FBMapID_CrossBattlefield:
        GameWorld.DebugAnswer(curPlayer, "¸ÃÃüÁîÐèÔÚ¿ç·þÕ½³¡Ê¹ÓÃCrossServer·¢ËÍ")
        return
        
    # ÉèÖÃÍæ¼Ò»ý·Ö
    if value1 == 1:
        setScore = cmdList[1] if len(cmdList) > 1 else 1
        tagPlayerID = cmdList[2] if len(cmdList) > 2 else playerID
        battleObj = GameLogic_CrossBattlefield.GetBattlePlayerObj(tagPlayerID)
        battleObj.addPlayerScore(curPlayer, setScore - battleObj.score)
        GameWorld.DebugAnswer(curPlayer, "Íæ¼Ò(%s)»ý·Ö: %s" % (tagPlayerID, battleObj.score))
        GameLogic_CrossBattlefield.NotifyBattlefieldHelp()
        return
    
    # ÉèÖÃÍæ¼Ò»÷ɱ
    if value1 == 2:
        setCount = cmdList[1] if len(cmdList) > 1 else 1
        tagPlayerID = cmdList[2] if len(cmdList) > 2 else playerID
        battleObj = GameLogic_CrossBattlefield.GetBattlePlayerObj(tagPlayerID)
        battleObj.addKillCount(setCount - battleObj.killCount)
        GameWorld.DebugAnswer(curPlayer, "Íæ¼Ò(%s)»÷ɱÊý: %s, Á¬É±Êý: %s" % (tagPlayerID, battleObj.killCount, battleObj.continueKillCount))
        GameLogic_CrossBattlefield.NotifyBattlefieldHelp()
        return
    
    # ÉèÖÃÍæ¼Ò¹±Ï×¶È
    if value1 == 3:
        setProgress = cmdList[1] if len(cmdList) > 1 else 1
        tagPlayerID = cmdList[2] if len(cmdList) > 2 else playerID
        battleObj = GameLogic_CrossBattlefield.GetBattlePlayerObj(tagPlayerID)
        battleObj.addSuperItemContribution(setProgress - battleObj.superItemContribution)
        GameWorld.DebugAnswer(curPlayer, "Íæ¼Ò(%s)¹±Ï×¶È: %s" % (tagPlayerID, battleObj.superItemContribution))
        GameLogic_CrossBattlefield.NotifyBattlefieldHelp()
        return
    
    # ÉèÖÃÕóÓª»ý·Ö
    if value1 == 4:
        setScore = cmdList[1] if len(cmdList) > 1 else 1
        tagFaction = cmdList[2] if len(cmdList) > 2 else 0
        if not tagFaction or tagFaction not in ShareDefine.CampTypeList:
            battleObj = GameLogic_CrossBattlefield.GetBattlePlayerObj(playerID)
            tagFaction = battleObj.faction
        factionObj = GameLogic_CrossBattlefield.GetBattleFactionObj(tagFaction)
        factionObj.addFactionScore(setScore - factionObj.score)
        GameWorld.DebugAnswer(curPlayer, "ÕóÓª(%s)»ý·Ö: %s" % (tagFaction, factionObj.score))
        GameLogic_CrossBattlefield.NotifyBattlefieldHelp()
        return
    
    # ÖØÖôó½±ÐÅÏ¢
    if value1 == 5:
        worldObj = GameLogic_CrossBattlefield.GetBattleWorld()
        worldObj.RandSuperTask()
        GameWorld.DebugAnswer(curPlayer, "ÖØÐÂËæ»ú´ó½±OK! %s" % worldObj.superItemInfo)
        GameLogic_CrossBattlefield.NotifyBattlefieldHelp(True)
        return
    
    # ¸´»îÕóÓªÊØÎÀ
    if value1 == 6:
        rebornNPCIDList = GameLogic_CrossBattlefield.rebornGurad()
        GameWorld.DebugAnswer(curPlayer, "¸´»îÕóÓªÊØÎÀ! %s" % rebornNPCIDList)
        return
    
    # ÐéÄâ²ÎÓëÍæ¼Ò
    if value1 == 7:
        faction = cmdList[1] if len(cmdList) > 1 else 1
        playerCount = cmdList[2] if len(cmdList) > 2 else 0
        score = cmdList[3] if len(cmdList) > 3 else 0
        
        fakePlayerID = 1000 # ¼ÙÍæ¼ÒID
        for f in [1, 2]:
            fObj = GameLogic_CrossBattlefield.GetBattleFactionObj(f)
            for playerID in fObj.factionPlayerDict.keys():
                if playerID >= 10000:
                    continue
                if playerID > fakePlayerID:
                    fakePlayerID = playerID
                    
        factionObj = GameLogic_CrossBattlefield.GetBattleFactionObj(faction)
        
        for _ in xrange(playerCount):
            fakePlayerID += 1
            battleObj = GameLogic_CrossBattlefield.GetBattlePlayerObj(fakePlayerID)
            battleObj.job = random.randint(1, 2)
            battleObj.accID = "fakeAccID%s@test@s86" % fakePlayerID
            battleObj.name = "fakeName%s" % fakePlayerID
            battleObj.realmLV = random.randint(10, 20)
            battleObj.fightPower = random.randint(10000000, 20000000)
            
            battleObj.faction = faction
            battleObj.factionObj = factionObj
            if fakePlayerID not in factionObj.factionPlayerDict:
                factionObj.factionPlayerDict[fakePlayerID] = battleObj
                
            battleObj.addPlayerScore(None, score, isCheckVictory=False)
            
        GameWorld.DebugAnswer(curPlayer, "ÐéÄâ²ÎÓëÍæ¼ÒÕóÓª(%s),ÈËÊý(%s),»ý·Ö(%s)" % (faction, playerCount, score))
        return
    
    # Êä³öÕóÓªÍæ¼Ò
    if value1 == 8:
        printFaction = cmdList[1] if len(cmdList) > 1 else 0
        for faction in [1, 2]:
            if printFaction and printFaction != faction:
                continue
            factionObj = GameLogic_CrossBattlefield.GetBattleFactionObj(faction)
            
            factionObj.battlePlayerSortList = factionObj.factionPlayerDict.values()
            factionObj.battlePlayerSortList.sort(key=operator.attrgetter("score", "scoreSortTime"), reverse=True)
            GameWorld.DebugAnswer(curPlayer, "------ ÕóÓª£¨%s£©,ÈËÊý£¨%s£© ------" % (faction, len(factionObj.battlePlayerSortList)))
            
            for num, batObj in enumerate(factionObj.battlePlayerSortList, 1):
                battleObj = GameLogic_CrossBattlefield.GetBattlePlayerObj(batObj.playerID)
                playerID = battleObj.playerID
                playerName = battleObj.name.decode(GameWorld.GetCharacterEncoding()).encode(ShareDefine.Def_Game_Character_Encoding)
                score = battleObj.score
                superItemContribution = battleObj.superItemContribution
                GameWorld.DebugAnswer(curPlayer, " %s %s:%s,µÃ·Ö:%s,¹±Ï×:%s" % (num, playerName, playerID, score, superItemContribution))
                  
        return
        
    
    return