Histórico de Curtidas
-
robi123 recebeu reputação de juvelino em Remover Vocação do Account Managermuda isso fromvoc="nil"
resolveu meu problema pode resolver o seu
@Bazires
-
robi123 recebeu reputação de Doidoooh em [TFS 1.x] AutoLoot Systemvou testar... no meu ot é assim
-- Events
for i = 1, #events do
player:registerEvent(events)
player:registerEvent("AutoLoot")
end
não player death nem droploot..
nao precisa colocar isso neh ?
-
robi123 recebeu reputação de Andersen96 em (Resolvido)(Resolvido) RSA key ajudem!Aonde que eu baixo isso e coloca para poder compilar?
@Comedinha
eu consegui resolver este problema baixando este arquivo...
meu sistema é 64bits..
https://sourceforge.net/projects/openssl/?source=typ_redirect
Ai coloquei ele dentro da pasta do DEV c++
-
robi123 recebeu reputação de thelifeofpbion em AJUDA [Error - IOMapSerialize::loadMapBinary]Eu consegui resolver este problema no meu mapa fazendo o seguinte..
eu tinha a Base Sql zerada como backup.. ai peguei ela e substitui pela que estava usando ai parou o erro
-
robi123 recebeu reputação de premii em (Resolvido)(Resolvido) RSA key ajudem!Aonde que eu baixo isso e coloca para poder compilar?
@Comedinha
eu consegui resolver este problema baixando este arquivo...
meu sistema é 64bits..
https://sourceforge.net/projects/openssl/?source=typ_redirect
Ai coloquei ele dentro da pasta do DEV c++
-
robi123 recebeu reputação de thelifeofpbion em Clicar em X item Ser teleportado e retira item da BP@pablobion consegue adicionar para nao teleportar se tiver com batle ou pk algo assim?
-
robi123 deu reputação a Sekk em Safe Mod para tibia 8.6@robi123 vlw mano, criei ate um topico pq eu tava com um problema e vc arrumou uahsudha
Mas outra coisa...
@xWhiteWolf To usando esse sistema q o robi colocou, mas tipo, eu to com a mãozinha aberta, o target é PK, n tem como deixar possivel pra atacar ele msm estando com a mão aberta? ou também, ao fechar a mão e atacar o pk, pegar pz(espada vermelha cruzada sabe?) vlw
Obs.: Tive que adicionar um ultimo return true no script, ficando assim:
function onCombat(cid, target) if(target and isPlayer(target) and getPlayerSecureMode(cid) == 0) then doPlayerSendCancel(cid, "Turn secure mode off if you really want to attack unmarked players.") return false elseif(target and isPlayer(target) and getPlayerSecureMode(cid) == 1) then return true end return true end
-
robi123 deu reputação a
PedroSTTem (Resolvido)Ao matar monstro, some item?Creaturescripts.xml
<event type="death" name="Boss1" script="boss1.lua"/> Script
function onDeath(cid, corpse, deathList) local item = 1233 -- id do item que sera removido local pos = {x=623, y=377, z=8, stackpos=1} -- pos do item que sera removido local time = 5 -- minutos em que a passagem ficara aberta local rmv = getThingfromPos(pos) doRemoveItem(rmv.uid, 1) doBroadcastMessage("A passagem secreta foi aberta" , 20) addEvent(criar_item, 60000 * time) end function criar_item() local item = 1233 -- id do item que sera removido local pos = {x=623, y=377, z=8, stackpos=1} -- pos do item que sera removido doCreateItem(item, 1, pos) doBroadcastMessage("A passagem secreta foi aberta" , 20) end Registre a tag na XML do monstro
<script> <event name="Boss1"/> </script>
-
robi123 deu reputação a
PedroSTTem [AJUDA] Portafunction onUse(cid, item, frompos, item2, topos) local item1 = 2323 -- id do item 1 local item2 = 2327 -- id do item 2 local item3 = 2326 -- id do item 3 local item4 = 2325 -- id do item 4 local item5 = 2324 -- id do item 5 local qnt1 = 1 -- qnt do item1 necessaria local qnt2 = 1 -- qnt do item2 necessaria local qnt3 = 1 -- qnt do item3 necessaria local qnt4 = 1 -- qnt do item4 necessaria local qnt5 = 1 -- qnt do item5 necessaria if getPlayerItemCount(cid , item1 ) >= qnt1 then if getPlayerItemCount(cid , item2 ) >= qnt2 then if getPlayerItemCount(cid , item3 ) >= qnt3 then if getPlayerItemCount(cid , item4 ) >= qnt4 then if getPlayerItemCount(cid , item5 ) >= qnt5 then doTeleportThing(cid, topos) doPlayerRemoveItem(cid, item1, qnt1) else doPlayerSendCancel(cid, "voce n tem o item") end else doPlayerSendCancel(cid, "voce n tem o item") end else doPlayerSendCancel(cid, "voce n tem o item") end else doPlayerSendCancel(cid, "voce n tem o item") end else doPlayerSendCancel(cid, "voce n tem o item ou sua quantidade certa") end return true end
-
robi123 deu reputação a robprudente em (Resolvido)[SUPORTE] Gesior 2012 & Account Manager.Brother facil,
vai no config.php do site procura isso
$config['site']['newchar_towns'][0] = array(1); $config['site']['newchar_towns'][1] = array(1,2); e muda; $config['site']['newchar_towns'][0] = array(2); $config['site']['newchar_towns'][1] = array(2,2); o id 2 é thais ai ve qual cidade vc quer e só trocar !!!
vlw
-
robi123 deu reputação a Orochi Elf em Porque nunca fizeram um gerador de loot melhor para open tibia ?Não é dificil de fazer não por C++, é até tranquilo na verdade. Daria pra configurar as coisas por XML na hora de configurar o loot do monstro. Quando eu tiver tempo, faço essa edição pra vocês :D
-
robi123 deu reputação a Dyego em Corrigindo Erro Unsupported Version Oject Builder.Bom Galera fiz um tutorialzinho de como arrumar esse erro chato do Object Builder
Erro: Unsupported Version
OBS: Sem mais delongas, irei postar Tutorias em videos do Object Builder, se te ajudar clique em Gostei ai.
Video Tutorial:
Obrigado a todos, creio que está na área correta pois é relacionado a Sprites.
-
robi123 deu reputação a
PedroSTTem (Resolvido)[PEDIDO] SpellsSpell 01
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -3.2, -0 , -2.2, -0) function onCastSpell(cid, var) local waittime = 0.5 -- Tempo de exhaustion local storage = 1000 local efeito = 3 -- efeito da spell if exhaustion.check(cid, storage) then doPlayerSendCancel(cid, "You are exhausted") return false end local position1 = {x=getThingPosition(getCreatureTarget(cid)).x, y=getThingPosition(getCreatureTarget(cid)).y, z=getThingPosition(getCreatureTarget(cid)).z} local target = {x=getThingPosition(getCreatureTarget(cid)).x, y=getThingPosition(getCreatureTarget(cid)).y, z=getThingPosition(getCreatureTarget(cid)).z} doSendMagicEffect(position1, efeito) doTeleportThing(cid, target) exhaustion.set(cid, storage, waittime) return doCombat(cid, combat, var) end Spell 02 -- crédito xWhiteWolf
local function doPushCreature(target, cid) if target > 0 then if not isNpc(target) then local position = getThingPosition(cid) local fromPosition = getThingPosition(target) local x = ((fromPosition.x - position.x) < 0 and -1 or ((fromPosition.x - position.x) == 0 and 0 or 1)) local y = ((fromPosition.y - position.y) < 0 and -1 or ((fromPosition.y - position.y) == 0 and 0 or 1)) local toPosition = {x = fromPosition.x + x, y = fromPosition.y + y, z = fromPosition.z} if doTileQueryAdd(target, toPosition) == 1 and getTileInfo(toPosition).house == false then doTeleportThing(target, toPosition, true) end end end end local spell = {} spell.config = { [3] = { damageType = 1, areaEffect = 2, area = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } }, [2] = { damageType = 1, areaEffect = 2, area = { {0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0}, {0, 1, 0, 2, 0, 1, 0}, {0, 1, 0, 0, 0, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0} } }, [1] = { damageType = 1, areaEffect = 2, area = { {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 2, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0} } } } spell.combats = {} for _, config in ipairs(spell.config) do local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, config.damageType) setCombatParam(combat, COMBAT_PARAM_EFFECT, config.areaEffect) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -4, 0, -4.7, 0) function onTargetCreature(cid, target) doPushCreature(target, cid) end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") setCombatArea(combat, createCombatArea(config.area)) table.insert(spell.combats, combat) end function onCastSpell(cid, var) for n = 1, #spell.combats do local alvo = {x=getThingPosition(getCreatureTarget(cid)).x, y=getThingPosition(getCreatureTarget(cid)).y, z=getThingPosition(getCreatureTarget(cid)).z} addEvent(doCombat, (n * 120), cid, spell.combats[n], var) addEvent(doTeleportThing, 3000, cid, alvo) end return true end
Spell 03
Spell script
Agora vá em creaturescripts
Creaturescripts.xml e registre a tag
<event type="think" name="Paralize" event="script" value="paralize.lua"/> Crie um arquivo.lua na pasta creaturescrips/scripts e cole isso dentro
function onThink(cid, interval) local storage = 23432 -- deixe a mesma que na script da spell if getPlayerStorageValue(cid, storage) == 1 then doCreatureSetNoMove(cid, true) doPlayerSendTextMessage(cid, 22, "voce esta paralisado") return true end end Abra o login.lua na msm pasta e registre a tag.
registerCreatureEvent(cid, "Paralize")
-
robi123 deu reputação a xWhiteWolf em Aura Bold SystemFala galera do TK, hoje vim compartilhar com vocês um sistema que eu comecei a fazer com a ajuda de um amigo ... Bem, ele é viciado em Skyrim e esses dias a gente ficou quase 10 horas sem internet , e foi nesse meio tempo de tédio que eu decidi fazer um sistema baseado nas Bold Weapons do Skyrim e ele foi me dando uns toques pra eu poder melhorar o script.
Se você nunca jogou Skyrim ou não se lembra eu vou explicar oque é:
Um sistema que você conjura uma arma feita de magia referente a sua classe mas se vc tentar tirar ela da mão, ela some.
O Script em si é bem simpleszinho mas vc tem que fazer diversas alterações no server pra que ele fique 100% então aqui vamos nós:
Antes de tudo eu gostaria de dizer que eu altamente recomendo que você crie novos itens no seu Item Editor pra evitar problemas futuros mas use as sprites dos itens que eu irei passar aqui nesse tópico.
Abra seu weapons.xml e adicione as seguintes linhas (note que vc deve procurar os id's antes pra ver se já não existe ele declarado, caso haja, delete as linhas antigas e adicione as novas):
<instant name="Weapon Aura" words="Aurum" lvl="100" manapercent="60" aggressive="0" exhaustion="2000" needlearn="0" event="script" value="especiais/weaponaura.lua"> </instant> aqui vc vai configurar a palavra que vc diz pra conjurar a magia, o level dela e a porcentagem de mana que vai consumir ao usar a spell.
Ainda na pasta spells vá em scripts e crie uma nova pasta chamada especiais e crie um arquivo chamado weaponaura.lua que deverá conter o seguinte:
Agora você tem que garantir que o player não irá dar trade nos itens, para isso vá em creaturescripts\scripts e crie um arquivo chamado untrade.lua e coloque isso dentro dele:
Feito isso você deve ir no creaturescripts.xml e adicionar essa linha aqui:
<event type="traderequest" name="UntradeAura" event="script" value="untrade.lua"/> agora abra o login.lua que fica em creaturescripts\scripts e antes do ultimo return true adicione isso daqui:
---- AURA ITENS ---- registerCreatureEvent(cid, "UntradeAura")
______________________________________________________________________
Se você conseguiu fazer tudo até agora isso significa que você sabe ler. Se alguma coisa deu merda volte ao início e releia tudo com atenção!
_______________________________________________________________________
Eu pessoalmente achei o sistema super bacana, ainda mais pra servidores sérios.. Testei aqui no meu TFS 0.3.6 (Crying Damson) e rodou tudo perfeitamente... quaisquer erros poste aqui no tópico que eu tento ajudar a resolver, mas é claro que na medida do possível, to sem tempo pra viver então não me peça pra adaptar o script pra sua versão 7.6 ou 10.1... ele foi feito pra 8.54!
Espero que pelo menos alguém use esse sistema pq deu uma trabalheira danada pra fazer, e claro, se te ajudei, fortaleça com um REP que eu vou saber que você gostou do sistema.
Grato.
Mais uma coisa e talvez a mais importante do tópico: Esse script foi feito por mim, Night Wolf ou White Wolf (como vcs preferirem), e é conteudo >>> EXCLUSIVO <<<< do TIBIA KING. Não postem sem minha permissão que eu prometo continuar fazendo coisas legais pra vocês :angry2:.
Abraço do Night.
PS: Pra que o sistema funcione vc deve deixar as duas mãos vazias e falar Aurum, o script vai checar sua classe e te dar a weapon referente, caso vc seja Knight ele vai te dar a arma do tipo cujo sua proficiência seja a melhor.. (Em outras palavras: pegar a sua maior skill, se for sword vai te dar sword e assim por diante.. No caso de empate ele vai te dar sword e no caso de empate entre axe e club ele vai te dar club.) Note que não vai ser possível remover o item nem pra BP nem pra outro slot e nem pro chão... e também não é possível dar trade no item. Vou anexar umas imagens aqui pro pessoal ver melhor:
-
robi123 deu reputação a CoyoteStark em (Resolvido)[PEDIDO] Remover parede temporariamente por alavancafunction onUse(cid, item, fromPosition, itemEx, toPosition) piece1pos = {x=623, y=377, z=8, stackpos=1} local tempo = 2*60*1000 -- tempo para parede voltar getpiece1 = getThingfromPos(piece1pos) if item.uid == 8107 and item.itemid == 9827 and getpiece1.itemid == 8518 then doRemoveItem(getpiece1.uid,1) doTransformItem(item.uid,item.itemid+1) doPlayerSendTextMessage(cid,22,"acho que ouvi um barulho, uma passagem deve ter se aberto.") addEvent(doCreateItem, tempo, 8518, piece1pos) addEvent(doTransformItem, tempo, item.uid,9827) elseif item.uid == 8107 and item.itemid == 9828 then doTransformItem(item.uid,item.itemid-1) addEvent(doCreateItem, 2*60*1000, item.itemid, piece1pos) else doPlayerSendTextMessage(cid,22,"Não é possivel realizar esta ação.") end return 1 end if item.uid == 8107 >> Unique Id da Alavanca
item.itemid == 9827 >> ID da alavanca
getpiece1.itemid == 8518 then >> ID da parede que vai ser removida
addEvent(doCreateItem, tempo, 8518, piece1pos) >> neste local voce deve colocar novamente o ID da parede q vai ser criada novamente depois de X tempo
piece1pos = {x=623, y=377, z=8, stackpos=1} >>> Posição da parede
local tempo = 2*60*1000 -- tempo para parede voltar, neste caso, 2 minutos
addEvent(doTransformItem, tempo, item.uid,9827) << aqui vc coloca novamente o id da alavanca q voltara para a posição original depois do tempo configurado.
-
robi123 deu reputação a
PedroSTTem Stamina sqm-------------- Config by PedroSTT ---------- local storage = 6452 local time = 1 -- quantos minutos para pisar no tile e restaurar novamente ---------- Script by: Adriano Swatt -------- local maxstamina = 2520 -- quantidade máxima de Stamina (Não sei se é este valor mesmo) local qtdd = 1 -- quantidade de Stamina é adicionada local tempo = 270 -- em segundos para cada regeneração local tileid, action = 3182, 12129 -- ID do Piso de Stamina, ActionID usada no Piso ----------- FIM DAS CONFIGURAÇÕES ----------- function onStepIn(cid, item, position, fromPosition) local getpos = getPlayerPosition(cid) local tilepos = getTileItemById(getpos, tileid).actionid local getsta = getPlayerStamina(cid) if getsta < maxstamina and isPlayer(cid) then addEvent(GetStamina, 100, cid) else doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, "Sua stamina já está cheia.") end return true end function onStepOut(cid, item, position, fromPosition) local dura = time * 60000 stopEvent(GetStamina) setPlayerStorageValue(cid, storage+ os.time+ dura, 1) return true end function GetStamina(cid) local getpos = getPlayerPosition(cid) local dura = time * 60000 local tilepos = getTileItemById(getpos, tileid).actionid local getsta = getPlayerStamina(cid) if tilepos == action then if getsta < maxstamina and isPlayer(cid) then if getPlayerStorageValue(cid, storage) == -1 then doPlayerSendCancel(cid, "Sua stamina está subindo.") setPlayerStamina(cid, getsta + qtdd) addEvent(GetStamina, tempo * 1000, cid) else doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, "aguarde") end else doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, "Sua stamina já está cheia.") end end return true end
-
robi123 deu reputação a
PedroSTTem (Resolvido)Update em script teleportfunction onUse(cid, item, frompos, item2, topos) pos = {x=547, y=332, z=7} local storage = 3425 -- storage if item.itemid == 4852 then doPlayerSendCancel(cid,"Parabéns! Você ganhou acesso a VIP 1.") doTeleportThing(cid,pos) setPlayerStorageValue(cid, storage, 1) doRemoveItem(item.uid,1) else doPlayerSendCancel(cid,"Fail !") end return 1 end
-
robi123 deu reputação a
PedroSTTem [Ajuda] Script para Broadcast tibia 10.98function onSay(player, words, param) if not getPlayerFlagValue(player, PlayerFlag_CanBroadcast) then return true end print(" " .. param .. ".") for _, targetPlayer in ipairs(Game.getPlayers()) do targetPlayer:sendPrivateMessage(player, param, TALKTYPE_BROADCAST) end return false end Pode testar novamente ?
-
robi123 deu reputação a KotZletY em Script Animação da Outfit@WizavIgor você deve criar um efeito para cada direção e então colocar pro script detectar para qual lado seu char está olhando, e então colocar para o script lançar o efeito para aquela direção. Acima de tudo, tem que ter os efeitos para cada direção. Hahaha
-
robi123 deu reputação a Garou em Perfect Upgrade SystemNome: Perfect Upgrade System
Tipo: Biblioteca, Action, Sistema
Autor: Oneshot
Essa é a versão final do Perfect Refine System ou Perfect Upgrade System criado por mim.
É um sistema construído em cima de funções em POO (orientação a objetos), o que o torna muito versátil, possibilitando a outros programadores/scripters criarem seus próprios sistemas com base na biblioteca.
A função do sistema é simples. Não passa de um sistema de refino, presente em todos os servidores, onde você usa um item em um equipamento e este fica mais forte e ganha um nome caracterizando o nível de força - bem clichê - mas muito interessante.
Meu sistema é um pouco diferente dos outros, pois possui algumas características exclusivas, listadas abaixo:
O nível máximo configurável é praticamente ilimitado O sistema funciona com armas de combate corpo-a-corpo, bows e crossbows. O refino pode falhar, não acontecendo nada, regredindo o nível ou resetando ele. Há um sistema nativo de broadcasts, que são enviados quando um jogador consegue refinar um equipamento até um certo nível ou maior. As chances são configuradas manualmente e sua randomização é muito precisa. Há dois modos de instalar o sistema em seu servidor, o primeiro é baixar a pasta com os scripts necessários e apenas copiar as chaves nos arquivos XMLs ou então seguir o curto tutorial de instalação.
Crie um arquivo chamado upgradesystem.lua na pasta data/lib e copie o conteúdo abaixo:
--[[ PERFECT UPGRADE SYSTEM 2.0 Criado por Oneshot É proibido a venda ou a cópia sem os devidos créditos desse script. ]]-- UpgradeHandler = { levels = { [1] = {100, false, false}, [2] = {90, false, false}, [3] = {75, false, false}, [4] = {60, true, false}, [5] = {45, true, false}, [6] = {30, true, false}, [7] = {25, true, false}, [8] = {20, true, true}, [9] = {15, true, true}, [10] = {10, true, true}, [11] = {10, true, true}, [12] = {5, true, true} }, broadcast = 7, attributes = { ["attack"] = 2, ["defense"] = 1, ["armor"] = 1 }, message = { console = "Trying to refine %s to level +%s with %s%% success rate.", success = "You have upgraded %s to level +%s", fail = "You have failed in upgrade of %s to level +%s", downgrade = "The upgrade level of %s has downgraded to +%s", erase = "The upgrade level of %s has been erased.", maxlevel = "The targeted %s is already on max upgrade level.", notupgradeable = "This item is not upgradeable.", broadcast = "The player %s was successful in upgrading %s to level +%s.\nCongratulations!!", invalidtool = "This is not a valid upgrade tool.", toolrange = "This upgrade tool can only be used in items with level between +%s and +%s" }, tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, }, isEquipment = function(self) local weaponType = self:getItemWeaponType() return ((weaponType > 0 and weaponType < 7) or self.item.armor ~= 0) end, setItemName = function(self, name) return doItemSetAttribute(self.item.uid, "name", name) end, chance = function(self) local chances = {} chances.upgrade = (self.levels[self.item.level + 1][1] or 100) chances.downgrade = (self.item.level * 5) chances.erase = (self.item.level * 3) return chances end } function UpgradeHandler:new(item) local obj, ret = {} obj.item = {} obj.item.level = 0 obj.item.uid = item.uid for key, value in pairs(getItemInfo(item.itemid)) do obj.item[key] = value end ret = setmetatable(obj, {__index = function(self, index) if _G[index] then return (setmetatable({callback = _G[index]}, {__call = function(self, ...) return self.callback(item.uid, ...) end})) else return UpgradeHandler[index] end end}) if ret:isEquipment() then ret:update() return ret end return false end function UpgradeHandler:update() self.item.level = (tonumber(self:getItemName():match("%+(%d+)")) or 0) end function UpgradeHandler:refine(uid, item) if not self.item then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.notupgradeable) return "miss" end local tool = self.tools[item.itemid] if(tool == nil) then doPlayerSendTextMessage(uid, MESSAGE_EVENT_DEFAULT, self.message.invalidtool) return "miss" end if(self.item.level > #self.levels) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.maxlevel:format(self.item.name)) return "miss" end if(self.item.level < tool.range[1] or self.item.level >= tool.range[2]) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.toolrange:format(unpack(tool.range))) return "miss" end local chance = (self:chance().upgrade + tool.info.chance) doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.console:format(self.item.name, (self.item.level + 1), math.min(100, chance))) if(tool.info.removeable == true) then doRemoveItem(item.uid, 1) end if chance * 100 > math.random(1, 10000) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_ORANGE, self.message.success:format(self.item.name, (self.item.level + 1))) if (self.item.level + 1) >= self.broadcast then doBroadcastMessage(self.message.broadcast:format(getCreatureName(uid), self.item.name, (self.item.level + 1))) end self:setItemName((self.item.level > 0 and self:getItemName():gsub("%+(%d+)", "+".. (self.item.level + 1)) or (self:getItemName() .." +1"))) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item.level > 0 and getItemAttribute(self.item.uid, key) or self.item[key]) + value) end end return "success" else if(self.levels[self.item.level][3] == true and (self:chance().erase * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.erase:format(self.item.name)) self:setItemName(self.item.name) for key, value in pairs(self.attributes) do if self.item[key] > 0 then doItemSetAttribute(self.item.uid, key, self.item[key]) end end elseif(self.levels[self.item.level][2] == true and (self:chance().downgrade * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.downgrade:format(self.item.name, (self.item.level - 1))) self:setItemName((self.item.level == 1 and self.item.name or self:getItemName():gsub("%+(%d+)", "+".. (self.item.level - 1)))) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item[key] + value * (self.item.level - 1))) end end else doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.fail:format(self.item.name, (self.item.level + 1))) end return "fail" end end Crie um arquivo chamado upgrade.lua em data/actions/scripts e cole o conteúdo abaixo:
function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end local obj = UpgradeHandler:new(itemEx) if(obj == false) then return doPlayerSendCancel(cid, UpgradeHandler.message.notupgradeable) end local status = obj:refine(cid, item) if status == "success" then --doSendAnimatedText(toPosition, "Success!", COLOR_GREEN) doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) elseif status == "fail" then --doSendAnimatedText(toPosition, "Fail!", COLOR_RED) doSendMagicEffect(toPosition, CONST_ME_POFF) else doSendMagicEffect(toPosition, CONST_ME_POFF) end return true end No arquivo actions.xml, cole a seguinte linha:
<action itemid="8306" event="script" value="upgrade.lua"/> Para adicionar mais níveis de refino no sistema, edite a seguinte tabela:
levels = { [1] = {100, false, false}, [2] = {90, false, false}, [3] = {75, false, false}, [4] = {60, true, false}, [5] = {45, true, false}, [6] = {30, true, false}, [7] = {25, true, false}, [8] = {20, true, true}, [9] = {15, true, true}, [10] = {10, true, true} }, Por padrão, ela já está configurado como na maioria dos MMORPGs, 10 níveis de refino, com chances de sucesso, regressão e "quebra". Mas se você quiser, por exemplo, adicionar mais dois níveis, siga o modelo, sempre colocando uma vírgula no final com exceção da última linha da tabela:
levels = { [1] = {100, false, false}, [2] = {90, false, false}, [3] = {75, false, false}, [4] = {60, true, false}, [5] = {45, true, false}, [6] = {30, true, false}, [7] = {25, true, false}, [8] = {20, true, true}, [9] = {15, true, true}, [10] = {10, true, true}, [11] = {10, true, true}, [12] = {5, true, true} }, O primeiro valor é chance de sucesso, o segundo se o item pode regredir na tentativa e o terceiro é se o item para "quebrar" (perder todo o nível de refino). Para criar novas ferramentas (itens) de refinar, configure a tabela abaixo:
tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, }, Seguindo o mesmo esquema da tabela anterior, vírgulas em todas as linhas com exceção da última, seguindo o modelo abaixo. Por exemplo, uma ferramenta de ID 8303 que refine do level +6 ao +10, que dê 10% de chance bônus e que seja finita, eu faço assim:
tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, [8310] = {range = {6, 10}, info = {chance = 10, removeable = true}} }, Em breve vídeo de demonstração com sistema em funcionamento.
Perfect Upgrade System.rar
-
robi123 deu reputação a Snowsz em (AJUDA) ERROR: Unable to send extended opcode 1, extended opcodes are not enabledJá vi isso mas não lembro como resolver, sorry.
-
robi123 recebeu reputação de Dark Seer em (Resolvido)(Resolvido) RSA key ajudem!Aonde que eu baixo isso e coloca para poder compilar?
@Comedinha
eu consegui resolver este problema baixando este arquivo...
meu sistema é 64bits..
https://sourceforge.net/projects/openssl/?source=typ_redirect
Ai coloquei ele dentro da pasta do DEV c++
-
robi123 deu reputação a fiordy em Safe Mod para tibia 8.6Ai Robiii, a forma que tu fez funcionou pra mim, muito obrigado mano!! Eu tava compilando aqui por isso demorei a responder mas a forma que tu postou eu consegui compilar e está funcionando corretamente! Muito obrigado mesmo, reputado!
-
robi123 recebeu reputação de fiordy em Safe Mod para tibia 8.6@fiordy
quer postar seu luascript.ccp e luascript.h para eu ver?
ou tentar postar qual o erro ?
-
robi123 deu reputação a Vodkart em Rank por gold [Dinheiro no Banco]é uma talk que mostra os 5 mais ricos do serve... no caso que tem mais gold em balance(bank)