Include other stuff from Forge server repo, same rev

feature/prepare-cross-merge
kaetemi 4 years ago
parent a3a074f455
commit cca82baa89
No known key found for this signature in database
GPG Key ID: 9873C4D40BB479BC

@ -0,0 +1,52 @@
#!/usr/bin/python3
# ______ _____ _ _ _____ _
# | ___ \ / ___| | | | |_ _| | |
# | |_/ / _ _______ _ __ ___ \ `--.| |__ __ _ _ __ __| | | | ___ ___ | |___
# | / | | |_ / _ \| '_ ` _ \ `--. \ '_ \ / _` | '__/ _` | | |/ _ \ / _ \| / __|
# | |\ \ |_| |/ / (_) | | | | | | /\__/ / | | | (_| | | | (_| | | | (_) | (_) | \__ \
# \_| \_\__, /___\___/|_| |_| |_| \____/|_| |_|\__,_|_| \__,_| \_/\___/ \___/|_|___/
# __/ |
# |___/
#
# Ryzom - MMORPG Framework <https://ryzom.com/dev/>
# Copyright (C) 2019 Winch Gate Property Limited
# This program is free software: read https://ryzom.com/dev/copying.html for more details
#
# This script is a helper to generate the configurations files of a ryzom shard
# just reading fields in a globals.cfg file and replacing it in all final cfgs files
#
# Usage are ./create_cfgs.py SHARD_PATH
#
import os, sys
dstpath = sys.argv[1]
dir_path = os.path.dirname(os.path.realpath(__file__))
templatepath = dir_path+"/templates/"
finalpath = dstpath+"/cfgs/"
enc = "iso-8859-1"
with open(dstpath+"/globals.cfg", 'r', encoding=enc) as fd:
if fd:
lines = fd.read().split("\n")
tmp = []
for n in lines:
if n:
line = n.split(" = ")
if line:
tmp.append(line)
for f in os.listdir(templatepath):
with open(templatepath+f, 'r', encoding=enc) as content:
if content:
content = content.read()
for k, v in tmp:
content = content.replace(k, v)
with open(finalpath+f, 'w') as fd:
fd.write(content)
print(f)

@ -0,0 +1,168 @@
// Use with commandline: ryzom_admin_service -A. -C. -L. --nobreak --fulladminname=admin_executor_service --shortadminname=AES
#include "admin_executor_service_default.cfg"
// ---- config local variables
// Address of the admin service (default port is 49996)
ASHost = "localhost";
ASPort="46701";
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "aes";
StartCommands=
{
// Create a gateway module
"moduleManager.createModule StandardGateway gw",
// add a layer 5 transport
"gw.transportAdd L5Transport l5",
// open the transport
"gw.transportCmd l5(open)",
/// Create default connection with admin executor service
// Create a gateway module
"moduleManager.createModule StandardGateway gw_aes",
// create the admin executor service module
"moduleManager.createModule AdminExecutorServiceClient aes_client",
"aes_client.plug gw_aes",
// create a layer 3 client to connect to aes gateway
"gw_aes.transportAdd L3Client aes_l3c",
"gw_aes.transportCmd aes_l3c(connect addr="+AESHost+":"+AESPort+")",
// create the admin executor service module
"moduleManager.createModule AdminExecutorService aes",
// create a gateway to connect to as
"moduleManager.createModule StandardGateway asc_gw",
// create a layer 3 client
"asc_gw.transportAdd L3Client l3c",
"asc_gw.transportCmd l3c(connect addr="+ASHost+":"+ASPort+")",
// create a gateway for services to connect
"moduleManager.createModule StandardGateway aes_gw",
// create a layer 3 server
"aes_gw.transportAdd L3Server l3s",
"aes_gw.transportOptions l3s(PeerInvisible)",
"aes_gw.transportCmd l3s(open port="+AESPort+")",
// plug the as
"aes.plug asc_gw",
"aes.plug aes_gw",
};
StartCommands +=
{
"aes.addRegisteredService bms_master #SHARDNAME#",
// "aes.addRegisteredService bms_pd_master #SHARDNAME#",
"aes.addRegisteredService egs #SHARDNAME#",
"aes.addRegisteredService gpms #SHARDNAME#",
"aes.addRegisteredService ios #SHARDNAME#",
"aes.addRegisteredService rns #SHARDNAME#",
"aes.addRegisteredService rws #SHARDNAME#",
"aes.addRegisteredService ts #SHARDNAME#",
"aes.addRegisteredService ms #SHARDNAME#",
"aes.addRegisteredService ais_newbieland #SHARDNAME#",
"aes.addRegisteredService ais_fyros #SHARDNAME#",
"aes.addRegisteredService ais_roots #SHARDNAME#",
"aes.addRegisteredService ais_matis #SHARDNAME#",
"aes.addRegisteredService ais_tryker #SHARDNAME#",
"aes.addRegisteredService ais_zorai #SHARDNAME#",
"aes.addRegisteredService ais_ark #SHARDNAME#",
"aes.addRegisteredService mfs #SHARDNAME#",
"aes.addRegisteredService su #SHARDNAME#",
"aes.addRegisteredService fes #SHARDNAME#",
"aes.addRegisteredService sbs #SHARDNAME#",
"aes.addRegisteredService lgs #SHARDNAME#",
// "aes.addRegisteredService mos #SHARDNAME#",
// "aes.addRegisteredService pdss #SHARDNAME#",
"aes.addRegisteredService ras #SHARDNAME#",
"aes.addRegisteredService aes #SHARDNAME#",
};
bms_master = { "./", "/home/nevrax/dev/live/service_backup_service/backup_service", "-C. -L. --nobreak --writepid -P49990" };
bms_pd_master = { "./", "/home/nevrax/dev/live/service_backup_service/backup_service", "-C. -L. --nobreak --writepid -P49992" };
egs = { "./", "/home/nevrax/dev/live/service_entities_game_service/entities_game_service", "-C. -L. --nobreak --writepid" };
gpms = { "/home/nevrax/dev/gpms", "/home/nevrax/dev/live/service_gpm_service/gpm_service", "-C. -L. --nobreak --writepid" };
ios = { "/home/nevrax/dev/ios", "/home/nevrax/dev/live/service_input_output_service/input_output_service", "-C. -L. --nobreak --writepid" };
rns = { "/home/nevrax/dev/rns", "/home/nevrax/dev/live/service_ryzom_naming_service/ryzom_naming_service", "-C. -L. --nobreak --writepid" };
rws = { "/home/nevrax/dev/rws", "/home/nevrax/dev/live/service_ryzom_welcome_service/ryzom_welcome_service", "-C. -L. --nobreak --writepid" };
ts = { "/home/nevrax/dev/ts", "/home/nevrax/dev/live/service_tick_service/tick_service", "-C. -L. --nobreak --writepid" };
ms = { "/home/nevrax/dev/ms", "/home/nevrax/dev/live/service_mirror_service/mirror_service", "-C. -L. --nobreak --writepid" };
ais_newbieland = { "/home/nevrax/dev/ais_newbyland", "/home/nevrax/dev/live/service_ai_service/ai_service", "-C. -L. --nobreak --writepid -mCommon:Newbieland:Post" };
ais_fyros = { "/home/nevrax/dev/ais_newbyland", "/home/nevrax/dev/live/service_ai_service/ai_service", "-C. -L. --nobreak --writepid -mCommon:Newbieland:Post" };
ais_roots = { "/home/nevrax/dev/ais_newbyland", "/home/nevrax/dev/live/service_ai_service/ai_service", "-C. -L. --nobreak --writepid -mCommon:Newbieland:Post" };
ais_matis = { "/home/nevrax/dev/ais_newbyland", "/home/nevrax/dev/live/service_ai_service/ai_service", "-C. -L. --nobreak --writepid -mCommon:Newbieland:Post" };
ais_tryker = { "/home/nevrax/dev/ais_newbyland", "/home/nevrax/dev/live/service_ai_service/ai_service", "-C. -L. --nobreak --writepid -mCommon:Newbieland:Post" };
ais_zorai = { "/home/nevrax/dev/ais_newbyland", "/home/nevrax/dev/live/service_ai_service/ai_service", "-C. -L. --nobreak --writepid -mCommon:Newbieland:Post" };
ais_ark = { "/home/nevrax/dev/ais_newbyland", "/home/nevrax/dev/live/service_ai_service/ai_service", "-C. -L. --nobreak --writepid -mCommon:Newbieland:Post" };
mfs = { "/home/nevrax/dev/mfs", "/home/nevrax/dev/live/service_mail_forum_service/mail_forum_service", "-C. -L. --nobreak --writepid" };
su = { "/home/nevrax/dev/su", "/home/nevrax/dev/live/service_shard_unifier_service/shard_unifier_service", "-C. -L. --nobreak --writepid" };
fes = { "/home/nevrax/dev/fes", "/home/nevrax/dev/live/service_frontend_service/frontend_service", "-C. -L. --nobreak --writepid" };
sbs = { "/home/nevrax/dev/sbs", "/home/nevrax/dev/live/service_session_browser_server/session_browser_server", "-C. -L. --nobreak --writepid" };
lgs = { "/home/nevrax/dev/lgs", "/home/nevrax/dev/live/service_logger_service/logger_service", "-C. -L. --nobreak --writepid" };
mos = { "/home/nevrax/dev/mos", "/home/nevrax/dev/live/service_monitor_service/monitor_service", "-C. -L. --nobreak --writepid" };
pdss = { "/home/nevrax/dev/pdss", "/home/nevrax/dev/live/service_pd_support_service/pd_support_service", "-C. -L. --nobreak --writepid" };
ras = { "./", "src/ryzom_admin_service/ryzom_admin_service", "--fulladminname=admin_service --shortadminname=AS -C. -L. --nobreak --writepid" };
RegisteredServices=
{
"bms_master",
"bms_pd_master",
"egs",
"gpms",
"ios",
"rns",
"rws",
"ts",
"ms",
"ais_newbieland",
"ais_fyros",
"ais_roots",
"ais_matis",
"ais_tryker",
"ais_zorai",
"ais_ark",
"mfs",
"su",
"fes",
"sbs",
"lgs",
"mos",
"pdss",
"ras",
};
//
DontUseStdIn = 0;
// ---- service NeL variables (used by CVariable class)
// If the update loop is too slow, a thread will produce an assertion.
// By default, the value is set to 10 minutes.
// Set to 0 for no assertion.
UpdateAssertionThreadTimeout = 0;
// ---- service custom variables (used by ConfigFile class)
// ---- service custom variables (used by CVariable class)
// in second, -1 for not restarting
RestartDelay = 60;
// how many second before aborting the request if not finished
RequestTimeout = 5;
// log path for advanced log report
LogPath = "/.";
// setup for deployment environment with exeternal configuration system responsible for launching apps and
// for configuring AES services
DontLaunchServicesDirectly = 1;
UseExplicitAESRegistration = 1;
KillServicesOnDisconnect = 1;
ShardName="#SHARDNAME#";

@ -0,0 +1,7 @@
#include "common.cfg"
// I'm the AES, I'll not connect to myself!
DontUseAES = 1;
// I don't need a connection to a naming service
DontUseNS = 1;

@ -0,0 +1,22 @@
// Use with commandline: ryzom_admin_service --fulladminname=ryzom_admin_service --shortadminname=AS -C. -L. --nobreak --writepid
// ---- config local variables
ASWebPort="46700";
ASPort="46701";
#include "admin_service_default.cfg"
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "ras";
Paths += {
".",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// ---- service custom variables (used by CVariable class)

@ -0,0 +1,27 @@
#include "common.cfg"
DontUseNS = 1;
RRDToolPath = "rrdtool";
RRDVarPath = "../save/rrd_graphs";
// Variables required to be defined by other cfgs
//AESHost="localhost";
//ASWebPort="46700";
//ASPort="46701";
StartCommands +=
{
// create the admin service module and open the web interface
"moduleManager.createModule AdminService as webPort="+ASWebPort,
// create a gateway for aes to connect
"moduleManager.createModule StandardGateway as_gw",
// create a layer 3 server
"as_gw.transportAdd L3Server l3s",
"as_gw.transportOptions l3s(PeerInvisible)",
"as_gw.transportCmd l3s(open port="+ASPort+")",
// plug the as
"as.plug as_gw",
};

@ -0,0 +1,128 @@
//14.11.02
//this is the latest version of the ags script
//contents : matis city NPCs, bush fauna (low level-newbie zone)
// link the common configuration file
RootConfigFilename = "common.cfg";
DisplayedVariables += {"GlobalActorCount","GlobalActorMoves","GlobalActorUpdates"};
// by default, use localhost to find the naming service
//NSHost = "ldserver:50000";
//NSHost = "gamedev4";
// load all continents
UsedContinents =
{
// "fyros",
// "tryker",
"matis",
// "zorai",
};
Paths += { "data_leveldesign" /*, "data_common", "data_shard"*/ };
// StartCommands = { "loadPrim demo.prim" }; // .prim is an obsolete file format (it used to work for collision with trees)
StartCommandsWhenMirrorReady = {
// THIS IS GOOD NEW STUFF
"checkGenerateAndRun ags_test_creatures1 1571 -5135 10 25 creature c????1.creature",
"checkGenerateAndRun ags_test_creatures_testroom 1571 -4825 5 50 creature testroom_*.creature",
/*
// THIS IS OLD STUFF
// to be removed later
"checkGenerateAndRun ags_test_lvl_01 1721 -4805 5 20 creature *_lvl_01.creature",
"checkGenerateAndRun ags_test_hom 1721 -4755 5 20 creature *_hom_*.creature",
"checkGenerateAndRun ags_test_hof 1721 -4745 5 20 creature *_hof_*.creature",
"checkGenerateAndRun ags_test_set 1721 -4735 5 20 creature *_set.creature",
"checkGenerateAndRun ags_test_karavan 1721 -4725 5 20 creature karavan_*.creature",
"checkGenerateAndRun ags_test_kami 1721 -4715 5 20 creature kami*_*.creature",
*/
/*
"generateScript ags_test_lvl_01.script 1721 -5000 5 20 creature *_lvl_01.creature",
"generateScript ags_test_hom.script 1721 -4950 5 20 creature *_hom_*.creature",
"generateScript ags_test_hof.script 1721 -4940 5 20 creature *_hof_*.creature",
"generateScript ags_test_set.script 1721 -4930 5 20 creature *_set.creature",
"generateScript ags_test_karavan.script 1721 -4920 5 20 creature karavan_*.creature",
"generateScript ags_test_kami.script 1721 -4910 5 20 creature kami*_*.creature",
"runScript lvl_01 ags_test_lvl_01.script on",
"runScript hom ags_test_hom.script on",
"runScript hof ags_test_hof.script on",
"runScript set ags_test_set.script on",
"runScript karanvan ags_test_karavan.script on",
"runScript kami ags_test_kami.script on",
*/
};
/*
for scripting :
one command per line, no surrounding "
commands are :
- cmd: Execute a service command
ex: cmd help
cmd actorCreatePosition demo-point-004
- setText: Set a variable as plain text. Value can be computed using other
variables to compose strings (with the $(varname) syntax)
ex: setText myVar myValue
setText myVar $(myOtherVar) blah blah
synonym: set$ works like setText
- setNumeric: set a variable as numeric value. Value can be computed using
other variables (no specific syntax, variable names are written in plain text)
a variable existence can be tested by preceding its name by a ?. If the variable
exists, the ?var is set to 1, otherwise 0.
ex: setNumeric myVar 0.1234
setNumeric myVar myOtherVar*2.0+55690.1*sin(myVar)
setNumeric isReady ?myVar
synonym: set# works like setNumeric
- erase: erases a variable. Variable is completely deleted. ?var returns 0 after until var is redefined
ex: erase myVar
- wait: halt script for n cycles
ex: wait 10
- receive: halt script until expression is true (true is a value different from 0)
common operators can be used (<, >, == etc.)
ex: receive myVar>1.0
receive ?myVar
- send: send a value to all running scripts. Couple variable/value will be defined then in all running scripts
useful to synchronize scripts, or trigger events... value is text replaced using $(...) syntax
ex: send myVar blah blah
send myVar $(myOtherVar)
- display: displays a string, text replaced using $(...) syntax
ex: display myVar=$(myVar)
display number of players=$(nbPlayers)
- if: tests a condition, and runs alternative. alternative bloc can have an else part, and must be ended by endif
ex: if myVar > 10
display myVar is greater than 10
else
display myVar is less than 10
endif
- while: execute a bloc while a condition is verified. bloc must be ended by endloop
ex: while myVar > 10
set# myVar myVar-1
endloop
*/

@ -0,0 +1,16 @@
Paths +=
{
"data_shard/pacs",
"data/3d/continents",
"data_shard",
"data_common"
};
Commands =
{
"setStartPoint matis 4700 -3500",
"pacsCrunch matis"
};

@ -0,0 +1,28 @@
// link the common configuration file
RootConfigFilename = "common.cfg";
DontUseAES = 1;
DontUseNS = 1;
// Paths += { "data_leveldesign", "data_common" };
Paths += { "./data_shard/pacs", "./data/3d/continents" };
Paths += { "data_leveldesign/leveldesign/World" };
SrcPaths = { "./data_leveldesign/leveldesign/new_world" };
ObjPath = "./data_leveldesign/leveldesign/new_world";
SavPath = "./data_leveldesign/leveldesign/new_world";
DisplayedVariables += { "EvaluatedPos" };
StartCommands =
{
// "pacs_crunch fyros",
// "pacs_crunch matis",
// "pacs_crunch tryker",
// "pacs_crunch bagne",
// "pacs_crunch sources",
// "aiMake"
};

@ -0,0 +1,146 @@
// Use with commandline: ai_service -C. -L. --nobreak --writepid -mCommon:Newbieland:Post
// ---- config local variables
SUPort = 50505;
SUHost = "localhost";
// SU - listen address of the SU service (for L5 connections)
SUAddress = SUHost+":"+SUPort;
#include "ai_service_default.cfg"
// ---- service NeL variables (used by ConfigFile class)
//AESAliasName= "ais_newbieland";
GraphVars += { "TickSpeedLoop", "0" };
GraphVars += { "TickSpeedLoop", "60000" };
GraphVars += { "L5CallbackCount", "0" };
GraphVars += { "L5CallbackCount", "60000" };
GraphVars += { "L5CallbackTime", "0" };
GraphVars += { "L5CallbackTime", "60000" };
GraphVars += { "MirrorCallbackCount", "0" };
GraphVars += { "MirrorCallbackCount", "60000" };
GraphVars += { "MirrorCallbackTime", "0" };
GraphVars += { "MirrorCallbackTime", "60000" };
Paths += {
"../data",
"../common/",
"../common/data_leveldesign",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
#include "used_continents.cfg"
// Mirror limits
DatasetSizefe_temp = 700000;
DatasetSizefame = 26000;
// define the primitives configuration used. (AIS, EGS)
UsedPrimitives =
{
"newbieland_all",
// "newbieland",
"matis_newbie_all",
// "matis_newbieland",
"matis_all",
// "matis_majesticgarden",
// "matis_fleetinggarden",
// "matis_groveofconfusion",
// "matis_hereticshovel",
// "matis_hiddensource",
// "matis_knollofdissent",
// "matis_upperbog",
"matis_island_all",
"zorai_newbie_all",
// "zorai_newbieland",
"zorai_all",
// "zorai_citiesofintuition",
// "zorai_maidengrove",
// "zorai_groveofumbra",
// "zorai_havenofpurity",
// "zorai_knotofdementia",
// "zorai_thevoid",
"zorai_island_all",
"fyros_newbie_all",
// "fyros_newbieland",
"fyros_all",
// "fyros_imperialdune",
// "fyros_oflovaksoasis",
// "fyros_frahartowers",
// "fyros_dunesofexil",
// "fyros_outlawcanyon",
// "fyros_sawdustmines",
// "fyros_thesavagedunes",
// "fyros_thescorchedcorridor",
"fyros_island_all",
"tryker_newbie_all",
// "tryker_newbieland",
"tryker_all",
// "tryker_bountybeaches",
// "tryker_enchantedisle",
// "tryker_lagoonsofloria",
// "tryker_libertylake",
// "tryker_thefount",
// "tryker_windsofmuse",
"tryker_island_all",
"terre_all",
// "terre_forbidden_depths",
// "terre_the_land_of_continuty",
// "terre_the_sunken_city",
"sources_all",
// "sources_the_under_spring",
"route_gouffre_all",
// "route_gouffre_gate_of_obscurity",
// "route_gouffre_the_elusive_forest",
// "route_gouffre_the_trench_of_trials",
// "route_gouffre_the_windy_gate",
"nexus_all",
// "nexus_nexus",
"bagne_all",
// "bagne_the_abyss_of_ichor",
"kitiniere_all",
// "kitiniere",
//ace kitiniere+tcm "corrupted_moor_all",
};
// the following variable must be defined but should be empty - it's presence is used to change the behaviour
// of the packed sheet reader
GeorgePaths = { "" };
// ---- service custom variables (used by CVariable class)
NbPlayersLimit = PlayerLimit;
// Entity Limits (AIS)
NbPetLimit = NbPlayersLimit*4;
NbFaunaLimit = 50000;
NbNpcLimit = 20000;
NbFxLimit = 500;
#include "backup_service_interface.cfg"
// Set this shard as a ring (1) or mainland (0) shard (main behavior switch)
IsRingShard = 0;
// Disable ryzom verbose logging
VerboseMIRROR = 0;

@ -0,0 +1,388 @@
#include "common.cfg"
// a list of system command that run at server startup.
SystemCmd = {};
//////////////////////////////////////////////////////////////////////////////
//- Basic (specific) heal profile parameters ---------------------------------
// Downtime for normal heal (on other bots of the group)
HealSpecificDowntime = 100;
// Downtime for self heal
HealSpecificDowntimeSelf = 100;
//////////////////////////////////////////////////////////////////////////////
// Disable caching of ligo primitive in binary files
CachePrims = 0;
CachePrimsLog = 0;
// do not log the corrected position.
LogAcceptablePos = 0;
// do not log group creation failure
LogGroupCreationFailure = 0;
// do not log aliad tree owner construstion.
LogAliasTreeOwner = 0;
// do not log outpost info
LogOutpostDebug = 0;
// Speed factor, for debug purpose only. Don't set to high speed factor !
SpeedFactor = 1;
// Speep up the timer triggering. Set a value between 1 (normal) and INT_MAX.
TimerSpeedUp = 1;
// Default timer for wander behavior
DefaultWanderMinTimer = 50; // 5s
DefaultWanderMaxTimer = 100; // 10s
// Fame and guard behavior
// Fame value under witch the guard attack the player in sigth
FameForGuardAttack = -450000;
// The minimum of fame for guard to help the player
FameForGuardHelp = -200000;
// The default aggro distance for NPC
DefaultNpcAggroDist = 15;
// The default escort range for escort behavior
DefaultEscortRange = 10;
//////////////////////////////////////////////////////////////////////////////
// Aggro //
//////////////////////////////////////////////////////////////////////////////
AggroReturnDistCheck = 15.0;
AggroReturnDistCheckFauna = 15.0;
AggroReturnDistCheckNpc = 1.5;
AggroD1Radius = 250.0;
AggroD2Radius = 150.0;
AggroPrimaryGroupDist = 0.0;
AggroPrimaryGroupCoef = 0.0;
AggroSecondaryGroupDist = 0.0;
AggroSecondaryGroupCoef = 0.0;
AggroPropagationRadius = 60.0;
BotRepopFx = "";
// GROUP KEYWORDS
// used mainly in event handlers to determine to which groups events apply
KeywordsGroupNpc = {
"patrol", // a group of bots who guard a patrol route or point
"convoy", // a group with pack animals who follow roads from place to place
"with_players", // a group who may travel with players
};
// BOT KEYWORDS
// used mainly in npc_state_profile to determine which ai profiles to assign to which bots
KeywordsBotNpc = {
"team_leader", // a bot who leads the way in front of their team (and acts as leader
// in discussion with players)
"animal_leader", // a bot who leads pack animals
"guard", // a bot who is a guard of some sort (eg karavan guard)
"emissary", // eg karavan emissary
"preacher", // eg kami preacher
"guardian", // typically kami guardians
"vip", // someone who has an escort of players or NPCs (assumed to be harmless)
};
// STATE KEYWORDS
// used mainly in event handlers to determine to which state events apply
// eg: when a player goes link dead if the team that this player is escorting
// is in a dangerous area the team may enter a 'protect ourselves and wait for
// players' punctual state
KeywordsStateNpc = {
"safe", // eg the gathering point at town entrance
"dangerous", // eg a route through the wilds
};
ColourNames =
{
"red : 0",
"beige : 1",
"green : 2",
"turquoise : 3",
"blue : 4",
"violet : 5",
"white : 6",
"black : 7",
"redHair: 0",
"blackHair: 1",
};
StartCommandsWhenMirrorReady = {
};
//---------------------------------------------------------
// commands for multi IA configuration
// For multi IA config, use the -m command line switch folowed
// by a semicolon separated list of command block to run.
// ex :
// -mCommon:Matis:Post
// will execute the folowing command blocks in order :
// * StartCommandsWhenMirrorReadyCommon
// * StartCommandsWhenMirrorReadyMatis
// * StartCommandsWhenMirrorReadyPost
//---------------------------------------------------------
// common commands before loading continents
StartCommandsWhenMirrorReadyCommon =
{
"RandomPosMaxRetry 6400",
"fightRangeRange 4 60",
"LogOutpostDebug 1",
"grpHistoryRecordLog",
"verboseAIProfiles",
"verboseAliasNodeTreeParserLog",
"verboseCombatLog",
"verboseFaunaMgrLog",
"verboseFaunaParseLog",
"verboseNPCBotProfiles",
"verboseNPCMgrLog",
"verboseNPCParserLog",
"verboseNpcDescriptionMsgLog",
"verbosePrimitiveParserLog",
// "verboseSwitchMultipleChangesOfAProperty",
};
// commands for indoors continent
StartCommandsWhenMirrorReadyIndoors =
{
"loadContinent indoors",
"createStaticAIInstance indoors",
"loadMapsFromCommon indoors_all",
};
// commands for Matis continent
StartCommandsWhenMirrorReadyMatis =
{
"loadContinent matis",
"createStaticAIInstance matis",
"loadMapsFromCommon matis_all",
};
// commands for Matis newbie continent
StartCommandsWhenMirrorReadyMatisNewbie =
{
"loadContinent matis",
"createStaticAIInstance matis_newbie",
"loadMapsFromCommon matis_newbie_all",
};
// commands for Zorai continent
StartCommandsWhenMirrorReadyZorai =
{
"loadContinent zorai",
"createStaticAIInstance zorai",
"loadMapsFromCommon zorai_all",
};
// commands for Zorai newbie continent
StartCommandsWhenMirrorReadyZoraiNewbie =
{
"loadContinent zorai",
"createStaticAIInstance zorai_newbie",
"loadMapsFromCommon zorai_newbie_all",
};
// commands for Fyros continent
StartCommandsWhenMirrorReadyFyros =
{
"loadContinent fyros",
"createStaticAIInstance fyros",
"loadMapsFromCommon fyros_all",
};
// commands for Fyros newbie continent
StartCommandsWhenMirrorReadyFyrosNewbie =
{
"loadContinent fyros_newbie",
"createStaticAIInstance fyros_newbie",
"loadMapsFromCommon fyros_newbie_all",
};
// commands for Tryker continent
StartCommandsWhenMirrorReadyTryker =
{
"loadContinent tryker",
"createStaticAIInstance tryker",
"loadMapsFromCommon tryker_all",
};
// commands for Tryker newbie continent
StartCommandsWhenMirrorReadyTrykerNewbie =
{
"loadContinent tryker_newbie",
"createStaticAIInstance tryker_newbie",
"loadMapsFromCommon tryker_newbie_all",
};
// commands for bagne continents
StartCommandsWhenMirrorReadyBagne =
{
"loadContinent bagne",
"createStaticAIInstance bagne",
"loadMapsFromCommon bagne_all",
};
StartCommandsWhenMirrorReadyNexus =
{
"loadContinent nexus",
"createStaticAIInstance nexus",
"loadMapsFromCommon nexus_all",
};
StartCommandsWhenMirrorReadyRouteGouffre =
{
"loadContinent route_gouffre",
"createStaticAIInstance route_gouffre",
"loadMapsFromCommon route_gouffre_all",
};
StartCommandsWhenMirrorReadySources =
{
"loadContinent sources_interdites",
"createStaticAIInstance sources",
"loadMapsFromCommon sources_all",
};
StartCommandsWhenMirrorReadyTerre =
{
"loadContinent terre_oubliee",
"createStaticAIInstance terre",
"loadMapsFromCommon terre_all",
};
// commands for Fyros Island continent
StartCommandsWhenMirrorReadyFyrosIsland =
{
"loadContinent fyros_island",
"createStaticAIInstance fyros_island",
"loadMapsFromCommon fyros_island_all",
};
// commands for Zorai Island continent
StartCommandsWhenMirrorReadyZoraiIsland =
{
"loadContinent zorai_island",
"createStaticAIInstance zorai_island",
"loadMapsFromCommon zorai_island_all",
};
// commands for Tryker Island continent
StartCommandsWhenMirrorReadyTrykerIsland =
{
"loadContinent tryker_island",
"createStaticAIInstance tryker_island",
"loadMapsFromCommon tryker_island_all",
};
// commands for Matis island continent
StartCommandsWhenMirrorReadyMatisIsland =
{
"loadContinent matis_island",
"createStaticAIInstance matis_island",
"loadMapsFromCommon matis_island_all",
};
// commands for Newbieland continent
StartCommandsWhenMirrorReadyNewbieland =
{
"loadContinent newbieland",
"createStaticAIInstance newbieland",
"loadMapsFromCommon newbieland_all",
};
// commands for Kitiniere continent
StartCommandsWhenMirrorReadyKitiniere =
{
"loadContinent kitiniere",
"createStaticAIInstance kitiniere",
"loadMapsFromCommon kitiniere_all",
};
// commands for R2 continent
StartCommandsWhenMirrorReadyR2Desert =
{
"loadContinent r2_desert",
"createStaticAIInstance r2_desert",
"loadMapsFromCommon r2_desert_all",
};
// commands for R2 continent
StartCommandsWhenMirrorReadyR2Forest =
{
"loadContinent r2_forest",
"createStaticAIInstance r2_forest",
"loadMapsFromCommon r2_forest_all",
};
// commands for R2 continent
StartCommandsWhenMirrorReadyR2Lakes =
{
"loadContinent r2_lakes",
"createStaticAIInstance r2_lakes",
"loadMapsFromCommon r2_lakes_all",
};
// commands for R2 continent
StartCommandsWhenMirrorReadyR2Jungle =
{
"loadContinent r2_jungle",
"createStaticAIInstance r2_jungle",
"loadMapsFromCommon r2_jungle_all",
};
// commands for R2 continent
StartCommandsWhenMirrorReadyR2Roots =
{
"loadContinent r2_roots",
"createStaticAIInstance r2_roots",
"loadMapsFromCommon r2_roots_all",
};
// commands for post continents loading
StartCommandsWhenMirrorReadyPost =
{
"spawnInstances",
"updateAI",
"updateAI",
};
// commands for Ring continents
StartCommandsWhenMirrorReadyRing =
{
"loadContinent r2_desert",
"createDynamicAIInstance 10000",
"loadPrimitiveFile dummy.primitive",
"loadContinent r2_forest",
"createDynamicAIInstance 10001",
"loadPrimitiveFile dummy.primitive",
"loadContinent r2_lakes",
"createDynamicAIInstance 10003",
"loadPrimitiveFile dummy.primitive",
"loadContinent r2_jungle",
"createDynamicAIInstance 10002",
"loadPrimitiveFile dummy.primitive",
"loadContinent r2_roots",
"createDynamicAIInstance 10004",
"loadPrimitiveFile dummy.primitive",
// "spawnInstances",
"updateAI",
"updateAI",
// L5 connect to the shard unifier
"unifiedNetwork.addService ShardUnifier ( address="+SUAddress+" sendId external autoRetry )",
// Create a shard AIS Module
"moduleManager.createModule AisControl ais",
// Connect AIS
"ais.plug gw"
};

@ -0,0 +1,34 @@
// Use with commandline: backup_service -C. -L. --nobreak --writepid -P49990
#include "backup_service_default.cfg"
// ---- config local variables
// ---- service NeL variables (used by ConfigFile class)
AESAliasName = "bms_master";
Paths += {
".",
"../common/data_leveldesign",
};
// ---- service NeL variables (used by CVariable class)
// Where to save specific shard data (ie: player backup), relatively to SaveShardRoot
SaveFilesDirectory = "";
// where to save generic shard data (ie: packed_sheet)
WriteFilesDirectory = "../data";
// ---- service custom variables (used by ConfigFile class)
WebPort = 49970;
// ---- service custom variables (used by CVariable class)
// BS - Root directory where data are backuped to
IncrementalBackupDirectory = "../incremental_backup";
// Root directory where data from shards are stored into
SaveShardRoot = "../save/";

@ -0,0 +1,31 @@
#include "common.cfg"
// ---- service NeL variables (used by ConfigFile class)
DontUseNS = 1;
// ---- service NeL variables (used by CVariable class)
ListeningPort = 49990;
// ---- service custom variables (used by ConfigFile class)
// Listening port for the Web server to connect in
WebPort = 49898;
BSReadState = 1;
// ---- service custom variables (used by CVariable class)
// Port for the Layer 3 interface of the backup service
L3ListeningPort = 49950;
// template path from SaveShardRoot to find character saves
SaveTemplatePath = "$shard/characters/account_$userid_$charid$ext";
// character saves possible extension list
SaveExtList = "_pdr.bin _pdr.xml .bin";
//BSFilePrefix = "R:/code/ryzom/r2_shard/";
//BSFileSubst = "r2_shard/";

@ -0,0 +1,5 @@
L3BSPort = "49950";
BSHost = "localhost:49990";
UseBS = 1;
// Root directory where data from shards are stored into
SaveShardRoot = "../save/";

@ -0,0 +1,27 @@
// link the common configuration file
RootConfigFilename = "common.cfg";
DisplayedVariables += { "", "SlowestService", "SlowestTock", "", "WaitingForServices", "", "@Pause|pause" };
NegFiltersDebug = { "DELTA_", "DEFAULT_CB", "LNETL", };
NegFiltersInfo = { "HNETL5" };
Paths += { };
StartCommands =
{
};
DontUseNS = 1;
SId = 4;
ListeningPort = 49990;
// Listening port for the Web server to connect in
WebPort = 49898;
BSReadState = 0;
MasterBSHost = "192.168.1.134:49990";
BSFileSubst = "/home/nevrax/save_shard";
BSFilePrefix = "/home/nevrax/save_shard_slave";

@ -0,0 +1,3 @@
// link the common configuration file
RootConfigFilename = "common.cfg";

@ -0,0 +1,106 @@
// ---- config local variables
// Used by ConfigFile in EGS and WS
ShardId = #SHARDID#;
// Used by CVariable in WS
PlayerLimit = 5000;
Paths += {
"../common/",
};
// Used to connect to AES (this file) and to set up AES service (admin_executor_service.cfg)
AESPort="46702";
AESHost="localhost";
// ---- service NeL variables (used by ConfigFile class)
WindowStyle = "WIN";
// don't connect to the old NeLNS AES
DontUseAES = 1;
// Configure module gateway for layer 5 module comm
StartCommands +=
{
// Create a gateway module
"moduleManager.createModule StandardGateway gw",
// add a layer 5 transport
"gw.transportAdd L5Transport l5",
// open the transport
"gw.transportCmd l5(open)",
/// Create default connection with admin executor service
// Create a gateway module
"moduleManager.createModule StandardGateway gw_aes",
// create the admin executor service module
"moduleManager.createModule AdminExecutorServiceClient aes_client",
"aes_client.plug gw_aes",
// create a layer 3 client to connect to aes gateway
"gw_aes.transportAdd L3Client aes_l3c",
"gw_aes.transportCmd aes_l3c(connect addr="+AESHost+":"+AESPort+")",
};
NSHost = "localhost";
// A list of vars to graph for any service
GraphVars +=
{
"ProcessUsedMemory", "60000", // every minute
};
IgnoredFiles = { "continent.cfg", "__read_me.txt", "bandit.html", "flora_primr.primitive" };
// Set a mainland SessionId.
// Live: Must be 0 for ring shards, non-zero (usually ShardId) for mainland shards
// Dev: Can be non-zero to initially connect a client to a ring shard
NoWSShardId = ShardId;
// ---- service NeL variables (used by CVariable class)
// Disable generation / display of nldebug messages
DisableNLDebug = 1;
// Disable nel net verbose logging
VerboseNETTC = 0;
VerboseLNETL0 = 0;
VerboseLNETL1 = 0;
VerboseLNETL2 = 0;
VerboseLNETL3 = 0;
VerboseLNETL4 = 0;
VerboseLNETL5 = 0;
VerboseLNETL6 = 0;
// If the update loop is too slow, a thread will produce an assertion.
// By default, the value is set to 10 minutes.
// Set to 0 for no assertion.
UpdateAssertionThreadTimeout = 6000000;
// how to sleep between 2 network updates
// 0 = pipe
// 1 = usleep
// 2 = nanosleep
// 3 = sched_yield
// 4 = nothing
UseYieldMethod = 0;
DefaultMaxExpectedBlockSize = 200000000; // 200 M !
DefaultMaxSentBlockSize = 200000000; // 200 M !
// Will SaveFilesDirectory will be converted to a full path?
ConvertSaveFilesDirectoryToFullPath = 0;
// Where to save specific shard data (ie: player backup), relatively to SaveShardRoot
SaveFilesDirectory = "";
// where to save generic shard data (ie: packed_sheet)
WriteFilesDirectory = "../data/leveldesign";
MongoPassword = "feFrvs3rfdcef4";
// ---- service custom variables (used by ConfigFile class)
// ---- service custom variables (used by CVariable class)

@ -0,0 +1,302 @@
// Auto generated config file
// Use with commandline: dynamic_scenario_service -C. -L. --nobreak --writepid
AESAliasName= "dss";
ASWebPort="46700";
ASPort="46701";
AESPort="46702";
SUPort = 50505;
SUGlobalPort = 50503;
L3BSPort = "49950";
L3SlaveBSPort = "49951";
L3MasterLGSPort = 49992;
LGSBSPort = 49994;
L3LGSBSPort = 49995;
SUHost = "localhost";
MFSHost = "localhost";
BSHost = "localhost:49990";
SlaveBSHost = "";
MasterLGSHost = "localhost";
SlaveLGSHost = "localhost";
LGSBSHost = "localhost";
DBHost = "localhost";
#define DONT_USE_LGS_SLAVE
// Configure module gateway for layer 5 module comm
StartCommands +=
{
// Create a gateway module
"moduleManager.createModule StandardGateway gw",
// add a layer 5 transport
"gw.transportAdd L5Transport l5",
// open the transport
"gw.transportCmd l5(open)",
/// Create default connection with admin executor service
// Create a gateway module
"moduleManager.createModule StandardGateway gw_aes",
// create the admin executor service module
"moduleManager.createModule AdminExecutorServiceClient aes_client",
"aes_client.plug gw_aes",
// create a layer 3 client to connect to aes gateway
"gw_aes.transportAdd L3Client aes_l3c",
"gw_aes.transportCmd aes_l3c(connect addr=localhost:"+AESPort+")",
};
/// A list of vars to graph for any service
GraphVars =
{
"ProcessUsedMemory", "60000", // every minute
};
/* Force default value for PDLib directory (e.g. SaveFilesDirectory...)
* PLEASE NOTICE THAT THIS LINE MUST BE LEFT TO ""
* Only log analyser must have the $shard parameter to find all shards root directory
*/
PDRootDirectory = "";
// Log PD updates to log file (1 enabled, 0 disabled), see PDLogSaveDirectory to choose where to log
PDEnableLog = 1;
// Log PD StringManager updates to log file (1 enabled, 0 disabled), see PDLogSaveDirectory to choose where to log
PDEnableStringLog = 0;
// Number of seconds between 2 logs to file
PDLogUpdate = 10;
// MySGL wrapper strict mode - controls use of asserts if SQL requests fail
MSWStrictMode=0;
// This is the mapping for logical continent to physical one
ContinentNameTranslator =
{
"matis_newbie", "matis",
"zorai_newbie", "zorai",
"terre", "terre_oubliee",
"sources", "sources_interdites"
};
NegFiltersDebug = { "ZZZZZZZZZZZ" };
NegFiltersInfo = { "ZZZZZZZZZZZ" };
NegFiltersWarning = { "ZZZZZZZZZZZ", "Missing log context for log" };
//NegFiltersDebug = { "NET", "ADMIN", "MIRROR", "NC", "PATH" };
//NegFiltersInfo = { "NET", "ADMIN", "MIRROR", "NC", "CF", "TimerManagerUpdate" };
// NegFiltersWarning = { "CT_LRC", "AnimalSpawned" };
// Block the system in the tick service that provokes stalls when overloaded
WaitForBSThreshold=0;
// Only produce log*.log files and not <service name>*.log
DontLog=1;
IgnoredFiles = { "continent.cfg", "__read_me.txt", "bandit.html", "flora_primr.primitive" };
// If the update loop is too slow, a thread will produce an assertion.
// By default, the value is set to 10 minutes.
// Set to 0 for no assertion.
UpdateAssertionThreadTimeout = 6000000;
DefaultMaxExpectedBlockSize = 200000000; // 200 M !
DefaultMaxSentBlockSize = 200000000; // 200 M !
// MS Packet size limit in bytes, PER DATASET (warning: depending on the weights, limits per property may be very small)
MaxOutBandwidth = 100000000;
// how to sleep between 2 network updates
// 0 = pipe
// 1 = usleep
// 2 = nanosleep
// 3 = sched_yield
// 4 = nothing
UseYieldMethod = 0;
// The privileges needed to access any ring session
PrivilegeForSessionAccess = ":DEV:SGM:GM:SG:";
// The max number of ring points (aka ring access) for each ecosystem
MaxRingPoints = "A1:D7:F7:J8:L6:R13";
// Level limit for newb scenarios
FreeTrialSkillLimit=125;
// Level limit for newb scenarios
DefaultInterShardExchangeLevelCap=0;
// Configureation for DSS
MaxNpcs = 300;
MaxStaticObjects = 200;
// the following variable must be defined but should be empty - it's presence is used to change the behaviour
// of the packed sheet reader
GeorgePaths = { "" };
// Dissable nel net verbose logging
VerboseNETTC = 0;
VerboseLNETL0 = 0;
VerboseLNETL1 = 0;
VerboseLNETL2 = 0;
VerboseLNETL3 = 0;
VerboseLNETL4 = 0;
VerboseLNETL5 = 0;
VerboseLNETL6 = 0;
// Dissable ryzom verbose logging
VerboseMIRROR = 0;
VerboseRingRPLog = 0;
VerboseCDBGroup = 0;
// What to do with characters coming from another mainland shard?
// 0: teleport to the stored session id
// 1: let the character play anyway, but leave the stored session id unchanged
// 2: assign the stored session id with FixedSessionId and let play
AllowCharsFromAllSessions = 0;
// Use Shard Unifier or not
DontUseSU = 0;
// the domain's set of useful addresses
LSHost = SUHost;
RSMHost = SUHost;
// MFS config
WebSrvUsersDirectory = "";
WebRootDirectory = "/home/nevrax/live/save_shard/www";
HoFHDTDirectory = "/local/www/hof/hdt";
// BS Specifics --------------------------------------------------------------------------
// BS - set to 1 if a BS is not part of a naming service group (then BS not disclosed
// to other services by the Layer 5, i.e. the services sending requests to BS have
// to know its/their address(es) by another mean)
BSDontUseNS = 1;
// BS - set the host of the naming service where the BS register
BSNSHost = "localhost";
UseBS = 1;
XMLSave = 0;
// Where to save specific shard data (ie: player backup), relatively to SaveShardRoot
SaveFilesDirectory = "";
// where to save generic shard data (ie: packed_sheet)
WriteFilesDirectory = "../data";
// Will SaveFilesDirectory will be converted to a full path?
ConvertSaveFilesDirectoryToFullPath = 0;
// BS - Root directory where data are backuped to
IncrementalBackupDirectory = "../backup";
// IOS - Directory to store ios.string_cache file
StringManagerCacheDirectory = "../cache";
// IOS - Directory to log chat into
LogChatDirectory = "../logs";
// MFS - Directories
WebRootDirectory = "../cache/www";
// Root directory where data from shards are stored into
SaveShardRoot = "../save/";
// SU Specifics --------------------------------------------------------------------------
// SU - set to 1 if SU didn't use a naming service
SUDontUseNS = 1;
// SU - host for the NS used by SU
SUNSHost = "localhost";
// SU - listen address of the SU service (for L5 connections)
SUAddress = SUHost+":"+SUPort;
// SU - nel and ring database names
DBNelName = "nel";
DBRingName = "ring_open";
// Nel DB user
DBNelUser = "open";
// Ring DB user
DBRingUser = "open";
// SU - password to access to the nel database with DBNelUseruser (default is no password)
DBNelPass = "";
// SU - password to access to the ring database with DBRingUser (default is no password)
DBRingPass = "";
// WS Specifics --------------------------------------------------------------------------
// WS - use or not the legacy WelcomeService from nel ns (only for backward compatibility during transition to ring)
DontUseLSService = 1;
// Global config --------------------------------------------------------------------------
// set to 0 if you want to use the admin system
DontUseAES = 1;
// Dissable generation / display of nldebug messages
DissableNLDebug = 1;
DisableNLDebug = 1;
ShardId = #SHARDID#;
BasePort = 51400;
SaveFilesDirectory="open_ring01/";
NSHost = "localhost";
// Player limits (AIS, EGS, WS, FS)
NbPlayersLimit = 5000;
NbGuildLimit = 15000;
PlayerLimit = NbPlayersLimit;
ClientLimit = 1000;
// Set this shard as a ring (1) or mainland (0) shard (main behavior switch)
IsRingShard = 1;
// Set a mainland SessionId.
// Live: Must be 0 for ring shards, non-zero (usually ShardId) for mainland shards
// Dev: Can be non-zero to initially connect a client to a ring shard
NoWSShardId = ShardId;
FixedSessionId = 0;
// Mirror limits
DatasetSizefe_temp = 700000;
DatasetSizefame = 26000;
// FS Specifics --------------------------------------------------------------------------
// Client bandwidth ratio, set to 1 for standard operation, more than one allocate more bandwidth
BandwidthRatio = 2;
// EGS Specifics --------------------------------------------------------------------------
// Entity Limits (EGS)
NbObjectsLimit = 2000;
NbNpcSpawnedByEGSLimit = 5000;
NbForageSourcesLimit = 10000;
NbToxicCloudsLimit = 5000;
// AIS Specifics --------------------------------------------------------------------------
// Entity Limits (AIS)
NbPetLimit = NbPlayersLimit*4;
NbFaunaLimit = 50000;
NbNpcLimit = 50000;
NbFxLimit = 500;
FSListenHost = "localhost";
#include "dynamic_scenario_service_default.cfg"
WriteFilesDirectory="../live/service_dynamic_scenario_service/";
DontLog = 1;
WebSrvHost = "http://localhost:50000/";
Mainlands = {
"#SHARDID#", "#UC_SHARDNAME#", "(#UC_SHARDNAME# Developer Community)", "en"
};
HomeMainlandNames =
{
"#SHARDID#", "#UC_SHARDNAME#", "#SHARDNAME#",
};
RRDVarPath = "../save/rrd_graphs";
NegFiltersInfo+= {"FESTATS", "FETIME", "FERECV", "FESEND: sent SYNC message to client 1", "EIT: Register EId"};
NegFiltersWarning+= {"PIPO_SESSION1", "casino_session_matis01", "invalid damage type 10", "_log_Item_Delete",
"_log_Item_Money", "_log_Item_Create", "_log_Item_Move", "botChatMissionAdvance> invalid index 0",
"_MaxRange(0) < _MinRange(1)", "Can't find craft plan sheet 'unknown.unknown'"};
DontUseAES=1;
RingRPEnabled=0;
DomainName = "#DOMAINNAME#";
EnableStlAllocatorChecker = 0;
// start commands for setting up the exchange level caps of different ryzom shards
StartCommands += { "setShardExchangeLimit #SHARDID# 250" };
StartCommands += { "displayShardExchangeLimits" };
StartCommands += { "EnableStlAllocatorChecker 0" };
Paths += {
".",
"../common/data_common",
"../common/data_leveldesign",
};

@ -0,0 +1,9 @@
DelayBeforeStartAct = 1;
MaxNpcs = 300;
MaxStaticObjects = 200;
StartCommands +=
{
"unifiedNetwork.addService ShardUnifier ( address="+SUAddress+" sendId external autoRetry )",
};

@ -0,0 +1,4 @@
WordsPath = "../tools/translation/work/";
LanguageCode = "en";
Filter = "item";
Utf8 = 0;

@ -0,0 +1,236 @@
// Use with commandline: entities_game_service -C. -L. --nobreak --writepid
// ---- config local variables
#define DONT_USE_LGS_SLAVE
AESPort="46702";
SUPort = 50505;
SUGlobalPort = 50503;
L3MasterLGSPort = 41292;
L3SlaveLGSPort = 49993;
SUHost = "localhost";
MasterLGSHost = "localhost";
SlaveLGSHost = "localhost";
// SU - listen address of the SU service (for L5 connections)
SUAddress = SUHost+":"+SUPort;
#include "entities_game_service_default.cfg"
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "egs";
StartCommands += {
"moduleManager.createModule AnimSessionManager asm",
"asm.plug gw",
};
// start commands for setting up the exchange level caps of different ryzom shards
StartCommands += { "setShardExchangeLimit #SHARDID# 250" };
StartCommands += { "displayShardExchangeLimits" };
StartCommands += { "EnableStlAllocatorChecker 0" };
GraphVars += { "CharacterLoadPerTick", "0" };
GraphVars += { "CharacterLoadPerTick", "60000" };
GraphVars += { "CharacterSavePerTick", "0" };
GraphVars += { "CharacterSavePerTick", "60000" };
GraphVars += { "TickSpeedLoop", "0" };
GraphVars += { "TickSpeedLoop", "60000" };
GraphVars += { "L5CallbackCount", "0" };
GraphVars += { "L5CallbackCount", "60000" };
GraphVars += { "L5CallbackTime", "0" };
GraphVars += { "L5CallbackTime", "60000" };
GraphVars += { "MirrorCallbackCount", "0" };
GraphVars += { "MirrorCallbackCount", "60000" };
GraphVars += { "MirrorCallbackTime", "0" };
GraphVars += { "MirrorCallbackTime", "60000" };
NSHost = "localhost";
Paths += {
"../data",
"../common/data_leveldesign",
};
PathsNoRecurse= {"."};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
WebSrvHost = "#WEBHOST#";
NbPlayersLimit = PlayerLimit;
NbGuildLimit = 15000;
// Entity Limits (EGS)
NbObjectsLimit = 2000;
NbNpcSpawnedByEGSLimit = 5000;
NbForageSourcesLimit = 10000;
NbToxicCloudsLimit = 5000;
#include "used_continents.cfg"
// define the primitives configuration used.
UsedPrimitives =
{
"newbieland_all",
// "newbieland",
"matis_newbie_all",
// "matis_newbieland",
"matis_all",
// "matis_majesticgarden",
// "matis_fleetinggarden",
// "matis_groveofconfusion",
// "matis_hereticshovel",
// "matis_hiddensource",
// "matis_knollofdissent",
// "matis_upperbog",
"matis_island_all",
"zorai_newbie_all",
// "zorai_newbieland",
"zorai_all",
// "zorai_citiesofintuition",
// "zorai_maidengrove",
// "zorai_groveofumbra",
// "zorai_havenofpurity",
// "zorai_knotofdementia",
// "zorai_thevoid",
"zorai_island_all",
"fyros_newbie_all",
// "fyros_newbieland",
"fyros_all",
// "fyros_imperialdune",
// "fyros_oflovaksoasis",
// "fyros_frahartowers",
// "fyros_dunesofexil",
// "fyros_outlawcanyon",
// "fyros_sawdustmines",
// "fyros_thesavagedunes",
// "fyros_thescorchedcorridor",
"fyros_island_all",
"tryker_newbie_all",
// "tryker_newbieland",
"tryker_all",
// "tryker_bountybeaches",
// "tryker_enchantedisle",
// "tryker_lagoonsofloria",
// "tryker_libertylake",
// "tryker_thefount",
// "tryker_windsofmuse",
"tryker_island_all",
"terre_all",
// "terre_forbidden_depths",
// "terre_the_land_of_continuty",
// "terre_the_sunken_city",
"sources_all",
// "sources_the_under_spring",
"route_gouffre_all",
// "route_gouffre_gate_of_obscurity",
// "route_gouffre_the_elusive_forest",
// "route_gouffre_the_trench_of_trials",
// "route_gouffre_the_windy_gate",
"nexus_all",
// "nexus_nexus",
"bagne_all",
// "bagne_the_abyss_of_ichor",
"kitiniere_all",
// "kitiniere",
//ace kitiniere+tcm "corrupted_moor_all",
"r2_desert_all",
"r2_lakes_all",
"r2_forest_all",
"r2_jungle_all",
"r2_roots_all",
};
// the following variable must be defined but should be empty - it's presence is used to change the behaviour
// of the packed sheet reader
GeorgePaths = { "" };
HomeMainlandNames =
{
"#SHARDID#", "#UC_SHARDNAME#", "#SHARDNAME#",
};
// Mirror limits
DatasetSizefe_temp = 700000;
DatasetSizefame = 26000;
// ---- service custom variables (used by CVariable class)
RingRPEnabled=0;
RingRPXPRequiredPerAction=700;
RingRPXPRequiredPerTimeSlice=700;
MaxXPGainPerPlayer = 30.0;
DeathXPFactor = 0.1;
MFSHost = "localhost";
// Use Shard Unifier or not
DontUseSU = 0;
// Set this shard as a ring (1) or mainland (0) shard (main behavior switch)
IsRingShard = 0;
// Set a mainland SessionId.
// Live: Must be 0 for ring shards, non-zero (usually ShardId) for mainland shards
// Dev: Can be non-zero to initially connect a client to a ring shard
FixedSessionId = ShardId;
// Level limit for newb scenarios
DefaultInterShardExchangeLevelCap=0;
// Disable ryzom verbose logging
VerboseMIRROR = 0;
VerboseRingRPLog = 0;
VerboseCDBGroup = 0;
MissionLogFile = "../logs/egs_missions.log";
AdminLogFile = "../logs/admin_commands.log";
// What to do with characters coming from another mainland shard?
// 0: teleport to the stored session id
// 1: let the character play anyway, but leave the stored session id unchanged
// 2: assign the stored session id with FixedSessionId and let play
AllowCharsFromAllSessions = 0;
/* Force default value for PDLib directory (e.g. SaveFilesDirectory...)
* PLEASE NOTICE THAT THIS LINE MUST BE LEFT TO ""
* Only log analyser must have the $shard parameter to find all shards root directory
*/
PDRootDirectory = "";
// Log PD updates to log file (1 enabled, 0 disabled), see PDLogSaveDirectory to choose where to log
PDEnableLog = 1;
// Log PD StringManager updates to log file (1 enabled, 0 disabled), see PDLogSaveDirectory to choose where to log
PDEnableStringLog = 0;
// Number of seconds between 2 logs to file
PDLogUpdate = 10;
#include "backup_service_interface.cfg"
XMLSave = 0;
ArkSalt="#ARKSALT#";
//AdminCommandAuditHost = "app.ryzom.com";
//AdminCommandAuditPage = "/audit_gm.php";

@ -0,0 +1,26 @@
// link the common configuration file
RootConfigFilename = "common.cfg";
//NSHost = "itsalive2";
//NSHost = "pc27";
//NSHost = "ldserver01";
//NSHost = "gamedev4";
//NSHost = "stephanec";
NSHost = "localhost";
NSPort = 50000;
WindowStyle = "WIN";
StartCommands =
{
// "goTo 17960 -33180 10",
// "goTo 16240 -24800 10",
// "goTo 1760 -1440 60",
"goTo 2520 -2100 -5",
"setUpdateTimeout 100",
};
Paths += { "data_leveldesign", "data_shard" };
DontUseAES = 1;

@ -0,0 +1,6 @@
RootConfigFilename = "general_utilities_service_events.cfg";
Users +=
{
// "user_name pass_phrase"
};

@ -0,0 +1,53 @@
// Use with commandline: frontend_service -C. -L. --nobreak --writepid
// ---- config local variables
// Client bandwidth ratio, set to 1 for standard opration, more than one allocate more bandwidth
BandwidthRatio = 1;
FSUDPPort = 47851;
FSListenHost = "#HOSTNAME#";
#include "frontend_service_default.cfg"
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "fes";
GraphVars += { "TickSpeedLoop", "0" };
GraphVars += { "TickSpeedLoop", "60000" };
GraphVars += { "L5CallbackCount", "0" };
GraphVars += { "L5CallbackCount", "60000" };
GraphVars += { "L5CallbackTime", "0" };
GraphVars += { "L5CallbackTime", "60000" };
GraphVars += { "MirrorCallbackCount", "0" };
GraphVars += { "MirrorCallbackCount", "60000" };
GraphVars += { "MirrorCallbackTime", "0" };
GraphVars += { "MirrorCallbackTime", "60000" };
Paths += {
"../data",
"../common",
"../common/data_leveldesign",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
//AcceptInvalidCookie = 1;
ClientLimit = 3000;
// Mirror limits
DatasetSizefe_temp = 700000;
DatasetSizefame = 26000;
// ---- service custom variables (used by CVariable class)
// Disable ryzom verbose logging
VerboseMIRROR = 0;
// Root directory where data from shards are stored into
SaveShardRoot = "../save/";

@ -0,0 +1,104 @@
#include "common.cfg"
// Configure module gateway for front end operation
StartCommands +=
{
// Add a security plugin (will add player info on player module proxy)
"gw.securityCreate FESecurity",
// create a front end service transport
"gw.transportAdd FEServer fes",
// set the transport option (need PeerInvisible and Firewalled)
"gw.transportOptions fes(PeerInvisible Firewalled)",
// open the transport
"gw.transportCmd fes(open)",
};
// UDP port for client communication
//FrontendPort = 47851;
ListenAddress = FSListenHost+":"+FSUDPPort;
// Maximum size that can be read from a client message
DatagramLength = 10000;
// Time-out before removing a client when it does not send any more data
ClientTimeOut = 600000; // 10 min
// Time-out before removing a limbo client when it does not send any more data
LimboTimeOut = 60000; // 1 min
// Maximum bytes per game cycle sent to all clients (currently not used/implemented)
TotalBandwidth = 536870911; // <512 MB : max value for 32 bit bitsize !
// Maximum bytes per game cycle sent to a client, including all headers
ClientBandwidth = 332 * BandwidthRatio; // 332 <=> 13 kbit/s at 5 Hz; 202 <=> 16 kbit/s at 10 Hz
// Maximum bytes for impulsion channels per datagram sent to a client
ImpulsionByteSize0 = 20 * BandwidthRatio;
ImpulsionByteSize1 = 200 * BandwidthRatio;
ImpulsionByteSize2 = 200 * BandwidthRatio;
NbMinimalVisualBytes = 50;
// Distance/delta ratio that triggers the sending of a position
DistanceDeltaRatioForPos = 100;
// Number of game cycles per front-end cycle
GameCycleRatio = 1;
// Execution period of distance calculation
CalcDistanceExecutionPeriod = 8;
// Execution period of position prioritization
PositionPrioExecutionPeriod = 2;
// Execution period of orientation prioritization
OrientationPrioExecutionPeriod = 8;
// Execution period of discreet properties prioritization
DiscreetPrioExecutionPeriod = 2;
SortPrioExecutionPeriod = 1;
// Display or not the "FE" nlinfos
DisplayInfo = 1;
// Prioritizer mode (currently the only mode is 1 for DistanceDelta)
PriorityMode = 1;
// Strategy for selecting pairs to prioritize (Power2WithCeiling=0, Scoring=1)
SelectionStrategy = 1;
// Minimum number of pairs to select for prioritization
MinNbPairsToSelect = 2000;
// Index of client to monitor, or 0 for no monitoring
ClientMonitor = 0;
// Allow or not beeping
AllowBeep = 1;
Lag = 0; // The lag on the simulated network (used by simlag)
PacketLoss = 0; // percentage of lost packet (used by simlag)
PacketDuplication = 0; // percentage of duplicated packet (used by simlag)
PacketDisordering = 0; // percentage of disordered packet (used by simlag) (Lag must be >100 to use disordering)
// ----------------------------------------
// Frontend/Patch mode settings
// If 1, the frontend server is used in Patch/Frontend mode (0 = only frontend mode, old behaviour)
UseWebPatchServer = 1;
// If 0, the frontend service is in Patch mode at startup, and it won't accept clients unless WS tells it to do so.
AcceptClientsAtStartup = 1;
// Patch URL footer. PatchURL will look like 'http://223.254.124.23:43435/patch'
PatchingURLFooter = ":43435/patch";
// System command to be executed when FS tries to start Web Patch server (ideally at FS startup)
StartWebServerSysCommand = "";
// System command to be executed when FS tries to stop Web Patch server (ideally when FS turns to frontend mode)
StopWebServerSysCommand = "";
// Use Thread for sending
UseSendThread = 1;
// Unidirectional Mirror mode (FS part)
ExpediteTOCK = 1;

@ -0,0 +1,28 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_default.cfg";
DontUseAES = 0;
DontUseNS = 1;
DontUseTS = 1;
NSHost="localhost";
Paths += {};
//PathsNoRecurse = {"r:/code/ryzom/data_leveldesign/leveldesign/Game_elem"};
GeorgePaths = {};
WriteFilesDirectory = "";
SaveFilesDirectory = "";
StartCommands =
{
""
// ,"modulesAdd gushub 1234"
// ,"modulesAdd gusnet localhost:1234"
// ,"modulesAdd cc test1 2"
// ,"ccLoad test.ccs"
// ,"modulesAdd ce en test1"
// ,"ccRun"
};

@ -0,0 +1,5 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_common.cfg";
DontUseNS = 1;
DontUseTS = 1;

@ -0,0 +1,50 @@
// by default, use WIN displayer
WindowStyle = "WIN";
// set to 0 if you want to use the admin system
DontUseAES = 1;
Paths =
{
"data_shard"
};
PathsNoRecurse =
{
"data_leveldesign/leveldesign/Game_elem", // for sheet_id.bin
};
// where to save generic shard data (ie: packed_sheet)
WriteFilesDirectory = "";
// where to save specific shard data (ie: player backup)
SaveFilesDirectory = "";
//NegFiltersDebug += { "NET", "ADMIN", "MIRROR", "NC", "PATH" };
//NegFiltersInfo += { "NET", "ADMIN", "MIRROR", "NC", "CF", "TimerManagerUpdate" };
//NegFiltersWarning += { "CT_LRC", "AnimalSpawned" };
FontName = "Lucida Console";
FontSize = 9;
// If the update loop is too slow, a thread will produce an assertion.
// By default, the value is set to 10 minutes.
// Set to 0 for no assertion.
UpdateAssertionThreadTimeout = 0;
DefaultMaxExpectedBlockSize = 200000000; // 200 M !
DefaultMaxSentBlockSize = 200000000; // 200 M !
// how to sleep between to network update
// 0 = pipe
// 1 = usleep
// 2 = nanosleep
// 3 = sched_yield
// 4 = nothing
UseYieldMethod = 0;
StartCommands +=
{
""
,"modulesAdd gusnet localhost:44748"
};

@ -0,0 +1,74 @@
// By default, use WIN displayer
WindowStyle = "WIN";
PathsNoRecurse =
{
"data_leveldesign/leveldesign/Game_elem", // for sheet_id.bin
};
// set to 0 if you want to use the admin system
DontUseAES = 1;
DontUseNS = 1;
DontUseTS = 1;
// where to save specific shard data (ie: player backup)
SaveFilesDirectory = "";
NegFiltersDebug += { "NET", "ADMIN", "MIRROR", "NC", "PATH" };
NegFiltersInfo += { "NET", "SERVICE", "ADMIN", "MIRROR", "NC", "CF", "TimerManagerUpdate", "addSearchPath", "Executing command", "GUSNET" };
NegFiltersWarning += { "LNETL", "CT_LRC" };
FontName = "Lucida Console";
FontSize = 9;
// If the update loop is too slow, a thread will produce an assertion.
// By default, the value is set to 10 minutes.
// Set to 0 for no assertion.
UpdateAssertionThreadTimeout = 0;
DefaultMaxExpectedBlockSize = 200000000; // 200 M !
DefaultMaxSentBlockSize = 200000000; // 200 M !
// how to sleep between to network update
// 0 = pipe
// 1 = usleep
// 2 = nanosleep
// 3 = sched_yield
// 4 = nothing
UseYieldMethod = 0;
StartCommands +=
{
""
// ,"modulesAdd gushub 44748"
// ,"modulesAdd gusnet localhost:44748"
,"modulesAdd gusnet 213.208.119.219:44748"
,"modulesAdd em"
// ,"modulesAdd ee enx ais egs ios"
};
Users +=
{
""
,"sadge thata boy"
,"ravna LeafaithinLlanfrechfa2405"
};
DisplayedVariables +=
{
""
,"EventName"
,""
,"ActiveShard"
,""
// ,"@SetEvent|emWinSetEvent"
,"@NewEvent|emWinNewEvent"
,"@Login|emWinLogin"
,"@Upload|emWinUpload"
,""
,"@View Installed Event|emPeek"
,"@Unload Installed Event|emUnload"
};

@ -0,0 +1,9 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_admin.cfg";
StartCommands =
{
""
,"modulesAdd gushub 44748"
};

@ -0,0 +1,19 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_common.cfg";
DontUseNS = 0;
DontUseTS = 1;
UseMirror= 1;
NSHost = "localhost";
GUSMirrorConfig =
{
"dataset fe_temp",
"property NameIndex rn",
};
DisplayedVariables += { "", "SlowestService", "SlowestTock", "", "WaitingForServices", "", "@Pause|pause" };
NegFiltersDebug += { "LNETL" } ;

@ -0,0 +1,9 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_shard.cfg";
StartCommands +=
{
""
,"modulesAdd ce fr uk"
};

@ -0,0 +1,9 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_shard.cfg";
StartCommands +=
{
""
,"modulesAdd ce de uk"
};

@ -0,0 +1,10 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_shard.cfg";
StartCommands +=
{
""
,"modulesAdd ce en uk"
,"ceChatTexts gus_ce_chat_texts_en.txt"
};

@ -0,0 +1,9 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_shard.cfg";
StartCommands +=
{
""
,"modulesAdd ce en us"
};

@ -0,0 +1,19 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_admin.cfg";
StartCommands +=
{
""
,"modulesAdd cc uk 2"
,"ccLoad"
,"ccShow"
};
DisplayedVariables +=
{
"@Reload|ccLoad"
,"@Start|ccRun"
,"@Advance|ccAdvance"
,"@Stop|ccQuit"
};

@ -0,0 +1,19 @@
// link the common configuration file
RootConfigFilename = "general_utilities_service_admin.cfg";
StartCommands +=
{
""
,"modulesAdd cc us 10"
,"ccLoad"
,"ccShow"
};
DisplayedVariables +=
{
"@Reload|ccLoad"
,"@Start|ccRun"
,"@Advance|ccAdvance"
,"@Stop|ccQuit"
};

@ -0,0 +1,47 @@
// Use with commandline: gpm_service -C. -L. --nobreak --writepid
#include "gpm_service_default.cfg"
// ---- config local variables
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "gpms";
GraphVars += { "TickSpeedLoop", "0" };
GraphVars += { "TickSpeedLoop", "60000" };
GraphVars += { "L5CallbackCount", "0" };
GraphVars += { "L5CallbackCount", "60000" };
GraphVars += { "L5CallbackTime", "0" };
GraphVars += { "L5CallbackTime", "60000" };
GraphVars += { "MirrorCallbackCount", "0" };
GraphVars += { "MirrorCallbackCount", "60000" };
GraphVars += { "MirrorCallbackTime", "0" };
GraphVars += { "MirrorCallbackTime", "60000" };
Paths += {
"../data",
"../common",
"../common/data_leveldesign",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
#include "used_continents.cfg"
// Mirror limits
DatasetSizefe_temp = 700000;
DatasetSizefame = 26000;
// ---- service custom variables (used by CVariable class)
// Set this shard as a ring (1) or mainland (0) shard (main behavior switch)
IsRingShard = 0;
// Disable ryzom verbose logging
VerboseMIRROR = 0;
WorldMapSizeX = 3000;
WorldMapSizeY = 3000;

@ -0,0 +1,7 @@
#include "common.cfg"
CheckPlayerSpeed = 0;
SecuritySpeedFactor = 1.2;
LoadPacsPrims = 0;
LoadPacsCol = 1;

@ -0,0 +1,74 @@
// By default, use WIN displayer
WindowStyle = "WIN";
PathsNoRecurse =
{
"data_leveldesign/leveldesign/Game_elem", // for sheet_id.bin
};
// set to 0 if you want to use the admin system
DontUseAES = 1;
DontUseNS = 1;
DontUseTS = 1;
NSHost="localhost";
// where to save specific shard data (ie: player backup)
SaveFilesDirectory = "";
NegFiltersDebug += { "NET", "ADMIN", "MIRROR", "NC", "PATH" };
NegFiltersInfo += { "NET", "SERVICE", "ADMIN", "MIRROR", "NC", "CF", "TimerManagerUpdate", "addSearchPath" };
NegFiltersWarning += { "LNETL", "CT_LRC", "Ignoring map key (__Key__) because __Val__" };
//FontName = "Lucida Console";
FontName = "Courier New";
FontSize = 9;
// If the update loop is too slow, a thread will produce an assertion.
// By default, the value is set to 10 minutes.
// Set to 0 for no assertion.
UpdateAssertionThreadTimeout = 0;
DefaultMaxExpectedBlockSize = 200000000; // 200 M !
DefaultMaxSentBlockSize = 200000000; // 200 M !
// how to sleep between to network update
// 0 = pipe
// 1 = usleep
// 2 = nanosleep
// 3 = sched_yield
// 4 = nothing
UseYieldMethod = 0;
StartCommands +=
{
"modulesAdd ss",
"ssScrLoad general_utilities_service.gss",
"ssScrDisplay",
"ssScrRoutineRun doTests",
};
Users =
{
""
,"sadge thata boy"
};
DisplayedVariables +=
{
""
// ,"@NewEvent|emWinNewEvent"
// ,"EventName"
// ,""
// ,"@Login|emWinLogin"
// ,"ActiveShard"
// ,""
// ,"@Upload|emWinUpload"
// ,"@View Installed Event|emWinPeek"
// ,"@Start Event|emWinEventStart"
// ,""
// ,"@Stop Event|emWinEventStop"
// ,"@Unload Installed Event|emWinUnload"
,"ScanJobState"
};

@ -0,0 +1,79 @@
// Use with commandline: input_output_service -C. -L. --nobreak --writepid
// ---- config local variables
#define DONT_USE_LGS_SLAVE
AESPort="46702";
SUPort = 50505;
SUGlobalPort = 50503;
L3MasterLGSPort = 41292;
L3SlaveLGSPort = 49993;
SUHost = "localhost";
MasterLGSHost = "localhost";
SlaveLGSHost = "localhost";
// SU - listen address of the SU service (for L5 connections)
SUAddress = SUHost+":"+SUPort;
#include "input_output_service_default.cfg"
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "ios";
// Create a char name mapper
StartCommands +=
{
"moduleManager.createModule CharNameMapper cnm",
"cnm.plug gw",
"moduleManager.createModule IOSRingModule iosrm",
"iosrm.plug gw",
};
Paths += {
"../language/translated",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// Mirror limits
DatasetSizefe_temp = 700000;
DatasetSizefame = 26000;
// the following variable must be defined but should be empty - it's presence is used to change the behaviour
// of the packed sheet reader
GeorgePaths = { "" };
// Use Shard Unifier or not
DontUseSU = 0;
HomeMainlandNames =
{
"#SHARDID#", "#UC_SHARDNAME#", "#SHARDNAME#",
};
// ---- service custom variables (used by CVariable class)
// Set this shard as a ring (1) or mainland (0) shard (main behavior switch)
IsRingShard = 0;
// Disable ryzom verbose logging
VerboseMIRROR = 0;
#include "backup_service_interface.cfg"
// IOS - Directory to store ios.string_cache file
StringManagerCacheDirectory = "../cache";
// IOS - Directory to log chat into
LogChatDirectory = "../logs/chat";
ReadTranslationWork = 0;
TranslationWorkPath = "";
VerboseStringManager = 0;
VerboseStringManagerParser = 0;
VerboseChat = 0;
VerboseChatManagement = 0;
VerboseNameTranslation = 0;

@ -0,0 +1,94 @@
#include "common.cfg"
// ---- service NeL variables (used by ConfigFile class)
StartCommands +=
{
// L5 connect to the shard unifier
"unifiedNetwork.addService ShardUnifier ( address="+SUAddress+" sendId external autoRetry )",
// Create a gateway for global interconnection
// modules from different shard are visible to each other if they connect to
// this gateway. SU Local module have no interest to be plugged here.
"moduleManager.createModule StandardGateway glob_gw",
// add a layer 3 server transport
"glob_gw.transportAdd L3Client l3c",
// open the transport
"glob_gw.transportCmd l3c(connect addr="+SUHost+":"+SUGlobalPort+")",
// Create a gateway for logger service connection
"moduleManager.createModule StandardGateway lgs_gw",
// add a layer 3 server transport for master logger service
"lgs_gw.transportAdd L3Client masterL3c",
// open the transport
"lgs_gw.transportCmd masterL3c(connect addr="+MasterLGSHost+":"+L3MasterLGSPort+")",
};
#ifndef DONT_USE_LGS_SLAVE
StartCommands +=
{
// add a layer 3 server transport for slave logger service
"lgs_gw.transportAdd L3Client slaveL3c",
// open the transport
"lgs_gw.transportCmd slaveL3c(connect addr="+SlaveLGSHost+":"+L3SlaveLGSPort+")",
};
#endif
StartCommands +=
{
// Create a chat unifier client
"moduleManager.createModule ChatUnifierClient cuc",
// and plug it on the gateway to reach the SU ChatUnifierServer
"cuc.plug glob_gw",
"cuc.plug gw",
// Create the logger service client module
"moduleManager.createModule LoggerServiceClient lsc",
"lsc.plug lgs_gw",
};
#endif
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// a list of system command that can be run with "sysCmd" service command.
SystemCmd = {};
// IOS don't use work directory by default
ReadTranslationWork = 0;
TranslationWorkPath = "translation/work";
// Global shard bot name translation file. You sould overide this
// in input_output_service.cfg to specialize the file
// depending on the shard main language.
BotNameTranslationFile = "bot_names.txt";
// Global shard event faction translation file. You sould override this
// in input_output_service.cfg to specialize the file
// depending on the shard main language.
EventFactionTranslationFile = "event_factions.txt";
// ---- service custom variables (used by CVariable class)
// Activate/deactivate debugging of missing paremeter replacement
DebugReplacementParameter = 1;
// Default verbose debug flags:
//-----------------------------
// Log bot name translation from 'BotNameTranslationFile'
VerboseNameTranslation = 1;
// Log chat management operation
VerboseChatManagement = 1;
// Log chat event
VerboseChat = 1;
// Log string manager message
VerboseStringManager = 1;
// Log the string manager parsing message
VerboseStringManagerParser = 0;

@ -0,0 +1,18 @@
// link the common configuration file
RootConfigFilename = "common.cfg";
QueryTimeout = 300;
LinePerPage = 50;
WebPort = 49899;
DontUseNS = 1;
/* Set this directory so LAS can find log directory for each shard
* PLEASE NOTICE THAT THIS LINE SHOULD ONLY BE ADDED TO LOG ANALYSER
* Other services that use PDLib should have this set to "".
*/
StartCommands =
{
"PDRootDirectory /home/nevrax/save_shard/$shard/pds"
};

@ -0,0 +1,50 @@
// Use with commandline: logger_service -C. -L. --nobreak --writepid
#include "logger_service_default.cfg"
// ---- config local variables
LGSL3Port = 41292;
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "lgs";
StartCommands +=
{
"moduleManager.createModule LoggerService ls",
"moduleManager.createModule StandardGateway lgs_gw",
"ls.plug lgs_gw",
"lgs_gw.transportAdd L3Server l3s",
"lgs_gw.transportOptions l3s(PeerInvisible)",
"lgs_gw.transportCmd l3s(open port="+ LGSL3Port +")",
};
DontUseNS = 1;
Paths += {
"../data",
"../common/data_leveldesign",
};
// ---- service NeL variables (used by CVariable class)
SaveFilesDirectory = "..";
// where to save generic shard data (ie: packed_sheet)
WriteFilesDirectory = "../save";
// ---- service custom variables (used by ConfigFile class)
// Use Shard Unifier or not
DontUseSU = 0;
HomeMainlandNames =
{
"#SHARDID#", "#UC_SHARDNAME#", "#SHARDNAME#",
};
// ---- service custom variables (used by CVariable class)
#include "backup_service_interface.cfg"

@ -0,0 +1,25 @@
// link the common configuration file
RootConfigFilename = "common.cfg";
DisplayedVariables += { "", "@Shards|shards", "@RegUsers|registeredUsers", "@OnlineUsers|onlineUsers", "OnlineUsers|OnlineUsersNumber" };
WSPort = 49999; // port for the welcome service connection (default is 49999)
WebPort = 49998; // port for the web server (default 49998)
AcceptExternalShards = 1; // 1 if you want to accept external shard that are not in database
Beep = 1; // 1 if you want to beep when a new client comes
DatabaseHost = "localhost"; // name of the host where the mysql database is (empty string mean localhost)
DatabaseName = "nel"; // name of the database where we can find needed info
DatabaseLogin = ""; // if we need a login to access the database
DatabasePassword = ""; // if we need a password to access the database
ForceDatabaseReconnection = "dummy"; // change this value to force a configfile reload and reconnection to the database
// to take in count the new value of Database*
// the content of this variable doesn't matter, it s just a fake to reload database var
DontUseNS = 1;
SId = 3;

@ -0,0 +1,19 @@
// Use with commandline: mail_forum_service -C. -L. --nobreak --writepid
#include "mail_forum_service_default.cfg"
// ---- config local variables
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "mfs";
Paths += {
".",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// ---- service custom variables (used by CVariable class)

@ -0,0 +1,28 @@
#include "common.cfg"
// ---- service NeL variables (used by ConfigFile class)
DontUseNS = 1;
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// ---- service custom variables (used by CVariable class)
WebRootDirectory = "save_shard/www";
// Set if Hall of Fame generator is enabled
HoFEnableGenerator = 1;
// Set if HoF generator is verbose
HoFVerbose = 0;
// Directory where HDT files are
HoFHDTDirectory = "/local/www/hof/hdt";
// HoF generator maximum update period in milliseconds
HoFGeneratorUpdatePeriod = 200;
// HoF generator directory update period in seconds
HoFGeneratorDirUpdatePeriod = 60;

@ -0,0 +1,38 @@
// Use with commandline: mirror_service -C. -L. --nobreak --writepid
#include "mirror_service_default.cfg"
// ---- config local variables
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "ms";
GraphVars += { "UserSpeedLoop", "0" };
GraphVars += { "UserSpeedLoop", "60000" };
GraphVars += { "L5CallbackCount", "0" };
GraphVars += { "L5CallbackCount", "60000" };
GraphVars += { "L5CallbackTime", "0" };
GraphVars += { "L5CallbackTime", "60000" };
Paths += {
".",
"../common",
"../common/data_leveldesign",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// Mirror limits
DatasetSizefe_temp = 700000;
DatasetSizefame = 26000;
// MS Packet size limit in bytes, PER DATASET (warning: depending on the weights, limits per property may be very small)
MaxOutBandwidth = 100000000;
// ---- service custom variables (used by CVariable class)
// Disable ryzom verbose logging
VerboseMIRROR = 0;

@ -0,0 +1,6 @@
#include "common.cfg"
// ---- service custom variables (used by ConfigFile class)
// Linux only
DestroyGhostSegments = 1;

@ -0,0 +1,39 @@
// Use with commandline: monitor_service -C. -L. --nobreak --writepid
#include "monitor_service_default.cfg"
// ---- config local variables
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "mos";
GraphVars += { "UserSpeedLoop", "0" };
GraphVars += { "UserSpeedLoop", "60000" };
GraphVars += { "L5CallbackCount", "0" };
GraphVars += { "L5CallbackCount", "60000" };
GraphVars += { "L5CallbackTime", "0" };
GraphVars += { "L5CallbackTime", "60000" };
Paths += {
"../data",
"../common",
"../common/data_leveldesign",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// Mirror limits
DatasetSizefe_temp = 700000;
DatasetSizefame = 26000;
// MS Packet size limit in bytes, PER DATASET (warning: depending on the weights, limits per property may be very small)
MaxOutBandwidth = 100000000;
// ---- service custom variables (used by CVariable class)
// Disable ryzom verbose logging
VerboseMIRROR = 0;

@ -0,0 +1,21 @@
// Use with commandline: ryzom_naming_service -C. -L. --nobreak --writepid
#include "naming_service_default.cfg"
// ---- config local variables
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "rns";
Paths += {
""
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
BasePort = 51000;
// ---- service custom variables (used by CVariable class)

@ -0,0 +1,7 @@
#include "common.cfg"
SId = 1;
DontUseNS = 1;
UniqueOnShardServices = {}; // { "EGS", "GPMS", "IOS", "TICKS", "WS", "AIS", "DSS" };
UniqueByMachineServices = {}; // { "MS" };

@ -0,0 +1,4 @@
// link the common configuration file
RootConfigFilename = "common.cfg";
SaveRootPath = "data_shard/pd_save";

@ -0,0 +1,39 @@
DontUseNS = 1;
DontUseAES = 1;
WindowStyle = "WIN";
FontName = "Lucida Console";
FontSize = 8;
Paths = { "data_leveldesign/leveldesign/DFN", "src_v2/sabrina_test" };
WriteFilesDirectory = "src_v2/sabrina_test";
SaveFilesDirectory = "src_v2/sabrina_test";
// factor for damage ( damage *= DamageFactor )
DamageFactor = 1.0;
// factor to accelerate sentence execution in the brick service (executionTime /= SpeedFactor)
SpeedFactor = 1.0;
// the length of a cycle (default = 4.0 s)
CombatCycleLength = 4.0;
StartCommands =
{
"makeSheetId",
// setup a pair of actors with a targeting b
"newPlayer bob",
"newPlayer fred",
"plrTarget bob fred",
// basic targeted spell test (with .sphrase phrase)
"plrMemSPhrase bob default 0 magic1.sphrase", // memorise spell in mem 0 slot 0
"plrUsePhrase bob default 0", // use the phrase in mem 0 slot 0
// custome phrase test
// "plrMemUserPhrase default 1 bla.sbrick bla2.sbrick", // memorise spell in mem 0 slot 1
// "plrUsePhrase bob default 1", // use the phrase in mem 0 slot 1
// display the actors after processing
"listActors",
"simTick 15",
};

@ -0,0 +1,2 @@
ScenarioTypes = {"Roleplay", "Combat"};
ScenarioLanguages = {"French", "English", "Deutsch"};

@ -0,0 +1,49 @@
// Use with commandline: session_browser_server -C. -L. --nobreak --writepid
#include "session_browser_server_default.cfg"
// ---- config local variables
#include "sql.cfg"
SBSPort = 48851;
SUHost = "localhost";
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "sbs";
StartCommands +=
{
"moduleManager.createModule SessionBrowserServerMod sbs suAddr="+SUHost+":49999 listenPort="+SBSPort+" ring_db(host="+DBHost+" user="+DBRingUser+" password="+DBRingPass+" base="+DBRingName+")",
"sbs.plug gw",
};
GraphVars += { "NetSpeedLoop", "0" };
GraphVars += { "NetSpeedLoop", "60000" };
GraphVars += { "L5CallbackCount", "0" };
GraphVars += { "L5CallbackCount", "60000" };
GraphVars += { "L5CallbackTime", "0" };
GraphVars += { "L5CallbackTime", "60000" };
Paths += {
".",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// Use Shard Unifier or not
DontUseSU = 0;
HomeMainlandNames =
{
"#SHARDID#", "#UC_SHARDNAME#", "#SHARDNAME#",
};
// The max number of ring points (aka ring access) for each ecosystem
MaxRingPoints = "A1:D7:F7:J8:L6:R13";
// ---- service custom variables (used by CVariable class)

@ -0,0 +1,53 @@
// Use with commandline: shard_unifier_service -C. -L. --nobreak --writepid
// ---- config local variables
SUGlobalPort = 50503;
#include "sql.cfg"
#include "shard_unifier_service_default.cfg"
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "su";
// Create a command executor
StartCommands +=
{
"moduleManager.createModule CommandExecutor ce",
"ce.plug gw",
};
GraphVars += { "TotalConcurentUser", "60000" };
GraphVars += { "NetSpeedLoop", "0" };
GraphVars += { "NetSpeedLoop", "60000" };
GraphVars += { "L5CallbackCount", "0" };
GraphVars += { "L5CallbackCount", "60000" };
GraphVars += { "L5CallbackTime", "0" };
GraphVars += { "L5CallbackTime", "60000" };
Paths += {
".",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// Use Shard Unifier or not
DontUseSU = 0;
HomeMainlandNames =
{
"#SHARDID#", "#UC_SHARDNAME#", "#SHARDNAME#",
};
// ---- service custom variables (used by CVariable class)
DomainName = "#DOMAINNAME#";
// The privileges needed to access any ring session
PrivilegeForSessionAccess = ":DEV:SGM:GM:SG:";
#include "backup_service_interface.cfg"

@ -0,0 +1,33 @@
#include "common.cfg"
DontUseNS = 1;
StartCommands +=
{
// Create a gateway for global interconnection
// modules from different shard are visible to each other if they connect to
// this gateway. SU Local module have no interest to be plugged here.
"moduleManager.createModule StandardGateway glob_gw",
// add a layer 3 server transport
"glob_gw.transportAdd L3Server l3s",
// open the transport
"glob_gw.transportCmd l3s(open port="+SUGlobalPort+")",
// Create a session manager module
"moduleManager.createModule RingSessionManager rsm web(port=49999) ring_db(host="+DBHost+" user="+DBRingUser+" password="+DBRingPass+" base="+DBRingName+") nel_db(host="+DBHost+" user="+DBNelUser+" password="+DBNelPass+" base="+DBNelName+")",
"rsm.plug gw",
// Create a login service module
"moduleManager.createModule LoginService ls ring_db(host="+DBHost+" user="+DBRingUser+" password="+DBRingPass+" base="+DBRingName+") web(port=49998) nel_db(host="+DBHost+" user="+DBNelUser+" password="+DBNelPass+" base="+DBNelName+")",
"ls.plug gw",
// Create a character synchronization module
"moduleManager.createModule CharacterSynchronisation cs fake_edit_char ring_db(host="+DBHost+" user="+DBRingUser+" password="+DBRingPass+" base="+DBRingName+")",
"cs.plug gw",
// Create entity locator module
"moduleManager.createModule EntityLocator el ring_db(host="+DBHost+" user="+DBRingUser+" password="+DBRingPass+" base="+DBRingName+") nel_db(host="+DBHost+" user="+DBNelUser+" password="+DBNelPass+" base="+DBNelName+")",
"el.plug gw",
// Create a mail forum notifier forwarder
"moduleManager.createModule MailForumNotifierFwd mfnfwd ring_db(host="+DBHost+" user="+DBRingUser+" password="+DBRingPass+" base="+DBRingName+") web(port=49897)",
"mfnfwd.plug gw",
// Create a chat unifier server module
"moduleManager.createModule ChatUnifierServer cus ring_db(host="+DBHost+" user="+DBRingUser+" password="+DBRingPass+" base="+DBRingName+")",
"cus.plug gw",
};

@ -0,0 +1,7 @@
/////////////////////////////////
/////////////////////////////////
/// SHEETS PACKER CONFIG FILE ///
/////////////////////////////////
/////////////////////////////////
DataPath = { "patch", "../common/data_leveldesign", "../common/data_common", "data" };
LigoPrimitiveClass = "world_editor_classes.xml";

@ -0,0 +1,15 @@
//DBHost = "web.ryzom.com";
DBHost = "#DBHOST#";
DBNelName = "nel";
DBRingName = "#DBRING#";
// Nel DB user
DBNelUser = "#DBUSER#";
// Ring DB user
DBRingUser = "#DBUSER#";
// SU - password to access to the nel database with DBNelUseruser (default is no password)
DBNelPass = "#DBPASS#";
// SU - password to access to the ring database with DBRingUser (default is no password)
DBRingPass = "#DBPASS#";
// MySQL wrapper strict mode - controls use of asserts if SQL requests fail
MSWStrictMode=0;

@ -0,0 +1,13 @@
// link the common configuration file
RootConfigFilename = "stats_scan_service_default.cfg";
DontUseAES = 1;
DontUseNS = 1;
DontUseTS = 1;
Paths += {};
PathsNoRecurse = {"r:/code/ryzom/data_leveldesign/leveldesign/Game_elem"};
GeorgePaths = {};
WriteFilesDirectory = "";
SaveFilesDirectory = "";

@ -0,0 +1,17 @@
// link the common configuration file
RootConfigFilename = "common.cfg";
DisplayedVariables += { "", "SlowestService", "SlowestTock", "", "WaitingForServices", "", "@Pause|pause" };
NegFiltersDebug += { "DELTA_", "DEFAULT_CB", "LNETL", };
NegFiltersInfo += { "HNETL5" };
Paths += {};
PathsNoRecurse = {};
GeorgePaths = {};
WriteFilesDirectory = "";
SaveFilesDirectory = "";
StartCommands =
{
};

@ -0,0 +1,27 @@
// link the common configuration file
RootConfigFilename = "test_service_default.cfg";
DontUseAES = 1;
DontUseNS = 1;
DontUseTS = 1;
Paths += {};
PathsNoRecurse = {};
GeorgePaths = {};
WriteFilesDirectory = "";
SaveFilesDirectory = "";
StartCommands =
{
""
// ,"pdrRead a pdrLines.txt"
// ,"pdrWrite a pdrLines_out.xml"
// ,"pdrRead b pdrLines_out.xml"
// ,"pdrWrite b pdrLines_out.txt"
// ,"pdrRead c pdr_account.xml"
// ,"pdrWrite c pdr_account_out.txt"
};

@ -0,0 +1,17 @@
// link the common configuration file
RootConfigFilename = "common.cfg";
DisplayedVariables += { "", "SlowestService", "SlowestTock", "", "WaitingForServices", "", "@Pause|pause" };
NegFiltersDebug += { "DELTA_", "DEFAULT_CB", "LNETL", };
NegFiltersInfo += { "HNETL5" };
Paths += {};
PathsNoRecurse = {};
GeorgePaths = {};
WriteFilesDirectory = "";
SaveFilesDirectory = "";
StartCommands =
{
};

@ -0,0 +1,16 @@
// List of directory where to find dll
TestDllPaths =
{
};
// List of test dll to load without compilation mode spec (d, df, rd, d) nor extension (.dll or .so)
// The dll name is followed by the working directory to set before loading the dll
TestDllList =
{
"../nel/tools/nel_unit_test/misc_ut/misc_unit_test", "../nel/tools/nel_unit_test/misc_ut",
"../nel/tools/nel_unit_test/ligo_ut/ligo_unit_test", "../nel/tools/nel_unit_test/ligo_ut",
"../nel/tools/nel_unit_test/net_ut/net_unit_test", "../nel/tools/nel_unit_test/net_ut",
"game_share_test", ".",
"shard_unifier_test", "test_files/shard_unifier_test",
"session_browser_test", "test_files/session_browser_test",
};

@ -0,0 +1,9 @@
// by default, use WIN displayer
WindowStyle = "WIN";
DontUseAES = 1;
DontUseNS = 1;
NSHost = "";
NegFiltersDebug = { "LNETL1" };

@ -0,0 +1,12 @@
// link the common configuration file
RootConfigFilename = "common.cfg";
//DisplayedVariables += {"GlobalActorCount","GlobalActorMoves","GlobalActorUpdates"};
// by default, use localhost to find the naming service
//NSHost = "nevrax-01";
//StartCommands = {
// "execute_test test.combat.test"
//};

@ -0,0 +1,30 @@
// Use with commandline: tick_service -C. -L. --nobreak --writepid
#include "tick_service_default.cfg"
// ---- config local variables
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "ts";
Paths += {
"../data",
"../common/data_leveldesign",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// Mirror limits
DatasetSizefe_temp = 700000;
DatasetSizefame = 26000;
// ---- service custom variables (used by CVariable class)
// Disable ryzom verbose logging
VerboseMIRROR = 0;
#include "backup_service_interface.cfg"

@ -0,0 +1,8 @@
#include "common.cfg"
/// A list of vars to graph for TS
GraphVars +=
{
"TotalSpeedLoop", "60000", // low rez, every minutes
"TotalSpeedLoop", "0", // high rez, every tick
};

@ -0,0 +1,40 @@
// This is the mapping for logical continent to physical one (server_share/used_continent.cpp)
ContinentNameTranslator =
{
"matis_newbie", "matis",
"zorai_newbie", "zorai",
"terre", "terre_oubliee",
"sources", "sources_interdites"
};
// This is the list of continent to use with their unique instance number (server_share/used_continent.cpp)
UsedContinents =
{
"bagne", "0",
"fyros", "1",
"fyros_island", "2",
"fyros_newbie", "3",
"indoors", "4",
"matis", "5",
"matis_newbie", "7",
"matis_island", "8",
"nexus", "9",
"route_gouffre","10",
"sources", "11",
"terre", "12",
// "testroom", "13",
"tryker", "14",
"tryker_island","15",
"tryker_newbie","16",
"zorai", "17",
"zorai_island", "18",
"zorai_newbie", "19",
"newbieland", "20",
"kitiniere", "21",
"r2_desert", "22",
"r2_forest", "23",
"r2_lakes", "24",
"r2_jungle", "25",
"r2_roots", "26"
//ace kitiniere+tcm "corrupted_moor", "22"
};

@ -0,0 +1,34 @@
// Use with commandline: ryzom_welcome_service -C. -L. --nobreak --writepid
// ---- config local variables
SUPort = 50505;
SUHost = "localhost";
// SU - listen address of the SU service (for L5 connections)
SUAddress = SUHost+":"+SUPort;
#include "welcome_service_default.cfg"
// ---- service NeL variables (used by ConfigFile class)
AESAliasName= "rws";
Paths += {
"../data",
};
// ---- service NeL variables (used by CVariable class)
// ---- service custom variables (used by ConfigFile class)
// WS - use or not the legacy WelcomeService from nel ns (only for backward compatibility during transition to ring)
DontUseLSService = 1;
LSHost = SUHost;
// Set a mainland SessionId.
// Live: Must be 0 for ring shards, non-zero (usually ShardId) for mainland shards
// Dev: Can be non-zero to initially connect a client to a ring shard
FixedSessionId = ShardId;
// ---- service custom variables (used by CVariable class)

@ -0,0 +1,38 @@
#include "common.cfg"
// short name of the frontend service
FrontendServiceName = "FS";
// in ring architecture, we no more use the legacy LS
DontUseLS = 1;
// if any of this services is not connected, the WS is closed.
ExpectedServices = { "FS", "MS", "EGS", "GPMS", "IOS", "TICKS" };
// Access level to shard
// 0: only dev
// 1: dev + privileged users (see also OpenGroups variable)
// 2: open for all
ShardOpen = 2;
// File that contains the ShardOpen value (used to override ShardOpen value through AES' command createFile)
// For instance, ShardOpen default value is 0, then AES creates a file to set ShardOpen to 2. If WS crashes,
// ShardOpen is still set to 2 when it relaunches...
// ShardOpenStateFile = "/tmp/shard_open_state";
// Privileged Groups
OpenGroups = ":GM:SGM:G:SG:GUEST:";
UsePatchMode = 0;
// create welcome service module
StartCommands +=
{
// create the service
"moduleManager.createModule WelcomeService ws",
// plug it in the gateway
"ws.plug gw",
// add the SU service
"unifiedNetwork.addService ShardUnifier ( address="+SUAddress+" sendId external autoRetry )",
};

@ -0,0 +1,29 @@
#!/bin/bash
# ______ _____ _ _ _____ _
# | ___ \ / ___| | | | |_ _| | |
# | |_/ / _ _______ _ __ ___ \ `--.| |__ __ _ _ __ __| | | | ___ ___ | |___
# | / | | |_ / _ \| '_ ` _ \ `--. \ '_ \ / _` | '__/ _` | | |/ _ \ / _ \| / __|
# | |\ \ |_| |/ / (_) | | | | | | /\__/ / | | | (_| | | | (_| | | | (_) | (_) | \__ \
# \_| \_\__, /___\___/|_| |_| |_| \____/|_| |_|\__,_|_| \__,_| \_/\___/ \___/|_|___/
# __/ |
# |___/
#
# Ryzom - MMORPG Framework <https://ryzom.com/dev/>
# Copyright (C) 2019 Winch Gate Property Limited
# This program is free software: read https://ryzom.com/dev/copying.html for more details
#
# Config file for ryzom shard tools
#
# Automatic restart of services
AUTO_RESTART=1
# Web url use to notify and manage apps who need know when a service is started
NOTIFY_URL_SERVICE_RESTARTED="https://app.ryzom.com/app_arcc/services_started.php"
NOTIFY_URL_KEY="C6tLpddu8NJjvhyzBLqjw4uQWRXbGRsQ"
# Use gdb
USE_GDB=1
# Notification command
NOTIFY_COMMAND=""

@ -0,0 +1,35 @@
#!/bin/bash
# ______ _____ _ _ _____ _
# | ___ \ / ___| | | | |_ _| | |
# | |_/ / _ _______ _ __ ___ \ `--.| |__ __ _ _ __ __| | | | ___ ___ | |___
# | / | | |_ / _ \| '_ ` _ \ `--. \ '_ \ / _` | '__/ _` | | |/ _ \ / _ \| / __|
# | |\ \ |_| |/ / (_) | | | | | | /\__/ / | | | (_| | | | (_| | | | (_) | (_) | \__ \
# \_| \_\__, /___\___/|_| |_| |_| \____/|_| |_|\__,_|_| \__,_| \_/\___/ \___/|_|___/
# __/ |
# |___/
#
# Ryzom - MMORPG Framework <https://ryzom.com/dev/>
# Copyright (C) 2019 Winch Gate Property Limited
# This program is free software: read https://ryzom.com/dev/copying.html for more details
#
# This script will notify external services like RocketChat or Web Apps
#
COMMAND=$1
shift
CWD=$(dirname "$0")
. "$CWD/config.sh"
if [[ "$COMMAND" = "ServiceStarted" ]]
then
if [[ -z "$NOTIFY_URL_SERVICE_RESTARTED" ]]
then
curl "$NOTIFY_URL_SERVICE_RESTARTED?command=started&shard=$(hostname -s)&apikey=$NOTIFY_URL_KEY&service=$2"
fi
elif [[ "$COMMAND" = "ServiceStoped" ]]
then
curl "$NOTIFY_URL_SERVICE_RESTARTED?command=stoped&shard=$(hostname -s)&apikey=$NOTIFY_URL_KEY&service=$2"
fi

@ -0,0 +1,119 @@
#!/bin/bash
# ______ _____ _ _ _____ _
# | ___ \ / ___| | | | |_ _| | |
# | |_/ / _ _______ _ __ ___ \ `--.| |__ __ _ _ __ __| | | | ___ ___ | |___
# | / | | |_ / _ \| '_ ` _ \ `--. \ '_ \ / _` | '__/ _` | | |/ _ \ / _ \| / __|
# | |\ \ |_| |/ / (_) | | | | | | /\__/ / | | | (_| | | | (_| | | | (_) | (_) | \__ \
# \_| \_\__, /___\___/|_| |_| |_| \____/|_| |_|\__,_|_| \__,_| \_/\___/ \___/|_|___/
# __/ |
# |___/
#
# Ryzom - MMORPG Framework <https://ryzom.com/dev/>
# Copyright (C) 2019 Winch Gate Property Limited
# This program is free software: read https://ryzom.com/dev/copying.html for more details
#
# This script is a service launcher that works with a command file
# to determine when to launch the application that it is responsible for
#
CWD=$(dirname "$0")
. "$CWD/config.sh"
NAME="$1"
shift
EXECUTABLE=$1
shift
CTRL_CMDLINE=$*
mkdir -p $NAME
DOMAIN=shard
NAME_BASE="$NAME/$NAME"
CTRL_FILE=${NAME_BASE}_immediate.launch_ctrl
NEXT_CTRL_FILE=${NAME_BASE}_waiting.launch_ctrl
STATE_FILE=${NAME_BASE}.state
START_COUNTER_FILE=${NAME_BASE}.start_count
echo
echo ---------------------------------------------------------------------------------
echo Starting service launcher
echo ---------------------------------------------------------------------------------
printf "%-16s = " CMDLINE ; echo $CTRL_CMDLINE
printf "%-16s = " CTRL_FILE ; echo $CTRL_FILE
printf "%-16s = " NEXT_CTRL_FILE ; echo $NEXT_CTRL_FILE
printf "%-16s = " STATE_FILE ; echo $STATE_FILE
echo ---------------------------------------------------------------------------------
echo
# reinit the start counter
echo 0 > $START_COUNTER_FILE
START_COUNTER=0
while true
do
# see if the conditions are right to launch the app
if [ -e $CTRL_FILE ]
then
# a control file exists so read it's contents
CTRL_COMMAND=_$(cat $CTRL_FILE)_
# do we have a 'launch' command?
if [ $CTRL_COMMAND = _LAUNCH_ ]
then
# update the start counter
START_COUNTER=$(( $START_COUNTER + 1 ))
echo $START_COUNTER > $START_COUNTER_FILE
# we have a launch command so prepare, launch, wait for exit and do the housekeeping
echo -----------------------------------------------------------------------
echo Launching ...
echo
printf RUNNING > $STATE_FILE
#notify start
"$CWD/notify.sh" ServiceStarted $NAME
if [[ "$USE_GDB" == "1" ]]
then
if [ "$NAME" = "egs" ] || [ "$NAME" = "ios" ] || [ "$NAME" = "ais_fyros" ] || [ "$NAME" = "ais_matis" ] || [ "$NAME" = "ais_tryker" ] || [ "$NAME" = "ais_roots" ] || [ "$NAME" = "ais_zorai" ] || [ "$NAME" = "ais_ark" ] || [ "$NAME" = "ais_gpms" ]
then
gdb -batch -ex "set logging file $NAME/gdb_dump.txt" -ex "set logging on" -ex "run $CTRL_CMDLINE" -ex "bt" $EXECUTABLE
fi
$EXECUTABLE $CTRL_CMDLINE
else
$EXECUTABLE $CTRL_CMDLINE
fi
#notify stop
"$CWD/notify.sh" ServiceStopped $NAME
echo -----------------------------------------------------------------------
printf STOPPED > $STATE_FILE
# consume (remove) the control file to allow start once
rm $CTRL_FILE
if [[ "$AUTO_RESTART" == "0" ]]
then
echo "Press ENTER to relaunch"
read
fi
fi
fi
# either we haven't launched the app yet or we have launched and it has exitted
if [ -e $NEXT_CTRL_FILE ]
then
# we have some kind of relaunch directive lined up so deal with it
mv $NEXT_CTRL_FILE $CTRL_FILE
else
# automatic launch
printf LAUNCH > $CTRL_FILE
fi
done

@ -0,0 +1,68 @@
#!/bin/bash
# ______ _____ _ _ _____ _
# | ___ \ / ___| | | | |_ _| | |
# | |_/ / _ _______ _ __ ___ \ `--.| |__ __ _ _ __ __| | | | ___ ___ | |___
# | / | | |_ / _ \| '_ ` _ \ `--. \ '_ \ / _` | '__/ _` | | |/ _ \ / _ \| / __|
# | |\ \ |_| |/ / (_) | | | | | | /\__/ / | | | (_| | | | (_| | | | (_) | (_) | \__ \
# \_| \_\__, /___\___/|_| |_| |_| \____/|_| |_|\__,_|_| \__,_| \_/\___/ \___/|_|___/
# __/ |
# |___/
#
# Ryzom - MMORPG Framework <https://ryzom.com/dev/>
# Copyright (C) 2019 Winch Gate Property Limited
# This program is free software: read https://ryzom.com/dev/copying.html for more details
#
# Script to build Rocketchat with ryzombridge
#
VERSION="1.0.0-rc.0"
BUILD_PATH=~/builds
echo "INSTALLATION OF VERSION $VERSION !!!!"
echo "If you don't have install all requirements check at:"
echo "https://rocket.chat/docs/installation/manual-installation/ubuntu/"
echo "To install meteor : curl https://install.meteor.com/ | sh"
echo "Ctrl+c to abort..."
read
echo "Erasing old..."
rm -rf $BUILD_PATH/RocketChat/Rocket.Chat.old
mv Rocket.Chat Rocket.Chat.old
cd ~/builds/RocketChat/
if [[ ! -d "megacorp" ]]
echo "Missing megacorp. Cloning it.."
hg clone ssh://hg@bitbucket.org/ryzom/megacorp
fi
cd megacorp
hg pull
hg update -v
cd ..
git clone https://github.com/RocketChat/Rocket.Chat.git
cd Rocket.Chat
git checkout $VERSION
cp $BUILD_PATH/RocketChat/megacorp/ryzom-rocket-bridge/ packages/
echo -e "\nryzom-rocket-bridge" >> .meteor/packages
npm install --production
rm -rf ../rc-bundle
meteor build ../rc-bundle --architecture os.linux.x86_64
meteor build ../rc-bundle --architecture os.linux.x86_64
cd ../rc-bundle
tar xvfz Rocket.Chat.tar.gz
cd ~
mv Rocket.Chat/ Rocket.Chat.old
cp -r src/rc-bundle/bundle/ Rocket.Chat/
cd ~/Rocket.Chat/programs/server
npm install

@ -0,0 +1,120 @@
#!/bin/bash
# ______ _____ _ _ _____ _
# | ___ \ / ___| | | | |_ _| | |
# | |_/ / _ _______ _ __ ___ \ `--.| |__ __ _ _ __ __| | | | ___ ___ | |___
# | / | | |_ / _ \| '_ ` _ \ `--. \ '_ \ / _` | '__/ _` | | |/ _ \ / _ \| / __|
# | |\ \ |_| |/ / (_) | | | | | | /\__/ / | | | (_| | | | (_| | | | (_) | (_) | \__ \
# \_| \_\__, /___\___/|_| |_| |_| \____/|_| |_|\__,_|_| \__,_| \_/\___/ \___/|_|___/
# __/ |
# |___/
#
# Ryzom - MMORPG Framework <https://ryzom.com/dev/>
# Copyright (C) 2019 Winch Gate Property Limited
# This program is free software: read https://ryzom.com/dev/copying.html for more details
#
# This script helps to manage the shard using a screen session.
# You can start, join, stop and get state of services
#
CMD=$1
DOMAIN=shard
if [[ ! -z "$2" ]]
then
SHARD_PATH=$2
fi
if [[ -z "$CMD" ]]
then
echo
echo Screen sessions currently running:
screen -list
echo
echo "Commands:"
echo " 'start' to start the ${DOMAIN}"
echo " 'stop' to stop the ${DOMAIN}"
echo " 'join' to join the ${DOMAIN}'s screen session"
echo " 'share' to join the ${DOMAIN} in shared mode"
echo " 'state' to view state information for the ${DOMAIN}"
echo
printf "Enter a command: "
read CMD
fi
if [ "$CMD" = "stop" ]
then
if [ $(screen -list | grep \\\.${DOMAIN} | wc -l) != 1 ]
then
echo Cannot stop domain \'${DOMAIN}\' because no screen by that name appears to be running
screen -list
else
screen -d -r $(screen -list | grep \\\.${DOMAIN}| sed 's/(.*)//') -X quit > /dev/null
if [ -f $SHARD_PATH/run/aes_state.txt ]
then
rm -r $SHARD_PATH/run/*
fi
fi
fi
STARTARGS=
if [ "$CMD" = "batchstart" ]
then
STARTARGS="-d -m"
CMD="start"
fi
LIGHT=
if [ "$CMD" = "light" ]
then
LIGHT=".light"
CMD="start"
fi
if [ "$CMD" = "start" ]
then
cd $SHARD_PATH/run
ulimit -c unlimited
screen -wipe > /dev/null
if [ $( screen -list | grep \\\.${DOMAIN} | wc -w ) != 0 ]
then
echo Cannot start domain \'${DOMAIN}\' because this domain is already started
screen -list | grep $DOMAIN
else
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SHARD_PATH/lib
export SHARD_PATH=$SHARD_PATH
screen $STARTARGS -S ${DOMAIN} -c $SHARD_PATH/tools/${DOMAIN}.screen${LIGHT}.rc
fi
fi
JOINARGS=
if [ "$CMD" = "share" ]
then
JOINARGS="-x"
CMD="join"
fi
if [ "$CMD" = "join" ]
then
if [ $(screen -list | grep \\\.${DOMAIN} | wc -l) != 1 ]
then
echo Cannot join domain \'${DOMAIN}\' because no screen by that name appears to be running
screen -list
else
screen -r ${JOINARGS} $(screen -list | grep \\\.${DOMAIN}| sed 's/(.*)//')
fi
fi
if [ "$CMD" = "state" ]
then
cd $SHARD_PATH/run
echo State of domain ${DOMAIN}:
if [ $(echo */*.state) = "*/*.state" ]
then
echo - No state files found
else
grep RUNNING */*state
fi
fi

@ -0,0 +1,95 @@
#
# ______ _____ _ _ _____ _
# | ___ \ / ___| | | | |_ _| | |
# | |_/ / _ _______ _ __ ___ \ `--.| |__ __ _ _ __ __| | | | ___ ___ | |___
# | / | | |_ / _ \| '_ ` _ \ `--. \ '_ \ / _` | '__/ _` | | |/ _ \ / _ \| / __|
# | |\ \ |_| |/ / (_) | | | | | | /\__/ / | | | (_| | | | (_| | | | (_) | (_) | \__ \
# \_| \_\__, /___\___/|_| |_| |_| \____/|_| |_|\__,_|_| \__,_| \_/\___/ \___/|_|___/
# __/ |
# |___/
#
# Ryzom - MMORPG Framework <https://ryzom.com/dev/>
# Copyright (C) 2019 Winch Gate Property Limited
# This program is free software: read https://ryzom.com/dev/copying.html for more details
#
# This rc script is used to start all services of the shard into a screen session
# This is the light version (only one ai service) !
#
# ------------------------------------------------------------------------------
# SCREEN KEYBINDINGS
# ------------------------------------------------------------------------------
# Remove some stupid / dangerous key bindings
bind ^k
#bind L
bind ^\
# Make them better
bind \\ quit
bind K kill
bind I login on
bind O login off
if [ "x$1" != "x" ]
then
SHARD_PATH=$1
fi
chdir $SHARD_PATH/run
echo "Started at $(date) in $SHARD_PATH" > /tmp/started.run
screen -t aes /bin/bash $SHARD_PATH/tools/service_launcher.sh aes ../sbin/ryzom_admin_service -A. -C../cfgs -L../logs --nobreak --fulladminname=admin_executor_service --shortadminname=AES
# bms_master
screen -t bms_master /bin/bash $SHARD_PATH/tools/service_launcher.sh bms_master ../sbin/ryzom_backup_service -C../cfgs -L../logs --nobreak --writepid -P49990
# bms_pd_master
#screen -t bms_pd_master /bin/bash $SHARD_PATH/tools/service_launcher.sh bms_pd_master ../sbin/ryzom_backup_service -C../cfgs -L../logs --nobreak --writepid -P49992
# egs
screen -t egs /bin/bash $SHARD_PATH/tools/service_launcher.sh egs ../sbin/ryzom_entities_game_service -C../cfgs -L../logs --nobreak --writepid
# gpms
screen -t gpms /bin/bash $SHARD_PATH/tools/service_launcher.sh gpms ../sbin/ryzom_gpm_service -C../cfgs -L../logs --nobreak --writepid
# ios
screen -t ios /bin/bash $SHARD_PATH/tools/service_launcher.sh ios ../sbin/ryzom_ios_service -C../cfgs -L../logs --nobreak --writepid
# rns
screen -t rns /bin/bash $SHARD_PATH/tools/service_launcher.sh rns ../sbin/ryzom_naming_service -C../cfgs -L../logs --nobreak --writepid
# rws
screen -t rws /bin/bash $SHARD_PATH/tools/service_launcher.sh rws ../sbin/ryzom_welcome_service -C../cfgs -L../logs --nobreak --writepid
# ts
screen -t ts /bin/bash $SHARD_PATH/tools/service_launcher.sh ts ../sbin/ryzom_tick_service -C../cfgs -L../logs --nobreak --writepid
# ms
screen -t ms /bin/bash $SHARD_PATH/tools/service_launcher.sh ms ../sbin/ryzom_mirror_service -C../cfgs -L../logs --nobreak --writepid
#ais_ark
screen -t ais_ark /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_ark ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_ark --nobreak --writepid -mCommon:Indoors::R2Desert:R2Roots:R2Jungle:R2Forest:R2Lakes:Post
# mfs
screen -t mfs /bin/bash $SHARD_PATH/tools/service_launcher.sh mfs ../sbin/ryzom_mail_forum_service -C../cfgs -L../logs --nobreak --writepid
# su
screen -t su /bin/bash $SHARD_PATH/tools/service_launcher.sh su ../sbin/ryzom_shard_unifier_service -C../cfgs -L../logs --nobreak --writepid
# fes
screen -t fes /bin/bash $SHARD_PATH/tools/service_launcher.sh fes ../sbin/ryzom_frontend_service -C../cfgs -L../logs --nobreak --writepid
# sbs
screen -t sbs /bin/bash $SHARD_PATH/tools/service_launcher.sh sbs ../sbin/ryzom_session_browser_service -C../cfgs -L../logs --nobreak --writepid
# lgs
screen -t lgs /bin/bash $SHARD_PATH/tools/service_launcher.sh lgs ../sbin/ryzom_logger_service -C../cfgs -L../logs --nobreak --writepid
# mos
screen -t mos /bin/bash $SHARD_PATH/tools/service_launcher.sh mos ../sbin/ryzom_monitor_service -C../cfgs -L../logs --nobreak --writepid
# pdss
#screen -t pdss /bin/bash $SHARD_PATH/tools/service_launcher.sh pdss ../sbin/ryzom_pd_support_service -C../cfgs -L../logs --nobreak --writepid
# ras
screen -t ras /bin/bash $SHARD_PATH/tools/service_launcher.sh ras ../sbin/ryzom_admin_service --fulladminname=admin_service --shortadminname=AS -C../cfgs -L../logs --nobreak --writepid

@ -0,0 +1,119 @@
#
# ______ _____ _ _ _____ _
# | ___ \ / ___| | | | |_ _| | |
# | |_/ / _ _______ _ __ ___ \ `--.| |__ __ _ _ __ __| | | | ___ ___ | |___
# | / | | |_ / _ \| '_ ` _ \ `--. \ '_ \ / _` | '__/ _` | | |/ _ \ / _ \| / __|
# | |\ \ |_| |/ / (_) | | | | | | /\__/ / | | | (_| | | | (_| | | | (_) | (_) | \__ \
# \_| \_\__, /___\___/|_| |_| |_| \____/|_| |_|\__,_|_| \__,_| \_/\___/ \___/|_|___/
# __/ |
# |___/
#
# Ryzom - MMORPG Framework <https://ryzom.com/dev/>
# Copyright (C) 2019 Winch Gate Property Limited
# This program is free software: read https://ryzom.com/dev/copying.html for more details
#
# This rc script is used to start all services of the shard into a screen session
#
# ------------------------------------------------------------------------------
# SCREEN KEYBINDINGS
#
shell /bin/bash
defscrollback 5000
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.kW}%-w%{.bW}%t [%n]%{-}%+w %=%{..G} %H %{..Y} %Y/%m/%d %c"
# Remove some stupid / dangerous key bindings
bind "^k"
bind "^\"
bindkey "^C" echo 'Blocked. Please use [Ctrl]+[A] + [Ctrl]+[Enter] + [Y]'
bindkey "^D" echo 'Blocked. Please use [Ctrl]+[A] + [Ctrl]+[Enter] + [Y]'
# Make them better
bind \\ quit
bind K kill
bind I login on
bind O login off
bindkey "^[[1;5D" prev
bindkey "^[[1;5C" next
# egs
screen -t EGS /bin/bash $SHARD_PATH/tools/service_launcher.sh egs ../sbin/ryzom_entities_game_service -C../cfgs -L../logs --nobreak --writepid
# ios
screen -t IOS /bin/bash $SHARD_PATH/tools/service_launcher.sh ios ../sbin/ryzom_ios_service -C../cfgs -L../logs --nobreak --writepid
# gpms
screen -t GPM /bin/bash $SHARD_PATH/tools/service_launcher.sh gpms ../sbin/ryzom_gpm_service -C../cfgs -L../logs --nobreak --writepid
# ais_newbieland
screen -t New /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_newbieland ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_newbieland --nobreak --writepid -mCommon:Newbieland:Post
# ais_fyros
screen -t Fyr /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_fyros ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_fyros --nobreak --writepid -mCommon:Indoors:Fyros:FyrosNewbie:FyrosIsland:Post
# ais_matis
screen -t Mat /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_matis ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_matis --nobreak --writepid -mCommon:Indoors:Matis:MatisNewbie:MatisIsland:Post
# ais_tryker
screen -t Trk /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_tryker ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_tryker --nobreak --writepid -mCommon:Indoors:Tryker:TrykerNewbie:TrykerIsland:Post
# ais_zorai
screen -t Zor /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_zorai ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_zorai --nobreak --writepid -mCommon:Indoors:Zorai:ZoraiNewbie:ZoraiIsland:Post
# ais_roots
screen -t Pri /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_roots ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_roots --nobreak --writepid -mCommon:Bagne:Nexus:RouteGouffre:Sources:Terre:Kitiniere:Post
#ais_ark
screen -t Ark /bin/bash $SHARD_PATH/tools/service_launcher.sh ais_ark ../sbin/ryzom_ai_service -C../cfgs -L../logs -Nais_ark --nobreak --writepid -mCommon:Indoors::R2Desert:R2Roots:R2Jungle:R2Forest:R2Lakes:Post
# aes
screen -t aes /bin/bash $SHARD_PATH/tools/service_launcher.sh aes ../sbin/ryzom_admin_service -A. -C../cfgs -L../logs --nobreak --fulladminname=admin_executor_service --shortadminname=AES
# bms_master
screen -t bms_master /bin/bash $SHARD_PATH/tools/service_launcher.sh bms_master ../sbin/ryzom_backup_service -C../cfgs -L../logs --nobreak --writepid -P49990
# su
screen -t su /bin/bash $SHARD_PATH/tools/service_launcher.sh su ../sbin/ryzom_shard_unifier_service -C../cfgs -L../logs --nobreak --writepid
# ras
screen -t ras /bin/bash $SHARD_PATH/tools/service_launcher.sh ras ../sbin/ryzom_admin_service --fulladminname=admin_service --shortadminname=AS -C../cfgs -L../logs --nobreak --writepid
# bms_pd_master
#screen -t bms_pd_master /bin/bash $SHARD_PATH/tools/service_launcher.sh bms_pd_master ../sbin/ryzom_backup_service -C../cfgs -L../logs --nobreak --writepid -P49992
# rns
screen -t rns /bin/bash $SHARD_PATH/tools/service_launcher.sh rns ../sbin/ryzom_naming_service -C../cfgs -L../logs --nobreak --writepid
# rws
screen -t rws /bin/bash $SHARD_PATH/tools/service_launcher.sh rws ../sbin/ryzom_welcome_service -C../cfgs -L../logs --nobreak --writepid
# ts
screen -t ts /bin/bash $SHARD_PATH/tools/service_launcher.sh ts ../sbin/ryzom_tick_service -C../cfgs -L../logs --nobreak --writepid
# ms
screen -t ms /bin/bash $SHARD_PATH/tools/service_launcher.sh ms ../sbin/ryzom_mirror_service -C../cfgs -L../logs --nobreak --writepid
# mfs
screen -t mfs /bin/bash $SHARD_PATH/tools/service_launcher.sh mfs ../sbin/ryzom_mail_forum_service -C../cfgs -L../logs --nobreak --writepid
# fes
screen -t fes /bin/bash $SHARD_PATH/tools/service_launcher.sh fes ../sbin/ryzom_frontend_service -C../cfgs -L../logs --nobreak --writepid
# sbs
screen -t sbs /bin/bash $SHARD_PATH/tools/service_launcher.sh sbs ../sbin/ryzom_session_browser_service -C../cfgs -L../logs --nobreak --writepid
# lgs
screen -t lgs /bin/bash $SHARD_PATH/tools/service_launcher.sh lgs ../sbin/ryzom_logger_service -C../cfgs -L../logs --nobreak --writepid
# mos
screen -t mos /bin/bash $SHARD_PATH/tools/service_launcher.sh mos ../sbin/ryzom_monitor_service -C../cfgs -L../logs --nobreak --writepid
# pdss
#screen -t pdss /bin/bash $SHARD_PATH/tools/service_launcher.sh pdss ../sbin/ryzom_pd_support_service -C../cfgs -L../logs --nobreak --writepid
termcapinfo xterm* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007:ti@:te@'

@ -0,0 +1,27 @@
<?php
// This file contains all variables needed by other php scripts
$LogRelativePath = 'logs/';
$ShardName = 'MyShard';
$ShardId = '501';
// ----------------------------------------------------------------------------------------
// Variables for nel database access
// ----------------------------------------------------------------------------------------
// where we can find the mysql database
$DBHost = 'localhost';
$DBUserName = 'USER';
$DBPassword = 'PASSWORD';
$DBName = 'nel';
$RingDBUserName = 'RING_USER';
$RingDBName = 'ring';
$RingDBPassword = 'RING_PASS';
$AcceptUnknownUser = true;
$AutoCreateRingInfo = true;
$RocketChatHook = '';
$RocketChatServer = '';

@ -0,0 +1,506 @@
<?php
include_once('nel_message.php');
/////////////////////////////////////////////////////////////////
// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
class CAdminServiceWeb extends CCallbackClient
{
function globalCmd($command)
{
$msg = new CMessage;
$msg->setName("GCMD");
$msg->serialString($command);
return parent::sendMessage($msg);
}
function controlCmd($serviceAlias, $command)
{
$msg = new CMessage;
$msg->setName("CCMD");
$msg->serialString($serviceAlias);
$msg->serialString($command);
return parent::sendMessage($msg);
}
function serviceCmd($serviceAlias, $command)
{
$msg = new CMessage;
$msg->setName("SCMD");
$msg->serialString($serviceAlias);
$msg->serialString($command);
return parent::sendMessage($msg);
}
function getShardOrders()
{
$msg = new CMessage;
$msg->setName("GSO");
$ret = "";
$ret = parent::sendMessage($msg);
if ($ret == false)
{
// error during send
$this->invokeError("getShardOrders", "Error in 'sendMessage'");
return false;
}
$retMsg = parent::waitMessage();
if ($ret == false)
{
// error during send
$this->invokeError("getShardOrders", "Error in 'waitMessage'");
return false;
}
if (!($retMsg->MsgName === "R_GSO"))
{
// error during send
$this->invokeError("getShardOrders", "Invalid response, awaited 'R_GSO', received '".$retMsg->MsgName."'");
return false;
}
// serial the return value
$nbElem = 0;
$retMsg->serialUInt32($nbElem);
$retValue = array();
for ($i=0; $i<$nbElem;$i++)
{
$retMsg->serialString($item);
$retValue[] = $item;
}
// return the return value
return $retValue;
}
function getStates()
{
$msg = new CMessage;
$msg->setName("GS");
echo "ok";
$ret = "";
$ret = parent::sendMessage($msg);
if ($ret == false)
{
// error during send
$this->invokeError("getStates", "Error in 'sendMessage'");
return false;
}
echo "ok";
$retMsg = parent::waitMessage();
if ($ret == false)
{
// error during send
$this->invokeError("getStates", "Error in 'waitMessage'");
return false;
}
echo "ok";
if (!($retMsg->MsgName === "R_GS"))
{
// error during send
$this->invokeError("getStates", "Invalid response, awaited 'R_GS', received '".$retMsg->MsgName."'");
return false;
}
echo "ok\n";
// serial the return value
$nbElem = 0;
$retMsg->serialUInt32($nbElem);
$retValue = array();
echo $nbElem."\n";
for ($i=0; $i<$nbElem;$i++)
{
$retMsg->serialString($item);
$retValue[] = $item;
}
// return the return value
return $retValue;
}
function getHighRezGraph($varAddr, $startDate, $endDate, $milliStep)
{
$msg = new CMessage;
$msg->setName("GHRG");
$msg->serialString($varAddr);
$msg->serialUint32($startDate);
$msg->serialUint32($endDate);
$msg->serialUint32($milliStep);
$ret = "";
$ret = parent::sendMessage($msg);
if ($ret == false)
{
// error during send
$this->invokeError("getHighRezGraph", "Error in 'sendMessage'");
return false;
}
$retMsg = parent::waitMessage();
if ($ret == false)
{
// error during send
$this->invokeError("getHighRezGraph", "Error in 'waitMessage'");
return false;
}
if (!($retMsg->MsgName === "R_GHRG"))
{
// error during send
$this->invokeError("getHighRezGraph", "Invalid response, awaited 'R_GHRG', received '".$retMsg->MsgName."'");
return false;
}
// serial the return value
$nbElem = 0;
$retMsg->serialUInt32($nbElem);
$retValue = array();
for ($i=0; $i<$nbElem;$i++)
{
$retMsg->serialString($item);
$retValue[] = $item;
}
// return the return value
return $retValue;
}
function waitCallback()
{
$message = parent::waitMessage();
if ($message == false)
return false;
switch($message->MsgName)
{
case "CMDR":
$this->commandResult_skel($message);
break;
default:
return false;
}
return true;
}
function commandResult_skel(&$message)
{
$message->serialString($serviceAlias);
$message->serialString($result);
$this->commandResult($serviceAlias, $result);
}
/////////////////////////////////////////////////////////////////
// Copy paste this part of code in your derived class
// and implement code to ract to incoming message
/////////////////////////////////////////////////////////////////
function commandResult($serviceAlias, $result)
{
}
}
class MyAdminService extends CAdminServiceWeb
{
function commandResult($serviceModuleName, $result)
{
global $command_return_data;
$command_return_data = trim("===[ Service ". strtoupper($serviceModuleName) ." returned ]===\n". trim($result) ."\n\n");
}
}
function parseDumpGuildList($data)
{
$server = '';
$result = array();
reset($data);
foreach($data as $server_data)
{
$data_ary = explode("\n",$server_data);
reset($data_ary);
foreach($data_ary as $rline)
{
$rline = trim($rline);
if (preg_match('/^===\[ Service ([^\ ]+) returned \]===/', $rline, $params))
{
$server = $params[1];
$result[$server] = array();
$result[$server]['name'] = array();
$result[$server]['dump'] = array();
}
elseif (preg_match("/^id = ([[:digit:]]+)\:([[:digit:]]+) \(([^\ ]+)\) (\(0x[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\)), name = '([^\']+)', ([[:digit:]]+) members/",$rline,$params))
{
// id = 101:1 (Local) (0x0006500001:0c:00:88), name = 'Les Gardiens de l Atrium', 21 members
if ($server != '')
{
$result[$server]['dump'][] = $params;
$result[$server]['name'][] = $params[5];
}
}
}
}
return $result;
}
function parseDumpOutpostList($data)
{
$server = '';
$result = array();
reset($data);
foreach($data as $server_data)
{
$data_ary = explode("\n",$server_data);
reset($data_ary);
foreach($data_ary as $rline)
{
$rline = trim($rline);
if (preg_match("/^([[:digit:]]+)\: Alias\: \((A\:[[:digit:]]+\:[[:digit:]]+)\), Name\: '([^\']+)', Sheet\: '([^\']+)', State\: '([^\']+)', Level\: ([[:digit:]]+), Owner\: '([^\']+)'/",$rline,$params))
{
$result[$params[3]] = $params;
}
}
}
return $result;
}
function parseDisplayPlayers($data)
{
$server = '';
$result = array();
reset($data);
$data = str_replace('\\\'', '', $data);
foreach($data as $server_data)
{
$data_ary = explode("\n",$server_data);
reset($data_ary);
foreach($data_ary as $rline)
{
$rline = trim($rline);
if (preg_match('/^Player: ([[:digit:]]+) Name: ([^ ]+) ID: (\(0x[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\)) FE: [[:digit:]]+ Sheet: [a-z]+\.race_stats - [[:digit:]]+ Priv: ([^ ]+) Pos: ([0-9]+),(-[0-9]+),([0-9\-]+) Session: [0-9]01/',$rline,$params))
{
// Player: 723931 Name: Deodand(Atys) ID: (0x0000b0bdb0:00:00:8b) FE: 139 Sheet: tryker.race_stats - 533 Priv: \&#039;\&#039; Pos: 15264,-34428,-3 Session: 101
$result[$params[1]] = $params;
}
}
}
return $result;
}
function parseDumpGuild($data)
{
$server = '';
$result = array();
reset($data);
foreach($data as $server_data)
{
$data_ary = explode("\n",$server_data);
reset($data_ary);
foreach($data_ary as $rline)
{
if (preg_match('/^===\[ Service ([^\ ]+) returned \]===/',$rline,$params))
{
$server = $params[1];
$result[$server] = array();
}
// <GUILD_DUMP> Guild id: 1, name: 'Les Gardiens de l Atrium', eid: (0x0000000001:0c:00:81)
//if (ereg("^[[:space:]]*\<GUILD_DUMP\> Guild id: ([[:digit:]]+), name: \'([[:alnum:]]+)\', eid: (\(0x[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\))$",$rline,$params))
elseif (preg_match('/^\<GUILD_DUMP\> Guild id: ([[:digit:]]+)\:([[:digit:]]+) \(([^\ ]+)\), name: \'([A-Za-z0-9\ _-]+)\', eid: (\(0x[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\))/',$rline,$params))
{
$guild_name = $params[4];
$result[$server] = array();
$result[$server]['dump'] = $params;
}
// Description: 'French CSR'
elseif (preg_match('/^[[:space:]]*Description: \'(.*)\'/',$rline,$params))
{
if ($server != '')
{
$result[$server]['desc'] = $params[1];
}
}
// Icon: 0x0000000000000681
elseif (preg_match('/^[[:space:]]*Icon: (0x[[:alnum:]]+)/',$rline,$params))
{
if ($server != '')
{
$result[$server]['icon'] = hexdec($params[1]);
}
}
// Money: 65500000
elseif (preg_match('/^[[:space:]]*Money: ([[:alnum:]]+)/',$rline,$params))
{
if ($server != '')
{
$result[$server]['money'] = $params[1];
}
}
// Race: Fyros
elseif (preg_match('/^[[:space:]]*Race: (.*)/',$rline,$params))
{
if ($server != '')
{
$result[$server]['race'] = $params[1];
}
}
// Building: building_instance_FY_guild_327
elseif (preg_match('/^[[:space:]]*Building: (.*)/',$rline,$params))
{
if ($server != '')
{
$result[$server]['building'] = $params[1];
}
}
// Civ Allegiance: Fyros
elseif (preg_match('/^[[:space:]]*Civ Allegiance: (.*)/',$rline,$params))
{
if ($server != '')
{
$result[$server]['civ'] = $params[1];
}
}
// Cult Allegiance: Kami
elseif (preg_match('/^[[:space:]]*Cult Allegiance: (.*)/',$rline,$params))
{
if ($server != '')
{
$result[$server]['cult'] = $params[1];
}
}
// Nb of members: 27
elseif (preg_match('/^[[:space:]]*Nb of members: ([[:digit:]]+)/',$rline,$params))
{
if ($server != '')
{
$result[$server]['count'] = $params[1];
}
}
// Member 'Yotto' (0x00000096f0:00:00:86), index: 2, grade: HighOfficer, enter time: 60960905
elseif (preg_match('/^[[:space:]]*Member \'([^\ ]+)\' (\(0x[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\:[[:alnum:]]+\)), index: ([[:digit:]]+), grade: ([[:alnum:]]+), enter time: ([[:digit:]]+)/',$rline,$params))
{
if ($server != '')
{
$result[$server][$params[4]][] = $params[1];
}
}
}
}
return $result;
}
function querySelectedShard($name, $service_name, $fullcmd, $cmd='', $waitCallback=true, $is_control=false) {
global $command_return_data;
$nel_result = array();
$nel_status = !$waitCallback;
$p_result = null;
$adminService = new MyAdminService;
if ($adminService->connect($name, '46700', $res) !== false) {
$command_return_data = '';
//echo "NEL[$service_name] : $service_command\n";
if (is_array($fullcmd)) {
foreach ($fullcmd as $service_command) {
if ($is_control)
$adminService->controlCmd($service_name, $service_command);
else
$adminService->serviceCmd($service_name, $service_command);
}
} else {
if ($is_control)
$adminService->controlCmd($service_name, $fullcmd);
else
$adminService->serviceCmd($service_name, $fullcmd);
$service_command = $fullcmd;
//echo "NEL[$service_name] : OK\n";
if ($waitCallback && $adminService->waitCallback()) {
//echo "NEL[$service_name] : Successful!\n";
$nel_status = true;
$nel_result[] = $command_return_data;
//print_r($command_return_data);
} else {
//echo "NEL[$service_name] : Failed!\n";
}
}
@$adminService->close();
}
if ($nel_status) {
if (strlen($cmd) > 0) {
$func_name = 'parse'.ucfirst($cmd);
if (function_exists($func_name))
$p_result = call_user_func($func_name,$nel_result);
}
}
return array('status' => $nel_status, 'query' => $service_name.':'.$service_command, 'raw' => $nel_result, 'parsed' => $p_result);
}
function queryShard($service_name, $fullcmd, $cmd='', $waitCallback=true, $is_control=false)
{
return querySelectedShard('localhost', $service_name, $fullcmd, $cmd, $waitCallback, $is_control);
}

@ -0,0 +1,296 @@
<?php
$SockTimeOut = 10;
function debug($text)
{
// flush();
// echo $text;
}
class CMemStream
{
var $Buffer;
var $InputStream;
var $Pos;
function CMemStream ()
{
$this->InputStream = false;
$this->Pos = 0;
$this->Buffer = "";
debug("A : ".gettype($this->Buffer)."<br>");
}
function setBuffer ($Buffer)
{
$this->InputStream = true;
$this->Buffer = $Buffer;
$this->Pos = 0;
}
function isReading () { return $this->InputStream; }
function serialUInt8 (&$val)
{
if ($this->isReading())
{
$val = ord($this->Buffer{$this->Pos++});
debug(sprintf ("read uint8 '%d'<br>\n", $val));
}
else
{
debug("B".gettype($this->Buffer)."<br>");
debug(sprintf ("write uint8 Buffer size before = %u<br>\n", strlen($this->Buffer)));
$this->Buffer = $this->Buffer . chr($val & 0xFF);
$this->Pos++;
debug("C".gettype($this->Buffer)."<br>");
debug(sprintf ("write uint8 '%d' %d<br>\n", $val, $this->Pos));
debug(sprintf ("write uint8 Buffer size after = %u<br>\n", strlen($this->Buffer)));
}
}
function serialUInt32 (&$val)
{
if ($this->isReading())
{
$val = ord($this->Buffer{$this->Pos++});
$val += ord($this->Buffer{$this->Pos++})*256;
$val += ord($this->Buffer{$this->Pos++})*(double)256*256;
$val += ord($this->Buffer{$this->Pos++})*(double)256*256*256;
debug(sprintf ("read uint32 '%d'<br>\n", $val));
// var_dump($val);
}
else
{
debug("D".gettype($this->Buffer)."<br>");
$this->Buffer .= chr($val & 0xFF);
$this->Buffer .= chr(($val>>8) & 0xFF);
$this->Buffer .= chr(($val>>16) & 0xFF);
$this->Buffer .= chr(($val>>24) & 0xFF);
$this->Pos += 4;
debug("E".gettype($this->Buffer)."<br>");
debug(sprintf ("write uint32 '%d' %d<br>\n", $val, $this->Pos));
}
}
function serialString (&$val)
{
if ($this->isReading())
{
$this->serialUInt32($size);
debug(sprintf ("read string : size = %u<br>\n", $size));
$val = substr ($this->Buffer, $this->Pos, $size);
debug(sprintf ("read string '%s'<br>\n", $val));
$this->Pos += strlen($val);
}
else
{
$valLen = strlen($val);
$this->serialUInt32($valLen);
$this->Buffer .= $val;
$this->Pos += $valLen;
debug(sprintf ("write string '%s' %d<br>\n", $val, $this->Pos));
}
}
function serialEnum (&$val)
{
if ($this->isReading())
{
$intValue = 0;
$this->serialUInt32($intValue);
$val->fromInt((int)$intValue);
debug(sprintf ("read enum '%s'<br>\n", $val->toString()));
}
else
{
$intValue = $val->toInt();
$this->serialUInt32($intValue);
debug(sprintf ("write enum '%s' %d<br>\n", $val->toString(), $this->Pos));
}
}
}
class CMessage extends CMemStream
{
var $MsgName;
function CMessage()
{
$this->CMemStream();
}
function setName($name)
{
$this->MsgName = $name;
}
}
class CCallbackClient
{
var $ConSock = false;
var $MsgNum = 0;
function connect($addr, $port, &$res)
{
global $SockTimeOut;
debug(sprintf("Connect<br>"));
$this->MsgNum = 0;
$this->ConSock = fsockopen ($addr, $port, $errno, $errstr, $SockTimeOut);
debug("H".gettype($this->ConSock)."<br>");
if (!$this->ConSock)
{
$res = "Can't connect to the callback server '$addr:$port' ($errno: $errstr)";
return false;
}
else
{
// set time out on the socket to 2 secondes
stream_set_timeout($this->ConSock, $SockTimeOut);
$res = "";
return true;
}
}
function close()
{
if ($this->ConSock)
{
fclose($this->ConSock);
debug(sprintf("Close<br>"));
}
else
debug(sprintf("Already Closed !<br>"));
}
function sendMessage(&$message)
{
if (!$this->ConSock)
{
debug(sprintf ("Socket is not valid\n"));
return false;
}
debug(sprintf ("sendMessage : message Buffer is '%d'<br>\n", $message->Pos));
debug(sprintf ("sendMessage : message Buffer is '%d'<br>\n", strlen($message->Buffer)));
$hd = new CMemStream;
debug(sprintf("SendMessage number %u<br>", $this->MsgNum));
$hd->serialUInt32 ($this->MsgNum); // number the packet
$this->MsgNum += 1;
debug(sprintf("After SendMessage, number %u<br>", $this->MsgNum));
$messageType = 0;
$hd->serialUInt8 ($messageType);
$hd->serialString ($message->MsgName);
debug(sprintf ("sendMessage : header size is '%d'<br>\n", $hd->Pos));
// $sb .= $message->Buffer;
$size = $hd->Pos + $message->Pos;
$Buffer = (string) chr(($size>>24)&0xFF);
$Buffer .= chr(($size>>16)&0xFF);
$Buffer .= chr(($size>>8)&0xFF);
$Buffer .= chr($size&0xFF);
debug( "E".gettype($hd->Buffer)."<br>");
debug("F".gettype($message->Buffer)."<br>");
$Buffer .= (string) $hd->Buffer;
$Buffer .= (string) $message->Buffer;
debug("G".gettype($this->ConSock)."<br>");
if (!fwrite ($this->ConSock, $Buffer))
{
debug(sprintf ("Error writing to socket\n"));
return false;
}
debug(sprintf ("sent packet size '%d' (written size = %d) <br>\n", strlen($Buffer), $size));
fflush ($this->ConSock);
return true;
}
function waitMessage()
{
if (!$this->ConSock)
{
debug(sprintf ("Socket is not valid\n"));
return false;
}
$size = 0;
$val = fread ($this->ConSock, 1);
$info = stream_get_meta_data($this->ConSock);
if ($info['timed_out'])
{
debug('Connection timed out!');
return false;
}
$size = ord($val) << 24;
$val = fread ($this->ConSock, 1);
$info = stream_get_meta_data($this->ConSock);
if ($info['timed_out'])
{
debug('Connection timed out!');
return false;
}
$size = ord($val) << 16;
$val = fread ($this->ConSock, 1);
$info = stream_get_meta_data($this->ConSock);
if ($info['timed_out'])
{
debug('Connection timed out!');
return false;
}
$size += ord($val) << 8;
$val = fread ($this->ConSock, 1);
$info = stream_get_meta_data($this->ConSock);
if ($info['timed_out'])
{
debug('Connection timed out!');
return false;
}
$size += ord($val);
debug(sprintf ("receive packet size '%d'<br>\n", $size));
$fake = fread ($this->ConSock, 5);
$info = stream_get_meta_data($this->ConSock);
if ($info['timed_out'])
{
debug('Connection timed out!');
return false;
}
$size -= 5; // remove the fake
$Buffer = "";
while ($size > 0 && strlen($Buffer) != $size)
{
$Buffer .= fread ($this->ConSock, $size - strlen($Buffer));
$info = stream_get_meta_data($this->ConSock);
if ($info['timed_out'])
{
debug('Connection timed out!');
return false;
}
}
$msgin = new CMemStream;
$msgin->setBuffer ($Buffer);
// decode msg name
$msgin->serialString($name);
debug(sprintf("Message name = '%s'<BR>", $name));
$message = new CMessage;
$message->setBuffer(substr($msgin->Buffer, $msgin->Pos));
$message->setName($name);
debug(sprintf("In message name = '%s'<br>", $message->MsgName));
return $message;
}
}
?>

@ -0,0 +1,25 @@
<?php
include_once(dirname(__DIR__).'/../config.php');
function getDomainInfo($domainId)
{
global $DBHost, $DBUserName, $DBPassword, $DBName;
$link = mysqli_connect($DBHost, $DBUserName, $DBPassword) or die("can't connect to nel db");
mysqli_select_db ($link, $DBName) or die("can't select nel db");
$domainId = (int)$domainId;
$query = "SELECT * FROM domain WHERE domain_id = $domainId";
$result = mysqli_query($link, $query) or die("query ($query) failed");
if (mysqli_num_rows($result) == 0)
{
die("Can't find row for domain ".$domainId);
}
$domainInfo = mysqli_fetch_array($result);
return $domainInfo;
}
?>

@ -0,0 +1,249 @@
<?php
include_once('validate_cookie.php');
include_once('domain_info.php');
include_once('ring_session_manager_itf.php');
class JoinShardCb extends CRingSessionManagerWeb
{
/**
* Join the specified shard
*/
function joinSessionResult($userId, $sessionId, $result, $shardAddr, $participantStatus)
{
global $JoinSessionResultCode, $JoinSessionResultMsg;
$JoinSessionResultCode = $result;
$JoinSessionResultMsg = $shardAddr;
if ($result != 0)
{
global $FSHostLuaMode, $FSHostResult, $FSHostResultStr;
$FSHostResult = 0;
$FSHostResultStr = "Error ".$result." : '".$shardAddr."' while trying to join a shard";
if ($FSHostLuaMode)
{
echo $FSHostResultStr;
echo '<p><p><a href="web_start.php">Back to menu</a>';
}
}
else
{
// ok, we have the info to connect !
// generate the lua script
$cookie=convertCookieForActionHandler($_COOKIE["ryzomId"]);
global $FSHostLuaMode, $FSHostResult, $FSHostResultStr;
$FSHostResult = 1;
$FSHostResultStr = $shardAddr;
if ($FSHostLuaMode)
{
$luaScript='runAH(nil, "on_connect_to_shard", "cookie='.$cookie.'|fsAddr='.$shardAddr.'")';
//echo 'luaScript : '.$luaScript.'<br>';
echo '<lua>'.$luaScript.'</lua>';
global $verbose;
if ($verbose)
echo '<br>Teleporting to shard<br>';
}
}
}
/**
* Receive the result of the shard list, then call the global $getShardListCallback with the associative array as argument
*/
function getShardsResult($userId, $resultStr)
{
global $getShardListCallback;
$onlineShardsBySessionId = array();
$resultArray = split(';', $resultStr);
foreach ($resultArray as $shardInfo)
{
$shardAttr = split(',', $shardInfo);
if (isset($shardAttr[1]))
$onlineShardsBySessionId[$shardAttr[0]] = $shardAttr[1];
}
$getShardListCallback($onlineShardsBySessionId);
}
}
// External use
$FSHostLuaMode = false;
$FSHostResultStr = 0;
// Internal use
$verbose = true;
$FSHostResult = 0;
// THE ABOVE DECLARATIONS ARE NEEDED FOR ALL CODE BELOW THIS LINE
if (isset($_POST["ml"]))
joinMainlandPost();
if (isset($_POST["destSessionId"]))
joinShardFromIdPost($_POST["destSessionId"]);
/**
* Authenticate and request to join a mainland shard
*/
function joinMainlandPost()
{
global $FSHostLuaMode;
$FSHostLuaMode = true;
$domainId = -1;
if (!validateCookie($userId, $domainId, $charId))
{
echo "Invalid cookie !";
die();
}
else
{
joinMainland($userId, $domainId);
}
}
/**
* Authenticate and request to join the specified shard
*/
function joinShardFromIdPost( $destSessionId )
{
$domainId = -1;
if (!validateCookie($userId, $domainId, $charId))
{
echo "Invalid cookie !";
die();
}
else
{
joinShardFromId($userId, $domainId, $destSessionId);
}
}
/**
* Request to join the specified shard
*/
function joinShardFromId( $userId, $domainId, $destSessionId )
{
$domainInfo = getDomainInfo($domainId);
$addr = split(":", $domainInfo["session_manager_address"]);
$RSMHost = $addr[0];
$RSMPort = $addr[1];
// request join to the session manager
$joinShard = new JoinShardCb;
$res = "";
$joinShard->connect($RSMHost, $RSMPort, $res);
$charSlot = getCharSlot(); // if ingame (!=15), the RSM can check if this character has the right to connect to the specified shard
$charId = ($userId<<4) + $charSlot;
echo "Requesting teleportation of $charId/$userId to shard session ".$destSessionId."...<br>";
$joinShard->joinSession($charId, $destSessionId, $domainInfo["domain_name"]);
// wait the the return message
if ($joinShard->waitCallback() == false)
{
// Note: the answer is a joinSessionResult message
echo "No response from server, joinShard failed<br>";
}
exit;
}
/**
* Request to get the shard list
*/
function getShardList($userId, $domainId)
{
$domainInfo = getDomainInfo($domainId);
$addr = split(":", $domainInfo["session_manager_address"]);
$RSMHost = $addr[0];
$RSMPort = $addr[1];
// request get to the session manager
$joinShard = new JoinShardCb;
$res = "";
$joinShard->connect($RSMHost, $RSMPort, $res);
$charId = ($userId<<4)+15;
echo "Retrieving online shards for $charId...<br>";
$joinShard->getShards($charId);
// wait the the return message
if ($joinShard->waitCallback() == false)
{
echo "No response from server, getShards failed<br>";
}
exit;
}
/**
* Display the list of mainland shards
* This is a candidate to the callback $getShardListCallback
*/
function displayAllShards(&$onlineShardsBySessionId)
{
// Get the userId and domainId back
$domainId = -1;
if (!validateCookie($userId, $domainId, $charId))
{
echo "Invalid cookie !";
die();
}
// List all shards of the domain, including offline ones
global $DBName;
mysql_select_db ($DBName) or die ("Can't access to the db dbname:$DBName");
$query = "select * from shard where domain_id = $domainId";
$resShards = mysql_query ($query) or die ("Can't execute the query: ".$query." ".mysql_error());
echo "Select a shard to join:<br>";
//echo "<form name='far_tp' action='join_shard.php' method='post'>";
while ($rowShard = mysql_fetch_array($resShards))
{
$mainlandSessionId = $rowShard['FixedSessionId'];
$isOnline = isset($onlineShardsBySessionId[$mainlandSessionId]);
// Radio button not supported by Client's html component. Instead: one form (button) per shard.
//echo "<input type='radio' name='destSessionId' value='".$mainlandSessionId."' ".($isOnline?"":"disabled ")."/>".$rowShard['Name']." (".($isOnline?"online with $nbOnlinePlayers players":"offline").", version ".$rowShard['Version'].")<br>";
echo "<form name='far_tp_".$rowShard['ShardId']."' action='join_shard.php' method='post'>";
echo "<input type='hidden' name='destSessionId' value='".$mainlandSessionId."' />";
echo "<input type='hidden' name='charSlot' value='".getCharSlot()."'>";
echo " ".$rowShard['Name']." ".$rowShard['ShardId']." (".($isOnline ? $onlineShardsBySessionId[$mainlandSessionId]." online)" : "offline)");
if ($isOnline)
echo "<input type='submit' name='button' value='Teleport' />";
echo "</form><br>";
}
//echo "<input type='submit' name='button' value='Teleport' />";
//echo "</form></font>";
exit;
}
/**
* Auto-join a shard.
* Returns true in case of success, and the FSHost address in $FSHostResultStr.
* Returns false in case of error, and an explanatory string in $FSHostResultStr.
*/
function joinMainland($userId, $domainId)
{
$domainInfo = getDomainInfo($domainId);
// $addr = split(":", $domainInfo["session_manager_address"]);
$addr = explode(":", $domainInfo["session_manager_address"]);
$RSMHost = $addr[0];
$RSMPort = $addr[1];
// request get to the session manager
$joinsShard = new JoinShardCb;
$res = "";
$joinsShard->connect($RSMHost, $RSMPort, $res);
// set the shard Id to allow any character (by using the special value '15')
$charId = ($userId<<4)+15;
global $FSHostLuaMode, $verbose;
if ($FSHostLuaMode && $verbose)
echo "Joining a mainland shard for $charId...<br>";
$joinsShard->joinMainland($charId, $domainInfo["domain_name"]);
// wait the the return message
if ($joinsShard->waitCallback() == false)
{
global $FSHostResultStr;
$FSHostResultStr = "No response from server for joinMainland<br>";
return false;
}
global $FSHostResult;
return $FSHostResult;
}
?>

@ -0,0 +1,108 @@
<?php
/////////////////////////////////////////////////////////////////
// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
require_once('tools/nel_message.php');
class CLoginServiceWeb extends CCallbackClient
{
function login($userId, $ipAddress, $domainId)
{
$msg = new CMessage;
$msg->setName("LG");
$msg->serialUint32($userId);
$msg->serialString($ipAddress);
$msg->serialUint32($domainId);
return parent::sendMessage($msg);
}
function logout($userId)
{
$msg = new CMessage;
$msg->setName("LO");
$msg->serialUint32($userId);
return parent::sendMessage($msg);
}
function waitCallback()
{
$message = parent::waitMessage();
if ($message == false)
return false;
switch($message->MsgName)
{
case "LGR":
$this->loginResult_skel($message);
break;
case "LGOR":
$this->logoutResult_skel($message);
break;
default:
return false;
}
return true;
}
function loginResult_skel(&$message)
{
$message->serialUint32($userId);
$message->serialString($cookie);
$message->serialUint32($resultCode);
$message->serialString($errorString);
$this->loginResult($userId, $cookie, $resultCode, $errorString);
}
function logoutResult_skel(&$message)
{
$message->serialUint32($errorCode);
$message->serialString($reason);
$this->logoutResult($errorCode, $reason);
}
/////////////////////////////////////////////////////////////////
// Copy paste this part of code in your derived class
// and implement code to ract to incoming message
/////////////////////////////////////////////////////////////////
// Return the cookie generated for this user session
// Eventualy, return an empty string as cookie in case of error
// resultCode : 0 - ok, login success
// 1 - invalid user
// 2 - user already online, must relog
// errorString contain a stringified description in case of error
function loginResult($userId, $cookie, $resultCode, $errorString)
{
}
// Return an error code for the logout attemp
// If return is not 0, then reason contains a debug string
// Return values : 0 - ok
// 1 - invalid user
// 2 - user already offline
function logoutResult($errorCode, $reason)
{
}
}
?>

@ -0,0 +1,310 @@
<?php
/*
* Message tables.
* Each msg can contain %0..%n arguments (see also errorMsg()).
* %0 contains the error code passed to errorMsg(), even if the text is factorized in another message linked with 'lnk'.
*/
$ErrMsgs = array();
// Generic error message
define('GENERIC_ERROR_NUM', 1000);
$ErrMsgs[1000]['dbg'] = 'Generic login error';
$ErrMsgs[1000]['en'] = 'Error';
$ErrMsgs[1000]['fr'] = 'Erreur';
$ErrMsgs[1000]['de'] = 'Error';
// Common public error messages
$msgMisconfiguredClient['en'] = 'Your client might be misconfigured, please contact support';
$msgMisconfiguredClient['fr'] = 'Il se peut que votre client soit mal configuré, merci de contacter le service client';
$msgMisconfiguredClient['de'] = 'Dein Client ist möglicherweise falsch konfiguriert, bitte kontaktiere den Support';
$msgOutOfDateClient['en'] = 'This client software is out of date, please visit www.ryzom.com to download a new client';
$msgOutOfDateClient['fr'] = 'Ce logiciel client est trop ancien, merci de télécharger un nouveau client sur www.ryzom.com';
$msgOutOfDateClient['de'] = 'Die Software ist nicht mehr aktuell bitte geh auf www.ryzom.com und lade dir den neuen Client herunter';
$msgLSInMaintenance['en'] = 'The log-in server is in maintenance, please try later';
$msgLSInMaintenance['fr'] = 'Le serveur de connexion est en maintenance, merci de réessayer plus tard';
$msgLSInMaintenance['de'] = 'Der Login-Server ist wegen Wartungsarbeiten offline, bitte versuch es später nochmal';
$msgDBInMaintenance['en'] = 'The database server is in maintenance, please try later';
$msgDBInMaintenance['fr'] = 'Le serveur de base de données est en maintenance, merci de réessayer plus tard';
$msgDBInMaintenance['de'] = 'Der Datenbank-Server ist wegen Wartungsarbeiten offline, bitte versuch es später nochmal';
$msgGameServersClosed['en'] = 'Game servers are currently closed or restricted, please retry later';
$msgGameServersClosed['fr'] = 'Les serveurs de jeu sont actuellement fermés ou à accès restreint, merci de réessayer plus tard';
$msgGameServersClosed['de'] = 'Die Spiel-Server sind momentan geschlossen oder gesperrt, bitte versuch es später nochmal';
/*
* Main account error messages:
*/
$ErrMsgs[2001]['dbg'] = '(in %2)';
$ErrMsgs[2001]['en'] = 'Invalid account: %1'; // ex 52 and 64
$ErrMsgs[2001]['fr'] = 'Compte erroné : %1';
$ErrMsgs[2001]['de'] = 'Ungültiger Account: %1';
$ErrMsgs[2001]['log'] = false;
$ErrMsgs[2002]['en'] = "Your account must be activated first. Please read the email sent to %1.";
$ErrMsgs[2002]['fr'] = "Votre compte doit d'abord être activé. Merci de lire l'e-mail envoyé à %1.";
$ErrMsgs[2002]['de'] = "Dein Account muss noch aktiviert werden. Bitte befolge die Anweisungen, die wir per Mail an %1 geschickt haben.";
$ErrMsgs[2002]['log'] = false;
$ErrMsgs[2003]['en'] = "Your account must be activated first. Please read the email that has been sent to you.";
$ErrMsgs[2003]['fr'] = "Votre compte doit d'abord être activé. Merci de lire l'e-mail que nous vous avons envoyé.";
$ErrMsgs[2003]['de'] = "Dein Account muss noch aktiviert werden. Bitte befolge die Anweisungen, die wir per Mail an Dich geschickt haben.";
$ErrMsgs[2003]['log'] = false;
$ErrMsgs[2004]['dbg'] = '(in %2)'; // user => ex 56; signup_data => ex 56B
$ErrMsgs[2004]['en'] = "Invalid password";
$ErrMsgs[2004]['fr'] = "Mot de passe erroné";
$ErrMsgs[2004]['de'] = "Falsches Passwort";
$ErrMsgs[2004]['log'] = false;
// Translated Login Service error messages
define('BASE_TRANSLATED_LS_ERROR_NUM', 2100);
$ErrMsgs[2101]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2101]['en'] = 'Invalid account'; // ex 1?: 'invalid user'
$ErrMsgs[2101]['fr'] = 'Compte erroné';
$ErrMsgs[2101]['de'] = 'Ungültiger Account';
$ErrMsgs[2102]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2102]['en'] = 'Your account is already in online state, please retry in a few seconds'; // ex 2: 'User already online, please relog'
$ErrMsgs[2102]['fr'] = "Votre compte est encore dans l'état en ligne, merci de réessayer dans quelques secondes";
$ErrMsgs[2102]['de'] = 'Dein Account ist schon als online gekennzeichnet, bitte versuche es in ein paar Sekunden nochmals';
$ErrMsgs[2102]['log'] = false;
$ErrMsgs[2103]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2103]['en'] = 'Dual logging with a Privileged account is not permitted; this action has been logged and Gameforge CS has been notified';
$ErrMsgs[2103]['fr'] = 'TODO';
$ErrMsgs[2103]['de'] = 'TODO';
$ErrMsgs[2103]['mail'] = array('duallog@ryzom.com', "Dual Logging with GM account detected",
"UserId %3 attempted to log-in while related account (linked through GMId) was in online state (error code %0).\n".
"Message from server: %2\n".
"This could be a false positive if the user just disconnected without waiting for 30 s, and tried to log-in with their other account.");
$ErrMsgs[2104]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2104]['lnk'] = $ErrMsgs[2103];
$ErrMsgs[2105]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2105]['lnk'] = $ErrMsgs[2101];
$ErrMsgs[2106]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2106]['lnk'] = $msgDBInMaintenance;
/*
* Technical error messages:
* "visible" error messages (server down, etc.) are localized,
* unlike errors that should never occur (ex: bad parameters from client)
*/
define('BASE_TECHNICAL_ERROR_NUM', 3000);
$ErrMsgs[3001]['dbg'] = 'Failed to find a ring domain record for domainId: %1';
$ErrMsgs[3002]['dbg'] = 'Missing cmd';
$ErrMsgs[3003]['dbg'] = 'No response from Shard Unifier';
$ErrMsgs[3003]['lnk'] = $msgLSInMaintenance;
$ErrMsgs[3004]['dbg'] = "Can't connect to the %1 db server host:%2 user:%3";
$ErrMsgs[3004]['lnk'] = $msgDBInMaintenance;
$ErrMsgs[3005]['dbg'] = "Can't access the %1 database db:%2 host:%3 user:%4 (check privileges)";
$ErrMsgs[3005]['lnk'] = $msgDBInMaintenance;
$ErrMsgs[3006]['dbg'] = "Can't execute query '%1' on the %2 database db:%3 host:%4 user:%5 error:%6";
$ErrMsgs[3006]['lnk'] = $msgDBInMaintenance;
$ErrMsgs[3007]['dbg'] = "Can't find domain: %1"; // ex 'x'
$ErrMsgs[3007]['lnk'] = $msgMisconfiguredClient;
$ErrMsgs[3007]['add'] = 'dbg';
$ErrMsgs[3008]['dbg'] = "Login '%1' was created because it was not found in database"; // ex 50
$ErrMsgs[3009]['dbg'] = "Can't fetch login '%1' after insertion"; // ex 51
$ErrMsgs[3010]['dbg'] = "No permission found, but I need to accept Unknown user, so permission created, please RELOG";
$ErrMsgs[3011]['dbg'] = "(client application: %1 domain: %2)"; // ex 53
$ErrMsgs[3011]['en'] = "Your account needs a proper subscription to connect";
$ErrMsgs[3011]['fr'] = "Votre compte doit avoir un abonnement actif pour se connecter";
$ErrMsgs[3011]['de'] = 'Du kannst dich nicht ohne abgeschlossenes Abonemment in deinen Account einloggen';
$ErrMsgs[3011]['add'] = 'dbg';
$ErrMsgs[3011]['log'] = false;
$ErrMsgs[3012]['dbg'] = "No access privilege found for %1, but I need to accept Unknown user, so permission created, RELOG";
$ErrMsgs[3013]['dbg'] = "(client application: %1 domain: %2 reqPriv: %3)";
$ErrMsgs[3013]['en'] = "You don't have sufficient privilege to connect now, please try later";
$ErrMsgs[3013]['fr'] = "Vous n'avez pas les privilèges nécessaires pour vous connecter maintenant, veuillez essayer plus tard";
$ErrMsgs[3013]['de'] = 'Du hast nicht die nötigen Rechte um dich jetzt zu verbinden, bitte versuch es später nochmal';
$ErrMsgs[3013]['log'] = false;
// Translated Ring Session Manager (joinSession) error messages
define('BASE_TRANSLATED_RSM_ERROR_NUM', 4000);
$ErrMsgs[4001]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4002]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4003]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4004]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4005]['dbg'] = '(joinSession error %1: %2 for userId %3)';
$ErrMsgs[4005]['lnk'] = $msgGameServersClosed;
$ErrMsgs[4006]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4007]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4008]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4009]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4010]['dbg'] = '(joinSession error %1: %2 for userId %3)';
$ErrMsgs[4010]['lnk'] = $msgGameServersClosed;
$ErrMsgs[4011]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4012]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4013]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4014]['dbg'] = '(joinSession error %1: %2 for userId %3)';
$ErrMsgs[4014]['lnk'] = $msgGameServersClosed;
$ErrMsgs[4015]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4016]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4017]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4018]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4019]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4020]['dbg'] = 'joinSession error %1: %2 for userId %3';
$MsgLanguages = array('en');
$DisplayDbg = true;
/**
* Whenever a language information is known, use this method to refine the language used for error messages.
* Accepted values:
* 'en', 'fr', 'de', array of this values, or 'all' ('all' will display all versions)
*/
function setMsgLanguage($languages='en')
{
global $MsgLanguages;
if ($languages == 'all')
{
$MsgLanguages = $languages;
return;
}
if (!is_array($languages))
$languages = array($languages);
foreach ($languages as $index => $lg)
{
switch ($lg)
{
case 'fr':
case 'de':;
break;
default:
$languages[$index] = 'en';
}
}
$MsgLanguages = $languages;
}
/**
* Find the specified error message, and return the first found with the following precedence:
* 1. Current language(s) set by setMsgLangage()
* 2. English message
* 3. Debug message
* 4. Generic error
* Each language can be found through ['lnk'] if needed
* Tags (%1..%n) in the message are replaced by mixed arguments specified after $errNum.
* Ex: errorMsg(55, $domainName)
* if 'dbg' is found in ['add'] or $DisplayDbg is true, the 'dbg' version is appended to the found version.
*/
function errorMsg($errNum=GENERIC_ERROR_NUM) // $mixedArgs
{
// Find specified message using precedence rules
global $MsgLanguages;
$precedence = array(
array($errNum, ($MsgLanguages == 'all') ? array('en', 'fr', 'de') : $MsgLanguages),
array($errNum, array('en')),
array($errNum, array('dbg')),
array(GENERIC_ERROR_NUM, $MsgLanguages),
array(GENERIC_ERROR_NUM, array('en')));
global $ErrMsgs;
$args = func_get_args();
$msg = '';
foreach ($precedence as $rule)
{
// Find message
list($actualErrNum, $languages) = $rule;
foreach ($languages as $lg)
{
if (isset($ErrMsgs[$actualErrNum][$lg]) && ($ErrMsgs[$actualErrNum][$lg] != 'TODO'))
appendToMsg($msg, $errNum, $ErrMsgs[$actualErrNum][$lg], $args);
else if (isset($ErrMsgs[$actualErrNum]['lnk']) && isset($ErrMsgs[$actualErrNum]['lnk'][$lg]) && ($ErrMsgs[$actualErrNum]['lnk'][$lg] != 'TODO'))
appendToMsg($msg, $errNum, $ErrMsgs[$actualErrNum]['lnk'][$lg], $args);
}
// Try next rule only if not found
if (!empty($msg))
break;
}
// Add debug version if needed
global $DisplayDbg;
$msgHasDebug = in_array('dbg', $languages);
$logExtMsg = '';
if ((!$msgHasDebug) && isset($ErrMsgs[$actualErrNum]['dbg']))
{
if ($DisplayDbg || (isset($ErrMsgs[$actualErrNum]['add']) && ($ErrMsgs[$actualErrNum]['add'] == 'dbg')))
$msg .= '['.$ErrMsgs[$actualErrNum]['dbg']."]\n"; // to result/screen message
else
$logExtMsg .= '['.$ErrMsgs[$actualErrNum]['dbg'].']'; // to log message
}
// Get mail data if specified
$mailData = (isset($ErrMsgs[$actualErrNum]['mail']) ? $ErrMsgs[$actualErrNum]['mail'] :
(isset($ErrMsgs[$actualErrNum]['lnk']['mail']) ? $ErrMsgs[$actualErrNum]['lnk']['mail'] :
array()));
// Apply params if applicable
$numArgs = func_num_args();
if ($numArgs > 1)
{
for ($i=0; $i!=$numArgs; ++$i) // include $errNum (%0)
{
$msg = str_replace("%$i", $args[$i], $msg);
$logExtMsg = str_replace("%$i", $args[$i], $logExtMsg);
$mIdx = 0;
foreach ($mailData as $field)
{
$mailData[$mIdx] = str_replace("%$i", $args[$i], $field);
++$mIdx;
}
}
}
// Log technical errors if possible
$logMode = (isset($ErrMsgs[$actualErrNum]['log']) ? $ErrMsgs[$actualErrNum]['log'] :
(isset($ErrMsgs[$actualErrNum]['lnk']['log']) ? $ErrMsgs[$actualErrNum]['lnk']['log'] :
true));
if ($logMode && class_exists('CWwwLog'))
{
$logFile = new CWwwLog();
$logFile->logStr(/*$msg.*/$logExtMsg); // message is already logged by ob_callback_r2login()
}
return $msg;
}
// Helper for errorMsg()
function appendToMsg(&$msg, $errNum, $str, &$args)
{
$msg .= "$str ($errNum)";
if (($errNum == GENERIC_ERROR_NUM) && !empty($args))
{
foreach ($args as $arg)
{
$msg .= " [$arg]"; // display all passed args if returning the default generic error
}
}
$msg .= "\n";
}
?>

@ -0,0 +1,52 @@
<?php
function _e($value) {
global $RingDb;
return mysqli_real_escape_string($RingDb->db, $value);
}
class LoginDB {
function __construct($DBHost, $DBUserName, $DBPassword, $DefaultDBName) {
$this->host = $DBHost;
$this->user = $DBUserName;
$this->pass = $DBPassword;
$this->default_name = $DefaultDBName;
return $this->connect();
}
function connect() {
$this->db = mysqli_connect($this->host, $this->user, $this->pass) or die(errorMsgBlock(3004, 'DB', $this->host, $this->user));
return $this->db;
}
function select($db='') {
if ($db)
$this->name = $db;
else
$this->name = $this->default_name;
mysqli_select_db($this->db, $this->name) or die(errorMsgBlock(3005, 'DB', $this->name, $this->host, $this->user));
}
function query($query) {
$result = mysqli_query($this->db, $query) or die(errorMsgBlock(3006, $query, 'DB', $this->name, $this->host, $this->user, mysqli_error($this->db)));
$ret = array();
if (!is_bool($result)) {
while ($row = mysqli_fetch_array($result))
$ret[] = $row;
}
return $ret;
}
function querySingle($query) {
$result = mysqli_query($this->db, $query) or die(errorMsgBlock(3006, $query, 'DB', $this->name, $this->host, $this->user, mysqli_error($this->db)));
if (mysqli_num_rows($result))
return mysqli_fetch_array($result);
return array();
}
function getLastId() {
return mysqli_insert_id($this->db);
}
}

@ -0,0 +1,56 @@
<?php
class ServerDomain {
function __construct($db, $clientApplication) {
$this->db = $db;
$this->db->select();
$this->domainInfo = $this->db->querySingle('SELECT * FROM domain WHERE domain_name = "'._e($clientApplication).'"');
if (!$this->domainInfo)
die('Can\'t find row for domain '.$clientApplication);
$this->id = $this->domainInfo['domain_id'];
$this->shardInfo = $this->db->querySingle('SELECT * FROM shard WHERE domain_id = "'.$this->id.'"');
if (!$this->shardInfo)
die('Can\'t find row for shard '.$clientApplication);
$this->domainInfo['shard'] = $this->shardInfo;
return $this->domainInfo;
}
function get($info) {
return $this->domainInfo[$info];
}
function getShard($info) {
return $this->domainInfo['shard'][$info];
}
function checkStatus($status, $User) {
$error = '';
if ($status == 'ds_close')
$error = '0:Reboot sequence...';
else if ($status == 'ds_dev' && strstr($User->priv, ':DEV:') == false)
$error = '0:You are not allowed to connect now, retry later';
else if ($status == 'ds_restricted') {
if ( strstr($User->priv, ':DEV:') == false
&& strstr($User->priv, ':SGM:') == false
&& strstr($User->priv, ':GM:') == false
&& strstr($User->priv, ':EM:') == false
&& strstr($User->priv, ':EG:') == false
&& strstr($User->priv, ':TEST:') == false
) {
$error = '0: Reboot sequence...'."\n\n";
$error .= 'The server has been rebooted. The Ryzom Team are carefully inspecting the shard to get it ready for you.'."\n\n";
$error .= 'Le serveur a été redémarré. L\'équipe de Ryzom est en train de le vérifier méticuleusement et le prépare pour vous.'."\n\n";
$error .= 'Der Server wurde neu gestartet. Das Ryzom-Team führt eine ausführliche Überprüfung des Servers durch, um ihn für Dich vorzubereiten!'."\n\n";
$error .= 'El servidor va a reiniciar. El equipo de Ryzom está revisando suavemente el servidor y preparándolo para ti!'."\n\n";
}
}
if ($error) {
echo iconv('UTF-8', 'ISO-8859-1', $error);
die();
}
}
}

@ -0,0 +1,48 @@
<?php
class LoginCb extends CLoginServiceWeb {
function init($db, $ServerDomain) {
$this->db = $db;
$this->domainInfo = $ServerDomain->domainInfo;
$this->domainId = $ServerDomain->id;
}
// receive the login result sent back by the LS
function loginResult($userId, $cookie, $resultCode, $errorString) {
if ($resultCode == 0 && $cookie != '') {
// gather the domain informations (server version, patch urls and backup patch url
$RingWebHost = $this->domainInfo['web_host'];
$RingWebHostPHP = $this->domainInfo['web_host_php'];
// set the cookie
setcookie('ryzomId' , $cookie, 0, '/');
$_COOKIE['ryzomId'] = $cookie; // make it available immediately
// Auto-join an available mainland shard
global $FSHostLuaMode, $FSHostResultStr;
$FSHostLuaMode = false;
$res = joinMainland($userId, $this->domainId, $this->domainInfo['domain_name']);
if ($res) {
// return the cookie to the user, il will then be used as an auth to browse the site and to connect to the shard
//echo "1#".$cookie."#http://".$RingWebHost."/ring/web_start.php\n";
// use this line to use woopra stats
// echo "1#".$cookie."#".$FSHostResultStr."#http://".$RingWebHost."/ring/web_start.php#http://".$RingWebHostPHP."/ring/#1\n";
echo '1#'.$cookie.'#'.$FSHostResultStr.'#http://'.$RingWebHost.'/ring/web_start.php#http://'.$RingWebHostPHP.'/ring/'."\n";
// return the ring domain information
echo $this->domainInfo['patch_version'].'#'.$this->domainInfo['backup_patch_url'].'#'.$this->domainInfo['patch_urls'];
} else {
global $JoinSessionResultCode, $JoinSessionResultMsg;
echo errorMsgBlock(BASE_TRANSLATED_RSM_ERROR_NUM + $JoinSessionResultCode, $JoinSessionResultCode, $JoinSessionResultMsg, $userId);
}
} else {
// empty cookie, this mean the user id can't be validated by the LS
echo errorMsgBlock(BASE_TRANSLATED_LS_ERROR_NUM + $resultCode, $resultCode, $errorString, $userId);
}
}
}

@ -0,0 +1,68 @@
<?php
///////////////////////////////////////////////////////
class CWwwLog {
//function CWwwLog() {}
/*
* Return the log directory. Create it if it does not exist, or return false if creation failed.
*/
function getSafeLogDir() {
$LogRelativePath = '/log';
$pathInfo = pathinfo(__FILE__);
$logPath = $pathInfo['dirname'].$LogRelativePath;
if (!is_dir($logPath))
{
$res = mkdir($LogPath, 0700);
return $res ? $logPath : false;
}
return $logPath;
}
function logStr($str) {
}
}
///////////////////////////////////////////////////////
// see errorMsg
function errorMsgBlock($errNum=GENERIC_ERROR_NUM) // $mixedArgs
{
$args = func_get_args();
return '0:'.call_user_func_array('errorMsg', $args);
}
///////////////////////////////////////////////////////
// Callback called on end of output buffering
function ob_callback_r2login($buffer)
{
// Log only in case of error or malformed result string
$blockHd = substr($buffer, 0, 2);
if ($blockHd != '1:')
{
$logFile = new CWwwLog();
$logFile->logStr(str_replace("\n",'\n',$buffer));
}
return $buffer; // sent to output
}
///////////////////////////////////////////////////////
// Callback called on error
function err_callback($errno, $errmsg, $filename, $linenum, $vars)
{
// don't log "PHP ERROR/2048 Only variables should be passed by reference"
if($errno == 2048) return;
$logFile = new CWwwLog();
$logFile->logStr("PHP ERROR/$errno $errmsg ($filename:$linenum)");
// Never die after an error
}
function dieError($errNum=GENERIC_ERROR_NUM) // $mixedArgs
{
$args = func_get_args();
die('0:'.call_user_func_array('errorMsg', $args));
}

@ -0,0 +1,108 @@
<?php
class RingUser {
function __construct($db, $login, $password, $clientApplication, $submittedLang) {
global $AcceptUnknownUser;
$this->db = $db;
$this->login = $login;
$this->password = $password;
$this->lang = $submittedLang;
$this->client = $clientApplication;
$this->db->select();
$this->user = $this->db->querySingle('SELECT * FROM user WHERE Login="'._e($this->login).'"');
if ($this->user) {
$this->uid = $this->user['UId'];
} else {
if ($AcceptUnknownUser && $this->password) {
$this->db->query('INSERT INTO user SET Login = "'._e($this->login).'", Password = "'._e($this->password).'", ShardId=-1, Privilege=":DEV:"');
$this->user = $this->db->querySingle('SELECT * FROM user WHERE Login="'._e($this->login).'"');
$this->uid = $this->user['UId'];
} else {
$this->uid = 0;
$this->user = array('Password' => 'AA');
}
}
$this->authenticate = False;
setMsgLanguage($submittedLang);
}
function askSalt() {
$user = $this->user;
if ($user)
echo '1:'.substr($user['Password'], 0, 2);
else
dieError(2001, '', 'askSalt');
}
function createRingInfo($ServerDomain) {
$domainInfo = $ServerDomain->domainInfo;
$this->db->select($domainInfo['ring_db_name']);
$result = $this->db->querySingle('SELECT user_id FROM ring_users where user_id = "'._e($this->uid).'"');
if (!$result)
$this->db->query('INSERT INTO ring_users SET user_id = "'._e($this->uid).'", user_name = "'._e($this->login).'", user_type="ut_pioneer"');
}
function checkAccess() {
}
function updatePrivs($privs) {
$this->db->query('UPDATE user SET ExtendedPrivilege="'._e($privs).'" WHERE UId='._e($this->uid));
$this->user['ExtendedPrivilege'] = $privs;
}
function addPriv($priv) {
$eprivs = explode(':', $this->user['ExtendedPrivilege']);
$privs = array();
foreach ($eprivs as $p)
$privs[$p] = $p;
unset($privs['']);
$privs[$priv] = $priv;
$this->updatePrivs(':'.implode(':', array_keys($privs)).':');
}
function removePriv($priv) {
$eprivs = explode(':', $this->user['ExtendedPrivilege']);
$privs = array();
foreach ($eprivs as $p)
$privs[$p] = $p;
unset($privs['']);
unset($privs[$priv]);
$this->updatePrivs(':'.implode(':', array_keys($privs)).':');
}
function checkPermission($ServerDomain) {
$perm = $this->db->querySingle('SELECT * FROM permission WHERE UId="'._e($this->uid).'" AND ClientApplication="'._e($this->client).'"');
if (!$perm)
$this->db->query('INSERT INTO permission (UId, ClientApplication, ShardId, AccessPrivilege) VALUES ("'._e($this->uid).'", "'._e($this->client).'", "'.$ServerDomain->getShard('ShardId').'", "OPEN")');
}
function logConnection() {
}
function checkValidity($password, $ServerDomain) {
$user = $this->user;
if (!$user)
dieError(3009, $this->login);
if ($this->user['Password'] == $password) {
$this->login = $this->user['Login']; // Correct case
$this->checkAccess();
$this->checkPermission($ServerDomain);
$this->logConnection();
$this->priv = $this->user['Privilege'];
return True;
} else
dieError(2004);
return False;
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,79 @@
<?php
include_once(dirname(__DIR__).'/../config.php');
function convertCookieForActionHandler($cookie)
{
$ret = "";
for ($i = 0; $i<strlen($cookie); ++$i)
{
if ($cookie[$i] == '|')
$ret .= '_';
else
$ret .= $cookie[$i];
}
return $ret;
}
function validateCookie(&$userId, &$domainId, &$charId)
{
global $DBHost, $DBUserName, $DBPassword, $DBName, $RingDBName, $AcceptUnknownUser;
if (!isset($_COOKIE["ryzomId"]))
{
echo "Cookie not found<BR>";
return false;
}
// read the ip and compare with client ip
$cookie = $_COOKIE["ryzomId"];
echo "Cookie is $cookie<BR>";
sscanf($cookie, "%02X%02X%02X%02X", $b0, $b1, $b2, $b3);
$addr = $b0 + ($b1<<8) + ($b2<<16) + ($b3<<24);
printf("Addr is %X<BR>", $addr);
$addrStr = long2ip($addr);
echo "addrStr is $addrStr<br>";
if ($_SERVER["REMOTE_ADDR"] != $addrStr)
{
echo "Client ip don't match cookie<BR>";
return false;
}
// check the cookie in the database
$link = mysqli_connect($DBHost, $DBUserName, $DBPassword) or die ("Can't connect to database host:$DBHost user:$DBUserName");
mysqli_select_db($link, $RingDBName) or die ("Can't access to the table dbname:$RingDBName");
$query = "SELECT user_id, current_status, current_domain_id FROM ring_users where cookie='$cookie'";
$result = mysqli_query($link, $query) or die ("Can't execute the query: ".$query);
if (mysqli_num_rows($result) == 0)
{
echo "Can't find cookie $cookie in database<BR>";
return false;
}
$row = mysqli_fetch_array($result);
if ($row["current_status"] != "cs_logged" && $row["current_status"] != "cs_online" )
{
echo "User $row[user_id] is not looged or online<BR>";
return false;
}
$userId = $row["user_id"];
$domainId = $row["current_domain_id"];
// $charId = ($userId*16) + (getCharSlot()) & 0xf;
$charId = $userId*16 + getCharSlot();
return true;
}
function getCharSlot()
{
global $_GET, $_POST;
if (isset($_GET["charSlot"]))
return $_GET["charSlot"];
else if (isset($_POST["charSlot"]))
return $_POST["charSlot"];
else
return 0; // temp dev: use 0 as the "ring character"
}

@ -0,0 +1,59 @@
<?php
/////////////////////////////////////////////////////////////////
// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
$arrayCounter = 0;
$WS_TUserRole_EnumValues[$arrayCounter++] = "ur_player";
$WS_TUserRole_EnumValues[$arrayCounter++] = "ur_editor";
$WS_TUserRole_EnumValues[$arrayCounter++] = "ur_animator";
$WS_TUserRole_EnumValues[$arrayCounter] = "invalid";
$WS_TUserRole_InvalidValue = $arrayCounter;
class WS_TUserRole
{
var $Value;
function WS_TUserRole()
{
global $WS_TUserRole_InvalidValue;
$this->Value = $WS_TUserRole_InvalidValue;
}
function toString()
{
global $WS_TUserRole_EnumValues;
return $WS_TUserRole_EnumValues[$this->Value];
}
function fromString($strValue)
{
global $WS_TUserRole_EnumValues;
foreach ($WS_TUserRole_EnumValues as $k => $v)
{
if ($strValue === $v)
{
$this->Value = $k;
return;
}
}
$this->Value = $WS_TUserRole_InvalidValue;
}
function toInt()
{
return $this->Value;
}
function fromInt($intValue)
{
global $WS_TUserRole_InvalidValue;
global $WS_TUserRole_EnumValues;
if (array_key_exists($intValue, $WS_TUserRole_EnumValues))
$this->Value = $intValue;
else
$this->Value = $WS_TUserRole_InvalidValue;
}
}
?>

@ -0,0 +1,201 @@
-- phpMyAdmin SQL Dump
-- version 4.8.5
-- https://www.phpmyadmin.net/
--
-- Hôte : localhost:3306
-- Généré le : jeu. 21 fév. 2019 à 23:46
-- Version du serveur : 5.7.25-0ubuntu0.18.04.2
-- Version de PHP : 7.2.15-0ubuntu0.18.04.1
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Base de données : `nel`
--
-- --------------------------------------------------------
--
-- Structure de la table `domain`
--
CREATE TABLE `domain` (
`domain_id` int(10) UNSIGNED NOT NULL,
`domain_name` varchar(32) NOT NULL DEFAULT '',
`status` enum('ds_close','ds_dev','ds_restricted','ds_open') NOT NULL DEFAULT 'ds_dev',
`patch_version` int(10) UNSIGNED NOT NULL DEFAULT '0',
`backup_patch_url` varchar(255) DEFAULT NULL,
`patch_urls` text,
`login_address` varchar(255) NOT NULL DEFAULT '',
`session_manager_address` varchar(255) NOT NULL DEFAULT '',
`ring_db_name` varchar(255) NOT NULL DEFAULT '',
`web_host` varchar(255) NOT NULL DEFAULT '',
`web_host_php` varchar(255) NOT NULL DEFAULT '',
`description` varchar(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Structure de la table `permission`
--
CREATE TABLE `permission` (
`UId` int(10) UNSIGNED NOT NULL DEFAULT '0',
`ClientApplication` char(64) NOT NULL DEFAULT 'r2',
`ShardId` int(10) NOT NULL DEFAULT '-1',
`AccessPrivilege` set('DEV','RESTRICTED','OPEN') NOT NULL DEFAULT 'OPEN',
`prim` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- --------------------------------------------------------
--
-- Structure de la table `shard`
--
CREATE TABLE `shard` (
`ShardId` int(10) NOT NULL DEFAULT '0',
`domain_id` int(11) UNSIGNED NOT NULL DEFAULT '0',
`WsAddr` varchar(64) DEFAULT NULL,
`NbPlayers` int(10) UNSIGNED DEFAULT '0',
`Name` varchar(255) DEFAULT 'unknown shard',
`WSOnline` tinyint(1) UNSIGNED DEFAULT '0',
`ClientApplication` varchar(64) DEFAULT 'ryzom',
`Version` varchar(64) NOT NULL DEFAULT '',
`PatchURL` varchar(255) NOT NULL DEFAULT '',
`DynPatchURL` varchar(255) NOT NULL DEFAULT '',
`FixedSessionId` int(11) UNSIGNED NOT NULL DEFAULT '0',
`State` enum('ds_close','ds_dev','ds_restricted','ds_open') NOT NULL DEFAULT 'ds_dev',
`MOTD` text NOT NULL,
`prim` int(10) UNSIGNED NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='contains all shards informations for login system';
-- --------------------------------------------------------
--
-- Structure de la table `user`
--
CREATE TABLE `user` (
`UId` int(10) NOT NULL,
`Login` varchar(64) NOT NULL DEFAULT '',
`Password` varchar(13) DEFAULT NULL,
`ShardId` int(10) NOT NULL DEFAULT '-1',
`State` enum('Offline','Online') NOT NULL DEFAULT 'Offline',
`Privilege` varchar(255) DEFAULT NULL,
`GroupName` varchar(255) NOT NULL DEFAULT '',
`FirstName` varchar(255) NOT NULL DEFAULT '',
`LastName` varchar(255) NOT NULL DEFAULT '',
`Birthday` varchar(32) NOT NULL DEFAULT '',
`Gender` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
`Country` char(2) NOT NULL DEFAULT '',
`Email` varchar(255) NOT NULL DEFAULT '',
`Address` varchar(255) NOT NULL DEFAULT '',
`City` varchar(100) NOT NULL DEFAULT '',
`PostalCode` varchar(10) NOT NULL DEFAULT '',
`USState` char(2) NOT NULL DEFAULT '',
`Chat` char(2) NOT NULL DEFAULT '0',
`BetaKeyId` int(10) UNSIGNED NOT NULL DEFAULT '0',
`CachedCoupons` varchar(255) NOT NULL DEFAULT '',
`ProfileAccess` varchar(45) DEFAULT NULL,
`Level` int(2) NOT NULL DEFAULT '0',
`CurrentFunds` int(4) NOT NULL DEFAULT '0',
`IdBilling` varchar(255) NOT NULL DEFAULT '',
`Community` char(2) NOT NULL DEFAULT '--',
`Newsletter` tinyint(1) NOT NULL DEFAULT '1',
`Account` varchar(64) NOT NULL DEFAULT '',
`ChoiceSubLength` tinyint(2) NOT NULL DEFAULT '0',
`CurrentSubLength` varchar(255) NOT NULL DEFAULT '0',
`ValidIdBilling` int(4) NOT NULL DEFAULT '0',
`GMId` int(4) NOT NULL DEFAULT '0',
`ExtendedPrivilege` varchar(255) NOT NULL DEFAULT '',
`ToolsGroup` varchar(255) NOT NULL DEFAULT '',
`Unsubscribe` date DEFAULT NULL,
`SubDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`SubIp` varchar(20) NOT NULL DEFAULT '',
`SecurePassword` varchar(32) NOT NULL DEFAULT '',
`LastInvoiceEmailCheck` date DEFAULT NULL,
`FromSource` varchar(8) NOT NULL DEFAULT '',
`ValidMerchantCode` varchar(11) NOT NULL DEFAULT '',
`PBC` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Index pour les tables déchargées
--
--
-- Index pour la table `domain`
--
ALTER TABLE `domain`
ADD PRIMARY KEY (`domain_id`),
ADD UNIQUE KEY `name_idx` (`domain_name`);
--
-- Index pour la table `permission`
--
ALTER TABLE `permission`
ADD PRIMARY KEY (`prim`),
ADD KEY `UIdIndex` (`UId`);
--
-- Index pour la table `shard`
--
ALTER TABLE `shard`
ADD PRIMARY KEY (`prim`);
--
-- Index pour la table `user`
--
ALTER TABLE `user`
ADD PRIMARY KEY (`UId`),
ADD KEY `LoginIndex` (`Login`),
ADD KEY `GroupIndex` (`GroupName`),
ADD KEY `Email` (`Email`),
ADD KEY `ToolsGroup` (`ToolsGroup`),
ADD KEY `CurrentSubLength` (`CurrentSubLength`),
ADD KEY `Community` (`Community`),
ADD KEY `GMId` (`GMId`);
--
-- AUTO_INCREMENT pour les tables déchargées
--
--
-- AUTO_INCREMENT pour la table `domain`
--
ALTER TABLE `domain`
MODIFY `domain_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `permission`
--
ALTER TABLE `permission`
MODIFY `prim` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `shard`
--
ALTER TABLE `shard`
MODIFY `prim` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT pour la table `user`
--
ALTER TABLE `user`
MODIFY `UId` int(10) NOT NULL AUTO_INCREMENT;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

@ -0,0 +1,66 @@
<?php
error_reporting(E_ALL);
include_once('../../config.php');
include_once('../../libs/nel_message.php');
include_once('libs/login_translations.php');
include_once('libs/login_service_itf.php');
include_once('libs/domain_info.php');
include_once('libs/join_shard.php');
include_once('libs/r2_login_db.php');
include_once('libs/r2_login_logs.php');
include_once('libs/r2_login_logincb.php');
include_once('libs/r2_login_domain.php');
include_once('libs/r2_login_user.php');
if (!isset($_GET['cmd']))
die (errorMsgBlock(3002));
set_error_handler('err_callback');
session_start();
// For error handling, buffer all output
ob_start('ob_callback_r2login');
$submittedLang = isset($_GET['lg']) ? $_GET['lg'] : 'unknown';
$submittedLang = addslashes(substr($submittedLang, 0, 10));
$cmd = isset($_GET['cmd'])?addslashes(substr($_GET['cmd'], 0, 7)):'';
$login = isset($_GET['login'])?addslashes(substr($_GET['login'], 0, 20)):'';
$password = isset($_GET['password'])?$_GET['password']:'';
$clientApplication = isset($_GET['clientApplication'])?addslashes(substr($_GET['clientApplication'], 0, 20)):'';
// Inits
$RingDb = new LoginDB($DBHost, $RingDBUserName, $RingDBPassword, $DBName);
$User = new RingUser($RingDb, $login, $password, $clientApplication, $submittedLang);
switch($cmd) {
case 'ask':
// client ask for a login salt
$User->askSalt();
die();
case 'login':
// client sent is login info
$ServerDomain = new ServerDomain($RingDb, $clientApplication);
if ($User->checkValidity($password, $ServerDomain)) {
if ($AutoCreateRingInfo)
$User->createRingInfo($ServerDomain);
$LSaddr = explode(":", $ServerDomain->domainInfo['login_address']);
// ask for a session cookie to the login service
$Login = new LoginCb();
$Login->init($RingDb, $ServerDomain);
$res = "";
$Login->connect($LSaddr[0], $LSaddr[1], $res);
$Login->login($User->uid, $_SERVER['REMOTE_ADDR'], $ServerDomain->id);
if (!$Login->waitCallback())
die(errorMsgBlock(3003));
}
die();
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save