• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

enable event schedule + boosted creature otclient redemtpion how to + few other questions

jeanphilip

Well-Known Member
Joined
Oct 26, 2023
Messages
254
Reaction score
55
hi have installed latest version of canary + otclient dredemptions eveything looks good but how do i enable event schedule + boosted creature
where do i get these files?

-- updater
Services = {
--updater = "http://localhost/api/updater.php", --./updater
--status = "http://localhost/login.php", --./client_entergame | ./client_topmenu
--websites = "http://localhost/?subtopic=accountmanagement", --./client_entergame "Forgot password and/or email"
--createAccount = "http://localhost/clientcreateaccount.php", --./client_entergame -- createAccount.lua
--getCoinsUrl = "http://localhost/?subtopic=shop&step=terms", --./game_market
}

C:\xampp\htdocs6\images
in ther ei have compendium store items outfits and content but nothing relarted to this
can somebody lend me a hand ? thank in advance
Post automatically merged:

have enabled and configured api folder and it's files + init.lua

my question is i just place in there assets which name to use just assets or the version? hgotta place things folders + assets the entire module? i've folllowed this tutorial
gotta encrypt them? seems not to be working
Post automatically merged:

1775410481619.webp


LUA:
<?php
// CONFIG
$files_dir = "C:/xampp/site6/files"; // Directory where the files are located
$files_url = "http://127.0.0.1/site6/files"; // Url where the client will download the files
$files_and_dirs = array("init.lua", "data", "modules", "mods");
1775410570422.webp

1775410588635.webp


Code:
Warning: Attempt to read property "version" on null in C:\xampp\htdocs6\api\updater.php on line 30

Warning: Attempt to read property "build" on null in C:\xampp\htdocs6\api\updater.php on line 31

Warning: Attempt to read property "os" on null in C:\xampp\htdocs6\api\updater.php on line 32

Warning: Attempt to read property "platform" on null in C:\xampp\htdocs6\api\updater.php on line 33

Warning: Attempt to read property "args" on null in C:\xampp\htdocs6\api\updater.php on line 34

Warning: Undefined array key "" in C:\xampp\htdocs6\api\updater.php on line 35

Fatal error: Uncaught ValueError: RecursiveDirectoryIterator::__construct(): Argument #1 ($directory) cannot be empty in C:\xampp\htdocs6\api\updater.php:44 Stack trace: #0 C:\xampp\htdocs6\api\updater.php(44): RecursiveDirectoryIterator->__construct('') #1 {main} thrown in C:\xampp\htdocs6\api\updater.php on line 44
Post automatically merged:

edit with the updater issue it loads now $files_dir = "C:/xampp/htdocs6/files"; // Directory where the files are located with this path but client is getting instantnly closed
Post automatically merged:

"/modules/updater/updater.otui": "ef702668"
},
"keepFiles": false,
"binary": {
"file": "/otclient_gl_x64.exe",
"checksum": "b27b019d"
}
}

Stats:​

  • Total files: 8313
  • Has binary: Yes
  • Binary file: /otclient_gl_x64.exe
  • Response size: 817926 bytes
Post automatically merged:

noticed that boosted creature work in normal client but not boss
LUA:
case 'boostedcreature':
            // {"type":"boostedcreature"}
            sendMessage(array(
                //'boostedcreature' => false,
                'bossraceid' => 1387,
                'creatureraceid' => 39,
                'raceid' => 39
            ));
            break;
1775425540688.webp
in otc none works

1775425455216.webp
 
Last edited:
1775427142310.webp

LUA:
<?xml version="1.0" encoding="UTF-8"?>
<events>
    <event name="Otservbr example 1" startdate="4/11/2026" enddate="5/11/2026" script="example.lua" >
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 1 description double exp and a half, double loot !chance!, regular spawn and double skill" />
        <colors colordark="#235c00" colorlight="#2d7400" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
    <event name="Otservbr example 2" startdate="4/11/2026" enddate="6/11/2026" script="" >
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 2 description 50% less exp, triple loot !chance!, 50% faster spawn and regular skill" />
        <colors colordark="#735D10" colorlight="#8B6D05" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
</events>
Code:
<?xml version="1.0" encoding="UTF-8"?>
<events>
    <event name="Otservbr example 1" startdate="4/5/2026" enddate="5/11/2026" script="example.lua" >
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 1 description double exp and a half, double loot !chance!, regular spawn and double skill" />
        <colors colordark="#235c00" colorlight="#2d7400" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
    <event name="Otservbr example 2" startdate="4/5/2026" enddate="6/11/2026" script="" >
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 2 description 50% less exp, triple loot !chance!, 50% faster spawn and regular skill" />
        <colors colordark="#735D10" colorlight="#8B6D05" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
</events>
Code:
53] [info] Establishing database connection...
[2026-05-04 18:13:01.657] [warning] MySQL host, user, password, database or port not provided
[2026-05-04 18:13:01.662] [info] Database connection established!
[2026-05-04 18:13:01.662] [info] Initializing lua environment...
[2026-05-04 18:13:01.662] [info] Loading modules and scripts...
[2026-05-04 18:13:05.118] [warning] Scripts::loadEventSchedulerScripts - Cannot load file 'C:\Users\felip\Documents\GitHub\canary\data\XML\events\scheduler\scripts\example.lua'
[2026-05-04 18:13:05.118] [warning] EventsScheduler::loadScheduleEventFromXml - Cannot load the file 'example.lua' on '/events/scripts/scheduler/'
[2026-05-04 18:13:05.119] [error] Canary load couldn't be completed. Cannot load: XML/events.xml
[2026-05-04 18:13:05.129] [error] No services running. The server is NOT online!
[2026-05-04 18:13:05.130] [error] The program will close after pressing the enter key...
Code:
:26.129] [warning] Scripts::loadEventSchedulerScripts - Cannot load file 'C:\Users\felip\Documents\GitHub\canary\data\XML\events\scheduler\scripts\example.lua'
[2026-05-04 18:15:26.130] [warning] EventsScheduler::loadScheduleEventFromXml - Cannot load the file 'example.lua' on '/events/scripts/scheduler/'
[2026-05-04 18:15:26.130] [error] Canary load couldn't be completed. Cannot load: XML/events.xml
[2026-05-04 18:15:26.132] [error] No services running. The server is NOT online!
[2026-05-04 18:15:26.133] [error] The program will close after pressing the enter key...
Code:
-- [OtServerBr]
-- Event scheduler lua scripts, on this file is possible to load any kind
-- of global values, create functions or create and register GlobalEvents using the revscript system.
-- For example you can load a 'local Example = GlobalEvent("example")' and register it with 'Example:register()',
-- adding the 'Example.onStartup()' or 'Example.onThink(interval)' with 'Example:interval(time)'.
-- With 'onStartup()' you can load any raid, for example loading a entire map/hunt and the choseen spawns.

-- Examples:
-- Loading map: Game.loadMap(DATA_DIRECTORY.. '/world/myMapFolder/myMapFile.otbm')
-- Loading spawn: addEvent(function() Game.loadSpawnFile(DATA_DIRECTORY.. '/world/mySpawnFolder/mySpawnFile.xml) end, 30 * 1000)

local Example_One = GlobalEvent("Otservbr example 1")
function Example_One.onStartup()
    return true
end

Example_One:register()

local Example_Two = GlobalEvent("Otservbr example 2")
function Example_Two.onThink(interval)
    return true
end

Example_Two:interval(10000) -- 10 seconds interval
Example_Two:register()
Code:
<?xml version="1.0" encoding="UTF-8"?>
<events>
    <event name="Otservbr example 1" startdate="4/5/2026" enddate="5/11/2026" script="example.lua" >
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 1 description double exp and a half, double loot !chance!, regular spawn and double skill" />
        <colors colordark="#235c00" colorlight="#2d7400" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
    <event name="Otservbr example 2" startdate="4/5/2026" enddate="6/11/2026" script="" >
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 2 description 50% less exp, triple loot !chance!, 50% faster spawn and regular skill" />
        <colors colordark="#735D10" colorlight="#8B6D05" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
</events>
Post automatically merged:

REGARDING SCHEDULER EVENTS
now go no errors but event wont load
C:\Users\felip\Documents\GitHub\canary\data\XML\events.xml
<?xml version="1.0" encoding="UTF-8"?>
Code:
<events>
    <event name="Otservbr example 1" startdate="05/04/2026" enddate="11/05/2026" script="example.lua">
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 1 description double exp and a half, double loot !chance!, regular spawn and double skill" />
        <colors colordark="#235c00" colorlight="#2d7400" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
    <event name="Otservbr example 2" startdate="05/04/2026" enddate="11/05/2026" script="example.lua">
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 2 description 50% less exp, triple loot !chance!, 50% faster spawn and regular skill" />
        <colors colordark="#735D10" colorlight="#8B6D05" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
</events>
C:\Users\felip\Documents\GitHub\canary\data\XML\scheduler\example.lua
Code:
-- [OtServerBr]
-- Event scheduler lua scripts, on this file is possible to load any kind
-- of global values, create functions or create and register GlobalEvents using the revscript system.
-- For example you can load a 'local Example = GlobalEvent("example")' and register it with 'Example:register()',
-- adding the 'Example.onStartup()' or 'Example.onThink(interval)' with 'Example:interval(time)'.
-- With 'onStartup()' you can load any raid, for example loading a entire map/hunt and the choseen spawns.

-- Examples:
-- Loading map: Game.loadMap(DATA_DIRECTORY.. '/world/myMapFolder/myMapFile.otbm')
-- Loading spawn: addEvent(function() Game.loadSpawnFile(DATA_DIRECTORY.. '/world/mySpawnFolder/mySpawnFile.xml) end, 30 * 1000)

local Example_One = GlobalEvent("Otservbr example 1")
function Example_One.onStartup()
    return true
end

Example_One:register()

local Example_Two = GlobalEvent("Otservbr example 2")
function Example_Two.onThink(interval)
    return true
end

Example_Two:interval(10000) -- 10 seconds interval
Example_Two:register()
Post automatically merged:

scheduler events solved. still need boosted boss help
events.xml
LUA:
<?xml version="1.0" encoding="UTF-8"?>
<events>
    <event name="Otservbr example 1" startdate="04/05/2026" enddate="11/05/2026" script="example.lua">
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 1 description double exp and a half, double loot !chance!, regular spawn and double skill" />
        <colors colordark="#235c00" colorlight="#2d7400" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
    <event name="Otservbr example 2" startdate="04/05/2026" enddate="11/05/2026" script="example2.lua">
        <ingame exprate="100" lootrate="100" bosslootrate="100" spawnrate="100" skillrate="100" />
        <description description="Otserver br example 2 description 50% less exp, triple loot !chance!, 50% faster spawn and regular skill" />
        <colors colordark="#735D10" colorlight="#8B6D05" />
        <details displaypriority="6" isseasonal="0" specialevent="0" />
    </event>
</events>

inside xml create these folder and sub folders

XML\events\scheduler\scripts

inside scripts
example.lua
Code:
-- [OtServerBr]
-- Event scheduler lua scripts, on this file is possible to load any kind
-- of global values, create functions or create and register GlobalEvents using the revscript system.
-- For example you can load a 'local Example = GlobalEvent("example")' and register it with 'Example:register()',
-- adding the 'Example.onStartup()' or 'Example.onThink(interval)' with 'Example:interval(time)'.
-- With 'onStartup()' you can load any raid, for example loading a entire map/hunt and the choseen spawns.

-- Examples:
-- Loading map: Game.loadMap(DATA_DIRECTORY.. '/world/myMapFolder/myMapFile.otbm')
-- Loading spawn: addEvent(function() Game.loadSpawnFile(DATA_DIRECTORY.. '/world/mySpawnFolder/mySpawnFile.xml) end, 30 * 1000)

local Example_One = GlobalEvent("Otservbr example 1")
function Example_One.onStartup()
    return true
end

Example_One:register()

local Example_Two = GlobalEvent("Otservbr example 2")
function Example_Two.onThink(interval)
    return true
end

Example_Two:interval(10000) -- 10 seconds interval
Example_Two:register()
copy and rename exanmple.lua to example2.lua and thing should be solved
edit: event is not being displayed in client 15 nor otc redemption
 
Last edited:
To make it clearer, you are mixing 3 different places:

1) Canary server files
These are only for the server-side scheduler:
Code:
C:\Users\felip\Documents\GitHub\canary\data\XML\events.xml
C:\Users\felip\Documents\GitHub\canary\data\XML\events\scheduler\scripts\*.lua

2) Website status file
This is the file the client reads for event schedule, boosted creature and boosted boss:
Code:
C:\xampp\htdocs6\login.php

3) Updater file
This is not for boosted boss or event schedule display:
Code:
C:\xampp\htdocs6\api\updater.php

So for your remaining problem, the file to edit is:
Code:
C:\xampp\htdocs6\login.php

Why?
Because your client config already says:
Code:
status = "http://localhost/login.php"
updater = "http://localhost/api/updater.php"

So:
  • login.php = sends status, event schedule and boosted data to client
  • updater.php = only updates/downloads client files

Step 1.
Open C:\xampp\htdocs6\login.php

Step 2.
Add this helper above the main switch (...) in that same file:

PHP:
function parseEvent($table1, $date, $table2)
{
    if ($table1) {
        if ($date) {
            if ($table2) {
                $date = $table1->getAttribute('startdate');
                return date_create("{$date}")->format('U');
            } else {
                $date = $table1->getAttribute('enddate');
                return date_create("{$date}")->format('U');
            }
        } else {
            foreach ($table1 as $attr) {
                if ($attr) {
                    return $attr->getAttribute($table2);
                }
            }
        }
    }
    return null;
}

Step 3.
In that same login.php, find your current:
PHP:
case 'boostedcreature':

Replace that case, and also add case 'eventschedule': like this:

PHP:
case 'eventschedule':
    $eventlist = [];
    $file_path = 'C:/Users/felip/Documents/GitHub/canary/data/XML/events.xml';

    if (!file_exists($file_path)) {
        sendMessage(array());
    }

    $xml = new DOMDocument;
    $xml->load($file_path);
    $tableevent = $xml->getElementsByTagName('event');

    foreach ($tableevent as $event) {
        $eventlist[] = array(
            'colorlight' => parseEvent($event->getElementsByTagName('colors'), false, 'colorlight'),
            'colordark' => parseEvent($event->getElementsByTagName('colors'), false, 'colordark'),
            'description' => parseEvent($event->getElementsByTagName('description'), false, 'description'),
            'displaypriority' => intval(parseEvent($event->getElementsByTagName('details'), false, 'displaypriority')),
            'enddate' => intval(parseEvent($event, true, false)),
            'isseasonal' => intval(parseEvent($event->getElementsByTagName('details'), false, 'isseasonal')) ? true : false,
            'name' => $event->getAttribute('name'),
            'startdate' => intval(parseEvent($event, true, true)),
            'specialevent' => intval(parseEvent($event->getElementsByTagName('details'), false, 'specialevent'))
        );
    }

    sendMessage(array(
        'eventlist' => $eventlist,
        'lastupdatetimestamp' => time()
    ));
break;

case 'boostedcreature':
    $creatureBoost = $db->query("SELECT * FROM " . $db->tableName('boosted_creature') . " LIMIT 1")->fetch();
    $bossBoost = $db->query("SELECT * FROM " . $db->tableName('boosted_boss') . " LIMIT 1")->fetch();

    sendMessage(array(
        'boostedcreature' => true,
        'creatureraceid' => intval($creatureBoost['raceid']),
        'bossraceid' => intval($bossBoost['raceid']),
        'raceid' => intval($creatureBoost['raceid'])
    ));
break;

Step 4.
Do not keep changing updater.php for this.
That file is unrelated to boosted boss and event schedule display.

Step 5.
Leave events.xml and the scheduler lua files only for event data.
Those files define the events.
login.php is what makes client 15 / OTC Redemption display them.

If boss still does not show after this, then check DB:
SQL:
SELECT * FROM boosted_creature;
SELECT * FROM boosted_boss;

If boosted_boss is empty, client has nothing to show.
 
Back
Top