Version 2.2 - retro layout + bug fixes
@ -29,9 +29,10 @@ It's based on https://github.com/edubart/otclient and it's not backward compatib
|
|||||||
- Crosshair, floor fading, extra health/mana bars and panels
|
- Crosshair, floor fading, extra health/mana bars and panels
|
||||||
- Much more client options
|
- Much more client options
|
||||||
- Removed a lot of useless and outdated things
|
- Removed a lot of useless and outdated things
|
||||||
- Advanced bot (https://github.com/OTCv8/otclientv8_bot)
|
- Advanced bot
|
||||||
- Linux version
|
- Linux version
|
||||||
- Full tibia 11.00 support
|
- Full tibia 11.00 support
|
||||||
|
- Layouts
|
||||||
- New login server (with ingame account and character creation)
|
- New login server (with ingame account and character creation)
|
||||||
- Support for proxies to lower latency and protect against DDoS (extra paid option)
|
- Support for proxies to lower latency and protect against DDoS (extra paid option)
|
||||||
- Bot protection (extra paid option)
|
- Bot protection (extra paid option)
|
||||||
@ -57,6 +58,7 @@ Open `init.lua` and edit:
|
|||||||
-- CONFIG
|
-- CONFIG
|
||||||
APP_NAME = "otclientv8" -- important, change it, it's name for config dir and files in appdata
|
APP_NAME = "otclientv8" -- important, change it, it's name for config dir and files in appdata
|
||||||
APP_VERSION = 1337 -- client version for updater and login to indentify outdated client
|
APP_VERSION = 1337 -- client version for updater and login to indentify outdated client
|
||||||
|
DEFAULT_LAYOUT = "retro"
|
||||||
|
|
||||||
-- If you don't use updater or other service, set it to updater = ""
|
-- If you don't use updater or other service, set it to updater = ""
|
||||||
Services = {
|
Services = {
|
||||||
|
BIN
api/image.png
Before Width: | Height: | Size: 106 KiB |
181
api/login.php
@ -1,181 +0,0 @@
|
|||||||
<?php
|
|
||||||
// author otclient@otclient.ovh
|
|
||||||
// config
|
|
||||||
$dbserver = "127.0.0.1";
|
|
||||||
$username = "otclient";
|
|
||||||
$password = "otclient";
|
|
||||||
$dbname = "otclient";
|
|
||||||
|
|
||||||
$serverName = "OTClientV8";
|
|
||||||
$serverIp = "otclient.ovh";
|
|
||||||
//$serverIp = "proxy"; // if serverIp set to 0.0.0.0 or proxy it will connect to server using proxies, set proxies bellow
|
|
||||||
$serverPort = 7172; // GAME PORT (7172 usually)
|
|
||||||
|
|
||||||
$version = 1099;
|
|
||||||
$otc_version = 1337; // APP_VERSION, from init.lua
|
|
||||||
|
|
||||||
$maxLogins = 10; // 0 or null to disable
|
|
||||||
$blockTime = 60; // after too many logins, in seconds
|
|
||||||
// CREATE TABLE `login_attmpts` ( `acc` varchar(50) NOT NULL, `ip` varchar(30) NOT NULL, `date` datetime NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
||||||
|
|
||||||
$encryption = "sha1"; // sha1 or md5, everything else == none
|
|
||||||
|
|
||||||
// required files in things, type => (filename, md5 checksum in hex)
|
|
||||||
// $things = null; things can be null if you want to use default values, but then enable auto download of sprites and dat in updater
|
|
||||||
|
|
||||||
/* //for 860
|
|
||||||
$things = array(
|
|
||||||
"sprites" => array("$version/Tibia.spr", "3db8c0098d34ca3d9a8ec29d40ef1b7b"),
|
|
||||||
"data" => array("$version/Tibia.dat", "85785b5d67b4c111f780a74895c85c75")
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// for 1099
|
|
||||||
$things = array(
|
|
||||||
"sprites" => array("$version/Tibia.spr", "63d38646597649a55a8be463d6c0fb49"),
|
|
||||||
"data" => array("$version/Tibia.dat", "ae7157cfff42f14583d6363e77044df7")
|
|
||||||
);
|
|
||||||
|
|
||||||
$customProtocol = nil; // if not nil it will replace client version in protocolgame, may be used to detect outdated client
|
|
||||||
|
|
||||||
// executes modules.client_options.setOption(option, value, true)
|
|
||||||
$settings = array(
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
// it's from src/client/const.h, executes g_game.enableFeature/g_game.disableFeature
|
|
||||||
$features = array(
|
|
||||||
22 => true, // GameFormatCreatureName
|
|
||||||
25 => true, // GameExtendedClientPing
|
|
||||||
30 => true, // GameChangeMapAwareRange
|
|
||||||
// 56 => true, // GameSpritesAlphaChannel
|
|
||||||
80 => true,
|
|
||||||
90 => true, // GameNewWalking
|
|
||||||
// 91 => true, // GameSmootherWalking
|
|
||||||
95 => true, // GameBot
|
|
||||||
97 => true, // light
|
|
||||||
);
|
|
||||||
|
|
||||||
$rsa = "1091201329673994292788609605089955415282375029027981291234687579" .
|
|
||||||
"3726629149257644633073969600111060390723088861007265581882535850" .
|
|
||||||
"3429057592827629436413108566029093628212635953836686562675849720" .
|
|
||||||
"6207862794310902180176810615217550567108238764764442605581471797" .
|
|
||||||
"07119674283982419152118103759076030616683978566631413";
|
|
||||||
|
|
||||||
// proxies (it's custom feature, not available for free)
|
|
||||||
$proxies = array(
|
|
||||||
array(
|
|
||||||
"localPort" => 7172,
|
|
||||||
"host" => "51.158.184.57",
|
|
||||||
"port" => 7162,
|
|
||||||
"priority" => 0
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
"localPort" => 7172,
|
|
||||||
"host" => "54.39.190.20",
|
|
||||||
"port" => 7162,
|
|
||||||
"priority" => 0
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
"localPort" => 7172,
|
|
||||||
"host" => "51.83.226.109",
|
|
||||||
"port" => 7162,
|
|
||||||
"priority" => 0,
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
"localPort" => 7172,
|
|
||||||
"host" => "35.247.201.100",
|
|
||||||
"port" => 443,
|
|
||||||
"priority" => 0
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// config end
|
|
||||||
|
|
||||||
$data = file_get_contents("php://input");
|
|
||||||
|
|
||||||
$data = json_decode($data);
|
|
||||||
if(empty($data)) {
|
|
||||||
http_response_code(400);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($data->version != $otc_version) {
|
|
||||||
die(json_encode(array("error" => "Outdated client, please update!")));
|
|
||||||
}
|
|
||||||
|
|
||||||
$conn = new mysqli($dbserver, $username, $password, $dbname);
|
|
||||||
if ($conn->connect_error) {
|
|
||||||
die("SQL connection failed: " . $conn->connect_error);
|
|
||||||
}
|
|
||||||
|
|
||||||
$account = $data->account;
|
|
||||||
if($encryption == "sha1")
|
|
||||||
$password = sha1($data->password);
|
|
||||||
else if($encryption == "md5")
|
|
||||||
$password = md5($data->password);
|
|
||||||
else
|
|
||||||
$password = $data->password;
|
|
||||||
|
|
||||||
$token = $data->token;
|
|
||||||
|
|
||||||
$account = preg_replace("/[^A-Za-z0-9 ._-]/", '', $account);
|
|
||||||
$password = preg_replace("/[^A-Za-z0-9 ._-]/", '', $password);
|
|
||||||
$token = preg_replace("/[^A-Za-z0-9 ._-]/", '', $token);
|
|
||||||
$ip = preg_replace("/[^A-Za-z0-9 ._-]/", '', $_SERVER['REMOTE_ADDR']);
|
|
||||||
|
|
||||||
if($maxLogins != null && $maxLogins > 0) {
|
|
||||||
$result = $conn->query("select count(*) as `attempts` from `login_attmpts` where `ip` = '".$ip."' and `date` > NOW() - INTERVAL ".$blockTime." SECOND");
|
|
||||||
$result = $result->fetch_assoc();
|
|
||||||
if($result['attempts'] > $maxLogins) {
|
|
||||||
die(json_encode(array("error" => "Too many login attempts, please wait ".$blockTime." seconds.")));
|
|
||||||
}
|
|
||||||
$conn->query("INSERT INTO `login_attmpts` (`acc`, `ip`, `date`) VALUES ('".$conn->real_escape_string($account)."', '".$ip."', NOW())");
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = $conn->query("select * from accounts where `name` = '".$conn->real_escape_string($account)."' and `password` = '".$conn->real_escape_string($password)."'");
|
|
||||||
if ($result->num_rows != 1) {
|
|
||||||
die(json_encode(array("error" => "Invalid account/password")));
|
|
||||||
}
|
|
||||||
$acc = $result->fetch_assoc();
|
|
||||||
|
|
||||||
$session = "".$data->account."\n".$data->password."\n$token\n".time();
|
|
||||||
|
|
||||||
if($serverIp != "proxy" && $serverIp != "0.0.0.0") {
|
|
||||||
$proxies = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$response = array(
|
|
||||||
"error" => "",
|
|
||||||
"rsa" => $rsa,
|
|
||||||
"version" => $version,
|
|
||||||
"things" => $things,
|
|
||||||
"customProtocol" => $customProtocol,
|
|
||||||
"session" => $session,
|
|
||||||
"characters" => array(),
|
|
||||||
"account" => array(),
|
|
||||||
"settings" => $settings,
|
|
||||||
"features" => $features,
|
|
||||||
"proxies" => $proxies
|
|
||||||
);
|
|
||||||
|
|
||||||
$response["account"]["status"] = 0; // 0=ok, 1=frozen, 2=supsended
|
|
||||||
$response["account"]["subStatus"] = 1; // 0=free, 1=premium
|
|
||||||
$response["account"]["premDays"] = 65535;
|
|
||||||
|
|
||||||
$characters = $conn->query("select * from `players` where `account_id` = '".$acc['id']."'");
|
|
||||||
if ($characters->num_rows == 0) {
|
|
||||||
die(json_encode(array("error" => "Account doesn't have any characters")));
|
|
||||||
}
|
|
||||||
|
|
||||||
while($character = $characters->fetch_assoc()) {
|
|
||||||
$response["characters"][] = array(
|
|
||||||
"name" => $character['name'],
|
|
||||||
"worldName" => $serverName,
|
|
||||||
"worldIp" => $serverIp,
|
|
||||||
"worldPort" => $serverPort
|
|
||||||
// if you are good enough and can code it in lua, you can add outfit, level, vocation, whatever you want here
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
echo json_encode($response);
|
|
||||||
?>
|
|
@ -1,28 +0,0 @@
|
|||||||
<?php
|
|
||||||
function generateRandomString($length = 6) {
|
|
||||||
$characters = '0123456789abcdefghijklmnopqrstuvwxyz';
|
|
||||||
$charactersLength = strlen($characters);
|
|
||||||
$randomString = '';
|
|
||||||
for ($i = 0; $i < $length; $i++) {
|
|
||||||
$randomString .= $characters[rand(0, $charactersLength - 1)];
|
|
||||||
}
|
|
||||||
return $randomString;
|
|
||||||
}
|
|
||||||
|
|
||||||
$code = generateRandomString();
|
|
||||||
|
|
||||||
|
|
||||||
require_once("phpqrcode.php");
|
|
||||||
ob_start();
|
|
||||||
QRCode::png($code, null, QR_ECLEVEL_H, 7, 1);
|
|
||||||
$qrcode = base64_encode( ob_get_contents() );
|
|
||||||
ob_end_clean();
|
|
||||||
|
|
||||||
$data = array(
|
|
||||||
"qrcode" => $qrcode,
|
|
||||||
"code" => $code,
|
|
||||||
"status" => "waiting"
|
|
||||||
);
|
|
||||||
|
|
||||||
echo json_encode($data);
|
|
||||||
?>
|
|
35
api/news.php
@ -1,35 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$news = array();
|
|
||||||
$lang = "en";
|
|
||||||
if(isset($_GET['lang']))
|
|
||||||
$lang = $_GET['lang'];
|
|
||||||
|
|
||||||
$jokes = array();
|
|
||||||
$jokes[] = "How do you make a tissue dance? You put a little boogie in it.";
|
|
||||||
$jokes[] = "Why did the policeman smell bad? He was on duty.";
|
|
||||||
$jokes[] = "Why does Snoop Dogg carry an umbrella? FO DRIZZLE!";
|
|
||||||
$jokes[] = "Why can't you hear a pterodactyl in the bathroom? Because it has a silent pee.";
|
|
||||||
$jokes[] = "What did the Zen Buddist say to the hotdog vendor? Make me one with everything.";
|
|
||||||
$jokes[] = "What kind of bees make milk instead of honey? Boobies.";
|
|
||||||
$jokes[] = "Horse walks into a bar. Bartender says, 'Why the long face?'";
|
|
||||||
$jokes[] = "A mushroom walks into a bar. The bartender says, 'Hey, get out of here! We don't serve mushrooms here'. Mushroom says, 'why not? I'm a fungai!'";
|
|
||||||
$jokes[] = "I never make mistakes…I thought I did once; but I was wrong.";
|
|
||||||
$jokes[] = "What's Beethoven's favorite fruit? Ba-na-na-naaa!";
|
|
||||||
$jokes[] = "What did the little fish say when he swam into a wall? DAM!";
|
|
||||||
$jokes[] = "Knock knock. Who's there? Smell mop. (finish this joke in your head)";
|
|
||||||
$jokes[] = "Where does a sheep go for a haircut? To the baaaaa baaaaa shop!";
|
|
||||||
$jokes[] = "What does a nosey pepper do? Gets jalapeno business!";
|
|
||||||
$jokes[] = "Your mom is so poor, she even can't pay attention";
|
|
||||||
|
|
||||||
$news[] = array("title" => "TEST SERVERS", "text" => "OTCLIENTV8 Accs:\nacc1/acc\nacc2/acc\nacc3/acc");
|
|
||||||
|
|
||||||
$news[] = array("title" => "First title",
|
|
||||||
"text" => "This is example of lua g_http api. Those news are from http://otclient.ovh/news.php
|
|
||||||
\nRequest was for language '".$lang."', however, there's only english version of this, don't have time to create more versions");
|
|
||||||
$news[] = array("title" => "Random joke", "text" => $jokes[array_rand($jokes)]);
|
|
||||||
$news[] = array("title" => "Image test", "image" => base64_encode(file_get_contents("image.png")));
|
|
||||||
|
|
||||||
echo json_encode($news);
|
|
||||||
|
|
||||||
?>
|
|
3312
api/phpqrcode.php
26
api/status.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
$online_otservlist = 0;
|
||||||
|
try {
|
||||||
|
$ch = curl_init();
|
||||||
|
curl_setopt($ch, CURLOPT_URL, "https://otservlist.org/");
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return data inplace of echoing on screen
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Skip SSL Verification
|
||||||
|
curl_setopt($ch, CURLOPT_ENCODING , "");
|
||||||
|
$site = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
preg_match('/There are <strong>([0-9]*)<\/strong>/', $site, $matches);
|
||||||
|
$online_otservlist = $matches[1];
|
||||||
|
} catch(Exception $e) {}
|
||||||
|
$online_discord = 0;
|
||||||
|
try {
|
||||||
|
$online_discord = json_decode(file_get_contents("https://discordapp.com/api/guilds/628769144925585428/widget.json"))->presence_count;
|
||||||
|
} catch(Exception $e) {}
|
||||||
|
|
||||||
|
$response = array(
|
||||||
|
"online" => "$online_otservlist Players online",
|
||||||
|
"discord_online" => $online_discord,
|
||||||
|
"discord_link" => "https://discord.gg/t4ntS5p"
|
||||||
|
);
|
||||||
|
echo json_encode($response);
|
||||||
|
?>
|
@ -22,7 +22,7 @@ $data_dir = "/var/www/otclient/files";
|
|||||||
$things_dir = "/data/things"; // files from that dir won't be downloaded automaticly, you can set it to null to download everything automaticly (useful if you have only 1 version of data/sprites)
|
$things_dir = "/data/things"; // files from that dir won't be downloaded automaticly, you can set it to null to download everything automaticly (useful if you have only 1 version of data/sprites)
|
||||||
$files_url = "http://otclient.ovh/files";
|
$files_url = "http://otclient.ovh/files";
|
||||||
$update_checksum_interval = 60; // caling updater 100x/s would lag disc, we need to cache it
|
$update_checksum_interval = 60; // caling updater 100x/s would lag disc, we need to cache it
|
||||||
$main_files_and_dirs = array("data", "modules", "init.lua"); // used to ignore other files/dirs in data_dir
|
$main_files_and_dirs = array("data", "modules", "layouts", "init.lua"); // used to ignore other files/dirs in data_dir
|
||||||
|
|
||||||
// CONFIG END
|
// CONFIG END
|
||||||
|
|
||||||
|
BIN
data/images/game/actionbarslot.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
data/images/game/combatmodes/pvp.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
data/images/topbuttons/buttons.png
Normal file
After Width: | Height: | Size: 331 B |
BIN
data/images/ui/discord.png
Normal file
After Width: | Height: | Size: 614 B |
BIN
data/minimap.otmm
Normal file
@ -2,7 +2,7 @@ Button < UIButton
|
|||||||
font: verdana-11px-antialised
|
font: verdana-11px-antialised
|
||||||
color: #dfdfdfff
|
color: #dfdfdfff
|
||||||
size: 106 23
|
size: 106 23
|
||||||
text-offset: 0 0
|
text-offset: 0 1
|
||||||
image-source: /images/ui/button
|
image-source: /images/ui/button
|
||||||
image-color: #dfdfdf
|
image-color: #dfdfdf
|
||||||
image-clip: 0 0 22 23
|
image-clip: 0 0 22 23
|
||||||
@ -27,6 +27,7 @@ TabButton < UIButton
|
|||||||
image-color: #dfdfdf
|
image-color: #dfdfdf
|
||||||
image-clip: 0 0 22 23
|
image-clip: 0 0 22 23
|
||||||
image-border: 3
|
image-border: 3
|
||||||
|
text-offset: 0 1
|
||||||
icon-color: #dfdfdf
|
icon-color: #dfdfdf
|
||||||
color: #dfdfdf
|
color: #dfdfdf
|
||||||
|
|
||||||
@ -47,6 +48,7 @@ NextButton < UIButton
|
|||||||
image-source: /images/ui/arrow_horizontal
|
image-source: /images/ui/arrow_horizontal
|
||||||
image-clip: 12 0 12 21
|
image-clip: 12 0 12 21
|
||||||
image-color: #ffffff
|
image-color: #ffffff
|
||||||
|
text-offset: 0 1
|
||||||
|
|
||||||
$hover !disabled:
|
$hover !disabled:
|
||||||
image-clip: 12 21 12 21
|
image-clip: 12 21 12 21
|
||||||
@ -62,6 +64,7 @@ PreviousButton < UIButton
|
|||||||
image-source: /images/ui/arrow_horizontal
|
image-source: /images/ui/arrow_horizontal
|
||||||
image-clip: 0 0 12 21
|
image-clip: 0 0 12 21
|
||||||
image-color: #ffffff
|
image-color: #ffffff
|
||||||
|
text-offset: 0 1
|
||||||
|
|
||||||
$hover !disabled:
|
$hover !disabled:
|
||||||
image-clip: 0 21 12 21
|
image-clip: 0 21 12 21
|
||||||
@ -76,6 +79,7 @@ AddButton < UIButton
|
|||||||
size: 20 20
|
size: 20 20
|
||||||
image-source: /images/ui/icon_add
|
image-source: /images/ui/icon_add
|
||||||
image-color: #dfdfdfff
|
image-color: #dfdfdfff
|
||||||
|
text-offset: 0 1
|
||||||
|
|
||||||
$hover !disabled:
|
$hover !disabled:
|
||||||
image-color: #dfdfdf99
|
image-color: #dfdfdf99
|
||||||
|
@ -26,3 +26,9 @@ ProgressRect < UIProgressRect
|
|||||||
color: white
|
color: white
|
||||||
background-color: #00000088
|
background-color: #00000088
|
||||||
font: verdana-11px-rounded
|
font: verdana-11px-rounded
|
||||||
|
|
||||||
|
HealthBar < ProgressBar
|
||||||
|
background-color: #ff4444
|
||||||
|
|
||||||
|
ManaBar < ProgressBar
|
||||||
|
background-color: #4444ff
|
||||||
|
@ -92,6 +92,9 @@ TabBarVertical < UITabBar
|
|||||||
anchors.right: scrollBar.left
|
anchors.right: scrollBar.left
|
||||||
anchors.bottom: parent.bottom
|
anchors.bottom: parent.bottom
|
||||||
vertical-scrollbar: scrollBar
|
vertical-scrollbar: scrollBar
|
||||||
|
margin-right: 1
|
||||||
|
padding-top: 10
|
||||||
|
|
||||||
VerticalScrollBar
|
VerticalScrollBar
|
||||||
id: scrollBar
|
id: scrollBar
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
|
@ -60,3 +60,56 @@ TopMenuFrameCounterLabel < Label
|
|||||||
|
|
||||||
TopMenuPingLabel < Label
|
TopMenuPingLabel < Label
|
||||||
font: verdana-11px-rounded
|
font: verdana-11px-rounded
|
||||||
|
|
||||||
|
TopMenu < TopMenuPanel
|
||||||
|
id: topMenu
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
TopMenuButtonsPanel
|
||||||
|
id: leftButtonsPanel
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
|
||||||
|
TopMenuButtonsPanel
|
||||||
|
id: leftGameButtonsPanel
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: prev.right
|
||||||
|
visible: false
|
||||||
|
|
||||||
|
TopMenuFrameCounterLabel
|
||||||
|
id: fpsLabel
|
||||||
|
text-auto-resize: true
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: leftGameButtonsPanel.right
|
||||||
|
|
||||||
|
TopMenuPingLabel
|
||||||
|
color: white
|
||||||
|
id: pingLabel
|
||||||
|
text-auto-resize: true
|
||||||
|
anchors.top: fpsLabel.bottom
|
||||||
|
anchors.left: fpsLabel.left
|
||||||
|
|
||||||
|
Label
|
||||||
|
id: onlineLabel
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
text-align: center
|
||||||
|
text-auto-resize: true
|
||||||
|
|
||||||
|
TopMenuButtonsPanel
|
||||||
|
id: rightButtonsPanel
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
TopMenuButtonsPanel
|
||||||
|
id: rightGameButtonsPanel
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: prev.left
|
||||||
|
visible: false
|
@ -125,6 +125,4 @@ MiniWindowContents < ScrollablePanel
|
|||||||
margin-right: 1
|
margin-right: 1
|
||||||
vertical-scrollbar: miniwindowScrollBar
|
vertical-scrollbar: miniwindowScrollBar
|
||||||
|
|
||||||
BorderlessGameWindow < UIWindow
|
HeadlessMiniWindow < MiniWindow
|
||||||
focusable: false
|
|
||||||
margin: 2
|
|
||||||
|
5
data/styles/40-background.otui
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Background < Panel
|
||||||
|
image-source: /images/background
|
||||||
|
image-smooth: true
|
||||||
|
image-fixed-ratio: true
|
||||||
|
margin-top: 1
|
185
data/styles/40-console.otui
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
ConsoleLabel < UITextEdit
|
||||||
|
font: verdana-11px-antialised
|
||||||
|
height: 14
|
||||||
|
color: yellow
|
||||||
|
margin-left: 2
|
||||||
|
text-wrap: true
|
||||||
|
text-auto-resize: true
|
||||||
|
selection-color: #111416
|
||||||
|
selection-background-color: #999999
|
||||||
|
change-cursor-image: false
|
||||||
|
cursor-visible: false
|
||||||
|
editable: false
|
||||||
|
draggable: true
|
||||||
|
selectable: false
|
||||||
|
focusable: false
|
||||||
|
|
||||||
|
ConsolePhantomLabel < UILabel
|
||||||
|
font: verdana-11px-antialised
|
||||||
|
height: 14
|
||||||
|
color: yellow
|
||||||
|
text-wrap: true
|
||||||
|
text-auto-resize: true
|
||||||
|
selection-color: #111416
|
||||||
|
selection-background-color: #999999
|
||||||
|
|
||||||
|
ConsoleTabBar < MoveableTabBar
|
||||||
|
height: 28
|
||||||
|
|
||||||
|
ConsoleTabBarPanel < MoveableTabBarPanel
|
||||||
|
id: consoleTab
|
||||||
|
|
||||||
|
ScrollablePanel
|
||||||
|
id: consoleBuffer
|
||||||
|
anchors.fill: parent
|
||||||
|
margin-right: 12
|
||||||
|
vertical-scrollbar: consoleScrollBar
|
||||||
|
layout:
|
||||||
|
type: verticalBox
|
||||||
|
align-bottom: true
|
||||||
|
border-width: 1
|
||||||
|
border-color: #202327
|
||||||
|
background: #00000066
|
||||||
|
inverted-scroll: true
|
||||||
|
padding: 1
|
||||||
|
|
||||||
|
VerticalScrollBar
|
||||||
|
id: consoleScrollBar
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
|
step: 14
|
||||||
|
pixels-scroll: true
|
||||||
|
|
||||||
|
ConsoleTabBarButton < MoveableTabBarButton
|
||||||
|
height: 28
|
||||||
|
padding: 15
|
||||||
|
|
||||||
|
ConsolePanel < Panel
|
||||||
|
image-source: /images/ui/panel_bottom
|
||||||
|
image-border: 4
|
||||||
|
|
||||||
|
$first:
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
$!first:
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
CheckBox
|
||||||
|
id: toggleChat
|
||||||
|
!tooltip: tr('Disable chat mode, allow to walk using ASDW')
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin-left: 13
|
||||||
|
margin-top: 8
|
||||||
|
@onCheckChange: toggleChat()
|
||||||
|
|
||||||
|
TabButton
|
||||||
|
id: prevChannelButton
|
||||||
|
icon: /images/game/console/leftarrow
|
||||||
|
anchors.left: toggleChat.right
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin-left: 3
|
||||||
|
margin-top: 6
|
||||||
|
|
||||||
|
ConsoleTabBar
|
||||||
|
id: consoleTabBar
|
||||||
|
anchors.left: prev.right
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.right: next.left
|
||||||
|
margin-left: 5
|
||||||
|
margin-top: 3
|
||||||
|
margin-right: 5
|
||||||
|
tab-spacing: 2
|
||||||
|
movable: true
|
||||||
|
|
||||||
|
TabButton
|
||||||
|
id: nextChannelButton
|
||||||
|
icon: /images/game/console/rightarrow
|
||||||
|
anchors.right: next.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin-right: 5
|
||||||
|
margin-top: 6
|
||||||
|
|
||||||
|
TabButton
|
||||||
|
id: closeChannelButton
|
||||||
|
!tooltip: tr('Close this channel') .. ' (Ctrl+E)'
|
||||||
|
icon: /images/game/console/closechannel
|
||||||
|
anchors.right: next.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
enabled: false
|
||||||
|
margin-right: 5
|
||||||
|
margin-top: 6
|
||||||
|
@onClick: removeCurrentTab()
|
||||||
|
|
||||||
|
TabButton
|
||||||
|
id: clearChannelButton
|
||||||
|
!tooltip: tr('Clear current message window')
|
||||||
|
icon: /images/game/console/clearchannel
|
||||||
|
anchors.right: next.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin-right: 5
|
||||||
|
margin-top: 6
|
||||||
|
@onClick: |
|
||||||
|
local consoleTabBar = self:getParent():getChildById('consoleTabBar')
|
||||||
|
clearChannel(consoleTabBar)
|
||||||
|
|
||||||
|
TabButton
|
||||||
|
id: channelsButton
|
||||||
|
!tooltip: tr('Open new channel') .. ' (Ctrl+O)'
|
||||||
|
icon: /images/game/console/channels
|
||||||
|
anchors.right: next.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin-right: 5
|
||||||
|
margin-top: 6
|
||||||
|
@onClick: g_game.requestChannels()
|
||||||
|
|
||||||
|
TabButton
|
||||||
|
id: ignoreButton
|
||||||
|
!tooltip: tr('Ignore players')
|
||||||
|
icon: /images/game/console/ignore
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin-right: 5
|
||||||
|
margin-top: 6
|
||||||
|
@onClick: onClickIgnoreButton()
|
||||||
|
|
||||||
|
Panel
|
||||||
|
id: consoleContentPanel
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: consoleTextEdit.top
|
||||||
|
margin-left: 6
|
||||||
|
margin-right: 6
|
||||||
|
margin-bottom: 4
|
||||||
|
margin-top: 4
|
||||||
|
padding: 1
|
||||||
|
focusable: false
|
||||||
|
phantom: true
|
||||||
|
|
||||||
|
TabButton
|
||||||
|
id: sayModeButton
|
||||||
|
icon: /images/game/console/say
|
||||||
|
!tooltip: tr('Adjust volume')
|
||||||
|
&sayMode: 2
|
||||||
|
size: 20 20
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
margin-left: 6
|
||||||
|
margin-bottom: 6
|
||||||
|
@onClick: sayModeChange()
|
||||||
|
|
||||||
|
TextEdit
|
||||||
|
id: consoleTextEdit
|
||||||
|
anchors.left: sayModeButton.right
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
margin-right: 6
|
||||||
|
margin-left: 6
|
||||||
|
margin-bottom: 6
|
||||||
|
shift-navigation: true
|
||||||
|
max-length: 255
|
@ -6,14 +6,15 @@ PageButton < Button
|
|||||||
ContainerWindow < MiniWindow
|
ContainerWindow < MiniWindow
|
||||||
height: 150
|
height: 150
|
||||||
|
|
||||||
|
|
||||||
UIItem
|
UIItem
|
||||||
id: containerItemWidget
|
id: containerItemWidget
|
||||||
virtual: true
|
virtual: true
|
||||||
size: 16 16
|
size: 16 16
|
||||||
anchors.top: parent.top
|
anchors.top: parent.top
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
margin-top: 4
|
margin-top: 1
|
||||||
margin-left: 4
|
margin-left: 3
|
||||||
|
|
||||||
UIButton
|
UIButton
|
||||||
id: upButton
|
id: upButton
|
||||||
@ -35,9 +36,14 @@ ContainerWindow < MiniWindow
|
|||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
anchors.top: miniwindowTopBar.bottom
|
anchors.top: miniwindowTopBar.bottom
|
||||||
height: 20
|
margin: 1 3 0 3
|
||||||
margin: 2 3 0 3
|
|
||||||
background: #00000066
|
background: #00000066
|
||||||
|
height: 20
|
||||||
|
|
||||||
|
$on:
|
||||||
|
visible: true
|
||||||
|
|
||||||
|
$!on:
|
||||||
visible: false
|
visible: false
|
||||||
|
|
||||||
Label
|
Label
|
3
data/styles/40-entergame.otui
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
EnterGameWindow < StaticMainWindow
|
||||||
|
!text: tr('Enter Game')
|
||||||
|
size: 260 354
|
2
data/styles/40-gamebuttons.otui
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
GameButtonsWindow < MiniWindow
|
||||||
|
height: 40
|
146
data/styles/40-healthinfo.otui
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
ExperienceBar < ProgressBar
|
||||||
|
id: experienceBar
|
||||||
|
background-color: #B6E866
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
margin: 1
|
||||||
|
margin-top: 3
|
||||||
|
|
||||||
|
SoulLabel < GameLabel
|
||||||
|
id: soulLabel
|
||||||
|
text-align: right
|
||||||
|
color: white
|
||||||
|
font: verdana-11px-rounded
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.left: parent.horizontalCenter
|
||||||
|
margin-top: 5
|
||||||
|
margin-right: 3
|
||||||
|
on: true
|
||||||
|
|
||||||
|
$!on:
|
||||||
|
visible: false
|
||||||
|
margin-top: 0
|
||||||
|
height: 0
|
||||||
|
|
||||||
|
CapLabel < GameLabel
|
||||||
|
id: capLabel
|
||||||
|
color: white
|
||||||
|
font: verdana-11px-rounded
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.horizontalCenter
|
||||||
|
margin-top: 5
|
||||||
|
margin-left: 3
|
||||||
|
on: true
|
||||||
|
|
||||||
|
$!on:
|
||||||
|
visible: false
|
||||||
|
margin-top: 0
|
||||||
|
height: 0
|
||||||
|
|
||||||
|
ConditionWidget < UIWidget
|
||||||
|
size: 18 18
|
||||||
|
|
||||||
|
$!first:
|
||||||
|
margin-left: 2
|
||||||
|
|
||||||
|
HealthOverlay < UIWidget
|
||||||
|
id: healthOverlay
|
||||||
|
anchors.fill: parent
|
||||||
|
phantom: true
|
||||||
|
|
||||||
|
HealthBar
|
||||||
|
id: topHealthBar
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.horizontalCenter
|
||||||
|
phantom: true
|
||||||
|
|
||||||
|
ManaBar
|
||||||
|
id: topManaBar
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.left: parent.horizontalCenter
|
||||||
|
phantom: true
|
||||||
|
|
||||||
|
UIProgressBar
|
||||||
|
id: healthCircle
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
image-source: /images/game/circle/left_empty
|
||||||
|
margin-right: 169
|
||||||
|
margin-bottom: 16
|
||||||
|
opacity: 0.5
|
||||||
|
phantom: true
|
||||||
|
|
||||||
|
UIProgressBar
|
||||||
|
id: healthCircleFront
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
image-source: /images/game/circle/left_full
|
||||||
|
margin-right: 169
|
||||||
|
margin-bottom: 16
|
||||||
|
opacity: 0.5
|
||||||
|
phantom: true
|
||||||
|
|
||||||
|
UIProgressBar
|
||||||
|
id: manaCircle
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
image-source: /images/game/circle/right_empty
|
||||||
|
margin-left: 130
|
||||||
|
margin-bottom: 16
|
||||||
|
opacity: 0.5
|
||||||
|
phantom: true
|
||||||
|
|
||||||
|
UIProgressBar
|
||||||
|
id: manaCircleFront
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
|
image-source: /images/game/circle/right_full
|
||||||
|
margin-left: 130
|
||||||
|
margin-bottom: 16
|
||||||
|
opacity: 0.4
|
||||||
|
image-color: #0000FFFF
|
||||||
|
phantom: true
|
||||||
|
|
||||||
|
HealthInfoWindow < MiniWindow
|
||||||
|
icon: /images/topbuttons/healthinfo
|
||||||
|
!text: tr('Health Info')
|
||||||
|
height: 123
|
||||||
|
|
||||||
|
MiniWindowContents
|
||||||
|
HealthBar
|
||||||
|
id: healthBar
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
margin: 2
|
||||||
|
margin-top: 1
|
||||||
|
|
||||||
|
ManaBar
|
||||||
|
id: manaBar
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
margin: 2
|
||||||
|
|
||||||
|
ExperienceBar
|
||||||
|
Panel
|
||||||
|
id: conditionPanel
|
||||||
|
layout:
|
||||||
|
type: horizontalBox
|
||||||
|
height: 22
|
||||||
|
margin-top: 4
|
||||||
|
padding: 2
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.right: parent.right
|
||||||
|
border-width: 1
|
||||||
|
border-color: #00000077
|
||||||
|
background-color: #ffffff11
|
||||||
|
SoulLabel
|
||||||
|
CapLabel
|
||||||
|
|
299
data/styles/40-inventory.otui
Normal file
@ -0,0 +1,299 @@
|
|||||||
|
InventoryItem < Item
|
||||||
|
$on:
|
||||||
|
image-source: /images/ui/item-blessed
|
||||||
|
|
||||||
|
HeadSlot < InventoryItem
|
||||||
|
id: slot1
|
||||||
|
image-source: /images/game/slots/head
|
||||||
|
&position: {x=65535, y=1, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/head-blessed
|
||||||
|
|
||||||
|
BodySlot < InventoryItem
|
||||||
|
id: slot4
|
||||||
|
image-source: /images/game/slots/body
|
||||||
|
&position: {x=65535, y=4, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/body-blessed
|
||||||
|
|
||||||
|
LegSlot < InventoryItem
|
||||||
|
id: slot7
|
||||||
|
image-source: /images/game/slots/legs
|
||||||
|
&position: {x=65535, y=7, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/legs-blessed
|
||||||
|
|
||||||
|
FeetSlot < InventoryItem
|
||||||
|
id: slot8
|
||||||
|
image-source: /images/game/slots/feet
|
||||||
|
&position: {x=65535, y=8, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/feet-blessed
|
||||||
|
|
||||||
|
NeckSlot < InventoryItem
|
||||||
|
id: slot2
|
||||||
|
image-source: /images/game/slots/neck
|
||||||
|
&position: {x=65535, y=2, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/neck-blessed
|
||||||
|
|
||||||
|
LeftSlot < InventoryItem
|
||||||
|
id: slot6
|
||||||
|
image-source: /images/game/slots/left-hand
|
||||||
|
&position: {x=65535, y=6, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/left-hand-blessed
|
||||||
|
|
||||||
|
FingerSlot < InventoryItem
|
||||||
|
id: slot9
|
||||||
|
image-source: /images/game/slots/finger
|
||||||
|
&position: {x=65535, y=9, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/finger-blessed
|
||||||
|
|
||||||
|
BackSlot < InventoryItem
|
||||||
|
id: slot3
|
||||||
|
image-source: /images/game/slots/back
|
||||||
|
&position: {x=65535, y=3, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/back-blessed
|
||||||
|
|
||||||
|
RightSlot < InventoryItem
|
||||||
|
id: slot5
|
||||||
|
image-source: /images/game/slots/right-hand
|
||||||
|
&position: {x=65535, y=5, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/right-hand-blessed
|
||||||
|
|
||||||
|
AmmoSlot < InventoryItem
|
||||||
|
id: slot10
|
||||||
|
image-source: /images/game/slots/ammo
|
||||||
|
&position: {x=65535, y=10, z=0}
|
||||||
|
$on:
|
||||||
|
image-source: /images/game/slots/ammo-blessed
|
||||||
|
|
||||||
|
PurseButton < UIButton
|
||||||
|
id: purseButton
|
||||||
|
size: 34 12
|
||||||
|
!tooltip: tr('Open purse')
|
||||||
|
icon-source: /images/game/slots/purse
|
||||||
|
icon-clip: 0 0 34 12
|
||||||
|
|
||||||
|
$on:
|
||||||
|
icon-clip: 0 12 34 12
|
||||||
|
|
||||||
|
$pressed:
|
||||||
|
icon-clip: 0 12 34 12
|
||||||
|
|
||||||
|
CombatBox < UICheckBox
|
||||||
|
size: 20 20
|
||||||
|
image-clip: 0 0 20 20
|
||||||
|
margin-left: 4
|
||||||
|
|
||||||
|
$checked:
|
||||||
|
image-clip: 0 20 20 20
|
||||||
|
|
||||||
|
|
||||||
|
InventoryButton < Button
|
||||||
|
font: verdana-11px-antialised
|
||||||
|
height: 18
|
||||||
|
margin-top: 2
|
||||||
|
text-align: center
|
||||||
|
|
||||||
|
SoulCapLabel < GameLabel
|
||||||
|
text-align: center
|
||||||
|
color: #FFFFFF
|
||||||
|
font: cipsoftFont
|
||||||
|
margin-top: 4
|
||||||
|
text-offset: 0 3
|
||||||
|
width: 36
|
||||||
|
height: 20
|
||||||
|
icon-source: /images/game/slots/soulcap
|
||||||
|
|
||||||
|
FightOffensiveBox < CombatBox
|
||||||
|
image-source: /images/game/combatmodes/fightoffensive
|
||||||
|
FightBalancedBox < CombatBox
|
||||||
|
image-source: /images/game/combatmodes/fightbalanced
|
||||||
|
FightDefensiveBox < CombatBox
|
||||||
|
image-source: /images/game/combatmodes/fightdefensive
|
||||||
|
ChaseModeBox < CombatBox
|
||||||
|
image-source: /images/game/combatmodes/chasemode
|
||||||
|
SafeFightBox < CombatBox
|
||||||
|
image-source: /images/game/combatmodes/safefight
|
||||||
|
|
||||||
|
MountButton < CombatBox
|
||||||
|
image-source: /images/game/combatmodes/mount
|
||||||
|
|
||||||
|
InventoryWindow < MiniWindow
|
||||||
|
icon: /images/topbuttons/inventory
|
||||||
|
height: 200
|
||||||
|
id: inventoryWindow
|
||||||
|
@onClose: modules.game_inventory.onMiniWindowClose()
|
||||||
|
&save: true
|
||||||
|
&autoOpen: 3
|
||||||
|
|
||||||
|
MiniWindowContents
|
||||||
|
anchors.left: parent.left
|
||||||
|
|
||||||
|
Panel
|
||||||
|
id: inventoryPanel
|
||||||
|
margin-right: 63
|
||||||
|
margin-top: 2
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
HeadSlot
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
margin-top: 3
|
||||||
|
|
||||||
|
BodySlot
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin-top: 3
|
||||||
|
|
||||||
|
LegSlot
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin-top: 3
|
||||||
|
|
||||||
|
FeetSlot
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin-top: 3
|
||||||
|
|
||||||
|
NeckSlot
|
||||||
|
anchors.top: slot1.top
|
||||||
|
anchors.right: slot1.left
|
||||||
|
margin-top: 13
|
||||||
|
margin-right: 5
|
||||||
|
|
||||||
|
LeftSlot
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin-top: 3
|
||||||
|
|
||||||
|
FingerSlot
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin-top: 3
|
||||||
|
|
||||||
|
BackSlot
|
||||||
|
anchors.top: slot1.top
|
||||||
|
anchors.left: slot1.right
|
||||||
|
margin-top: 13
|
||||||
|
margin-left: 5
|
||||||
|
|
||||||
|
RightSlot
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin-top: 3
|
||||||
|
|
||||||
|
AmmoSlot
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.horizontalCenter: prev.horizontalCenter
|
||||||
|
margin-top: 3
|
||||||
|
|
||||||
|
SoulCapLabel
|
||||||
|
id: soulLabel
|
||||||
|
anchors.top: slot10.bottom
|
||||||
|
anchors.horizontalCenter: slot10.horizontalCenter
|
||||||
|
|
||||||
|
SoulCapLabel
|
||||||
|
id: capLabel
|
||||||
|
anchors.top: slot9.bottom
|
||||||
|
anchors.horizontalCenter: slot9.horizontalCenter
|
||||||
|
|
||||||
|
PurseButton
|
||||||
|
anchors.left: slot3.left
|
||||||
|
anchors.bottom: slot3.top
|
||||||
|
margin-bottom: 3
|
||||||
|
|
||||||
|
Panel
|
||||||
|
id: conditionPanel
|
||||||
|
layout:
|
||||||
|
type: horizontalBox
|
||||||
|
height: 22
|
||||||
|
padding: 2
|
||||||
|
anchors.top: slot8.bottom
|
||||||
|
anchors.left: slot6.left
|
||||||
|
anchors.right: slot5.right
|
||||||
|
margin-top: 4
|
||||||
|
border-width: 1
|
||||||
|
border-color: #00000077
|
||||||
|
background-color: #ffffff22
|
||||||
|
|
||||||
|
Panel
|
||||||
|
margin-top: 5
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.left: prev.right
|
||||||
|
|
||||||
|
FightOffensiveBox
|
||||||
|
id: fightOffensiveBox
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin-left: 8
|
||||||
|
|
||||||
|
ChaseModeBox
|
||||||
|
id: chaseModeBox
|
||||||
|
anchors.left: prev.right
|
||||||
|
anchors.top: parent.top
|
||||||
|
|
||||||
|
FightBalancedBox
|
||||||
|
id: fightBalancedBox
|
||||||
|
margin-top: 22
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin-left: 8
|
||||||
|
|
||||||
|
SafeFightBox
|
||||||
|
id: safeFightBox
|
||||||
|
margin-top: 22
|
||||||
|
anchors.left: prev.right
|
||||||
|
anchors.top: parent.top
|
||||||
|
|
||||||
|
FightDefensiveBox
|
||||||
|
id: fightDefensiveBox
|
||||||
|
margin-top: 44
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin-left: 8
|
||||||
|
|
||||||
|
MountButton
|
||||||
|
id: mountButton
|
||||||
|
margin-top: 44
|
||||||
|
anchors.left: prev.right
|
||||||
|
anchors.top: parent.top
|
||||||
|
|
||||||
|
Panel
|
||||||
|
id: buttonsPanel
|
||||||
|
margin-top: 4
|
||||||
|
margin-right: 5
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
layout:
|
||||||
|
type: verticalBox
|
||||||
|
|
||||||
|
UIButton
|
||||||
|
id: buttonPvp
|
||||||
|
height: 20
|
||||||
|
icon: /images/game/combatmodes/pvp
|
||||||
|
icon-clip: 0 0 42 20
|
||||||
|
|
||||||
|
$on:
|
||||||
|
icon-clip: 0 20 42 20
|
||||||
|
|
||||||
|
InventoryButton
|
||||||
|
!text: tr('Stop')
|
||||||
|
@onClick: g_game.stop(); g_game.cancelAttackAndFollow()
|
||||||
|
|
||||||
|
InventoryButton
|
||||||
|
!text: tr('Options')
|
||||||
|
@onClick: modules.client_options.toggle()
|
||||||
|
|
||||||
|
InventoryButton
|
||||||
|
!text: tr('Hotkeys')
|
||||||
|
@onClick: modules.game_hotkeys.toggle()
|
||||||
|
|
||||||
|
InventoryButton
|
||||||
|
!text: tr('Logout')
|
||||||
|
@onClick: modules.game_interface.tryLogout()
|
268
data/styles/40-minimap.otui
Normal file
@ -0,0 +1,268 @@
|
|||||||
|
MinimapFlag < UIWidget
|
||||||
|
size: 11 11
|
||||||
|
focusable: false
|
||||||
|
|
||||||
|
MinimapCross < UIWidget
|
||||||
|
focusable: false
|
||||||
|
phantom: true
|
||||||
|
image: /images/game/minimap/cross
|
||||||
|
size: 16 16
|
||||||
|
|
||||||
|
MinimapFloorUpButton < Button
|
||||||
|
size: 20 20
|
||||||
|
margin-right: 28
|
||||||
|
margin-bottom: 28
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
icon-source: /images/game/minimap/floor_up
|
||||||
|
icon-clip: 0 32 16 16
|
||||||
|
$pressed:
|
||||||
|
icon-clip: 0 0 16 16
|
||||||
|
$hover !pressed:
|
||||||
|
icon-clip: 0 16 16 16
|
||||||
|
|
||||||
|
MinimapFloorDownButton < Button
|
||||||
|
size: 20 20
|
||||||
|
margin-right: 28
|
||||||
|
margin-bottom: 4
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
icon-source: /images/game/minimap/floor_down
|
||||||
|
icon-clip: 0 32 16 16
|
||||||
|
$pressed:
|
||||||
|
icon-clip: 0 0 16 16
|
||||||
|
$hover !pressed:
|
||||||
|
icon-clip: 0 16 16 16
|
||||||
|
|
||||||
|
MinimapZoomInButton < Button
|
||||||
|
text: +
|
||||||
|
size: 20 20
|
||||||
|
margin-right: 4
|
||||||
|
margin-bottom: 28
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
//icon-source: /images/game/minimap/zoom_in
|
||||||
|
|
||||||
|
MinimapZoomOutButton < Button
|
||||||
|
text: -
|
||||||
|
size: 20 20
|
||||||
|
margin-right: 4
|
||||||
|
margin-bottom: 4
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
//icon-source: /images/game/minimap/zoom_out
|
||||||
|
|
||||||
|
MinimapResetButton < Button
|
||||||
|
!text: tr('Center')
|
||||||
|
size: 44 20
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
margin: 4
|
||||||
|
|
||||||
|
Minimap < UIMinimap
|
||||||
|
draggable: true
|
||||||
|
focusable: false
|
||||||
|
cross: true
|
||||||
|
color: black
|
||||||
|
|
||||||
|
MinimapFloorUpButton
|
||||||
|
id: floorUpWidget
|
||||||
|
@onClick: self:getParent():floorUp(1)
|
||||||
|
|
||||||
|
MinimapFloorDownButton
|
||||||
|
id: floorDownWidget
|
||||||
|
@onClick: self:getParent():floorDown(1)
|
||||||
|
|
||||||
|
MinimapZoomInButton
|
||||||
|
id: zoomInWidget
|
||||||
|
@onClick: self:getParent():zoomIn()
|
||||||
|
|
||||||
|
MinimapZoomOutButton
|
||||||
|
id: zoomOutWidget
|
||||||
|
@onClick: self:getParent():zoomOut()
|
||||||
|
|
||||||
|
MinimapResetButton
|
||||||
|
id: resetWidget
|
||||||
|
@onClick: self:getParent():reset()
|
||||||
|
|
||||||
|
|
||||||
|
// Minimap Flag Create Window
|
||||||
|
|
||||||
|
|
||||||
|
MinimapFlagCheckBox < CheckBox
|
||||||
|
size: 15 15
|
||||||
|
margin-left: 2
|
||||||
|
image-source: /images/game/minimap/flagcheckbox
|
||||||
|
image-size: 15 15
|
||||||
|
image-border: 3
|
||||||
|
icon-source: /images/game/minimap/mapflags
|
||||||
|
icon-size: 11 11
|
||||||
|
icon-offset: 2 4
|
||||||
|
anchors.left: prev.right
|
||||||
|
anchors.top: prev.top
|
||||||
|
$!checked:
|
||||||
|
image-clip: 26 0 26 26
|
||||||
|
$hover !checked:
|
||||||
|
image-clip: 78 0 26 26
|
||||||
|
$checked:
|
||||||
|
image-clip: 0 0 26 26
|
||||||
|
$hover checked:
|
||||||
|
image-clip: 52 0 26 26
|
||||||
|
|
||||||
|
MinimapFlagWindow < MainWindow
|
||||||
|
!text: tr('Create Map Mark')
|
||||||
|
size: 196 185
|
||||||
|
|
||||||
|
Label
|
||||||
|
!text: tr('Position') .. ':'
|
||||||
|
text-auto-resize: true
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.left: parent.left
|
||||||
|
margin-top: 2
|
||||||
|
|
||||||
|
Label
|
||||||
|
id: position
|
||||||
|
text-auto-resize: true
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.right: parent.right
|
||||||
|
margin-top: 2
|
||||||
|
|
||||||
|
Label
|
||||||
|
!text: tr('Description') .. ':'
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
margin-top: 7
|
||||||
|
|
||||||
|
TextEdit
|
||||||
|
id: description
|
||||||
|
margin-top: 3
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
anchors.right: parent.right
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag0
|
||||||
|
icon-source: /images/game/minimap/flag0
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
margin-top: 6
|
||||||
|
margin-left: 0
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag1
|
||||||
|
icon-source: /images/game/minimap/flag1
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag2
|
||||||
|
icon-source: /images/game/minimap/flag2
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag3
|
||||||
|
icon-source: /images/game/minimap/flag3
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag4
|
||||||
|
icon-source: /images/game/minimap/flag4
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag5
|
||||||
|
icon-source: /images/game/minimap/flag5
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag6
|
||||||
|
icon-source: /images/game/minimap/flag6
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag7
|
||||||
|
icon-source: /images/game/minimap/flag7
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag8
|
||||||
|
icon-source: /images/game/minimap/flag8
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag9
|
||||||
|
icon-source: /images/game/minimap/flag9
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag10
|
||||||
|
icon-source: /images/game/minimap/flag10
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: prev.bottom
|
||||||
|
margin-top: 6
|
||||||
|
margin-left: 0
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag11
|
||||||
|
icon-source: /images/game/minimap/flag11
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag12
|
||||||
|
icon-source: /images/game/minimap/flag12
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag13
|
||||||
|
icon-source: /images/game/minimap/flag13
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag14
|
||||||
|
icon-source: /images/game/minimap/flag14
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag15
|
||||||
|
icon-source: /images/game/minimap/flag15
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag16
|
||||||
|
icon-source: /images/game/minimap/flag16
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag17
|
||||||
|
icon-source: /images/game/minimap/flag17
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag18
|
||||||
|
icon-source: /images/game/minimap/flag18
|
||||||
|
|
||||||
|
MinimapFlagCheckBox
|
||||||
|
id: flag19
|
||||||
|
icon-source: /images/game/minimap/flag19
|
||||||
|
|
||||||
|
Button
|
||||||
|
id: okButton
|
||||||
|
!text: tr('Ok')
|
||||||
|
width: 64
|
||||||
|
anchors.right: next.left
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
margin-right: 10
|
||||||
|
|
||||||
|
Button
|
||||||
|
id: cancelButton
|
||||||
|
!text: tr('Cancel')
|
||||||
|
width: 64
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
|
||||||
|
MinimapWindow < MiniWindow
|
||||||
|
height: 150
|
||||||
|
|
||||||
|
Label
|
||||||
|
text: ?
|
||||||
|
text-align: center
|
||||||
|
phantom: false
|
||||||
|
!tooltip: tr('Hold left mouse button to navigate\nScroll mouse middle button to zoom\nRight mouse button to create map marks\nPress Ctrl+Shift+M to view the entire game map')
|
||||||
|
anchors.top: lockButton.top
|
||||||
|
anchors.right: lockButton.left
|
||||||
|
margin-right: 3
|
||||||
|
size: 14 14
|
||||||
|
|
||||||
|
MiniWindowContents
|
||||||
|
Minimap
|
||||||
|
id: minimap
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
ResizeBorder
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.bottom: parent.bottom
|
||||||
|
enabled: true
|
2
data/things/.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
*
|
|
||||||
!.gitignore
|
|
20
init.lua
@ -1,6 +1,7 @@
|
|||||||
-- CONFIG
|
-- CONFIG
|
||||||
APP_NAME = "otclientv8" -- important, change it, it's name for config dir and files in appdata
|
APP_NAME = "otclientv8" -- important, change it, it's name for config dir and files in appdata
|
||||||
APP_VERSION = 1337 -- client version for updater and login to identify outdated client
|
APP_VERSION = 1337 -- client version for updater and login to identify outdated client
|
||||||
|
DEFAULT_LAYOUT = "retro"
|
||||||
|
|
||||||
-- If you don't use updater or other service, set it to updater = ""
|
-- If you don't use updater or other service, set it to updater = ""
|
||||||
Services = {
|
Services = {
|
||||||
@ -8,18 +9,19 @@ Services = {
|
|||||||
updater = "",
|
updater = "",
|
||||||
stats = "",
|
stats = "",
|
||||||
crash = "http://otclient.ovh/api/crash.php",
|
crash = "http://otclient.ovh/api/crash.php",
|
||||||
feedback = "http://otclient.ovh/api/feedback.php"
|
feedback = "",
|
||||||
|
status = "http://otclient.ovh/api/status.php"
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Servers accept http login url, websocket login url or ip:port:version
|
-- Servers accept http login url, websocket login url or ip:port:version
|
||||||
Servers = {
|
Servers = {
|
||||||
|
-- OTClientV8c = "otclient.ovh:7171:1099:25:30:80:90",
|
||||||
-- OTClientV8 = "http://otclient.ovh/api/login.php",
|
-- OTClientV8 = "http://otclient.ovh/api/login.php",
|
||||||
-- OTClientV8Websocket = "wss://otclient.ovh:3000/",
|
|
||||||
-- OTClientV8proxy = "http://otclient.ovh/api/login.php?proxy=1",
|
-- OTClientV8proxy = "http://otclient.ovh/api/login.php?proxy=1",
|
||||||
-- OTClientV8ClassicWithFeatures = "otclient.ovh:7171:1099:25:30:80:90",
|
-- OTClientV8Test = "http://otclient.ovh/api/login2.php",
|
||||||
-- OTClientV8Classic = "otclient.ovh:7171:1099"
|
|
||||||
}
|
}
|
||||||
USE_NEW_ENERGAME = false -- uses entergamev2 based on websockets instead of entergame
|
|
||||||
|
USE_NEW_ENERGAME = false -- not done yet
|
||||||
ALLOW_CUSTOM_SERVERS = true -- if true it shows option ANOTHER on server list
|
ALLOW_CUSTOM_SERVERS = true -- if true it shows option ANOTHER on server list
|
||||||
-- CONFIG END
|
-- CONFIG END
|
||||||
|
|
||||||
@ -58,6 +60,14 @@ end
|
|||||||
-- settings
|
-- settings
|
||||||
g_configs.loadSettings("/config.otml")
|
g_configs.loadSettings("/config.otml")
|
||||||
|
|
||||||
|
-- set layout
|
||||||
|
local settings = g_configs.getSettings()
|
||||||
|
local layout = DEFAULT_LAYOUT
|
||||||
|
if settings:exists('layout') then
|
||||||
|
layout = settings:getValue('layout')
|
||||||
|
end
|
||||||
|
g_resources.setLayout(layout)
|
||||||
|
|
||||||
-- load mods
|
-- load mods
|
||||||
g_modules.discoverModules()
|
g_modules.discoverModules()
|
||||||
|
|
||||||
|
4
layouts/README.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
## Layouts overwrite files from `/data`
|
||||||
|
Foe example, if you have file `/data/images/background.png` and `/layouts/dragonball/images/background.png`, and dragonball layout is selected, then `/layouts/dragonball/images/background.png` will be loaded instead of `/data/images/background.png`.
|
||||||
|
|
||||||
|
## Dont make layout named `default`, this name is reserved
|
BIN
layouts/retro/images/background.png
Normal file
After Width: | Height: | Size: 656 KiB |
BIN
layouts/retro/images/game/console/channels.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
layouts/retro/images/game/console/clearchannel.png
Normal file
After Width: | Height: | Size: 669 B |
BIN
layouts/retro/images/game/console/closechannel.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
layouts/retro/images/game/console/ignore.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
layouts/retro/images/game/console/leftarrow.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
layouts/retro/images/game/console/rightarrow.png
Normal file
After Width: | Height: | Size: 285 B |
BIN
layouts/retro/images/game/console/say.png
Normal file
After Width: | Height: | Size: 803 B |
BIN
layouts/retro/images/game/console/trademsg.png
Normal file
After Width: | Height: | Size: 695 B |
BIN
layouts/retro/images/game/console/whisper.png
Normal file
After Width: | Height: | Size: 776 B |
BIN
layouts/retro/images/game/console/yell.png
Normal file
After Width: | Height: | Size: 849 B |
BIN
layouts/retro/images/topbuttons/analyzers.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
layouts/retro/images/topbuttons/audio.png
Normal file
After Width: | Height: | Size: 814 B |
BIN
layouts/retro/images/topbuttons/audio_mute.png
Normal file
After Width: | Height: | Size: 822 B |
BIN
layouts/retro/images/topbuttons/battle.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
layouts/retro/images/topbuttons/bot.png
Normal file
After Width: | Height: | Size: 401 B |
BIN
layouts/retro/images/topbuttons/ciclopedia.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
layouts/retro/images/topbuttons/compedium.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
layouts/retro/images/topbuttons/cooldowns.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
layouts/retro/images/topbuttons/dailyreward.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
layouts/retro/images/topbuttons/debug.png
Normal file
After Width: | Height: | Size: 1009 B |
BIN
layouts/retro/images/topbuttons/exit.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
layouts/retro/images/topbuttons/healthinfo.png
Normal file
After Width: | Height: | Size: 966 B |
BIN
layouts/retro/images/topbuttons/hotkeys.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
layouts/retro/images/topbuttons/inventory.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
layouts/retro/images/topbuttons/login.png
Normal file
After Width: | Height: | Size: 962 B |
BIN
layouts/retro/images/topbuttons/logout.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
layouts/retro/images/topbuttons/minimap.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
layouts/retro/images/topbuttons/modulemanager.png
Normal file
After Width: | Height: | Size: 952 B |
BIN
layouts/retro/images/topbuttons/motd.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
layouts/retro/images/topbuttons/options.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
layouts/retro/images/topbuttons/particles.png
Normal file
After Width: | Height: | Size: 571 B |
BIN
layouts/retro/images/topbuttons/prey.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
layouts/retro/images/topbuttons/questlog.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
layouts/retro/images/topbuttons/shop.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
layouts/retro/images/topbuttons/skills.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
layouts/retro/images/topbuttons/spelllist.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
layouts/retro/images/topbuttons/terminal.png
Normal file
After Width: | Height: | Size: 871 B |
BIN
layouts/retro/images/topbuttons/unjustifiedpoints.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
layouts/retro/images/topbuttons/viplist.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
layouts/retro/images/ui/arrow_horizontal.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
layouts/retro/images/ui/arrow_vertical.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
layouts/retro/images/ui/broder_panel.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
layouts/retro/images/ui/button.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
layouts/retro/images/ui/checkbox.png
Normal file
After Width: | Height: | Size: 526 B |
BIN
layouts/retro/images/ui/colorbox.png
Normal file
After Width: | Height: | Size: 262 B |
BIN
layouts/retro/images/ui/combobox.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
layouts/retro/images/ui/combobox_rounded.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
layouts/retro/images/ui/combobox_square.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
layouts/retro/images/ui/icon_add.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
layouts/retro/images/ui/item.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
layouts/retro/images/ui/menubarleft.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
layouts/retro/images/ui/menubox.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
layouts/retro/images/ui/minibroder.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
layouts/retro/images/ui/miniwindow.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
layouts/retro/images/ui/miniwindow_buttons.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
layouts/retro/images/ui/noimage.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
layouts/retro/images/ui/option_button.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
layouts/retro/images/ui/options_broder.png
Normal file
After Width: | Height: | Size: 193 B |
BIN
layouts/retro/images/ui/panel_bottom.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
layouts/retro/images/ui/panel_flat.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
layouts/retro/images/ui/panel_map.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
layouts/retro/images/ui/panel_side.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
layouts/retro/images/ui/panel_top.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
layouts/retro/images/ui/progress_icons.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
layouts/retro/images/ui/progressbar.png
Normal file
After Width: | Height: | Size: 759 B |
BIN
layouts/retro/images/ui/progressbarhpmana.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
layouts/retro/images/ui/progressbarskills.png
Normal file
After Width: | Height: | Size: 400 B |
BIN
layouts/retro/images/ui/scrollbar.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
layouts/retro/images/ui/separator_horizontal.png
Normal file
After Width: | Height: | Size: 17 KiB |