Ir para conteúdo

Capitao wyz

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    Capitao wyz deu reputação a Vodkart em (Resolvido)Ajuda simples de sistema de PET   
    CREATURESCRIPT
     
     
    mortepet.lua
    function isPetMonster(cid)     return getCreatureMaster(cid) == 0 and false or isPlayer(getCreatureMaster(cid)) end function onDeath(cid, corpse, deathList)     if not isPetMonster(cid) then         return true     end     local waittime = 60 -- Tempo de exhaustion em segundos     local strtime = 6660666 -- Storage, nunca usar a mesma em outra Script do mesmo tipo. Ex: mesmo creaturescript, mesmo action e etc...     local master = getCreatureMaster(cid)     doPlayerSendTextMessage(master, MESSAGE_EVENT_ADVANCE, "Your pet is dead.")     exhaustion.set(master, strtime, waittime)     return true end
    TAG
    <event type="death" name="MortePet" event="script" value="mortepet.lua"/>
    No arquivo XML dos monstros que serão pets:
     
           <script>                <event name="MortePet"/>        </script>  
  2. Gostei
    Capitao wyz recebeu reputação de DigoleraBlow em [AJUDA] BUG CASSINO   
    UP
    so modificar essa parte e por 400 
    addEvent(result, (rand + 2) * 400, cid)  
  3. Obrigado
    Capitao wyz recebeu reputação de G Asa em [PEDIDO-SPELL] magia De Trap   
    Em area
     
    local config = { exhaust_storage = 5750, exhaust_time = 30, -- walls conf walls_time = 10, area_size = 3, walls_pos = { ["vertical"] = 13051, ["horizontal"] = 13051, ["rightcorner"] = 13051, ["leftcorner"] = 13051 } } local function buildWalls(cid) local cid_pos = getThingPosition(cid) local size = config.area_size for x = -size, size do for y = -size, size do if(math.abs(x) == size or math.abs(y) == size) then local target_pos = {x = (cid_pos.x + x), y = (cid_pos.y + y), z = cid_pos.z} if(doTileQueryAdd(cid, target_pos) == 1 and not getTileInfo(target_pos).protection) then local create_item = nil if(x == -size and y == -size) then create_item = config.walls_pos["leftcorner"] elseif(x == size and y == size) then create_item = config.walls_pos["rightcorner"] elseif(math.abs(x) == size and not (x == size and y == -size)) then create_item = config.walls_pos["vertical"] else create_item = config.walls_pos["horizontal"] end doCreateItem(create_item, 1, target_pos) local _time = config.walls_time for i = 0, _time do addEvent(function() local uid = getTileItemById(target_pos, create_item).uid if(uid ~= 0) then if(i < _time) then doSendAnimatedText(target_pos, (_time - i), 180) else doRemoveItem(uid) end end end, 1000 * i) end end end end end end function onCastSpell(cid, var) if(isPlayer(cid) and exhaustion.check(cid, config.exhaust_storage)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, config.exhaust_storage) .. " segundos para usar novamente.") return false end exhaustion.set(cid, config.exhaust_storage, config.exhaust_time) buildWalls(cid) return true end <instant name="Nome da magia" words="Nome da magia" lvl="325" mana="10" aggressive="1" range="5" blockwalls="1" selftarget="1" exhaustion="1900" needlearn="0" event="script" value="EX:Hashirama/Nome da magia.lua"> Em Target
    local t = { remove_time = 5, -- tempo em segundos para remover as magic wall item_id = 13057, -- id da lavar que vai ficar ao redor effe = 480 -- efeito da lava(fogo- sla) } function isWalkable(pos, creature, pz, proj) if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end local creature = getTopCreature(pos) if creature.type > 0 then return false end if getTilePzInfo(pos) and not pz then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function removeItem(posAll) for i=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[i].x,y=posAll[i].y,z=posAll[i].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == t.item_id then doRemoveItem(removeTile.uid) end end end end function onCastSpell(cid, var) local waittime = 3 -- Tempo de exhaustion em segundos local storage = 5853 -- Storage de Spell, nunca usar a mesma em outra spell, a menos que não queira usar duas spell juntas! if exhaustion.check(cid, storage) then doPlayerSendCancel(cid, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar a spell novamente.") return false end local pos = getPlayerPosition(getCreatureTarget(cid)) posTile1 = {x=pos.x+1,y=pos.y+1,z=pos.z,stackpos=1} posTile2 = {x=pos.x+1,y=pos.y,z=pos.z,stackpos=1} posTile3 = {x=pos.x+1,y=pos.y-1,z=pos.z,stackpos=1} posTile4 = {x=pos.x,y=pos.y-1,z=pos.z,stackpos=1} posTile5 = {x=pos.x-1,y=pos.y-1,z=pos.z,stackpos=1} posTile6 = {x=pos.x-1,y=pos.y,z=pos.z,stackpos=1} posTile7 = {x=pos.x-1,y=pos.y+1,z=pos.z,stackpos=1} posTile8 = {x=pos.x,y=pos.y+1,z=pos.z,stackpos=1} posAll = {posTile1,posTile2,posTile3,posTile4,posTile5,posTile6,posTile7,posTile8} ---- aqui \/ você configura de acordo com a posição do seu efeito, para centralizar ele local pose = getPlayerPosition(getCreatureTarget(cid)) posTe1 = {x=pose.x+1,y=pose.y+1,z=pose.z} posTe2 = {x=pose.x+1,y=pose.y,z=pose.z} posTe3 = {x=pose.x+1,y=pose.y-1,z=pose.z} posTe4 = {x=pose.x,y=pose.y-1,z=pose.z} posTe5 = {x=pose.x-0,y=pose.y-1,z=pose.z} posTe6 = {x=pose.x-0,y=pose.y,z=pose.z} posTe7 = {x=pose.x-0,y=pose.y+1,z=pose.z} posTe8 = {x=pose.x,y=pose.y+1,z=pose.z} posTall = {posTe1,posTe2,posTe3,posTe4,posTe5,posTe6,posTe7,posTe8} --- fim /\ da configuração for a= 1, #posTall do doSendMagicEffect(posTall[a], t.effe) end addEvent(function() for i=1, #posAll do if isWalkable(posAll[i]) then doCreateItem(t.item_id, 1, posAll[i]) end end end, 500) addEvent(removeItem, t.remove_time*1000, posAll) exhaustion.set(cid, storage, waittime) return true end <instant name="Nome da magia" words="Nome da magia" lvl="180" mana="10" aggressive="1" range="5" blockwalls="1" needtarget="1" exhaustion="1900" needlearn="0" event="script" value="EX:Hashirama/Nome da magia.lua"> Se ajudei deixe o like e rep se possivel
  4. Gostei
    Capitao wyz deu reputação a Juliet em Skin System por comando !skin [8.6]   
    Id seria para usa o comando !skin 1, !skin 2.... name é o nome da outfit (Ex: Goku Blue), outfit é a sprite da skin igual do actions, e VocationName vc adiciona se quiser, Caso vc queira que apenas vocação goku use a skin vc adiciona. [1] = {name = "Goku", outfitId = 1107, vocationName="goku"},
     
  5. Gostei
    Capitao wyz deu reputação a Juliet em Skin System por comando !skin [8.6]   
    Ai vc escolhe o item que vai vira a skin, e logo depois escolhe para qual outfit vai ser o item. Ex: [2364 -- ID QUALQUER DE ITEMS] = 500 -- Numero da skin que eu quero no Object Builder.
  6. Gostei
    Capitao wyz deu reputação a ITALOx em Skin System por comando !skin [8.6]   
    Olá rapaziada.
    Hoje tô trazendo sistema de skin por comando.
    Já vi muita gente pedindo por aqui e nunca teve resultado.
     
    Então vamos lá!
     
     
    Lib:
    Crie um arquivo lua com o nome
    210-skins
     
    Actions.xml
     
    <action itemid="11225" event="script" value="skin.lua"/>  
    Actions/scripts
    Crie um arquivo com o nome skin.lua e coloque isso aqui dentro:
    local skin = { [11204] = 1, -- [itemid] = skinid, } function onUse(cid, item, frompos, item2, topos) if not skin[item.itemid] then return false end if doPlayerAddSkin(cid, skin[item.itemid]) then doRemoveItem(item.uid,1) end return true end  
    Agora vá em talkactions.xml e coloque isso aqui lá:
    <talkaction words="!skin" event="script" value="skin.lua"/>  
    Em talkactions/scripts crie um arquivo com o nome skin.lua
    e coloquei isso aqui:
    function onSay(cid, words, param, channel) if param ~= "remover" or param ~= "remove" then doPlayerUseSkin(cid, tonumber(param)) elseif param == "remover" or param == "remove" then doPlayerRemoveSkin(cid) end return true end  
  7. Gostei
    Capitao wyz deu reputação a Skydangerous em [CreatureEvent] Item que nao pode dar trade   
    Script: Item que nao pode dar trade
    Função


    : Não deixa o player dar trade com certo item



    Testado: Não



    Observação



    : Muito bom para os player não ficarem trocando os items vip






    INSTALANDO




    vá na pasta creaturescript/scripts e cria um arquivo no formato .lua com o nome de notrade
    e cole isto:




    local itemsnoTrade = {2160} function onTradeRequest(cid, target, item, targetItem) if (isInArray(itemsnoTrade, item.itemid)) then doPlayerSendCancel (cid, "You can't trade this item.") return false end return true end em seguida, em login.lua adicione o evento registerCreatureEvent(cid, "tradeRequest") depois em creaturescript.xml adicione a tag <event type="traderequest" name="tradeRequest" event="script" value="trade.lua"/>




    Como Editar:



    local itemsnoTrade = {item,item1,item2}
    Onde ta o nome item, voce coloca quais items que nao quer que de trade





    Créditos
    Jetro

  8. Obrigado
    Capitao wyz deu reputação a Zazeros em [AJUDA] SPELL   
    @Capitao wyz Só dar um curtir que já ta pago
     
    Eu tive que improvisar um tiquin.
    Em baixo de:
    function onCastSpell(cid, var) Eu coloquei isso:
    if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then Ou seja, ele pega a distancia do player e a distancia do alvo, se for == 1 ele solta a spell, se não for == 1, ou seja, estiver distante do alvo, ele vai mandar uma msg de erro e um efeito, que estão na linha 95 e 96:
    doPlayerSendCancel(cid, "Creature is not recheable.") doSendMagicEffect(getPlayerPosition(cid), 2) Se quiser mudar a msg que aparece quando estiver distante, o efeito ou a própria distancia, só alterar essas partes.
  9. Gostei
    Capitao wyz deu reputação a Zazeros em [AJUDA] SPELL   
    local quant_hit = 4 -- quantidade de hits que ira dar no target local timeHit = 0.5 -- segundos de diferença para cada hit local quant_sqm = 1 -- sqms que ira empurrar o target local sqmTime = 0.01 -- segundos para empurrar após hitar, exemplo de meio segundo. local playerEffect241 = 191 -- efeito no player. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) function onCastSpell(cid, var) local target = getCreatureTarget(cid) if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then if target > 0 then local position_target = nil local cont = 0 for i=-1, 1 do for j=-1,1 do position_target = {x=getCreaturePosition(cid).x+i, y=getCreaturePosition(cid).y+j, z=getCreaturePosition(cid).z} if isWalkable(position_target) then cont = cont+1 break end end if cont > 0 then break end position_target = nil end local px = math.random(-1,1) local py = 0 if px == -1 or px == 1 then py = 0 elseif px == 0 then local n = {1,-1} py = n[math.random(1,#n)] end local poscentral = {x=getCreaturePosition(cid).x+px, y=getCreaturePosition(cid).y+py, z=getCreaturePosition(cid).z} if isWalkable(poscentral) then position_target = poscentral end if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then position_target = getCreaturePosition(cid) end local pos = position_target posTile1 = {{x=pos.x,y=pos.y,z=pos.z,stackpos=1}, 7524} -- embaixo do player posTile2 = {{x=pos.x+1,y=pos.y+1,z=pos.z,stackpos=1}, 7520} posTile3 = {{x=pos.x+1,y=pos.y,z=pos.z,stackpos=1}, 7523} posTile4 = {{x=pos.x+1,y=pos.y-1,z=pos.z,stackpos=1}, 7526} posTile5 = {{x=pos.x,y=pos.y-1,z=pos.z,stackpos=1}, 7500} posTile6 = {{x=pos.x-1,y=pos.y-1,z=pos.z,stackpos=1}, 7501} posTile7 = {{x=pos.x-1,y=pos.y,z=pos.z,stackpos=1}, 7525} posTile8 = {{x=pos.x-1,y=pos.y+1,z=pos.z,stackpos=1}, 7522} posTile9 = {{x=pos.x,y=pos.y+1,z=pos.z,stackpos=1}, 7521} posAll = {posTile1,posTile2,posTile3,posTile4,posTile5,posTile6,posTile7,posTile8,posTile9} if position_target ~= nil then local tempo = 0 while (tempo ~= quant_hit*(timeHit*1000)) do addEvent(sendEffect241, tempo, cid, target) tempo = tempo + 500 end tempo = 0 while (tempo ~= quant_hit*(timeHit*1000)) do addEvent(hitTarget, tempo, cid, target) tempo = tempo + (timeHit*1000) end local temp = tempo while (tempo ~= temp+quant_sqm*(sqmTime*1000)) do addEvent(empurrarTarget, tempo, cid, target, tempo, posAll) tempo = tempo + (sqmTime*1000) end local mana_hit = (getPlayerLevel(cid)*2 + getPlayerMagLevel(cid)*2 + 300) doCreatureAddMana(target, -mana_hit) for o=1, #posAll do doCreateItem(posAll[o][2], 1, posAll[o][1]) end return true else doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end else doPlayerSendCancel(cid, "Você precisa de um target!") end else doPlayerSendCancel(cid, "Creature is not recheable.") doSendMagicEffect(getPlayerPosition(cid), 2) end end function isWalkable(pos, creature, pz, proj) if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end local creature = getTopCreature(pos) if creature.type > 0 then return false end if getTilePzInfo(pos) and not pz then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function hitTarget(cid, target) if isCreature(target) and isPlayer(cid) then local effect241 = 9 -- efeito do hit na creatura. doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -getHit(cid), -getHit(cid), effect241) end end function getHit(cid) local hit = getPlayerLevel(cid)*2 + getPlayerMagLevel(cid)*2 + math.random(650,750) return hit end function empurrarTarget(cid, target, tempo, posAll) if not isCreature(target) then for k=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[k][1].x,y=posAll[k][1].y,z=posAll[k][1].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == posAll[k][2] then doRemoveItem(removeTile.uid) end end end end if isCreature(target) and isPlayer(cid) then local positions = nil if getPlayerLookDir(cid) == 0 then positions = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y-1, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 1 then positions = {x=getCreaturePosition(cid).x+1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 2 then positions = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y+1, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 3 then positions = {x=getCreaturePosition(cid).x-1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} end local tp = sqmTime*1000*(quant_sqm-1)+quant_hit*timeHit*1000 if tempo == tp then for k=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[k][1].x,y=posAll[k][1].y,z=posAll[k][1].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == posAll[k][2] then doRemoveItem(removeTile.uid) end end end end end end function sendEffect241(cid, target) local position1 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z} if isCreature(target) and isPlayer(cid) then doSendMagicEffect(position1, playerEffect241) end end local quant_hit = 4 -- quantidade de hit's que ira dar no target local timeHit = 0.5 -- segundos de diferença para cada hit local quant_sqm = 1 -- sqms que ira empurrar o target local sqmTime = 0.01 -- segundos para empurrar após hitar, exemplo de meio segundo. local playerEffect241 = 191 -- efeito no player. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) function onCastSpell(cid, var) local target = getCreatureTarget(cid) if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then if target > 0 then local position_target = nil local cont = 0 for i=-1, 1 do for j=-1,1 do position_target = {x=getCreaturePosition(cid).x+i, y=getCreaturePosition(cid).y+j, z=getCreaturePosition(cid).z} if isWalkable(position_target) then cont = cont+1 break end end if cont > 0 then break end position_target = nil end local px = math.random(-1,1) local py = 0 if px == -1 or px == 1 then py = 0 elseif px == 0 then local n = {1,-1} py = n[math.random(1,#n)] end local poscentral = {x=getCreaturePosition(cid).x+px, y=getCreaturePosition(cid).y+py, z=getCreaturePosition(cid).z} if isWalkable(poscentral) then position_target = poscentral end if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) == 1 then position_target = getCreaturePosition(cid) end local pos = position_target posTile1 = {{x=pos.x,y=pos.y,z=pos.z,stackpos=1}, 7524} -- embaixo do player posTile2 = {{x=pos.x+1,y=pos.y+1,z=pos.z,stackpos=1}, 7520} posTile3 = {{x=pos.x+1,y=pos.y,z=pos.z,stackpos=1}, 7523} posTile4 = {{x=pos.x+1,y=pos.y-1,z=pos.z,stackpos=1}, 7526} posTile5 = {{x=pos.x,y=pos.y-1,z=pos.z,stackpos=1}, 7500} posTile6 = {{x=pos.x-1,y=pos.y-1,z=pos.z,stackpos=1}, 7501} posTile7 = {{x=pos.x-1,y=pos.y,z=pos.z,stackpos=1}, 7525} posTile8 = {{x=pos.x-1,y=pos.y+1,z=pos.z,stackpos=1}, 7522} posTile9 = {{x=pos.x,y=pos.y+1,z=pos.z,stackpos=1}, 7521} posAll = {posTile1,posTile2,posTile3,posTile4,posTile5,posTile6,posTile7,posTile8,posTile9} if position_target ~= nil then local tempo = 0 while (tempo ~= quant_hit*(timeHit*1000)) do addEvent(sendEffect241, tempo, cid, target) tempo = tempo + 500 end tempo = 0 while (tempo ~= quant_hit*(timeHit*1000)) do addEvent(hitTarget, tempo, cid, target) tempo = tempo + (timeHit*1000) end local temp = tempo while (tempo ~= temp+quant_sqm*(sqmTime*1000)) do addEvent(empurrarTarget, tempo, cid, target, tempo, posAll) tempo = tempo + (sqmTime*1000) end local mana_hit = (getPlayerLevel(cid)*2 + getPlayerMagLevel(cid)*2 + 300) doCreatureAddMana(target, -mana_hit) for o=1, #posAll do doCreateItem(posAll[o][2], 1, posAll[o][1]) end return true else doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end else doPlayerSendCancel(cid, "Você precisa de um target!") end else doPlayerSendCancel(cid, "Creature is not recheable.") doSendMagicEffect(getPlayerPosition(cid), 2) end end function isWalkable(pos, creature, pz, proj) if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end local creature = getTopCreature(pos) if creature.type > 0 then return false end if getTilePzInfo(pos) and not pz then return false end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function hitTarget(cid, target) if isCreature(target) and isPlayer(cid) then local effect241 = 9 -- efeito do hit na creatura. doTargetCombatHealth(cid, target, COMBAT_PHYSICALDAMAGE, -getHit(cid), -getHit(cid), effect241) end end function getHit(cid) local hit = getPlayerLevel(cid)*2 + getPlayerMagLevel(cid)*2 + math.random(650,750) return hit end function empurrarTarget(cid, target, tempo, posAll) if not isCreature(target) then for k=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[k][1].x,y=posAll[k][1].y,z=posAll[k][1].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == posAll[k][2] then doRemoveItem(removeTile.uid) end end end end if isCreature(target) and isPlayer(cid) then local positions = nil if getPlayerLookDir(cid) == 0 then positions = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y-1, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 1 then positions = {x=getCreaturePosition(cid).x+1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 2 then positions = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y+1, z=getCreaturePosition(cid).z} elseif getPlayerLookDir(cid) == 3 then positions = {x=getCreaturePosition(cid).x-1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} end local tp = sqmTime*1000*(quant_sqm-1)+quant_hit*timeHit*1000 if tempo == tp then for k=1, #posAll do for j=0, 255 do pos_stack = {x=posAll[k][1].x,y=posAll[k][1].y,z=posAll[k][1].z,stackpos=j} removeTile = getThingfromPos(pos_stack) if removeTile.itemid == posAll[k][2] then doRemoveItem(removeTile.uid) end end end end end end function sendEffect241(cid, target) local position1 = {x=getPlayerPosition(cid).x, y=getPlayerPosition(cid).y, z=getPlayerPosition(cid).z} if isCreature(target) and isPlayer(cid) then doSendMagicEffect(position1, playerEffect241) end end EU pensava que a magia era asism, de atacar de longe, malz
  10. Curtir
    Capitao wyz deu reputação a Skydangerous em Chave q some em 15 dias   
    O problema é que este item, se o player tacar no chão, esconder na house .. na backpack ou fazer qualquer coisa com a chave. 
    Não estou conseguindo pensar uma maneira de fazer este sistema.. A única solução (pelo menos no meu conhecimento) é adicionar um durarion nele ou/e a partir do momento que ele comprar a chave setar uma storage com os.time() pra daqui 15 dias ao logar ou usar um onthink() caso de o tempo você faria uma busca na tabela  players_items, house_tiles e players_depot se existe o item .. e removendo. 
     
    sei la se tudo isso funcionaria haha
  11. Gostei
    Capitao wyz deu reputação a lordzetros em Baú SAO - Sistema de Quest   
    * Sobre o Sistema da Quest * 

     
    Para quem já assistiu Sword Art Oline vai ficar fácil de entender. Jogadores poderão fazer uma quest simples, porém, diferenciada. Funciona da seguinte forma:
    1 - Jogador terá que possuir uma chave para abrir o caminho de uma sala misteriosa e aparentemente cheia de tesouros e recompensas dentro de um baú
    2 - Abrindo a passagem, ele vai se deparar com um baú em sua espera, o interesse do ser humano é devastador, ele irá abrir sim!
    3 - Ao tentar abrir o baú, monstros serão invocados e a passagem será imediatamente fechada
    4 - De todos os monstros que serão invocados, terá um chefe que será responsável por permitir a saída dos jogadores para sala de recompensa e sair daquele lugar, APENAS matando ele, isso será possível
    5 - Após a morte do chefe, TODOS players na sala da quest serão teleportados para a área de recompensa configurada no script.
     
    Obs.: A quest tá configurada para ser feita em X minutos para TODO servidor, ou seja, se uma guild fez a quest e você configurou para ela ser feita novamente em 10 minutos, então, nenhum outro player poderá fazer a quest nesse intervalo, pois a storage armazenada é a do servidor.
     
    * Instalação * 
    VERSÃO TESTADA: 8.6 - TFS 0.4
    Para agilizar o processo, deixei como anexo todos os arquivos necessários, devidamente separados e organizados, caso queira baixar, o ViruScan dele está logo abaixo.
    Em data/actions/scripts/
    1° - Crie um arquivo chamado keySAO.lua e cole o seguinte código dentro:
     
    --[[ Script - Lordzetros Tibiaking - Lordzetros ]]-- local config = { parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente tempoFechar = 1, -- MINUTOS para a passagem fechar, caso não entrem APÓS abrirem a passagem } function remover_parede(conf) local parede = getTileItemById(conf.parede.pos, conf.parede.id) if (parede) then doRemoveItem(parede.uid, 1) doSendMagicEffect(conf.parede.pos, 10) end return true end function adicionar_parede(conf) local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end return true end function onUse(cid, item, fromPos, item2, toPos) if (item2.itemid == config.parede.id) then if (getGlobalStorageValue(config.strPassagem.storage) >= os.time()) then return doCreatureSay(cid, 'Precisa esperar ' .. config.strPassagem.tempo .. ' minuto para fazer a quest!', TALKTYPE_ORANGE_1) end doRemoveItem(item2.uid, 1) doSendMagicEffect(config.parede.pos, 10) doCreatureSay(cid, "A passagem foi aberta por "..getPlayerName(cid).."! Peguem a recompensa no bau, depressa!", TALKTYPE_ORANGE_1) doPlayerSendCancel(cid, "A passagem ira fechar em " ..config.tempoFechar.. " minuto!") addEvent(function() adicionar_parede(config) end, config.tempoFechar * 60 * 1000) doRemoveItem(item.uid, 1) end return true end  
    Em seguida, crie outro arquivo no mesmo local com o nome de bauSAO.lua e cole o código dentro:
    --[[ Script - Lordzetros Tibiaking - Lordzetros ]] local mti = {     [1] = {nome = 'Demon', pos = {x=955, y=935, z=6}}, -- [numero] = {nome = 'Nome Monstro', pos = 'POSICAO QUE IRÁ RESPAWNAR O MONSTRO'}     [2] = {nome = 'Demon', pos = {x=955, y=936, z=6}},     [3] = {nome = 'Demon', pos = {x=955, y=937, z=6}},     [4] = {nome = 'Demon', pos = {x=955, y=938, z=6}},     [5] = {nome = 'Demon', pos = {x=955, y=939, z=6}},     [6] = {nome = 'Demon', pos = {x=955, y=940, z=6}},     [7] = {nome = 'Demon', pos = {x=964, y=935, z=6}},     [8] = {nome = 'Demon', pos = {x=964, y=936, z=6}},     [9] = {nome = 'Demon', pos = {x=964, y=937, z=6}},     [10] = {nome = 'Demon', pos = {x=964, y=938, z=6}},     [11] = {nome = 'Demon', pos = {x=964, y=939, z=6}},     [12] = {nome = 'Demon', pos = {x=964, y=940, z=6}},     [13] = {nome = 'Loki', pos = {x=959, y=940, z=6}}, } local config = { unique = 17458, -- uniqueID que vai colocar no BAÚ no seu EDITOR DE MAPA! parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente } function adicionar_parede(conf)     local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id     if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end     return true end function onUse(cid, item, fromPos, item2, toPos)     if (item.uid == config.unique) then         if (getGlobalStorageValue(config.strPassagem.storage) >= os.time()) then return doCreatureSay(cid, 'Precisa esperar ' .. config.strPassagem.tempo .. ' minuto para fazer a quest!', TALKTYPE_ORANGE_1) end         doCreatureSay(cid, "Argh!! Sala com armadilha.", TALKTYPE_ORANGE_1)         adicionar_parede(config)         for _, cf in pairs(mti) do             doSummonCreature(cf.nome, cf.pos)         end         setGlobalStorageValue(config.strPassagem.storage, os.time() + config.strPassagem.tempo * 60)     end     return true end Adicione as seguintes linhas de código em data/actions/actions.xml
    <action uniqueid="17458" event="script" value="bauSAO.lua"/> <action itemid="IDdaKEY" event="script" value="keySAO.lua" /> 2° - Agora em data/creaturescripts/scripts
    Crie um arquivo chamado tpSAO.lua e cole o código dentro:
    --[[ Script - Lordzetros Tibiaking - Lordzetros ]] local config = { SupEsquerdo = {x=953, y=930, z=6}, -- posicao do canto SUPERIOR ESQUERDO da área que ficará a quest InfDireito = {x=966, y=941, z=6}, -- posicao do canto INFERIOR DIREITO da área que ficará a quest chefe = "Loki", -- Nome do BOSS, responsável por abrir passagem e liberar a recompensa no baú parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- id da parede   |||||   posicao dela posPremio = {x = 1263, y = 1128, z = 7}, -- posicao para area de recompensa quando os players matarem o boss msgSucesso = "Parabéns por passarem do desafio! Agora permitirei pegar algumas recompensas como reconhecimento de um otimo guerreiros que es!" -- Mensagem quando os players conseguirem matar o boss da sala } function getAllPlayersInArea(fromPosition, toPosition)         local players = {}         for _, pid in ipairs(getPlayersOnline()) do             local f = {x = fromPosition.x, y = fromPosition.y, z = fromPosition.z}             local t = {x = toPosition.x, y = toPosition.y, z = toPosition.z}             local min = (fromPosition.z > toPosition.z and toPosition.z or fromPosition.z)             for index = 0, math.abs(toPosition.z - fromPosition.z) do                 f.z = min + index                 t.z = min + index                 if (isInRange(getPlayerPosition(pid), f, t)) then                     table.insert(players, pid)                 end             end             end         return players     end  function remover_parede(conf)     local parede = getTileItemById(conf.parede.pos, conf.parede.id)     if (parede) then         doRemoveItem(parede.uid, 1)         doSendMagicEffect(conf.parede.pos, 10)     end     return true end function adicionar_parede(conf)     local parede = getThingFromPos(conf.parede.pos).itemid ~= conf.parede.id     if (parede) then return doCreateItem(conf.parede.id, 1, conf.parede.pos) and doSendMagicEffect(conf.parede.pos, 11) end     return true end function onDeath(cid)     local boss = getCreatureName(cid) == config.chefe     if boss then         doCreatureSay(cid, config.msgSucesso, TALKTYPE_ORANGE_1)         doSendMagicEffect(getCreaturePosition(cid), 49)         addEvent(function()             local players = getAllPlayersInArea(config.SupEsquerdo, config.InfDireito)             for _, jogador in ipairs(players) do                 doTeleportThing(jogador, config.posPremio)                 doSendMagicEffect(getPlayerPosition(jogador), 11)             end         end, 7000)     end     return true end Adicione a seguinte linha de código em data/creaturescripts/creaturescripts.xml
    <event type="death" name="tpSao" script="tpSAO.lua"/> Em data/creaturescripts/scripts/login.lua adicione esta linha de código abaixo do último registerCreatureEvent
     
    3° - Por fim, agora escolhe um monstro que será o chefe responsável por permitir que os jogadores saiam do local e que leve-os até a sala de recompensa após o derrotarem.
    Escolheu? Show, agora vá até o diretório dele em data/monster/pastaDoSeumonstro/arquivoDoSeuMonstro.xml e adicione essas linhas de códigos abaixo de alguma tag, no meu caso, utilizei abaixo da tag flags
    <script>     <event name="tpSao"/> </script> Segue foto para melhor entendimento: 

     
     
    * Explicação da configuração *
     
    Bom, apesar de está TUDO COMENTADO e AJUSTÁVEL, acho importante dá algumas explicações:
    1 - Configurou tudo nas pastas corretamente, colocou todas linhas de códigos necessárias e explicadas? Beleza, você tá quase lá.
    2 - Coloque em um baú no seu editor de mapa um UNIQUEID que será responsável por identificar que aquele BAÚ é da quest, segue imagem:

    Aconselho não modificar o valor, pois é muito improvável que já esteja sendo utilizado em seu servidor.
     
    3 - Agora entrando na parte dos scripts:
    No arquivo keySAO.lua localizado em data/actions/scripts/
    local config = { parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente tempoFechar = 1, -- MINUTOS para a passagem fechar, caso não entrem APÓS abrirem a passagem } Configure o id da parede que impedirá a passagem dos players e o jogador utilizará a chave nela para passar! Não esqueça de configurar a posição dela também, deixe a mesma que você colocou no mapa.
    Configure o storage que será responsável por permitir ou não jogadores fazerem a quest em X minutos.
    Configure o tempo que o player terá para passar para dentro da sala antes que a passagem se feche, no script tá 1 minuto.
     
    No arquivo bauSAO.lua localizado em data/actions/scripts/
    local mti = {     [1] = {nome = 'Demon', pos = {x=955, y=935, z=6}}, -- [numero] = {nome = 'Nome Monstro', pos = 'POSICAO QUE IRÁ RESPAWNAR O MONSTRO'}     [2] = {nome = 'Demon', pos = {x=955, y=936, z=6}},     [3] = {nome = 'Demon', pos = {x=955, y=937, z=6}},     [4] = {nome = 'Demon', pos = {x=955, y=938, z=6}},     [5] = {nome = 'Demon', pos = {x=955, y=939, z=6}},     [6] = {nome = 'Demon', pos = {x=955, y=940, z=6}},     [7] = {nome = 'Demon', pos = {x=964, y=935, z=6}},     [8] = {nome = 'Demon', pos = {x=964, y=936, z=6}},     [9] = {nome = 'Demon', pos = {x=964, y=937, z=6}},     [10] = {nome = 'Demon', pos = {x=964, y=938, z=6}},     [11] = {nome = 'Demon', pos = {x=964, y=939, z=6}},     [12] = {nome = 'Demon', pos = {x=964, y=940, z=6}},     [13] = {nome = 'Loki', pos = {x=959, y=940, z=6}}, } local config = { unique = 17458, -- uniqueID que vai colocar no BAÚ no seu EDITOR DE MAPA! parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- ID da parede |||| POSIÇÃO que ela irá ser criada strPassagem = {storage = 22338, tempo = 1}, -- Storage que vai controlar o tempo de intervalo para a quest ||||| tempo em MINUTOS de intervalo para os players fazer a quest novamente } Configure os nomes e posições que os monstros irão respawnar, e repare que deixei apenas 1 diferenciado chamado 'Loki', pois foi o monstro que escolhi como CHEFE 
    Configure o uniqueID que será utilizado no baú, recomendo não mexer nessa parte
    Configure novamente o ID da parede que irá bloquear a passagem e a mesma posição (use a mesma coisa da configuração anterior)
    Configure novamente o storage e tempo que permitirá os jogadores fazerem a quest em X minutos (use a mesma coisa da configuração anterior)
     
    No arquivo tpSAO.lua em data/creaturescripts/scripts/
    local config = { SupEsquerdo = {x=953, y=930, z=6}, -- posicao do canto SUPERIOR ESQUERDO da área que ficará a quest InfDireito = {x=966, y=941, z=6}, -- posicao do canto INFERIOR DIREITO da área que ficará a quest chefe = "Loki", -- Nome do BOSS, responsável por abrir passagem e liberar a recompensa no baú parede = {id = 9784, pos = {x = 959, y = 941, z = 6, stackpos = 1}}, -- id da parede   |||||   posicao dela posPremio = {x = 1263, y = 1128, z = 7}, -- posicao para area de recompensa quando os players matarem o boss msgSucesso = "Parabéns por passarem do desafio! Agora permitirei pegar algumas recompensas como reconhecimento de um otimo guerreiros que es!" -- Mensagem quando os players conseguirem matar o boss da sala } Configure o canto superior esquerdo e inferior direito, é de EXTREMA importância isso, pois será responsável por verificar os jogadores na sala da quest e teleportá-los, segue imagem:

                                                  Coloque as posições corretamente de cada canto.
     
    Configure o nome do chefe que você escolheu para completar a quest, o monstro diferenciado que falamos lá em cima, certo?
    Configure novamente o ID da parede que irá bloquear a passagem e a mesma posição (use a mesma coisa da configuração anterior)
    Configure a posição do prêmio, isto é, a posição que o player será teleportado quando matar o CHEFE, a posição da SALA DE RECOMPENSAS ou seja lá o que queira fazer após os jogadores matarem o chefe.
    Configure a mensagem, caso queira, de quando os jogadores matarem o CHEFE da sala.
     
     
    * Observações finais e anexos para download * 
     
    Digo logo que é um script simples, porém bastante trabalhoso de ser configurado, visto que faz-se necessário a instalação de alguns arquivos, mas não deixa de ser simples! 
    A ideia que tive foi quando estava lembrando do anime, e como estou voltando aos poucos com Tibia (aprendendo bastante), tive a ideia de fazer isso, pois como gostava bastante de jogar em Baiak e modos semelhantes, isso daqui pode ser bastante útil. Ah! E deixe-me alertá-lo, é um sistema simples que não está 100% como eu desejava, portanto, quando tiver tempo estarei atualizando e deixando com mínimo de incoerência possível no funcionamento dele. 
    POR FAVOR, faça o trabalho de ler as configurações do script, está tudo organizadinho para que você configure lá e deixe da maneira mais prática possível. Acredito que isso é tudo, abraços, \o.

     
    Download dos arquivos zipados: Arquivos - Quest Baú SAO - Lordzetros.zip
    Scan do arquivo: https://www.virustotal.com/pt/file/10e6bf2be0ccb33838a75198e5f822c1c8888f4c8652dcfc5235f87260a7582a/analysis/1540133843/ 
  12. Gostei
    Capitao wyz deu reputação a Cat em Sistema de teleports por waypoints (descobrir áreas no mapa)   
    Waypoint teleport system é um dispositivo de teletransporte. O principal objetivo de um waypoint é fornecer viagens rápidas entre as áreas que um jogador descobriu. Esse sistema foi desenvolvido por Oen432. (Apenas traduzi)
     
    Demonstração:
     
    Instalação
    Abra data/movements/movements.xml. Adicione XML: <movevent event="StepIn" actionid="4236" script="waypoints.lua" /> Abra data/creaturescripts/creaturescripts.xml. Adicione XML: <event type="ModalWindow" name="WaypointsModal" script="modal_windows.lua"/> Faça o Download de waypoints.rar abaixo, no final do tópico. Copie waypoints.lua para data/movements/scripts/waypoints.lua. Copie modal_windows.lua para data/creaturescripts/scripts/modal_windows.lua.  
    Configuração Todas as configurações estão em - data/movements/scripts/waypoints.lua.
    WINDOW_ID - ignore.
    BUTTON_ACCEPT - ignore.
    BUTTON_CLOSE - ignore.

    WAYPOINTS_STORAGE - base storage id, mude se já está sendo usado esse (garanta que de WAYPOINTS_STORAGE para WAYPOINTS_STORAGE + Number of waypoints, as storages não estejam sendo utilizadas em outro código).

    WAYPOINTS - lista de waypoints disponíveis
    name - nome que será mostrado na lista e quando o waypoint for ativado
    position - posição do piso no mapa, aqui é onde o jogador será teleportado
     
    Download
    waypoints-1_0_0.rar
     
  13. Gostei
    Capitao wyz deu reputação a ITALOx em System Skin 8.60   
    Salve TIBIA KING!
    Hoje trago pra vocês um sistema de skin.
    Como funciona? ao clicar em um certo item, ele ganhará uma skin.
    ------------------------------------------------------
    vou explicar direitinho tudo. espero que entenda. se não, comente ai que eu poderei da suporte.
    Então vamos lá.
     

    Em actions/scripts
    Crie um arquvio chamado skin.lua -- ou o nome da skin/personagem.
    Depois abra, e copie e cole isso aqui dentro da pasta
    function onUse(cid, item, fromPosition, itemEx, toPosition)     if item.itemid == 7379 and (getPlayerStorageValue(cid, 8002) == EMPTY_STORAGE) then         doPlayerAddOutfitId(cid, 44, 3)         setPlayerStorageValue(cid, 8002, 1)         doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYDAMAGE)         doPlayerSendTextMessage(cid,22,"Parabéns, você recebeu a Outfit!")         doRemoveItem(item.uid, 1)     else         doPlayerSendCancel(cid,"Você já recebeu essa roupa!")     end end em item.itemid == 7379 mude para o id para o seu item. 
    Em (getPlayerStorageValue(cid, 8002) -- mude de acordo se você for colocar mais SKINS. tipo tá 8002 ali, coloque 8003 8004 e por ai vai.
        mude também no setPlayerStorageValue(cid, 8002, 1) -- mude para outras skin também!
     
    Feito isso, depois vá em actions.xml e adicione isso lá.
    <action itemid="13646" script="skin.lua"/> Mude a id do item.
    Depois de ter feito tudo isso, vamos agora em pasta do servidor/data/XML/outfit.xml
     abra ele e adicione isso aqui lá:   
    <outfit id="44" premium="no" default="0">         <list gender="0-3" lookType="1250" name="NOME DA SKIN"/>     </outfit>     Antes disse. der espaço entrem o <outfits> e </outfits> e cole dentro!
        Mude o looktype para a roupa/skin que você deseja colocar para o personagem ganhar.
        outfit id="44" > Mude aqui. para 1. 2 3 4 5 6, vai até aonde tu achar bom.
        em List gender="0-3" mude para 0-1 ou para o que você quiser.

    Pronto, feito tudo ISSO é sucesso meu bom. se eu errei algo, perdão ?
     
     
    Créditos pelo esse sistema: DBOHP Eu (por postar.)
  14. Gostei
    Capitao wyz deu reputação a Kyle Bellini em Spell - Piertotum Locomotor   
    E aí, pessoal!
     
    Esses dias eu estava na vibe Harry Potter e antes de dormir acabei tendo a ideia de fazer uma spell inspirada na magia Piertotum Locomotor. Criei ela, e decidi compartilhar com vocês auhauah
     
    Funcionamento:
    Dois golems serão invocados e aprisionarão o inimigo com pedras durante um certo período. (R.I.P qualidade)
     

     
    Vamos ao código (deixei alguns comentários explicando, mas está bem fácil de compreender o funcionamento, se tiver alguma dúvida pode comentar no tópico).
    Primeiro, crie um arquivo.lua, e cole o script dentro:
     
    Feito isso, no arquivo spells.xml recomendo que deixem o parâmetro (needtarget="1"). Exemplo de tag:
    <instant name="Piertotum Locomotor" words="Piertotum Locomotor" lvl="200" mana="1000" needtarget="1" prem="0" exhaustion="10000" groups="1,1500" icon="87" needlearn="0" event="script" value="hogwarts/piertotum locomotor.lua"> <vocation id="1"/> <vocation id="2"/> </instant>  
  15. Gostei
    Capitao wyz deu reputação a Bruno Minervino em Compilando TFS 1.3 com vídeo-aula   
    Compilando TFS 1.3 no Windows

    1. Baixe os softwares requeridos
     
    Para compilar o The Forgotten Server no Windows, você vai precisar:
     
    Visual Studio 2015 (Compilador)
    TFS SDK v3.2 (libs)
    Libs do Boost C++ (32-bits, 64-bits)
     
    2. Instale os softwares requeridos

    Após ter baixado os softwares listados na etapa acima, comece instalando o Visual Studio e Boost C++. Extraia o TFS SDK v3.2 em qualquer pasta do seu computador e execute o arquivo "register_tfssdk_env.bat" para setar a variável de ambiente do local onde está o TFS SDK, assim nosso compilador irá encontrar as libs quando começar a compilar. Mova o arquivo "register_boost_env.bat" da pasta do TFS SDK para a pasta onde você instalou as libs do Boost C++ e execute-o (se você seguiu os passos do instalador, está esta na pasta chamada boost_1_62_0).

    3. Baixe as sources

    Se você possuir o Git Client instalado, você poderá clonar a última cópia com este comando:
     
    > git clone https://github.com/otland/forgottenserver.git  
    Se você não possuir o Git Client instalado, você poderá baixar a última cópia do The Forgotten Server através do link: https://github.com/otland/forgottenserver/archive/master.zip

    4. Compilando

    Procure o diretório vc14 na pasta do The Forgotten Server que você baixou, e abra o arquivo "theforgottenserver.sln". Isso deverá iniciar o Visual Studio 2015 e você estará pronto para continuar.

    Para configurar a compilação, navegue para Build -> Configuration Manager no menu superior. Um popup deverá aparecer onde você poderá escolher entre "Release" ou "Debug" para compilar, escolha também para qual Plataforma você irá compilar: 32-bits (Win32) ou 64-bits (x64).

    Para iniciar a compilação, abra o menu Build novamente e clique em Build Solution (Ctrl + Shift + B).

    5. Vídeo-aula

    https://www.youtube.com/watch?v=Zfil84FMJsk

    6. Créditos
    Mark - Autor do tutorial e do projeto The Forgotten Server
    Bruno Minervino - Tradução e gravação do vídeo
     
  16. Gostei
    Capitao wyz deu reputação a deivaoo em [MODULE] Extended Opcodes SEM SOURCES   
    Será possível o uso de opcodes em servidores sem o código fonte?
     
    Agora é sim com esse novo mod que eu fiz e disponibilizarei à vocês!
     
     
    Conversação de servidor para client!
     
    Muito fácil de usar e de instalar!
     
    Sem mais delogas, vamos logo ao conteúdo!
     
     
     
     
    1. Crie um arquivo com o nome ModOpcodes.lua na pasta lib do seu servidor;

    2. Coloque o seguinte código dentro dele:
     
     
     
     
     
     
     
     
     
     
    -- By Hopus -- function doPlayerSendModOpcode(cid, port, param) doPlayerSendCancel(cid, '#<=>#ModOpcode#<=>#'..port..'#<&>#'..param) end 3. Agora coloque a pasta mod_opcodes na pasta modules de seu client;

    4. Abra o arquivo textmessage.lua, localizado na pasta modules/game_textmessage de seu client;

    5. Procure esse código:
     
     
     
     
     
     
     
    elseif string.find(text, '12&,') then modules.cdBar.cdBar.toolTipChange(text) return end 6. Adicione, logo abaixo, essa linha:
     
     
     
     
     
     
     
    if text:find('#<=>#ModOpcode#<=>#') then return end 7. Opcodes instalados com sucesso!

    Como usar? Simples!
     
    [No client]
     
    [Exemplo]



    [Obs.: A função a ser conectada deve ter UM PARÂMETRO, seja ele nomeado como quiser.]
     
     
     
     
    Bom, é isso...
     
     
    Espero que seja de grande utilidade e ajude muita gente!
     
    Abraços e até a próxima!

     
  17. Gostei
    Capitao wyz deu reputação a Endless em Gerador de Outfits Automática para o Site   
    Olá meus senhores, tem muita gente que pede serviços em relação a Gerar Outfits Animadas do seu cliente, o que muitos não sabem é que existe esse sistema de Gerar as Outfit animadas gratuitamente na internet e ele foi desenvolvido pelo Gesior.pl (Polones), então todo o crédito deste tutorial em relações a códigos vão para ele.

    Primeiro de tudo, o que é esse Sistema de Gerar Outfits Animadas?

    Basicamente é 1 Sistema Web que vai ler o teu tibia.spr / tibia.dat e seu items.otb e gerar todas suas outfit do seu cliente em forma de frames e na hora de exibir o sistema utiliza uma script em php que fica responsável por montar 1 gif utilizando esses frames.
    O resultado é algo como isto:



    Existe 2 formas de utilizar o sistema, eu vou ensinar a mais fácil, para quem quiser vou deixar o link do código fonte e vocês podem simplesmente estar clonando o repositório e fazer suas alterações a vontade. (Sim, ele é open source e.e).

    Código Fonte: https://github.com/gesior/open-tibia-library 

    Explicando como utilizar o sistema:

    1° acesse o link => https://outfit-images.ots.me/generator/

    Você deve visualizar algo como isto: 



    Percebam que ele vai pedir os seguintes dados: 
    -Client Version:
    -Sprite file:
    -Dat file:
    -Otb file:

    Antes de sair adicionando, precisamos configurar nosso cliente para que o sistema consiga reconhecer ele. Abra seu cliente no object builder. Agora vá na área de effects e apague todos os efeitos. Sim apague TODOS, agora vá até Tools->Spriter Otimizer



    Clique em start e você vai ter 1 retorno parecido com isto:



    Agora aperta CTRL+SHIFT+S, vamos salvar esse cliente em 1 pasta separada (você só vai usar ele pra esse sistema, então fique tranquilo, você não vai apagar o original). Na hora de salvar deixe desmarcado as 3 opções (Extended, Transparency, Improved Animations).



    Tendo feito isso, agora vamos voltar para o site. 
    Em Client Version você vai digitar a versão de seu cliente. Exemplo: Se for 8.60 digite 860
    Em sprite file você vai selecionar o tibia.spr do seu cliente que você exportou (esse sem efeitos)
    Em dat file você vai selecionar o tibia.dat do seu cliente que você exportou (esse sem efeitos)
    Em otb file você vai selecionar o items.otb do seu servidor.

    Agora clique em Load Files. Você deve ter 1 retorno parecido com isto:



    Agora clique em Generate Imagens e ele vai começar a gerar os frames das suas outfits.



    Ao terminar ele vai efetuar sozinho o download das outfits.




    Agora acesse este repositório no github e baixe os arquivos: https://github.com/gesior/open-tibia-library/tree/master/tools/colored-outfit-images-generator

    Tendo feito o download, você vai extrair a pasta outfits.zip que você baixo e extrair a pasta que você clonou o repositório. Ao extrair o arquivo outfits.zip você vai encontrar 1 pasta chamada outfits_anim, dentro dela você deve ter algo como isto:



    Cada pasta é referente a 1 looktype do seu cliente.
    Agora copie a pasta 'outfits_anim' que está dentro da pasta outfits que você extraiu e cole dentro da pasta do repositório que foi clonado. Ficando assim:



    Pronto, agora você somente precisa deixar essa pasta em 1 servidor web e utilizar a mesma via requisição. Exemplo:
    Se você for exibir uma outfit, você pode exibir da seguinte forma:
    <img src="http://seudominio.com/nomedapastaqueestaoosarquivos/animoutfit.php/?id=270">  
    Esse id será o looktype que você deseja. Lembrando que: Você pode colocar 1 script pra puxar a outfit de cada vocação e chamar esse diretório, ele vai exibir a imagem já com o diretório correto.
    Sugestão de uso: Para derivados de NTO/DBO e afins, você pode utilizar para exibir as outfits de transformações de cada Personagens, algo como isto:



     
    Outra opção é exibir na lista de Ranking no menu da direita (Normalmente Tibia Classico faz isso)
    A criatividade fica por conta de vocês.
     
    Créditos:
    Gesior.pl por todo o código e disponibilizar para a comunidade em 1 Forum Gringo
    A mim por disponibilizar o tutorial para a comunidade.
  18. Gostei
    Capitao wyz deu reputação a LeoTK em [Limite Skill] Colocar Limite em Skills   
    Salve galera bom demorou mas consegui trazer esse conteúdo para vocês com ajuda de diversos amigos créditos no final do tópico.
     
    Bom vamos lá é um conjunto de configurações + script que vai permitir todas as skills do servidor ficar limitada até 250
     
    Primeiramente vamos até o config.lua do servidor e deixa a Rate Magic em 0.01
    Ficando assim 
    rateMagic = 0.01 Logo depois disso vamos ao vocation.xml e procure por
    manamultiplier="1.2" Use o notepad++ Aperte ctrl + H para substituir todos os manamultiplier="1.2" por manamultiplier="1.0"
    manamultiplier="1.0" Essa modificação vai permitir a sua magic level chegar a 250
    Depois faça isso com as demais skills Club / Sword / Axe / Distance / Shield / Fishing - Mude todos para 1.0
     
    Depois disso agora vamos instalar os scripts para criar limites para as skills não bugarem e também vamos configurar a rate do magic level para não bugar também
     
    Vá em data/creaturescripts/creaturescripts.xml e adicione essas tags
    <!-- Skills Block / Stages Skills --> <event type="advance" name="skillblock" event="script" value="skillblock.lua"/> <event type="login" name="skillblock2" event="script" value="skillblock2.lua"/> <event type="death" name="skillblock3" event="script" value="skillblock3.lua"/> <event type="advance" name="skillblock4" event="script" value="skillblock4.lua"/> <event type="login" name="skillblock6" event="script" value="skillblock6.lua"/> Agora abra o login.lua e adicione isso
    registerCreatureEvent(cid, "skillblock") registerCreatureEvent(cid, "skillblock2") registerCreatureEvent(cid, "skillblock3") registerCreatureEvent(cid, "skillblock4")  
    Crie o arquivo skillblock.lua e adicione isso dentro
    Lembre-se coloque um numero anterior ao limite ou seja o limite de fist e 250 mas no maxLevel esta 254
     
     
    Crie o Arquivo skillblock2.lua e adicione isso dentro
     
     
    Crie o Arquivo skillblock3.lua e adicione isso dentro
     
     
    Crie o Arquivo skillblock4.lua e adicione isso dentro
     
     
    Crie o Arquivo skillblock5.lua e adicione isso dentro
     
     
    Crie um Arquivo skillblock6.lua e adicione isso dentro
     
     
    Algumas imagens mostrando funcionando no meu caso eu configurei para enviar a mensagem em uma channel caso se interessar nesse sistema basta seguir o link Clicando Aqui
     


     
    Créditos:
    @movie
    @Coltera
    @lordzetros
    @Yan Liima
    @aspira
    Night Wolf
  19. Obrigado
    Capitao wyz deu reputação a Kyle Bellini em (Resolvido)[C]: in function 'doSendMagicEffect'   
    Caso o do amigo acima não funcione, teste com esse:
     
    local voc = {716, 717, 718, 719, 720, 721, 722, 723, 724, 725} -- ID das vocações que poderão usar o Pergaminho. local corpse = {3058} local id = 26684 -- Id do edo pergaminho local edo = { ["[EDO TENSEI] Anbu"] = {hp = 50000, maxhp = 50000, corpse = 3058, chance = 100}, -- Nome do Edo, HP do Edo quando summoned, max hp do edo , corpo do edo, chance de falhar. } function onUse(cid, item, frompos, item2, topos) if(not(isInArray(voc, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 25, "Voce nao tem a vocacao nescessaria") end if(not(isInArray(corpse, item2.itemid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "voce precisa usar o pergaminho em um corpse") doSendMagicEffect(getThingPos(cid), 21) return true end local perga = doPlayerAddItem(cid, id, 1) for edo_tensei, v in pairs(edo) do if item2.itemid == v.corpse then if math.random(0,100) <= v.chance then doSendMagicEffect(getThingPos(cid), 21) doPlayerSendTextMessage(cid, 27, "".. edo_tensei .. " foi selado nesse pergaminho.") doRemoveItem(item.uid, 1) doRemoveItem(item2.uid, 1) doItemSetAttribute(perga, "namepet", edo_tensei) doItemSetAttribute(perga, "description", "Neste pergaminho foi selado um ".. edo_tensei ..".") doItemSetAttribute(perga, "lifepet", v.hp) doItemSetAttribute(perga, "maxlifepet", v.maxhp) else doPlayerSendTextMessage(cid, 27, "O pergaminho falhou") end end end return true end  
  20. Curtir
    Capitao wyz deu reputação a Mask Ghoul em (Resolvido)[C]: in function 'doSendMagicEffect'   
    tenta ae 
    local voc = {716, 717, 718, 719, 720, 721, 722, 723, 724, 725} -- ID das vocações que poderão usar o Pergaminho. local corpse = {3058} local id = 26683 -- Id do edo pergaminho local edo = { ["[EDO TENSEI] Anbu"] = {hp = 50000, maxhp = 50000, corpse = 3058, chance = 100}, -- Nome do Edo, HP do Edo quando summoned, max hp do edo , corpo do edo, chance de falhar. } function onUse(cid, item, frompos, item2, topos) if(not(isInArray(voc, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 25, "Voce nao tem a vocacao nescessaria") end if(not(isInArray(corpse, item2.itemid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "voce precisa usar o pergaminho em um corpse") doSendMagicEffect(toPosition, CONST_ME_POFF) return true end local perga = doPlayerAddItem(cid, id, 1) for edo_tensei, v in pairs(edo) do if item2.itemid == v.corpse then if math.random(0,100) <= v.chance then doSendMagicEffect(toPosition, CONST_ME_POFF) doPlayerSendTextMessage(cid, 27, "".. edo_tensei .. " foi selado nesse pergaminho.") doRemoveItem(item.uid, 1) doRemoveItem(item2.uid, 1) doItemSetAttribute(perga, "namepet", edo_tensei) doItemSetAttribute(perga, "description", "Neste pergaminho foi selado um ".. edo_tensei ..".") doItemSetAttribute(perga, "lifepet", v.hp) doItemSetAttribute(perga, "maxlifepet", v.maxhp) else doPlayerSendTextMessage(cid, 27, "O pergaminho falhou") end end end return true end
  21. Curtir
    Capitao wyz deu reputação a samuelandrade45 em Como colocar exhaustion corretamente em suas spells   
    Olá pessoal do TibiaKing, hoje venho aqui trazer um mini tutorial de como colocar o exhaustion corretamente em suas spells, bastante gente utiliza o exaustion que está no proprio xml, mas por lá acontece alguns erros exemplo: se tiver uma spell com 8000 de exaustion, e outra de 2000 e você vai no seu servidor e usa a spell com 8000 de exhaustion, tem que esperar o tempo dela pra usar qualquer outra, o método que venho trazer aqui ele funciona corretamente e ainda avisa no console quanto tempo falta para usar a spell, sem mais delongas vamos lá!
     
    1- vá até o seu XML procure a magia que quer por o exhaustion
    exemplo:
    perceba que ela tem um exhaustion definido ali em cima, para esse método funcionar corretamente e recomendado deixar o exhaustion do XML em 1000.
     
    forma correta:
     
    2- feito isso vamos ate a pasta onde se encontra seu script e abra ele:
    como exemplo irei utilizar uma spell de área que empurra os players próximos!
     
     
    3- com a spell aberta, logo no inicio da spells vamos inserir as seguintes linhas de código:
     
    ficando assim:
     
    4- por fim, logo abaixo do function onCastSpell(cid, var) vamos adicionar as seguintes linhas de código:
     
     
    ficando assim:
     
    Pronto com isso o exhaution já foi adicionado a sua spell, faça bom proveito:
    Print:
     

  22. Curtir
    Algem Me Pode arrumar algum scrip casino  igual ou semelhante à imagem

  23. Curtir
    Capitao wyz deu reputação a Neeg em Os melhores packs 860 Antigos e Atuais ...   
    Achei isso desnecessário mano, creio eu que o dono do tópico está com boas intenções. se você não vai ajudar apenas não comente, nem todo mundo e tão mercenário a ponto de cobrar por tudo.

Informação Importante

Confirmação de Termo