• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[Znote AAC] Tibia Layout

the server counts the correct amount of players online but when I click to view the online players, it tells me no players online. But shows players online. any help on fixing this?

so ive encountered a few errors when using this layout with znote 1.5 on tfs 0.4 running 8.6 client. I don't think these issues have been fixed or addressed yet so I will bring them forward:

Issue #1:
like i stated in the previous post, the online players list wont display. it counts the correct amount of players. and in their character profile shows they are online. but when i click on players online, all i get is "Nobody is online."

Here is my onlineplayers.php
Lua:
<?php require_once 'engine/init.php'; include 'layout/overall/header.php'; ?>

<h1>Who is online?</h1>
<?php

// Returns a list of players online
$array = false;
$loadFlags = ($config['country_flags']['enabled'] && $config['country_flags']['onlinelist']) ? true : false;
$loadOutfits = ($config['show_outfits']['onlinelist']) ? true : false;
$outfitQuery = ($loadOutfits) ? ", `p`.`lookbody` AS `body`, `p`.`lookfeet` AS `feet`, `p`.`lookhead` AS `head`, `p`.`looklegs` AS `legs`, `p`.`looktype` AS `type`, `p`.`lookaddons` AS `addons`" : "";

// Small 30 seconds players_online cache.
$cache = new Cache('engine/cache/onlinelist');
$cache->setExpiration(30);
if ($cache->hasExpired()) {
    // Load online list data from SQL
    if ($config['TFSVersion'] == 'TFS_10') {
        $array = ($loadFlags === true) ? mysql_select_multi("SELECT `p`.`name` AS `name`, `p`.`level` AS `level`, `p`.`vocation` AS `vocation`, `g`.`name` AS `gname`, `za`.`flag` AS `flag` $outfitQuery FROM `players_online` AS `o` INNER JOIN `players` AS `p` ON `o`.`player_id` = `p`.`id` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id` = `za`.`account_id` LEFT JOIN `guild_membership` AS `gm` ON `o`.`player_id` = `gm`.`player_id` LEFT JOIN `guilds` AS `g` ON `gm`.`guild_id` = `g`.`id`;") : mysql_select_multi("SELECT `p`.`name` AS `name`, `p`.`level` AS `level`, `p`.`vocation` AS `vocation`, `g`.`name` AS `gname` $outfitQuery FROM `players_online` AS `o` INNER JOIN `players` AS `p` ON `o`.`player_id` = `p`.`id` LEFT JOIN `guild_membership` AS `gm` ON `o`.`player_id` = `gm`.`player_id` LEFT JOIN `guilds` AS `g` ON `gm`.`guild_id` = `g`.`id`;");
    } else {
        $array = ($loadFlags === true) ? mysql_select_multi("SELECT `p`.`name` as `name`, `p`.`level` as `level`, `p`.`vocation` as `vocation`, `g`.`name` as `gname`, `za`.`flag` as `flag` $outfitQuery FROM `players` as `p` INNER JOIN `znote_accounts` as `za` ON `za`.`account_id` = `p`.`account_id` LEFT JOIN `guild_ranks` as `gr` ON `gr`.`id` = `p`.`rank_id` LEFT JOIN `guilds` as `g` ON `gr`.`guild_id` = `g`.`id` WHERE `p`.`online` = '1' ORDER BY `p`.`name` DESC;") : mysql_select_multi("SELECT `p`.`name` as `name`, `p`.`level` as `level`, `p`.`vocation` as `vocation`, `g`.`name` as `gname` $outfitQuery FROM `players` as `p` LEFT JOIN `guild_ranks` as `gr` ON `gr`.`id` = `p`.`rank_id` LEFT JOIN `guilds` as `g` ON `gr`.`guild_id` = `g`.`id` WHERE `p`.`online` = '1' ORDER BY `p`.`name` DESC;");
    }
    // End loading data from SQL
    $cache->setContent($array);
    $cache->save();
} else {
    $array = $cache->load();
}
// End cache

if (!empty($array) && $array !== false) {
    ?>
   
    <table id="onlinelistTable" class="table table-striped table-hover">
        <tr class="yellow">
            <?php if ($loadOutfits) echo "<th>Outfit</th>"; ?>
            <th>Name:</th>
            <th>Guild:</th>
            <th>Level:</th>
            <th>Vocation:</th>
        </tr>
        <?php
        foreach ($array as $value) {
            $url = url("characterprofile.php?name=". $value['name']);
            $flag = ($loadFlags === true && strlen($value['flag']) > 1) ? '<img src="' . $config['country_flags']['server'] . '/' . $value['flag'] . '.png">  ' : '';
            $guildname = (!empty($value['gname'])) ? '<a href="guilds.php?name='. $value['gname'] .'">'. $value['gname'] .'</a>' : '';
            ?>
            <tr class="special" onclick="javascript:window.location.href='<?php echo $url; ?>'">
                <?php if ($loadOutfits): ?>
                    <td class="outfitColumn"><img src="<?php echo $config['show_outfits']['imageServer']; ?>?id=<?php echo $value['type']; ?>&addons=<?php echo $value['addons']; ?>&head=<?php echo $value['head']; ?>&body=<?php echo $value['body']; ?>&legs=<?php echo $value['legs']; ?>&feet=<?php echo $value['feet']; ?>" alt="img"></td>
                <?php endif; ?>
                <td><?php echo $flag; ?><a href="characterprofile.php?name=<?php echo $value['name']; ?>"><?php echo $value['name']; ?></a></td>
                <td><?php echo $guildname; ?></td>
                <td><?php echo $value['level']; ?></td>
                <td><?php echo vocation_id_to_name($value['vocation']); ?></td>
            </tr>
            <?php
        }
        ?>
    </table>

    <?php
} else {
    echo 'Nobody is online.';
}
?>
<?php include 'layout/overall/footer.php'; ?>



Issue #2:
Under the admin_skills page,it is not possible to select a vocation. It gives me 9 choices of a vocation to chose from which none are real vocations and each choice to pick from is as follows:
Lua:
notice: array to string conversion in home/otsmanager/www/public_html/admin_skills.php on line 132

Here is my admin_skills.php:

Lua:
<?php require_once 'engine/init.php'; include 'layout/overall/header.php';
protect_page();
admin_only($user_data);

// PREP: Create a function that echos player skills
function playerSkill($skills, $id) {
    if (!$skills) return 0;
    else {
        return $skills[$id]['value'];
    }
}

// UPDATE SKILLS POST
if (isset($_POST['pid']) && (int)$_POST['pid'] > 0) {
    $pid = (int)$_POST['pid'];
    if ($config['TFSVersion'] != 'TFS_10') $status = user_is_online($pid);
    else $status = user_is_online_10($pid);

    if (!$status) {
        // New player level
        $level = (int)$_POST['level'];
       
        // Fetch stat gain for vocation
        $statgain = $config['vocations_gain'][(int)$_POST['vocation']];
        $playercnf = $config['player'];

        /*
        if ((int)$_POST['vocation'] !== 0) {
            // Fetch base level and stats:
            $baselevel = $config['level'];
            $basehealth = $config['health'];
            $basemana = $config['mana'];
            $basecap = $config['cap'];
        } else { // No vocation stats
            // Fetch base level and stats:
            $baselevel = $config['nvlevel'];
            $basehealth = $config['nvHealth'];
            $basemana = $config['nvMana'];
            $basecap = $config['nvCap'];
        }
        */
       
        $LevelsFromBase = $level - $playercnf['base']['level'];
        $newhp = $playercnf['base']['health'] + ($statgain['hp'] * $LevelsFromBase);
        $newmp = $playercnf['base']['mana'] + ($statgain['mp'] * $LevelsFromBase);
        $newcap = $playercnf['base']['cap'] + ($statgain['cap'] * $LevelsFromBase);

        // Calibrate hp/mana/cap
        if ($config['TFSVersion'] != 'TFS_10') {
mysql_update("UPDATE `player_skills` SET `value`='". (int)$_POST['fist'] ."' WHERE `player_id`='$pid' AND `skillid`='0' LIMIT 1;");
mysql_update("UPDATE `player_skills` SET `value`='". (int)$_POST['club'] ."' WHERE `player_id`='$pid' AND `skillid`='1' LIMIT 1;");
mysql_update("UPDATE `player_skills` SET `value`='". (int)$_POST['sword'] ."' WHERE `player_id`='$pid' AND `skillid`='2' LIMIT 1;");
mysql_update("UPDATE `player_skills` SET `value`='". (int)$_POST['axe'] ."' WHERE `player_id`='$pid' AND `skillid`='3' LIMIT 1;");
mysql_update("UPDATE `player_skills` SET `value`='". (int)$_POST['dist'] ."' WHERE `player_id`='$pid' AND `skillid`='4' LIMIT 1;");
mysql_update("UPDATE `player_skills` SET `value`='". (int)$_POST['shield'] ."' WHERE `player_id`='$pid' AND `skillid`='5' LIMIT 1;");
mysql_update("UPDATE `player_skills` SET `value`='". (int)$_POST['fish'] ."' WHERE `player_id`='$pid' AND `skillid`='6' LIMIT 1;");
mysql_update("UPDATE `players` SET `maglevel`='". (int)$_POST['magic'] ."' WHERE `id`='$pid' LIMIT 1;");
mysql_update("UPDATE `players` SET `vocation`='". (int)$_POST['vocation'] ."' WHERE `id`='$pid' LIMIT 1;");
mysql_update("UPDATE `players` SET `level`='". $level ."' WHERE `id`='$pid' LIMIT 1;");
mysql_update("UPDATE `players` SET `experience`='". level_to_experience($level) ."' WHERE `id`='$pid' LIMIT 1;");
// Update HP/mana/cap accordingly to level & vocation
mysql_update("UPDATE `players` SET `health`='". $newhp ."', `healthmax`='". $newhp ."', `mana`='". $newmp ."', `manamax`='". $newmp ."', `cap`='". $newcap ."' WHERE `id`='$pid' LIMIT 1;");
        } else {
            mysql_update("UPDATE `players` SET `health`='". $newhp ."', `healthmax`='". $newhp ."', `mana`='". $newmp ."', `manamax`='". $newmp ."', `cap`='". $newcap ."', `vocation`='". (int)$_POST['vocation'] ."', `skill_fist`='". (int)$_POST['fist'] ."', `skill_club`='". (int)$_POST['club'] ."', `skill_sword`='". (int)$_POST['sword'] ."', `skill_axe`='". (int)$_POST['axe'] ."', `skill_dist`='". (int)$_POST['dist'] ."', `skill_shielding`='". (int)$_POST['shield'] ."', `skill_fishing`='". (int)$_POST['fish'] ."', `maglevel`='". (int)$_POST['magic'] ."', `level`='". $level ."', `experience`='". level_to_experience($level) ."' WHERE `id`='$pid' LIMIT 1;");
        }
?>
<h1>Player Skills Updated!</h1>
<?php
    } else {
        ?>
        <font color="red" size="7">Player must be offline!</font>
        <?php
    }
}

// Stage 1: Fetch name
if (isset($_GET['name'])) {
    $name = getValue($_GET['name']);
} else $name = false;
//if (isset($_POST['name'])) $name = getValue($_POST['name']);

// Stage 2: Fetch user id and skills
$skills = false;
$pid = 0;
if ($name !== false) {
    if (user_character_exist($name)) {
        $pid = user_character_id($name);

        if ($config['TFSVersion'] != 'TFS_10') {
            $skills = mysql_select_multi("SELECT `value` FROM `player_skills` WHERE `player_id`='$pid' LIMIT 7;");
            $player = mysql_select_single("SELECT `maglevel`, `level`, `vocation` FROM `players` WHERE `id`='$pid' LIMIT 1;");
            $skills[] = array('value' => $player['maglevel']);
            $skills[] = array('value' => $player['level']);
            $skills[] = array('value' => $player['vocation']);
        } else {
            $player = mysql_select_single("SELECT `skill_fist`, `skill_club`, `skill_sword`, `skill_axe`, `skill_dist`, `skill_shielding`, `skill_fishing`, `maglevel`, `level`, `vocation` FROM `players` WHERE `id`='$pid' LIMIT 1;");
            $skills = array(
                0 => array('value' => $player['skill_fist']),
                1 => array('value' => $player['skill_club']),
                2 => array('value' => $player['skill_sword']),
                3 => array('value' => $player['skill_axe']),
                4 => array('value' => $player['skill_dist']),
                5 => array('value' => $player['skill_shielding']),
                6 => array('value' => $player['skill_fishing']),
                7 => array('value' => $player['maglevel']),
                8 => array('value' => $player['level']),
                9 => array('value' => $player['vocation'])
            );
        }

        //data_dump($skills, false, "Player skills");
    } else $name = false;
}

?>
<form action="" method="<?php if (!$name) echo "get"; else echo "post";?>">
    <input type="hidden" name="pid" value="<?php echo $pid; ?>">
    <table class="table">
        <tr class="yellow">
            <td colspan="2"><center><font size="6">Player Skills Administration</font></center></td>
        </tr>
        <tr>
            <td>
                <input name="name" type="text" placeholder="Character name" <?php if ($name !== false) echo "value='$name' disabled";?>>
                <br><br>
                Vocation:<br>
                <select name="vocation" <?php if (!$name) echo "disabled";?>>
                    <?php
                    $vocations = $config['vocations'];
                    foreach ($vocations as $vid => $vname) {
                        ?>
                        <option value="<?php echo $vid; ?>" <?php if ($vid == playerSkill($skills, 9)) echo "selected"?> ><?php echo $vname; ?></option>
                        <?php
                    }
                    ?>
                </select>
                <br><br>
                Fist fighting:<br>
                <input name="fist" type="text" <?php if (!$name) echo "disabled";?> value="<?php echo playerSkill($skills, 0); ?>">
                <br><br>
                Club fighting:<br>
                <input name="club" type="text" <?php if (!$name) echo "disabled";?> value="<?php echo playerSkill($skills, 1); ?>">
                <br><br>
                Sword fighting:<br>
                <input name="sword" type="text" <?php if (!$name) echo "disabled";?> value="<?php echo playerSkill($skills, 2); ?>">
                <br><br>
                Axe fighting:<br>
                <input name="axe" type="text" <?php if (!$name) echo "disabled";?> value="<?php echo playerSkill($skills, 3); ?>">
                <br><br>
            </td>
            <td>
                Dist fighting:<br>
                <input name="dist" type="text" <?php if (!$name) echo "disabled";?> value="<?php echo playerSkill($skills, 4); ?>">
                <br><br>
                Shield fighting:<br>
                <input name="shield" type="text" <?php if (!$name) echo "disabled";?> value="<?php echo playerSkill($skills, 5); ?>">
                <br><br>
                Fish fighting:<br>
                <input name="fish" type="text" <?php if (!$name) echo "disabled";?> value="<?php echo playerSkill($skills, 6); ?>">
                <br><br>
                Level:<br>
                <input name="level" type="text" <?php if (!$name) echo "disabled";?> value="<?php echo playerSkill($skills, 8); ?>">
                <br><br>
                Magic level:<br>
                <input name="magic" type="text" <?php if (!$name) echo "disabled";?> value="<?php echo playerSkill($skills, 7); ?>">
                <br><br>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <?php
                    if (!$name) {
                        ?>
                        <input class="btn btn-primary" type="submit" value="Fetch character skills info">
                        <?php
                    } else {
                        ?>
                        <input class="btn btn-success" type="submit" value="UPDATE SKILLS">
                        <?php
                    }
                ?>
            </td>
        </tr>
    </table>
    <a href="admin_skills.php">Reset fields / search new character</a>
</form>
<?php
// end
include 'layout/overall/footer.php'; ?>

Issue #3: on the server information tab, it has a field to display the servers IP, which remains blank. It is configured correctly in config.lua but looking for $_SERVER['SERVER_NAME'] -- which i can't find in config.lua

Here is my config.lua
Lua:
-- The Forgotten Server Config

    -- Account manager
    accountManager = true
    namelockManager = true
    newPlayerChooseVoc = true
    newPlayerChooseTown = false
    newPlayerDefaultTownId = 1
    newPlayerLevel = 8
    newPlayerMagicLevel = 0
    generateAccountNumber = false

    -- Unjustified kills
    -- NOTE: *Banishment and *BlackSkull variables are >summed up<
    -- (dailyFragsToRedSkull + dailyFragsToBanishment) with their
    -- *RedSkull equivalents.
    -- Auto banishing works only if useBlackSkull set to negative.
    -- advancedFragList is not advised if you use huge frags
    -- requirements.
    useFragHandler = true
    redSkullLength = 30 * 24 * 60 * 60
    blackSkullLength = 45 * 24 * 60 * 60
    dailyFragsToRedSkull = 3
    weeklyFragsToRedSkull = 5
    monthlyFragsToRedSkull = 10
    dailyFragsToBlackSkull = dailyFragsToRedSkull
    weeklyFragsToBlackSkull = weeklyFragsToRedSkull
    monthlyFragsToBlackSkull = monthlyFragsToRedSkull
    dailyFragsToBanishment = dailyFragsToRedSkull
    weeklyFragsToBanishment = weeklyFragsToRedSkull
    monthlyFragsToBanishment = monthlyFragsToRedSkull
    blackSkulledDeathHealth = 40
    blackSkulledDeathMana = 0
    useBlackSkull = true
    advancedFragList = false

    -- Banishments
    -- violationNameReportActionType 1 = just a report, 2 = name lock, 3 = player banishment
    -- killsBanLength works only if useBlackSkull option is disabled.
    notationsToBan = 3
    warningsToFinalBan = 4
    warningsToDeletion = 5
    banLength = 7 * 24 * 60 * 60
    killsBanLength = 7 * 24 * 60 * 60
    finalBanLength = 30 * 24 * 60 * 60
    ipBanishmentLength = 1 * 24 * 60 * 60
    broadcastBanishments = true
    maxViolationCommentSize = 200
    violationNameReportActionType = 2
    autoBanishUnknownBytes = false

    -- Battle
    -- NOTE: showHealingDamageForMonsters inheritates from showHealingDamage.
    -- loginProtectionPeriod is the famous Tibia anti-magebomb system.
    -- deathLostPercent set to nil enables manual mode.
    worldType = "open"
    protectionLevel = 1
    pvpTileIgnoreLevelAndVocationProtection = true
    pzLocked = 60 * 1000
    huntingDuration = 60 * 1000
    criticalHitChance = 7
    criticalHitMultiplier = 1
    displayCriticalHitNotify = false
    removeWeaponAmmunition = false
    removeWeaponCharges = false
    removeRuneCharges = false
    whiteSkullTime = 15 * 60 * 1000
    noDamageToSameLookfeet = false
    showHealingDamage = false
    showHealingDamageForMonsters = false
    healthHealingColor = COLOR_GREEN
    manaHealingColor = COLOR_DARKPURPLE
    fieldOwnershipDuration = 5 * 1000
    stopAttackingAtExit = false
    loginProtectionPeriod = 10 * 1000
    deathLostPercent = 0
    stairhopDelay = 2 * 1000
    pushCreatureDelay = 2 * 1000
    deathContainerId = 1987
    gainExperienceColor = 215
    addManaSpentInPvPZone = true
    squareColor = 0
    allowFightback = true
    fistBaseAttack = 7
    optionalWarAttackableAlly = false

    -- Connection config
    worldId = 0
    ip = "xxx.xx.xx.xxx"
    loginPort = 7171
    gamePort = 7172
    loginTries = 10
    retryTimeout = 5 * 1000
    loginTimeout = 60 * 1000
    maxPlayers = 1000
    motd = "Welcome!"
    displayOnOrOffAtCharlist = false
    onePlayerOnlinePerAccount = true
    allowClones = false
    serverName = "Killz"
    loginMessage = "How are you today?"
    statusTimeout = 5 * 60 * 1000
    replaceKickOnLogin = true
    forceSlowConnectionsToDisconnect = false
    loginOnlyWithLoginServer = false
    premiumPlayerSkipWaitList = false
    enableCast = true

    -- Database
    -- NOTE: sqlFile is used only by sqlite database, and sqlKeepAlive by mysql database.
    -- To disable sqlKeepAlive such as mysqlReadTimeout use 0 value.
    -- encryptionType can be plain, md5, sha1, sha256, sha512 or vahash.
    sqlType = "mysql"
    sqlHost = "localhost"
    sqlPort = 3306
    sqlUser = "otsmanager"
    sqlPass = "agoodpassword"
    sqlDatabase = "forgottenserver"
    sqlFile = "theforgottenserver.s3db"
    sqlKeepAlive = 0
    mysqlReadTimeout = 10
    mysqlWriteTimeout = 10
    encryptionType = "sha1"

    -- Deathlist
    deathListEnabled = true
    deathListRequiredTime = 1 * 60 * 1000
    deathAssistCount = 19
    maxDeathRecords = 5

    -- Guilds
    ingameGuildManagement = true
    levelToFormGuild = 8
    premiumDaysToFormGuild = 0
    guildNameMinLength = 4
    guildNameMaxLength = 20

    -- Highscores
    highscoreDisplayPlayers = 15
    updateHighscoresAfterMinutes = 60

    -- Houses
    buyableAndSellableHouses = true
    houseNeedPremium = true
    bedsRequirePremium = true
    levelToBuyHouse = 1
    housesPerAccount = 0
    houseRentAsPrice = false
    housePriceAsRent = false
    housePriceEachSquare = 1000
    houseRentPeriod = "never"
    houseCleanOld = 0
    guildHalls = false

    -- Item usage
    timeBetweenActions = 500
    timeBetweenExActions = 1000
    hotkeyAimbotEnabled = true

    -- Exhaust
    onBuy = 500
    onSell = 500
    changeOutfit = 500

    -- Map
    -- NOTE: storeTrash costs more memory, but will perform alot faster cleaning.
    mapName = "pvpduel.otbm"
    mapAuthor = "Pb3ll"
    randomizeTiles = true
    storeTrash = true
    cleanProtectedZones = true
    mailboxDisabledTowns = ""

    -- Process
    -- NOTE: defaultPriority works only on Windows and niceLevel on *nix
    -- niceLevel works only on *nix systems
    -- coresUsed are seperated by comma cores ids used by server process,
    -- default is -1, so it stays untouched (automaticaly assigned by OS).
    defaultPriority = "high"
    niceLevel = 5
    coresUsed = "-1"

    -- Startup
    startupDatabaseOptimization = true
    updatePremiumStateAtStartup = true
    confirmOutdatedVersion = false
    skipItemsVersionCheck = true

    -- Spells
    formulaLevel = 5.0
    formulaMagic = 1.0
    bufferMutedOnSpellFailure = false
    spellNameInsteadOfWords = false
    emoteSpells = false

    -- Outfits
    allowChangeOutfit = true
    allowChangeColors = true
    allowChangeAddons = true
    disableOutfitsForPrivilegedPlayers = false
    addonsOnlyPremium = true

    -- Miscellaneous
    -- NOTE: promptExceptionTracerErrorBox works only with precompiled support feature,
    -- called "exception tracer" (__EXCEPTION_TRACER__ flag).
    dataDirectory = "data/"
    logsDirectory = "data/logs/"
    bankSystem = true
    displaySkillLevelOnAdvance = false
    promptExceptionTracerErrorBox = true
    maximumDoorLevel = 500
    maxMessageBuffer = 4

    -- VIP list
    separateVipListPerCharacter = false
    vipListDefaultLimit = 20
    vipListDefaultPremiumLimit = 100

    -- Saving-related
    -- useHouseDataStorage usage may be found at README.
    saveGlobalStorage = true
    useHouseDataStorage = true
    storePlayerDirection = false

    -- Loot
    -- monsterLootMessage 0 to disable, 1 - only party, 2 - only player, 3 - party or player (like Tibia's)
    checkCorpseOwner = true
    monsterLootMessage = 3
    monsterLootMessageType = 25

    -- Ghost mode
    ghostModeInvisibleEffect = true
    ghostModeSpellEffects = true

    -- Limits
    idleWarningTime = 14 * 60 * 1000
    idleKickTime = 15 * 60 * 1000
    reportsExpirationAfterReads = 1
    playerQueryDeepness = 2
    tileLimit = 0
    protectionTileLimit = 0
    houseTileLimit = 0

    -- Premium-related
    freePremium = true
    premiumForPromotion = true

    -- Blessings
    -- NOTE: blessingReduction* regards items/containers loss.
    -- eachBlessReduction is how much each bless reduces the experience/magic/skills loss.
    blessings = true
    blessingOnlyPremium = true
    blessingReductionBase = 30
    blessingReductionDecrement = 5
    eachBlessReduction = 8

    -- Rates
    -- NOTE: experienceStages configuration is located in data/XML/stages.xml.
    -- rateExperienceFromPlayers 0 to disable.
    experienceStages = false
    rateExperience = 5.0
    rateExperienceFromPlayers = 0
    rateSkill = 3.0
    rateMagic = 3.0
    rateLoot = 2.0
    rateSpawn = 1

    -- Monster rates
    rateMonsterHealth = 1.0
    rateMonsterMana = 1.0
    rateMonsterAttack = 1.0
    rateMonsterDefense = 1.0

    -- Experience from players
    -- NOTE: min~Threshold* set to 0 will disable the minimum threshold:
    -- player will gain experience from every lower leveled player.
    -- max~Threshold* set to 0 will disable the maximum threshold:
    -- player will gain experience from every higher leveled player.
    minLevelThresholdForKilledPlayer = 0.9
    maxLevelThresholdForKilledPlayer = 1.1

    -- Stamina
    -- NOTE: Stamina is stored in miliseconds, so seconds are multiplied by 1000.
    -- rateStaminaHits multiplies every hit done a creature, which are later
    -- multiplied by player attack speed.
    -- rateStaminaGain is multiplying every second of logged out time, eg:
    -- 60 * 1000 / 3 = 20 seconds, what gives 1 stamina minute for 3 being logged off.
    -- rateStaminaThresholdGain is dividing in case the normal gain (that is
    -- multiplied by rateStaminaGain, btw.) passed above threshold, eg:
    -- 60 * 1000 / 3 = 20 / 4 = 5 seconds (3 * 4 = 12 minutes for 1 stamina minute).
    -- staminaRatingLimit* is in minutes.
    rateStaminaLoss = 1
    rateStaminaGain = 3
    rateStaminaThresholdGain = 12
    staminaRatingLimitTop = 40 * 60
    staminaRatingLimitBottom = 14 * 60
    staminaLootLimit = 14 * 60
    rateStaminaAboveNormal = 1.5
    rateStaminaUnderNormal = 0.5
    staminaThresholdOnlyPremium = true

    -- Party
    -- NOTE: experienceShareLevelDifference is float number.
    -- experienceShareLevelDifference is highestLevel * value
    experienceShareRadiusX = 30
    experienceShareRadiusY = 30
    experienceShareRadiusZ = 1
    experienceShareLevelDifference = 2 / 3
    extraPartyExperienceLimit = 20
    extraPartyExperiencePercent = 5
    experienceShareActivity = 2 * 60 * 1000

    -- Global save
    -- NOTE: globalSaveHour means like 03:00, not that it will save every 3 hours,
    -- if you want such a system please check out data/globalevents/globalevents.xml.
    globalSaveEnabled = false
    globalSaveHour = 8
    globalSaveMinute = 0
    shutdownAtGlobalSave = true
    cleanMapAtGlobalSave = false

    -- Spawns
    deSpawnRange = 2
    deSpawnRadius = 50

    -- Summons
    maxPlayerSummons = 2
    teleportAllSummons = false
    teleportPlayerSummons = false

    -- Status
    statusPort = 7171
    ownerName = "pbell"
    ownerEmail = "@mi.com"
    url = "http://servername.com/"
    location = "United Stated"
    displayGamemastersWithOnlineCommand = false

    -- Logs
    displayPlayersLogging = true
    prefixChannelLogs = ""
    runFile = ""
    outputLog = ""
    truncateLogsOnStartup = false

    -- Manager
    -- NOTE: managerPassword left blank disables manager.
    managerPort = 7171
    managerLogs = true
    managerPassword = ""
    managerLocalhostOnly = true
    managerConnectionsLimit = 1

    -- Admin
    -- NOTE: adminPassword left blank disables manager.
    -- Set to anything if you set adminRequireLogin to false.
    -- adminEncryption available options: rsa1024xtea;
    -- remember to set correct data!
    adminPort = 7171
    adminLogs = true
    adminPassword = ""
    adminLocalhostOnly = true
    adminConnectionsLimit = 1
    adminRequireLogin = true
    adminEncryption = ""
    adminEncryptionData = ""


These were the main 3 issues that I found using this web application. Other than those, everything has been smooth for me. Hopefully I can get some help with these issues. I will post all information back to this post in case others need help in the future.
 
Last edited by a moderator:
Back
Top