Opa, sou eu de novo.
Dessa vez, vim liberar um script que ainda estou desenvolvendo já que é muito grande. Trata-se de um painél que dará diversas ferramentas para o GM trabalhar no servidor com maior facilidade.
O que faz isso?
Por enquanto por se tratar de uma versão "Alpha", existem poucos recursos dentre eles:
Informações detalhadas do servidor
Informação de um determinado jogador
Procura de um item em um jogador (para investigar hacks de itens por exemplo)
Configuração e uso amigável
A versão 0.1 BETA que deverá sair nesse final de semana ou no próximo terá tudo acima listado e mais:
Administração de bans
Possibilidade de uso de senha
Gravação de atividades no log via log
Mudanças no sistema in-game
Broadcasts de diversas cores
Estou aceitando sugestões. Bom, agora vamos ao código:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- The Commander 0.1 Alpha Release - By Chose
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commander =
{
password = {true, "123"},
log = false, -- not working yet
firstTime = true,
useDeepSearch = TRUE
}
function Commander:new (i)
i = i or {}
setmetatable(i, self)
self.__index = self
return i
end
function Commander:scanItem(cid, itemName, deepSearch)
local targetItem = getItemIdByName(itemName)
if (isPlayer(cid) then
if (getPlayerItemById(cid, deepSearch, targetItem)) then
return true
end
end
end
function Commander:passwordCheck(entry)
if (entry == self.password[2]) then
return true
end
end
function Commander:writeLog(cid, action)
local file = io.open(getPlayerName(cid), "a+")
file:write("[" .. os.date("%x") .. "] [" .. os.date("%X") .. "]" .. action)
io.close(file)
end
function Commander:getServerStats()
return serverStats =
{
players = getWorldCreatures(0),
monsters = getWorldCreatures(1),
npcs = getWorldCreatures(1),
uptime = { hours = math.floor(os.clock() / 3600), minutes = math.ceil((os.clock() - (3600 * hours))/ 60)},
playerList = getPlayersOnlineList()
}
end
function Commander:getPlayerStats(cid)
local online = false
if (isPremium(cid) == TRUE) then
_premium = "Y"
else
_premium = "N"
end
if (isPlayer(cid) == TRUE) then
_online = "Y"
else
_online = "N"
end
if (isPlayer(cid)) then
return playerStats =
{
level = getPlayerLevel(cid),
magic = getPlayerMagLevel(cid),
sex = getPlayerSex(cid),
hp = getCreatureHealth(cid),
hpMax = getCreatureMaxHealth(cid),
mp = getPlayerMana(cid),
mpMax = getPlayerMaxMana(cid),
premium = _premium,
online = _online
}
end
return false
end
--[[
MESSAGE_STATUS_WARNING = 18
MESSAGE_EVENT_ADVANCE = 19
MESSAGE_EVENT_DEFAULT = 20
MESSAGE_STATUS_DEFAULT = 21
MESSAGE_INFO_DESCR = 22
MESSAGE_STATUS_SMALL = 23
MESSAGE_STATUS_CONSOLE_BLUE = 24
MESSAGE_STATUS_CONSOLE_RED = 25
]]
function Commander:broadcastMessage(type, msg)
local messageColors = {18, 19, 20, 21, 22, 23, 24, 25}
if (isInArray(messageColors, type)) then
broadcastMessageEx(type, msg)
end
return false
end
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function onSay(cid, words, param)
local separator = param:find(',') or 0
if (words == "!commander")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, 'Welcome to The Commander. Choose what you want to admin:')
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '1) Server | 2) Players | 3) Item Scan | 4) Banishments | 5) Broadcast | 6) Options'
elseif (words == "1") then
Commander:getServerStats()
elseif (words == "2") then
if (separator > 0) then
if (Commander:getPlayerStats(getPlayerByName(param:sub(1, separator - 1)))) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Level: ' .. Commander:getPlayerStats(cid).level .. ' | Magic: ' .. Commander:getPlayerStats(cid).magic .. ' | Sex: ' .. Commander:getPlayerStats(cid).sex .. ' | HP: ' .. Commander:getPlayerStats(cid).hp .. '/' .. Commander:getPlayerStats(cid).hpMax .. ' | MP: ' .. Commander:getPlayerStats(cid).mp .. '/' .. Commander:getPlayerStats(cid).mpMax .. ' | Premium: ' .. Commander:getPlayerStats(cid).premium .. ' | Online: ' .. Commander:getPlayerStats(cid).online)
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Player not exists or it is not online.')
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, 'Player Manager. Please type "!2, <player name>". E.g: !2, Chose')
end
elseif (words == "3") then
if (separator > 0) then
local targetPlayer, targetItem = param:sub(1, separator - 1), param:sub(separator + 1, param:len())
if (Commander:scanItem(getPlayerByName(targetPlayer), targetItem, Commander.useDeepSearch)) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Item found.')
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Item not found.')
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, 'Item Scan. Please type "!3, <player name>, <item name>". E.g: !3, Chose, Carlin Sword')
end
elseif (words == "!4") then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, 'Not working yet.')
elseif (words == "!5") then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, 'Not working yet.')
elseif (words == "!6") then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, 'Options Manager')
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Choose what you want to change: A) Enable/Disable Log System | B) Enable/Disable Deep Search')
elseif (words == "!A") then
if (Commander.log) then
Commander.log = false
else
Commander.log = true
end
elseif (words == "!B") then
if (Commander.useDeepSearch == TRUE) then
Commander.useDeepSearch == FALSE
else
Commander.useDeepSearch == TRUE
end
else
return false
end
end
E em talkactions.xml você adiciona as words: !commander, !1, !2, !3, !4, !5, !6, !A, !B.
Lembrando que o script ainda não está 100% mas que os sistemas que listei estão funcionando corretamente. O sistema apenas está faltando coisas que eu ainda irei implementar.