• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Banowanie 9.4

a komendy ban tez niema
Jest domyślnie:
PHP:
/ban

Wtedy otwiera ci się książka w której piszesz kogo/lub jakie konto się zbanować na ile dni, lub na zawszę itd.
 
pisałem ban i nic hmmm dodałem komende banowania dziala /ban nick,dni-czas,komentarz,powod1-10 :P znalazłem na jakims forum ale dziwne w 9.4 wycofali opcje dla gmow banowania?
 
znalazłem na jakims forum ale dziwne w 9.4 wycofali opcje dla gmow banowania?
A czasem nie usunąłeś creatureventów dla komendy /ban. Bo teraz system banowania jest oparty na talkactions + creaturevents.
 
creaturevents wg nie mam jeszcze nie zaczelem dodwac tam kodow myslalem ze prawym to dziala prawy i opcje banowania :P

- - - Updated - - -

function onThankYou(cid, statementId)
-- TODO :)
return true
end

znalazlem to w creaturevents najnowszym 9.4 to chyba o to chodzi?


Niestety wywala mi blad w lini 9 i 10 a wszystko doddalem ;p onSay :"P

Code:
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

Używam tego :P
Code:
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
 
Last edited:
creaturescripts folder


utwórz folder "ban" i dodaj w nim:

action.lua
LUA:
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

finish.lua
LUA:
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

type.lua
LUA:
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



a do creaturescripts.xml dodaj:

Code:
<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"/>
 
Nadal ten sam blad
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
 
161919beztytulu.bmp
 
ciekawe kurwa mać, że w żadnym pliku co ci podałem nie powinien żaden nazywać się bug.lua

wypierdol swoje gówno i wklej to co podałem
 
Tak czy jak on w swoim silniku nie ja takiej komendy jak unregisterCreatureEventType. Może spróbuj z samym
LUA:
unregisterCreatureEvent(cid, "nazwa_eventu")
 
Back
Top