Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 11/30/15 em todas áreas

  1. MatheusGlad

    Monsters Default Events

    FAÇA BACKUP DA PASTA MONSTERS E CREATURESCRIPTS ANTES DE UTILIZAR! Funciona para todas as versões TFS 0.3.6+ ate TFS 1.2 (Provavelmente funciona para outras tambem mas não me dei o trabalho de testar) Introdução: Bem, como o titulo mesmo diz, o script vai criar e modificar todos os monstros para terem scripts default (Caso o monstro não tenha script) e tambem pode adicionar creaturescripts default, exemplo o onDeath. Code: monsterevent.lua local dir = "./data/monster/" local csdir = "./data/creaturescripts/" local monstersXML = "monsters.xml" local csXML = "creaturescripts.xml" local csTag = '\n <event type="%t" name="%n" script="%s"/>' -- Tag format on creaturescripts.xml (%t = type, %n = name, %s = script) local defaultText = [[function onCreatureAppear(self, creature) return false end function onCreatureDisappear(self, creature) return false end function onCreatureMove(self, creature, oldPosition, newPosition) return false end function onCreatureSay(self, creature, type, message) return false end function onThink(self, interval) return false end]] local events = { ["monsterdeath"] = {type = "death", file="monsterdeath.lua", defaultText=[[ function onDeath(cid, corpse, lasthitkiller, mostdamagekiller, lasthitunjustified, mostdamageunjustified) return true end]]}, } ------- Não edite a partir dessa linha se nao souber o que esta fazendo. function parseXML(file) local ret = {["monster"] = {}, ["event"] = {}} local data = "" for line in file:lines() do data = data .. line .. "\n" line = line:match("<(.-)/>") if line then local element = line:match("^%s*(.-)%s") if element == "monster" or element == "event" then local t = {} for i, x in line:gmatch('%s+(.-)="(.-)"') do t[i] = x end table.insert(ret[element], t) end end end return ret, data:sub(1, #data-1) end function init() ----- Parsing monsters.xml ----- local monstersfile = io.open(dir .. monstersXML, "r") print("Parsing XML " .. dir .. monstersXML .. "...") local xmltable = parseXML(monstersfile) monstersfile:close() -------------------------------- -- Creating scripts directory -- local testfile = io.open(dir .. "scripts/test", "w") if not testfile then os.execute("mkdir data\\monster\\scripts") print("Directory " .. dir .. "scripts has been created.") else testfile:close() end os.remove(dir .. "scripts/test") --------------------------------- ------ Creating default.lua ------- local defaultlua = io.open(dir .. "scripts/default.lua", "w") defaultlua:write(defaultText) defaultlua:close() print("File " .. dir .. "scripts/default.lua has been created.") --------------------------------- ---- Modify all monsters XML! ---- local modified = 0 for i, contents in ipairs(xmltable["monster"]) do local monsterxml = io.open(dir .. contents.file, "r") if monsterxml then local xmldata = monsterxml:read("*a") local _mod = false local s, f, content = xmldata:find("<monster%s(.-)>") local r, p, cs = content:find('script="(.-)"') monsterxml:close() newc = content if not cs then xmldata = xmldata:gsub(content, newc .. ' script="default.lua"') _mod = true elseif cs ~= "default.lua" then print('Warning: The file "' .. contents.file .. '" already has a script.') end local s, f, content = xmldata:find("<monster%s(.-)>") local x, q, scriptcontent = xmldata:find("<script>(.-)</script>") local readyevents = {} local addevents = "" if scriptcontent then for line in scriptcontent:gmatch("(.-)\n") do local event = line:match('<event%s-name="(.-)"') if event then readyevents[event] = true end end end for event, _c in pairs(events) do if not readyevents[event] then addevents = addevents .. '<event name="' .. event .. '"/>\n' end end if addevents ~= "" then _mod = true if scriptcontent and scriptcontent:find("event") then xmldata = xmldata:gsub(scriptcontent, scriptcontent .. addevents) elseif x and q then xmldata = xmldata:sub(1, x-1) .. xmldata:sub(q+1) xmldata = xmldata:sub(1, f) .. "\n<script>\n" .. addevents .. "\n</script>" .. xmldata:sub(f+1) else xmldata = xmldata:sub(1, f) .. "\n<script>\n" .. addevents .. "\n</script>" .. xmldata:sub(f+1) end end if xmldata then if _mod then modified = modified+1 end local monsterxmlwrite = io.open(dir .. contents.file, "w") monsterxmlwrite:write(xmldata) monsterxmlwrite:close() else print("Error in: " .. contents.name) end else print("Warning: Error opening file " .. contents.file) end end print("Total monsters XML modified: " .. modified) ---------------------------------- --- Parsing creaturescripts.xml -- local csfile = io.open(csdir .. csXML, "r") print("Parsing XML " .. csdir .. csXML .. "...") local csxmltable, xmldata = parseXML(csfile) csfile:close() ---------------------------------- --- Modify creaturescripts.xml --- local _mod = false local readytags = {} for i, contents in ipairs(csxmltable["event"]) do if events[contents.name] then readytags[contents.name] = true end end for event, contents in pairs(events) do if not readytags[event] then _mod = true local currenttag = csTag currenttag = currenttag:gsub("%%t", contents.type) currenttag = currenttag:gsub("%%n", event) currenttag = currenttag:gsub("%%s", contents.file) local r, w = xmldata:find("<creaturescripts>") xmldata = xmldata:sub(1, w) .. currenttag .. xmldata:sub(w+1) end end if _mod then local csfilewrite = io.open(csdir .. csXML, "w") csfilewrite:write(xmldata) csfilewrite:close() print("Modified " .. csdir .. csXML) end ---------------------------------- ----- Creating event scripts ----- print("Creating lua creaturescripts...") for event, contents in pairs(events) do local luafile = io.open(csdir .. "scripts/" .. contents.file, "w") luafile:write(contents.defaultText) luafile:close() end ---------------------------------- print("All the modifications were done.") return true end local check = io.open("meventsinstall.lua", "r") if not check then local ret = init() if ret then local file = io.open("meventsinstall.lua", "w") file:write("true") file:close() end else check:close() end Explicando o que o code realmente faz: O code vai ser executado somente uma vez e vai editar todos os monstros do seu OTServer presentes no monsters.xml adicionando um script default, que seria o defaultText presente no inicio do code (So funciona em TFS 1.0+) e tambem ira adicionar eventos ao XML do monstro sem remover os que ja existem (se existirem). Depois disso ele ira editar o creaturescripts.xml para criar a tag do evento e tambem criar o script que esta na tabela events. Como instalar: TFS 0.3.6: Só botar ele na pasta lib do seu OT que ele ja vai executar quando voce abrir o executavel. TFS 1.x: Bote o code na pasta "lib\core" e edite o core.lua nessa pasta adicionando essa linha: dofile('data/lib/core/monstersevent.lua') Se voce fizer tudo certo deve aparecer isso quando voce abrir o server: Você pode rodar o script novamente deletando o arquivo "meventsinstall.lua" que sera criado na pasta do server, ele soh ira adicionar algo se voce mudar alguma coisa no code. Porque usar esse code: Não usar funçoes como onAttack, onSpawn entre outras para registrar eventos em monstros. Usar as funçoes onCreatureAppear, onCreatureDisappear, onCreatureMove, onCreatureSay e onThink em todos os monstros do server (TFS 1.0+)
    2 pontos
  2. TaaG

    Primeira sprite

    Tô querendo aprimorar em Spriting e fiz uma, bem novata heheh. Já é um começo. hauha
    1 ponto
  3. kaleudd

    [Show-off] Equipe Pokéxchama 5Th.

    Algumas Sprites criadas pela equipe Pokéxchama. 5 Geração. v0.1= Clique Aqui Atualizações: v0.2 = Clique Aqui obs: Adicionado Tornadus. v0.3= Em breve.
    1 ponto
  4. Luga03

    Kozmo - A new dawn

    O mundo de Kozmo o espera com calabouços e desafios que tremeriam até as orelhas do Pikachu mais destemido! Em Kozmo a sua aventura terá um novo corpo, um novo destino, e será vivenciada pelo seu pokémon preferido! Em breve colocaremos: algumas fotos, informações adicionais e os créditos. V0.3 Equipe Atual: Colaboradores: Os colaboradores, são os que ajudaram a fixar bugs e outras coisas
    1 ponto
  5. FLC

    Ajuda com remere's

    Bom, o Remeres se não me engano parou de atualizar na versão 9.6, e os de hoje são feitos por jogadores. O que podes procurar pra te ajudar são Extensions, existem varias por ai, da uma pesquisadinha no Google que você já acha espero ter ajudado.
    1 ponto
  6. SamueLGuedes

    [Show-off] Equipe Pokéxchama 5Th.

    Muito bom, acompanhando.
    1 ponto
  7. Deadpool

    Kozmo - A new dawn

    Mano, eu to com tua source prontinha, porém to sem PC e sem skype.. @Eu gostei da ideia do projeto haha, ta ficando massa..
    1 ponto
  8. MatheusGlad

    Error goback

    local EFFECTS = { --[OutfitID] = {Effect} ["Magmar"] = 35, ["Magmortar"] = 35, ["Magby"] = 35, ["Smoochum"] = 17, ["Jynx"] = 17, ["Shiny Jynx"] = 17, } function onUse(cid, item, frompos, item2, topos) if exhaustion.get(cid, 6666) and exhaustion.get(cid, 6666) > 0 then return true end --alterado v1.6 sistema de firstpoke retirado if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then return true end ------------------------------------------------------- ballName = getItemAttribute(item.uid, "poke") btype = getPokeballType(item.itemid) usando = pokeballs[btype].use local effect = pokeballs[btype].effect if not effect then effect = 21 end ---------------------------------------------------------- if item.itemid == usando then if getPlayerStorageValue(cid, 990) == 1 then -- GYM doPlayerSendCancel(cid, "You can't return your pokemon during gym battles.") return true end --------------------------------------------------------------------------------------- if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6 if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then BackTeam(cid) end end --------------------------------------------------------------------------------------- if #getCreatureSummons(cid) == 2 and getPlayerStorageValue(cid, 212124) >= 1 then doPlayerSendCancel(cid, "You can't do that while is controling a mind") return true --alterado v1.5 end --------------------------------------------------------------------------------------- if #getCreatureSummons(cid) <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) doPlayerSendCancel(cid, "This pokemon is fainted.") return true end end local cd = getCD(item.uid, "blink", 30) if cd > 0 then setCD(item.uid, "blink", 0) end local z = getCreatureSummons(cid)[1] if getCreatureCondition(z, CONDITION_INVISIBLE) and not isGhostPokemon(z) then return true end doReturnPokemon(cid, z, item, effect) elseif item.itemid == pokeballs[btype].on then if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then doPlayerSendCancel(cid, "You must put your pokeball in the correct place!") return TRUE end local thishp = getItemAttribute(item.uid, "hp") if thishp <= 0 then if isInArray(pokeballs[btype].all, item.itemid) then doTransformItem(item.uid, pokeballs[btype].off) doItemSetAttribute(item.uid, "hp", 0) doPlayerSendCancel(cid, "This pokemon is fainted.") return true end end local pokemon = getItemAttribute(item.uid, "poke") if not pokes[pokemon] then return true end if isLegendaryPokemon(pokemon) and not isInArray({5, 6}, getPlayerGroupId(cid)) then doPlayerSendTextMessage(cid, 27, "You can't use a legendary pokemon.") doRemoveItem(item.uid) return true end ----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto --------------------------------- if not isInArray({5, 6}, getPlayerGroupId(cid)) then local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK) local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"} local low = {} local lw = 1 for e, f in pairs(pokeballs) do for times = 1, 3 do local items = getItemsInContainerById(bp.uid, pokeballs[e].all[times]) if #items >= 1 then --alterado v1.6 for _, uid in pairs(items) do local nome1 = getItemAttribute(uid, "poke") if pokes[pokemon].level > 10 and nome1 == pokemon then return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!") elseif pokes[pokemon].level <= 10 then if nome1 == pokemon then table.insert(low, lw, nome1) lw = lw +1 end end end end end end if #low >= 3 then return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!") end end --------------------------------------------------------------------------------------------------------------------------------------------------- local x = pokes[pokemon] local boost = getItemAttribute(item.uid, "boost") or 0 if getPlayerLevel(cid) < (x.level+boost) then doPlayerSendCancel(cid, "You need level "..(x.level+boost).." to use this pokemon.") return true end -------------------------------------------------------------------------------------- shinysClan = { ["Shiny Flareon"] = {1, "Volcanic"}, ["Shiny Vaporeon"] = {2, "Seavel"}, ["Shiny Golem"] = {3, "Orebound"}, ["Shiny Fearow"] = {4, "Wingeon"}, ["Shiny Nidoking"] = {5, "Malefic"}, ["Shiny Hitmontop"] = {6, "Gardestrike"}, --alterado v1.4 ["Shiny Hypno"] = {7, "Psycraft"}, ["Shiny Vileplume"] = {8, "Naturia"}, ["Shiny Jolteon"] = {9, "Raibolt"}, } if shinysClan[pokemon] and (getPlayerGroupId(cid) < 3 or getPlayerGroupId(cid) > 6) then if getPlayerStorageValue(cid, 86228) ~= shinysClan[pokemon][1] then doPlayerSendCancel(cid, "You need be a member of the clan "..shinysClan[pokemon][2].." to use this pokemon!") return true elseif getPlayerStorageValue(cid, 862281) ~= 5 then doPlayerSendCancel(cid, "You need be atleast rank 5 to use this pokemon!") return true end end -------------------------------------------------------------------------------------- doSummonMonster(cid, pokemon) local pk = getCreatureSummons(cid)[1] if not isCreature(pk) then return true end ------------------------passiva hitmonchan------------------------------ if isSummon(pk) then local nameHIT = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke") local hands = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands") if nameHIT == "Shiny Hitmonchan" or nameHIT == "Hitmonchan" then if getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands") then doSetCreatureOutfit(pk, {lookType = hitmonchans[nameHIT][hands].out}, -1) else doPlayerSendTextMessage(cid, 27, "Contact a GameMaster! Error in passive system! Attribute \"hands\" missing") doSetItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands", 0) end end end ------------------------------------------------------------------------- ---------movement magmar, jynx------------- if EFFECTS[getCreatureName(pk)] then --edited efeito magmar/jynx markPosEff(pk, getThingPos(pk)) sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk)) --alterado v1.5 end -------------------------------------------------------------------------- if getCreatureName(pk) == "Ditto" or getCreatureName(pk) == "Shiny Ditto" then --edited local left = getItemAttribute(item.uid, "transLeft") local name = getItemAttribute(item.uid, "transName") if left and left > 0 then setPlayerStorageValue(pk, 1010, name) doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1) addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn")) doItemSetAttribute(item.uid, "transBegin", os.clock()) else setPlayerStorageValue(pk, 1010, getCreatureName(pk) == "Ditto" and "Ditto" or "Shiny Ditto") --edited end if name == "Smeargle" then doPlayerSendCancel(cid, "Your ditto can't copy a smeargle.") return true end if isLegendaryPokemon(name) or name == "Smeargle" or isInArray(dittoShinyCopy, name) then deTransform(pk, getItemAttribute(item.uid, "transTurn")) markPos(pk, {x = 1, y = 1, z = 1}) doPlayerSay(cid, ""..getPokeName(pk)..", stop transformation!", 1) return true end end if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end doCreatureSetLookDir(pk, 2) adjustStatus(pk, item.uid, true, true, true) doAddPokemonInOwnList(cid, pokemon) doTransformItem(item.uid, item.itemid+1) local pokename = getPokeName(pk) --alterado v1.7 local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename) doCreatureSay(cid, mgo, TALKTYPE_MONSTER) doSendMagicEffect(getCreaturePosition(pk), effect) if haveFirstTM(item) then if tmChange[getFirstTMName(item)] then doItemSetAttribute(item.uid, "tm1", tmChange[getFirstTMName(item)].new) end end if haveSecondTM(item) then if tmChange[getSecondTMName(item)] then doItemSetAttribute(item.uid, "tm2", tmChange[getSecondTMName(item)].new) end end if haveThirdTM(item) then if tmChange[getThirdTMName(item)] then doItemSetAttribute(item.uid, "tm3", tmChange[getThirdTMName(item)].new) end end if useOTClient then doPlayerSendCancel(cid, '12//,show') --alterado v1.7 end local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb,"addon") if not look then doSetItemAttribute(pb,"addon",0) elseif look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) end else doPlayerSendCancel(cid, "This pokemon is fainted.") end if useKpdoDlls then doUpdateMoves(cid) end return true end Tenta isso.
    1 ponto
  9. MiltonAlvesJr

    Global Full 8.6 com Rook [UP-LVL]

    Vlw pelo REP amigão!! Para comprar o premium scroll você utiliza a função de TRADE normal, ai você compra.. E sim, é possível adicionar cidades e aumentar a quantidade de monstros nas hunts, mas para isso você devera usar um MAPA EDITOR, e ter algumas noções básicas dele.. Você pode ver tutoriais no youtube... Espero ter ajudado, abs
    1 ponto
  10. sergioros1

    [Encerrado]Sttaf Para Server Global

    Lhe enviei uma PM.
    1 ponto
  11. Bem, creio que pagando banners em sites de bots, pois tem muita visualização além do mais tibia não da mais tesão como antigamente, antes jogar tibia era lei praticamente, segunda vida, hoje em dia, depois de evoluirmos os pensamentos, vemos que não é mais o mesmo jogo que foi, creio eu que o capitalismo abraçou a cipsoft e não largou. Hoje em dia tibia é motivo de espanto para novos jogadores (Bots, jogabilidade, engine, gráfico, todos nós old players esperávamos lá em meados de 2002 que o tibia evoluísse, eu mesmo fiquei louco com boatos que seu personagem poderia sentar em futuros updates, eu acho que falo por todos nós quando digo que o que realmente esperávamos da cipsoft na época de ouro era mais interação com seu próprio personagem e não esses updates absolutamente inúteis que vieram depois), é raro ou meio impossível encontrar alguém que começou a jogar tibia recentemente, e como a velha escola do tibia anda exigente é difícil agradar, recomendo fazer modificações no servidor do seu amigo para que seja mais empolgante para um player novato jogar no server, e cuidado com as panelas de players olds, geralmente esses caras procuram "estragar" o server dando power abuse, o concelho que posso te dar é continuar divulgando normalmente e dando mais atenção para os novatinhos que na verdade são o futuro do servidor. bjs
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...