Welcome to xTibia - Sua comunidade de Otserv e Tibia

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.

Jovial

Membro
  • Conteúdo

    22
  • Registrado

  • Última visita

1 Seguidor

Sobre Jovial

  • Rank
    The Scripter
  • Data de Nascimento 05-06-1991

Informações

  • Forma que conheci o Xtibia Sites de Busca
  • Sou Programador
  1. Primeiro comentário seu, Boas vindas a equipe Jovial.
    Tinha esquecido de deixar hehe :)
    abraço
  2. Ou você muda o nome do tópico avisando que isto é um Bug, ou o mesmo será fechado. Isto que você fez não desliga o server, faz ele cair.
  3. Primeiro a lib funciona, 2 como posso saber que erro esta dando ai se vcs não colam a msg do erro ¬¬ o erro pode não passar de mal instalação/configuração e ou por faltar alguma função no server que vc deseja usa-la
  4. Obrigado pela sujestão assim que eu tiver tempo eu organizo o tutorial.
  5. Frozen poderia ser mais especifico para que eu possa ver isto?
  6. [center][color="#FF0000"][size=6].:Easy Annihilator Tutorial:.[/size][/color][/center] Olá, para quem não sabe o Easy Annihilator é um sistema que criei para facilitar a criação de quests no estilo da anihilator, ou até mesmo arenas de lutas. Para adquirir o script clique [url="http://www.xtibia.com/forum/index.php?showtopic=75911"][b]aqui[/b][/url]. Para melhor entender como é configurado este sistema, aconselho a procurarem Tutorial sobre Array (Tabelas), pois a configuração de uma annihilator, para utilizar o Easy Annihilator System, é feita dentro de Arrays. [color="#FF0000"][size=5]Configurando:[/size][/color] Todas as informações sobre a sua annihilator deverá ser organizada em um Array, no caso vamos nomeá-la Annihilator Irei colocar abaixo a configuração de uma annihilator para 4 players e 6 monstros, igual a global, você só precisará mudar as posições para as do seu mapa. [code]local Annihilator = { --Aqui iniciamos uma Array, coloquei 'local' para que ela existir somente neste arquivo. ANNIHILATOR_LEVER_UNIQUEID = 5000, --Aqui você coloca o uniqueid da sua alavanca ( o uso da virgula no fim é obrigatório, pois estamos dentro de uma Array, a Annihilator_config). MIN_LEVEL = 100, --Aqui você coloca o level minimo para fazer a quest. STORAGE = 5000, --Aqui você coloca o numero do Storage que deseja usar para salvar as informações da quest (para marcar/verificar se o player ja fez a quest). CHECK_INVISIBLE_ACCESS = 1, --Aqui você poe o access minimo para ser ignorado, na verificação se a sala está vazia. (para não contar gms como players). CHESTS = { --Aqui estamos abrindo uma array chamada CHESTS dentro da Array Annihilator_config. {uniqueid = 5001, prize = 2494, count = 1}, --Aqui você configura o uniqueid de cada baú, o item que ira receber (prize) e a quantidade. {uniqueid = 5002, prize = 2400, count = 1}, --Note que como estamos dentro da Array CHESTS usamos virgula para separar os valores, o uso é obrigado, somente no ultimo valor que não se deve colocar virgula. {uniqueid = 5003, prize = 2431, count = 1}, {uniqueid = 5004, prize = 2421, count = 1} --Aqui não existe virgula, é o ultimo valor da array CHESTS },-- Fechamos a Array CHESTS PLAYER_POS = { {x = 500, y = 755, z = 9, stackpos = 253}, --Aqui você irá por as posições dos players, você pode colocar quantas quiser para aumentar o numero de players ou diminuir, mas obedecendo a sintaxe correta, sempre o ultimo valor sem virgula {x = 499, y = 755, z = 9, stackpos = 253}, {x = 498, y = 755, z = 9, stackpos = 253}, {x = 497, y = 755, z = 9, stackpos = 253} }, PLAYER_TOPOS = { {x = 500, y = 755, z = 10}, --Posições para aonde os players devem ser levados, deve ter a mesma quantidade de valores do que a Array PLAYER_POS. {x = 499, y = 755, z = 10}, {x = 498, y = 755, z = 10}, {x = 497, y = 755, z = 10} }, MONSTERS = { {name = "Demon", pos = {x = 500, y = 753, z = 10}}, --Aqui configuramos os monstros, qual deve ser sumonado e qual sua posição, você pode colocar mais ou menos que isto. {name = "Demon", pos = {x = 498, y = 753, z = 10}}, {name = "Demon", pos = {x = 497, y = 757, z = 10}}, {name = "Demon", pos = {x = 499, y = 757, z = 10}}, {name = "Demon", pos = {x = 501, y = 755, z = 10}}, {name = "Demon", pos = {x = 502, y = 755, z = 10}} }, TOP_LEFT_POS = {x = 494, y = 749, z = 10}, --Irei explicar logo abaixo. BOTTOM_RIGHT_POS = {x = 517, y = 760, z = 10}, --Irei explicar logo abaixo. TRASH_POS = {x = 528, y = 754, z = 10}, --Posição de um lugar escondido no mapa para onde os demons antigos serão levados IS_FORGOTTEN_SERVER = TRUE --Se você usa o Forgotten Server ou servers mais recentes troque o FALSE por TRUE, pois a função de teleport de alguns servers é diferente, de qualquer maneira se os player não forem teleportados troque de FALSE para TRUE ou vice-versa, aqui não colocamos virgula, pois é o ultimo valor da Array Annihilator_config. } --Fechamos a Array Annihilator_config --Agora vamos transformar essas informações para uma variavel que conterá o sistema para que essa annihilator funcione Annihilator_ID = AnnihilatorSys:new(Annihilator)[/code] Bem, agora vou explicar oque são as variaveis TOP_LEFT_POS e BOTTOM_RIGHT_POS. TOP_LEFT_POS é a posição acima e a esquerda da Annihilator, usada na verificaçao se a sala está vazia ou não.(veja na SS abaixo em azul) BOTTOM_RIGHT_POS é a posição abaixo e a direita da Annihilator, usada na verificaçao se a sala está vazia ou não.(veja na SS abaixo em verde) [img]http://img434.imageshack.us/img434/7994/exemplouy8.jpg[/img] A annihilator verifica entre elas formando um retangulo, cujos dois de seus vértices são estes pontos, tudo dentro dele será verificado. Tome cuidado para não pegar nenhum lugar fora da annihilator onde possa ter players, pois se tiver alguém la ele será considerado como dentro da annihilator. Bem, está quase tudo pronto. Agora iremos colocar isto em um arquivo. Crie um arquivo chamado Annihilator.lua, e nele coloque a Annihilator configurada para seu server, ficando: [code]local Annihilator_config = { ANNIHILATOR_LEVER_UNIQUEID = 5000, MIN_LEVEL = 100, STORAGE = 5000, CHECK_INVISIBLE_ACCESS = 1, CHESTS = { {uniqueid = 5001, prize = 2494, count = 1}, {uniqueid = 5002, prize = 2400, count = 1}, {uniqueid = 5003, prize = 2431, count = 1}, {uniqueid = 5004, prize = 2421, count = 1} }, PLAYER_POS = { {x = 500, y = 755, z = 9, stackpos = 253}, {x = 499, y = 755, z = 9, stackpos = 253}, {x = 498, y = 755, z = 9, stackpos = 253}, {x = 497, y = 755, z = 9, stackpos = 253} }, PLAYER_TOPOS = { {x = 500, y = 755, z = 10}, {x = 499, y = 755, z = 10}, {x = 498, y = 755, z = 10}, {x = 497, y = 755, z = 10} }, MONSTERS = { {name = "Demon", pos = {x = 500, y = 753, z = 10}}, {name = "Demon", pos = {x = 498, y = 753, z = 10}}, {name = "Demon", pos = {x = 497, y = 757, z = 10}}, {name = "Demon", pos = {x = 499, y = 757, z = 10}}, {name = "Demon", pos = {x = 501, y = 755, z = 10}}, {name = "Demon", pos = {x = 502, y = 755, z = 10}} }, TOP_LEFT_POS = {x = 494, y = 749, z = 10}, BOTTOM_RIGHT_POS = {x = 517, y = 760, z = 10}, TRASH_POS = {x = 528, y = 754, z = 10}, IS_FORGOTTEN_SERVER = TRUE } Annihilator_ID = AnnihilatorSys:new(Annihilator) function onUse(cid, item, frompos, item2, topos) Annihilator_ID:onUse(cid, item) --Essa função verifica faz com que o sistema seja acionado quand oo player der use na alavanca ou no baú return TRUE end[/code] Não se esqueça de criar as tags... No caso para este arquivo ficaria: [code] <action uniqueid="5000" script="annihilator.lua"/> <action uniqueid="5001" script="annihilator.lua"/> <action uniqueid="5002" script="annihilator.lua"/> <action uniqueid="5003" script="annihilator.lua"/> <action uniqueid="5004" script="annihilator.lua"/>[/code] [size=4]OBS:[/size]Se voçe não for querer monstros não precisa colocar a parte MONSTERS na Array que você for configurar, o mesmo server para os baús. Se não tiver level minimo também não precisa por a parte de level minimo. (Bom para fazer arenas de batalhas ou outro tipo de coisas) [color="#FF0000"][size=5]Exemplo de 3 annihilators em um único arquivo[/size][/color] No exemplo usei os mesmo premios nos baús mas você pode mudá-los, adicionar mais baús ou remover alguns. O mapa foi feito pelo Lambix, eu só fiz a entrada das annihilators(a parte feia =D) [url="http://rapidshare.com/files/88354956/Exemplo.rar.html"][b]Download[/b][/url] Espero que vocês tenham entendido, qualquer dúvida é só perguntar. cya; Jovial
  7. [center][size=6][color="#FF0000"].:Easy Annihilator System:.[/color][/size][/center] Olá, a um tempo atras fiz um sistema para facilitar a criação de quests como a annihilator, hoje decidi refaze-lo e postar aqui. Como eu não pude testar todas as funções que refiz, pesso a vocês para testar-lo, e , se encontrar bugs reportar-me. [size=5][color="#FF0000"]Features:[/color][/size] [list] [*]Aceita quantidade de players que você desejar. [*]Aceita quantidade de monstros que você desejar. [*]Aceita quantidade de baús que você desejar (Mas é possivel pegar somente um dos itens). [*]Verifica se existe alguem na sala, impossibilitando entrar 2 times juntos. [*]Quando um time entra na sala, os monstros são renovados. [/list] [size=5][color="#FF0000"]Como Instalar:[/color][/size] Copie o código abaixo e coloque-o no fim do arquivo "data/actions/lib/actions.lua". [code]--[[ Easy Annihilator by Jovial Version: 2.0 ]] AnnihilatorSys = {} AnnihilatorSys_MT = {__index = AnnihilatorSys} function AnnihilatorSys:new(CONFIG) local ret = CONFIG ret.VERSION = "2.0" setmetatable(ret, AnnihilatorSys_MT) return ret end function AnnihilatorSys:getVersion() return self.VERSION end function AnnihilatorSys:onUse(cid, item) local tmp if (item.uid == self.ANNIHILATOR_LEVER_UNIQUEID) then if (item.itemid == 1945) then if (self:CheckPlayersPositions() == TRUE) then if (self:CheckPlayersLevels() == TRUE) then for tmp = 1, #self.PLAYER_POS do if (self.IS_FORGOTTEN_SERVER == TRUE) then doTeleportThing(getThingfromPos(self.PLAYER_POS[tmp]).uid, self.PLAYER_TOPOS[tmp], FALSE) else doTeleportThing(getThingfromPos(self.PLAYER_POS[tmp]).uid, self.PLAYER_TOPOS[tmp]) end doSendMagicEffect(self.PLAYER_POS[tmp], CONST_ME_POFF) doSendMagicEffect(self.PLAYER_TOPOS[tmp], CONST_ME_ENERGYAREA) end if (self.MONSTERS ~= nil) then for tmp = 1, #self.MONSTERS do doSummonCreature(self.MONSTERS[tmp].name, self.MONSTERS[tmp].pos) end end doTransformItem(item.uid, 1946) else doPlayerSendCancel(cid, "All player need be level " .. (self.MIN_LEVEL or 0) .. " or higher.") end else doPlayerSendCancel(cid, "You need " .. #self.PLAYER_POS .. " players in your team.") end elseif (item.itemid == 1946) then if (self:Check() == TRUE) then doTransformItem(item.uid, 1945) end else return FALSE end else if ((self.CHESTS ~= nil) and (self.STORAGE ~= nil)) then for tmp = 1, #self.CHESTS do if (item.uid == self.CHESTS[tmp].uniqueid) then if (getPlayerStorageValue(cid, self.STORAGE) == -1) then doPlayerAddItem(cid, self.CHESTS[tmp].prize, self.CHESTS[tmp].count) setPlayerStorageValue(cid, self.STORAGE, 1) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found " .. self:getArticle(getItemName(self.CHESTS[tmp].prize)) .. " " .. getItemName(self.CHESTS[tmp].prize) .. ".") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.") end end end end end return TRUE end function AnnihilatorSys:CheckPlayersPositions() local tmp for tmp = 1, #self.PLAYER_POS do if (getThingfromPos(self.PLAYER_POS[tmp]).uid <= 0) then return FALSE end end return TRUE end function AnnihilatorSys:CheckPlayersLevels() local tmp for tmp = 1, #self.PLAYER_POS do if (getPlayerLevel(getThingfromPos(self.PLAYER_POS[tmp]).uid) < (self.MIN_LEVEL or 0)) then return FALSE end end return TRUE end function AnnihilatorSys:Check() local players = 0 local monsters = {} local X,Y,tmp for X = self.TOP_LEFT_POS.x, self.BOTTOM_RIGHT_POS.x do for Y = self.TOP_LEFT_POS.y, self.BOTTOM_RIGHT_POS.y do local creature = getThingfromPos({x = X, y = Y, z = self.TOP_LEFT_POS.z, stackpos = 253}) if (creature.uid > 0) then if (isPlayer(creature.uid) == TRUE) then if (getPlayerAccess(creature.uid) < (self.CHECK_INVISIBLE_ACCESS or 1)) then players = players + 1 end else table.insert(monsters,creature.uid) end end end end if (players == 0) then for tmp = 1, #monsters do if (doRemoveCreature ~= nil) then doRemoveCreature(monsters[tmp]) else if (self.IS_FORGOTTEN_SERVER == TRUE) then doTeleportThing(monsters[tmp], self.TRASH_POS, FALSE) else doTeleportThing(monsters[tmp], self.TRASH_POS) end end end return TRUE else return FALSE end end function AnnihilatorSys:getArticle(str) if (string.find(string.lower(string.sub(str,1,1)), "[aeiouy]")) then return "an" else return "a" end end[/code] O forum geralmente retira os Tabs, sugiro que vocês recoloque-os. [size=5][color="#FF0000"]Tutorial:[/color][/size] Para aprender como usá-lo entre [url="http://www.xtibia.com/forum/index.php?showtopic=75964"][b]aqui[/b][/url]. Espero que sejá util, e que vocês gostem. cya; Jovial.
  8. O uso da getGlobalStorageValue está errado tant oai quanto no tutorial original. Lab Ora não sabe nem oque é não corrige de teimoso, eu já o avisei
  9. Ela esta bem legal, gostei da cor e do banner
  10. Me mande ele que eu atualizo aki, eu deletei ele sem ekrer =D
  11. Este erro na linah 57 é na função doSendDistanceShoot que , creio eu, só tem no forgotten server
  12. Olá para todos; Essa magia faz cair meteoros aleatoriamente em uma determinada area em volta do player, se cair na terra ira pegar fogo e se cair na agua ira afundar. OBS: Ela provavelmente só funciona no Forgotten Server, ou outro server que possui as mesmas funções. Vamos ao script: [code]--Spell by Jovial local water = {490, 491, 492, 493, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625} local combat = createCombatObject() local meteor = createCombatObject() setCombatParam(meteor, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(meteor, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONAREA) setCombatFormula(meteor, COMBAT_FORMULA_LEVELMAGIC, -4.6, -200, -4.2, -200) setCombatParam(meteor, COMBAT_PARAM_CREATEITEM, 1492) local stun = createConditionObject(CONDITION_PARALYZE) setConditionParam(stun, CONDITION_PARAM_TICKS, 5000) setConditionFormula(stun, -0.8, 0, -0.9, 0) setCombatCondition(meteor, stun) local meteor_water = createCombatObject() setCombatParam(meteor_water, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(meteor_water, COMBAT_PARAM_EFFECT, CONST_ME_LOSEENERGY) setCombatFormula(meteor_water, COMBAT_FORMULA_LEVELMAGIC, -4.6, -200, -4.2, -200) combat_arr = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0} } local combat_area = createCombatArea(combat_arr) setCombatArea(combat, combat_area) local function meteorCast(p) doCombat(p.cid, p.combat, positionToVariant(p.pos)) end local function stunEffect(cid) doSendMagicEffect(getThingPos(cid), CONST_ME_STUN) end function onTargetTile(cid, pos) if (math.random(0, 1) == 1) then local ground = getThingfromPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}) if (isInArray(water, ground.itemid) == TRUE) then local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z} doSendDistanceShoot(newpos, pos, CONST_ANI_FIRE) addEvent(meteorCast, 200, {cid = cid, pos = pos, combat = meteor_water}) else local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z} doSendDistanceShoot(newpos, pos, CONST_ANI_FIRE) addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor}) end end end setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, combat, var) end[/code] SSs: [url="http://img517.imageshack.us/img517/5780/meteor1cn3.jpg"]http://img517.imageshack.us/img517/5780/meteor1cn3.jpg[/url] [url="http://img517.imageshack.us/img517/2100/meteor2vz4.jpg"]http://img517.imageshack.us/img517/2100/meteor2vz4.jpg[/url] Espero que gostem... cya; Jovial
  13. Parabens.. ficou muito bom, mas hoje em dia eu prefiro o lusasql. =D
  14. Magias simples.. n gostei não
  15. Bem eu na osabia onde postar por favor algum moderador mova para o lugar certo, como voçes pode mver eu sou novo aki. Obrigado por avisar
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.