- Mesaj
- 108
- Çözümler
- 3
- Beğeni
- 12
- Puan
- 434
- Ticaret Puanı
- 0
gen.py:
#!/usr/local/bin/python2.7
#### @martysama0134 start scripts ####
### TODO:
## clean how rawly CONFIG is shown in code
## find solution for common cores and not PORT.RANDOM ports
## separate database
from gen_settings import *
portlist={}
clearlist=[]
startlist=[]
def SlashFix(pathname):
if v_system in ("FreeBSD", "Linux"):
return pathname.replace("\\", "/")
elif v_system=="Windows":
return pathname.replace("/", "\\")
return pathname
def CreateFolder(foldername):
foldername = SlashFix(foldername)
if v_system in ("FreeBSD", "Linux"):
fShell("mkdir -p %s" % (foldername))
elif v_system=="Windows":
fShell("mkdir %s" % (foldername))
def CreateEmptyFile(filename):
filename = SlashFix(filename)
if v_system in ("FreeBSD", "Linux"):
fShell("cat /dev/null > %s" % (filename))
elif v_system=="Windows":
fShell("type Nul > %s" % (filename))
def TouchFile(filename):
filename = SlashFix(filename)
if v_system in ("FreeBSD", "Linux"):
fShell("touch %s" % (filename))
elif v_system=="Windows":
fShell("type Nul >> %s" % (filename))
def Append2File(txt, filename):
filename = SlashFix(filename)
fShell("echo %s >> %s" % (txt, filename))
def DeleteFile(filename):
filename = SlashFix(filename)
if v_system in ("FreeBSD", "Linux"):
fShell("rm -rf %s" % (filename))
elif v_system=="Windows":
fShell("del /SF %s" % (filename))
def SymLinkCreate(src, dst, is_file):
src = SlashFix(src)
dst = SlashFix(dst)
if v_system=="FreeBSD":
fShell("ln -Ffnsw %s %s" % (src, dst))
elif v_system=="Linux":
fShell("ln -Ffns %s %s" % (src, dst))
elif v_system=="Windows":
if is_file:
fShell("mklink %s %s" % (dst, src))
else:
fShell("mklink /D %s %s" % (dst, src))
def SymLinkCreateDir(src, dst):
SymLinkCreate(src, dst, is_file=False)
def SymLinkCreateFile(src, dst):
SymLinkCreate(src, dst, is_file=True)
def SymLinkCreateFileExe(src, dst):
if v_system=="Windows":
dst+=".exe"
SymLinkCreate(src, dst, is_file=True)
def WriteHostConfig(szConfFile, szGameName):
Append2File("HOSTNAME: %s" % (szGameName), "%s" % (szConfFile))
def WriteChannelConfig(szConfFile, dwChannel):
if dwChannel==M2TYPE.NOCHAN:
dwChannel=1
Append2File("CHANNEL: %u" % (dwChannel), "%s" % (szConfFile))
def WriteMapConfig(szConfFile, szMapList):
if len(szMapList.split())>=32:
print "WARNING: MORE THAN 32 MAPS INSIDE:", szConfFile
Append2File("MAP_ALLOW: %s" % (szMapList), "%s" % (szConfFile))
def WritePortConfig(szConfFile, wGenPort, dwType, dwPortType=None):
if dwType==M2TYPE.DB:
Append2File("%s = %u" % (PORT.lPORT[PORT.BIND_PORT], wGenPort), "%s" % (szConfFile))
elif dwType==M2TYPE.CORE or dwType==M2TYPE.AUTH:
Append2File("%s: %u" % (PORT.lPORT[dwPortType], wGenPort), "%s" % (szConfFile))
def genWriteConfig(szConfFile, tuSubConfTable):
for val1 in tuSubConfTable:
Append2File("%s" % ((val1[0] % val1[1])), "%s" % (szConfFile))
def genMakeConfig(szConfFile, diConfTable, bIsExtra=False, dwType=None):
genWriteConfig(szConfFile, diConfTable["general"])
if bIsExtra:
genWriteConfig(szConfFile, diConfTable["extra"])
if dwType!=None:
genWriteConfig(szConfFile, diConfTable[dwType])
def genGetRandPort(dwType):
wTmpPort = PORT.RANDOMI
while(True):
if wTmpPort in portlist:
wTmpPort+=1
continue
else:
portlist[wTmpPort]=dwType
break
return wTmpPort
def genGenM2List():
from json import dumps as j_dumps
with open("start.list", "wb") as fList: #b for unix end line
fList.write(j_dumps(startlist, indent=4))
with open("clear.list", "wb") as fList: #b for unix end line
fList.write(j_dumps(clearlist, indent=4))
def genGenIpfwList():
def Joi(mList):
return ' '.join(str(v) for v in mList)
szRules=CustIpfwList%(Joi(udp_yes_ports), Joi(tcp_yes_ports), Joi(tcp_nop_ports))
with open("ipfw.rules", "wb") as fIpfw: #b for unix end line
fIpfw.write(szRules)
# fIpfw.write(szRules.replace("\r", ""))
def genInit():
# clean port list
global portlist
portlist.clear()
# clean start/clear list
global startlist, clearlist
del startlist[:]
del clearlist[:]
# clean ipfw list
global udp_yes_ports,tcp_yes_ports,tcp_nop_ports
del udp_yes_ports[:]
del tcp_yes_ports[:]
del tcp_nop_ports[:]
def genInitSrv(szSvr):
#
for val1 in ("share/data","share/locale","share/package","share/panama","share/conf","share/bin"):
CreateFolder("%s/%s"%(szSvr, val1))
# print "%s/%s"%(szSvr, val1)
#
for val1 in ("share/conf/BANIP","share/conf/CMD","share/conf/CRC","share/conf/VERSION","share/conf/state_user_count","share/bin/db","share/bin/game"):
TouchFile("%s/%s" % (szSvr, val1))
# print "%s/%s"%(szSvr, val1)
#
for val1 in ("share/conf/item_names.txt","share/conf/item_proto.txt","share/conf/mob_names.txt","share/conf/mob_proto.txt"):
TouchFile("%s/%s" % (szSvr, val1))
# print "%s/%s"%(szSvr, val1)
#global single server rules
genConfig = {}
genConfig["all"] = {}
#for ipfw rules
udp_yes_ports=[]
tcp_yes_ports=[]
tcp_nop_ports=[]
def genCalcParentRet(szParentName):
return szParentName.count("/")*v_chalS
def genMain(oSub={}, szParentName=[]):
global genConfig
global startlist, clearlist
global udp_yes_ports, tcp_yes_ports, tcp_nop_ports
if not oSub:
oSub=M2S
genInit()
for v1 in oSub:
k1=v1["name"]
listTmpParentName=list(szParentName) # list() to bypass variable passed by reference to value
listTmpParentName.append(k1)
szTmpParentName=("/".join(listTmpParentName))
# DeleteFile("%s" % szTmpParentName) # completely unsafe
CreateFolder("%s" % szTmpParentName)
# print szTmpParentName
if v1["type"]==M2TYPE.DB:
k1s=genConfig["active"]
#logs make paths
CreateFolder("%s/%s/%s/cores" % (k1s, v_lognS, szTmpParentName))
CreateFolder("%s/%s/%s/log" % (k1s, v_lognS, szTmpParentName))
TouchFile("%s/%s/%s/PTS" % (k1s, v_lognS, szTmpParentName))
#logs sym paths
SymLinkCreateDir("../%s/%s/cores" % (v_lognS, szTmpParentName), "%s/cores" % (szTmpParentName))
SymLinkCreateDir("../%s/%s/log" % (v_lognS, szTmpParentName), "%s/log" % (szTmpParentName))
SymLinkCreateFile("../%s/%s/PTS" % (v_lognS, szTmpParentName), "%s/PTS" % (szTmpParentName))
szDbName="%s-%s"%(genConfig["active"], k1)
SymLinkCreateFileExe("../share/bin/db", "%s/%s" % (szTmpParentName,szDbName))
#start/logs track
startlist.append(
{
"path":szTmpParentName,
"name":szDbName,
"type":M2TYPE.DB,
"chan":M2TYPE.NOCHAN,
"serv":genConfig["active"],
}
)
clearlist.append(
{
"path":"%s/%s/%s"%(k1s, v_lognS, szTmpParentName),
"type":M2TYPE.DB,
"chan":M2TYPE.NOCHAN,
"serv":genConfig["active"],
}
)
#@item/mob protos .txt
SymLinkCreateFile("../share/conf/item_names.txt", "%s/item_names.txt" % (szTmpParentName))
SymLinkCreateFile("../share/conf/item_proto.txt", "%s/item_proto.txt" % (szTmpParentName))
SymLinkCreateFile("../share/conf/mob_names.txt", "%s/mob_names.txt" % (szTmpParentName))
SymLinkCreateFile("../share/conf/mob_proto.txt", "%s/mob_proto.txt" % (szTmpParentName))
#@CONFIG details
CreateEmptyFile("%s/conf.txt"%(szTmpParentName))
genMakeConfig("%s/conf.txt"%szTmpParentName, v1["config"], genConfig["all"][genConfig["active"]]["isextra"])
if v1["port"]==PORT.RANDOM:
genConfig["all"][genConfig["active"]]["db_port"]=genGetRandPort(v1["type"])
else:
genConfig["all"][genConfig["active"]]["db_port"]=v1["port"]
WritePortConfig("%s/conf.txt"%szTmpParentName, genConfig["all"][genConfig["active"]]["db_port"], v1["type"], PORT.BIND_PORT)
#add to ipfw rules
tcp_nop_ports.append(genConfig["all"][genConfig["active"]]["db_port"])
elif v1["type"]==M2TYPE.CHANFOLDER or v1["type"]==M2TYPE.CHANNEL:
if v1["type"]==M2TYPE.CHANNEL:
genConfig["all"][genConfig["active"]]["chan"]=v1["chan"]
if v1["type"]==M2TYPE.CHANFOLDER:
genConfig["all"][genConfig["active"]]["mark"]="%s/mark"%szTmpParentName
CreateFolder("%s" % genConfig["all"][genConfig["active"]]["mark"])
genMain(v1["sub"], listTmpParentName)
elif v1["type"]==M2TYPE.SERVER:
genInitSrv(szTmpParentName)
genConfig["active"]=v1["name"]
genConfig["all"][v1["name"]]={}
genConfig["all"][v1["name"]]["isextra"]=v1["isextra"]
genConfig["all"][v1["name"]]["mark"]="%s/mark"%szTmpParentName
genMain(v1["sub"], listTmpParentName)
elif v1["type"]==M2TYPE.AUTH or v1["type"]==M2TYPE.CORE:
k1s=genConfig["active"]
#logs make paths
CreateFolder("%s/%s/%s/cores" % (k1s, v_lognS, szTmpParentName))
CreateFolder("%s/%s/%s/log" % (k1s, v_lognS, szTmpParentName))
TouchFile("%s/%s/%s/PTS" % (k1s, v_lognS, szTmpParentName))
#logs sym paths
gCPR=genCalcParentRet(szTmpParentName)
SymLinkCreateDir("%s%s/%s/cores" % (gCPR,v_lognS,szTmpParentName), "%s/cores" % (szTmpParentName))
SymLinkCreateDir("%s%s/%s/log" % (gCPR,v_lognS,szTmpParentName), "%s/log" % (szTmpParentName))
SymLinkCreateFile("%s%s/%s/PTS" % (gCPR,v_lognS,szTmpParentName), "%s/PTS" % (szTmpParentName))
#dirs sym paths
SymLinkCreateDir("%sshare/data" % (gCPR), "%s/data" % (szTmpParentName))
SymLinkCreateDir("%sshare/locale" % (gCPR), "%s/locale" % (szTmpParentName))
SymLinkCreateDir("%sshare/package" % (gCPR), "%s/package" % (szTmpParentName))
SymLinkCreateDir("%sshare/panama" % (gCPR), "%s/panama" % (szTmpParentName))
#files sym paths
SymLinkCreateFile("%sshare/conf/CMD" % (gCPR), "%s/CMD" % (szTmpParentName))
SymLinkCreateFile("%sshare/conf/CRC" % (gCPR), "%s/CRC" % (szTmpParentName))
SymLinkCreateFile("%sshare/conf/VERSION" % (gCPR), "%s/VERSION" % (szTmpParentName))
SymLinkCreateFile("%sshare/conf/state_user_count" % (gCPR), "%s/state_user_count" % (szTmpParentName))
if v1["type"]==M2TYPE.AUTH:
SymLinkCreateFile("%sshare/conf/BANIP" % (gCPR), "%s/BANIP" % (szTmpParentName))
if v1["type"]==M2TYPE.AUTH:
szGameName="%s-%s"%(genConfig["active"], k1)
else:
szGameName="%s-ch%u-%s"%(genConfig["active"], genConfig["all"][genConfig["active"]]["chan"], k1)
#mark sym path
if v1["type"]==M2TYPE.CORE:
gCPR2=genCalcParentRet(genConfig["all"][genConfig["active"]]["mark"])
SymLinkCreateDir("%smark" % gCPR2, "%s/mark" % (szTmpParentName))
#core sym path
SymLinkCreateFileExe("%sshare/bin/game" % (gCPR), "%s/%s" % (szTmpParentName, szGameName))
#start/logs track
if v1["type"]==M2TYPE.AUTH:
kh1=M2TYPE.NOCHAN
else:
kh1=genConfig["all"][genConfig["active"]]["chan"]
startlist.append(
{
"path":szTmpParentName,
"name":szGameName,
"type":v1["type"],
"chan":kh1,
"serv":genConfig["active"],
}
)
clearlist.append(
{
"path":"%s/%s/%s"%(k1s, v_lognS, szTmpParentName),
"type":v1["type"],
"chan":kh1,
"serv":genConfig["active"],
}
)
#@CONFIG details
CreateEmptyFile("%s/CONFIG" % (szTmpParentName))
genMakeConfig("%s/CONFIG"%szTmpParentName, v1["config"], genConfig["all"][genConfig["active"]]["isextra"], v1["type"])
WriteHostConfig("%s/CONFIG"%szTmpParentName, szGameName)
WriteChannelConfig("%s/CONFIG"%szTmpParentName, kh1)
if not v1["type"]==M2TYPE.AUTH:
WriteMapConfig("%s/CONFIG"%szTmpParentName, v1["maps"])
# w/o array, only if
wTmpPort={}
# PORT process
if v1["port"]==PORT.RANDOM:
wTmpPort[PORT.PORT]=genGetRandPort(v1["type"])
else:
wTmpPort[PORT.PORT]=v1["port"]
WritePortConfig("%s/CONFIG"%szTmpParentName, wTmpPort[PORT.PORT], v1["type"], PORT.PORT)
# P2P_PORT process
if v1["p2p_port"]==PORT.RANDOM:
wTmpPort[PORT.P2P_PORT]=genGetRandPort(v1["type"])
else:
wTmpPort[PORT.P2P_PORT]=v1["p2p_port"]
WritePortConfig("%s/CONFIG"%szTmpParentName, wTmpPort[PORT.P2P_PORT], v1["type"], PORT.P2P_PORT)
# DB_PORT process
wTmpPort[PORT.DB_PORT]=genConfig["all"][genConfig["active"]]["db_port"]
WritePortConfig("%s/CONFIG"%szTmpParentName, wTmpPort[PORT.DB_PORT], v1["type"], PORT.DB_PORT)
#add to ipfw rules
if v1["type"]==M2TYPE.AUTH:
udp_yes_ports.append(wTmpPort[PORT.PORT])
tcp_yes_ports.append(wTmpPort[PORT.PORT])
tcp_nop_ports.append(wTmpPort[PORT.P2P_PORT])
pass
else:
print "unrecognized type %u"%v1["type"]
#end
def genList(bIsVerbose=False):
if bIsVerbose:
print "startlist:"
for i in startlist:
print "---", i, "---"
print "clearlist:"
for i in clearlist:
print "---", i, "---"
print "udp_yes_ports:"
for i in udp_yes_ports:
print "---", i, "---"
print "tcp_yes_ports:"
for i in tcp_yes_ports:
print "---", i, "---"
print "tcp_nop_ports:"
for i in tcp_nop_ports:
print "---", i, "---"
genGenM2List()
genGenIpfwList()
def genGen():
genMain()
genList(True)
if __name__ == "__main__":
genGen()
#
gen_settings.py:
#### @martysama0134 start scripts ####
from platform import system as p_system
v_system = p_system()
from subprocess import check_output as sp_co, call as sp_call, CalledProcessError as sp_CalledProcessError
def fShell(szCmd, bRet=False):
try:
if bRet:
return sp_co(szCmd, shell=True)[:-1] # remove final \n
else:
return sp_call(szCmd, shell=True)
except sp_CalledProcessError:
return -1
if v_system=="FreeBSD":
v_admusrS=fShell("ifconfig em0 | grep -Eo 'inet ([0-9]{1,3}\.){3}([0-9]{1,3})' | awk '{print $2}'", True)
elif v_system=="Linux":
v_admusrS=fShell("ifconfig eth0 | grep -Eo 'inet addr:([0-9]{1,3}\.){3}([0-9]{1,3})' | awk -F':' '{print $2}'", True)
elif v_system=="Windows":
v_admusrS="127.0.0.1"
v_admpwdS='58948HG83H4G8H84G' #adminpage_password
v_svrhstS='localhost' #host for sql connections
v_svrdttS='metin2 ASSBDAS!#FSABFASI!#JYXYXKAFAF' #user&pwd for sql connections
v_svrdtaS="%s %s"%(v_svrhstS, v_svrdttS) #host, user and pwd for db sql connections
v_dbhstS='127.0.0.1'#default hostname for db
v_dbipS=30000 #default port for db (the others will be automatically calculated)
v_lognS='logs' #name of the all_log path
v_chanS='channel/' #name of the channel path
v_chalS='../' #workaround that should be equivalent to $v_charS paths per ../
M2SD = {
"account": "account",
"common": "common",
"hotbackup": "hotbackup",
"log": "log",
"player": "player",
}
class M2TYPE:
SERVER, DB, AUTH, CHANFOLDER, CHANNEL, CORE = xrange(6)
NOCHAN = 0
class PORT:
RANDOMI = v_dbipS # a random port will start from such value
RANDOM = 0
PORT, P2P_PORT, DB_PORT, BIND_PORT = xrange(4)
lPORT = ("PORT", "P2P_PORT", "DB_PORT", "BIND_PORT")
M2CONFIG = {
"db": {
"general": (
("SQL_ACCOUNT = \\\"%s %s %s 0\\\"", (v_svrhstS, M2SD["account"], v_svrdttS)),
("SQL_COMMON = \\\"%s %s %s 0\\\"", (v_svrhstS, M2SD["common"], v_svrdttS)),
("SQL_PLAYER = \\\"%s %s %s 0\\\"", (v_svrhstS, M2SD["player"], v_svrdttS)),
("SQL_HOTBACKUP = \\\"%s %s %s 0\\\"", (v_svrhstS, M2SD["hotbackup"], v_svrdttS)),
("TABLE_POSTFIX = \\\"%s\\\"", ("")),
# ("BIND_PORT = %s", (v_dbipS,)),
# ("DB_SLEEP_MSEC = 10", ()),
("CLIENT_HEART_FPS = %u", (25)),
# ("HASH_PLAYER_LIFE_SEC = %u", (600)),
("PLAYER_ID_START = %u", (1000)),
("PLAYER_DELETE_LEVEL_LIMIT = %u", (70)),
# ("PLAYER_DELETE_LEVEL_LIMIT_LOWER = %u", (15)),
("ITEM_ID_RANGE = %u %u ", (100000000, 200000000)),
# ("BACKUP_LIMIT_SEC = %u", (3600)),
("DISABLE_HOTBACKUP = %u", (True)),
("LOCALE = %s", ("latin1")),
),
"extra": (
("PROTO_FROM_DB = %u", (False)),
("MIRROR2DB = %u", (True)),
# ("BIND_IP = %u", (192.168.0.190)),
)
},
"core": {
M2TYPE.AUTH: (
("AUTH_SERVER: %s", ("master")),
("PLAYER_SQL: %s %s", (v_svrdtaS, M2SD["account"])),
),
M2TYPE.CORE: (
("PLAYER_SQL: %s %s", (v_svrdtaS, M2SD["player"])),
),
"general": (
# ("TABLE_POSTFIX: %s", ("")),
# ("ITEM_ID_RANGE: %u %u", (5000001, 10000000)),
("VIEW_RANGE: %u", (10000)),
("PASSES_PER_SEC: %u", (25)),
("SAVE_EVENT_SECOND_CYCLE: %u", (180)),
("PING_EVENT_SECOND_CYCLE: %u", (180)),
("DB_ADDR: %s", (v_dbhstS)),
("COMMON_SQL: %s %s", (v_svrdtaS, M2SD["common"])),
("LOG_SQL: %s %s", (v_svrdtaS, M2SD["log"])),
# ("TEST_SERVER: %d", (True)),
# ("PK_SERVER: %d", (True)),
("ADMINPAGE_IP1: %s", (v_admusrS)),
("ADMINPAGE_PASSWORD: %s", (v_admpwdS)),
("MAX_LEVEL: %u", (120)),
),
"extra": (
# ("CHECK_VERSION_SERVER: %u", (True)),
# ("CHECK_VERSION_VALUE: %u", (1215955205)),
("CHANGE_ATTR_TIME_LIMIT: %u", (False)),
("EMOTION_MASK_REQUIRE: %u", (False)),
("PRISM_ITEM_REQUIRE: %u", (False)),
("SHOP_PRICE_3X_TAX: %u", (False)),
("ENABLE_GLOBAL_SHOUT: %u", (1)),
("GLOBAL_SHOUT: %u", (True)),
("ITEM_COUNT_LIMIT: %u", (250)),
("STATUS_POINT_GET_LEVEL_LIMIT: %u", (120)),
("STATUS_POINT_SET_MAX_VALUE: %u", (90)),
("SHOUT_LIMIT_LEVEL: %u", (15)),
("SHOUT_LIMIT_TIME: %u", (5)),
("DB_LOG_LEVEL: %u", (1)),
("EMPIRE_LANGUAGE_CHECK: %u", (True)),
# ("ITEM_DESTROY_TIME_AUTOGIVE: %u", (15)),
# ("ITEM_DESTROY_TIME_DROPITEM: %u", (5)),
# ("ITEM_DESTROY_TIME_DROPGOLD: %u", (15)),
("PK_PROTECT_LEVEL: %u", (20)),
("ADDSTONE_FAILURE0: %u", (80)),
("ADDSTONE_FAILURE1: %u", (70)),
("ADDSTONE_FAILURE2: %u", (60)),
("ADDSTONE_FAILURE3: %u", (50)),
("ADDSTONE_FAILURE4: %u", (40)),
("START_GOLD: %u", (500)),
#("HACKSHIELD_ENABLE: %u", (1)),
#("CHECK_MULTIHACK: %u", (1)),
("TRADE_EFFECT: %u", (1)),
("ATTR_ALWAYS_5_ADD: %u", (1)),
("PROTECT_NORMAL_PLAYER: %u", (1)),
("DISABLE_PRISM_ITEM: %u", (0)),
#("BLOCK_CHAR_CREATION: %u", (0)),
("SKILLBOOK_NEED_EXP: %u", (20000)),
("SKILLBOOK_NEXTREAD_MIN: %u", (28800)),
("SKILLBOOK_NEXTREAD_MAX: %u", (43200)),
("BLOCK_POTIONS_IN_DUELL: %u", (1)),
("IMMUN_RATE: %u", (100)),
("MAX_ADDON_FKS: %u", (35)),
("MAX_ADDON_DSS: %u", (40)),
("PC_MAX_MOVEMENT_SPEED: %u", (200)),
("PC_MAX_ATTACK_SPEED: %u", (200)),
("MOB_MAX_MOVEMENT_SPEED: %u", (250)),
("MOB_MAX_ATTACK_SPEED: %u", (250)),
),
},
}
COMMONCHAN=(
{
"name": "core1",
"type": M2TYPE.CORE,
"port": PORT.RANDOM,
"p2p_port": PORT.RANDOM,
"config": M2CONFIG["core"],
"maps": "1 2 3 4 6",
},
{
"name": "core2",
"type": M2TYPE.CORE,
"port": PORT.RANDOM,
"p2p_port": PORT.RANDOM,
"config": M2CONFIG["core"],
"maps": "21 22 23 24 26",
},
{
"name": "core3",
"type": M2TYPE.CORE,
"port": PORT.RANDOM,
"p2p_port": PORT.RANDOM,
"config": M2CONFIG["core"],
"maps": "41 42 43 44 46",
},
{
"name": "core4",
"type": M2TYPE.CORE,
"port": PORT.RANDOM,
"p2p_port": PORT.RANDOM,
"config": M2CONFIG["core"],
"maps": "61 62 63 64 65 66 67 68 69 70 81 180 218 252 302 303 304 318",
},
{
"name": "core5",
"type": M2TYPE.CORE,
"port": PORT.RANDOM,
"p2p_port": PORT.RANDOM,
"config": M2CONFIG["core"],
"maps": "101 103 105 110 111 114 118 119 120 121 122 123 124 125 126 127 128 253 254 255 256 257 353 354 356 403 404",
},
# {
# "name": "core3",
# "type": M2TYPE.CORE,
# "port": PORT.RANDOM,
# "p2p_port": PORT.RANDOM,
# "config": M2CONFIG["core"],
# "maps": "",
# },
)
# PREMIUMCHAN=(
# {
# "name": "core1",
# "type": M2TYPE.CORE,
# "port": PORT.RANDOM,
# "p2p_port": PORT.RANDOM,
# "config": M2CONFIG["core"],
# "maps": "1 21 41 3 23 43 4 24 44 5 25 45 108 109 112",
# },
# {
# "name": "core2",
# "type": M2TYPE.CORE,
# "port": PORT.RANDOM,
# "p2p_port": PORT.RANDOM,
# "config": M2CONFIG["core"],
# "maps": "61 62 63 64 65 66 67 68 69 70 71 72 73 206 104 193 207",
# },
# )
CHAN99=(
{
"name": "core99",
"type": M2TYPE.CORE,
"port": PORT.RANDOM,
"p2p_port": PORT.RANDOM,
"config": M2CONFIG["core"],
"maps": "5 25 45 66 71 72 73 100 104 107 108 109 112 113 181 182 183 208 216 217 250 251 351 352 355",
},
)
M2S=(
{
"name": "game",
"type": M2TYPE.SERVER,
"isextra": True,
"sub": (
{
"name": "db",
"type": M2TYPE.DB,
"port": PORT.RANDOM,
"config": M2CONFIG["db"],
},
{
"name": "auth",
"type": M2TYPE.AUTH,
"port": PORT.RANDOM,
"p2p_port": PORT.RANDOM,
"config": M2CONFIG["core"],
},
{
"name": "chan",
"type": M2TYPE.CHANFOLDER,
"sub": (
{
"name": "ch1",
"type": M2TYPE.CHANNEL,
"chan": 1,
"sub": COMMONCHAN,
},
{
"name": "ch2",
"type": M2TYPE.CHANNEL,
"chan": 2,
"sub": COMMONCHAN,
},
# {
# "name": "ch3",
# "type": M2TYPE.CHANNEL,
# "chan": 3,
# "sub": COMMONCHAN,
# },
# {
# "name": "ch4p",
# "type": M2TYPE.CHANNEL,
# "chan": 4,
# "sub": PREMIUMCHAN,
# },
{
"name": "ch99",
"type": M2TYPE.CHANNEL,
"chan": 99,
"sub": CHAN99,
},
)
}
)
},
)
CustIpfwList="""#!/bin/sh
IPF="ipfw -q add"
ipfw -q -f flush
#loopback
$IPF 10 allow all from any to any via lo0
$IPF 20 deny all from any to 127.0.0.0/8
$IPF 30 deny all from 127.0.0.0/8 to any
$IPF 40 deny tcp from any to any frag
# stateful
$IPF 50 check-state
$IPF 60 allow tcp from any to any established
$IPF 70 allow all from any to any out keep-state
$IPF 80 allow icmp from any to any
# open port ftp (20, 21), ssh (22), mail (25)
# http (80), https (443), dns (53), mysql (3306)
default_udp_yes_ports='53'
default_tcp_yes_ports='22 53 3306'
default_tcp_no_ports=''
# here auth PORTs for "NORM"/"..." thing
metin2_udp_yes_ports='%s'
# here PORTs
metin2_tcp_yes_ports='%s'
# here DB_PORTs and P2P_PORTs
metin2_tcp_no_ports='%s'
# merge lists
udp_yes_ports="$default_udp_yes_ports $metin2_udp_yes_ports"
tcp_yes_ports="$default_tcp_yes_ports $metin2_tcp_yes_ports"
tcp_nop_ports="$default_tcp_no_ports $metin2_tcp_no_ports"
# white ip list
white_sites=''
# block tcp/udp ports
for val in $tcp_nop_ports; do
$IPF 2220 allow all from 127.0.0.0/8 to any $val
for whitez in $white_sites; do
$IPF 2210 allow tcp from $whitez to any $val in
$IPF 2210 allow tcp from 127.0.0.0/8 to $whitez $val out
done
$IPF 2230 deny all from any to me $val
done
# unblock tcp ports
for val in $tcp_yes_ports; do
$IPF 2200 allow tcp from any to any $val in limit src-addr 20
$IPF 2210 allow tcp from any to any $val out
done
# unblock udp ports
for val in $udp_yes_ports; do
$IPF 2200 allow udp from any to any $val in limit src-addr 20
$IPF 2210 allow udp from any to any $val out
done
"""
yeni bir item veya yeni bir mob ekleyemiyorum yada değişklik yapamıyorum ve special_item_group.txt dosyasına yeni bir ekleme yapılmıyor bu konuda bana yardımcı olacak biri varmı acaba
admin panelinden 666 genarete yaptıktan sonra item_names.txt item_proto.txt mob_names.txt mob_proto.txt geliyor ama sysr den böyle bir hata ile karşılaşıyorum
SYSERR: Jun 17 00:22:01 :: socket_connect: HOST 127.0.0.1:30000, could not connect.
Son düzenleme: