Marty-v58/serverfiles/main/gen_settings.py
2024-10-25 00:31:08 -05:00

367 lines
10 KiB
Python

#### @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
DISABLE_TEST_MODE_IN_CH1 = False
if v_system=="FreeBSD":
v_adminPageLocalIP=fShell("ifconfig em0 | grep -Eo 'inet ([0-9]{1,3}\.){3}([0-9]{1,3})' | awk '{print $2}'", True).decode()
elif v_system=="Linux":
v_adminPageLocalIP=fShell("ifconfig eth0 | grep -Eo 'inet addr:([0-9]{1,3}\.){3}([0-9]{1,3})' | awk -F':' '{print $2}'", True).decode()
elif v_system=="Windows":
v_adminPageLocalIP="127.0.0.1"
v_adminPagePassword='58948HG83H4G8H84G' #adminpage_password
v_serverHostname='127.0.0.1' #host for sql connections
v_serverUserPass='mt2 mt2' #user&pwd for sql connections
v_serverData=f"{v_serverHostname} {v_serverUserPass}" #host, user and pwd for db sql connections
v_bindHostname='10.0.2.15' #your IP
v_proxyHostname='127.0.0.1' #your IP
v_dbHostname='127.0.0.1'#default hostname for db
v_dbPort=30000 #default port for db (the others will be automatically calculated)
v_mysqlport=3306 #default mysql port (3306 or 0)
v_logFolder='logs' #name of the all_log path
v_chanFolder='chan/' #name of the channel path
v_chanPath='../' #workaround that should be equivalent to $v_charS paths per ../
#############################
## to specify custom ports:
# 1) be sure the key matches "{ServerName}-{FolderName}-{ProcessName}"
# 2) and check if they are still commented
# 3) if you're under NAT, be sure to portforward the new ports
M2PORTS = {
# "srv1-db":(15000), #db port
# "srv1-auth1":(11000,12000), #port,p2p_port
# "srv1-auth2":(11001,12001), #port,p2p_port
# "srv1-ch1-core1":(13101,14101),
# "srv1-ch1-core2":(13102,14102),
# "srv1-ch1-core3":(13103,14103),
# "srv1-ch1-core4":(13104,14104),
# "srv1-ch2-core1":(13201,14201),
# "srv1-ch2-core2":(13202,14202),
# "srv1-ch2-core3":(13203,14203),
# "srv1-ch2-core4":(13204,14204),
# "srv1-ch3-core1":(13301,14301),
# "srv1-ch3-core2":(13302,14302),
# "srv1-ch3-core3":(13303,14303),
# "srv1-ch3-core4":(13304,14304),
# "srv1-ch4-core1":(13401,14401),
# "srv1-ch4-core2":(13402,14402),
# "srv1-ch4-core3":(13403,14403),
# "srv1-ch4-core4":(13404,14404),
# "srv1-ch99-core99":(13099,14099),
}
M2SD = {
"account": "srv1_account",
"common": "srv1_common",
"hotbackup": "srv1_hotbackup",
"log": "srv1_log",
"player": "srv1_player",
}
class M2TYPE:
SERVER, DB, AUTH, CHANFOLDER, CHANNEL, CORE = range(6)
NOCHAN = 0
class PORT:
RANDOMI = v_dbPort # a random port will start from such value
PORT, P2P_PORT, DB_PORT, BIND_PORT = range(4)
lPORT = ("PORT", "P2P_PORT", "DB_PORT", "BIND_PORT")
M2CONFIG = {
"db": {
"general": (
('SQL_ACCOUNT = "{} {} {} {}"', (v_serverHostname, M2SD["account"], v_serverUserPass, v_mysqlport)),
('SQL_COMMON = "{} {} {} {}"', (v_serverHostname, M2SD["common"], v_serverUserPass, v_mysqlport)),
('SQL_PLAYER = "{} {} {} {}"', (v_serverHostname, M2SD["player"], v_serverUserPass, v_mysqlport)),
('SQL_HOTBACKUP = "{} {} {} {}"', (v_serverHostname, M2SD["hotbackup"], v_serverUserPass, v_mysqlport)),
('SQL_LOG = "{} {} {} {}"', (v_serverHostname, M2SD["log"], v_serverUserPass, v_mysqlport)),
#
('TABLE_POSTFIX = "{}"', ""),
#
# ("BIND_PORT = {}", v_dbPort),
# ("DB_SLEEP_MSEC = 10", ()),
("CLIENT_HEART_FPS = {}", 25),
# ("HASH_PLAYER_LIFE_SEC = {}", 600),
("PLAYER_ID_START = {}", 100),
("PLAYER_DELETE_LEVEL_LIMIT = {}", 70),
# ("PLAYER_DELETE_LEVEL_LIMIT_LOWER = {}", 15),
("ITEM_ID_RANGE = {} {} ", (100000000, 200000000)),
# ("BACKUP_LIMIT_SEC = {}", 3600),
("DISABLE_HOTBACKUP = {:d}", True),
("LOCALE = {}", "latin1"),
),
"extra": (
("PROTO_FROM_DB = {:d}", False),
("MIRROR2DB = {:d}", False),
)
},
"core": {
M2TYPE.AUTH: (
("AUTH_SERVER: {}", "master"),
("PLAYER_SQL: {} {} {}", (v_serverData, M2SD["account"], v_mysqlport)),
),
M2TYPE.CORE: (
("PLAYER_SQL: {} {} {}", (v_serverData, M2SD["player"], v_mysqlport)),
),
"general": (
# ("TABLE_POSTFIX: {}", ""),
# ("ITEM_ID_RANGE: {} {}", (5000001, 10000000)),
("VIEW_RANGE: {}", 10000),
("PASSES_PER_SEC: {}", 25),
("SAVE_EVENT_SECOND_CYCLE: {}", 180),
("PING_EVENT_SECOND_CYCLE: {}", 180),
#
("BIND_IP: {}", v_bindHostname),#VPS NAT
("PROXY_IP: {}", v_proxyHostname),#VPS NAT
("DB_ADDR: {}", v_dbHostname),
("COMMON_SQL: {} {} {}", (v_serverData, M2SD["common"], v_mysqlport)),
("LOG_SQL: {} {} {}", (v_serverData, M2SD["log"], v_mysqlport)),
("TEST_SERVER: {:d}", True),#TEST ONLY
# ("PK_SERVER: {:d}", True),
("ADMINPAGE_IP1: {}", v_adminPageLocalIP),
("ADMINPAGE_PASSWORD: {}", v_adminPagePassword),
("MAX_LEVEL: {}", 120),
),
"extra": (
# ("CHECK_VERSION_SERVER: {:d}", True),
# ("CHECK_VERSION_VALUE: {}", 1215955205),
("CHANGE_ATTR_TIME_LIMIT: {:d}", False),
("EMOTION_MASK_REQUIRE: {:d}", False),
("PRISM_ITEM_REQUIRE: {:d}", False),
("SHOP_PRICE_3X_TAX: {:d}", False),
("GLOBAL_SHOUT: {:d}", True),
("ITEM_COUNT_LIMIT: {}", 250),
("STATUS_POINT_GET_LEVEL_LIMIT: {}", 120),
("STATUS_POINT_SET_MAX_VALUE: {}", 90),
("SHOUT_LIMIT_LEVEL: {}", 15),
("DB_LOG_LEVEL: {}", 1),
("EMPIRE_LANGUAGE_CHECK: {:d}", False),
# ("ITEM_DESTROY_TIME_AUTOGIVE: {}", 30),
# ("ITEM_DESTROY_TIME_DROPITEM: {}", 30),
# ("ITEM_DESTROY_TIME_DROPGOLD: {}", 30),
),
},
}
COMMONCHAN=(
{
"name": "core1",
"type": M2TYPE.CORE,
"config": M2CONFIG["core"],
"maps": "1 21 41 3 23 43 4 24 44 5 25 45 108 109 112 301 302 303 304",
},
{
"name": "core2",
"type": M2TYPE.CORE,
"config": M2CONFIG["core"],
"maps": "61 62 63 64 65 66 67 68 69 70 71 72 73 104 193 206 208 207 216 217 351",
},
)
CHAN99=(
{
"name": "core99",
"type": M2TYPE.CORE,
"config": M2CONFIG["core"],
"maps": "81 103 105 110 111 113 114 118 119 120 121 122 123 124 125 126 127 128 181 182 183 200",
},
)
M2S=(
{
"name": "srv1",
"type": M2TYPE.SERVER,
"isextra": True,
"sub": (
{
"name": "db",
"type": M2TYPE.DB,
"config": M2CONFIG["db"],
},
{
"name": "auth1",
"type": M2TYPE.AUTH,
"config": M2CONFIG["core"],
},
# {
# "name": "auth2",
# "type": M2TYPE.AUTH,
# "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": "ch4",
# "type": M2TYPE.CHANNEL,
# "chan": 4,
# "sub": COMMONCHAN,
# },
{
"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_allowed_ports='53'
default_tcp_allowed_ports='22 53 3306'
default_tcp_blocked_ports=''
# here auth PORTs for "NORM"/"..." thing
metin2_udp_allowed_ports='{udp_allowed_ports}'
# here PORTs
metin2_tcp_allowed_ports='{tcp_allowed_ports}'
# here DB_PORTs and P2P_PORTs
metin2_tcp_blocked_ports='{tcp_blocked_ports}'
# merge lists
udp_allowed_ports="$default_udp_allowed_ports $metin2_udp_allowed_ports"
tcp_allowed_ports="$default_tcp_allowed_ports $metin2_tcp_allowed_ports"
tcp_blocked_ports="$default_tcp_blocked_ports $metin2_tcp_blocked_ports"
# white ip list
white_sites=''
# block tcp/udp ports
for val in $tcp_blocked_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_allowed_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_allowed_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
"""
CustServerInfo="""
import app
import localeInfo
from constInfo import TextColor
app.ServerName = None
ENABLE_RANDOM_AUTH_NO_LIB = True
if ENABLE_RANDOM_AUTH_NO_LIB:
from time import time as time_time
def get_random_number(upper_limit):
_timestamp = time_time()
_timestamp = int(_timestamp*1000000)
return _timestamp % upper_limit
def get_item_from_list(_list):
choice = get_random_number(len(_list))
assert choice < len(_list), "Index should be less than length of list"
return _list[choice]
else:
from random import choice as random_choice
def get_item_from_list(_list):
return random_choice(_list)
SRV1 = {{
"name":TextColor("ServerName", "ffd500"), #GOLD
"host":"{hostname}",
{portlist}
"authlist": [ {authlist} ],
}}
STATE_NONE = TextColor(localeInfo.CHANNEL_STATUS_OFFLINE, "FF0000") #RED
STATE_DICT = {{
0: TextColor(localeInfo.CHANNEL_STATUS_OFFLINE, "FF0000"), #RED
1: TextColor(localeInfo.CHANNEL_STATUS_RECOMMENDED, "00ff00"), #GREEN
2: TextColor(localeInfo.CHANNEL_STATUS_BUSY, "ffff00"), #YELLOW
3: TextColor(localeInfo.CHANNEL_STATUS_FULL, "ff8a08") #ORANGE
}}
SERVER1_CHANNEL_DICT = {{
{channel_dict}
}}
REGION_NAME_DICT = {{
0: SRV1["name"],
}}
REGION_AUTH_SERVER_DICT = {{
0: {{
{auth_dict}
}}
}}
REGION_DICT = {{
0: {{
1: {{"name": SRV1["name"], "channel": SERVER1_CHANNEL_DICT,}},
}},
}}
MARKADDR_DICT = {{
10: {{"ip": SRV1["host"], "tcp_port": SRV1["ch1"], "mark": "10.tga", "symbol_path": "10",}},
}}
TESTADDR = {{"ip": SRV1["host"], "tcp_port": SRV1["ch1"], "udp_port": SRV1["ch1"],}}
"""