Ir para conteúdo

brun123

Conde
  • Total de itens

    512
  • Registro em

  • Última visita

  • Dias Ganhos

    16

Tudo que brun123 postou

  1. não te ofendi nenhuma vez, pelo menos não ao meu ver... enfim vê se o backupPos existe no seu mapa, não adianta nada ter ele declarado se não tiver ele no mapa outra coisa é ver se os arrays "teste1", "teste2" etc existem mesmo, se forem nil não vai acontecer nada mesmo experimenta mudar essa linha: local newMonster = doCreateMonster(monsterName, backupPos, false) para essa: local newMonster = doCreateMonster(monsterName, backupPos, true) assim vai aparecer erros no console e vai dar pra saber o que tá acontecendo
  2. Não tinha testado, mas acabei de testar e deu tudo certo... se você tá usndo a de criar monstro, certifique-se de que a variável "backupPos" foi declarada em configuration.lua e pelo amor de Deus, não me diga que você deixou a variável monsterName declarada como "Monster"... local monsterName = "Monster" você tem que alterar essa parte pro nome do monstro que vai ser criado como efeito
  3. é porque você está colocando no meio do script o elseif, e eu fechei esse mesmo elseif, mas no script ainda tem vários outros elseifs (pros outros golpes) você tem quer ir no final do script, e vai encontrar isso: end return true end você tira esse end que está em cima do return true, e cola a sua spell aí, ficando assim: elseif spell == "?" then local monsterName = "Monster" local timeToRemove = 2500 local function damage(cid, area) if not isCreature(cid) then return end doAreaCombatHealth(cid, FIREDAMAGE, getThingPositionWithDebug(cid), area, -min, -max, 255) local positions = arrayToPositions(area, getThingPositionWithDebug(cid)) for _, pos in pairs (positions) do local newMonster = doCreateMonster(monsterName, backupPos, false) if newMonster > 1 then doTeleportThing(newMonster, pos, false) addEvent(function() if isCreature(newMonster) then doRemoveCreature(newMonster) end end, timeToRemove) end end end local areas = {teste1, teste2, teste3, teste4, teste5} for _, area in pairs (areas) do addEvent(damage, 200 * (_ - 1), cid, area) end end return true end ou então faz o que o pessoal falou, tira o último end do script da magia e coloca em qualquer lugar, desde que não seja dentro de outra magia ShotStyle, a primeira script converte um array para uma tabela com posições, é uma função que eu fiz, precisa dela pra fazer itens em área Diley007, você também tem que colocar o nome da sua spell no script, ali onde está elseif spell == "?" then, você tem que escrever o nome da sua spell, assim por exemplo: elseif spell == "Minha Magia" then Se você deixar o ?, aquilo só vai ser executado se você usar algum move que tenha o nome de "?"
  4. Script: Não testado Precisa adicionar a tag em creaturescripts.xml e registrar o evento no player em login.lua Se você souber inglês, escreva seu pedido tanto em português quanto em inglês, aumenta a chance de alguém entender o que você quer
  5. lib necessária (você pode adicionar no início do script, ou então criar um outro arquivo .lua com qualquer nome em data/lib e colocar isso dentro): function newXYvar(x, y, voltas_horarias) while voltas_horarias > 3 do voltas_horarias = voltas_horarias - 4 end if voltas_horarias <= 0 then return x, y elseif voltas_horarias == 1 then return -y, x elseif voltas_horarias == 2 then return -x, -y elseif voltas_horarias == 3 then return y, -x end return 0, 0 end function arrayToPositions(array, center, n_horario) if not center or not center.x or not center.y or not center.z then return {} end local voltas, mp, ret, iIs, x, y = n_horario and math.max(0, n_horario) or 0, {}, {}, {}, 1, 1 if voltas > 0 then local maxC = 0 for lines = 1, #array do if maxC < #array[lines] then maxC = #array[lines] end end if maxC < #array then maxC = #array end for a = 1, maxC do iIs[a] = {} for b = 1, maxC do table.insert(iIs[a], 0) end end end while #mp == 0 do local check = array[y][x] if check > 1 then mp = {x, y} if voltas > 0 then iIs[y][x] = check end if check == 3 then table.insert(ret, center) end break end x = x + 1 if x > #array[y] then y, x = y + 1, 1 if y > #array then break end end end for ly, ny in pairs (array) do for lx, nx in pairs (ny) do if nx == 1 then local dx, dy = lx - mp[1], ly - mp[2] local newX, newY = newXYvar(dx, dy, voltas) local newPos = {x = center.x + newX, y = center.y + newY, z = center.z} table.insert(ret, newPos) end end end return ret end magia criano item: elseif spell == "?" then local itemId = 1990 local timeToRemove = 2500 local function damage(cid, area) if not isCreature(cid) then return end doAreaCombatHealth(cid, FIREDAMAGE, getThingPositionWithDebug(cid), area, -min, -max, 255) local positions = arrayToPositions(area, getThingPositionWithDebug(cid)) for _, pos in pairs (positions) do doCreateItem(itemId, 1, pos) addEvent(function() local i = getTileItemById(pos, itemId) if i.uid > 0 then doRemoveItem(i.uid) end end, timeToRemove) end end local areas = {teste1, teste2, teste3, teste4, teste5} for _, area in pairs (areas) do addEvent(damage, 200 * (_ - 1), cid, area) end end magia criando monstro (precisa ter o "backupPos" configurado): elseif spell == "?" then local monsterName = "Monster" local timeToRemove = 2500 local function damage(cid, area) if not isCreature(cid) then return end doAreaCombatHealth(cid, FIREDAMAGE, getThingPositionWithDebug(cid), area, -min, -max, 255) local positions = arrayToPositions(area, getThingPositionWithDebug(cid)) for _, pos in pairs (positions) do local newMonster = doCreateMonster(monsterName, backupPos, false) if newMonster > 1 then doTeleportThing(newMonster, pos, false) addEvent(function() if isCreature(newMonster) then doRemoveCreature(newMonster) end end, timeToRemove) end end end local areas = {teste1, teste2, teste3, teste4, teste5} for _, area in pairs (areas) do addEvent(damage, 200 * (_ - 1), cid, area) end end
  6. claro que tem como fazer um monstro/item ser utilizado como efeito, diga exatamente o que você quer fazer, se é item ou monstro, pois os 2 são diferentes
  7. basta adicionar return true no function onDeath, antes do último end dessa função, aqui: function onDeath(cid, corpse, killer) registerCreatureEvent(cid, "inquisitionPortals") local creaturename = getCreatureName(cid) local ushuriel_in_position = {x=342, y=765, z=12, stackpos=2} local ushuriel_to_position = {x=268, y=973, z=13, stackpos=1} local time_to_pass = 180 local tpID = 5023 local doEffect = CONST_ME_ENERGYHIT local message = "You now have 3 minutes to exit this room through the teleporter. It will bring you to the next room only during his time or the teleporter will disappear." if creaturename == 'Ushuriel' then teleport = doCreateTeleport(tpID, ushuriel_to_position, ushuriel_in_position) doSendMagicEffect(ushuriel_in_position, CONST_ME_ENERGYHIT) doCreatureSay(cid, message, TALKTYPE_ORANGE_1) addEvent(removeTeleportInUshurielWard, (1000*time_to_pass)) end return true end function removeTeleportInUshurielWard() if getThingfromPos({x=342, y=765, z=12, stackpos=1}).itemid == 5023 then doRemoveItem(getThingfromPos({x=342, y=765, z=12, stackpos=1}).uid,1) doSendMagicEffect({x=342, y=765, z=12, stackpos=1}, CONST_ME_POFF) return TRUE end end
  8. na verdade tem que ir em lib/moves e lib/pokemon moves.lua e alterar o nome também... Ai depois tem que abrir a spell do solar beam (data/spells/ps/Solar Beam.lua) e mudar na função docastspell(cid, "Solar Beam") para docastspell(cid, "Raio Solar")
  9. eu achei engraçado você colocar um ícone da Lua já que a linguagem de scripting que os servers usam é lua kkkkkkk agora sério, ficou nada a ver uma lua pra scripters, coloca um papelzinho como a do programador, só que sem os nºs binários, pode escrever um códigozinho em lua ou só escrever ".lua" mesmo, como está na pic atual dos scripters
  10. a script que o Overloker postou está dando, porque a função setCombatCallback foi escrito errado, na script está "setCombatCallBack", enquanto o certo era um b minúsculo. tenta assim amigo: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, 1) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) function onGetFormulaValues(cid, level, magic) if level > 2400 then return 10000, 10000 end local value = level * 3.45 + magic * 20 + 45 return value, value end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Alguns test que eu fiz com essa fórmula: como você disse que a partir do level 2400, o player iria healar 10k, todos os level 2400 para cima, independente de magic level irão healar 10k, se você quis dizer que queria apenas um limite de heal (não ultrapassar 10k para não ficar exagerado), use esse script aqui:
  11. brun123

    Spell

    experimente usar a tag assim: <distance id="2384" event="script" value="script.lua"/> e se não der certo, tente usar a tag de melee
  12. e o terceiro pedido, a talkaction "/all x y z": function onSay(cid, words, param) local pos, edit, canedit = {}, 1, false for letters = 1, #param do local byte = param:sub(letters, letters):byte() if byte >= 48 and byte <= 57 then pos[edit] = (pos[edit] or "") .. param:sub(letters, letters) canedit = true elseif canedit then edit = edit + 1 canedit = false end end if edit < 3 then return doPlayerSendCancel(cid, "Posição não encontrada!") end pos = {x = tonumber(pos[1]), y = tonumber(pos[2]), z = tonumber(pos[3]), stackpos = 0} if not pos.x or not pos.y or not pos.z or getThingFromPos(pos, false).uid <= 1 then return doPlayerSendCancel(cid, "Posição inválida!") end local players = getPlayersOnline() for _, playerdID in pairs (players) do if getPlayerAccess(playerID) == 0 and playerID ~= cid then doTeleportThing(playerID, pos, false) end end doSendMagicEffect(pos, CONST_ME_TELEPORT) return true end
  13. testa assim: local function doPlayerAddLevel(cid, levels) local currentExp, newLevel = getPlayerExperience(cid), getPlayerLevel(cid) + levels local expNeeded = ((50 * newLevel * newLevel * newLevel) - (150 * newLevel * newLevel) + (400 * newLevel)) / 3 doPlayerAddExperience(cid, expNeeded - currentExp) end function onKill(cid, target) --config---------------------------- local addLevels = 5 --end------------------------------- if isPlayer(target) == TRUE then if getPlayerIp(cid) ~= getPlayerIp(target) then doPlayerAddLevel(cid, addLevels) doPlayerAddMoney(cid, 20) doCreatureSetDropLoot(target, false) doSendAnimatedText(getPlayerPosition(cid), "Orgasmic~", 198) else doPlayerAddExperience(cid, -50000) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"You have been punished for killing a player of the same IP.") end end return TRUE end
  14. matemática simples amigo... divide o level do target pelo level do player local target = getCreatureTarget(cid) local targetLevel = getPlayerLevel(target) local comp = targetLevel / getPlayerLevel(cid) if comp >= 2 then -- level do alvo é 2x (ou mais) maior que o meu elseif comp <= 0.5 then -- meu level é 2x (ou mais) maior que o do target end
  15. não deu pra entender direito amigo... você quer o comando feito em c++, e com um parâmetro que determina se vai ou não aparecer efeito?
  16. brun123

    Spell

    amigo... o COMBAT_FORMULA_SKILL calcula a skill envolvendo essas variáveis: ataque da arma utilizada a skill do player que a arma usa (se for uma sword, vai pegar o sword fighting, se for axe será o axe fighting...) o fator de ataque do player (se está no modo full attack, balanced ou full defense) o level do player isso não vai funcionar do jeito que você espera a menos que você coloque no items.xml que a skill que usa na wand é club você pode fazer sua própria fórmula da seguinte maneira: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 5) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, 38) function getMinMaxValues(cid, level, magiclevel) local skill = getPlayerSkillLevel(cid, SKILL_CLUB) local min = skill * 2 + level/2 + magiclevel/4 local max = min * math.random(105, 125) / 100 return min, max end setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getMinMaxValues") function onUseWeapon(cid, var) return doCombat(cid, combat, var) end basta alterar o min/max ali a fórmula que eu escrevi soma os seguintes valores: skill de club do player multiplicado por 2 level do player dividido por 2 magic level do player dividido por 4 um player com club 70, level 40 e magic level 5 vai tirar no mínimo 161, e no máximo 201 com minha fórmula achei muito, mas é apenas um exemplo
  17. brun123

    Spell

    não existe COMBAT_FORMULA_SKILL_CLUB apenas COMBAT_FORMULA_SKILL
  18. yugnaith, a script que você solicitou reparo aparentemente não tem nada de errado... verifique se você colocou a tag corretamente no creaturescripts.xml, e poste aqui todos os erros relacionados a essa script que aparecerem no console
  19. posta o erro então ué é provável que por incompatibilidade de versões, essa script realmente não funcione no seu server vou testar ela aqui num servidor que ela deveria funcionar e já volto aí, arrumei a spell: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) local arr = {{1}, {1}, {1}, {1}, {1}, {1}, {3}} local area = createCombatArea(arr) setCombatArea(combat, area) function onTarget(cid, target) local distance = getDistanceBetween(getThingPos(cid), getThingPos(target)) distance = math.max(1, distance - 3) local min = distance * 300 - math.random(50) local max = min + math.random(getPlayerLevel(cid)) local teleportpos = getPosByDir(getThingPos(cid), getCreatureLookDir(cid), distance) doTeleportThing(target, teleportpos, false) doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -min, -max, 255) end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTarget") function onCastSpell(cid, var) return doCombat(cid, combat, var) end tinha uma letra maiúscula que era pra ser minúscula... por isso o erro testado e funcionou certinho, só ajustar a fórmula como você quiser
  20. brun123

    Duvidasona

    tenta mudar essa linha: <attribute key="preventDrop" value="1" /> por essa: <attribute key="preventdrop" value="1" /> essa letra maiúscula faz diferença
  21. Só modificando a source do seu server amigo... as funções onTarget, onAttack, onCombat e onFollow foram desenvolvidas para serem funcionais com players apenas, com monstros elas não funcionam exatamente como esperado. Pode retornar false em todas elas que o monstro vai sempre seguir o player. O melhor que você pode fazer em lua é fazer um npc que simule um monstro, torna ele atacável e configura no onThink pra ele atacar apenas targets que não tenham a tal storage, e quando morrer (onDeath), irá criar um corpo pra ele, colocar itens gerados pelo próprio script simulando o loot, distruibuir exp. etc...
  22. brun123

    Debug ;-;

    Bom amigo, eu recomendaria você postar algum script para ser analisado. Se você não quiser disponibilizar scripts do seu server, sugiro que você vá comentando linha por linha (adicionar o "--", sem aspas antes da linha) e ir verificando qual linha exatamanete faz o cliente ser fechado. Tornar uma linha um comentário faz com que ela não seja lida, portanto a função que causa debug não vai ser executada e você vai saber exatamente que função está causando o problema.
  23. brun123

    Debug ;-;

    provavelmente você está usando alguma função que faz o player falar (doCreatureSay(uid, text, type)) e declarou o último parâmetro com um número inválido para a função, fazendo o cliente receber o debug. seria fácil identificar o erro se o cliente do tibia fosse open source, bastava ir na linha onde tenta executar o assert e ver o que poderia estar causando o erro, mas como não temos o código fonte do cliente do tibia, a gente precisa de mais evidências do que causa o debug isso acontece quando você usa alguma action, executa alguma talkaction ou rode qualquer script? ou simplesmente dá debug ao andar até algum ponto?
  24. brun123

    Boss+Drop

    Ah sim, testei meu script e já arrumei, aqu está, apenas modificar o floordrop.lua Aí fica a sua vontade qual script usar... no meu basta configurar o loot no XML do monstro, que quando ele morrer todos os itens vão aparecer nos tiles ao redor do monstro acho melhor, já que não precisa ficar configurando o loot de cada monstro no próprio script... se quiser fazer isso com vários monstros, o script vai ficar enorme bom que dá pra configurar pra cair loot dentro de bags e etc, como acontece em muitos monstros no tibia local function doMoveLoot(position, corpseId) local corpse = getTileItemById(position, corpseId) local directions = {NORTH, EAST, SOUTH, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST} local maxLoops = getContainerSize(corpse.uid) * 2 repeat local lootItem = getContainerItem(corpse.uid, 0).uid maxLoops = maxLoops - 1 if lootItem > 1 then local random = math.random(#directions) local newDir = directions[random] table.remove(directions, random) doTeleportThing(lootItem, getPosByDir(position, newDir)) if #directions == 0 then directions = {NORTH, EAST, SOUTH, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST} end else break end until maxLoops <= 0 end function onDeath(monster, corpse, killers) if not isContainer(corpse.uid) then return true end addEvent(doMoveLoot, 5, getThingPos(monster), corpse.itemid) return true end
  • Quem Está Navegando   0 membros estão online

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