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.