Ir para conteúdo

FeeTads

Membro
  • Registro em

  • Última visita

Solutions

  1. FeeTads's post in (Resolvido)Wallbrush e Ground Bush bugando was marked as the answer   
    Isso é o auto border, só apertar A, que ele para de usar o auto border e bota apenas o tile selecionado.
  2. FeeTads's post in Comandos Lua 10.98 was marked as the answer   
    esses scripts são de TFS, creio que pode ser revscript dependendo da versão da engine, essas functions existem na lib ou na source > luascript.cpp
    Player:addItem(item,quantidade) > existe na source em luascript.cpp, lá estão todas as funções que podem ser usadas dentro do servidor via luascript
  3. FeeTads's post in (Resolvido)Macro was marked as the answer   
    UI.Separator() local itemList = { 3364, 3366, 3414, 3420, 3392, 3386, 3079, 3360, 3436} -- item id here --Make By Feetads macro(500, "Sell with spellwand", function() for _, container in pairs(g_game.getContainers()) do for _, item in ipairs(container:getItems()) do if table.find(itemList, item:getId()) then useWith(789, item) -- spellwand id end end end end)  
  4. Você registrou esse script no creatureScript.xml?

    tem que registrar o evento dele tbm no login.lua
    registerCreatureEvent("NOME_DO_EVENTO")
  5. FeeTads's post in (Resolvido)Eu quando ligo meu ot da esse erro na parte monster was marked as the answer   
    ta ai o erro

    provavelmente vc comentou tipo:  -- demon
    quando deveria ser <!-- demon -->
    quando você comenta no arquivo XML o comentário deve ser <!-- comentário -->

    o erro está na linha 87, veja o que tem na 87 e retire/arrume
  6. FeeTads's post in (Resolvido)Como eu Deixo a Bless Infinita no Config,lua was marked as the answer   
    Não existe maneira de deixar infinita pelo config.lua, o unico modo é vc fazer um script onLogin que adicione bless sempre que o player logar, ai ao morrer/logar ele recebe bless. Ou criar um script que adicione bless atraves de storage
  7. FeeTads's post in (Resolvido)Manda memsagem pro default em verde não to conseguindo manda em verde. was marked as the answer   
    então kkkkkk, não existe a função de mandar em verde no DEFAULT apenas no server log
    pra fazer isso seria necessário editar na distro as funções de
    struct message_t
    la no const.h e mais alguns arquivos
  8. FeeTads's post in (Resolvido)Shopsystem Global was marked as the answer   
    acho que o teu erro é o mesmo desse, da uma olhada
     
  9. FeeTads's post in (Resolvido)[AJUDA] Adicionar 2 storage ao usar item was marked as the answer   
    meio que vc ja solucionou o seu problema kkkkkk
    vc quer que ele de a storage 91475 e disse que ele ja está ganhando a 90594
    então basicamente vc precisa duplicar a linha e colocar a nova storage
    setPlayerStorageValue(cid, 90594, 1) setPlayerStorageValue(cid, 91475, 1)
    setPlayerStorageVaue significa = setar no jogador a storage

    ou seja
    cid = creature Id do jogador que está executando a ação}
    91745 = numero da storage (aqui pode ser qualquer numero vc decide)
    1 = valor da storage (aqui pode ser oq vc precisar tipo os.time(), ou guardar qualquer coisa)
  10. FeeTads's post in (Resolvido)Script de Reborn (Wodbo) was marked as the answer   
    esse erro no console
    "atempt do call global ..." significa que está tentando puxar um funçao da LIB que não existe.

    você não tem na LIB a função "doReborn"

    cola essa função em qualquer lib sua e reabra o OT
     
    function doReborn(cid, level, looktype, vocation) local playerID = getPlayerGUID(cid) setPlayerStorageValue(cid, 30023, 4) setPlayerStorageValue(cid, 30025, looktype) setCreatureMaxHealth(cid, getCreatureMaxHealth(cid)+50250) setCreatureMaxMana(cid, getCreatureMaxMana(cid)+50250) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) doCreatureAddMana(cid, getCreatureMaxMana(cid)) if isCreature(cid) then doRemoveCreature(cid, true) end db.query("UPDATE `players` SET `level` = " .. level .. " WHERE `id` = " .. playerID .. ";") db.query("UPDATE `players` SET `looktype` = " .. looktype .. " WHERE `id` = " .. playerID .. ";") db.query("UPDATE `players` SET `vocation` = " .. vocation .. " WHERE `id` = " .. playerID .. ";") return TRUE end
    e use esse código aqui como reborn, otimizei ele pra outro DBO:
     
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} local config = { -- [voc atual] = {level apos reborn, looktype após reborn, pra qual vocação vai} [5] = {to_level = 8, looktype = 10, to_voc = 6}, [18] = {to_level = 8, looktype = 821, to_voc = 19}, [36] = {to_level = 8, looktype = 38, to_voc = 37}, [49] = {to_level = 8, looktype = 50, to_voc = 50}, [62] = {to_level = 8, looktype = 909, to_voc = 63}, [75] = {to_level = 8, looktype = 842, to_voc = 76}, [87] = {to_level = 8, looktype = 81, to_voc = 87}, [99] = {to_level = 8, looktype = 88, to_voc = 100}, [115] = {to_level = 8, looktype = 1373, to_voc = 116}, [131] = {to_level = 8, looktype = 113, to_voc = 132}, [144] = {to_level = 8, looktype = 50, to_voc = 145}, [156] = {to_level = 8, looktype = 128, to_voc = 157}, [168] = {to_level = 8, looktype = 144, to_voc = 169}, [181] = {to_level = 8, looktype = 153, to_voc = 182}, [210] = {to_level = 8, looktype = 169, to_voc = 211}, [222] = {to_level = 8, looktype = 180, to_voc = 223}, [234] = {to_level = 8, looktype = 194, to_voc = 235}, [248] = {to_level = 8, looktype = 205, to_voc = 249}, [260] = {to_level = 8, looktype = 212, to_voc = 261}, [272] = {to_level = 8, looktype = 221, to_voc = 273}, [284] = {to_level = 8, looktype = 227, to_voc = 285}, [296] = {to_level = 8, looktype = 235, to_voc = 297}, [308] = {to_level = 8, looktype = 246, to_voc = 309}, [320] = {to_level = 8, looktype = 257, to_voc = 321}, [332] = {to_level = 8, looktype = 265, to_voc = 333}, [344] = {to_level = 8, looktype = 277, to_voc = 345}, [356] = {to_level = 8, looktype = 285, to_voc = 357}, [368] = {to_level = 8, looktype = 296, to_voc = 369}, [380] = {to_level = 8, looktype = 302, to_voc = 381}, [392] = {to_level = 8, looktype = 308, to_voc = 393}, [404] = {to_level = 8, looktype = 321, to_voc = 405}, [417] = {to_level = 8, looktype = 335, to_voc = 418}, [429] = {to_level = 8, looktype = 347, to_voc = 430}, [441] = {to_level = 8, looktype = 357, to_voc = 442}, [453] = {to_level = 8, looktype = 368, to_voc = 454}, [465] = {to_level = 8, looktype = 375, to_voc = 466}, [482] = {to_level = 8, looktype = 578, to_voc = 483}, [503] = {to_level = 8, looktype = 556, to_voc = 504}, --pra inserir mais é só copiar e colar e mudar da mesma forma } local need_level = {200, 600} local rstorage = 149501 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 msg = string.lower(msg) local vocation = getPlayerVocation(cid) local t = config[vocation] local levelP = getPlayerLevel(cid) if isInArray({"reborn", "rebornar", "reset", "resetar"}, msg) then if getPlayerStorageValue(cid, 30023) == 4 then npcHandler:say("Desculpe! Você ja está rebornado!", cid) npcHandler:releaseFocus(cid) return true end if not t then npcHandler:say("Você precisa estar na ultima transformação para rebornar!", cid) return true end if t then if levelP < need_level[1] or levelP > need_level[2] then npcHandler:say("Apenas level 200 até 600 podem rebornar!", cid) return true else npcHandler:say("Você tem certeza que deseja rebornar?", cid) talkState[talkUser] = 1 end end elseif isInArray({"yes", "sim", "quero", "yeah"}, msg) and talkState[talkUser] == 1 then setPlayerStorageValue(cid, rstorage, getPlayerLevel(cid)) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) doReborn(cid, t.to_level, t.looktype, t.to_voc) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
  11. FeeTads's post in (Resolvido)item que da dano adicional a arma equipada was marked as the answer   
    ja fiz essa function uma vez, se não me engano foi pra um post seu, cuidado com post duplicado!

    NECESSÁRIO mudar o numero do "itemDeDano" pro id do seu item
     
    function isWeapon(uid) -- By Killua return getItemWeaponType(uid) ~= 0 end local itemDeDano = 1522 -- ID do item que irá no slot function onStatsChange(cid, attacker, type, combat, value) if not isPlayer(cid) then return false end if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) and (combat ~= COMBAT_HEALING and value > 0) then local itemEquipado = getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid -- pega o ID do ring no slot local armaEquipadaEsquerda = getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid -- pega uid doq ta na mão esquerda local armaEquipadaDireita = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid -- pega uid doq ta na mão direita if isWeapon(armaEquipadaEsquerda) or isWeapon(armaEquipadaDireita) then -- se tiver arma na mão direita ou esquerda if itemEquipado and itemEquipado == itemDeDano then -- se tiver ring equipado E o ring for o escolhido local dano = value*0.5 -- 0.5 = 50% a mais de dano, 1 = 100% a mais.... local target = getCreatureTarget(cid) doTargetCombatHealth(cid, target, combat, -dano, -dano, 255) -- função de dar dano end end end return true end  
  12. FeeTads's post in (Resolvido)effect com storage was marked as the answer   
    o efeito tem que ser colocado em creatureScripts

    creaturescripts = coisas que acontecem nos players
    globalEvents = coisas que acontecem no OT em GERAL

    então:
    data > creaturescripts > scripts > effectStorage.lua
     
    function sendVipEffect(cid) if not isCreature(cid) then return true end if getPlayerStorageValue(cid, 19332) > 0 then doSendMagicEffect(getThingPos(cid), 66) addEvent(sendVipEffect, 200, cid) end end function onLogin(cid) sendVipEffect(cid) return true end  
  13. FeeTads's post in (Resolvido)Script de patente help me was marked as the answer   
    cria um arquivo ou coloca dentro de algum que ja exista, EXEMPLO:
    data > creaturescripts > scripts > onLook.lua

    Cola esse código dentro do arquivo.

    depois vai em creaturescripts.xml

    data > creaturescripts > creaturescripts.xml
    cola essa tag:
    <event type="look" name="newOnLook" script="onLook.lua"/> <event type="login" name="newlook" event="script" value="onLook.lua" />

    ai da 
    /reload creature
    e reloga, que ja vai aparecer.

    OBS: CHECA se já não existe algum arquivo de "look", pq pode sobescrever e tirar algo que vc ja usa.
     onde ta isso ^
    bota isso:
     
    function onLogin(cid) registerCreatureEvent(cid, "newOnLook") registerCreatureEvent(cid, "newlook") return true end  
  14. FeeTads's post in (Resolvido)menssagem no defalt e nao no server log was marked as the answer   
    testou esse script que fiz e deu reload talk?

     
    local config = { storage = 19400, -- storage em que será salvo o tempo cor = "red", -- de acordo com o constant.lua da lib tempo = 3, -- em minutos price = 20000, -- quantidade de dinheiro que irá custar level = 10 -- level pra poder utilizar o broadcast } function onSay(cid, words, param) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*10)) local pid = getPlayersOnline() for i=1, #pid do doPlayerSendTextMessage(pid[i], MESSAGE_STATUS_CONSOLE_RED, "[/all]: ["..getCreatureName(cid).."]: "..param.."") end else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end return true end  
  15. FeeTads's post in (Resolvido)[ServicePort::open] Error: bind: Address already in use was marked as the answer   
    isso significa que seu server não fechou o OTXserver ou o TFS, o executável, significa que vc n fechou a screen etc.., e o processo ainda continua ativo.
    para parar esse erro, só digitar no terminal
    killall -9 theotxserver ou, onde ta theotxserver, mudar pro nome do executável do seu servidor
  16. bem facil resolver isso amigo.

    abre 2 arquivos da sua source
    "luascript.cpp" 
    e depois abre o 
    "luascript.h"

    em luascript.cpp 
    procure por "doCreatureChannelSay" ou "doPlayerSendTextMessage"
    E adicione abaixo:
    //doPlayerOpenChannel(cid, channelId) lua_register(m_luaState, "doPlayerOpenChannel", LuaInterface::luaDoPlayerOpenChannel);  
    depois, FAÇA NOVAMENTE a busca pelo "doCreatureChannelSay" ou "doPlayerSendTextMessage"
    até chegar em uma função +/- assim:
    int32_t LuaInterface::luaDoPlayerSendTextMessage(lua_State* L) {  
    vai ter varias coisas dentro dessa função, então COM CUIDADO, após o fechamento dela
    após o " } "
     procure pela chave que fecha essa função, e adicione essa função abaixo:
     
    int32_t LuaInterface::luaDoPlayerOpenChannel(lua_State* L) { //doPlayerOpenChannel(cid, channelId) uint16_t channelId = popNumber(L); uint32_t cid = popNumber(L); ScriptEnviroment* env = getEnv(); if(env->getPlayerByUID(cid)) { lua_pushboolean(L, g_game.playerOpenChannel(cid, channelId)); return 1; } errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; }  
     
    IMPORTANTE** preste bem atenção pra não colocar uma função dentro da outra, coloque a função exatamente ABAIXO da outra.

    feito isso, vá em 
    luascript.h

    PROCURE novamente por  "doCreatureChannelSay" ou "doPlayerSendTextMessage"

    e adicione abaixo:
    static int32_t luaDoPlayerOpenChannel(lua_State* L);

    após isso, recompile sua source, apenas com "make" não precisa recompilar ela toda do 0, pode recompilar apenas esses arquivos, e reabrir seu ot com o novo exe e pronto, estará 100% funcionando a função.
     
    caso isso tudo não de certo, me avise, que ai precisará adicionar algumas coisas em mais 3 arquivos.
  17. FeeTads's post in (Resolvido)ajuda para mudar script simples was marked as the answer   
    existe um função no tibia chamada
    "isInArray" basicamente ela significa isso mesmo, kkkkkkk, "está no array"
    quando vc precisar de mais de uma opção, ela vai te salvar muito no futuro, principalmente pra falas com NPC, ou checagem simples de item.
    seu script vai ficar assim:
     
    obs: coloquei os comentários pra vc poder entender melhor caso vá usar no futuro.
     
    --[[ Script Edited By Feetads - TibiaKing ]]-- local todos_items = {7504, 7505, 7506} -- criando o array com os outros items, só adicionar outros ID aqui function onUse(cid, item, fromPosition, itemEx, toPosition) local pos = {x=1841, y=826, z=7} --SEMPRE usar "local" antes das variaveis de script fora da LIB! if isInArray(todos_items, itemEx.itemid) then -- se estiver no array (todos_items) o itemEx.itemid então.... lembrando que o "todos_items" NÃO precisa estar entre chave "{todos_items}" porém vc pode colocar diretamente no if, ex: -- if isInArray({7504, 7505, 7506}, itemEx.itemid) then doTeleportThing(cid,pos) else doPlayerSendCancel(cid, "Use esta rock no lugar certo.") end return true end  
  18. FeeTads's post in (Resolvido)MagicWall Que Da Parar Atacar Sobre Ela was marked as the answer   
    precisa duplicar a MW no itemEditor, e retirar a propriedade de "block missiles"


    caso você faça isso, clientes 8.6 do tibia PADRÂO, irão debugar ao ver esse item, por causa da propriedade dele, então cuidado, pois só irá funcionar em client custom.

    obs: caso vc queira que funcione no client padrão da CIP, só procurar algum item no OBB que contenha
    "unpassable e blockpathfinder", duplicar e colocar a sprite de MW que quiser pelo obb, compilar e colocar em seu client.

    obs²: não esqueça de duplicar o script da MW no spells e spells.xml tbm, pra esse novo item
  19. FeeTads's post in (Resolvido)Adicionar mais horarios was marked as the answer   
    acho que se colocar tipo 
    time="14:30;15:30;16:30"
    com ; entre os horarios deve funcionar, se não só duplicar o scripts
     
    <globalevent name="Bosito" time="14:30:00"event="script" value="Bosito.lua"/> <globalevent name="Bosito2" time="15:30:00"event="script" value="Bosito.lua"/> <globalevent name="Bosito3" time="16:30:00"event="script" value="Bosito.lua"/>  
  20. FeeTads's post in (Resolvido)Servidor travando sempre que upa level ou skill was marked as the answer   
    Sempre que upar LEVEL salva o character (é até bom deixar, mas vc pode colocar pra n salvar)
    savePlayer = false,
     
    esse script eu desabilitaria, meio que ele é inutil pro servidor quando se usa o advancedSave, no meu caso eu uso apenas o advanced save.
    tenta desabilitar os 2, e depois habilitar somente o advanced save
  21. FeeTads's post in (Resolvido)Boss Spawn Apos Matar X Quantidade de Creature! (Ajuda) Resolvido 90% was marked as the answer   
    uai trocando o cid por killer
     
    doPlayerSendTextMessage(killer, MESSAGE_STATUS_CONSOLE_ORANGE, 'Boss Spawning: '..(getGlobalStorageValue(r.storage)+1)..' of '..r.amount..' '..getCreatureName(cid)..'s killed to spawn boss.')
     
  22. FeeTads's post in (Resolvido)Rank militar, como colocar efeito no rank com mais frags? was marked as the answer   
    é possivel mas caso vc queira pro servidor todo, ou TOP 100 por exemplo, pode ser meio chatinho de fazer, mas é +/- assim
     
    local delay = 5000 --Intervalo de tempo entre o efeito, em milésimos de segundo. 5000 = 5s local access = 3 -- 3 é acesso de GM+ local i = 1 -- não mexer local p_name = {} -- nome dos players com mais frag local effect = { [1] = 15, --15 é o efeito [2] = 12, --12 é o efeito [3] = 10, --10 é o efeito } local function checkFrags(cid) if not isPlayer(cid) then return true end -- caso não seja player sai fora if getPlayerAccess(cid) >= access then return true end -- se for GM+ sai fora if isCreature(cid) then -- caso esteja online, continua na função local result = db.getResult('SELECT * FROM players WHERE deleted = 0 AND group_id = 1 AND online = 1 AND account_id != 1 ORDER BY frags DESC LIMIT 3') -- LIMIT 3 = TOP 3 APENAS, CASO QUEIRA QUE PEGUE MAIS PLAYERS, AUMENTAR O NUMERO, CASO QUEIRA QUE PEGUE EM TODOS (NÃO RECOMENDO) TIRAR O "LIMIT 3" if result:getID() ~= -1 then while (true) do p_name[i] = tostring(result:getDataString('name')) i = i + 1 if not(result:next()) then break end end result:free() end for j = 1, 3 do --3 é o tamanho do LIMIT caso vc queira que pegue todos os players online, trocar o 3 pra #getPlayersOnline() if getPlayerName(cid) == p_name[j] then sendEffect(cid, j) break end end end return true end local function sendEffect(cid, n_efeito) if isCreature(cid) then doSendMagicEffect(getCreaturePosition(cid), effect[n_efeito]) addEvent(sendEffect, delay, cid, n_efeito) end return true end function onLogin(cid) checkFrags(cid) return true end  
  23. FeeTads's post in (Resolvido)tile que remove storage was marked as the answer   
    coloca assim:
    e coloca a tag no xml assim por exemplo
    data > movement > movements.xml
    <movevent type="StepIn" actionid="56780" event="script" value="removeStorage.lua"/>   ai cria o arquivo
    data > movements > scripst > removeStorage.lua
    e coloca isso dentro
    local storages = {1234, 12345, 123456, 1234567} -- Aqui você adiciona as storages a serem verificadas e removidas caso o player venha a telas. function onStepIn(cid, item) for i= 1, #storages do setPlayerStorageValue(cid, storages[i], 0) end return true end  
    ai coloca no chão o action ID 56780
     
    se a storage do seu bau checar -1, coloca no logar do 0 o -1
    setPlayerStorageValue(cid, storages[i], -1)
  24. FeeTads's post in (Resolvido)NPC que troca varios itens por x item em determinado tempo was marked as the answer   
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg:lower()) end function onThink() npcHandler:onThink() end local talkState = {} -- function de tempo //NÃO MEXER local function getTimeString(self) local format = { {'dia', self / 60 / 60 / 24}, {'hora', self / 60 / 60 % 24}, {'minuto', self / 60 % 60}, {'segundo', self % 60} } local out = {} for k, t in ipairs(format) do local v = math.floor(t[2]) if(v > 0) then table.insert(out, (k < #format and (#out > 0 and ', ' or '') or ' e ') .. v .. ' ' .. t[1] .. (v ~= 1 and 's' or '')) end end local ret = table.concat(out) if ret:len() < 16 and ret:find('segundo') then local a, b = ret:find(' e ') ret = ret:sub(b+1) end return ret end local itemid = { -- id dos items necessários pra troca [1] = {item = 8976, count = 1}, [2] = {item = 2350, count = 1}, [3] = {item = 2160, count = 1000}, } local save_items = 0 -- variavel apenas pra salvar a quantidade de items //nao mexer local tempo_de_espera = 1 -- em minutos local storage = 58458711 -- storage //se não souber, não mexer local storageAceitar = 58458712 local item_trocado = 10313 -- id do item que vira após a troca local trocar_mais_de_uma_vez = false -- o player pode trocar varias vezes esse 4 items por 1? //true pode trocar mais de 1x //false só troca uma vez 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 msg = string.lower(msg) if isInArray({"espada", "itens", "lista"}, msg) then local lista = '' for i=1, #itemid do lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item) if i+1 <= #itemid then lista = lista..', ' end end selfSay("Onde voce encontrou esta espada quebrada? com ela posso fazer uma poderosa espada, mais vc vai precisar trazer 30 pieces of iron, 30 silver broochs, 1o golden mugs, 1 demonic essence e 10kk. Aceita?", cid) talkState[talkUser] = 10 elseif isInArray({"yes", "aceito", "sim"}, msg) and talkState[talkUser] == 10 then selfSay("Otimo, me traga o que te pedi: 30 pieces of iron, 30 silver broochs, 10 golden mugs, 1 demonic essence e 10kk.", cid) setPlayerStorageValue(cid, storageAceitar, 1) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"espada","troca","trocar"}, msg) then -- mensagem do player if getPlayerStorageValue(cid, storageAceitar) == 1 then local lista = '' for i=1, #itemid do lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item) if i+1 <= #itemid then lista = lista..', ' end end selfSay("Voce aceita me pagar {"..lista.."} pela espada?", cid) -- msg do NPC talkState[talkUser] = 2 else selfSay("Primeiro gostaria de ver a {lista} de itens para me trazer?", cid) talkState[talkUser] = 11 end elseif isInArray({"no","não","bye","not"}, msg) and talkState[talkUser] == 11 then selfSay("OK, Bye!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 11 then local lista = '' for i=1, #itemid do lista = lista..itemid[i].count..' - '..getItemNameById(itemid[i].item) if i+1 <= #itemid then lista = lista..', ' end end selfSay("A lista de items são: {"..lista.."}", cid) selfSay("Você {aceita} pegar esses items?", cid) talkState[talkUser] = 10 elseif isInArray({"sim","quero","yes","yeah"}, msg) and talkState[talkUser] == 2 then if trocar_mais_de_uma_vez == false and getPlayerStorageValue(cid, storage) ~= -1 then selfSay("Desculpe, voce ja fez sua troca!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) return true end for i=1, #itemid do -- for pra fazer a contagem dos items if getPlayerItemCount(cid, itemid[i].item) >= itemid[i].count then -- caso o player tenha o item save_items = save_items + 1 -- salva na variavel end end if save_items >= #itemid then -- se tiver todos os items necessários selfSay("Otimo! vai levar 9 horas ate que a espada fique pronta, volte aqui em "..getTimeString(tempo_de_espera*60)..".", cid) -- manda a mensagem setPlayerStorageValue(cid, storage, os.time() + (tempo_de_espera*60)) -- seta a storage pra 60 minutos for i=1, #itemid do doPlayerRemoveItem(cid, itemid[i].item, itemid[i].count) -- remove os items do player end else selfSay("Desculpe, mas o senhor nao me trouxe os itens necessarios!", cid) -- mensagem caso não tenha os items necessários talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end elseif isInArray({"no","não","nao","not"}, msg) and talkState[talkUser] == 2 then -- caso o player não queira trocar, só da tchau selfSay("Tudo bem então, Bye!", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif isInArray({"receber","receber item"}, msg) then -- caso o player digite "receber" if (getPlayerStorageValue(cid, storage) - os.time() <= 0 and getPlayerStorageValue(cid, storage) ~= 0 and getPlayerStorageValue(cid, storage) ~= -1) then -- checa se já passou [tempo de espera], e não é 0 local new_item = doCreateItemEx(item_trocado, 1) local receive = doPlayerAddItemEx(cid, new_item) if receive == RETURNVALUE_NOERROR then -- caso o player tenha slot na bp, etc.. selfSay("Sua espada esta pronta, aqui esta!", cid) -- msg do NPC setPlayerStorageValue(cid, storage, 0) -- seta a storage do player pra 0 talkState[talkUser] = 0 npcHandler:releaseFocus(cid) else selfSay("Sua espada esta pronta, deixe espaço em sua mochila!", cid) -- caso não consiga entregar o item só pede pra deixar espaço talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end elseif getPlayerStorageValue(cid, storage) - os.time() > 0 then selfSay("Sua espada ainda {nao esta pronta}, volte em "..getTimeString((getPlayerStorageValue(cid, storage)-os.time()))..".", cid) -- caso ainda não esteja pronto o item talkState[talkUser] = 0 npcHandler:releaseFocus(cid) elseif getPlayerStorageValue(cid, storage) == 0 then selfSay("Desculpe, mas o senhor nao me trouxe os itens necessarios!", cid) -- caso ainda não esteja pronto o item talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())  
    @Strikerzerah
    trocar a fala de 10kk por
    selfSay("Voce aceita me pagar {"..lista.."} pela espada?", cid)

    coloca o script acima, e reabre o ot ou recria o NPC, sempre que editar script de NPC´, é necessário recria-lo
  25. FeeTads's post in (Resolvido)Como criar itens VIP was marked as the answer   
    1º passo: vc vai baixar no seu PC o itemEditor, ai vc vai pegar do servidor o "items.otb"
    2º passo: vc vai abrir o itemEditor, e selecionar a pasta de caminho do seu OT, que contem as sprites dele
    3º passo: vc vai procurar o item que vc quer duplicar, ex: demon legs, pra fazer isso vc precisa do ID dela (dano look no jogo), e apertando CTRL e colocando o ID e dando find.
    4º feito isso vc vai clicar nesse botão: 
     
    esse botão duplica o item, o botão da esquerda dele, cria um novo sem atributos, então mt cuidado.
    fazendo isso, vc salva (CTRL + S) ou salvando por: File > save

    exclui ou edita o nome do items.otb do seu servidor (indico fortemente você alterar o items.otb existente pra tipo "items1.otb") NUNCA EXCLUIR NA HORA, ou substituir, pois ele vai servir como backup caso algo tenha dado errado.

    após colocar o items.otb que vc duplicou o item ja no seu servidor

    vá até o "items.xml"
    abra
    copie todo o xml do item que vc duplicou
    ex: da demon legs, você vai duplicar também (pode ser em qualquer lugar do items.xml, mas eu indico sempre abaixo do ultimo)

    após duplicar no items.xml, vc vai alterar o ID praquele ID ali, por exemplo na print "12782"
    ficaria +/- assim o novo item:

     
    <item id="12782" name="studded legs VIP"> <!-- o name vc pode por o que quiser, PORÉM o id tem que ser EXATAMENTE o mesmo que foi duplicado -->         <attribute key="weight" value="2600" /> <!-- aqui são os atributos ai vc coloca quantos quiser -->         <attribute key="armor" value="2" />         <attribute key="slotType" value="legs" />     </item>
    ai reabre o servidor (NÃO EXISTE /reload items) pra funcionar tem que reabrir o server.
    e pronto criar seu item novo no jogo da forma que quiser.
    pra testar pode usar: /i 12782
    irá criar o item
    *** o seu item não será o 12782 terá que ser conforme o teu items.otb ***

Informação Importante

Confirmação de Termo