Roksas 846 Postado Maio 18, 2013 Share Postado Maio 18, 2013 (editado) Forje System Como vai galerinha, tive uma ideia bem legal com a ajuda do vital900, é para dar um pouco mais de RPG ao seu servidor.No caso é um sistema de Forja, no qual um NPC te leva para uma ilha, nela você deve levar junto um minério (Iron Ore) e um Hammer, você vai aquecer o Iron Ore jogando-o no coal basin e clicando no assoprador, em seguida se obter chance vai criar um metal derretido, e aí você deve bater nele, novamente se obter chance poderá ser transformado num item, este item faz com que seus equipamentos subam + 1 de Ataque, Defesa e Armor. Instalação Vá em data/actions/scripts, copie algum arquivo da pasta e cole, ou crie, renomeie para forge_system.lua em seguida adicione isso dentro dele, usando algum editor de texto: function onUse(cid, item, frompos, item2, topos) local cfg = { pos = {x = 1021, y = 1032, z = 7, stackpos = 255}, minerioTo = 5880, meltedTo = 5892, burnTo = 12404, hammerId = 4846, refinerId = 8299, secsInterval = 10, } -- // -- // -- // -- // -- // -- // -- // -- if item.actionid == 17000 then if getPlayerStorageValue(cid, 17001) > os.time() then doPlayerSendTextMessage(cid, 27, "Aguarde um intervalo de "..getPlayerStorageValue(cid, 17001) - os.time().." segundos para forjar novamente.") return true end if getThingFromPos(cfg.pos).itemid <= 0 then doPlayerSendTextMessage(cid, 20, "Você deve colocar no coal basin, um material de forja.") return true end if getThingFromPos(cfg.pos).itemid == cfg.minerioTo then doCreateItem(getItemIdByName(getItemName(getThingFromPos(cfg.pos).uid)), {x = cfg.pos.x + 1, y = cfg.pos.y, z = cfg.pos.z, stackpos = cfg.pos.stackpos}) doRemoveItem(getThingFromPos(cfg.pos).uid, 1) doSendMagicEffect({x = cfg.pos.x + 1, y = cfg.pos.y - 4, z = cfg.pos.z}, 15) addEvent(doSendMagicEffect, 1 * 1000, {x = cfg.pos.x + 1, y = cfg.pos.y - 2, z = cfg.pos.z}, 15) addEvent(doSendMagicEffect, 2 * 1000, {x = cfg.pos.x + 1, y = cfg.pos.y, z = cfg.pos.z}, 15) setPlayerStorageValue(cid, 17001, os.time() + cfg.secsInterval) local function removeOre() doRemoveItem(getThingfromPos({x = cfg.pos.x + 1, y = cfg.pos.y, z = cfg.pos.z, stackpos = cfg.pos.stackpos}).uid, 1) if math.random(100) < 75 then doCreateItem(cfg.meltedTo, {x = cfg.pos.x - 3, y = cfg.pos.y - 4, z = cfg.pos.z, stackpos = cfg.pos.stackpos}) doPlayerSendTextMessage(cid, 20, "Você derreteu o seu minério, bata ele na bigorna para virar um refinador.") else doPlayerSendTextMessage(cid, 20, "O seu minério material se queimou, tente novamente.") doSendMagicEffect({x = cfg.pos.x + 2, y = cfg.pos.y, z = 7}, 67) doCreateItem(cfg.burnTo, {x = cfg.pos.x, y = cfg.pos.y, z = cfg.pos.z}) end return true end addEvent(removeOre, 2 * 1000, true) end return true end if item.itemid == cfg.hammerId and item2.itemid == cfg.meltedTo then if math.random(100) < 40 then doPlayerSendTextMessage(cid, 20, "Você bateu muito forte no material derretido, ele se quebrou.") doTransformItem(getThingFromPos({x = cfg.pos.x - 3, y = cfg.pos.y - 4, z = cfg.pos.z, stackpos = cfg.pos.stackpos}).uid, 2225) else doPlayerSendTextMessage(cid, 20, "Você forjou um refinador, utilize ele em seus equipamentos.") doTransformItem(getThingFromPos({x = cfg.pos.x - 3, y = cfg.pos.y - 4, z = cfg.pos.z, stackpos = cfg.pos.stackpos}).uid, 8299) end return true end if item.itemid == cfg.refinerId and item2.itemid ~= cfg.refinerId then if isCreature(item2.uid) == true then return false end -- // FUNCTIONS REFINERS // -- function getAttack(v) if getItemAttribute(v.uid,'attack') == nil then doItemSetAttribute(v.uid, "attack",getItemInfo(v.itemid).attack) end return tonumber(getItemAttribute(v.uid,'attack')) end function getArmor(v) if getItemAttribute(v.uid,'armor') == nil then doItemSetAttribute(v.uid, "armor",getItemInfo(v.itemid).armor) end return tonumber(getItemAttribute(v.uid,'armor')) end function getDefense(v) if getItemAttribute(v.uid,'defense') == nil then doItemSetAttribute(v.uid,"defense", getItemInfo(v.itemid).defense) end return tonumber(getItemAttribute(v.uid,'defense')) end function setDefense(v,number) return doItemSetAttribute(v.uid, "defense", number) end function setAttack(v,number) return doItemSetAttribute(v.uid, "attack", number) end function setArmor(v,number) return doItemSetAttribute(v.uid, "armor", number) end -- // -- // -- // -- // -- // -- // -- doPlayerSendTextMessage(cid, 20, "Você acaba de refinar um "..getItemNameById(item2.itemid)..". O seu item refinador foi removido.") doSendMagicEffect(getCreaturePosition(cid), 13) doRemoveItem(item.uid, 1) if getAttack(item2) > 1 then setAttack(item2, tonumber(getAttack(item2)) + 1) elseif getArmor(item2) > 1 then setArmor(item2, tonumber(getArmor(item2)) + 1) elseif getDefense(item2) > 1 then setDefense(item2, tonumber(getDefense(item2)) + 1) end end return true end Volte para a pasta (data/actions), abra com o bloco de notas o arquivo actions.xml, e dentro dele adicione essa tag: <action actionid="17000" itemid="4846;8299" event="script" value="forje.lua" /> Agora siga para a pasta data/npc, copie algum arquivo da pasta e cole, renomeie para Forger e adicione dentro usando o bloco de notas: <?xml version="1.0" encoding="UTF-8"?> <npc name="Forger" script="forge_npc.lua" walkinterval="0" floorchange="0"> <health now="150" max="150"/> <look type="71" head="114" body="119" legs="114" feet="114" corpse="2212"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. If you want forge say {forge}, need HAMMER and IRON ORE!"/> </parameters> </npc> Abra a pasta scripts dentro de data/npc, copie algum arquivo da pasta e cole, renomeie para forge_npc e adicione dentro usando algum editor de texto: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end function getPlayersInArea(area) local players = {} for x = area.fromx,area.tox do for y = area.fromy,area.toy do for z = area.fromz,area.toz do local m = getTopCreature({x=x, y=y, z=z}).uid if m ~= 0 and isPlayer(m) then table.insert(players, m) end end end end return players end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local cfg = { area = {fromx = 1015, fromy = 1028, z = 7, tox = 1028, y = 1019, z = 7}, forgePosition = {x = 1018, y = 1034, z = 7}, templePosition = {x = 999, y = 1018, z = 7}, hammerId = 4846, minerioTo = 5880, needMoney = 1000, maxTime = 1, } if msgcontains(msg, 'forge') or msgcontains(msg, 'forjar') then if getPlayersInArea(cfg.area) >= 1 then selfSay('Have another player forging, wait someones minutes', cid) talkState[talkUser] = 0 return false end if getPlayerStorageValue(cid, 14500) > os.time() then selfSay('You can forge only 1x each '..cfg.maxForge..'hours.', cid) talkState[talkUser] = 0 return false end selfSay('Do you want to forge your equipaments? Need hammer and iron ore.', cid) talkState[talkUser] = 1 elseif msgcontains(msg, 'yes') and talkState[talkUser] == 1 then if getPlayerItemCount(cid, cfg.hammerId) >= 1 and getPlayerItemCount(cfg.minerioTo) then if doPlayerRemoveMoney(cid, cfg.needMoney) then doTeleportThing(cid, cfg.forgePosition) addEvent(doTeleportThing, cfg.maxTime * 60 * 1000, cid, cfg.templePosition) doPlayerSendTextMessage(cid, 20, "Aparir de agora você tem "..cfg.maxTime.." minutos para forjar.") addEvent(doPlayerSendTextMessage, cfg.maxTime * 60 * 1000, cid, 20, "Seu tempo de forja acabou, você foi teleportado para o templo.") selfSay('Here you are.', cid) else selfSay('What? You need '..cfg.needMoney..', hammer and iron ore.', cid) end end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Configuração No código de actions forge_system.lua, procure por este trecho e edite conforme citado abaixo: local cfg = { pos = {x = 1021, y = 1032, z = 7, stackpos = 255}, minerioTo = 5880, meltedTo = 5892, burnTo = 12404, hammerId = 4846, refinerId = 8299, secsInterval = 10, } pos = Coordenadas do coal basin do mapa postado para download minerioTo = O itemid do minério que vai ser derretido, (iron ore) meltedTo = ItemId do minério derretido burnTo = itemId do minério queimado hammerId = Item ID do martelo que vai bater na bigorna refinerId = O ID do item final, oque vai refinar os equips secsInterval = A cada quantos segundos pode fazer uma tentativa de forge. Na tag do actions.xml você encontra isso: <action actionid="17000" itemid="4846;8299" event="script" value="forje.lua" /> Mude apenas aonde está itemid, coloque na ordem: (O ItemID do Hammer e do Refiner derretido).No código de NPC, no caso o arquivo forge_npc.lua, você encontra esse trecho: local cfg = { area = {fromx = 1015, fromy = 1028, z = 7, tox = 1028, y = 1019, z = 7}, forgePosition = {x = 1018, y = 1034, z = 7}, templePosition = {x = 999, y = 1018, z = 7}, hammerId = 4846, minerioTo = 5880, needMoney = 1000, maxTime = 1, maxForge = 24, } area = Coloque as coordenadas do canto superior esquerdo da área de forja e do canto inferior direito forgePosition = coloque as coordenadas da sala de forja templePosition = pra aonde vai ser teleportado após acabar o tempo, no caso um Templo hammerId = O mesmo do forge_system.lua, coloque o Item ID do hammer (martelo) minerioTo = Coloque o Item ID do iron ore needMoney = Quanto de dinheiro precisa pra ir pra sala de forja maxTime = Quantos minutos no máximo pode ficar na sala de forja maxForge = A cada quantas horas pode entrar na sala de forja, coloquei 24, ou seja, 1x ao dia. Demonstração Créditos GIF: curruwilliam Finalizações Muito obrigado pela atenção galera e um forte abraço ao vital900 que me ajudou com o mapa e as ideias. Qualquer dúvida e/ou crítica estou aqui para atendê-los. Espero que façam um bom uso do mesmo Download Forge Mapa - Scan Forge MapaDownload Forge System - Scan Forge System Editado Abril 9, 2015 por CyberBot 1579091 reagiu a isso 1 Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/ Compartilhar em outros sites More sharing options...
kaiotp 42 Postado Maio 18, 2013 Share Postado Maio 18, 2013 Parabéns pelo script Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522073 Compartilhar em outros sites More sharing options...
curruwilliam 28 Postado Maio 18, 2013 Share Postado Maio 18, 2013 Interessante Obrigado por partilha.. Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522074 Compartilhar em outros sites More sharing options...
gabyzinho1 3 Postado Maio 18, 2013 Share Postado Maio 18, 2013 Mais uma vez um grande script do grande Roksas parabéns irmão rep+ garantido Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522075 Compartilhar em outros sites More sharing options...
Roksas 846 Postado Maio 18, 2013 Autor Share Postado Maio 18, 2013 Obrigado galera, é pra ressuscitar o nosso querido RPG, façam bom uso Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522076 Compartilhar em outros sites More sharing options...
masdead 372 Postado Maio 18, 2013 Share Postado Maio 18, 2013 Boa Roksas vou usa-lo em meu server Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522090 Compartilhar em outros sites More sharing options...
vital900 570 Postado Maio 18, 2013 Share Postado Maio 18, 2013 Mando bem em man! Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522103 Compartilhar em outros sites More sharing options...
Roksas 846 Postado Maio 18, 2013 Autor Share Postado Maio 18, 2013 Obrigado galerinha, foi uma boa ideia nossa hein vital900 Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522106 Compartilhar em outros sites More sharing options...
Starliks 2 Postado Maio 19, 2013 Share Postado Maio 19, 2013 (editado) Aqui deu o seguinte erro; se puder ver oque eh :S Editado Maio 19, 2013 por Starliks Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522557 Compartilhar em outros sites More sharing options...
Roksas 846 Postado Maio 19, 2013 Autor Share Postado Maio 19, 2013 Você deve ter copiado errado, rsrs. Vê de novo. Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522572 Compartilhar em outros sites More sharing options...
Starliks 2 Postado Maio 19, 2013 Share Postado Maio 19, 2013 (editado) Roksas Consegui arruma mais agora ao da use na bigorna nada acontece :S Editado Maio 19, 2013 por Starliks Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522617 Compartilhar em outros sites More sharing options...
Souzuke 2 Postado Maio 19, 2013 Share Postado Maio 19, 2013 Ótimo script,ótima idéia parabéns. Sistema bem legal,que será de grande utilidade. Obrigado. Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522629 Compartilhar em outros sites More sharing options...
Roksas 846 Postado Maio 19, 2013 Autor Share Postado Maio 19, 2013 Roksas Consegui arruma mais agora ao da use na bigorna nada acontece :S Não é pra dar use na bigorna, olha a GIF no final do tópico, vai derreter o IRON ORE, quando derreter vai aparecer ele em cima da bigorna, vc pega o HAMMER, de ITEM ID 4846 e clica no metal, se tiver sucesso vira o refinador, rs. Ótimo script,ótima idéia parabéns. Sistema bem legal,que será de grande utilidade. Obrigado. Obrigado cara, sucesso aí Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522638 Compartilhar em outros sites More sharing options...
PsyMcKenzie 150 Postado Maio 20, 2013 Share Postado Maio 20, 2013 Sem dúvidas, ótimo sistema! Parabéns Roksas! Obrigado por compartilhar, está sempre ajudando os usuários. Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1522730 Compartilhar em outros sites More sharing options...
dalvorsn 268 Postado Maio 27, 2013 Share Postado Maio 27, 2013 Bom, posso ver que tens melhorado bem em nivel de scripting, está no caminho certo, continue assim. Agora que está melhor em scripting, precisa começar a se atentar a tempo de processamento, quanto menos gasto de memoria melhor. Por exemplo, voce pega varias vezes o thing da cfg.pos, ficaria mais leve salvar esse thing numa variavel, sendo assim usaria a função getThingFromPos apenas uma vez. Identação e organização também são de suma importancia, e não misture portugues com ingles nos seus scripts, ou faça em ingles ou portugues, como 'minerioTo' por exemplo. De qualquer maneira, meus parabéns, e continue estudando. Cya Link para o comentário https://xtibia.com/forum/topic/214597-rpg-forge-system/#findComment-1525292 Compartilhar em outros sites More sharing options...
Posts Recomendados