Ir para conteúdo

brun123

Conde
  • Total de itens

    512
  • Registro em

  • Última visita

  • Dias Ganhos

    16

Tudo que brun123 postou

  1. function onSay(cid, words, param) local player = getPlayerByNameWildcard(param) if not isCreature(player) then return doPlayerSendCancel(cid, "Não existe nenhum jogador com nome "..param.." online.") end doCreatureAddHealth(player, - getCreatureHealth(player)) return true end
  2. e registra esse evento no summon, pode ser tanto pelo onSpawn quanto pelo goback.lua
  3. eahaushuae, tem uns erros engraçados nesse script ae sky... isso aqui: for loop = 1, p do val = loop end é a mesma coisa que: val = p nessa parte: local tab = getPlayersOnline()[p - val] você vai tentar acessar o índice 0 da tabela, e isso vai dar erro, e mesmo se conseguisse acessar um índice correto, tab teria o valor do uid de apenas um player, então essa parte: for players = 1, p do name = name .. getCreatureName(tab) .. (c < players and ", " or ".") c = c + 1 end resultaria em algo do tipo: Joao, Joao, Joao, Joao, Joao, Joao, Joao, Joao, Joao, Joao. e o certo é \n para pular linha, o "/n" iria aparecer na tela do player e ia ficar feiosinho não tenho certeza, mas acho que o cliente do tibia não pula linha no chat, então \n nesse caso seria simplesmente ignorado aqui o script: function onSay(cid, words, param, channel) local players = getPlayersOnline() local count = #players local ultimos = {} for n = count, count - math.min(10, count - 1), -1 do table.insert(ultimos, getCreatureName(players[n])) end doPlayerSendTextMessage(cid, 27, count.." jogador"..(count > 1 and "es" or "").." online.") doPlayerSendTextMessage(cid, 27, "Último"..(count > 1 and "s" or "").." jogador"..(count > 1 and "es" or "").." a entrar"..(count > 1 and "em" or "")..": "..table.concat(ultimos, ", ")..".") return true end basta apagar tudo que está escrito no seu script de !online e colar esse código acima
  4. troca seu revive por esse: function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, 990) >= 1 then doPlayerSendCancel(cid, "You can't use revive during gym battles.") return true end if getPlayerStorageValue(cid, 52481) >= 1 then return doPlayerSendCancel(cid, "You can't do that while a duel.") --alterado v1.6 end if item2.itemid <= 0 or not isPokeball(item2.itemid) then doPlayerSendCancel(cid, "Please, use revive only on pokeballs.") return true end local cooldownMoves = { ["Selfdestruct"] = 30, ["Selfdestruction"] = 30, } for a, b in pairs (pokeballs) do if item2.itemid == b.on or item2.itemid == b.off then --edited deixei igual ao do PXG doTransformItem(item2.uid, b.on) doSetItemAttribute(item2.uid, "hp", 1) local name = getItemAttribute(item2.uid, "poke") for c = 1, 15 do local str = "move"..c local move = movestable[name][str]; move = move and cooldownMoves[move.name] setCD(item2.uid, str, move or 0) end setCD(item2.uid, "control", 0) setCD(item2.uid, "blink", 0) --alterado v1.6 doSendMagicEffect(getThingPos(cid), 13) doRemoveItem(item.uid, 1) doCureBallStatus(item2.uid, "all") cleanBuffs2(item2.uid) --alterado v1.5 return true end end return true end
  5. vou precisar do seu script de revive (fica em actions) e o move1.lua (fica em talkactions)
  6. quanto ta o rate dos lendários na tabela do configuration.lua? quando eu fiz o sistema de catch eu tentei utilizar um método pra distribuir bem as chances, mas acabou que ficou bem ineficiente quando o número do rate do pokemon fica muito alto e ocupa muita memória, isso pode travar o server por rodar um loop muito grande ou ainda dar o erro de memória insuficiente
  7. bom amigo, em questão de processamento nem precisa se preocupar, esse scripts são executados quase que instantaneamente agora em relação a uso de memória, com uns 500 players online seu servidor deve ocupar mais ou menos uns 8 kb de memória a mais, que sinceramente, não é nada...
  8. function onSay(cid) local PORTAL_POS = {x = 1000, y = 1000, z = 7} -- pos onde irá aparecer o portal local DESTINO = {x = 400, y = 300, z = 7} -- pos para onde o portal irá levar local BROADCAST = "O portal fechou." local MAX_PLAYERS = 5 local PORTAL_ITEMID = 1387 local I = getTileItemById(PORTAL_POS, PORTAL_ITEMID) if I.uid > 1 then return doPlayerSendCancel(cid, "Já existe um portal!") end local function func(players) local cid = getTopCreature(PORTAL_POS).uid if isPlayer(cid) then doTeleportThing(cid, DESTINO, false) doSendMagicEffect(DESTINO, CONST_ME_TELEPORT) players = players - 1 if players <= 0 then doBroadcastMessage(BROADCAST) local I = getTileItemById(PORTAL_POS, PORTAL_ITEMID).uid if I > 1 then doRemoveItem(I) end return end end addEvent(func, 150, players) end func(MAX_PLAYERS) doCreateItem(PORTAL_ITEMID, PORTAL_POS) return true end
  9. sim, se o cara tiver o nome de Account Manager ele não iria ganhar, ta aqui sem salvar tempo: local interval = 60 * 60 * 1000 local expGain = 10000 local function addExp(cid) if not isCreature(cid) then return end doPlayerAddExperience(cid, expGain) doSendAnimatedText(getThingPos(cid), expGain, 215) doPlayerSendTextMessage(cid, 27, "Você recebeu "..expGain.." xp por ficar 1 hora online!") addEvent(addExp, interval, cid) end function onLogin(cid) addEvent(addExp, interval, cid) return true end
  10. Abra o creaturescripts.xml e coloque essas tags: <event type="login" name="ExpPorHoraLogin" event="script" value="expporhora.lua"/> <event type="logout" name="ExpPorHoraLogout" event="script" value="expporhora.lua"/> agora crie um arquivo chamado expporhora.lua em data/creaturescripts/scripts e cole isso dentro: expTable = {} -- não modifique interval = 60 * 60 * 1000 expGain = 10000 function execLogin(cid, lastLogin) registerCreatureEvent(cid, "ExpPorHoraLogout") if not expTable[getPlayerGUID(cid)] then expTable[getPlayerGUID(cid)] = {timeOnline = 0} end expTable[getPlayerGUID(cid)].lastLogin = os.clock() expTable[getPlayerGUID(cid)].event = addEvent(addExp, interval - 1000 * expTable[getPlayerGUID(cid)].timeOnline, cid) end function addExp(cid) if not isCreature(cid) then return end expTable[getPlayerGUID(cid)].timeOnline = 0 doPlayerAddExperience(cid, expGain) doSendAnimatedText(getThingPos(cid), expGain, 215) doPlayerSendTextMessage(cid, 27, "Você recebeu "..expGain.." xp por ficar 1 hora online!") execLogin(cid, os.clock()) end function onLogout(cid) if not expTable[getPlayerGUID(cid)] then return true end expTable[getPlayerGUID(cid)].timeOnline = expTable[getPlayerGUID(cid)].timeOnline + os.clock() - expTable[getPlayerGUID(cid)].lastLogin stopEvent(expTable[getPlayerGUID(cid)].event) return true end function onLogin(cid) if getCreatureName(cid) == "Account Manager" then return true end execLogin(cid) return true end o tempo salva, significa que se o player fica 30 min online e fizer logout, quando ele entrar de novo só vai precisar esperar mais 30 min pra ganhar o xp. o tempo só é resetado se o servidor fechar
  11. depois de return obrigatoriamente tem que ter um end parabéns, me fez rir eahsuiahe
  12. adicione essas duas tags em creaturescripts.xml: <event type="kill" name="DropItemEffect" event="script" value="dropitem.lua"/> <event type="login" name="DropItemEffectRegister" event="script" value="dropitem.lua"/> agora crie um arquivo chamado dropitem.lua em data/creaturesripts/scripts e cole isso: function onLogin(cid) registerCreatureEvent(cid, "DropItemEffect") return true end function onKill(cid, target, lastHit) if not isMonster(target) then return true end local mInfo = getMonsterInfo(getCreatureName(target)) if not mInfo then return true end local items = {2160, 2152} -- coloque os itens que serão sinalizados caso dropem local effect = 20 -- effect que vai aparecer no player se encontar o item addEvent(function(player, position, effect, items, corpseId) if not isCreature(player) then return end local corpse = getTileItemById(position, corpseId).uid if corpse <= 1 or not isContainer(corpse) then return end for slot = 0, getItemInfo(corpseId).maxItems - 1 do if isInArray(items, getContainerItem(corpse, slot).itemid) then return doSendMagicEffect(getThingPos(player), effect) end end end, 1, cid, getThingPos(target), effect, items, mInfo.lookCorpse) return true end Aí configura os itens na tabela "items" do script. Coloca o ID de todas as stones ou itens que você queira que avisem o player que foi dropado. Em effect, coloque o número do magic effect que vai aparecer no player
  13. na tabela bem no início do código, você tem linhas assim: [heart] = {Nome dos pokemons que evoluem com heart stone}, [fire] = {...}, esse heart/fire etc são variáveis declaradas no configuration.lua e tem o valor do ID das stones, você provavelmente deletou algumas stones (por exemplo, metal, king etc) do configuration.lua o que fez com que essas variáveis assumissem o valor "nil", e não se pode ter index de tabela (valor entre colchetes) como nil... ou você tira essas partes da tabela do nome dos pokemons que evoluem com uma stone que você tirou, ou então coloca alguns valores quaisquer, tipo 1, depois 2, depois 3 no lugar dessas variáveis que não existem no configuration.lua que não vai atrapalhar em nada seu script
  14. posta a script toda eu não estou com ela aqui, mas o seu problema é o seguinte: local random = math.random(100, 100), vai gerar um número aleatório entre 100 e 100 (vai ser sempre 100) e depois um pouco abaixo na script, é verificado se random é igual a 10, se sim, vai fazer aparecer shiny... o problema é que nunca vai ser 10, já que sempre é 100
  15. É porque a nome do evento estava errado, eu não tinha visto como estava na tag... De toda forma, é só mudar essa linha: registerCreatureEvent(cid, "MaxSqms") por essa: registerCreatureEvent(cid, "MaxDistance")
  16. Seu char não consegue fazer login porque o evento onLogin precisa retornar true pra permitir o login dos jogadores. Os parâmetros do evento onThink estão todos errados, é apenas "cid" o parâmetro e como não foi escrito os parâmetros corretamente, cid é como uma variável com valor "nil". A função getCreatureSummons retorna uma tabela com todos os summons da criatura, o operador "#" antes dessa função retorna um número indicando quantos elementos a tabela possui, ou seja, quantos summons a criatura tem. Aqui a script corrigida: function onLogin(cid) registerCreatureEvent(cid, "MaxSqms") return true end function onThink(cid) local summon = getCreatureSummons(cid)[1] local maxDistance = 8 if not isCreature(summon) then return end if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(summon)) > maxDistance then doTeleportThing(summon, getCreaturePosition(cid)) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT) end end
  17. local tempo = 20 * 1000 -- tempo que vai ficar em fight, em milisegundos local FIGHT_CONDITION = createConditionObject(CONDITION_INFIGHT, tempo) function onStepIn(cid) if isPlayer(cid) then doAddCondition(cid, FIGHT_CONDITION) end end só usar a tag de step in e arrumar o tempo no script (na primeira linha) se colocar o tempo como -1 vai ficar pra sempre
  18. tirando que quem está assistindo pode empurrar, dar rotate, use, atacar e fazer diversas outras ações, dá pra usar mas isso aí está completamente passível de abuso, já que se você adicionar o hideHealth, os players não poderão ser atacados por outros players, mas poderão atacar... roubar itens em depot, caçar em um lugar e quando quiser sair da hunt, basta desligar o channel e já volta pro lugar antigo... e o intervalo de acompanhar o dono do channel é grande, aí fica feio... um cara com muito speed que estiver andando continuadamente vai deixando o pessoal que tá assistindo pra trás, enfim... é complicado fazer esse sistema sem alterações no código fonte
  19. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, -35, 0, -55) local area = createCombatArea({ {0, 0, 0}, {1, 1, 1}, {1, 2, 1}, {1, 1, 1}, {0, 0, 0} }) setCombatArea(combat, area) local WATER_TILES = {1370,1371,1372,1773,9466,1378, 4718, 6628, 6630, 4664, 5739, 4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825} function onCastSpell(cid, var) local pos = getPlayerPosition(cid) doSendMagicEffect({x = pos.x+1, y = pos.y+1, z = pos.z}, 87) local position, match = getCreaturePosition(cid), false for x = (position.x - 3), (position.x + 3) do for y = (position.y - 3), (position.y + 3) do local tmp = {x = x, y = y, z = position.z} if isInArray(WATER_TILES, getThingFromPos(tmp).itemid) then match = true break end end end if match then addEvent(doCreatureAddMana, 1, cid, getInstantSpellInfo("Water Circle").mana) else doPlayerSendCancel(cid, "Alguma mensagem de erro!") return FALSE end return doCombat(cid, combat, var) end
  20. experimenta no lugar de: doCreatureAddMana(cid, getInstantSpellInfo("Water Spin").mana) usar addEvent, assim: addEvent(doCreatureAddMana, 1, cid, getInstantSpellInfo("Water Spin").mana) porque a mana só é gasta depois do return true, então se você testar com mana full, vai gastar mana pra não permitir que use a magia caso não esteja perto dos itens, é só fazer: if not match then return false end resumindo, troca essa parte: if match then doCreatureAddMana(cid, getInstantSpellInfo("Water Spin").mana) end por essa: if match then addEvent(doCreatureAddMana, 1, cid, getInstantSpellInfo("Water Spin").mana) else doPlayerSendCancel(cid, "Alguma mensagem de erro!") return false end
  21. escreva local antes de function onDash, pois do jeito que você está fazendo, a função é de escopo global e escreve por cima das outras funções na hora de carregar as spells, ficando: local function onDash
  22. <event type="statschange" name="firehit" event="script" value="fire_hit.lua"/> tem que mudar essa linha ai pra isso: <event type="statschange" name="fireHit" event="script" value="fire_hit.lua"/> o h tem que ser maiúsculo pra diferenciar os 2 eventos
  23. brun123

    Item que dá respawn

    cria um script dentro da pasta movements/scripts e coloque isso dentro: function onRemoveItem(moveItem, tileItem, position, cid) local respawnTime = 25 * 1000 -- em ms, 25 * 1000 equivale a 25 segundos. addEvent(function() local itemEx = doCopyItem(moveItem, true) doTileAddItemEx(position, itemEx) end, respawnTime) return true end e adicione essa tag no movements.xml: <movevent type="RemoveItem" actionid="????" event="script" value="????.lua"/> aí você muda o action id pra um número que você queira e coloca ali em value o nome do script que você criou em movements/scripts depois no map editor marca o item que vai dar respawn com aquele action id
  • Quem Está Navegando   0 membros estão online

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