Ir para conteúdo

brun123

Conde
  • Total de itens

    512
  • Registro em

  • Última visita

  • Dias Ganhos

    16

Tudo que brun123 postou

  1. é o que a script faz, desde que todas as entradas para a área executem a script
  2. é uma movements, você fez um pedido similar há um tempo aí e eu respondi pra você com as tags direitinho e como instalar, eu não vou repetir aqui... você pediu pra readaptar a script colocando um check pra ver se o player estava dentro da area e o pessoal começou a postar talkaction, globalevent e mais outras coisas nada a ver (não sei porquê), vou passar somente a script:
  3. seu problema é com essa linha: local item = getDragOutLive(cid)[1] o servidor não consegue encontrar item nenhum com essa função.
  4. doCreatureExecuteTalkAction(cid, words)
  5. brun123

    Combo

    aqui é dúvida sobre scripts amigo, se você quer que alguém te ensine como combinar os golpes de um pokemon em uma ordem que faça que ele fique mais forte, você tem que pedir em algum lugar que conversem sobre isso, tipo no fórum do pxg
  6. Como está sua tag no actions.xml? Colocou o actionid da lever igual ao do actions.xml pelo map editor? Configurou as posições certinhas?
  7. experimenta colocar todos os nºs da formula positivo, e se não der certo, tente todos eles negativos. se não der certo ainda, experimenta usar COMBAT_FORMULA_DAMAGE no lugar de COMBAT_FORMULA_UNDEFINED, com valores negativos/positivos também. o callback é assim: setCombatCallBack(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "getMinMaxDamage") function getMinMaxDamage(cid, level, magLevel) local min, max = 100, 200 -- talvez esses valores precisem ser negativos return min, max end
  8. Ta vendo aquele campo "monsters" onde está 367? aquilo é o nº♫ de outfits que o .dat possui... qualquer número acima disso o tibia.exe não consegue ler e dá erro. o Itemtype varia de 1 até o nº máximo de outfits, não é normal ter um número tão alto assim... semrpe que você cria um outfit novo pelo dat editor, o item type dele é atribuido automaticamente no meu dat editor não da nem pra editar o item type, não sei como você conseguiu colocar um nº tão alto assim
  9. Deve ser por causa das formulas... como o summon não tem level nem magic level o resultado deve ser 0. Tente usar COMBAT_FORMULA_UNDEFINED, se não der certo, você vai ter que usar o callback onGetFormulaMinMaxValues
  10. Teste assim: local storage = 1445 -- storage utilizada local premio = 2688 -- item que o player vai ganhar local msg = "Você achou um item!" function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, storage) >= 0 then return doPlayerSendCancel(cid, "O baú está vazio.") end if getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid > 0 then return doPlayerSendCancel(cid, "Tire o item que está no slot de munição.") end local addedItems, playerWeight = {}, getPlayerFreeCap(cid) for slot = 1, 10 do local i = getPlayerSlotItem(cid, slot) if i.uid > 0 then playerWeight = playerWeight + getItemWeight(i.uid) end end local a = doPlayerAddItem(cid, premio, 1, false) table.insert(addedItems, a) if not addedItems[1] then return doPlayerSendCancel(cid, "Você não tem capacidade para carregar o item!") end if getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid == addedItems[1] then setPlayerStorageValue(cid, storage, 1) doPlayerSendTextMessage(cid, 22, msg) return true end doPlayerSetMaxCapacity(cid, 999999) for tries = 2, 10 do local a = doPlayerAddItem(cid, premio, 1, false) table.insert(addedItems, a) if getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid == addedItems[tries] then setPlayerStorageValue(cid, storage, 1) doPlayerSendTextMessage(cid, 22, msg) doPlayerSetMaxCapacity(cid, playerWeight) for _, removeId in pairs (addedItems) do if _ ~= tries then doRemoveItem(removeId) end end return true end end for _, removeId in pairs (addedItems) do if _ ~= tries then doRemoveItem(removeId) end end return true end
  11. posta aqui com spoiler amigo, não quero baixar nada não, mesmo que só level 2 segundos
  12. Posta seu creaturescripts.xml aqui e o xml de algum monstro que não esteja dropando o loot para darmos uma analisada
  13. Cheque o loot rate no config.lua e certifique-se de que não há nenhuma script que execute a função doCreatureSetDropLoot(cid, false) no monstro
  14. É porque esse boost foi feito a partir do boost.lua original, talvez algumas mudanças que tenham feito no server tornou o script incompatível, eu baixei o server 1.4f (dash advanced) e peguei o boost.lua sem modificação alguma e coloquei pra funcionar com stone agrupável, diferente do script mais acima, esse funciona com stone agrupável ou não... se der erro foi alguma mudança na lib do server de vocês que atrapalha:
  15. Não sei se você sabe, mas há um limite de lenght que uma string armazenada em storage pode ter... Na verdade, o server em si não tem limite de espaço pra strings em storages, mas quando o server tenta salvar uma string muito grande na database, o server dá crash. No TFS se não me engano o limite é de 281 caracteres, depois disso, se o server tentar salvar essa string na database ele cai. Testa aí depois, adiciona com um único char vários e vários itens e depois dá logout, o server deve cair Isso complica um pouco as coisas, mas dá pra você reduzir bastante o tamanho da string se em vez de usar o nome do item, usar o id dele
  16. Ah, tava fazendo aqui e já responderam... bom, mesmo assim vou deixar aqui a script que fiz: Não tem checagem de level já que você não pediu. O script do Leoxtibia não está removendo os itens eu acho.
  17. Script: local newOutfit = 127 -- apenas looktype function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if isPlayer(cid) then local outfit = getCreatureOutfit(cid) outfit.lookType = newOutfit doSetCreatureOutfit(cid, outfit, -1) end return true end function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor) if isPlayer(cid) and getCreatureCondition(cid, CONDITION_OUTFIT) then doRemoveCondition(cid, CONDITION_OUTFIT) end return true end O melhor jeito a se fazer isso é usando action id cara, ai coloca essas tag no movements.xml: <movevent type="StepIn" actionid="XXXx" event="script" value="script.lua"/> <movevent type="StepOut" actionid="XXXX" event="script" value="script.lua"/> Unique id é chato porque não pode repetir unique id, mas action id pode, aí você muda a tag ali e coloca o nome certinho da script e uma action id, aí só configurar os tiles no map editor com action id. Se não quiser actionid/uniqueid, o único jeito de fazer é por itemid, e aí teria que fazer checagem de posição no script pra que não acontecer de um tile que não tem nada a ver com a script, mas com o mesmo id executar as ações
  18. Tem que registrar o evento, lê o meu post la em cima que explica certinho como registrar e atualiza sua script com essa: function onAdvance(cid, skill, oldLevel, newLevel) if skill == 8 then if newLevel % 3 == 0 then -- vai ganhar mp nos leveis 3, 6, 9, 12, 15, 18, 21... setCreatureMaxMana(cid, getCreatureMaxMana(cid) + 1) end if newLevel % 2 == 0 then -- vai ganhar hp nos leveis 2, 4, 6, 8, 10, 12... setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) + 1) end end return true end Só percebi agora que usando elseif fica errado, vai chegar alguns leveis que o player deveria ganhar mana e hp junto, mas só ia ganhar mana devido ao uso do elseif.
  19. não tem como salvar o tile de house por script lua não, só pelo map editor mesmo... só se você criar um arquivo que vai ser lido no startup do server e faz com que a house seja modificada antes de qualquer player fizer login é um script avançado e não rola de fazer agora, outro dia se der vontade eu até faço pra ver se o tile está na extremidade é só usar essa checagem dentro dos 2 loops: if math.abs(x) == 5 or math.abs(y) == 5 then -- algum código, tipo criar uma parede end
  20. O do newtonnotwn não funciona porque ele escreveu a tag errado e usou quebra de linhas no texto... a tag correta é: <globalevent name="??" interval="60" event="script" value="??.lua"/> e o segundo parâmetro da função doBroadcastMessage deve ser 20 pra aparecer no console em laranja
  21. Só lembrando que uma área 10x10 não tem centro... dá pra fazer em 3 linhas de código o que você quer, usando for, exemplo: for x = -5, 5 do for y = -5, 5 do local p = getThingPos(cid) p.x = p.x + x p.y = p.y + y doCreateTile(CONSTRUCTIONS[item.itemid], p) end end Esse código vai criar uma área 11x11 sendo a posição do player o centro
  22. Aqui: Detalhes: 1 - Achei que você quisesse que ao falar yes, o player fosse teleportado para uma certa posição (POS_INICIAL no caso) e aí sim começasse a andar, se não quiser isso, basta remover essa linha: doTeleportThing(cid, config.POS_INICIAL, false) 2 - O POS_FINAL é só se a ROTA_AUTOMATICA estiver true, o player fica andando até alcançar a POS_FINAL e aí ele para de andar. 3 - Se você determinar a ROTA_POR_DIRECTIONS e colocar ROTA_AUTOMATICA como false, ele vai seguir a ROTA_POR_DIRECTION até chegar na última direction especificada e para de andar novamente. No caso: {NORTH, NORTH, EAST, NORTH, EAST}, o player vai andar 1 sqm pro NORTE, depois mais 1 pro NORTE, aí 1 pro LESTE, aí um pro NORTE de novo e outro pro LESTE e vai finalizar a viagem. 4 - adicionado a condição infight pro player não dar logout, adicionado também as configurações ITEM_REMOVIDO e ITEM_COUNT pra configurar um item a ser removido pra poder viajar, e sua quantidade também. As direções são: NORTH /\ (norte, pra cima) EAST > (leste, pra direita) SOUTH \/ (sul, pra baixo) WEST < (oeste, para esquerda) SOUTHWEST (diagonal para baixo/esquerda) SOUTHEAST (diagonal para baixo/direita) NORTHWEST (diagonal para cima/esquerda) NORTHEAST (diagonal para cima/direita) você deve usar as palavras grifadas para completar a tabela de direções, ou então você usa números, sendo: 0 = norte 1 = leste 2 = sul 3 = oeste 4 = sudoeste 5 = sudeste 6 = noroeste 7 = nordeste
  23. brun123

    Duvida Sobre Depot

    cara esse negócio de unique id em itens é uma questão complicada, porque esses ids não são estáticos... pode perceber que quando você usa pega o uid de um item, ele retorna um valor, se você depois for pegar uid de outro item, pode retornar esse mesmo valor... o mesmo item, caso você pegue o uid em tempos diferentes, pode retornar uids diferentes. o único jeito de tornar o uid de um item estático é usando a função doItemSetAttribute(item, "uid", xxxx), ou então colocando algum unique id no item pelo map editor... esse número só tem alcance de 1000 até 65536. se você atribuir um unique id a esse item, por exemplo, 1500, em outra script você pode simplesmente fazer "doRemoveItem(1500)" e o server já vai saber qual item você está falando... por isso que numa script desse jeito: local removeItem = getTileItemById(pos, 1285) addEvent(doRemoveItem, 5000, removeItem.uid) é muito provável que dê erro dizendo que o item não foi encontrado ou então remova até algum outro item. quando você usa qualquer função que retorna uma tabela com o uid/itemid/type do item (getTileItemById, getTileThingFromPos, getPlayerSlotItem são exemplos), esse uid é temporário, ele dura alguns milisegundos antes de serem apagados da memória, como quando alguma script é lida tudo é executado quase que instantaneamente, usar uma dessas funções e já manipular esse item na mesma script não é problema, mas quando você mistura com delay (addEvent), você cria um problema... se exatamente na hora do addEvent ocorrer algum outro item for atribuído temporariamente um uid que foi igual ao do item que utilizei addEvent, as ações do addEvent vão ocorrer nesse outro item... a chance de isso acontecer é extremamente pequena, é como se fosse a chance do seu coração parar ao receber algum impacto no meio de uma contração ventricular (uma contração dura aprox. 0,025 segundos, se nesse intervalo a pessoa receber um impacto com força relativamente alta, o coração pode parar de bater) é algo semelhante, entende? no caso, para corrigir essa script, teria que fazer algo assim: local removeItem = getTileItemById(pos, 1285) local function doRemoveMyItem(pos, id) local i = getTileItemById(pos, id).uid if i.uid > 1 then -- sempre essa averiguada para evitar erros no console doRemoveItem(i.uid) end end addEvent(doRemoveMyItem, 5000, pos, 1285) Mesmo que o addEvent aconteça exatamente no mesmo intervalo de tempo que outra script foi executada, um novo uid será atribuído quando a local function for executada nesse tal item, e após a script ser lida esse uid é apagado da memória. Tem que ser dessa forma, vou pegar um mapa que eu tava fazendo como exemplo: Total number of items: 1255569 o mapa tem apenas 10 mb, imagina um mapa que tem 40 mb (tem mapa por aí que tem muito mais que isso), ainda mais um mapa de tibia, que o pessoal fica colocando lixo no chão, vários detalhes etc etc... vai dar uma quantidade absurda de itens, e se fosse pra atribuir um valor estático a cada um desses itens... já deu pra entender ne
  • Quem Está Navegando   0 membros estão online

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