mirror of
https://github.com/Znote/ZnoteAAC.git
synced 2025-04-29 18:59:21 +02:00
TFS 0.2 and 1.0 report bug system
Players can say !report SomeMessageHere to send a report to database, it will automatically fetch position of player etc. You can check reports in admin panel and change status of them, and optionally reward player with points if you feel they deserve it for reporting the bug. Default working TFS 1.0 scripts for shop and firstitems
This commit is contained in:
parent
0e90c050a8
commit
dfce8d97dd
@ -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. :)
|
77
LUA/TFS_10/creaturescript firstitems/firstitems.lua
Normal file
77
LUA/TFS_10/creaturescript firstitems/firstitems.lua
Normal file
@ -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
|
20
LUA/TFS_10/talkaction report system/adminreport.lua
Normal file
20
LUA/TFS_10/talkaction report system/adminreport.lua
Normal file
@ -0,0 +1,20 @@
|
||||
-- <talkaction words="!report" separator=" " script="adminreport.lua"/>
|
||||
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
|
1
LUA/TFS_10/talkaction shopsystem/talkaction XML.txt
Normal file
1
LUA/TFS_10/talkaction shopsystem/talkaction XML.txt
Normal file
@ -0,0 +1 @@
|
||||
<talkaction words="!shop" script="znoteshop.lua"/>
|
49
LUA/TFS_10/talkaction shopsystem/znoteshop.lua
Normal file
49
LUA/TFS_10/talkaction shopsystem/znoteshop.lua
Normal file
@ -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
|
136
admin_reports.php
Normal file
136
admin_reports.php
Normal file
@ -0,0 +1,136 @@
|
||||
<?php require_once 'engine/init.php';
|
||||
protect_page(); admin_only($user_data);
|
||||
include 'layout/overall/header.php';
|
||||
|
||||
// Report status types. When a player make new report it will be default to 0.
|
||||
// Feel free to add/remove and change name/color of status types.
|
||||
$statusTypes = array(
|
||||
0 => '<font color="purple">Reported</font>',
|
||||
1 => '<font color="darkblue">To-Do List</font>',
|
||||
2 => '<font color="red">Confirmed bug</font>',
|
||||
3 => '<font color="grey">Invalid</font>',
|
||||
4 => '<font color="grey">Rejected</font>',
|
||||
5 => '<font color="green"><b>Fixed</b></font>'
|
||||
);
|
||||
|
||||
// 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 "<font color='green' size='5'>".$playerName." has been granted ".$price." points for his reports.</font>";
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
?>
|
||||
<div style="width: 300px; margin: auto;">
|
||||
<form action="admin_reports.php" method="POST">
|
||||
Player: <a target="_BLANK" href="characterprofile.php?name=<?php echo $report['name']; ?>"><?php echo $report['name']; ?></a>
|
||||
<input type="hidden" name="playerName" value="<?php echo $report['name']; ?>">
|
||||
<input type="hidden" name="id" value="<?php echo $report['id']; ?>">
|
||||
<br>Set status:
|
||||
<select name="status">
|
||||
<?php
|
||||
foreach ($statusTypes as $sid => $sname) {
|
||||
if ($sid != $report['status']) echo "<option value='$sid'>$sname</option>";
|
||||
else echo "<option value='$sid' selected>$sname</option>";
|
||||
}
|
||||
?>
|
||||
</select><br>
|
||||
Give user points:
|
||||
<select name="price">
|
||||
<option value='0'>0</option>
|
||||
<?php
|
||||
foreach ($config['paypal_prices'] as $price) {
|
||||
echo "<option value='$price'>$price</option>";
|
||||
}
|
||||
?>
|
||||
</select> + <input name="customPoints" type="text" style="width: 50px;" placeholder="0"><br><br>
|
||||
<input type="submit" value="Update Report" style="width: 100%;">
|
||||
</form>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
// If sql data is not empty
|
||||
if ($reportsData !== false) {
|
||||
|
||||
// Render HTML
|
||||
?>
|
||||
<center>
|
||||
<h1>Reports List</h1>
|
||||
<table class="table tbl" border="0" cellspacing="1" cellpadding="4" width="100%">
|
||||
<tr class="yellow">
|
||||
<td><b><font color=white><center>Info</center></font></b></td>
|
||||
<td><b><font color=white><center>Description</center></font></b></td>
|
||||
</tr>
|
||||
<?php
|
||||
foreach ($reports as $report) {
|
||||
?>
|
||||
<tr>
|
||||
<td width="38%"> <b>Report ID:</b> #<?php echo $report['id']; ?>
|
||||
<br><b>Name:</b> <a href="characterprofile.php?name=<?php echo $report['name']; ?>"><?php echo $report['name']; ?></a>
|
||||
<br><b>Position:</b> <input type="text" disabled value="/pos <?php echo $report['posx'].', '.$report['posy'].', '.$report['posz']; ?>">
|
||||
<br><b>Reported:</b> <?php echo getClock($report['date'], true, true); ?>
|
||||
<br><b>Status:</b> <?php echo $statusTypes[$report['status']]; ?>. <a href="?action=edit&name=<?php echo $report['name'].'&id='.$report['id']; ?>">Edit</a>
|
||||
</td>
|
||||
<td>
|
||||
<center><?php echo $report['report_description']; ?></center>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
</center>
|
||||
<?php
|
||||
} else echo "<h2>No reports submitted.</h2>";
|
||||
include 'layout/overall/footer.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'])) {
|
||||
|
@ -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,
|
||||
|
@ -14,6 +14,9 @@
|
||||
<li>
|
||||
<a href='admin_skills.php'>Admin Skills</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href='admin_reports.php'>Admin Reports</a>
|
||||
</li>
|
||||
<?php
|
||||
$new = 0;
|
||||
$cat = 4; //Category ID for feedback section
|
||||
|
Loading…
x
Reference in New Issue
Block a user