#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package GM.Commands.CreateFamily
|
#
|
# @todo:´´½¨¼ÙÏÉÃË
|
# @author hxp
|
# @date 2018-01-12
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ´´½¨¼ÙÏÉÃË
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2018-01-12 18:00"""
|
#-------------------------------------------------------------------------------
|
import GameWorld
|
import ShareDefine
|
import PlayerFamily
|
import GameWorldFamilyWar
|
import IPY_GameServer
|
import random
|
|
FackFamilyIDStart = 1000000000
|
|
## Ö´ÐÐÂß¼
|
# @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 ¸öÊý [µÈ¼¶ ÉèÖÃÁªÈüÃû´Î]")
|
GameWorld.DebugAnswer(curPlayer, "ɾ³ý±¾·þ¼ÙÏÉÃË: CreatFamily 0")
|
return
|
|
value1 = gmList[0]
|
if value1 == "c":
|
return
|
|
creatCount = value1
|
if creatCount <= 0:
|
delFamilyList = []
|
familyManager = GameWorld.GetFamilyManager()
|
for i in xrange(familyManager.GetCount()):
|
family = familyManager.GetAt(i)
|
if not family.GetCount():
|
delFamilyList.append(family)
|
|
delCnt = len(delFamilyList)
|
for delFamily in delFamilyList:
|
familyID = delFamily.GetID()
|
familyWarRank = PlayerFamily.GetFamilyWarRank(delFamily)
|
familyManager.DelFamily(familyID)
|
GameWorldFamilyWar.OnDeleteFamily(familyID, familyWarRank)
|
|
PlayerFamily.DoFamilySort()
|
GameWorld.DebugAnswer(curPlayer, "ɾ³ý¼ÙÏÉÃËÊý: %s" % delCnt)
|
return
|
|
# ÕÒ³ö¼ÙÏÉÃ˵Ä×îµÍÕ½Á¦
|
maxWarRank = 0
|
minTotalFightPower = 1000001
|
familyManager = GameWorld.GetFamilyManager()
|
for i in xrange(familyManager.GetCount()):
|
family = familyManager.GetAt(i)
|
maxWarRank = max(maxWarRank, PlayerFamily.GetFamilyWarRank(family))
|
if not family.GetCount():
|
minTotalFightPower = min(minTotalFightPower, PlayerFamily.GetFamilyTotalFightPower(family))
|
|
creatTime = GameWorld.GetCurrentDataTimeStr()
|
FakeFamilyName = "¼ÙÏÉÃË".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
|
FakeLeaderName = "¼ÙÃËÖ÷".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
|
succCreatCount = 0
|
creatCount = min(100, creatCount)
|
familyLV = gmList[1] if len(gmList) > 1 else 1
|
warRank = gmList[2] if len(gmList) > 2 else 0
|
familyManager = GameWorld.GetFamilyManager()
|
curCnt = familyManager.GetCount()
|
for i in xrange(curCnt + 1, creatCount + curCnt + 1):
|
|
familyName = "%s_%s" % (FakeFamilyName, i)
|
curFamily = familyManager.AddFamily(familyName)
|
if curFamily == None:
|
continue
|
|
succCreatCount += 1
|
#---´´½¨¼ÙÏÉÃË---
|
curFamily.SetServerID(GameWorld.GetServerGroupID())
|
curFamily.SetCreateTime(creatTime)
|
curFamily.SetLV(familyLV)
|
curFamily.SetAcceptJoin(ShareDefine.FamilyAcceptJoin_Refuse) # ÉèÖþܾøÉêÇë
|
curFamily.SetLeaderName("%s%s" % (FakeLeaderName, i))
|
minTotalFightPower -= 1
|
PlayerFamily.SetFamilyTotalFightPower(curFamily, minTotalFightPower)
|
if warRank and maxWarRank < (GameWorldFamilyWar.FamilyWar_MaxFamilyCount - GameWorldFamilyWar.FamilyWar_GroupFamilyCount):
|
maxWarRank += 1
|
PlayerFamily.SetFamilyWarRank(curFamily, maxWarRank)
|
|
GameWorld.DebugAnswer(curPlayer, "´´½¨¼ÙÏÉÃËÊý: %s" % succCreatCount)
|
PlayerFamily.DoFamilySort()
|
return
|
|
def OnGetMergeParam(curPlayer):
|
return []
|
|
def OnMergeServerExec(gmList, tick):
|
## ¿ç·þÖ´ÐÐÃüÁî
|
if not gmList:
|
return
|
|
value1 = gmList[0]
|
if value1 != "c":
|
return
|
|
value2 = gmList[1] if len(gmList) > 1 else 1 # ĬÈÏ1¸ö
|
if not value2:
|
__delMergeServerFackFamily()
|
return
|
|
__createMergeServerFackFamily(gmList)
|
return
|
|
def __delMergeServerFackFamily():
|
|
delCnt = 0
|
familyManager = GameWorld.GetFamilyManager()
|
for i in range(familyManager.GetCount())[::-1]:
|
family = familyManager.GetAt(i)
|
if not family:
|
continue
|
if family.GetID() >= FackFamilyIDStart:
|
familyManager.DelFamily(family.GetID())
|
delCnt += 1
|
|
GameWorld.DebugAnswer(None, "³É¹¦É¾³ý¿ç·þ¼ÙÏÉÃË: %s,Ê£Óà:%s" % (delCnt, familyManager.GetCount()))
|
return
|
|
def __createMergeServerFackFamily(gmList):
|
## c ¸öÊý [×ÜÕ½Á¦ ServerID µÈ¼¶ ³ÉÔ±Êý]
|
|
creatCount = gmList[1] if len(gmList) > 1 else 1 # ĬÈÏ1¸ö
|
familyFightPower = gmList[2] if len(gmList) > 2 else 10000000
|
serverID = gmList[3] if len(gmList) > 3 else random.randint(1, 200)
|
familyLV = gmList[4] if len(gmList) > 4 else 1 # ĬÈÏ1¼¶
|
memberCnt = gmList[5] if len(gmList) > 5 else random.randint(1, 10)
|
|
FakeFamilyName = "¼ÙÏÉÃË".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
|
FakeMemberName = "¼Ù³ÉÔ±".decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
|
|
fackFamilyID = FackFamilyIDStart # ¿ç·þ¼ÙÏÉÃËID´Ó10ÒÚ¿ªÊ¼£¬ÒòΪ×Ó·þµÄÏÉÃËID·ÖÅäÊÇ´Ó1¿ªÊ¼
|
fackFamilyIDMax = fackFamilyID + 10000 # ÏÞÖÆ×î´ó¼ÙÃËÊý
|
fackMemID = 1 # ¼Ù³ÉÔ± 1~9999
|
fackMemIDMax = 9999
|
fackMemIDList = []
|
createOKCnt = 0
|
familyManager = GameWorld.GetFamilyManager()
|
for _ in range(min(creatCount, 100)):
|
|
fackFamily = familyManager.FindFamily(fackFamilyID)
|
while fackFamily and fackFamilyID < 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 = familyManager.FindFamily(fackFamilyID)
|
|
if fackFamily:
|
break
|
|
fackFamilyName = "%s%s" % (FakeFamilyName, fackFamilyID)
|
fackFamily = familyManager.AddFamilyEx(fackFamilyName, fackFamilyID)
|
fackFamilyID += 1
|
if not fackFamily:
|
continue
|
|
fackFamily.SetLV(familyLV)
|
PlayerFamily.SetFamilyTotalFightPower(fackFamily, familyFightPower)
|
PlayerFamily.SetFamilyEmblemID(fackFamily, 1)
|
fackFamily.SetServerID(serverID)
|
|
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
|
fackMemName = "%s%s" % (FakeMemberName, fackMemID)
|
|
member = fackFamily.AddMemberEx(fackMemID)
|
if not member:
|
continue
|
|
member.SetName(fackMemName)
|
member.SetLV(random.randint(100, 200))
|
member.SetJob(random.randint(1, 2))
|
member.SetOfficialRank(random.randint(1, 20))
|
|
if not fackFamily.GetLeaderID():
|
member.SetFamilyLV(IPY_GameServer.fmlLeader)
|
fackFamily.SetLeaderID(fackMemID)
|
fackFamily.SetLeaderName(fackMemName)
|
fackFamily.SetLeaderOfficialRank(member.GetOfficialRank())
|
|
fackMemID += 1
|
|
# ¸ù¾Ý³É¹¦´´½¨µÄ³ÉԱƽ¾ù·ÖÅä×ÜÕ½Á¦
|
memFightPowerTotal = familyFightPower
|
memCnt = fackFamily.GetCount()
|
avgValue = memFightPowerTotal / memCnt
|
for m in range(memCnt):
|
member = fackFamily.GetAt(m)
|
memID = member.GetPlayerID()
|
fmLV = member.GetFamilyLV()
|
if m == memCnt - 1:
|
memFightPower = memFightPowerTotal
|
else:
|
memFightPower = avgValue + memCnt / 2 - m
|
memFightPowerTotal -= memFightPower
|
PlayerFamily.SetMemberFightPower(member, memFightPower)
|
GameWorld.DebugLog(" ÏÉÃ˳ÉÔ±: memID=%s,memFightPower=%s,fmLV=%s" % (memID, memFightPower, fmLV))
|
|
createOKCnt += 1
|
familyFightPower += 10000
|
|
GameWorld.DebugAnswer(None, "³É¹¦´´½¨¿ç·þ¼ÙÏÉÃË: %s,×Ü:%s" % (creatCount, familyManager.GetCount()))
|
return
|
|
|
|