Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 06/23/15 em todas áreas
-
Base usada: PDA by Slicer, v1.9 Para quem não conhece o sistema de mega evoluções, recomendo acessar este link. A diferença é que a pedra (mega stone) não ocupa o espaço de um Held Item tier Y (visto que não são todos os servidores que possuem Held Itens). Instalação do sistema (atenção nos detalhes) data/lib: cooldown bar.lua: Troque o código da função getNewMoveTable(table, n) por este: function getNewMoveTable(table, n) if table == nil then return false end local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9, table.move10, table.move11, table.move12} local returnValue = moves if n then returnValue = moves[n] end return returnValueend No código da função doUpdateMoves(cid), troque o segundo: table.insert(ret, "n/n,") por: local mEvolveif not getCreatureName(summon):find("Mega") and getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") then if not isInArray(ret, "Mega Evolution,") then table.insert(ret, "Mega Evolution,") mEvolve = true endendif not mEvolve then table.insert(ret, "n/n,")end Depois, em pokemon moves.lua: Troque: min = getSpecialAttack(cid) * table.f * 0.1 --alterado v1.6 por: min = getSpecialAttack(cid) * (table and table.f or 0) * 0.1 --alterado v1.6 Código da spell: elseif spell == "Mega Evolution" then local effect = xxx --Efeito de mega evolução. if isSummon(cid) then local pid = getCreatureMaster(cid) if isPlayer(pid) then local ball = getPlayerSlotItem(pid, 8).uid if ball > 0 then local attr = getItemAttribute(ball, "megaStone") if attr and megaEvolutions[attr] then local oldPosition, oldLookdir, health_percent_lost = getThingPos(cid), getCreatureLookDir(cid), (getCreatureMaxHealth(cid) - getCreatureHealth(cid)) * 100 / getCreatureMaxHealth(cid) doItemSetAttribute(ball, "poke", megaEvolutions[attr][2]) doSendMagicEffect(getThingPos(cid), effect) doRemoveCreature(cid) doSummonMonster(pid, megaEvolutions[attr][2]) local newPoke = getCreatureSummons(pid)[1] doTeleportThing(newPoke, oldPosition, false) doCreatureSetLookDir(newPoke, oldLookdir) adjustStatus(newPoke, ball, true, false) doCreatureAddHealth(newPoke, -(health_percent_lost * getCreatureMaxHealth(newPoke) / 100)) if useKpdoDlls then addEvent(doUpdateMoves, 5, pid) end end end end end Depois, em configuration.lua: megaEvolutions = { --[itemid] = {"poke_name", "mega_evolution"}, [11638] = {"Charizard", "Mega Charizard X"}, [11639] = {"Charizard", "Mega Charizard Y"},} Agora, em data/actions/scripts, código da mega stone: function onUse(cid, item) local mEvolution, ball = megaEvolutions[item.itemid], getPlayerSlotItem(cid, 8).uid if not mEvolution then return doPlayerSendCancel(cid, "Sorry, this isn't a mega stone.") elseif ball < 1 then return doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.") elseif #getCreatureSummons(cid) > 0 then return doPlayerSendCancel(cid, "Return your pokemon.") elseif getItemAttribute(ball, "poke") ~= mEvolution[1] then return doPlayerSendCancel(cid, "Put a pokeball with a(n) "..mEvolution[1].." in the pokeball slot.") elseif getItemAttribute(ball, "megaStone") then return doPlayerSendCancel(cid, "Your pokemon is already holding a mega stone.") end doItemSetAttribute(ball, "megaStone", item.itemid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Now your "..getItemAttribute(ball, "poke").." is holding a(n) "..getItemNameById(item.itemid)..".") doRemoveItem(item.uid) return trueend Depois, em goback.lua: Abaixo de: if not pokes[pokemon] then return trueend coloque: if pokemon:find("Mega") then local normalPoke = megaEvolutions[getItemAttribute(item.uid, "megaStone")][1] if normalPoke then doItemSetAttribute(item.uid, "poke", normalPoke) pokemon = normalPoke end end Depois, em data/creaturescripts/scripts, look.lua: Abaixo de: local boost = getItemAttribute(thing.uid, "boost") or 0 coloque: local extraInfo, megaStone = "", getItemAttribute(thing.uid, "megaStone")if megaStone then extraInfo = getItemNameById(megaStone) if pokename:find("Mega") then pokename = megaEvolutions[megaStone][1] endend Depois, acima do primeiro: doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) coloque: if extraInfo ~= "" then table.insert(str, "\nIt's holding a(n) "..extraInfo..".")end Já em data/talkactions/scripts, move1.lua: Abaixo de: function doAlertReady(cid, id, movename, n, cd) coloque: if movename == "Mega Evolution" then return true end Troque: if not move then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end por: if not move then local isMega = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "megaStone") if not isMega or name:find("Mega") then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local moveTable, index = getNewMoveTable(movestable[name]), 0 for i = 1, 12 do if not moveTable[i] then index = i break end end if tonumber(it) ~= index then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your pokemon doesn't recognize this move.") return true end local needCds = true --Coloque false se o pokémon puder mega evoluir mesmo com spells em cooldown. if needCds then for i = 1, 12 do if getCD(getPlayerSlotItem(cid, 8).uid, "move"..i) > 0 then return doPlayerSendCancel(cid, "To mega evolve, all the spells of your pokemon need to be ready.") end end end move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0} end E troque: doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY) por: local spellMessage = msgs[math.random(#msgs)]..""..move.name.."!"if move.name == "Mega Evolution" then spellMessage = "Mega Evolve!"enddoCreatureSay(cid, getPokeName(mypoke)..", "..spellMessage, TALKTYPE_SAY) Se não quiser que o "Mega" apareça no nome do pokémon, vá em data/lib, level system.lua: Acima de: if getItemAttribute(item, "nick") then nick = getItemAttribute(item, "nick")end coloque: if nick:find("Mega") then nick = nick:match("Mega (.*)") if not pokes[nick] then nick = nick:explode(" ")[1] end end Caso queiram que cada mega evolução tenha um clã específico: Em move1.lua, acima de: move = {name = "Mega Evolution", level = 0, cd = 0, dist = 1, target = 0, f = 0, t = "?"} coloque: local megaEvoClans = { --[mega_stone_id] = "clan_name", [91912] = "Volcanic", [91913] = "Seavell", --etc,}if megaEvoClans[isMega] then if getPlayerClanName(cid) ~= megaEvoClans[isMega] then return doPlayerSendCancel(cid, "You can't mega evolve this pokemon.") endend Finalizando o tópico após uma pequena reestruturação na indexação, gostaria de levantar algo que acredito ser bem claro: o sistema é cheio de detalhes, muitas vezes minuciosos. Um simples erro e bugs aparecem por toda parte. Se você encontrou algum, pelo menos uma das duas seguintes condições acontecem: Base DIFERENTE da usada. Peço desculpas, mas não pretendo adaptar o sistema para todas as bases diferentes que aparecerem. Se a base for a mesma, você com certeza errou em algum ponto da instalação. O sistema foi testado inúmeras vezes, não apenas por mim, e seu funcionamento foi seguidamente comprovado. Façam bom uso, invocadores.6 pontos
-
Em data/movements/movements.xml adicione a tag: <movevent type="StepIn" actionid="2135" event="script" value="premio.lua"/>Agora em data/movements/scripts, crie um arquivo chamado premio.lua com o seguinte conteúdo: local config = { storage = 24700, item = 5805, desc = "Premio ao jogador %s por completar um evento." } function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if isPlayer(cid) then if getPlayerStorageValue(cid, config.storage) < 1 then local pos = getCreaturePosition(cid) pos.y = pos.y - 1 local thing = doCreateItem(config.item, 1, pos) doItemSetAttribute(thing, "description", string.format(config.desc, getCreatureName(cid))) setPlayerStorageValue(cid, config.storage, 1) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_RED) return true end end return true endPronto, agora coloca a actionid 2135 (ou outra configurada) no piso desejado, e pronto!2 pontos
-
[Resolvido] ajuda com magia unown e air vortex
jeanflamengo e um outro reagiu a zipter98 por uma questão
Em pokemon moves.lua: elseif spell == "Air Vortex" then local config = { outfit = xxx, --Outfit. time = {xxx, xxx}, --{Duração da spell, intervalo entre cada "tick" de dano (em milésimos de segundos)}, storage = 93828, effects = { pullEffects = { distance = xxx, --Distance effect do efeito de puxar pokémons. effect = xxx, --Efeito de tornado. }, damageEffect = xxx, --Efeito do redemoinho que aplica dano. }, } local time = os.time() + config.time[1] function Pull(cid, ret) local pos = getPosfromArea(cid, pullArea) if pos and #pos > 0 then for i = 1, #pos do local c = getTopCreature(pos[i]).uid if c > 0 then if ehMonstro(c) then doTeleportThing(c, getClosestFreeTile(cid, getThingPos(cid))) doMoveDano2(cid, c, NORMALDAMAGE, 0, 0, ret, spell) elseif isSummon(c) then local master = getCreatureMaster(c) if isSummon(cid) then if getPlayerStorageValue(master, 52480) >= 1 and getPlayerStorageValue(master, 52481) >= 0 then local masterCid = getCreatureMaster(cid) if isDuelingAgainst(masterCid, master) then doTeleportThing(c, getClosestFreeTile(cid, getThingPos(cid))) doMoveDano2(cid, c, NORMALDAMAGE, 0, 0, ret, spell) end end else doTeleportThing(c, getClosestFreeTile(cid, getThingPos(cid))) doMoveDano2(cid, c, NORMALDAMAGE, 0, 0, ret, spell) end end end end end end function doSendTornado(cid, pos) if not isCreature(cid) then return true end if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end doSendDistanceShoot(getThingPos(cid), pos, config.effects.pullEffects.distance) doSendMagicEffect(pos, config.effects.pullEffects.effect) end function vortexDamage(cid) if not isCreature(cid) then return true elseif time - os.time() < 0 then return true end doDanoWithProtect(cid, FLYINGDAMAGE, getThingPos(cid), damageArea, min, max, config.effects.damageEffect) addEvent(vortexDamage, config.time[2], cid) end local ret = {id = 0, cd = config.time[1], check = 0, cond = {"Silence", "Paralyze"}} for b = 1, 3 do for a = 1, 20 do local pos = {x = getThingPos(cid).x + math.random(-4, 4), y = getThingPos(cid).y + math.random(-3, 3), z = getThingPos(cid).z} addEvent(doSendTornado, a * 75, cid, pos) end end Pull(cid, ret) vortexDamage(cid) doCreatureSetNoMove(cid, true) doChangeSpeed(cid, -getCreatureSpeed(cid)) doSetCreatureOutfit(cid, {lookType = config.outfit}, config.time[1] * 1000) setPlayerStorageValue(cid, config.storage, time) addEvent(function() if isCreature(cid) then doCreatureSetNoMove(cid, false) doRegainSpeed(cid) end end, config.time[1] * 1000) Em areas.lua: damageArea = createCombatArea{ --Área do dano da spell + redemoinhos. {1, 1, 1}, {1, 2, 1}, {1, 1, 1}, } pullArea = { --Área onde os pokémons serão puxados. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 3, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } Em newStatusSyst.lua: Troque todos os: if ret and ret.cond then ret.id = pid ret.check = getPlayerStorageValue(pid, conds[ret.cond]) doCondition2(ret) end por: if ret and ret.cond then if type(ret.cond) == "table" then for i = 1, #ret.cond do ret.id = pid ret.check = getPlayerStorageValue(pid, conds[ret.cond[i]]) doCondition2(ret) end else ret.id = pid ret.check = getPlayerStorageValue(pid, conds[ret.cond]) doCondition2(ret) end end Depois, troque: if ret.cond and ret.cond == "Miss" then doMiss2(ret.id, ret.cd, ret.eff, ret.check, ret.spell) elseif ret.cond and ret.cond == "Silence" then doSilence2(ret.id, ret.cd, ret.eff, ret.check) elseif ret.cond and ret.cond == "Slow" then doSlow2(ret.id, ret.cd, ret.eff, ret.check, ret.first) elseif ret.cond and ret.cond == "Confusion" then doConfusion2(ret.id, ret.cd, ret.check) elseif ret.cond and ret.cond == "Burn" then doBurn2(ret.id, ret.cd, ret.check, ret.damage) elseif ret.cond and ret.cond == "Poison" then doPoison2(ret.id, ret.cd, ret.check, ret.damage) elseif ret.cond and ret.cond == "Fear" then doFear2(ret.id, ret.cd, ret.check, ret.skill) elseif ret.cond and ret.cond == "Stun" then doStun2(ret.id, ret.cd, ret.eff, ret.check, ret.spell) elseif ret.cond and ret.cond == "Paralyze" then doParalyze2(ret.id, ret.cd, ret.eff, ret.check, ret.first) elseif ret.cond and ret.cond == "Sleep" then doSleep2(ret.id, ret.cd, ret.check, ret.first) elseif ret.cond and ret.cond == "Leech" then doLeech2(ret.id, ret.attacker, ret.cd, ret.check, ret.damage) end por: if type(ret.cond) == "table" then for i = 1, #ret.cond do if ret.cond[i] and ret.cond[i] == "Miss" then doMiss2(ret.id, ret.cd, ret.eff, ret.check, ret.spell) elseif ret.cond[i] and ret.cond[i] == "Silence" then doSilence2(ret.id, ret.cd, ret.eff, ret.check) elseif ret.cond[i] and ret.cond[i] == "Slow" then doSlow2(ret.id, ret.cd, ret.eff, ret.check, ret.first) elseif ret.cond[i] and ret.cond[i] == "Confusion" then doConfusion2(ret.id, ret.cd, ret.check) elseif ret.cond[i] and ret.cond[i] == "Burn" then doBurn2(ret.id, ret.cd, ret.check, ret.damage) elseif ret.cond[i] and ret.cond[i] == "Poison" then doPoison2(ret.id, ret.cd, ret.check, ret.damage) elseif ret.cond[i] and ret.cond[i] == "Fear" then doFear2(ret.id, ret.cd, ret.check, ret.skill) elseif ret.cond[i] and ret.cond[i] == "Stun" then doStun2(ret.id, ret.cd, ret.eff, ret.check, ret.spell) elseif ret.cond[i] and ret.cond[i] == "Paralyze" then doParalyze2(ret.id, ret.cd, ret.eff, ret.check, ret.first) elseif ret.cond[i] and ret.cond[i] == "Sleep" then doSleep2(ret.id, ret.cd, ret.check, ret.first) elseif ret.cond[i] and ret.cond[i] == "Leech" then doLeech2(ret.id, ret.attacker, ret.cd, ret.check, ret.damage) end end else if ret.cond and ret.cond == "Miss" then doMiss2(ret.id, ret.cd, ret.eff, ret.check, ret.spell) elseif ret.cond and ret.cond == "Silence" then doSilence2(ret.id, ret.cd, ret.eff, ret.check) elseif ret.cond and ret.cond == "Slow" then doSlow2(ret.id, ret.cd, ret.eff, ret.check, ret.first) elseif ret.cond and ret.cond == "Confusion" then doConfusion2(ret.id, ret.cd, ret.check) elseif ret.cond and ret.cond == "Burn" then doBurn2(ret.id, ret.cd, ret.check, ret.damage) elseif ret.cond and ret.cond == "Poison" then doPoison2(ret.id, ret.cd, ret.check, ret.damage) elseif ret.cond and ret.cond == "Fear" then doFear2(ret.id, ret.cd, ret.check, ret.skill) elseif ret.cond and ret.cond == "Stun" then doStun2(ret.id, ret.cd, ret.eff, ret.check, ret.spell) elseif ret.cond and ret.cond == "Paralyze" then doParalyze2(ret.id, ret.cd, ret.eff, ret.check, ret.first) elseif ret.cond and ret.cond == "Sleep" then doSleep2(ret.id, ret.cd, ret.check, ret.first) elseif ret.cond and ret.cond == "Leech" then doLeech2(ret.id, ret.attacker, ret.cd, ret.check, ret.damage) end end Depois, em data/talkactions/scripts, move1.lua: Abaixo de: if isSleeping(mypoke) or isSilence(mypoke) then --alterado v1.5 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode fazer isso agora.") return 0 else newid = setCD(getPlayerSlotItem(cid, 8).uid, cdzin, move.cd) end coloque: if getPlayerStorageValue(mypoke, 93828) > os.time() then return doPlayerSendCancel(cid, "Your pokemon can't use moves right now.") end Outra hora escrevo o código do Unown Help e Unown Rush (vou sair daqui a pouco). Perguntas: Há uma quantia mínima de Unowns para usar o Unown Rush? O dano de tal spell aumenta de acordo com o número de Unowns summonados? Seria bem legal isso (ex.: cada Unown aumenta o dano da spell em 5%).2 pontos -
Introdução Este script consiste em aumentar uma porcentagem dos ataques de acordo com o critical level. Exemplo: Suponhamos que o player tenha Critical Skill 100 e a porcentagem de ataque esteja configurado para aumentar 50%, o player terá 30% de chance de au 50% dos ataques. Instalação O conteúdo da lib serve para o Critical e Dodge System, se você já fez este procedimento no outro script simplesmente ignore e vá para o próximo passo. Em data/lib/core/core.lua adicione o seguinte conteúdo em qualquer parte: dofile('data/lib/core/dclib.lua')Ainda em data/lib/core/core crie um arquivo chamado dclib.lua com o seguinte conteúdo: Agora em data/actions/actions.xml adicione a seguinte tag: <action itemid="18415" script="other/critical.lua"/>Depois em data/actions/scripts/other crie um arquivo chamado critical.lua com o seguinte conteúdo: Pronto, já configuramos o item para atribuir o Critical Skill, vamos configurar a parte dos ataques. Vá em data/creaturescripts/creaturescripts.xml e adicione a seguinte tag: <event type="healthchange" name="CriticalSystem" script="criticalSystem.lua"/>Agora em data/creaturescripts/scripts crie um arquivo chamado criticalSystem.lua com o seguinte conteúdo: Ainda em data/creaturescripts/scripts abra o arquivo login.lua e Antes de: return trueAdicione: player:registerEvent("CriticalSystem") -- Critical System if player:getCriticalLevel() == -1 then player:setCriticalLevel(0) endO sistema está finalizado, agora vamos criar as talkactions para que os players acompanhem seu skill. Em data/talkactions/talkactions.xml adicione a tag: <talkaction words="!critical" script="critical.lua"/>E para finalizar, em data/talkactions/scripts crie um arquivo chamado critical.lua com o seguinte conteúdo: Bom é isso ai! Créditos:1 ponto
-
[ZNOTE ACC] PagSeguro automático
RHCP reagiu a VictorWEBMaster por um tópico no fórum
Fala XTibianos! Muitas pessoas me encheram o saco pediram o sistema pagseguro para znote 100% funcional. Ai está, basta jogar o retpagseguro na pasta principal e integrar o forumulário nas paginas. Dou suporte no topico, basta informar corretamente o erro. RetPagseguro.php #Formulário <form target="pagseguro" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml"> <input type="hidden" name="email_cobranca" value="EMAIL PAGSEGURO"> <input type="hidden" name="tipo" value="CP"> <input type="hidden" name="moeda" value="BRL"> <input type="hidden" name="item_id_1" value="1"> <input type="hidden" name="item_descr_1" value="Premium Points"> <input type="hidden" name="item_frete_1" value="0"> <input type="hidden" name="item_quant_1" value="1"> <input type="hidden" name="item_peso_1" value="0"> <input type="hidden" name="ref_transacao" value="<?php echo $user_data['id']; ?>"> <select name="item_valor_1"> <option value="1000">10</option> <option value="2000">20</option> <option value="3000">30</option> <option value="5000">50</option> <option value="10000">100</option> <option value="15000">150</option> <option value="20000">200</option> <option value="25000">250</option> <option value="50000">500</option> </select> <input type="submit" value="comprar" /> </form>1 ponto -
1 ponto
-
Arena System Inovador
RigBy reagiu a JeanCristian por um tópico no fórum
bom enquanto vcs estao tentando me ajudar com isso, eu estou fazendo algumas coisas que estao faltando aki, nao precisa ter pressa, nao quero atrapalhar ninguem, e zipter, vc é o "Cara" vey kkk estou no aguardo mt obrigado RigBy por nao desistir de mim up1 ponto -
Monster ritar de acordo com o level do player
AdilsonHacker reagiu a RigBy por uma questão
/\ pronto editei o post ai agora ele ta atacando a cada 1 segundo(configurado), e o dano é pelo level. obs: não repita o level e math.huge que dizer infinito #não tinha visto o post, ta jaja eu posto com o efeito pronto local dps = 1 -- dano por segundo local a = { {levelMin = 0, levelMax = 10, danoMin = 1 , danoMax = 3}, {levelMin = 11, levelMax = 20, danoMin = 4 , danoMax = 7}, {levelMin = 21, levelMax = math.huge, danoMin = 20 , danoMax = 40} } function onAttack(cid, target) for _, b in pairs(a) do if getPlayerLevel(target) >= b.levelMin and getPlayerLevel(target) <= b.levelMax then if getPlayerStorageValue(cid, 8374239743824793874) < os.time() then doSendDistanceShoot(getThingPos(cid), getThingPos(target), CONST_ANI_SPEAR) doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -b.danoMin, -b.danoMax, CONST_ME_BLOCKHIT) setPlayerStorageValue(cid, 8374239743824793874, os.time() + dps) end end end return true end1 ponto -
So coloquei nome, level, health e mana caso você queria outro é so fala function onUse(cid, item, fromPosition, itemEx, toPosition) local t = {} for i = 0, getPlayerInstantSpellCount(cid) - 1 do local spell = getPlayerInstantSpellInfo(cid, i) if(spell.level ~= 0) then if(spell.manapercent > 0) then spell.mana = spell.manapercent .. "%" end table.insert(t, spell) end end table.sort(t, function(a, b) return a.level < b.level end) local text, prevLevel = "", -1 for i, spell in ipairs(t) do local line = "" if(prevLevel ~= spell.level) then if(i ~= 1) then line = "\n" end line = line .. "Spells for Level " .. spell.level .. "\n" prevLevel = spell.level end text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n" end doShowTextDialog(cid, item.itemid, 'Nome : '..getCreatureName(cid)..' \nLevel : '..getPlayerLevel(cid)..' \nHealth : ['..getCreatureHealth(cid)..'/'..getCreatureMaxHealth(cid)..'] \nMana: ['..getCreatureMana(cid)..'/'..getCreatureMaxMana(cid)..'] \n \n'..text..'') -- é aqui onde adiciona mais return true end1 ponto
-
Monster ritar de acordo com o level do player
AdilsonHacker reagiu a RigBy por uma questão
ps: não testei mas acho que ta funcionando de boa .lua local config = { [10] = {danoMin = 1, danoMax = 10}, -- [level] = {dano minimo, dano maximo}, [20] = {danoMin = 10, danoMax = 20}, [30] = {danoMin = 30, danoMax = 40}, [200] = {danoMin = 40, danoMax = 50}, } function onAttack(cid, target) for level, dpl in pairs(config) do if getPlayerLevel(target) >= level then doTargetCombatHealth(cid, target, COMBAT_LIFEDRAIN, -dpl.danoMin, -dpl.danoMax, CONST_ME_BLOCKHIT) end end return true end .xml <event type="attack" name="mobAttack" event="script" value="nomedoscript.lua"/> e registre no mob que vai ataca <script> <event name="mobAttack"/> </script>1 ponto -
@@raynerjr Tente assim: local config = { lottery_hour = "3 Hours", -- Time to next lottery (real time you set on globalevents.xml, its only for broadcast message.) rewards_id = {2494, 2472, 2514, 2493, 2470, 2195, 2173, 2160, 2520}, -- Rewards ID crystal_counts = 100, -- used only if on rewards_id you have crystal coins (ID: 2160). website = "yes" -- Do you have `lottery` table in your database? } function onThink(interval, lastExecution) local players = getPlayersOnline() if #players > 0 then local list = {} for i, tid in ipairs(players) do list[i] = tid end local winner = list[math.random(1, #list)] local random_item = config.rewards_id[math.random(1, #config.rewards_id)] local item_name = getItemNameById(random_item) local world = tonumber(getPlayerWorldId(winner)) if(random_item == 2160) then doPlayerAddItem(winner, random_item, config.crystal_counts) doBroadcastMessage('[Baiak Rock Lottery] Winner: '.. getCreatureName(winner) ..', Reward: '.. config.crystal_counts ..' '.. item_name ..'s! Congratulations! (Next Lottery in '.. config.lottery_hour ..')') else doBroadcastMessage('[Baiak Rock Lottery] Winner: '.. getCreatureName(winner) ..', Reward: '.. item_name ..'! Congratulations! (Next Lottery in '.. config.lottery_hour ..')') doPlayerAddItem(winner, random_item, 1) end if(config.website == "yes") then db.query("INSERT INTO `lottery` (`name`, `item`, `world_id`) VALUES ('".. getCreatureName(winner) .."', '".. item_name .."', '".. world .."');") end end return true end1 ponto
-
Feito: Tópico movido para a seção de dúvidas e pedidos resolvidos.1 ponto
-
Compensações estão por vir!
moskitinho reagiu a Piabeta Kun por um tópico no fórum
Hoje a cip soft informou que haverá em breve compensação pelos problemas de login nas ultimas semanas, mais não informou que tipo de compensação será posta em vigor, fiquem ligados nas novidades que estão por vir! Fonte: tibia.com "We would like to inform you that there will be a compensation for the connection problems of the last weeks. More information on how exactly we will compensate you will be available on our website soon. Thank you for your patience."1 ponto -
Templo/Depot Baiak
Marco Oliveira reagiu a Flavio Hunter por um tópico no fórum
Nossa muito bom! Quero pra mim por na minha city vip rsrsrs1 ponto -
Erro no mapa Parte de Treiner e ZAO
felipinkoak reagiu a Bicoco123 por uma questão
pow galera alguem sabe oque pode ser porque quase toda zao esta bugada os pisos do treiner, MAS quando eu abro no RME esta tudo normal ??? Postei 3 print pra vcs teram a nocao mas é quase a parte de zao inteira.. https://imageshack.us/i/eyKYpssfp https://imageshack.us/i/eyi8HIY5p http://imageshack.com/a/img540/7460/XIIHkm.png1 ponto -
Mega Evolution System (PxG)
Fuuin Fake reagiu a Gabrieltxu por um tópico no fórum
auheuahe Boa barcia , deixei meu rep ai para contribuir :v1 ponto -
Arena System Inovador
JeanCristian reagiu a zipter98 por um tópico no fórum
Sobre o player atacar um NPC, suponho ser bem difícil tornar isso possível. Já sobre um monstro atacar outro, não acho que seja tão complicado como o caso acima. Entretanto, preciso ler os códigos das sources responsáveis por isso e tentar (ênfase neste tentar) encontrar uma solução.1 ponto -
[Gesior AAC] Who is online, Comoro corrigir em TFS 1.0
Administrador reagiu a Mudrock por um tópico no fórum
Antes, quero explicar oque foi feito. Nas tfs 1.0 não tem a tabela " online " e sim temos a tabela " players_online " pensando nisso fiz uma simples edição na linha da tag que foi o suficiente para resolver o problema do meu Gesior beta segue o tutorial: Procure seu whoisonline.php Navegue até a linha $q = 'SELECT * FROM players WHERE world_id='.$id.' AND online=1'; Substitua por $q = 'SELECT * FROM players, players_online WHERE players.id = players_online.player_id'; Erro corrigido1 ponto -
História Personagem RPG
Administrador reagiu a moskitinho por um tópico no fórum
Olá manolos, Esse ano me juntei com alguns amigos pra organizar um RPG aos moldes antigos. E criei uma breve história para meu personagem, sei que existem vários erros ortográficos, mas estou sempre tentando corrigi-los. Espero que leiam e vou postando as vezes aqui na sessão. Vai que uma hora conseguimos criar um interpretativo por aqui. Varis Tsuyoidesu Varis nasceu nas grandes florestas do sul, cercado por sua família de elfos. Desde pequeno o jovem apontava grandes tendências à magia, assim como seu pai e seu avô. Quando atingiu a idade necessária, ingressou na escola de magia e só realçou as características que todos já observavam no jovem elfo, foi treinado por cerca de quinze anos até atingir os níveis requisitados para escolher seu papel na família. Sempre muito inteligente e agil, desenvolveu pesquisas nos campos elementais e descobriu ter grande domínio sobre a manipulação do ar, além de sua agilidade diferenciada para um mago. Hoje em dia mesmo sendo um elfo jovem de 46 anos. Varis é muito respeitado em sua cidade natal, esbelto e com longos cabelos brancos azulados, seus olhos verdes como zafiras não escondem a bondade e lealdade por trás desta grande promessa na terra dos elfos. Sua envergadura de 1.72 metros é imponente dentre sua raça o que naturalmente lhe garante destaque em meio às multidões, sem contar a beleza exuberante e natural herdada pelos elfos. De personalidade forte e ao mesmo tempo paciente e tranquilo ao resolver seus problemas, aguarda o momento em que poderá deixar suas terras e partir rumo à exploração do mundo a sua volta, liberação dada aos elfos quando atingem a idade de 100 anos e são considerados adultos. Mas algo diz que a história de Varis será diferente das outras, assim como até aqui vem se destacando, não seria surpresa o jovem que escolheu como sua ocupação o ensino da magia, saísse desvendar suas infinitas duvidas e pesquisas que necessitava fazer para seu desenvolvimento como o maior elementalista da terra dos elfos, titulo que almeja com toda sua alma. por, Felipe Lotz. Cópia ou reprodução NÃO é autorizada.1 ponto -
Arena System Inovador
JeanCristian reagiu a RigBy por um tópico no fórum
Tipo, primeiro eu pensei em fazer por npc, eu até conseguir fazer com npc, para que ele ataca-se o time inimigo é o minion do outro time so que ele não tirava dano do outro npc, apenas do player, e também não conseguir arranja nenhuma maneira do player ataca o npc (não intendo nada de C++). e com monstro não faço a minima ideia, to esperando o zipter ou alguém vim com alguma ideia de como fazer um monstro ataca outro, sei que isso é possível.1 ponto -
1 ponto
-
Copiar uma spell como este Unown Rush, ou seja, uma spell cheia de mínimos detalhes, é algo bem chato. Demorei um bom tempo vendo e revendo o vídeo, tentando chegar num resultado semelhante dos intervalos de tempo entre as ações. Caso o resultado não lhe agrade, recomendo alterar as variáveis responsáveis pela manipulação do tempo, juntamente das áreas de dano e efeito. Todas as 3 spells que postei neste tópico foram testadas e estão funcionando perfeitamente. Primeiramente, em pokemon moves.lua: elseif spell == "Unown Help" then local config = { summonPoke = "Unown", health = 5, --% de HP (baseada na HP máxima do pokémon) tirada do Unown Legion. } if isSummon(cid) then local pid = getCreatureMaster(cid) doSummonMonster(pid, config.summonPoke) local newPoke = getCreatureSummons(pid)[#getCreatureSummons(pid)] setPlayerStorageValue(newPoke, 1001, pokes[getCreatureName(newPoke)].offense * getPlayerLevel(pid)) setPlayerStorageValue(newPoke, 1002, pokes[getCreatureName(newPoke)].defense) setPlayerStorageValue(newPoke, 1003, pokes[getCreatureName(newPoke)].agility) setPlayerStorageValue(newPoke, 1004, pokes[getCreatureName(newPoke)].vitality * getPlayerLevel(pid)) setPlayerStorageValue(newPoke, 1005, pokes[getCreatureName(newPoke)].specialattack * getPlayerLevel(pid)) setCreatureMaxHealth(newPoke, getVitality(newPoke) * HPperVITsummon) doCreatureAddHealth(newPoke, getCreatureMaxHealth(newPoke)) doCreatureAddHealth(cid, -getCreatureMaxHealth(cid) * (config.health / 100)) end elseif spell == "Unown Rush" then local config = { distEffect = xxx, --Distance effect. effect = xxx, --Efeito de invisibilidade. barrierEffect = xxx, --Effect do Barrier. barrierTime = 8, --Duração do Barrier, em segundos. barrierInterval = 500, --Intervalo de tempo, em milésimos de segundo, entre cada efeito do Barrier. times = 4, --Quantas vezes a spell em área será "lançada" (também quantas vezes o efeito será "rebatido" entre Unown Legion e os Unowns). interval = 400, --Intervalo de tempo entre as "rebatidas", em milésimos de segundo. intervalAOE = 200, --Intervalo de tempo entre os "lances" da spell em área. combat = ghostDmg, --Elemento da spell. } function barrierEffect(cid, time) if isCreature(cid) then if time < 0 then return true end doSendMagicEffect({x = getThingPos(cid).x + 1, y = getThingPos(cid).y + 1, z = getThingPos(cid).z}, config.barrierEffect) addEvent(barrierEffect, config.barrierInterval, cid, time - 1) end end local summons, t = getCreatureSummons(getCreatureMaster(cid)), {} doDisapear(cid) doSendMagicEffect(getThingPos(cid), config.effect) for i = 1, config.times do for j = 2, #summons do if isCreature(summons[j]) and isCreature(cid) then t[#t + 1] = summons[j] addEvent(function() doSendDistanceShoot(getThingPos(cid), getThingPos(summons[j]), config.distEffect) addEvent(function() doSendDistanceShoot(getThingPos(summons[j]), getThingPos(cid), config.distEffect) end, 100) end, i * config.interval + 100) end end end addEvent(function() barrierEffect(cid, math.floor(config.barrierTime * 1000 / config.barrierInterval)) if isCreature(cid) then for i = 1, #t do if isCreature(t[i]) then doRemoveCreature(t[i]) end end for i = 1, config.times do addEvent(function() if isCreature(cid) then local area = getPosfromArea(cid, rushAreaEffect) for j = 1, #area do doSendDistanceShoot(getThingPos(cid), area[j], config.distEffect) end doDanoWithProtect(cid, config.combat, getThingPos(cid), rushAreaDamage, -min, -max, 0) if i == config.times then doAppear(cid) setPlayerStorageValue(cid, 9658783, 1) addEvent(function() if isCreature(cid) then setPlayerStorageValue(cid, 9658783, -1) end end, config.barrierTime * 1000 - (config.times * (config.interval + config.intervalAOE))) end end end, i * config.intervalAOE) end end end, config.times * config.interval + 100 * config.times) Em areas.lua: rushAreaEffect = { --Área do Unown Rush de efeito (até onde o efeito vai, a partir do usuário da spell). {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, } rushAreaDamage = createCombatArea{ --Área do Unown Rush de dano. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 3, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } Depois, em data/actions/scripts, goback.lua: Acima de: local cd = getCD(item.uid, "blink", 30) coloque: if #getCreatureSummons(cid) > 1 then for _, s in pairs(getCreatureSummons(cid)) do if getCreatureName(s) == "Unown" then doRemoveCreature(s) end end end Depois, em data/talkactions/scripts, move1.lua: Abaixo de: if getPlayerStorageValue(mypoke, 93828) > os.time() then return doPlayerSendCancel(cid, "Your pokemon can't use moves right now.") end coloque: local unownCount = 7 --Quantidade de Unowns máxima/quantidade de Unowns para usar o Unown Rush. if move.name == "Unown Help" then if #getCreatureSummons(cid) >= unownCount + 1 then return doPlayerSendCancel(cid, "You already have "..unownCount.." Unowns helping you.") end elseif move.name == "Unown Rush" then if #getCreatureSummons(cid) < unownCount + 1 then return doPlayerSendCancel(cid, "You need "..unownCount.." Unowns helping you to use this spell.") end end1 ponto
-
Resolvendo o ERRO 0xc000007b
Julibazzi reagiu a curruwilliam por um tópico no fórum
Fala seus frango, para aqueles que não consegue resolver o erro 0xc000007b o papai aqui vai-lhe mostrar como. O erro 0xc000007b é um código de erro de aplicação no Windows que aparece quando um programa falha na execução. Isso é geralmente encontrado quando uma aplicação tenta abrir em um computador que está sem alguns componentes ou arquivos de execução. A maioria das pessoas tende a ficar frustrada quando esse problema acontece e removem o programa que falhou ou formatam o computador. Mas esse erro é muito simples de ser resolvido, com apenas alguns passos. Baixe uma aplicação chamada AIO 210. Essa é uma aplicação de terceiros que instala arquivos básicos de execução necessários para abrir um programa. O Erro 0xc000007b é geralmente causado por falta de arquivos de execução em seu PC. Alguns desses arquivos são instalados no seu computador junto com o sistema operacional, mas às vezes são excluídos quando se removem vários programas do seu PC. Download AIO 210 Caso queira passo a passo acesse aqui. Esse programa vai resolver o problema, foi o único que resolveu aqui depois de instalar uma porrada de programas da microsoft e baixar dlls. Resolveu ??? Rep+1 ponto -
Isso acontece aqui também, quando copio uma parte muito grande. Pra resolver so ir copiando e colando em outro mapa aos poucos1 ponto
-
[NextWorld] ShowOff
GustavoCastilho reagiu a Hudsonlemos por um tópico no fórum
Gostei cara, eu também estou trabalhando em um mapa próprio e já postarei imagens.1 ponto -
Função De Cada Menbro Em Uma Equipe
XxHenriquexX reagiu a dudu2530 por um tópico no fórum
Bom galera n sei direito se e na area de tutorial mais to aqui pra postar um poko de cada coisa que uma equipe de ot serv deve ter!! • O Que é meu cargo no mundo do OTServ. • O Que eu devo saber para continuar no meu cargo. • O Que devo fazer para aprender mais sobre meu cargo. • E por fim, Porque este cargo é requisitado. • Mapper Mapper é um dos cargos, mas importantes de uma grande e futura equipe de OTserv, pois com eles, se podem criar um MUNDO, criar um mapa cheio de pontos misteriosos, ação, aventura. SpriterQualquer um pode ser dizer que é um Mapper, porem um verdadeiro Mapper é aquele que tem uma criatividade em si criando coisas inéditas, montanhas, cavernas e muito mais, mas isso qualquer um cria, só que o MAPPER tem sua criatividade, é muito interessante quando um player encontra um lugar desconhecido pois aí está o RPG. Para se aprender mas sobre Mapping, é recomendável sempre INOVAR, baixar mapas de terceiros é bom, não copiar mas sim ter idéias, pois as vezes até os Mappers “profissionais” empacam em idéias. Mappers são bastante requisitados para uma equipe, como disse no começo os Mappers são os que inventam o MUNDO do Servidor, criando fatos inéditos, quests surpresas, podemos até dizer que se não existe-se um Editor de Mapa, o OTserv, não seria como é hoje. • Scripter Scripter muito procurado por Equipes diversas de OTserv, pois os Scripters, fabricam ou editam actions, e as partes relacionadas a área de Scripts, muito necessário para um OT “Perfeito”. Diferentemente dos Mappers, aprender a ser um Scripter não é muito fácil, pois qualquer erro em quaisquer script pode causa um BUG no Jogo, ou então atrapalhar o script mudando de efeitos, pois quaisquer Sinal, em lugares errados, causa aqueles erros no DOS de carregação, Muitos confundem Scripters com Action Maker, um Action Maker cuida simplesmente das Actions, e um Scripter, faz / edita: Actions, NPCS, Monstros, Spells e derivados (Quase tudo da pasta "data/" de um OtServ). Para se manter informado sobre os Scripters, é sempre bom verificar as atualizações de Scripts, Monstros, pois um Scripter, que cria suas spells personalizadas, nada extravagante tem uma grande chance de está em uma equipe e seguir feliz. Scripters são requisitados para uma Equipe pois um motivo lógico, quem não gostaria de um Servidor, com as magias, monstros novos, nada Muito Forte, e sim Equilibrado. • spriter Spriter podemos dizer que não é muito utilizado em uma equipe, porem é muito bom para uma equipe. Para ser um bom Spriter, é recomendável saber desenhar [A MÃO], só que o Mundo já está tão globalizados que os grandes desenhistas, estão perdendo seus cargos para Desenhistas gráficos, os que utilizam programas como, Fireworks, Photoshop e etc. Para aprender um pouco mas sobre Spriter, é se inspirar em itens de outros jogos, como itens incríveis, espadas bonitas, caprichadas... Os Spriters não são muitos requisitados para uma Equipe, bom um único fato, existem aquelas pessoas que tem preguiça de baixar o arquivo.SPR, pois pesa 7MB+, Mas já estão existindo servidores, com AUTO-Patch [Não Confirmado], com isso, sô baixar o cliente, e sempre que o SPR for atualizado será ativada na pasta, A idéia do Auto-Patcher pode está próxima, pois usar sistema de outros jogos para servir como FTP Client. • Hoster Hosters são membros de Equipes que hosteiam os servidores em seus computadores. Hosters são bastantes úteis para um inicio de servidor, pois um fato de um servidor “Dar” certo ou não, depende da quantidade de players que vem popularizar... Se existir uma grande quantidade de Players, um computador de uma pessoa comum [HOME], não irá servir muito, pois acarretara em LAGS, e Possíveis Erros. Como já disse, o Mundo cada vez vem se atualizando, e servidores que estão crescendo estão trocando seus supostos Hosters, por “Dedicadas”, Dedicadas é um Computador podemos dizer, Potente, hosteado por algum tipo de Empresa, trazendo maior confiabilidade deixando seu servidor 24/7 Monitorado, Só que nem tudo no mundo é fácil... E dependendo do Hoster, os preços não são acessíveis, Porem outros fazem um preço “camarada”. • Webmaster / Designers < EM OTSERV > Os webmasters e designers são um dos mais importantes em uma equipe, pois o cargo tem como produzir o Website da sua equipe. Para ser um grande Webmaster e Designers, é importante ter criatividade pois quando um jogador acessa um site, ali é sua primeira visão, um site bem produzido e criativo, já começa com uma boa visão do servidor. Para aprender mas sobre o assunto, È sempre bom verificar códigos fontes, mas copiar nunca, se copiar poste créditos, verificar código fonte é bom para aprender novos scripts. Lembrando que um Webdesigner iniciante se baseia em HTML / PHP, e os avançados, ja partem para JAVA e muito mais! Está área é bastante requisitada pois, é bom começar um servidor com uma boa visão um site, criado caprichado e criativo, começa o servidor com um Ponto a Mais. • Programmer Programmer, tambem bastantes requisitados igual aos Mappers, pois com ele se pode adicionar sistema extras em seus OTs, exemplo: Folow System, Neve e muito mais... Para seguir como um ótimo programador tem que está sempre ligado nas “novas”, os códigos novos, os sistemas e muito mais... Para aprender mas sobre o assunto é bom está ligado como disse antes nas novidades, Os programadores fazem seus maravilhosos serviços no .EXE do Servidor, e lá o que predomina é a Linguagem C++, mas nao se assuste, se você não sabe C++, pois outras linguagens existem... Outro tipo de Programador, é os que "fabricam" os utilitarios muito utilizado por todos, a linguagem que predomina nessa área, não só uma, e sim varias, tais como: Visual Basic, Delphi e C++... Os Programadores são bastantes requisitados, pois desenvolvem códigos para o OTserv, compilam os OTs, fazendo o seu próprio OT, bastante personalizado. E isso espero ter ajudado!!! Desculpe se ouvi algum erros fiz com todo e maior esforço1 ponto