
Tudo que lordzetros postou
-
[Duvida] De como excluir coluna no banco de dados
É uma forma de segurança que os SGBD tem, você pode deletar executando os seguintes códigos: SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS `NOMEtabela`; SET FOREIGN_KEY_CHECKS=1;
-
(Resolvido)Ajustar Script ! #pls
Olá, Dentro de uma house qualquer (tendo dono, mas não obrigatoriamente seja ele)? Ou tem que ser uma house do player que irá usar?
-
(Resolvido)Stones Pedindo Mais Do Que Precisa
Por nada, ?
-
(Resolvido)Stones Pedindo Mais Do Que Precisa
Critical: local config = { effectonuse = 28, -- efeito que sai levelscrit = 100, --- leveis que terão storagecrit = 48903 -- storage que será verificado } function onUse(cid, item, frompos, item2, topos) if (getPlayerStorageValue(cid, config.storagecrit) < config.levelscrit) then doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) if (getPlayerStorageValue(cid, config.storagecrit) == -1) then setPlayerStorageValue(cid, config.storagecrit, 0) end doPlayerSendTextMessage(cid,22,"Voce elevou seu critical para ["..(getPlayerStorageValue(cid, config.storagecrit)+1).."/100].") setPlayerStorageValue(cid, config.storagecrit, getPlayerStorageValue(cid, config.storagecrit)+1) elseif getPlayerStorageValue(cid, config.storagecrit) >= config.levelscrit then doPlayerSendTextMessage(cid,22,"Voce ja chegou no nivel Maximo de Critical.\nParabéns.") return 0 end return 1 end Dodge: local config = { effectonuse = 29, -- efeito que sai levelscrit = 100, --- leveis que terão storagecrit = 98798644 -- storage que será verificado } function onUse(cid, item, frompos, item2, topos) if (getPlayerStorageValue(cid, config.storagecrit) < config.levelscrit) then doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) if (getPlayerStorageValue(cid, config.storagecrit) == -1) then setPlayerStorageValue(cid, config.storagecrit, 0) end doPlayerSendTextMessage(cid,22,"Voce elevou seus dodges para ["..(getPlayerStorageValue(cid, config.storagecrit)+1).."/100].") setPlayerStorageValue(cid, config.storagecrit, getPlayerStorageValue(cid, config.storagecrit)+1) elseif getPlayerStorageValue(cid, config.storagecrit) >= config.levelscrit then doPlayerSendTextMessage(cid,22,"Voce ja chegou no nivel Maximo de Dodges.\nParabéns.") return 0 end return 1 end
-
(Resolvido)Tiler que diminuem dano
Em data/creaturescripts/scripts/ crie um arquivo chamado castleDano.lua e adicione o seguinte código dentro: local posicoes_castle = { [1] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 7}}, [2] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 6}}, [3] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 5}}, [4] = {supEsquerdo = {x = 1014, y = 1036, z = 7}, infDireito = {x = 1032, y = 1042, z = 4}}, } local porcento = 0.2 -- 0.2 = 20% function players_area(fromPosition, toPosition) local players = {} for _, pid in ipairs(getPlayersOnline()) do local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z} local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z} local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z) for index = 0, math.abs(toPosition.z - fromPosition.z) do f.z = min + index t.z = min + index if (isInRange(getPlayerPosition(pid), f, t)) then table.insert(players, pid) end end end return players end function onStatsChange(cid, attacker, type, combat, value) if (type == STATSCHANGE_HEALTHLOSS and isPlayer(attacker) and isPlayer(cid) and getGlobalStorageValue(25580) == 2) then local total = {} for k = 1, #posicoes_castle do table.insert(total, players_area(posicoes_castle[k].supEsquerdo, posicoes_castle[k].infDireito)) end if (isInArray(total, getPlayerPosition(cid)) and isInArray(total, getPlayerPosition(attacker))) then local valor_m = porcento * value doTargetCombatHealth(attacker, cid, combat, valor_m, valor_m, COLOR_NONE) end end return true end Em data/creaturescripts/creaturescripts.xml adicione a seguinte linha abaixo de uma semelhante: <event type="statschange" name="reduzCastle" event="script" value="castleDano.lua"/> Em data/creaturescripts/scripts/login.lua adicione isto abaixo de outro semelhante (registerCreatureEvent): registerCreatureEvent(cid, "reduzCastle") Agora modificando seu script, no Teleport.lua local configuration = { day = "tuesday", to_pos = {x = 3186, y = 568, z = 3}, --Para onde o teleport levará. pos = {x = 3186, y = 574, z = 3}, --Onde o teleport será criado. teleport_id = 1387, --ID do teleport. aid = 3434, --Action ID do teleport. } function onTime() if os.date("%A") == configuration.day then local item = getTileItemById(configuration.pos, configuration.teleport_id).uid if item < 1 then local tp = doCreateTeleport(configuration.teleport_id, configuration.to_pos, configuration.pos) doItemSetAttribute(tp, "aid", configuration.aid) broadcastMessage("Suba no trono e termine o castle", MESSAGE_STATUS_WARNING) setGlobalStorageValue(25580, 2) end end return true end E no close1.lua - close1 é igual open1, certo? Se for, adicione isto no close1 mesmo (poderiam ter feito 1 script para as duas coisas, mas tudo bem): local day = "tuesday" --Mude o dia que o evento será executado aqui. EM INGLÊS. local id = 1547 local posis = { {x = 3084, y = 569, z = 6}, -- posição da barreira {x = 3085, y = 569, z = 6}, -- posição da barreira {x = 3086, y = 569, z = 6}, -- posição da barreira {x = 3087, y = 569, z = 6}, -- posição da barreira {x = 3088, y = 569, z = 6}, -- posição da barreira {x = 3084, y = 567, z = 6}, -- posição da barreira {x = 3085, y = 567, z = 6}, -- posição da barreira {x = 3086, y = 567, z = 6}, -- posição da barreira {x = 3087, y = 567, z = 6}, -- posição da barreira {x = 3088, y = 567, z = 6}, -- posição da barreira } function onTime() if os.date("%A") == day then for i = 1, #posis do local item = getTileItemById(posis, id).uid if item > 0 then doRemoveItem(item, 1) else doCreateItem(id, 1, posis) end end setGlobalStorageValue(25580, 1) end return true end EXPLICAÇÃO: A ideia é fazer com que o player que sofreu o ataque ganhe 20% do dano total que recebeu. Na parte das posicoes_castle do script que fiz, tu vai configurar o canto superior esquerdo e inferior direito da área total de cada andar Segue imagem para demonstração:
-
(Resolvido)[AJUDA - SCRIPT] Bug no Target 8.60 + Auto Stack Item
Faça o que o Explorer recomendou, será executado de acordo com o que estava antes, se tava 30, vai ficar 30000 (ainda continuará executando em 30 min). ?
-
Experiência do Offline Training - 10.98
function onLogin(player) local lastLogout = player:getLastLogout() local offlineTime = lastLogout ~= 0 and math.min(os.time() - lastLogout, 86400 * 21) or 0 local offlineTrainingSkill = player:getOfflineTrainingSkill() if offlineTrainingSkill == -1 then player:addOfflineTrainingTime(offlineTime * 1000) return true end player:setOfflineTrainingSkill(-1) if offlineTime < 600 then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You must be logged out for more than 10 minutes to start offline training.") return true end local trainingTime = math.max(0, math.min(offlineTime, math.min(43200, player:getOfflineTrainingTime() / 1000))) player:removeOfflineTrainingTime(trainingTime * 1000) local remainder = offlineTime - trainingTime if remainder > 0 then player:addOfflineTrainingTime(remainder * 1000) end if trainingTime < 60 then return true end local text = "During your absence you trained for" local hours = math.floor(trainingTime / 3600) if hours > 1 then text = string.format("%s %d hours", text, hours) elseif hours == 1 then text = string.format("%s 1 hour", text) end local minutes = math.floor((trainingTime % 3600) / 60) if minutes ~= 0 then if hours ~= 0 then text = string.format("%s and", text) end if minutes > 1 then text = string.format("%s %d minutes", text, minutes) else text = string.format("%s 1 minute", text) end end text = string.format("%s.", text) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, text) local vocation = player:getVocation() local promotion = vocation:getPromotion() local topVocation = not promotion and vocation or promotion local updateSkills = false if table.contains({SKILL_CLUB, SKILL_SWORD, SKILL_AXE, SKILL_DISTANCE}, offlineTrainingSkill) then local modifier = topVocation:getAttackSpeed() / 1000 updateSkills = player:addOfflineTrainingTries(offlineTrainingSkill, (trainingTime / modifier) / (offlineTrainingSkill == SKILL_DISTANCE and 4 or 2)) elseif offlineTrainingSkill == SKILL_MAGLEVEL then local gainTicks = topVocation:getManaGainTicks() * 2 if gainTicks == 0 then gainTicks = 1 end updateSkills = player:addOfflineTrainingTries(SKILL_MAGLEVEL, trainingTime * (vocation:getManaGainAmount() / gainTicks)) end if updateSkills then player:addOfflineTrainingTries(SKILL_SHIELD, trainingTime / 4) end return true end Faz o teste com esse, colega.
-
(Resolvido)[AJUDA - SCRIPT] Bug no Target 8.60 + Auto Stack Item
Posta print do que aconteceu na distro depois que você alterou para World.otbm e como o Celulose pediu, posta também da pasta data/world/, vamos resolver esse problema, ;].
-
(Resolvido)Tiler que diminuem dano
@DouglasVinicius sem problemas, pode postar seu script? Porque o script de verificar se os players são atacados na área é ativado quando o player perde vida, e toda vida ele vai tá chamando o script, eu gostaria de colocar um storage que tem no castle para rodar o script só quando o castle abrir, entende?
-
This Is Spriting Discord
Caraca, que negócio legal! Estarei compartilhando, nem imaginava que existia, talvez por conta que estou há um bom tempo sem mexer com Tibia. Sucesso! Essa do Overlord ficou foda demais,
-
(Resolvido)Tiler que diminuem dano
@DouglasVinicius Terminei, colega, no servidor que efetuo testes de scripts está funcional, agora me diz uma coisa, você sabe me dizer se seu castle tem algum globalStorage que salva se o mesmo tá aberto ou não?
-
(Resolvido)Tiler que diminuem dano
Sem problemas, :]. É TFS 0.4?
-
(Resolvido)Tiler que diminuem dano
@DouglasVinicius Ia demorar um pouco, kkk, mas sim, é possível de pegar em massa, agora o seguinte, o seu castle tem outros 'andares'? Ou é só em um plano?
-
(Resolvido)Tiler que diminuem dano
Entendi, não é complicado de fazer, mas não acha que é muita coisa para colocar piso em piso? Tipo, o castle é só em um 'andar', z = valorÚnico?
-
(Resolvido)Spawn de monstro raro
@Zzyzx tá nas mãos, ? local monstros = { {nome = "Loki", pos = {x = 1023, y = 1038, z = 7}}, -- Segue padrão para você adicionar = nome e pos que ele irá respawnar, <-- não esqueça da vírgula caso adicione outro abaixo {nome = "Demon", pos = {x = 1023, y = 1039, z = 7}}, {nome = "Rat", pos = {x = 1023, y = 1040, z = 7}}, } local mts = {} local chance = 15 function onThink(interval, lastExecution, thinkInterval) if(math.random(1, 100) < chance) then for i = 1, #monstros do if not isCreature(mts["n_monster" .. i]) then mts["n_monster" .. i] = doSummonCreature(monstros[i].nome, monstros[i].pos) end end end return true end
-
(Resolvido)Spawn de monstro raro
@Zzyzx Tem sim, já já modifico aqui, caso não termine em tempo, quando chegar no trampo eu resolvo isso para você.
-
(Resolvido)Spawn de monstro raro
@Zzyzx Esse código que mandei modificado é para colocar em data/globalevents/scripts/NOMEdoArquivo.lua E em data/globalevents/globalevents/globalevents.xml Adicione: <globalevent name="Event rare" interval="3600000" event="script" value="NOMEdoArquivo.lua"/> Vai ativar o script a cada 1 hora, por exemplo.
-
raids
Só mudar no interval2 de 230 para 60 Exemplo: <raid name="Mega Exp Boss" file="bosses/mega exp boss.xml" interval2="60" margin="60" /> Este interval2 é dado em minutos, então, você pode configurar a vontade.
-
(Resolvido)Spawn de monstro raro
local positions = { {x = 1135, y = 1253, z = 7} } local m = {"Wyvern Rare"} function onThink(interval, lastExecution, thinkInterval) if(math.random(1, 100) < 15) then if not (isCreature(n_monster)) then local pos = positions[math.random(1, #positions)] local monster = m[math.random(1,#m)] n_monster = doSummonCreature(monster, pos) end end return true end ?
-
Porta 7171
Já liberou no firewall?
-
(Resolvido)[AJUDA - SCRIPT] Bug no Target 8.60 + Auto Stack Item
Sem problemas, o que acontece é o seguinte, o problema tá quando o servidor tá inicializando e informa que não consegue achar o arquivo de mapa chamado 'World', isso acontece por conta que em algumas versões compiladas, nós precisamos especificar no config.lua o tipo de arquivo, no seu caso, como o colega acabou de postar, só trocar o nome 'World' por 'World.otbm'. Assim será entendido o tipo de arquivo e que ele é o mapa.
-
(Resolvido)[AJUDA - SCRIPT] Bug no Target 8.60 + Auto Stack Item
Me fala como tá o valor no seu config.lua da tag: mapName = "mapa"
-
(Resolvido)[AJUDA - SCRIPT] Bug no Target 8.60 + Auto Stack Item
Posta a imagem com o erro todo... World.?
-
[feedback] Ajudem - Classic Yurots
Show, cara, realmente parece ser um projeto de futuro, espero que dê tudo certo. Qualquer coisa, pode contatar, estarei acompanhando sim, tá difícil de ver servidor 8.6 diferenciado hoje em dia... O famoso 1 click e server online...
-
[feedback] Ajudem - Classic Yurots
Cara, por mim tá tudo ok, seu projeto tá muito bacana (vi as outras postagens também), fez até lembrar minha pessoa cuidando de tudo e deixando o OT de uma forma diferente dos outros, prendendo os players e tendo um ótimo feedback sobre a produção do servidor, e desejo o mesmo para você. Bom, mas falando especificamente da RATE, é difícil analisar e dizer se está boa ou não, isso tudo depende muito de como está o balanceamento dos monstros, itens, etc... APARENTEMENTE, está do jeito que curto. Sobre a questão do local de quests, não vou falar desorganizado, mas um pouco 'sem estrutura'. Tipo, entenda... Sei que tem os textos e tudo mais, até placas informando sobre a quest, mas a ideia de ter essa diferença de piso, seria melhor, na minha opinião, você deixar as informações da quest em cima (o piso que o player anda inicialmente) e os teleports abaixo com uma ou outra informação, e também separar por categorias as quests, assim facilita para o jogador (da mesma forma que usam nos teleports de monstros), usei isso no meu servidor, apesar de ser um pequeno detalhe, ajudou bastante... Para finalizar, se quiser me marcar nas futuras postagens (lançamento ou coisas adicionais), pode marcar, gostaria muito de poder acompanhar o desenvolvimento do projeto. No mais, sucessos e abraço.