Skip to content

Commit

Permalink
init
Browse files Browse the repository at this point in the history
  • Loading branch information
Pisex committed Jan 6, 2024
0 parents commit 5fc1f87
Show file tree
Hide file tree
Showing 40 changed files with 5,030 additions and 0 deletions.
533 changes: 533 additions & 0 deletions AMBuildScript

Large diffs are not rendered by default.

42 changes: 42 additions & 0 deletions AMBuilder
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
import os

# Here only one sdk should be available to generate only one executable in the end,
# as multi-sdk loading isn't supported out of the box by metamod, and would require specifying the full path in the vdf
# which in the end would ruin the multi-platform (unix, win etc) loading by metamod as it won't be able to append platform specific extension
# so just fall back to the single binary.
# Multi-sdk solutions should be manually loaded with a custom plugin loader (examples being sourcemod, stripper:source)
for sdk_name in MMSPlugin.sdks:
for cxx in MMSPlugin.all_targets:
sdk = MMSPlugin.sdks[sdk_name]

if not cxx.target.arch in sdk.platformSpec[cxx.target.platform]:
continue

binary = MMSPlugin.HL2Library(builder, cxx, MMSPlugin.plugin_name, sdk)

binary.compiler.cxxincludes += [
os.path.join(builder.sourcePath, 'include'),
]

binary.sources += [
'levels_ranks.cpp',
os.path.join('sdk', 'schemasystem.cpp'),
os.path.join('sdk', 'module.cpp'),
os.path.join('sdk', 'memaddr.cpp')
]

if sdk_name in ['dota', 'cs2']:
binary.sources += [
os.path.join(sdk.path, 'tier1', 'convar.cpp'),
os.path.join(sdk.path, 'tier1', 'generichash.cpp'),
os.path.join(sdk.path, 'entity2', 'entitysystem.cpp'),
os.path.join(sdk.path, 'public', 'tier0', 'memoverride.cpp')
]

if cxx.target.arch == 'x86':
binary.sources += ['sourcehook/sourcehook_hookmangen.cpp']
nodes = builder.Add(binary)
MMSPlugin.binaries += [nodes]

break
37 changes: 37 additions & 0 deletions PackageScript
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# vim: set ts=2 sw=2 tw=99 noet ft=python:
import os

builder.SetBuildFolder('package')

metamod_folder = builder.AddFolder(os.path.join('addons', 'metamod'))
bin_folder_path = os.path.join('addons', MMSPlugin.plugin_name)
bin_folder = builder.AddFolder(bin_folder_path)

for cxx in MMSPlugin.all_targets:
if cxx.target.arch == 'x86_64':
bin64_folder_path = os.path.join('addons', MMSPlugin.plugin_name)
bin64_folder = builder.AddFolder(bin64_folder_path)

pdb_list = []
for task in MMSPlugin.binaries:
# This hardly assumes there's only 1 targetted platform and would be overwritten
# with whatever comes last if multiple are used!
with open(os.path.join(builder.buildPath, MMSPlugin.plugin_name + '.vdf'), 'w') as fp:
fp.write('"Metamod Plugin"\n')
fp.write('{\n')
fp.write(f'\t"alias"\t"{MMSPlugin.plugin_alias}"\n')
if task.target.arch == 'x86_64':
fp.write(f'\t"file"\t"{os.path.join(bin64_folder_path, MMSPlugin.plugin_name)}"\n')
else:
fp.write(f'\t"file"\t"{os.path.join(bin_folder_path, MMSPlugin.plugin_name)}"\n')
fp.write('}\n')

if task.target.arch == 'x86_64':
builder.AddCopy(task.binary, bin64_folder)
else:
builder.AddCopy(task.binary, bin_folder)

if task.debug:
pdb_list.append(task.debug)

builder.AddCopy(os.path.join(builder.buildPath, MMSPlugin.plugin_name + '.vdf'), metamod_folder)
164 changes: 164 additions & 0 deletions configs/settings.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
"LR_Settings"
{
"MainSettings"
{
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// (***) Наименование таблицы в базе данных (только латиница и не больше 32 символов).
// Если вы имеете несколько серверов в проекте, но хотите, чтобы у каждого сервера была собственная статистика, то меняйте название таблицы на любое другое.
// Необходим для тех случаев, когда вы храните разные статистики на одной базе данных.
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
"lr_table" "lvl_base"

//////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Какой Заголовок у меню плагина должен быть, предназначено для более продвинутых проектов
// которые любят кастомизировать свои сервера.
//
// ВНИМАНИЕ: все префиксы в чате (Пример: [LR]), вы также можете поменять в файле перевода.
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
"lr_plugin_title" "Levels Ranks"

// Минимальное количество игроков, необходимое для выдачи очков опыта.
// Количество игроков проверяется при старте раунда.
"lr_minplayers_count" "4"

// Включить возможность игрокам сбросить свою статистику в меню "Статистика"? [ 0 - нет, 1 - да ].
"lr_show_resetmystats" "1"

//////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Как показывать сообщения игроку о получении очков опыта?
//
// 0 - не показывать
// 1 - показывать за каждое действие игрока
// 2 - показывать в конце раунда суммарное изменение
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
"lr_show_usualmessage" "1"

// Количество выводимых игроков при вводе команды !top и !toptime
"lr_top_count" "5"

// Показывать ли сообщения от плагина, при каждом возрождении? [ 0 - нет, 1 - да ]
"lr_show_spawnmessage" "1"

// Показывать ли сообщения всем о том, что кто-то поднял свое звание? [ 0 - нет, 1 - да ]
"lr_show_levelup_message" "1"

// Показывать ли сообщения всем о том, что кто-то потерял свое звание? [ 0 - нет, 1 - да ]
"lr_show_leveldown_message" "1"

// Показывать ли всем сообщение о том, какое место занимает игрок, после того, как он написал команду rank? [ 0 - нет, 1 - да ]
"lr_show_rankmessage" "1"

// Показывать ли в меню статистики пункт "Все звания"? [ 0 - нет, 1 - да ]
"lr_show_ranklist" "1"

// Разрешить ли игрокам получать/терять очки опыта, когда раунд завершился? [ 0 - нет, 1 - да ]
"lr_giveexp_roundend" "1"

// Выдавать ли игрокам очки опыта во время разминки? [ 0 - да, 1 - нет ]
"lr_block_warmup" "1"

// Считать ли убийство товарищей по команде за TeamKill? [ 0 - да, 1 - нет (нужно для серверов с режимом "Все против Всех") ]
"lr_allagainst_all" "0"

// Сколько игрок должен отсутствовать дней, чтобы его скрыло из статистики?
// Если вы хотите отключить автоматическое скрытие, поставьте значение 0.
"lr_cleandb_days" "30"

//////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Как сохранять данные игрока?
//
// 0 - только при выходе из сервера
// Рекомендется для снижения нагрузки на WEB-хостинг при большом арсенале игровых серверов или игровых событий
//
// 1 - при выходе из сервера, при повышении/понижении ранга, в конце раунда если живой или при смерти
// Рекомендется для получения актуальных данных
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
"lr_db_savedataplayer_mode" "1"

// (***) Записывать ли в MySQL базу 4-ёх байтные символы (применение кодировки utf8mb4) из никнеймов игроков? [ 0 - будет использоваться utf8, 1 - да ]
// Некоторые WEB-хостинги не предоставляют поддержку кодировки utf8mb4 для MySQL баз или имеют с ней проблемы.
"lr_db_allow_utf8mb4" "1"

// (***) Тип кодировки в таблице.
// 0 - utf8(mb4)_general_ci .
// 1 - utf8(mb4)_unicode_ci (Рекомендуется для MySQL 8.0+).
"lr_db_character_type" "0"



// SOON...
// Какие флаги должен иметь администратор, чтобы иметь доступ к Панели Администратора?
// "lr_flag_adminmenu" "z"
// Сколько секунд должно пройти, чтобы можно было повторно сбросить свою статистику?
// "lr_resetmystats_cooldown" "86400"
// Скрывать ли игрока в статистике, если он был забанен? [ 0 - нет, 1 - да ]
// "lr_cleandb_banclient" "1"
}
"Ranks"
{
"rank_1" "0" //НЕ ТРОГАТЬ!
"rank_2" "10" // сколько очков опыта требуется для достижения ранга
"rank_3" "25"
"rank_4" "50"
"rank_5" "75"
"rank_6" "100"
"rank_7" "150"
"rank_8" "200"
"rank_9" "300"
"rank_10" "500"
"rank_11" "750"
"rank_12" "1000"
"rank_13" "1500"
"rank_14" "2000"
"rank_15" "3000"
"rank_16" "5000"
"rank_17" "7500"
"rank_18" "10000"
}
"Points"
{
// Для отключения выдачи очков опыта за конкретное действие, напишите 0 в нужном вам параметре
// Сколько очков опыта игрок:
"lr_kill" "5" // получит за убийство
"lr_kill_is_bot" "5" // получит за убийство бота
"lr_death" "5" // потеряет за свою смерть
"lr_death_is_bot" "5" // потеряет за свою смерть от бота
"lr_headshot" "1" // получит за убийств в голову
"lr_assist" "1" // получит за помощь в убийстве
"lr_suicide" "6" // потеряет за суицид
"lr_teamkill" "6" // потеряет за убийство товарища по команде
"lr_winround" "2" // получит за победу в раунде
"lr_loseround" "2" // потеряет за проигрыш в раунде
"lr_mvpround" "3" // получит за лучшую результативность в раунде (MVP)
"lr_bombplanted" "2" // получит за установку бомбы
"lr_bombdefused" "2" // получит за разминирование бомбы
"lr_bombdropped" "1" // потеряет за потерю бомбы
"lr_bombpickup" "1" // получит за поднятие бомбы
"lr_hostagekilled" "4" // потеряет за убийство заложника
"lr_hostagerescued" "3" // получит за спасение заложника
}
"Points_Bonuses"
{
// Для отключения выдачи очков опыта за конкретное действие, напишите в кавычках 0

"lr_bonus_1" "2" // DoubleKill
"lr_bonus_2" "3" // TripleKill
"lr_bonus_3" "4" // Domination
"lr_bonus_4" "5" // Rampage
"lr_bonus_5" "6" // MegaKill
"lr_bonus_6" "7" // Ownage
"lr_bonus_7" "8" // UltraKill
"lr_bonus_8" "9" // KillingSpree
"lr_bonus_9" "10" // MonsterKill
"lr_bonus_10" "11" // Unstoppable
"lr_bonus_11" "12" // GodLike
}
}
39 changes: 39 additions & 0 deletions configure.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# vim: set sts=2 ts=8 sw=2 tw=99 et:
import sys
try:
from ambuild2 import run, util
except:
try:
import ambuild
sys.stderr.write('It looks like you have AMBuild 1 installed, but this project uses AMBuild 2.\n')
sys.stderr.write('Upgrade to the latest version of AMBuild to continue.\n')
except:
sys.stderr.write('AMBuild must be installed to build this project.\n')
sys.stderr.write('http://www.alliedmods.net/ambuild\n')
sys.exit(1)

# Hack to show a decent upgrade message, which wasn't done until 2.2.
ambuild_version = getattr(run, 'CURRENT_API', '2.1')
if ambuild_version.startswith('2.1'):
sys.stderr.write("AMBuild 2.2 or higher is required; please update\n")
sys.exit(1)

parser = run.BuildParser(sourcePath=sys.path[0], api='2.2')
parser.options.add_argument('-n', '--plugin-name', type=str, dest='plugin_name', default=None,
help='Plugin name')
parser.options.add_argument('-a', '--plugin-alias', type=str, dest='plugin_alias', default=None,
help='Plugin alias')
parser.options.add_argument('--hl2sdk-root', type=str, dest='hl2sdk_root', default=None,
help='Root search folder for HL2SDKs')
parser.options.add_argument('--mms_path', type=str, dest='mms_path', default=None,
help='Metamod:Source source tree folder')
parser.options.add_argument('--enable-debug', action='store_const', const='1', dest='debug',
help='Enable debugging symbols')
parser.options.add_argument('--enable-optimize', action='store_const', const='1', dest='opt',
help='Enable optimization')
parser.options.add_argument('-s', '--sdks', default='all', dest='sdks',
help='Build against specified SDKs; valid args are "all", "present", or '
'comma-delimited list of engine names (default: "all")')
parser.options.add_argument('--targets', type=str, dest='targets', default=None,
help="Override the target architecture (use commas to separate multiple targets).")
parser.Configure()
Loading

0 comments on commit 5fc1f87

Please sign in to comment.