Histórico de Curtidas
-
Vabrindox recebeu reputação de premii em [Pedido] Tile que pode passar com x item sem removerfunction onStepIn(cid, item, position, fromPosition) local id,amount = 2160,1 if isPlayer(cid) and getPlayerItemCount(cid, id) < amount then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, 25, "Voce so pode passar se tiver " .. amount .. " " .. getItemNameById(id) .. ".") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end return true end
-
Vabrindox deu reputação a Cat em OpenCoreMMO - Tibia 8.60 em C#!O OpenCoreMMO é um emulador de servidor MMORPG gratuito e de código aberto escrito em C#.
Baseia-se no forgotten server (OpenTibia).
Para se conectar ao servidor, você pode usar OTClient ou OpenTibiaUnity para a versão 8.6.
Lista de funcionalidades!
Leitura da estrutura de arquivos OTB e OTBM Carregando OTBM Tile Area, Towns e Waypoints Carregando Áreas de Spawn LogIn e LogOut Player no jogo Todos os movimentos do jogador Conexão multijogador Spawn e Respawn Monsters Combate PvM Depot Bate-papos -Guilds -Canais Públicos -Canais de pilhagem e morte Lista VIP Combate PvP Sistema NPC Lua Scripting C# Scripting
Tecnologias:
C# .Net 5 Database support: InMemory, MySQL, SQL Server and SQLite Console Debug Logging XUnit Testing
Amostra:
[spoiler]
[/spoiler]
Como rodar?
Suporte para mysql e sqlite, para rodar em seu PC veja este guia rápido:
https://caioavidal.gitbook.io/opencoremmo/how-to-run
Acompanhe o projeto em:
Github:
https://caioavidal.gitbook.io/opencoremmo/
https://github.com/caioavidal/OpenCoreMMO
Trello:
https://trello.com/b/JnOJ9yn5/opencoremmo
TibiaKing:
-
Vabrindox recebeu reputação de Coul em [Pedido] Alguem pode me passar um codigo de npc que só conversa?na pasta npc criar Historiador.xml ou entao outro nome de sua preferencia se for trocar tem que trocar no xml tbm, a msg inicial pode ser trocada aqui!
<?xml version="1.0" encoding="UTF-8"?> <npc name="Historiador" script="historiador.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Ola Player voce gostaria de saber da {historia}?"/> </parameters> </npc> em scripts criar historiador.lua
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) -- By Vabrindox if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'historia') then -- By Vabrindox selfSay('Essa e a segunda msg que eu estou falando, para saber mais fale {Vabrindox}!', cid) talkState[talkUser] = 1 elseif talkState[talkUser] == 1 then if msgcontains(msg, 'vabrindox') then selfSay('O vabrindox faz scripts noobs para os noobs, haha!', cid) talkState[talkUser] = 0 end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
Vabrindox recebeu reputação de neighbourhood em Como eu coloco essa Door no meu ot?Qual tfs vc tá usando? Eu testei aqui e está 100% vc configurou as posições no script? E no remeres só troque o uniqueid que é a última opção e n actionid.
local pos_frente = {x=99, y=122, z=7} local pos_atras = {x=99, y=124, z=7} local lvMin = 50 local horizontal = true local vertical = false -
Vabrindox recebeu reputação de Igorzerah em [Pedido] Tile que pode passar com x item sem removerfunction onStepIn(cid, item, position, fromPosition) local id,amount = 2160,1 if isPlayer(cid) and getPlayerItemCount(cid, id) < amount then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, 25, "Voce so pode passar se tiver " .. amount .. " " .. getItemNameById(id) .. ".") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end return true end
-
Vabrindox recebeu reputação de caique889 em [Pedido] Tile que pode passar com x item sem removerfunction onStepIn(cid, item, position, fromPosition) local id,amount = 2160,1 if isPlayer(cid) and getPlayerItemCount(cid, id) < amount then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, 25, "Voce so pode passar se tiver " .. amount .. " " .. getItemNameById(id) .. ".") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end return true end
-
Vabrindox recebeu reputação de Gnius em [AJUDA] Como baixar o EXP da pescaTenta isso ae e vê se da erro
Tem esse link tbm caso n funcione:
-
Vabrindox recebeu reputação de Igorzerah em [AJUDA] You cannot use this object.O script carrega sem dar erro? Se sim o problema deve ser no próprio item, vc teria que editar ele pelo Item editor.
Exemplo:
http://prntscr.com/hd5uc4
-
Vabrindox recebeu reputação de Igorzerah em Função de movimentar o char sozinho no training Idle tile não funcionaTenta assim
local trainerst = 456488 function helpTrainer(uid, pos) look = uid:getDirection() look = look < 3 and look + 1 or 0 uid:setDirection(look) doSendMagicEffect(pos, 12) if getPlayerFood(uid) < 100 then doPlayerFeed(uid, 100) doCreatureSay(uid, "+ Food", TALKTYPE_MONSTER) end addEvent(function() if isPlayer(uid) and getCreaturePosition(uid).x == pos.x and getCreaturePosition(uid).y == pos.y and getCreaturePosition(uid).z == pos.z then helpTrainer(uid, pos) end end, 1000) return true end function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) print("fiz") helpTrainer(cid, position) setPlayerStorageValue(cid,trainerst,1) return true end function onStepOut(cid) setPlayerStorageValue(cid,trainerst,-1) return true end
-
Vabrindox recebeu reputação de Igorzerah em Slot no ItemNão adianta pq vc só estaria fazendo um texto atoa sem poder puxar os atributos configurados ou então os slots, não tem nem o que adiantar.
-
Vabrindox recebeu reputação de Igorzerah em Passar por porta ou portal apenas quando estiver equipando um set especialSe for sem item especifico para helmet, armor e etc, vc pode ir colocando por ex:
and getPlayerSlotItem(cid, 1).itemid ~= 0 se o helmet for diferente de id 0 ele continua o script se não ele te teleporta de volta ao local anterior.
if getPlayerSlotItem(cid, 2).itemid == id_item and getPlayerSlotItem(cid, 1).itemid ~= 0 and getPlayerSlotItem(cid, 4).itemid ~= 0 then e assim por diante, porem se for com item especifico vc vai precisar criar varias variaveis diferentes, por ex:
local id_item2 = 2285 local id_item3 = 2345 e iria se aplicar assim:
if getPlayerSlotItem(cid, 2).itemid == id_item and getPlayerSlotItem(cid, 1).itemid == id_item2 then teria que fazer de cada um tbm
-
Ve se é isso que vc quer:
local tempo = 10 local time = os.time() local storage = 17900 function CountDown(cid, segundos)-- By Vabrindox if segundos == 0 then return false else doPlayerSendCancel(cid, "Ainda restam: " .. segundos .." segundos.") doSendAnimatedText(getPlayerPosition(cid),'.' ..segundos.. '.',18) return addEvent(CountDown, 1000, cid, segundos-1) end end function onCastSpell(cid, var) local get_stg_value = getPlayerStorageValue(cid, storage) local segundos = getPlayerStorageValue(cid, storage) - time if get_stg_value <= time then setPlayerStorageValue(cid, storage, time + tempo) doPlayerSendTextMessage(cid, 27, "Usou") CountDown(cid, tempo) end end
@Edit melhorei o script pq tava meio feio antes
-
Vabrindox recebeu reputação de Thayguroficial em Passar por porta ou portal apenas quando estiver equipando um set especialSe for sem item especifico para helmet, armor e etc, vc pode ir colocando por ex:
and getPlayerSlotItem(cid, 1).itemid ~= 0 se o helmet for diferente de id 0 ele continua o script se não ele te teleporta de volta ao local anterior.
if getPlayerSlotItem(cid, 2).itemid == id_item and getPlayerSlotItem(cid, 1).itemid ~= 0 and getPlayerSlotItem(cid, 4).itemid ~= 0 then e assim por diante, porem se for com item especifico vc vai precisar criar varias variaveis diferentes, por ex:
local id_item2 = 2285 local id_item3 = 2345 e iria se aplicar assim:
if getPlayerSlotItem(cid, 2).itemid == id_item and getPlayerSlotItem(cid, 1).itemid == id_item2 then teria que fazer de cada um tbm
-
Vabrindox recebeu reputação de Igorzerah em script de missãoFiz um bem simples ve se resolve seu problema.
O jogador precisa ir até o npc falar "missao" e ae depois é só ele ir caçar e matar a quantidade certa de bichos para ganhar item/exp automaticamente. E se ele for no npc o npc indica para ele que não pode mais fazer aquela "missao" novamente.
creaturescripts.xml
<event type="kill" name="kill_task" event="script" value="kill_task.lua"/> creaturescripts/login.lua
Antes do return true la do final bota isso.
registerCreatureEvent(cid, "kill_task") creaturescripts/scripts
Cria um arquivo .lua com o nome "kill_task" e cola isso dentro.
local Configs = { storage = 2427, monster = 'Rabbit', premio = 2160, qtd = 1, exp = 100, } function onKill(cid, target, lastHit) if isMonster(target) and getCreatureName(target) == Configs.monster then local get = getPlayerStorageValue(cid, Configs.storage) if get >=0 and get <=5 then setPlayerStorageValue(cid, Configs.storage, (get+1)) local gett = getPlayerStorageValue(cid, Configs.storage) doCreatureSay(cid, 'Voce matou '..gett..' Rabbits ate agora.', TALKTYPE_ORANGE_1) if gett == 5 then doPlayerAddItem(cid, Configs.premio, Configs.qtd) doPlayerAddExp(cid,Configs.exp) doCreatureSay(cid, 'Voce acabou a missao!.', TALKTYPE_ORANGE_1) setPlayerStorageValue(cid, Configs.storage, (gett+1)) end end end return true end Npc
Na pasta npc crie um arquivo .xml com o nome "Task" e cole isso
<?xml version="1.0" encoding="UTF-8"?> <npc name="Task" script="task.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|, eu tenho uma missao para voce!"/> </parameters> </npc> Npc/scripts
Crie um arquivo .lua com o nome "task" e cole isso
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 local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local storage = 2427 local get = getPlayerStorageValue(cid, storage) if(msgcontains(msg, 'missao') and (get == -1)) then selfSay('Para ganhar o premio mate 5 Rabbits! Voce ira receber automaticamente.', cid) setPlayerStorageValue(cid, storage, 0) elseif get >=5 then selfSay('Voce acabou a missao de matar Rabbits!', cid) else selfSay('Voce precisa matar '..(5-get)..' Rabbits!', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
Vabrindox recebeu reputação de Igorzerah em Slot no ItemO ideal é vc procurar um script desse encantamento aqui no tibia king ou em outro forum ae eu te ajudo na questão do look do item caso vc não encontre da maneira que vc quer.
Procure no google "Slot System (tfs 1.1)" que vc vai encontrar o que vc quer pronto, só que vc precisa ter a versao 1.1 do tfs.
-
Vabrindox recebeu reputação de Igorzerah em Alavanca que vende itemexplica melhor isso ae pq não entendi, a pessoa vende 1 item e ganha 2 moedas ao puxar uma alavanca? o que seria essas quantidades junto com esses outros itens?
-
Vabrindox recebeu reputação de Igorzerah em sistema de reset level voltando pro normalEntão eu nunca usei um sistema de reset de level mas creio que para vc fazer o que vc quer nesse caso ae do script que vc tava usando talvez armazenando a vida max do player em uma variável e dps fazer ele ir para o lv 8 e setar após o lv 8 a nova vida dele que é a que foi armazenada, assim ele ira para o lv 8 e vai ficar com o life que tava antes de resetar, mas nao sei se teria algum bug ao upar o lv 9 só testando msm.
-
Vabrindox recebeu reputação de Igorzerah em Teleport AutomaticoAcho que o erro ae é a virgula.
-
Vabrindox recebeu reputação de Igorzerah em Movendo Window (Container)Galera, eu tava querendo tirar esse lance do player mover as janelas para qualquer lugar, sejam elas backpack ou janelas de skill, itens, lista vip e etc, eu queria deixar igual ao client normal, ou seja, apenas no lado direito sendo impossível colocar a janela de backpack por exemplo em cima de um player.
Tentei procurar por isso na source etc e n achei, me ajudem!
-
Vabrindox recebeu reputação de Igorzerah em Como colocar mais de um pokémon no baú?Modifiquei um script que achei na net mas não testei.
local btype = "normal" local pokemon = "nome do poke" local pokemon2 = "nome do outro poke" local storage = 40009 function onUse(cid, item, frompos, item2, topos) if pokemon == "" or pokemon2 == "" then return true end if getPlayerStorageValue(cid, storage) <= 0 then addPokeToPlayer(cid, pokemon, 0, nil, btype) addPokeToPlayer(cid, pokemon2, 0, nil, btype) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce terminou a quest e pegou um "..pokemon.." e um "..pokemon2.." !!") doSendMagicEffect(getThingPos(cid), 29) doSendMagicEffect(getThingPos(cid), 27) doSendMagicEffect(getThingPos(cid), 29) setPlayerStorageValue(cid, storage, 1) else doPlayerSendCancel(cid, "Voce ja fez essa quest!") end return TRUE end
-
Vabrindox recebeu reputação de Igorzerah em 8.60 Error-CreatureScript Interface ME AJUDEMO erro está dando somente quando vc mata esse bicho?
Se for pelo que eu estou vendo existe um script no creaturescript que tem uma função que assim que vc mata-lo vai fazer algo.
Se o script não é necessário para vc é só vc ir no creaturescripts.xml procurar e retirar, tirando isso só olhando melhor para saber do que se trata.
-
Vabrindox recebeu reputação de Igorzerah em Rank Resetlocal displayoutput = {"Resets","Level","Magic Level","Fist Fighting","Club Fighting","Sword Fighting","Axe Fighting","Distance Fighting","Shielding"} local itemtype = {9969,9933,5896,8929,8932,7388,8849,8906,2580} local storage = 378378 -- valor da storage function onSay(cid, words, param) number = 1 param = string.lower(param) skilllist = "" command = TRUE if param == "reset" then display = 1 elseif param == "level" then display = 2 elseif param == "magic" then id = 1 display = 3 elseif param == "club" then id = 2 display = 4 elseif param == "sword" then id = 3 display = 5 elseif param == "axe" then id = 4 display = 6 elseif param == "distance" then id = 5 display = 7 elseif param == "shield" then id = 6 display = 8 else error = 'Highscore Commands:\n\n!rank reset\n!rank level\n!rank magic\n!rank fist\n!rank club\n!rank sword\n!rank axe\n!rank distance\n!rank shield\n' doShowTextDialog(cid, 5958, error) command = FALSE end if command ~= FALSE then if display == 1 then local player = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = "..storage.." ORDER BY cast(value as SIGNED) DESC;") if(player:getID() ~= -1) then while (true) do local name = getPlayerNameByGUID(player:getDataString("player_id")) local level = player:getDataInt("value") skilllist = skilllist.. "\n#"..string.format("%5s",number.." "..name.." - "..level) number = number + 1 if not(player:next()) then break end end player:free() end elseif display == 2 then local player = db.getResult("SELECT `name`, `level` FROM `players` WHERE group_id < '2' ORDER BY `level` DESC LIMIT 50;") if(player:getID() ~= -1) then while (true) do local name = player:getDataString("name") local level = player:getDataInt("level") skilllist = skilllist.. "\n#"..string.format("%5s",number.." "..name.." - "..level) number = number + 1 if not(player:next()) then break end end player:free() end elseif display == 3 then local player = db.getResult("SELECT `name`, `maglevel` FROM `players` WHERE group_id < '2' ORDER BY `maglevel` DESC LIMIT 50;") if(player:getID() ~= -1) then while (true) do local name = player:getDataString("name") local maglevel = player:getDataInt("maglevel") skilllist = skilllist.. "\n#"..string.format("%5s",number.." "..name.." - "..maglevel) if not(player:next()) then break end number = number + 1 end end player:free() else local skills = db.getResult("SELECT `player_id`, `value`, `skillid` FROM `player_skills` WHERE `skillid` = "..id.." ORDER BY `value` DESC;") while (true) do local GUID = skills:getDataInt("player_id") local value = skills:getDataInt("value") local skillid = skills:getDataInt("skillid") local player = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..GUID.." and group_id < '2' ") if(player:getID() ~= -1) then local name = player:getDataString("name") skilllist = skilllist.. "\n#"..string.format("%5s",number.." "..name.." - "..value) number = number + 1 player:free() end if number > 50 then break end if not(skills:next()) then break end end skills:free() end dialog = ""..displayoutput[display].." Highscores: \n "..skilllist.."" doShowTextDialog(cid, itemtype[display], dialog) end end
-
Vabrindox recebeu reputação de Igorzerah em Alavanca que troca item por outros itens !Quebrei a cabeça aqui e fiz um script para vc, o jogador vai colocar os 3 itens e vai receber no msm local o item configurado, qualquer outro item colocado a mais junto com os 3 itens em cima da bancada vai ser removido. E sim só funciona somente com os 3 itens configurados.
Actions.xml
Coloque sempre 1 ActionID diferente para cada alavanca que usar esse msm script, colocando eles agrupadamente na tag:
<action actionid="3001;3002;3003" event="script" value="craft.lua"/> Scripts/craft.lua
Crie um arquivo .lua chamado "craft" e cole o codigo:
Aqui estão alguma explicações para vc configurar
pos_bancada1 = {x=105,y=121,z=7}, --> posição da 1ª bancada só trocar o x,y e z e assim por diante no pos_bancada2 e 3
item1_craft = {item1=2466, item2=2455,item3=2454,premio=2674, nome_do_item='Apple'}, --> Aqui está toda a informação do 1º item que vc quer fazer, o item1,item2,item3 são os ids dos 3 itens necessários para criar o "premio" que tbm é só trocar o id, e o nome do item vc tem que colocar dentro das ' ' isso ae é só para ficar legal msm haha, o resto e tudo a msm coisa é só trocar.
function onUse(cid, item, fromPosition, itemEx, toPosition) local Configs = { pos_bancada1 = {x=105,y=121,z=7}, pos_bancada2 = {x=107,y=121,z=7}, pos_bancada3 = {x=109,y=121,z=7}, item1_craft = {item1=2466, item2=2455,item3=2454,premio=2674, nome_do_item='Apple'}, item2_craft = {item1=2643, item2=2642,item3=2641,premio=2640, nome_do_item='Soft Boots'}, item3_craft = {item1=2634, item2=2635,item3=2636,premio=2637, nome_do_item='Black King'}, } local Script = { stack1 = getItemStackpos(Configs.pos_bancada1,Configs.item1_craft.item1), stack2 = getItemStackpos(Configs.pos_bancada1,Configs.item1_craft.item2), stack3 = getItemStackpos(Configs.pos_bancada1,Configs.item1_craft.item3), stack4 = getItemStackpos(Configs.pos_bancada2,Configs.item2_craft.item1), stack5 = getItemStackpos(Configs.pos_bancada2,Configs.item2_craft.item2), stack6 = getItemStackpos(Configs.pos_bancada2,Configs.item2_craft.item3), stack7 = getItemStackpos(Configs.pos_bancada3,Configs.item3_craft.item1), stack8 = getItemStackpos(Configs.pos_bancada3,Configs.item3_craft.item2), stack9 = getItemStackpos(Configs.pos_bancada3,Configs.item3_craft.item3), } if Script.stack1 and Script.stack2 and Script.stack3 then doCleanTile(Configs.pos_bancada1) addEvent(doCreateItem, 100, Configs.item1_craft.premio, 1, Configs.pos_bancada1) doPlayerSendTextMessage(cid, 22, "Parabens, Voce Forjou "..Configs.item1_craft.nome_do_item.." .") doSendMagicEffect(Configs.pos_bancada1, NST_ME_FIREWORK_BLUE) doSendMagicEffect(Configs.pos_bancada1, CONST_ME_FIREWORK_YELLOW) doSendMagicEffect(Configs.pos_bancada1, CONST_ME_FIREWORK_RED) return true end if Script.stack4 and Script.stack5 and Script.stack6 then doCleanTile(Configs.pos_bancada2) addEvent(doCreateItem, 100, Configs.item2_craft.premio, 1, Configs.pos_bancada2) doPlayerSendTextMessage(cid, 22, "Parabens, Voce Forjou "..Configs.item2_craft.nome_do_item.." .") doSendMagicEffect(Configs.pos_bancada2, NST_ME_FIREWORK_BLUE) doSendMagicEffect(Configs.pos_bancada2, CONST_ME_FIREWORK_YELLOW) doSendMagicEffect(Configs.pos_bancada2, CONST_ME_FIREWORK_RED) return true end if Script.stack7 and Script.stack8 and Script.stack9 then doCleanTile(Configs.pos_bancada3) addEvent(doCreateItem, 100, Configs.item3_craft.premio, 1, Configs.pos_bancada3) doPlayerSendTextMessage(cid, 22, "Parabens, Voce Forjou "..Configs.item3_craft.nome_do_item.." .") doSendMagicEffect(Configs.pos_bancada3, NST_ME_FIREWORK_BLUE) doSendMagicEffect(Configs.pos_bancada3, CONST_ME_FIREWORK_YELLOW) doSendMagicEffect(Configs.pos_bancada3, CONST_ME_FIREWORK_RED) return true end doPlayerSendTextMessage(cid, 28, "Voce nao tem os 3 itens, para Craftar!") return true end function getItemStackpos(position, id) if getTileItemById(position, id).itemid == 0 then return nil end for i = 0, 255 do local pos = getThingFromPos({x=position.x, y=position.y, z=position.z, stackpos=i}) if pos.itemid == id then return i end end end
@Zzyzx
Ah foi mal eu botei tudo em 1 só bancada e vc queria de baixo da bancada de cada item né..erro meu, mas não vou arrumar agora não só amanha pq to sem tempo.
-
Vabrindox recebeu reputação de Ackerzin em Alavanca que troca item por outros itens !Quebrei a cabeça aqui e fiz um script para vc, o jogador vai colocar os 3 itens e vai receber no msm local o item configurado, qualquer outro item colocado a mais junto com os 3 itens em cima da bancada vai ser removido. E sim só funciona somente com os 3 itens configurados.
Actions.xml
Coloque sempre 1 ActionID diferente para cada alavanca que usar esse msm script, colocando eles agrupadamente na tag:
<action actionid="3001;3002;3003" event="script" value="craft.lua"/> Scripts/craft.lua
Crie um arquivo .lua chamado "craft" e cole o codigo:
Aqui estão alguma explicações para vc configurar
pos_bancada1 = {x=105,y=121,z=7}, --> posição da 1ª bancada só trocar o x,y e z e assim por diante no pos_bancada2 e 3
item1_craft = {item1=2466, item2=2455,item3=2454,premio=2674, nome_do_item='Apple'}, --> Aqui está toda a informação do 1º item que vc quer fazer, o item1,item2,item3 são os ids dos 3 itens necessários para criar o "premio" que tbm é só trocar o id, e o nome do item vc tem que colocar dentro das ' ' isso ae é só para ficar legal msm haha, o resto e tudo a msm coisa é só trocar.
function onUse(cid, item, fromPosition, itemEx, toPosition) local Configs = { pos_bancada1 = {x=105,y=121,z=7}, pos_bancada2 = {x=107,y=121,z=7}, pos_bancada3 = {x=109,y=121,z=7}, item1_craft = {item1=2466, item2=2455,item3=2454,premio=2674, nome_do_item='Apple'}, item2_craft = {item1=2643, item2=2642,item3=2641,premio=2640, nome_do_item='Soft Boots'}, item3_craft = {item1=2634, item2=2635,item3=2636,premio=2637, nome_do_item='Black King'}, } local Script = { stack1 = getItemStackpos(Configs.pos_bancada1,Configs.item1_craft.item1), stack2 = getItemStackpos(Configs.pos_bancada1,Configs.item1_craft.item2), stack3 = getItemStackpos(Configs.pos_bancada1,Configs.item1_craft.item3), stack4 = getItemStackpos(Configs.pos_bancada2,Configs.item2_craft.item1), stack5 = getItemStackpos(Configs.pos_bancada2,Configs.item2_craft.item2), stack6 = getItemStackpos(Configs.pos_bancada2,Configs.item2_craft.item3), stack7 = getItemStackpos(Configs.pos_bancada3,Configs.item3_craft.item1), stack8 = getItemStackpos(Configs.pos_bancada3,Configs.item3_craft.item2), stack9 = getItemStackpos(Configs.pos_bancada3,Configs.item3_craft.item3), } if Script.stack1 and Script.stack2 and Script.stack3 then doCleanTile(Configs.pos_bancada1) addEvent(doCreateItem, 100, Configs.item1_craft.premio, 1, Configs.pos_bancada1) doPlayerSendTextMessage(cid, 22, "Parabens, Voce Forjou "..Configs.item1_craft.nome_do_item.." .") doSendMagicEffect(Configs.pos_bancada1, NST_ME_FIREWORK_BLUE) doSendMagicEffect(Configs.pos_bancada1, CONST_ME_FIREWORK_YELLOW) doSendMagicEffect(Configs.pos_bancada1, CONST_ME_FIREWORK_RED) return true end if Script.stack4 and Script.stack5 and Script.stack6 then doCleanTile(Configs.pos_bancada2) addEvent(doCreateItem, 100, Configs.item2_craft.premio, 1, Configs.pos_bancada2) doPlayerSendTextMessage(cid, 22, "Parabens, Voce Forjou "..Configs.item2_craft.nome_do_item.." .") doSendMagicEffect(Configs.pos_bancada2, NST_ME_FIREWORK_BLUE) doSendMagicEffect(Configs.pos_bancada2, CONST_ME_FIREWORK_YELLOW) doSendMagicEffect(Configs.pos_bancada2, CONST_ME_FIREWORK_RED) return true end if Script.stack7 and Script.stack8 and Script.stack9 then doCleanTile(Configs.pos_bancada3) addEvent(doCreateItem, 100, Configs.item3_craft.premio, 1, Configs.pos_bancada3) doPlayerSendTextMessage(cid, 22, "Parabens, Voce Forjou "..Configs.item3_craft.nome_do_item.." .") doSendMagicEffect(Configs.pos_bancada3, NST_ME_FIREWORK_BLUE) doSendMagicEffect(Configs.pos_bancada3, CONST_ME_FIREWORK_YELLOW) doSendMagicEffect(Configs.pos_bancada3, CONST_ME_FIREWORK_RED) return true end doPlayerSendTextMessage(cid, 28, "Voce nao tem os 3 itens, para Craftar!") return true end function getItemStackpos(position, id) if getTileItemById(position, id).itemid == 0 then return nil end for i = 0, 255 do local pos = getThingFromPos({x=position.x, y=position.y, z=position.z, stackpos=i}) if pos.itemid == id then return i end end end
@Zzyzx
Ah foi mal eu botei tudo em 1 só bancada e vc queria de baixo da bancada de cada item né..erro meu, mas não vou arrumar agora não só amanha pq to sem tempo.
-
Vabrindox recebeu reputação de luanluciano93 em script de missãoFiz um bem simples ve se resolve seu problema.
O jogador precisa ir até o npc falar "missao" e ae depois é só ele ir caçar e matar a quantidade certa de bichos para ganhar item/exp automaticamente. E se ele for no npc o npc indica para ele que não pode mais fazer aquela "missao" novamente.
creaturescripts.xml
<event type="kill" name="kill_task" event="script" value="kill_task.lua"/> creaturescripts/login.lua
Antes do return true la do final bota isso.
registerCreatureEvent(cid, "kill_task") creaturescripts/scripts
Cria um arquivo .lua com o nome "kill_task" e cola isso dentro.
local Configs = { storage = 2427, monster = 'Rabbit', premio = 2160, qtd = 1, exp = 100, } function onKill(cid, target, lastHit) if isMonster(target) and getCreatureName(target) == Configs.monster then local get = getPlayerStorageValue(cid, Configs.storage) if get >=0 and get <=5 then setPlayerStorageValue(cid, Configs.storage, (get+1)) local gett = getPlayerStorageValue(cid, Configs.storage) doCreatureSay(cid, 'Voce matou '..gett..' Rabbits ate agora.', TALKTYPE_ORANGE_1) if gett == 5 then doPlayerAddItem(cid, Configs.premio, Configs.qtd) doPlayerAddExp(cid,Configs.exp) doCreatureSay(cid, 'Voce acabou a missao!.', TALKTYPE_ORANGE_1) setPlayerStorageValue(cid, Configs.storage, (gett+1)) end end end return true end Npc
Na pasta npc crie um arquivo .xml com o nome "Task" e cole isso
<?xml version="1.0" encoding="UTF-8"?> <npc name="Task" script="task.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|, eu tenho uma missao para voce!"/> </parameters> </npc> Npc/scripts
Crie um arquivo .lua com o nome "task" e cole isso
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 local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local storage = 2427 local get = getPlayerStorageValue(cid, storage) if(msgcontains(msg, 'missao') and (get == -1)) then selfSay('Para ganhar o premio mate 5 Rabbits! Voce ira receber automaticamente.', cid) setPlayerStorageValue(cid, storage, 0) elseif get >=5 then selfSay('Voce acabou a missao de matar Rabbits!', cid) else selfSay('Voce precisa matar '..(5-get)..' Rabbits!', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())