Ir para conteúdo

brun123

Conde
  • Total de itens

    512
  • Registro em

  • Última visita

  • Dias Ganhos

    16

Tudo que brun123 postou

  1. Veja se assim funciona: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'missao') then if getPlayerStorageValue(cid, 7700) < 1 then selfSay('Ah, seu fanfarrão, saia daqui', cid) elseif getPlayerStorageValue(cid, 7700) == 1 then selfSay('Você deve levar 4 {dragon ham} ao mendigo em frente ao dp. {Ok}?', cid) setPlayerStorageValue(cid, 7700, 2) talkState[talkUser] = 1 elseif getPlayerStorageValue(cid, 7700) == 3 then selfSay('Você deve levar 4 {health potion} ao mendigo em frente a arena. {Ok}?', cid) setPlayerStorageValue(cid, 7700, 4) talkState[talkUser] = 1 end return true end if talkState[talkUser] == 1 then if msgcontains(msg, 'ok') then selfSay('Pode ir, ele está à sua espera!!', cid) talkState[talkUser] = 0 elseif msgcontains(msg, 'no') then selfSay('Então porque veio aqui?', cid) end return true end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  2. Na vodkart, pode colocar até t.uid > 50000 que vai funcionar, pois os unique ids que são atribuídos aos itens podem no mínimo ter valor 70.000. A menos que você use doItemSetAttribute(itemUid, "uid", xxxx) ou então modifique seu UID pelo map editor, ele não pode ter valor menor que 70k. Caso editado manualmente, via map editor ou scripts, seu valor pode variar de 1000 até 65536, algum número assim... Colocar > 0 ou > 1 não faz diferença mesmo. Quando se usa a função getTileItemById e não encontra nenhum item, retorna uma tabela assim: {uid = 0, itemid = 0}, algo do tipo... Se você tentar remover o item cujo uid é 0 (item não existente), vai aparecer esse erro que o item não foi encontrado. Por isso checa-se antes de o uid do item é maior que 0 ou 1 (tanto faz), pois dessa forma o item certamente irá existir e não tem como possivelmente dar erros. Lolksky, eu testei a script aqui e não deu nenhum erro... Vou analisar aqui de novo e ver se consigo descobrir algo...
  3. brun123

    Efeitos..

    Isso não é bem um erro, é só um aviso de que o servidor tentou carregar um script do tipo onAdvance e ele não existe. Você deixou bem claro que era pra ficar jogando efeitos a cada 3 segundos quando GODs fizerem login, mas não especificou nada sobre algo de aumentar o level e jogar efeitos também... É só tirar a tag do tipo advance do seu creaturescripts.xml (provavelmente tem mais de uma, tira aquela que está ligada ao arquivo GodEffect.lua). Se quiser que algo aconteça quando chegar em X level ou algo do tipo, só explicar direitinho o que você quer.
  4. e a outra script? tem que editar as 2
  5. Me mostra como ficou suas scripts depois da sua edição
  6. No primeiro script, substitua essa linha: if t then por essa: if t.uid > 1 then no segundo, substitua essa linha: doRemoveItem(item2,uid, 1) por essa: doRemoveItem(item2.uid, 1)
  7. brun123

    Efeitos..

    Cara as pessoas fazem muita confusão com um pedido simples... Misturando script onAdvance sendo que não tem nada a ver com o pedido do tópico, o que ele postou é apenas uma base pra exemplificar o que ele quer mais ou menos. Veja se esse agrada: As 6 primeiras linhas são de configurações para que você possa alterar ao seu gosto. Se quiser algo a mais, mensagens saindo do god, tamanho da área ou qualquer outra coisa só pedir. Qualquer dúvida em relação à configuração só perguntar também.
  8. Bom, nunca é tarde pra aprender né: local function customFunction(cid, efeito, times) if not isCreature(cid) then return true end local eff = efeito or 15 local dir = getCreatureLookDir(cid) local diag = dir == NORTH and {NORTHWEST, NORTHEAST} or dir == SOUTH and {SOUTHWEST, SOUTHEAST} or dir == EAST and {NORTHEAST, SOUTHEAST} or dir == WEST and {SOUTHWEST, NORTHWEST} if (times and times <= 0) then local min = getPlayerLevel(cid) * 3 + getPlayerMagLevel(cid) * 5 local max = min * math.random(110, 130) / 100 for n = 1, 2 do doCombatAreaHealth(cid, COMBAT_PHYSICALDAMAGE, getPosByDir(getThingPos(cid), diag[n]), 0, -min, -max, 15) end return true end local p = 1 if times and times / 2 == math.floor(times/2) then p = 2 end doSendMagicEffect(getPosByDir(getThingPos(cid), diag[p]), eff) local delay = times > 58 and 600 or times > 46 and 400 or times > 38 and 250 or times > 30 and 170 or 50 addEvent(customFunction, delay, cid, efeito, times and times - 1 or 45) end function onCastSpell(cid, var) customFunction(cid, 21, 65) return TRUE end
  9. Newtonnotwen, se o player morrer usando essa magia vai dar uma travada no server de tanto erro que vai aparecer no executável. Se o player andar também fica feio, o efeito não acompanha o player. Teria no mínimo que colocar o player imóvel. Não precisa criar um milhão de combats e local functions pra fazer uma magia dessa. Dá pra fazer bem menor...
  10. Eu testei aqui e funcionou, você tem que editar os efeitos ali onde está 29 e 30. Se quiser que apareça as palavras que o player fala pra usar a magia é só adicionar um "return true" antes do último end Perai, já vou editar... Vi um erro aqui Vê se assim fica bom: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -2.5, 0, -3.0, 0) local damageArea = { {0, 0, 0}, {1, 2, 1}, {0, 0, 0}} local combatArea = createCombatArea(damageArea) setCombatArea(combat, combatArea) function onCastSpell(cid, var) doCombat(cid, combat, var) local dir = (getCreatureLookDir(cid) == NORTH or getCreatureLookDir(cid) == SOUTH) and {EAST, WEST} or {SOUTH, NORTH} local a, b = getPosByDir(getThingPos(cid), dir[1]), getPosByDir(getThingPos(cid), dir[2]) if getCreatureLookDir(cid) == NORTH then a.y = a.y - 1 b.y = b.y - 1 elseif getCreatureLookDir(cid) == EAST then a.x = a.x + 1 b.x = b.x + 1 end doSendMagicEffect(a, 29) doSendMagicEffect(b, 30) return true end Não se esqueça de modificar o 29/30 nas linhas onde tem "doSendMagicEffect" pros 2 efeitos que você deseja
  11. Amigo, é melhor você postar um dos scripts do seu NCP Gym, porque se você disse que usa o servidor flash como base, essas scripts do pokemon dash advanced não vão funcionar... gym.lua não é uma pasta, mas sim um arquivo que fica na pasta /lib
  12. Experimente assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -2.5, 0, -3.0, 0) local damageArea = { {1, 0, 1}, {0, 2, 0}, {0, 0, 0}} local combatArea = createCombatArea(damageArea) setCombatArea(combat, combatArea) function onCastSpell(cid, var) doCombat(cid, combat, var) local a, b = getPosByDir(getThingPos(cid), EAST), getPosByDir(getThingPos(cid), WEST) doSendMagicEffect(a, 29) doSendMagicEffect(b, 30) end
  13. O certo seria usar isInArray(winpos, getCreaturePosition(cid)), pois isso verifica se a posição da criatura está dentro do array winpos. Infelimente com tabelas essa função não funciona, pois uma tabela A jamais é igual a uma tabela B, por mais que seus elementos sejam iguais.
  14. Crie um arquivo chamado target.lua em data/creaturescripts/scripts e coloque isso dentro: function onTarget(cid, target) if isMonster(target) then registerCreatureEvent(target, "ManaDrain") end return true end Adicione essa tag no creaturescripts.xml: <event type="target" name="RegisterManaDrainOnMonsters" event="script" value="target.lua"/> e agora essa linha em login.lua: registerCreatureEvent(cid, "RegisterManaDrainOnMonsters")
  15. Ah sim, é que eu tinha dado ctrl c/v no script do LuckOake, ele usou cid em vez de attacker na função getPlayerSlotItem. Sim, é um pedido que está sendo atendido e eu interrompi. Quero ver os outros aprendendo lua também amigo, assim como você deveria fazer em vez de simplesmente ficar fazendo pedidos e achar que os outros tem obrigação de te ajudar.
  16. É porque po/pos não foi declarado nessa 2ª function, o certo seria: A script vai funcionar, mas não sei se é exatamente o que você quer... Ela cria um teleporte no posição teleportPosition com um destino aleatório que pode ser qualquer um dentro daquelas especificadas na tabela "pos". Depois de 5 min esse teleporte é destruído e mais 1 hora depois outro é criado, com mesmo efeito, aleatório, por 5 min bla bla... Achei que você quisesse um teleporte fixo que de 2 em 2 min mude o destino, não precisa usar storage pra fazer isso. A propósito, storage são valores que vão ser armazenados, só pra guardar uma informação, por exemplo, em qual estado está uma certa quest do player, aí eu pego a storage value de key 100 e coloco o valor 1, seria o estágio inicial. Aí num NPC, quando o player conversa com esse NPC, ele verifica qual o valor da key 100 do player (o campo 100 de valores armazenados) pra ver qual o estágio da quest... Se for 1, vai pedir um item X, ai depois que o player entregar, coloca o valor como 2, ai pede um item Y, ai coloca o valor como 3 que seria a quest concluída, só um exemplo... Existem storages para players e storages globais, que seria um storage que vale pro server inteiro, utilizada em quests globais, como por exemplo anihilator... Também muito utilizada pra customizar o quest log, editando o quests.xml
  17. Poderia, mas prefiro que quem está se esforçando há mais tempo nessa dúvida sane ela pra você, aí você dá seu rep pra essa pessoa e ela aprende mais.
  18. O método do LuckOake (por statschange) é melhor de se trabalhar nesse caso... Só faltou especificar no script que o type do stats change é STATSCHANGE_HEALTHLOSS, pois o onStatsChange é executado também quando alguém ganha/perde vida/mana. É sempre bom verificar se o monstro que está tendo os stats alterados está vivo e existe, usando essas linhas: if not isCreature(cid) or getCreatureHealth(cid) <= 0 then return true end Isso evita erros indesejáveis no console. No caso especificamente eu usaria a função getPlayerWeapon e declararia as suas locais em cima do function onStatsChange já que elas sempre assumirão o mesmo valor... Questão de estética. Skymagnum, você tá usando a função isInArray muito errado... ela funciona assim: isInArray(array, valor), vai procurar dentro do array pra ver se existe algum elemento com o certo valor especificado, e você inverteu a ordem dos parâmetros: isInArray(slots[i], weapons) é igual a isInArray(CONST_SLOT_LEFT, {123, 321, 231}) A função vai checar se {123, 321, 231} existe dentro de CONST_SLOT_LEFT, que é uma constante de valor 5 se não me engano... O certo seria: isInArray(weapons, getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid) Dessa forma vai checar se o itemid do item equipado no certo slot está dentro do array
  19. Ah sim, aí foi uma modificação do server original que não ficou compatível com algumas scripts. Se o cara removeu o sistema de level, ele provavelmente deletou a função getPokemonStatus que é baseada em sistema de level. Aí você teria que ver com o autor da edição do server pra ver como se faz um novo baú
  20. Só esqueceu de usar string.lower, tudo é case-sensitive. Se eu usar getNumeroInAlfabeto("A"), vai retornar null, pois não tem A maiusculo no seu array, por isso tem que usar o lower
  21. Legal a spell, só precisa de um pequeno ajuste, pois se o alvo do player morrer depois que a spell foi usada, mas antes dos addEvent ocorrerem, vai aparecer 3 mensagens de erros no console dizendo "Creature not found". Isso vai acontecer se o player parar de atacar o monstro também, já que a função utilizada é getCreatureTarget. Uma outra coisa estranha que poderia acontecer seria se o player usasse a magia em um monstro e rapidamente trocasse de alvo, o dano ia pro novo alvo do player enquanto os efeitos seriam lançados no alvo antigo... Coisas bobas, bem simples de arrumar
  22. Só um detalhezinho, quando você declarou as variáveis "taxa", você usou "getPlayerSoul(cid) - 100", mas o correto seria "100 - getPlayerSoul(cid)". Do jeito que você fez, o valor de "taxa" vai ficar negativo e em vez de adicionar soul ao player, vai remover. Por uma questão de estética, eu não usaria a função doPlayerRemoveItem, mas sim doRemoveItem(item.uid, 1). E não precisava repetir as mesmas duas funções dentro de 4 ifs, a doSendMagicEffect e a doPlayerRemoveItem, bastava colocar elas 1x no final do script. Bom script de toda forma
  23. Está faltando a função getPokemonStatus no seu server... Você modificou alguma coisa na pasta libs? deletou algum arquivo ou algo do tipo? Fala qual server você tá usando também, se é algum editado ou o advanced original
  24. O certo seria assim: doPlayerSendTextMessage(cid, 28, "Você precisa dar um lance maior que ".. getGlobalStorageValue(storage_player) > 0 and getGlobalStorageValue(storage_player) or getGlobalStorageValue(storage_min) .." gps.") Mas é provável que apareça apenas o valor da globalStorage, ai teria que separar assim: local gps = getGlobalStorageValue(storage_player) > 0 and getGlobalStorageValue(storage_player) or getGlobalStorageValue(storage_min) doPlayerSendTextMessage(cid, 28, "Você precisa dar um lance maior que "..gps.." gps.")
  • Quem Está Navegando   0 membros estão online

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