Ir para conteúdo

Chose

Campones
  • Total de itens

    5
  • Registro em

  • Última visita

Sobre Chose

Informações

  • Forma que conheci o xTibia
    Sites de Busca
  • Sou
    Programador

Chose's Achievements

  1. @noobinhu Negativo, funciona em qualquer servidor que se baseia na SVN. E hoje teoricamente não existe servidores em XML, logo, é compatível com SQL, SQLite e os demais bancos de dados que a SVN suporta atualmente.
  2. 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.
  3. Não era bem o que eu queria saber, mas de qualquer forma já resolvi o problema. Obrigado de qualquer forma.
  4. Tava sem nada para fazer e inspirado no WoW resolvi fazer um NPC que ataca membros da facção (guilda) rival. Ou seja, irá atacar sempre membros que não são da guilda que você escolher. Funciona para as versões mais novas da SVN, tanto 8.1 quanto 8.2. --------------------------------------------------------------------------------------------------------------------------------------------- Guild Guardian 0.1 (por Chose) ------------------------------------------------------------------------------------------------------------------------------------------- -- Configuração -- Digite o nome da guilda que o guarda irá proteger local guildName = "Exodar Masters" ------------------------------------------------------------------------------------------------------------------------------------------- local target = 0 local prevTarget = 0 local maxChaseDistance = 20 local origPos = {} local lastAttack = 0 local followTimeout = 10 function goToOrigPos() target = 0 lastAttack = 0 selfFollow(0) doTeleportThing(getNpcCid(), origPos) end function updateTarget() if (isPlayer(target) == FALSE) then goToOrigPos() elseif (getPlayerGuildName(target) == guildName) then selfSay("Welcome sir.") end if (target == 0) then local list = getSpectators(getNpcPos(), 8, 8, false) for i = 1, #list do local _target = list[i] if (_target ~= 0) then if ((isPlayer(_target) == TRUE) and (getPlayerGuildName(_target) ~= guildName)) then if (selfFollow(_target)) then target = _target if (target ~= prevTarget) then selfSay("We do not like people like you! Get out!") end prevTarget = target break end end end end end end function onCreatureAppear(cid) if (cid == getNpcCid()) then origPos = getCreaturePosition(cid) end end function onCreatureDisappear(cid) if (target == cid) then goToOrigPos() end end function onCreatureMove(creature, oldPos, newPos) -- end function onThink() updateTarget() if (target == 0) then return end local playerPos = getCreaturePosition(target) local myPos = getNpcPos() if (myPos.z ~= playerPos.z) then goToOrigPos() return end if ((math.abs(myPos.x - origPos.x) > maxChaseDistance) or (math.abs(myPos.y - origPos.y) > maxChaseDistance)) then selfSay("I'll catch you next time.") goToOrigPos() return end if (lastAttack == 0) then lastAttack = os.clock() end if (os.clock() - lastAttack > followTimeout) then selfSay("You got me this time, but just wait.") goToOrigPos() return end if ((math.abs(playerPos.x - myPos.x) <= 1) and (math.abs(playerPos.y - myPos.y) <= 1)) then doTargetCombatHealth(getNpcCid(), target, COMBAT_LIFEDRAIN, -300, -400, CONST_ME_BLOCKHIT) lastAttack = os.clock() end end Se quiser absolver guildas aliadas (inspiração do Ragnarok), podemos fazer assim: Coloque a seguinte função: function isInArrayEx(arr, arg) local x, y for x, y in pairs(arr) do if (y == arg) then return true, x end end return false end Uma matriz no começo do código (remova a variável guildName) local guildsAndAllys = {"Exodar", "Stormwind", "Ogrinmar"} E troque: elseif (getPlayerGuildName(target) == guildName) then por: elseif (isInArrayEx(guildsAndAllys, getPlayerGuildName(target))) then troque também: if ((isPlayer(_target) == TRUE) and (getPlayerGuildName(_target) ~= guildName)) then por: if ((isPlayer(_target) == TRUE) and (isInArrayEx(guildsAndAllys, getPlayerGuildName(target)) == false)) then Com esse pequeno path você poderá selecionar as guildas que não serão atacadas pelo guarda. Bom, por hoje é só pessoal.
  5. Chose

    Problemas Com I/o

    Opa galera, estou tentando criar meu primeiro script que no caso seria um "GM Commander", um painél onde o GM controlaria muitas coisas sem dificuldades. Mas aí, quando eu estava fazendo o sistema de log, encontrei um problema: como escrever em linhas não ocupadas? O modelo que eu gostaria de usar é mais ou menos esse: [d/m/a] <Nome do GM>: [Essa parte deixa comigo ;D] \n <-- soltar linha Resumindo, quero que a cada vez que eu for chamar I/O, que escreva na próxima linha em branco. Mais uma coisa, aproveitando o post (hehe), eu gostaria de saber se para por exemplo usar variáveis (e constantes) em uma função de uma classe, eu poderia deixar essas no escopo da classe, exemplo: Classe = {variavelX = io.write(...), variavelY = 1} Sei que postei na seção correta, mas pelo que pude observar, na área de suporte é uma zon Ah, mais uma coisa, pra quem quer ver o código (por favor, to só começando, dá um desconto): Commander = { password = {true, "123"} log = false } function Commander:new (i) i = i or {} setmetatable(i, self) self.__index = self return i end --function Commander:scanItem(playerName, itemName, deepSearch) function Commander:scanItem(cid, itemName, deepSearch) --local targetPlayer = getPlayerByName(playerName) local targetItem = getItemIdByName(itemName) --if (isPlayer(targetPlayer)) then if (isPlayer(cid) then --if (getPlayerItemById(targetPlayer, deepSearch, targetItem)) then -if (getPlayerItemById(cid, deepSearch, targetItem)) then return true end end end --function Commander:getPlayerInfo(playerName) function Commander:getPlayerInfo(cid) if (isPlayer(playerId)) then return playerInfo = {getPlayerLevel(cid), getPlayerMagLevel(cid), getPlayerSex(cid), getCreatureHealth(cid), getCreatureMaxHealth(cid), getPlayerMana(cid), getPlayerMaxMana(cid), isPremium(cid)} end end function Commander:passwordCheck(entry) if (entry == self.password[2]) then return true end end ------ --Logging -- ... iih ferro =\ Vlws ae
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...