#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package GM.Commands.CreateFamily
|
#
|
# @todo:´´½¨¼ÙÏÉÃË
|
# @author hxp
|
# @date 2025-05-09
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ´´½¨¼ÙÏÉÃË
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2025-05-09 12:20"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import ShareDefine
|
import PlayerViewCache
|
import IPY_PlayerDefine
|
import PlayerFamily
|
import DBDataMgr
|
import random
|
|
## Ö´ÐÐÂß¼
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param gmList []
|
# @return None
|
def OnExec(curPlayer, gmList):
|
|
if not gmList:
|
#GameWorld.DebugAnswer(curPlayer, "´´½¨¿ç·þ¼ÙÏÉÃË: CreatFamily c ¸öÊý [×ÜÕ½Á¦ ServerID µÈ¼¶ ³ÉÔ±Êý]")
|
#GameWorld.DebugAnswer(curPlayer, "ɾ³ý¿ç·þ¼ÙÏÉÃË: CreatFamily c 0")
|
GameWorld.DebugAnswer(curPlayer, "½¨±¾·þ¼ÙÏÉÃË: CreatFamily ¸öÊý [×ÜÕ½Á¦ ServerID µÈ¼¶ ³ÉÔ±Êý]")
|
GameWorld.DebugAnswer(curPlayer, "ɾ±¾·þ¼ÙÏÉÃË: CreatFamily 0")
|
GameWorld.DebugAnswer(curPlayer, "Êä³öÏÉÃËÁбí: CreatFamily pl [ÌõÊý ´ÓµÚxÃû]")
|
GameWorld.DebugAnswer(curPlayer, "Êä³öÏÉÃËÃ÷ϸ: CreatFamily pf ÏÉÃËID")
|
GameWorld.DebugAnswer(curPlayer, "Ìí¼Ó¼ÙÉêÇëÈË: CreatFamily j [ÉêÇëÊý ÏÉÃËID]")
|
return
|
|
value1 = gmList[0]
|
if value1 == "c":
|
# ¿ç·þÃüÁî
|
return
|
|
if value1 == "pl":
|
__printFamilyList(curPlayer, gmList)
|
return
|
|
if value1 == "pf":
|
__printFamilyInfo(curPlayer, gmList)
|
return
|
|
if value1 == "j":
|
__addFackRequestJoin(curPlayer, gmList)
|
return
|
|
creatCount = value1
|
if creatCount <= 0:
|
__delFackFamily(curPlayer)
|
return
|
__createFackFamily(curPlayer, gmList)
|
return
|
|
def __addFackRequestJoin(curPlayer, gmList):
|
reqCnt = gmList[1] if len(gmList) > 1 else 1
|
familyID = gmList[2] if len(gmList) > 2 else curPlayer.GetFamilyID()
|
|
familyMgr = DBDataMgr.GetFamilyMgr()
|
family = familyMgr.FindFamily(familyID)
|
if not family:
|
GameWorld.DebugAnswer(curPlayer, "ûÓиÃÏÉÃË: %s" % familyID)
|
return
|
|
reqCnt = min(reqCnt, 100)
|
fackIDList = range(1, 200)
|
random.shuffle(fackIDList)
|
addCnt = 0
|
reqDict = family.GetReqJoinPlayerInfo()
|
for fackID in fackIDList:
|
if fackID in reqDict:
|
continue
|
family.AddReqJoinPlayerID(fackID)
|
addCnt += 1
|
if addCnt >= reqCnt:
|
break
|
# ¹ã²¥¸øÓÐÕÐÈËȨÏÞµÄ
|
clientPack = PlayerFamily.GetPack_FamilyReqJoinInfo(familyID)
|
PlayerFamily.Broadcast_FamilyPack(familyID, clientPack, PlayerFamily.FamilyPowerID_Call)
|
GameWorld.DebugAnswer(curPlayer, "Ôö¼ÓÉêÇëÊý:%s, ×ÜÉêÇë:%s" % (addCnt, len(family.GetReqJoinPlayerInfo())))
|
return
|
|
def __printFamilyList(curPlayer, gmList):
|
printCnt = gmList[1] if len(gmList) > 1 else 100
|
fromIndex = gmList[2] if len(gmList) > 2 else 0
|
|
printAnswerCnt = 0
|
familyMgr = DBDataMgr.GetFamilyMgr()
|
familyMgr.Sort()
|
familyCnt = familyMgr.GetCount()
|
GameWorld.DebugAnswer(curPlayer, "ÏÉÃË×ÜÊý: %s" % familyCnt)
|
for index in range(fromIndex, fromIndex + printCnt):
|
if index >= familyCnt:
|
break
|
family = familyMgr.GetAt(index)
|
rank = index + 1
|
|
text = "%s,ID:%s,LV:%s,Õ½Á¦:%s,³ÉÔ±:%s" % (rank, family.GetID(), family.GetLV(), family.GetFightPowerTotal(), family.GetCount())
|
printAnswerCnt += 1
|
if printAnswerCnt <= 100:
|
GameWorld.DebugAnswer(curPlayer, text)
|
else:
|
GameWorld.DebugLog(text)
|
|
return
|
|
def __printFamilyInfo(curPlayer, gmList):
|
familyID = gmList[1] if len(gmList) > 1 else curPlayer.GetFamilyID()
|
|
familyMgr = DBDataMgr.GetFamilyMgr()
|
family = familyMgr.FindFamily(familyID)
|
if not family:
|
GameWorld.DebugAnswer(curPlayer, "ÏÉÃ˲»´æÔÚ: %s" % familyID)
|
return
|
|
GameWorld.DebugAnswer(curPlayer, "----- ¡¾%s¡¿ -----" % (GameWorld.CodeToGbk(family.GetName())))
|
GameWorld.DebugAnswer(curPlayer, "ÏÉÃËID:%s,ServerID:%s" % (familyID, family.GetServerID()))
|
GameWorld.DebugAnswer(curPlayer, "LV:%s,Exp:%s" % (family.GetLV(), family.GetExp()))
|
GameWorld.DebugAnswer(curPlayer, "ÉóºË:%s,µÈ¼¶Ìõ¼þ:%s,ÉêÇëÊý:%s" % (family.GetJoinReview(), family.GetJoinLVMin(), len(family.GetReqJoinPlayerInfo())))
|
GameWorld.DebugAnswer(curPlayer, "»ÕÕÂ:%s" % (family.GetEmblemID()))
|
GameWorld.DebugAnswer(curPlayer, "×ÜÕ½Á¦:%s,ÈËÊý:%s" % (family.GetFightPowerTotal(), family.GetCount()))
|
GameWorld.DebugAnswer(curPlayer, "ÃËÖ÷:%s" % (family.GetLeaderID()))
|
for index in range(family.GetCount()):
|
member = family.GetAt(index)
|
playerID = member.GetPlayerID()
|
fightPower = member.GetFightPowerTotal()
|
GameWorld.DebugAnswer(curPlayer, "%s,%s,ְλ:%s,Õ½Á¦:%s" % (index, playerID, member.GetFmLV(), fightPower))
|
|
return
|
|
def __delFackFamily(curPlayer):
|
|
delCnt = 0
|
familyMgr = DBDataMgr.GetFamilyMgr()
|
for index in range(familyMgr.GetCount())[::-1]:
|
family = familyMgr.GetAt(index)
|
familyID = family.GetID()
|
if familyID > ShareDefine.FackFamilyIDMax:
|
continue
|
familyMgr.DelFamily(family.GetID())
|
|
if curPlayer:
|
GameWorld.DebugAnswer(curPlayer, "ɾ³ý¼ÙÏÉÃËÊý: %s,Ê£Óà:%s" % (delCnt, familyMgr.GetCount()))
|
elif GameWorld.IsCrossServer():
|
GameWorld.DebugAnswer(None, "ɾ³ý¿ç·þ¼ÙÏÉÃË: %s,Ê£Óà:%s" % (delCnt, familyMgr.GetCount()))
|
return
|
|
def __createFackFamily(curPlayer, gmList):
|
## ¸öÊý [×ÜÕ½Á¦ ServerID µÈ¼¶ ³ÉÔ±Êý]
|
|
creatCount = gmList[0] if len(gmList) > 0 else 1 # ĬÈÏ1¸ö
|
familyFightPower = gmList[1] if len(gmList) > 1 else 10000000
|
serverID = gmList[2] if len(gmList) > 2 else random.randint(1, 200)
|
familyLV = gmList[3] if len(gmList) > 3 else 1 # ĬÈÏ1¼¶
|
memberCnt = gmList[4] if len(gmList) > 4 else random.randint(1, 10)
|
|
FakeFamilyName = GameWorld.GbkToCode("ÉñÃØ¾üÍÅ")
|
|
fackFamilyID = ShareDefine.FackFamilyIDStart
|
fackMemID = ShareDefine.FackPlayerIDStart
|
fackMemIDMax = ShareDefine.FackPlayerIDMax
|
|
fackMemIDList = []
|
createOKCnt = 0
|
familyMgr = DBDataMgr.GetFamilyMgr()
|
for _ in range(min(creatCount, 100)):
|
fackFamily = familyMgr.FindFamily(fackFamilyID)
|
while fackFamily and fackFamilyID < ShareDefine.FackFamilyIDMax:
|
for m in xrange(fackFamily.GetCount()):
|
member = fackFamily.GetAt(m)
|
memID = member.GetPlayerID()
|
if memID and memID not in fackMemIDList:
|
fackMemIDList.append(memID)
|
fackFamilyID += 1
|
fackFamily = familyMgr.FindFamily(fackFamilyID)
|
|
if fackFamily:
|
break
|
|
fackFamilyName = "%s%s" % (FakeFamilyName, fackFamilyID)
|
fackFamily = familyMgr.AddFamily(fackFamilyName, serverID, fackFamilyID)
|
fackFamilyID += 1
|
if not fackFamily:
|
continue
|
|
fackFamily.SetLV(familyLV)
|
fackFamily.SetFightPowerTotal(familyFightPower)
|
fackFamily.SetEmblemID(1)
|
fackFamily.SetJoinReview(1) # ÉèÖÃÐèÒªÉóºË
|
fackFamily.SetJoinLVMin(random.randint(0, 1000))
|
|
GameWorld.DebugLog("´´½¨¼ÙÏÉÃË: fackFamilyID=%s,serverID=%s,familyFightPower=%s,memberCnt=%s"
|
% (fackFamilyID, serverID, familyFightPower, memberCnt))
|
for _ in range(memberCnt):
|
|
while fackMemID in fackMemIDList and fackMemID < fackMemIDMax:
|
fackMemID += 1
|
|
if fackMemID in fackMemIDList:
|
break
|
|
member = fackFamily.AddMember(fackMemID)
|
if not member:
|
continue
|
|
if not fackFamily.GetLeaderID():
|
member.SetFmLV(IPY_PlayerDefine.fmlLeader)
|
fackFamily.SetLeaderID(fackMemID)
|
|
fackMemID += 1
|
|
# ¸ù¾Ý³É¹¦´´½¨µÄ³ÉԱƽ¾ù·ÖÅä×ÜÕ½Á¦
|
memFightPowerTotal = familyFightPower
|
memCnt = fackFamily.GetCount()
|
avgValue = memFightPowerTotal / memCnt
|
for m in range(memCnt):
|
member = fackFamily.GetAt(m)
|
memID = member.GetPlayerID()
|
fmLV = member.GetFmLV()
|
if m == memCnt - 1:
|
memFightPower = memFightPowerTotal
|
else:
|
memFightPower = avgValue + memCnt / 2 - m
|
memFightPowerTotal -= memFightPower
|
viewCache = PlayerViewCache.FindViewCache(memID, True)
|
viewCache.SetFightPowerTotal(memFightPower)
|
GameWorld.DebugLog(" ÏÉÃ˳ÉÔ±: memID=%s,memFightPower=%s,fmLV=%s" % (memID, memFightPower, fmLV))
|
member.RefreshMemberByID(memID)
|
|
createOKCnt += 1
|
familyFightPower += 10000
|
|
familyMgr.Sort()
|
if curPlayer:
|
GameWorld.DebugAnswer(curPlayer, "³É¹¦´´½¨¼ÙÏÉÃË: %s,Ê£Óà:%s" % (creatCount, familyMgr.GetCount()))
|
elif GameWorld.IsCrossServer():
|
GameWorld.DebugAnswer(None, "³É¹¦´´½¨¿ç·þ¼ÙÏÉÃË: %s,×Ü:%s" % (creatCount, familyMgr.GetCount()))
|
return
|