diff --git a/LUA/TFS_10/creaturescript firstitems/Installation Instructions.txt b/LUA/TFS_10/creaturescript firstitems/Installation Instructions.txt
new file mode 100644
index 0000000..4b60316
--- /dev/null
+++ b/LUA/TFS_10/creaturescript firstitems/Installation Instructions.txt
@@ -0,0 +1,4 @@
+Step 1: Copy firstitems.lua to /data/creaturescripts/scripts/ folder
+-- Edit firstitems.lua with item IDs you want characters to start with on your server.
+
+Step 2: Restart OT server, and it should work. :)
\ No newline at end of file
diff --git a/LUA/TFS_10/creaturescript firstitems/firstitems.lua b/LUA/TFS_10/creaturescript firstitems/firstitems.lua
new file mode 100644
index 0000000..c0043be
--- /dev/null
+++ b/LUA/TFS_10/creaturescript firstitems/firstitems.lua
@@ -0,0 +1,77 @@
+function onLogin(cid)
+ local storage = 30055 -- storage value
+
+ local sorcItems = {
+ 2460, -- Brass helmet
+ 2465, -- Brass armor
+ 2190, -- Wand of vortex
+ 2511, -- Brass shield
+ 2478, -- Brass legs
+ 2643, -- Leather boots
+ 1988, -- Brown backpack
+ 2050 -- torch
+ }
+ local druidItems = {
+ 2460, -- Brass helmet
+ 2465, -- Brass armor
+ 2511, -- Brass shield
+ 2182, -- Snakebite rod
+ 2478, -- Brass legs
+ 2643, -- Leather boots
+ 1988, -- Brown backpack
+ 2050 -- torch
+ }
+ local pallyItems = {
+ 2460, -- Brass helmet
+ 2465, -- Brass armor
+ 2456, -- Bow
+ 2478, -- Brass legs
+ 2643, -- Leather boots
+ 1988, -- Brown backpack
+ }
+ local kinaItems = {
+ 2460, -- Brass helmet
+ 2465, -- Brass armor
+ 2511, -- Brass shield
+ 2412, -- Katana
+ 2478, -- Brass legs
+ 2643, -- Leather boots
+ 1988, -- Brown backpack
+ 2050 -- torch
+ }
+
+ if getPlayerStorageValue(cid, storage) == -1 then
+ setPlayerStorageValue(cid, storage, 1)
+ if getPlayerVocation(cid) == 1 then
+ -- Sorcerer
+ for i = 1, table.getn(sorcItems), 1 do
+ doPlayerAddItem(cid, sorcItems[i], 1, FALSE)
+ end
+
+ elseif getPlayerVocation(cid) == 2 then
+ -- Druid
+ for i = 1, table.getn(druidItems), 1 do
+ doPlayerAddItem(cid, druidItems[i], 1, FALSE)
+ end
+
+ elseif getPlayerVocation(cid) == 3 then
+ -- Paladin
+ for i = 1, table.getn(pallyItems), 1 do
+ doPlayerAddItem(cid, pallyItems[i], 1, FALSE)
+ end
+ -- 8 arrows
+ doPlayerAddItem(cid, 2544, 8, FALSE)
+
+ elseif getPlayerVocation(cid) == 4 then
+ -- Knight
+ for i = 1, table.getn(kinaItems), 1 do
+ doPlayerAddItem(cid, kinaItems[i], 1, FALSE)
+ end
+ end
+
+ -- Common for all
+ doPlayerAddItem(cid, 2674, 5, FALSE) -- 5 apples
+ doPlayerAddItem(cid, 2120, 1, FALSE) -- 1 rope
+ end
+ return true
+end
diff --git a/LUA/TFS_10/talkaction report system/adminreport.lua b/LUA/TFS_10/talkaction report system/adminreport.lua
new file mode 100644
index 0000000..c4262c5
--- /dev/null
+++ b/LUA/TFS_10/talkaction report system/adminreport.lua
@@ -0,0 +1,20 @@
+--
+function onSay(cid, words, param, channel)
+ local storage = 6708 -- (You can change the storage if its already in use)
+ local delaytime = 30 -- (Exhaust In Seconds.)
+ local x = getPlayerPosition(cid).x -- (Do not edit this.)
+ local y = getPlayerPosition(cid).y -- (Do not edit this.)
+ local z = getPlayerPosition(cid).z -- (Do not edit this.)
+ if(param == '') then
+ doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Command param required.")
+ return true
+ end
+ if (getPlayerStorageValue(cid, storage) <= os.time()) then
+ doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your report has been received successfully!")
+ db.query("INSERT INTO `player_reports` (`id` ,`name` ,`posx` ,`posy` ,`posz` ,`report_description` ,`date`)VALUES (NULL , '" .. getPlayerName(cid) .. "', '" .. x .. "', '" .. y .. "', '" .. z .. "', '" .. string.gsub(param, "'", "\\'") .. "', '" .. os.time() .. "')")
+ setPlayerStorageValue(cid,storage,os.time()+delaytime)
+ else
+ doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You have to wait 30 seconds to report again.")
+ end
+ return TRUE
+end
\ No newline at end of file
diff --git a/LUA/TFS_10/talkaction shopsystem/talkaction XML.txt b/LUA/TFS_10/talkaction shopsystem/talkaction XML.txt
new file mode 100644
index 0000000..2fdffee
--- /dev/null
+++ b/LUA/TFS_10/talkaction shopsystem/talkaction XML.txt
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/LUA/TFS_10/talkaction shopsystem/znoteshop.lua b/LUA/TFS_10/talkaction shopsystem/znoteshop.lua
new file mode 100644
index 0000000..3841348
--- /dev/null
+++ b/LUA/TFS_10/talkaction shopsystem/znoteshop.lua
@@ -0,0 +1,49 @@
+-- Znote Shop v1.0 for Znote AAC on TFS 0.2.13+ Mystic Spirit.
+function onSay(cid, words, param)
+ local storage = 54073 -- Make sure to select non-used storage. This is used to prevent SQL load attacks.
+ local cooldown = 15 -- in seconds.
+
+ if getPlayerStorageValue(cid, storage) <= os.time() then
+ setPlayerStorageValue(cid, storage, os.time() + cooldown)
+ local accid = getAccountNumberByPlayerName(getCreatureName(cid))
+
+ -- Create the query
+ local orderQuery = db.storeQuery("SELECT `id`, `type`, `itemid`, `count` FROM `znote_shop_orders` WHERE `account_id` = " .. accid .. " LIMIT 1;")
+
+ -- Detect if we got any results
+ if orderQuery ~= false then
+ -- Fetch order values
+ local q_id = result.getDataInt(orderQuery, "id")
+ local q_type = result.getDataInt(orderQuery, "type")
+ local q_itemid = result.getDataInt(orderQuery, "itemid")
+ local q_count = result.getDataInt(orderQuery, "count")
+ result.free(orderQuery)
+
+ -- ORDER TYPE 1 (Regular item shop products)
+ if q_type == 1 then
+ -- Get wheight
+ local playerCap = getPlayerFreeCap(cid)
+ local itemweight = getItemWeight(q_itemid, q_count)
+ if playerCap >= itemweight then
+ db.query("DELETE FROM `znote_shop_orders` WHERE `id` = " .. q_id .. ";")
+ doPlayerAddItem(cid, q_itemid, q_count)
+ doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Congratulations! You have recieved ".. q_count .." "..getItemName(q_itemid).."(s)!")
+ else
+ doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Need more CAP!")
+ end
+ end
+ -- Add custom order types here
+ -- Type 2 is reserved for premium days and is handled on website, not needed here.
+ -- Type 3 is reserved for character gender(sex) change and is handled on website as well.
+ -- So use type 4+ for custom stuff, like etc packages.
+ -- if q_type == 4 then
+ -- end
+ else
+ doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "You have no orders.")
+ end
+
+ else
+ doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Can only be executed once every "..cooldown.." seconds. Remaining cooldown: ".. getPlayerStorageValue(cid, storage) - os.time())
+ end
+ return false
+end
\ No newline at end of file
diff --git a/admin_reports.php b/admin_reports.php
new file mode 100644
index 0000000..3080f07
--- /dev/null
+++ b/admin_reports.php
@@ -0,0 +1,136 @@
+ 'Reported',
+ 1 => 'To-Do List',
+ 2 => 'Confirmed bug',
+ 3 => 'Invalid',
+ 4 => 'Rejected',
+ 5 => 'Fixed'
+);
+
+// Fetch data from SQL
+$reportsData = mysql_select_multi("SELECT id, name, posx, posy, posz, report_description, date, status FROM znote_player_reports ORDER BY id DESC;");
+// If sql data is not empty
+if ($reportsData !== false) {
+ // Order reports array by ID for easy reference later on.
+ $reports = array();
+ for ($i = 0; $i < count($reportsData); $i++) $reports[$reportsData[$i]['id']] = $reportsData[$i];
+}
+
+// POST logic (Update report and give player points)
+if (!empty($_POST)) {
+ // Fetch POST data
+ $playerName = getValue($_POST['playerName']);
+ $status = getValue($_POST['status']);
+ $price = getValue($_POST['price']);
+ $customPoints = getValue($_POST['customPoints']);
+ $reportId = getValue($_POST['id']);
+
+ if ($customPoints !== false) $price = (int)($price + $customPoints);
+
+ // Update SQL
+ mysql_update("UPDATE `znote_player_reports` SET `status`='$status' WHERE `id`='$reportId' LIMIT 1;");
+ // Update local array representation
+ $reports[$reportId]['status'] = $status;
+
+ // If we should give user price
+ if ($price > 0) {
+ $account = mysql_select_single("SELECT `a`.`id`, `a`.`email` FROM `accounts` AS `a`
+ INNER JOIN `players` AS `p` ON `p`.`account_id` = `a`.`id`
+ WHERE `p`.`name` = '$playerName' LIMIT 1;");
+
+ if ($account !== false) {
+ // transaction log
+ mysql_insert("INSERT INTO `znote_paypal` VALUES ('', '$reportId', 'report@admin.".$user_data['name']." to ".$account['email']."', '".$account['id']."', '0', '".$price."')");
+ // Process payment
+ $data = mysql_select_single("SELECT `points` AS `old_points` FROM `znote_accounts` WHERE `account_id`='".$account['id']."';");
+ // Give points to user
+ $new_points = $data['old_points'] + $price;
+ mysql_update("UPDATE `znote_accounts` SET `points`='$new_points' WHERE `account_id`='".$account['id']."'");
+
+ // Remind GM that he sent points to character
+ echo "".$playerName." has been granted ".$price." points for his reports.";
+ }
+ }
+
+// GET logic (Edit report data and specify how many [if any] points to give to user)
+} elseif (!empty($_GET)) {
+ // Fetch GET data
+ $action = getValue($_GET['action']);
+ $playerName = getValue($_GET['playerName']);
+ $reportId = getValue($_GET['id']);
+
+ // Fetch the report we intend to modify
+ $report = $reports[$reportId];
+
+ // Create html form
+ ?>
+
+
+
+ Reports List
+
+
+ No reports submitted.";
+include 'layout/overall/footer.php';
+?>
\ No newline at end of file
diff --git a/createcharacter.php b/createcharacter.php
index 98924da..32d34f8 100644
--- a/createcharacter.php
+++ b/createcharacter.php
@@ -21,7 +21,7 @@ if (empty($_POST) === false) {
if ($_POST['name'] === false) {
$errors[] = 'Your name can not contain more than 2 words.';
} else {
- if (user_character_exist($_POST['name']) === true) {
+ if (user_character_exist($_POST['name']) !== false) {
$errors[] = 'Sorry, that character name already exist.';
}
if (!preg_match("/^[a-zA-Z_ ]+$/", $_POST['name'])) {
diff --git a/engine/database/connect.php b/engine/database/connect.php
index a243881..38bd8b9 100644
--- a/engine/database/connect.php
+++ b/engine/database/connect.php
@@ -95,6 +95,17 @@ CREATE TABLE IF NOT EXISTS `znote_players` (
INSERT INTO `znote_players` (`player_id`, `created`, `hide_char`, `comment`) VALUES
('1', '$time', '0', '. . .');
+CREATE TABLE IF NOT EXISTS `znote_player_reports` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL,
+ `posx` int(6) NOT NULL,
+ `posy` int(6) NOT NULL,
+ `posz` int(6) NOT NULL,
+ `report_description` VARCHAR(255) NOT NULL,
+ `date` INT(11) NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
CREATE TABLE IF NOT EXISTS `znote_shop` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` int(11) NOT NULL,
diff --git a/layout/widgets/Wadmin.php b/layout/widgets/Wadmin.php
index dcd15d8..14e5670 100644
--- a/layout/widgets/Wadmin.php
+++ b/layout/widgets/Wadmin.php
@@ -14,6 +14,9 @@
Admin Skills
+
+ Admin Reports
+