Blizny
New Member
Mam pytanie jak banować w 9.4 bo klikam na postacc gmem i nie ma takich opcji jak w 8.6 ;/ hmmm? a komendy ban tez niema
Jest domyślnie:a komendy ban tez niema
/ban
A czasem nie usunąłeś creatureventów dla komendy /ban. Bo teraz system banowania jest oparty na talkactions + creaturevents.znalazłem na jakims forum ale dziwne w 9.4 wycofali opcje dla gmow banowania?
local TYPE_ACCESS = {
[1] = { "Player" },
[2] = { "Player" },
[3] = { "Account", "Player" },
[4] = { "Account", "Player" },
[5] = { "Account", "Player", "IP" }
}
function onSay(cid, words, param, channel)
unregisterCreatureEventType(cid, "channelrequest")
unregisterCreatureEventType(cid, "textedit")
doPlayerSendChannels(cid, TYPE_ACCESS[getPlayerAccess(cid)])
registerCreatureEvent(cid, "Ban_Type")
return true
end
function onSay(cid, words, param, channel)
if param == '' then
return true
end
local params = string.explode(param, ',')
if #params > 3 then
local player = getPlayerByName(params[1])
if player then
params[2] = tonumber(params[2])
params[4] = tonumber(params[4])
doAddAccountBanishment(getPlayerAccountId(player), player, os.time() + params[2] * 24 * 60 * 60, params[4], ACTION_BANISHMENT, params[3], cid)
doRemoveCreature(player)
end
else
doPlayerSendCancel(cid, 'Not enough params.')
end
return true
end
local ACCESS = {
[1] = { 8 },
[2] = { 1, 2, 4, 5, 7, 9 },
[3] = { 1, 2, 3, 4, 5, 6, 7, 9 }
}
function onChannelRequest(cid, channel, custom)
unregisterCreatureEvent(cid, "Ban_Action")
if(not custom or type(channel) ~= 'number') then
doPlayerSendCancel(cid, "Invalid action.")
return false
end
if(not isInArray(ACCESS[getPlayerAccess(cid)], channel)) then
doPlayerSendCancel(cid, "You cannot do this action.")
return false
end
local output = "Name:\n\nComment:\n"
if(isInArray({1, 5}, channel)) then
output = "Name:\n\n(Optional) Length:\n\nComment:\n"
end
doShowTextDialog(cid, 2599, output, true, 1024)
doCreatureSetStorage(cid, "banConfig", table.serialize({
type = (channel > 4 and 2 or 1),
subType = channel
}))
registerCreatureEvent(cid, "Ban_Finish")
return false
end
local config = {
banLength = getConfigValue('banLength'),
finalBanLength = getConfigValue('finalBanLength'),
ipBanLength = getConfigValue('ipBanLength'),
notationsToBan = getConfigValue('notationsToBan'),
warningsToFinalBan = getConfigValue('warningsToFinalBan'),
warningsToDeletion = getConfigValue('warningsToDeletion')
}
function onTextEdit(cid, item, text)
unregisterCreatureEvent(cid, "Ban_Finish")
if(item.itemid ~= 2599) then
return true
end
local data = table.unserialize(getCreatureStorage(cid, "banConfig"))
if(not data.type) then
return true
end
if(text:len() == 0) then
return false
end
text = text:explode("\n")
if(not data.subType or not isInArray(data.subType, {1, 5})) then
if(text[1] ~= "Name:" or text[3] ~= "(Optional) Length:" or text[5] ~= "Comment:") then
doPlayerSendCancel(cid, "Invalid format.")
return false
end
local size = table.maxn(text)
if(size > 6) then
data.comment = ""
for i = 6, size do
data.comment = data.comment .. text[i] .. "\n"
end
else
data.comment = text[6]
end
if(text[4]:len() > 0) then
data.length = loadstring("return " .. text[4])()
end
elseif(text[1] ~= "Name:" or text[3] ~= "Comment:") then
doPlayerSendCancel(cid, "Invalid format.")
return false
else
data.comment = text[4]
end
data.name = text[2]
if(data.type == 1) then
errors(false)
local player = getPlayerGUIDByName(data.name, true)
errors(true)
if(not player) then
doPlayerSendCancel(cid, "Player not found.")
return false
end
local account = getAccountIdByName(data.name)
if(account == 0 or getAccountFlagValue(cid, PLAYERFLAG_CANNOTBEBANNED)) then
doPlayerSendCancel(cid, "You cannot take action on this player.")
return false
end
local warnings, warning = getAccountWarnings(account), 1
if(data.subType == 1) then
if(not tonumber(data.length)) then
data.length = os.time() + config.banLength
if((warnings + 1) >= config.warningsToDeletion) then
data.length = -1
elseif((warnings + 1) >= config.warningsToFinalBan) then
data.length = os.time() + config.finalBanLength
end
else
data.length = os.time() + data.length
end
doAddAccountBanishment(account, player, data.length, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (warnings: " .. (warnings + 1) .. ") has been banned.")
elseif(data.subType == 2) then
doAddAccountBanishment(account, player, config.finalBanLength, data.comment, getPlayerGUID(cid))
if(warnings < config.warningsToFinalBan) then
warning = config.warningsToFinalBan - warnings
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (warnings: " .. warning .. ") has been banned.")
elseif(data.subType == 3) then
doAddAccountBanishment(account, player, -1, data.comment, getPlayerGUID(cid))
if(warnings < config.warningsToDeletion) then
warning = config.warningsToDeletion - warnings
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (warnings: " .. warning .. ") has been deleted.")
elseif(data.subType == 4) then
local notations = getNotationsCount(account) + 1
if(notations >= config.notationsToBan) then
data.length = os.time() + config.banLength
if((warnings + 1) >= config.warningsToDeletion) then
data.length = -1
elseif((warnings + 1) >= config.warningsToFinalBan) then
data.length = os.time() + config.finalBanLength
end
doAddAccountBanishment(account, player, data.length, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (warnings: " .. (warnings + 1) .. ") has been banned reaching notations limit.")
else
doAddNotation(account, player, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (account notations: " .. notations .. ") has been noted.")
warning = 0
end
end
if(warning > 0) then
doAddAccountWarnings(account, warning)
doRemoveNotations(account)
local pid = getPlayerByGUID(player)
if(pid) then
doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.")
doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN)
addEvent(valid(doRemoveCreature), 1000, pid, true)
end
end
elseif(data.type == 2) then
errors(false)
local player = getPlayerGUIDByName(data.name, true)
errors(true)
if(not player) then
doPlayerSendCancel(cid, "Player not found.")
return false
end
local account = getAccountIdByName(data.name)
if(account == 0 or getAccountFlagValue(account, PLAYERFLAG_CANNOTBEBANNED)) then
doPlayerSendCancel(cid, "You cannot take action on this player.")
return false
end
data.subType = data.subType - 4
if(data.subType == 1) then
if(not tonumber(data.length)) then
local warnings = getAccountWarnings(account) + 1
data.length = os.time() + config.banLength
if(warnings >= config.warningsToDeletion) then
data.length = -1
elseif(warnings >= config.warningsToFinalBan) then
data.length = os.time() + config.finalBanLength
end
else
data.length = os.time() + data.length
end
doAddPlayerBanishment(data.name, 3, data.length, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been banned.")
local pid = getPlayerByGUID(player)
if(pid) then
doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.")
doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN)
addEvent(valid(doRemoveCreature), 1000, pid, true)
end
elseif(data.subType == 2) then
doAddPlayerBanishment(data.name, 3, -1, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been deleted.")
elseif(data.subType == 3) then
local warnings, notations = getAccountWarnings(account) + 1, getNotationsCount(account, player) + 1
if(notations >= config.notationsToBan) then
data.length = os.time() + config.banLength
if(warnings >= config.warningsToDeletion) then
data.length = -1
elseif(warnings >= config.warningsToFinalBan) then
data.length = os.time() + config.finalBanLength
end
doAddPlayerBanishment(account, 3, data.length, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been banned reaching notations limit.")
local pid = getPlayerByGUID(player)
if(pid) then
doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.")
doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN)
addEvent(valid(doRemoveCreature), 1000, pid, true)
end
else
doAddNotation(account, player, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (notations: " .. notations .. ") has been noted.")
end
elseif(data.subType == 4) then
doAddPlayerBanishment(data.name, 1, -1, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been reported.")
elseif(data.subType == 5) then
doAddPlayerBanishment(data.name, 2, -1, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been namelocked.")
local pid = getPlayerByGUID(player)
if(pid) then
doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.")
doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN)
addEvent(valid(doRemoveCreature), 1000, pid, true)
end
end
elseif(data.type == 3) then
local ip = getIpByName(data.name)
if(not ip) then
doPlayerSendCancel(cid, "Player not found.")
return false
end
local account = getAccountIdByName(data.name)
if(account == 0 or getAccountFlagValue(account, PLAYERFLAG_CANNOTBEBANNED)) then
doPlayerSendCancel(cid, "You cannot take action on this player.")
return false
end
if(not tonumber(data.length)) then
data.length = config.ipBanLength
end
doAddIpBanishment(ip, 4294967295, os.time() + data.length, data.comment, getPlayerGUID(cid))
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been banned on IP: " .. doConvertIntegerToIp(ip) .. ".")
local pid = getPlayerByGUID(player)
if(pid) then
doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.")
doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN)
addEvent(valid(doRemoveCreature), 1000, pid, true)
end
end
return false
end
local TYPES, ACCESS = {
{
event = "Ban_Action",
actions = {
[1] = "Banishment",
[2] = "Banishment + Final Warning",
[3] = "Deletion",
[4] = "Notation"
}
},
{
event = "Ban_Action",
actions = {
[5] = "Banishment",
[6] = "Deletion",
[7] = "Notation",
[8] = "Report",
[9] = "Lock"
}
},
{
event = "Ban_Finish"
}
},
{
type = {
[1] = { 1 },
[2] = { 1 },
[3] = { 1, 2 },
[4] = { 1, 2 },
[5] = { 1, 2, 3 }
},
action = {
[1] = { 8 },
[2] = { 8 },
[3] = { 1, 4, 5, 7, 9 },
[4] = { 1, 2, 4, 5, 7, 9 },
[5] = { 1, 2, 3, 4, 5, 6, 7, 9 },
}
}
function onChannelRequest(cid, channel, custom)
unregisterCreatureEvent(cid, "Ban_Type")
if(not custom or type(channel) ~= 'number') then
doPlayerSendCancel(cid, "Invalid action.")
return false
end
local type = TYPES[channel]
if(not type) then
doPlayerSendCancel(cid, "Invalid action.")
return false
end
local access = getPlayerAccess(cid)
if(not isInArray(ACCESS.type[access], channel)) then
doPlayerSendCancel(cid, "You cannot do this action.")
return false
end
registerCreatureEvent(cid, type.event)
if(type.actions) then
access = ACCESS.action[access]
if(not access or table.maxn(access) == 0) then
return false
end
local actions = {}
for _, action in ipairs(access) do
local tmp = type.actions[action]
if(tmp) then
actions[action] = tmp
end
end
doPlayerSendChannels(cid, actions)
else
doShowTextDialog(cid, 2599, "Name:\n\n(Optional) Length:\n\nComment:\n", true, 1024)
doCreatureSetStorage(cid, "banConfig", table.serialize({
type = channel
}))
end
return false
end
<event type="channelrequest" name="Ban_Type" event="script" value="ban/type.lua"/>
<event type="channelrequest" name="Ban_Action" event="script" value="ban/action.lua"/>
<event type="textedit" name="Ban_Finish" event="script" value="ban/finish.lua"/>