LotGDocker/lotgd-web/lotgd/configuration.php

452 lines
21 KiB
PHP
Raw Normal View History

2020-08-17 19:16:42 -04:00
<?php
require_once("common.php");
require_once("lib/showform.php");
require_once("lib/http.php");
// translator ready
// addnews ready
// mail ready
check_su_access(SU_EDIT_CONFIG);
tlschema("configuration");
$op = httpget('op');
$module=httpget('module');
if ($op=="save"){
include_once("lib/gamelog.php");
//loadsettings();
if ((int)httppost('blockdupemail') == 1 &&
(int)httppost('requirevalidemail') != 1) {
httppostset('requirevalidemail', "1");
output("`brequirevalidemail has been set since blockdupemail was set.`b`n");
}
if ((int)httppost('requirevalidemail') == 1 &&
(int)httppost('requireemail') != 1) {
httppostset('requireemail', "1");
output("`brequireemail has been set since requirevalidemail was set.`b`n");
}
$defsup = httppost("defaultsuperuser");
if ($defsup != "") {
$value = 0;
while(list($k, $v)=each($defsup)) {
if ($v) $value += (int)$k;
}
httppostset('defaultsuperuser', $value);
}
$tmp = stripslashes(httppost("villagename"));
if ($tmp && $tmp != $settings['villagename']) {
debug("Updating village name -- moving players");
$sql = "UPDATE " . db_prefix("accounts") . " SET location='".
httppost("villagename") . "' WHERE location='" .
addslashes($settings['villagename']) . "'";
db_query($sql);
if ($session['user']['location'] == $settings['villagename'])
$session['user']['location'] =
stripslashes(httppost('villagename'));
debug("Moving companions");
$sql = "UPDATE " . db_prefix("companions") . " SET companionlocation = '".
httppost("villagename") . "' WHERE companionlocation = '".
addslashes($settings['villagename']) . "'";
db_query($sql);
}
$tmp = stripslashes(httppost("innname"));
if ($tmp && $tmp != $settings['innname']) {
debug("Updating inn name -- moving players");
$sql = "UPDATE " . db_prefix("accounts") . " SET location='".
httppost("innname") . "' WHERE location='" .
addslashes($settings['innname']) . "'";
db_query($sql);
if ($session['user']['location'] == $settings['innname'])
$session['user']['location'] = stripslashes(httppost('innname'));
}
if (stripslashes(httppost("motditems")) != $settings['motditems']) {
invalidatedatacache("motd");
}
$post = httpallpost();
reset($post);
$old=$settings;
while (list($key,$val)=each($post)){
if (!isset($settings[$key]) ||
(stripslashes($val) != $settings[$key])) {
if (!isset($old[$key]))
$old[$key] = "";
savesetting($key,stripslashes($val));
output("Setting %s to %s`n", $key, stripslashes($val));
gamelog("`@Changed core setting `^$key`@ from `#{$old[$key]}`@ to `&$val`0","settings");
// Notify every module
modulehook("changesetting",
array("module"=>"core", "setting"=>$key,
"old"=>$old[$key], "new"=>$val), true);
}
}
output("`^Settings saved.`0");
$op = "";
httpset($op, "");
}elseif($op=="modulesettings"){
include_once("lib/gamelog.php");
if (injectmodule($module,true)){
$save = httpget('save');
if ($save!=""){
load_module_settings($module);
$old = $module_settings[$module];
$post = httpallpost();
$post = modulehook("validatesettings", $post, true, $module);
if (isset($post['validation_error'])) {
$post['validation_error'] =
translate_inline($post['validation_error']);
output("Unable to change settings:`\$%s`0",
$post['validation_error']);
} else {
reset($post);
while (list($key,$val)=each($post)){
$key = stripslashes($key);
$val = stripslashes($val);
set_module_setting($key,$val);
if (!isset($old[$key]) || $old[$key] != $val) {
output("Setting %s to %s`n", $key, $val);
// Notify modules
if($key == "villagename") {
debug("Moving companions");
$sql = "UPDATE " . db_prefix("companions") . " SET companionlocation = '".
addslashes($val) . "' WHERE companionlocation = '".
addslashes($old[$key]) . "'";
db_query($sql);
}
$oldval = "";
if (isset($old[$key])) $oldval = $old[$key];
gamelog("`@Changed module(`5$module`@) setting `^$key`@ from `#$oldval`@ to `&$val`0","settings");
modulehook("changesetting",
array("module"=>$module, "setting"=>$key,
"old"=>$oldval, "new"=>$val), true);
}
}
output("`^Module %s settings saved.`0`n", $module);
}
$save = "";
httpset('save', "");
}
if ($save == "") {
$info = get_module_info($module);
if (count($info['settings'])>0){
load_module_settings($mostrecentmodule);
$msettings=array();
while (list($key,$val)=each($info['settings'])){
if (is_array($val)) {
$v = $val[0];
$x = explode("|", $v);
$val[0] = $x[0];
$x[0] = $val;
} else {
$x = explode("|",$val);
}
$msettings[$key]=$x[0];
if (!isset($module_settings[$mostrecentmodule][$key]) &&
isset($x[1])) {
$module_settings[$mostrecentmodule][$key]=$x[1];
}
}
$msettings = modulehook("mod-dyn-settings", $msettings);
if (is_module_active($module)){
output("This module is currently active: ");
$deactivate = translate_inline("Deactivate");
rawoutput("<a href='modules.php?op=deactivate&module={$module}&cat={$info['category']}'>");
output_notl($deactivate);
rawoutput("</a>");
addnav("","modules.php?op=deactivate&module={$module}&cat={$info['category']}");
}else{
output("This module is currently deactivated: ");
$deactivate = translate_inline("Activate");
rawoutput("<a href='modules.php?op=activate&module={$module}&cat={$info['category']}'>");
output_notl($deactivate);
rawoutput("</a>");
addnav("","modules.php?op=activate&module={$module}&cat={$info['category']}");
}
rawoutput("<form action='configuration.php?op=modulesettings&module=$module&save=1' method='POST'>",true);
addnav("","configuration.php?op=modulesettings&module=$module&save=1");
tlschema("module-$module");
showform($msettings,$module_settings[$mostrecentmodule]);
tlschema();
rawoutput("</form>",true);
}else{
output("The %s module does not appear to define any module settings.", $module);
}
}
}else{
output("I was not able to inject the module %s. Sorry it didn't work out.", htmlentities($module, ENT_COMPAT, getsetting("charset", "ISO-8859-1")));
}
}
page_header("Game Settings");
require_once("lib/superusernav.php");
superusernav();
addnav("Module Manager", "modules.php");
if ($module) {
$cat = $info['category'];
addnav(array("Module Category - `^%s`0", translate_inline($cat)), "modules.php?cat=$cat");
}
addnav("Game Settings");
addnav("Standard settings", "configuration.php");
addnav("",$REQUEST_URI);
module_editor_navs('settings', 'configuration.php?op=modulesettings&module=');
if ($op == "") {
$enum="enumpretrans";
require_once("lib/datetime.php");
$details = gametimedetails();
$offset = getsetting("gameoffsetseconds",0);
for ($i=0;$i<=86400 / getsetting("daysperday",4);$i+=300){
$off = ($details['realsecstotomorrow'] - ($offset - $i));
if ($off < 0) $off += 86400;
$x = strtotime("+".$off." secs");
$str = sprintf_translate("In %s at %s (+%s)",
reltime($x), date("h:i a", $x),date("H:i",$i));
$enum.=",$i,$str";
}
rawoutput(tlbutton_clear());
$setup = array(
"Game Setup,title",
"loginbanner"=>"Login Banner (under login prompt: 255 chars)",
"maxonline"=>"Max # of players online (0 for unlimited), int",
"allowcreation"=>"Allow creation of new characters,bool",
"gameadminemail"=>"Admin Email",
"emailpetitions"=>"Should submitted petitions be emailed to Admin Email address?,bool",
"Enter languages here like this: `i(shortname 2 chars) comma (readable name of the language)`i and continue as long as you wish,note",
"serverlanguages"=>"Languages available on this server",
"defaultlanguage"=>"Default Language,enum,".getsetting("serverlanguages","en,English,fr,Fran<61>ais,dk,Danish,de,Deutsch,es,Espa<70>ol,it,Italian"),
"edittitles"=>"Should DK titles be editable in user editor,bool",
"motditems"=>"How many items should be shown on the motdlist,int",
"Main Page Display,title",
"homeskinselect"=>"Should the skin selection widget be shown?,bool",
"homecurtime"=>"Should the current realm time be shown?,bool",
"homenewdaytime"=>"Should the time till newday be shown?,bool",
"homenewestplayer"=>"Should the newest player be shown?,bool",
"defaultskin"=>"What skin should be the default?,theme",
"impressum"=>"Tell the world something about the person running this server. (e.g. name and address),textarea",
"Beta Setup,title",
"beta"=>"Enable beta features for all players?,bool",
"betaperplayer"=>"Enable beta features per player?,bool",
"Account Creation,title",
"defaultsuperuser"=>
"Flags automatically granted to new players,bitfield," .
($session['user']['superuser'] | SU_ANYONE_CAN_SET)." ,".
SU_INFINITE_DAYS.",Infinite Days,".
SU_VIEW_SOURCE.",View Source Code,".
SU_DEVELOPER.",Developer Super Powers (special inc list; god mode; auto defeat master; etc),".
SU_DEBUG_OUTPUT. ",Debug Output",
"newplayerstartgold"=>"Amount of gold to start a new character with,int",
"maxrestartgold"=>"Maximum amount of gold a player will get after a dragonkill,int",
"maxrestartgems"=>"Maximum number of gems a player will get after a dragonkill,int",
"requireemail"=>"Require users to enter their email address,bool",
"requirevalidemail"=>"Require users to validate their email address,bool",
"blockdupeemail"=>"One account per email address,bool",
"spaceinname"=>"Allow spaces in user names,bool",
"allowoddadminrenames"=>"Allow admins to enter 'illegal' names in the user editor,bool",
"selfdelete"=>"Allow player to delete their character,bool",
"Commentary/Chat,title",
"soap"=>"Clean user posts (filters bad language and splits words over 45 chars long),bool",
"maxcolors"=>"Max # of color changes usable in one comment,range,5,40,1",
"postinglimit"=>"Limit posts to let one user post only up to 50% of the last posts (else turn it off),bool",
"Place names and People names,title",
"villagename"=>"Name for the main village",
"innname"=>"Name of the inn",
"barkeep"=>"Name of the barkeep",
"barmaid"=>"Name of the barmaid",
"bard"=>"Name of the bard",
"clanregistrar"=>"Name of the clan registrar",
"deathoverlord"=>"Name of the death overlord",
"Referral Settings,title",
"refereraward"=>"How many points will be awarded for a referral?,int",
"referminlevel"=>"What level does the referral need to reach to credit the referer?,int",
"Random events,title",
"forestchance"=>"Chance for Something Special in the Forest,range,0,100,1",
"villagechance"=>"Chance for Something Special in any village,range,0,100,1",
"innchance"=>"Chance for Something Special in the Inn,range,0,100,1",
"gravechance"=>"Chance for Something Special in the Graveyard,range,0,100,1",
"gardenchance"=>"Chance for Something Special in the Gardens,range,0,100,1",
"Paypal,title",
"paypalemail"=>"Email address of Admin's paypal account",
"paypalcurrency"=>"Currency type",
"paypalcountry-code"=>"What country's predominant language do you wish to have displayed in your PayPal screen?,enum
,US,United States,DE,Germany,AI,Anguilla,AR,Argentina,AU,Australia,AT,Austria,BE,Belgium,BR,Brazil,CA,Canada
,CL,Chile,C2,China,CR,Costa Rica,CY,Cyprus,CZ,Czech Republic,DK,Denmark,DO,Dominican Republic
,EC,Ecuador,EE,Estonia,FI,Finland,FR,France,GR,Greece,HK,Hong Kong,HU,Hungary,IS,Iceland,IN,India
,IE,Ireland,IL,Israel,IT,Italy,JM,Jamaica,JP,Japan,LV,Latvia,LT,Lithuania,LU,Luxembourg,MY,Malaysia
,MT,Malta,MX,Mexico,NL,Netherlands,NZ,New Zealand,NO,Norway,PL,Poland,PT,Portugal,SG,Singapore,SK,Slovakia
,SI,Slovenia,ZA,South Africa,KR,South Korea,ES,Spain,SE,Sweden,CH,Switzerland,TW,Taiwan,TH,Thailand,TR,Turkey
,GB,United Kingdom,UY,Uruguay,VE,Venezuela",
"paypaltext"=>"What text should be displayed as item name in the donations screen(player name will be added after it)?",
"(standard: 'Legend of the Green Dragon Site Donation from',note",
"General Combat,title",
"autofight"=>"Allow fighting multiple rounds automatically,bool",
"autofightfull"=>"Allow fighting until fight is over,enum,0,Never,1,Always,2,Only when not allowed to flee",
"Training,title",
"automaster"=>"Masters hunt down truant students,bool",
"multimaster"=>"Can players gain multiple levels (challenge multiple masters) per game day?,bool",
"displaymasternews"=>"Display news if somebody fought his master?,bool",
"Clans,title",
"allowclans"=>"Enable Clan System?,bool",
"goldtostartclan"=>"Gold to start a clan,int",
"gemstostartclan"=>"Gems to start a clan,int",
"officermoderate"=>"Can clan officers who are also moderators moderate their own clan even if they cannot moderate all clans?,bool",
"New Days,title",
"daysperday"=>"Game days per calendar day,range,1,6,1",
"specialtybonus"=>"Extra daily uses in specialty area,range,0,5,1",
"newdaycron"=>"Let the newday-runonce run via a cronjob,bool",
"The directory is necessary! Do not forget to set the correct one in cron.php in your main game folder!!! ONLY experienced admins should use cron jobbing here,note",
"`bAlso make sure you setup a cronjob on your machine using confixx/plesk/cpanel or any other admin panel pointing to the cron.php file in your main folder`b,note",
"If you do not know what a Cronjob is... leave it turned off. If you want to know more... check out: <a href='http://wiki.dragonprime.net/index.php?title=Cronjob'>http://wiki.dragonprime.net/index.php?title=Cronjob</a>,note",
"resurrectionturns"=>"Modify (+ or -) the number of turns deducted after a resurrection as an absolute (number) or relative (number followed by %),text",
"Forest,title",
"turns"=>"Forest Fights per day,range,5,30,1",
"dropmingold"=>"Forest Creatures drop at least 1/4 of max gold,bool",
"suicide"=>"Allow players to Seek Suicidally?,bool",
"suicidedk"=>"Minimum DKs before players can Seek Suicidally?,int",
"forestgemchance"=>"Player will find a gem one in X times,range,10,100,1",
"disablebonuses"=>"Should monsters which get buffed with extra HP/Att/Def get a gold+exp bonus?,bool",
"forestexploss"=>"What percentage of experience should be lost?,range,10,100,1",
"Multiple Enemies,title",
"multifightdk"=>"Multiple monsters will attack players above which amount of dragonkills?,range,8,50,1",
"multichance"=>"The chance for an attack from multiple enemies is,range,0,100,1",
"addexp"=>"Additional experience (%) per enemy during multifights?,range,0,15",
"instantexp"=>"During multi-fights hand out experience instantly?,bool",
"maxattacks"=>"How many enemies will attack per round (max. value),range,1,10",
"allowpackofmonsters"=>"Allow multiple monsters of the same type to appear in a battle?,bool",
"Random values for type of seeking is added to random base.,note",
"multibasemin"=>"The base number of multiple enemies at minimum is,range,1,100,2",
"multibasemax"=>"The base number of multiple enemies at maximum is,range,1,100,3",
"multislummin"=>"The number of multiple enemies at minimum for slumming is,range,0,100,0",
"multislummax"=>"The number of multiple enemies at maximum for slumming is,range,0,100,1",
"multithrillmin"=>"The number of multiple enemies at minimum for thrill seeking is,range,0,100,1",
"multithrillmax"=>"The number of multiple enemies at maximum for thrill seeking is,range,0,100,2",
"multisuimin"=>"The number of multiple enemies at minimum for suicide is,range,0,100,2",
"multisuimax"=>"The number of multiple enemies at maximum for suicide is,range,0,100,4",
"Stables,title",
"allowfeed"=>"Does Merick have feed onhand for creatures,bool",
"Companions/Mercenaries,title",
"enablecompanions"=>"Enable the usage of companions,bool",
"companionsallowed"=>"How many companions are allowed per player,int",
"Modules my alter this value on a per player basis!,note",
"companionslevelup"=>"Are companions allowed to level up?,bool",
"Bank Settings,title",
"fightsforinterest"=>"Max forest fights remaining to earn interest?,range,0,10,1",
"maxinterest"=>"Max Interest Rate (%),range,5,10,1",
"mininterest"=>"Min Interest Rate (%),range,0,5,1",
"maxgoldforinterest"=>"Over what amount of gold does the bank cease paying interest? (0 for unlimited),int",
"borrowperlevel"=>"Max player can borrow per level (val * level for max),range5,200,5",
"allowgoldtransfer"=>"Allow players to transfer gold,bool",
"transferperlevel"=>"Max player can receive from a transfer (val * level),range,5,100,5",
"mintransferlev"=>"Min level a player (0 DK's) needs to transfer gold,range,1,5,1",
"transferreceive"=>"Total transfers a player can receive in one day,range,0,5,1",
"maxtransferout"=>"Amount player can transfer to others (val * level),range,5,100,5",
"innfee"=>"Fee for express inn payment (x or x%),int",
"Mail Settings,title",
"mailsizelimit"=>"Message size limit per message,int",
"inboxlimit"=>"Limit # of messages in inbox,int",
"oldmail"=>"Automatically delete old messages after (days),int",
"superuseryommessage"=>"Warning to give when attempting to YoM an admin?",
"onlyunreadmails"=>"Only unread mail count towards the inbox limit?,bool",
"PvP,title",
"pvp"=>"Enable Slay Other Players,bool",
"pvpday"=>"Player Fights per day,range,1,10,1",
"pvpimmunity"=>"Days that new players are safe from PvP,range,1,5,1",
"pvpminexp"=>"Experience below which player is safe from PvP,int",
"pvpattgain"=>"Percent of victim experience attacker gains on win,floatrange,.25,20,.25",
"pvpattlose"=>"Percent of experience attacker loses on loss,floatrange,.25,20,.25",
"pvpdefgain"=>"Percent of attacker experience defender gains on win,floatrange,.25,20,.25",
"pvpdeflose"=>"Percent of experience defender loses on loss,floatrange,.25,20,.25",
"Content Expiration,title",
"expirecontent"=>"Days to keep comments and news? (0 = infinite),int",
"expiretrashacct"=>"Days to keep never logged-in accounts? (0 = infinite),int",
"expirenewacct"=>"Days to keep 1 level (0 dragon) accounts? (0 =infinite),int",
"expireoldacct"=>"Days to keep all other accounts? (0 = infinite),int",
"LOGINTIMEOUT"=>"Seconds of inactivity before auto-logoff,int",
"High Load Optimization,title",
"This has been moved to the dbconnect.php,note",
/*
"usedatacache"=>"Use Data Caching,bool",
"datacachepath"=>"Path to store data cache information`n`iNote`i when using in an environment where Safe Mode is enabled; this needs to be a path that has the same UID as the web server runs.",
//this has been put to the dbconnect.php
*/
"LoGDnet Setup,title",
"(LoGDnet requires your PHP configuration to have file wrappers enabled!!),note",
"logdnet"=>"Register with LoGDnet?,bool",
"serverurl"=>"Server URL",
"serverdesc"=>"Server Description (75 chars max)",
"logdnetserver"=>"Master LoGDnet Server (default http://logdnet.logd.com/)",
"curltimeout"=>"How long we wait for responses from logdnet.logd.com (in seconds),range,1,10,1|2",
"Game day Setup,title",
"dayduration"=>"Day Duration,viewonly",
"curgametime"=>"Current game time,viewonly",
"curservertime"=>"Current Server Time,viewonly",
"lastnewday"=>"Last new day,viewonly",
"nextnewday"=>"Next new day,viewonly",
"gameoffsetseconds"=>"Real time to offset new day,$enum",
"Translation Setup,title",
"enabletranslation"=>"Enable the use of the translation engine,bool",
"It is strongly recommended to leave this feature turned on.,note",
"cachetranslations"=>"Cache the translations (datacache must be turned on)?,bool",
"permacollect"=>"Permanently collect untranslated texts (overrides the next settings!),bool",
"collecttexts"=>"Are we currently collecting untranslated texts?,viewonly",
"tl_maxallowed"=>"Collect untranslated texts if you have fewer player than this logged in. (0 never collects),int",
"charset"=>"Which charset should be used for htmlentities?",
"Error Notification,title",
"Note: you MUST have data caching turned on if you want to use this feature. Also the first error within any 24 hour period will not generate a notice; I'm sorry: that's really just how it is for technical reasons.,note",
"show_notices"=>"Show PHP Notice output?,bool",
"notify_on_warn"=>"Send notification on site warnings?,bool",
"notify_on_error"=>"Send notification on site errors?,bool",
"notify_address"=>"Address to notify",
"notify_every"=>"Only notify every how many minutes for each distinct error?,int",
"Miscellaneous Settings,title",
"allowspecialswitch"=>"The Barkeeper may help you to switch your specialty?,bool",
"maxlistsize"=>"Maximum number of items to be shown in the warrior list,int",
);
$secstonewday = secondstonextgameday($details);
$useful_vals = array(
"dayduration"=>round(($details['dayduration']/60/60),0)." hours",
"curgametime"=>getgametime(),
"curservertime"=>date("Y-m-d h:i:s a"),
"lastnewday"=>date("h:i:s a",
strtotime("-{$details['realsecssofartoday']} seconds")),
"nextnewday"=>date("h:i:s a",
strtotime("+{$details['realsecstotomorrow']} seconds"))." (".date("H\\h i\\m s\\s",$secstonewday).")"
);
loadsettings();
$vals = $settings + $useful_vals;
rawoutput("<form action='configuration.php?op=save' method='POST'>");
addnav("","configuration.php?op=save");
showform($setup,$vals);
rawoutput("</form>");
}
page_footer();
?>