Ir para conteúdo

Imperius

Membro
  • Registro em

  • Última visita

Tudo que Imperius postou

  1. Imperius postou uma resposta no tópico em Suporte Tibia OTServer
    movements.xml: <movevent type="Equip" itemid="xxxx" slot="legs" event="script" value="legsXP.lua"/> <movevent type="DeEquip" itemid="xxxx" slot="legs" event="script" value="legsXP.lua"/> movements > scripts > legsXP.lua function onEquip(cid, item, slot) if getPlayerSlotItem(cid, slot).itemid == item.itemid then doPlayerSetRate(cid, SKILL__LEVEL, 2) doPlayerSendTextMessage(cid, 22, 'Agora voce ganha 2x mais experiencia!') end return true end function onDeEquip(cid, item, slot) doPlayerSetRate(cid, SKILL__LEVEL, 1) doPlayerSendTextMessage(cid, 22, 'Experiencia extra cancelada.') return true end
  2. Tipo assim? Configuração: para facilitar na manutenção, crie um arquivo em data > lib > configBossRoom.lua: -- made by Imperius -- == Configurações - BOSS ROOM === configBossRoom = { name = "Dragon Lord", -- nome do boss. minPlayers = 3, -- Quantidade Min de players para participar. timeToKill = 10, -- Tempo (em minutos) que os players terão para matar o boss. timeOpenTP = 30, -- Tempo (em segundos) que o teleport do salão de recompensas ficará aberto após matar o boss. -- Coloque abaixo ID de todas as recompensas que serão sorteadas ao clicar no bau (somente uma será entregue) -- recompensasID = {2494, 2195, 2400, 7708}, portaMagica = { storage = 1234569, -- Responsável por verificar o cooldown. ticketID = 10306, -- ID do ticket que o player precisará para passar pela porta. cooldown = 4 -- Tempo em horas. }, alavanca = { -- Coloque as posições dos sqm que os players precisará estar pisando para usar a alavanca. (estilo a ahini quest). {x = 32346, y = 31940, z = 8}, -- player 1 {x = 32347, y = 31940, z = 8}, -- player 2 {x = 32348, y = 31940, z = 8}, -- player 3 {x = 32349, y = 31940, z = 8}, -- player 4 {x = 32350, y = 31940, z = 8}, -- player 5 {x = 32351, y = 31940, z = 8} -- player 6 }, areaSalaBoss = {{x = 32310, y = 31930, z = 8}, {x = 32319, y = 31937, z = 8}}, -- Canto superior esquerdo | Canto inferior direito. (Sala do Boss) positionKickPlayer = {x = 32354, y = 31940, z = 8}, -- Position onde os players serão teleportados caso não tenha matado o boss em 10 minutos. positionSalaAlavanca = {x = 32351, y = 31940, z = 8}, -- Position onde o player será teleportado ao clicar na porta. (igual o do vídeo). positionSalaBoss = {x = 32314, y = 31931, z = 8}, -- Position onde os players irão ser teleportados ao usar a alavanca. positionSpawnBoss = {x = 32315, y = 31936, z = 8}, -- Position onde o boss irá aparecer. positionSalaRecompensas = {{x = 32319, y = 31937, z = 8}, {x = 32318, y = 31930, z = 5}} -- onde o TP vai abrir após matar o boss | onde o TP vai levar os players. } em data > actions > actions.xml: <!-- Porta Magica (Boss Room) --> <action uniqueid="65000" event="script" value="portaBossRoom.lua"/> <!-- Alavanca (Boss Room)--> <action uniqueid="65001" event="script" value="alavancaBossRoom.lua"/> <!-- bau recompensa (Boss Room) --> <action uniqueid="65002" script="bauBossRoom.lua" /> aviso: Não se esqueça de adicionar a uniqueid lá no Remere's Map Editor. actions > scripts > portaBossRoom.lua: actions > scripts > alavancaBossRoom.lua: actions > scripts > bauBossRoom.lua: agora em creaturescripts > creaturescripts.xml: <!-- Boss Room --> <event type="death" name="bossTeleport" script="bossTeleport.lua"/> creaturescripts > scripts > bossTeleport.lua: por fim, vá até em data > monster > abra o arquivo do seu boss. ex: "NomeDoBoss.xml" e adicione a tag abaixo: <script> <event name="bossTeleport"/> </script>
  3. Remova esse trecho: setPlayerStorageValue(cid, storage[2], os.time() + (cooldown*60)) -- Seta o Cooldown. e substitua por esse: setPlayerStorageValue(cid, storage[2], os.time() + (cooldown)) -- Seta o Cooldown. Assim o cooldown ficará em segundos.
  4. Dessa forma? local storage = {1234567, 1234568} -- Armazena o outfit que o player estava usando / Armazena o Cooldown. local cooldown = 1 -- tempo em minutos. local remover = true -- Remover o item ao usar? false = não remove, true = remove. local outfitID = 1397 -- id da outfit que o player se transformará. function onUse(cid, item) if getPlayerVocation(cid) < 26 or getPlayerVocation(cid) > 37 then doPlayerSendTextMessage(cid, 22, "Sua vocacao nao pode usar este item!") return true end if getPlayerStorageValue(cid, storage[2]) - os.time() >= 1 then doPlayerSendCancel(cid, "Voce precisa aguardar " ..(getPlayerStorageValue(cid, storage[2]) - os.time()).. " segundos para usar este item novamente.") return true end if getCreatureOutfit(cid).lookType ~= outfitID then setPlayerStorageValue(cid, storage[1], getCreatureOutfit(cid).lookType) doCreatureChangeOutfit(cid, {lookType = outfitID}) doPlayerSendTextMessage(cid, 24, "Skin Akatsuki Ativada!") else doCreatureChangeOutfit(cid, {lookType = getPlayerStorageValue(cid, storage[1])}) doPlayerSendTextMessage(cid, 24, "Skin Akatsuki Desativada!") end setPlayerStorageValue(cid, storage[2], os.time() + (cooldown*60)) -- Seta o Cooldown. if remover then doRemoveItem(item.uid, 1) end return true end
  5. Se o objetivo é enviar a mensagem para todos os players, somente no DEFAULT. (sem que apareça no meio da tela / server log). Veja se desta forma, o problema é ou não resolvido: local config = { storage = 19400, -- storage em que será salvo o tempo cor = "red", -- de acordo com o constant.lua da lib tempo = 3, -- em minutos price = 20000, -- quantidade de dinheiro que irá custar level = 10 -- level pra poder utilizar o broadcast } function onSay(cid, words, param, channel) if(param == '') then -- Mensagem em branco. doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) < config.level then -- Caso o player seja level abaixo do que o permitido. doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") return true end if getPlayerStorageValue(cid, config.storage) - os.time() >= 1 then -- Caso o player use o comando antes do tempo de espera. doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end if not doPlayerRemoveMoney(cid, config.price) then -- Caso o player não tenha dinheiro o suficiente. doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end --== Caso esteja tudo certo ==-- setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*60)) for _, pid in ipairs(getPlayersOnline()) do doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_RED, getCreatureName(cid)..": "..param) end return true end
  6. Imperius postou uma resposta no tópico em Suporte Tibia OTServer
    Veja se é isso o que você está procurando. TFS 0.4: em data > npc > Testador.xml: <?xml version="1.0" encoding="UTF-8"?> <npc name="Testador" script="data/npc/scripts/Testador.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="160" head="77" body="79" legs="56" feet="115" addons="0"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|! Deseja {comprar} alguma coisa?"/> </parameters> </npc> data > npc > scripts > Testador.lua: -- Imperius ~ Alecrim local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} local configNPC = { storage = 40004400, estoque = 10, -- Quantas vezes o player poderá comprar este item? itemID = 2400, -- ID do item que será vendido pelo NPC moedaID = 6500, -- ID da moeda de troca customizada. valor = 45, -- Quantas moedas o player precisará ter para comprar o item? } function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end if getPlayerStorageValue(cid, configNPC.storage) < 0 then setPlayerStorageValue(cid, configNPC.storage, configNPC.estoque) end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) local itemName = getItemNameById(configNPC.itemID) local moedaName = getItemNameById(configNPC.moedaID) if isInArray({"comprar", "buy"}, msg) then if getPlayerStorageValue(cid, configNPC.storage) < 1 then selfSay("Voce já comprou todo o meu estoque.", cid) npcHandler:releaseFocus(cid) else selfSay("Voce quer trocar 1x {"..itemName.."} por "..configNPC.valor.."x {"..moedaName.."}?", cid) talkState[talkUser] = 1 end end if isInArray({"sim", "yes"}, msg) and talkState[talkUser] == 1 then talkState[talkUser] = 0 if getPlayerItemCount(cid, configNPC.moedaID) >= configNPC.valor then setPlayerStorageValue(cid, configNPC.storage, getPlayerStorageValue(cid, configNPC.storage) - 1) -- Atualiza o estoque do player doPlayerRemoveItem(cid, configNPC.moedaID, configNPC.valor) -- Remove as moedas do player doPlayerAddItemEx(cid, doCreateItemEx(configNPC.itemID, 1)) -- Da o item ao player doSendMagicEffect(getThingPos(cid), 13) -- Da um efeitinho no player selfSay("Certo! Troca realizada.", cid) else selfSay("Você não tem a quantidade de "..moedaName.." o suficiente", cid) npcHandler:releaseFocus(cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  7. Se possível, compartilhe o código contendo a parte do INSERT na tabela z_shop_offer. Provavelmente você encontrará esse trecho em um arquivo chamado shopadmin.php
  8. Consegue enviar uma captura de tela mostrando a mensagem de erro que é exibida ao tentar acessar o phpmyadmin?
  9. Acesse o banco de dados do seu servidor, lá na tabela z_ots_guildcomunication, veja se existe uma coluna chamada type. Se não existir, execute isso no SQL: ALTER TABLE `z_ots_guildcomunication` ADD `type` VARCHAR(255) NOT NULL e veja se o problema ainda persiste.
  10. data > actions > actions.xml: <!-- Trocar de vocação --> <action itemid="14175" script="changeVocation.lua" /> data > actions > scripts > changeVocation.lua: function onUse(cid, item) local itemID = 14175 -- ID DO ITEM local vocationsID = {1, 2, 3} -- Coloque as ID's das vocações que poderão utilizar o item para trocar de vocação. local changeVocationTo = 20 -- Coloque a ID da vocação que o player irá virar após usar o item. if item.itemid == itemID and isInArray(vocationsID, getPlayerVocation(cid)) then doRemoveItem(item.uid, 1) doPlayerSetVocation(cid, changeVocationTo) doSendMagicEffect(getThingPos(cid), math.random(140,147)) doPlayerSendTextMessage(cid, 22, "You are now a "..getPlayerVocationName(cid).."!") else doPlayerSendTextMessage(cid, 22, "You can't be promoted since you're already a "..getPlayerVocationName(cid).."!") end return true end aviso: Pode ser que o seu servidor não suporte efeitos a partir do 69. Isso fará que você leve um debug ao utilizar o item (foi o que aconteceu comigo quando testei). Se for o caso, é só trocar o math.random(140,147) para algum efeito que o seu servidor suporte.
  11. Se o objetivo é abrir canais específicos sempre que o player logar no servidor, experimente fazer o seguinte: em data > creaturescripts > creaturescripts.xml: <!-- Abrir channel ao logar --> <event type="login" name="openChannels" event="script" value="openChannels.lua"/> creaturescripts > scripts > openChannels.lua: function onLogin(cid) -- Coloque as ID's do channel que você quer abrir assim que o player logar. -- Você encontra todas as ID's em data > XML > channels.xml doPlayerOpenChannel(cid, 9) doPlayerOpenChannel(cid, 6) return true end em creaturescripts > scripts > login.lua > adicione a tag abaixo antes do último return true: registerCreatureEvent(cid, "openChannels")
  12. Faça a adaptação do código abaixo de acordo com a sua necessidade. .lua: local storage = 99991201 -- Responsável por armazenar o tempo em que a alavanca foi usada. local timeInMinutes = 5 -- Tempo em minutos que precisará aguardar para puxar a alavanca novamente -- function de tempo // Peguei essa function do FeeTads - TibiaKing local function getTimeString(self) local format = { {'dia', self / 60 / 60 / 24}, {'hora', self / 60 / 60 % 24}, {'minuto', self / 60 % 60}, {'segundo', self % 60} } local out = {} for k, t in ipairs(format) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end local ret = table.concat(out) if ret:len() < 16 and ret:find('segundo') then local a, b = ret:find(' e ') ret = ret:sub(b+1) end return ret end if getGlobalStorageValue(storage) - os.time() <= 0 then setGlobalStorageValue(storage, os.time() + (timeInMinutes*60)) --- COLOQUE AQUI O SCRIPT QUE VAI ACONTECER APÓS CLICAR NA AVALANCA else doPlayerSendCancel(cid, "Espere "..getTimeString((getGlobalStorageValue(storage)-os.time())).." para usar a alavanca novamente!") end
  13. Veja se isso resolve o problema Troque: creatureEvent(setPlayerStorageValue, configs.time *60*1000, cid, 62164, 0) return TRUE Por: addEvent(setPlayerStorageValue(cid, 62164, 0), configs.time *60*1000) return TRUE
  14. Ideia interessante! Fiz uma adaptação no script do Death System 2016 do chaitosoft, para funcionar conforme o seu pedido. aviso: eu testei somente na versão TFS 0.4 caso a sua versão for superior, não tenho certeza se irá ou não funcionar. Segue abaixo o passo a passo de como configurar em seu servidor: Em data > npc, crie um arquivo NomeDoNPC.xml e adicione o código abaixo: <?xml version="1.0" encoding="UTF-8"?> <npc name="NomeDoNPC" script="data/npc/scripts/NomeDoNPC.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="268" head="76" body="38" legs="76" feet="95" addons="2"/> </npc> em seguida, na pasta data > npc > scripts, crie um arquivo NomeDoNPC.lua e adicione o código a seguir: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end npcHandler:addModule(FocusModule:new()) Logo após, vá em data > creaturescripts, abra o arquivo creaturescripts.xml e cole a tag: <!-- NPC Anuncia Morte --> <event type="death" name="npcDeath" event="script" value="npcDeath.lua"/> agora em data > creaturescripts > scripts, crie um arquivo chamado npcDeath.lua e cole o código de acordo com a sua preferência: Por fim, vá até em data > creaturescripts > scripts, abra o arquivo login.lua e adicione esta linha antes do último return true registerCreatureEvent(cid, "npcDeath") e pronto!
  15. Tinha visto isso no servidor do MegaTibia / Kaldrox e achei bem interessante. Todos os tópicos que encontrei sobre o assunto de alterar a cor das mensagens dos GMs, CMs e ADM no channel Help para vermelho, falavam que tinham que fazer uma configuração na própria source do servidor. Fiz uma gambiarra que funciona, sem a necessidade de mexer na source do servidor e de utilizar comandos para isso. Testei somente em TFS 0.4 e funciona tranquilamente. segue abaixo como configurar em seu otserver: data > talkactions > scripts > crie um arquivo chamado gmsayred.lua e cole o código abaixo: function onSay(cid, words, param, channel) if channel == CHANNEL_HELP then for _, pid in ipairs(getPlayersOnline()) do doPlayerSendChannelMessage(pid, '', "".. getCreatureName(cid) .. ": ".. words, TALKTYPE_CHANNEL_R1, CHANNEL_HELP) end return true end end em talkactions.xml cole a tag abaixo: <!-- Gamemasters --> <talkaction default="yes" filter="quotation" logged="no" access="3" event="script" value="gmsayred.lua"/> e pronto! Agora é só enviar alguma mensagem no Help que a mensagem ficará em vermelho.
  16. Funcionando perfeitamente em TFS 0.4 Fiz uma adaptação no código para enviar uma mensagem no channel Counselor avisando que o senior tutor X mutou ou desmutou o player X. Tinha visto isso no server do MegaTibia quando eu era tutor. helpmute.lua: function onSay(cid, words, param, channel) if param == '' then return doPlayerSendCancel(cid, 'Please, type mute or unmute.') end local tmp = string.explode(param, ',') if isInArray({'mute', 'unmute'}, tmp[1]:lower()) then local default = 600 if isCreature(getCreatureByName(tmp[2])) then setPlayerStorageValue(getCreatureByName(tmp[2]), 455010, tmp[1]:lower() == 'mute' and os.time() + (tmp[3] ~= nil and tonumber(tmp[3]) or default) or -1) doPlayerSendCancel(cid, 'Player ' .. tmp[2] .. ' ' .. (tmp[1]:lower() == 'mute' and 'muted' or 'unmuted') .. '.') for _, pid in ipairs(getPlayersOnline()) do doPlayerSendChannelMessage(pid, '', "".. getCreatureName(cid) .. " has ".. (tmp[1]:lower() == 'mute' and 'muted' or 'unmuted') .." the player " .. tmp[2] .. " in channel Help", TALKTYPE_CHANNEL_W, 4) end else doPlayerSendCancel(cid, 'Player not exists or is off-line.') end end return true end

Informação Importante

Confirmação de Termo