Solutions
- 		
			FeeTads's post in (Resolvido)Wallbrush e Ground Bush bugando was marked as the answerIsso é o auto border, só apertar A, que ele para de usar o auto border e bota apenas o tile selecionado.
 
- 		
			FeeTads's post in Comandos Lua 10.98 was marked as the answeresses 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
 
- 		
			FeeTads's post in (Resolvido)Macro was marked as the answerUI.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)
 
- 		
			FeeTads's post in [SQL] -=[TFS]=- 0.4 8.69 ALGUEM PODE ME AJUDA NESSE SCRIPT PARECE QUE NÃO ESTA FUNCIONANDO ELE NÃO ATACA COM BOOSTER ATTACK STONE was marked as the answerVocê registrou esse script no creatureScript.xml?
 
 tem que registrar o evento dele tbm no login.lua
 registerCreatureEvent("NOME_DO_EVENTO")
 
- 		
			FeeTads's post in (Resolvido)Eu quando ligo meu ot da esse erro na parte monster was marked as the answerta 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
 
- 		
			FeeTads's post in (Resolvido)Como eu Deixo a Bless Infinita no Config,lua was marked as the answerNã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
 
- 		
			FeeTads's post in (Resolvido)Manda memsagem pro default em verde não to conseguindo manda em verde. was marked as the answerentã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
 
- 		
			FeeTads's post in (Resolvido)Shopsystem Global was marked as the answeracho que o teu erro é o mesmo desse, da uma olhada
 
 
- 		
			FeeTads's post in (Resolvido)[AJUDA] Adicionar 2 storage ao usar item was marked as the answermeio 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)
 
- 		
			FeeTads's post in (Resolvido)Script de Reborn (Wodbo) was marked as the answeresse 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())
 
- 		
			FeeTads's post in (Resolvido)item que da dano adicional a arma equipada was marked as the answerja 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
 
- 		
			FeeTads's post in (Resolvido)effect com storage was marked as the answero 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
 
- 		
			FeeTads's post in (Resolvido)Script de patente help me was marked as the answercria 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
 
- 		
			FeeTads's post in (Resolvido)menssagem no defalt e nao no server log was marked as the answertestou 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
 
- 		
			FeeTads's post in (Resolvido)[ServicePort::open] Error: bind: Address already in use was marked as the answerisso 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
 
- 		
			FeeTads's post in (Resolvido)-=[tfs]=- 0.4 8.60 Quando Loga Aparece os Canais; Não Esta Configurado no Source; Pretendo Meche login.lua was marked as the answerbem 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.
 
- 		
			FeeTads's post in (Resolvido)ajuda para mudar script simples was marked as the answerexiste 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
 
- 		
			FeeTads's post in (Resolvido)MagicWall Que Da Parar Atacar Sobre Ela was marked as the answerprecisa 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
 
- 		
			FeeTads's post in (Resolvido)Adicionar mais horarios was marked as the answeracho 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"/>
 
- 		
			FeeTads's post in (Resolvido)Servidor travando sempre que upa level ou skill was marked as the answerSempre 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
 
- 		
			FeeTads's post in (Resolvido)Boss Spawn Apos Matar X Quantidade de Creature! (Ajuda) Resolvido 90% was marked as the answeruai 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.')
 
 
- 		
			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
 
- 		
			FeeTads's post in (Resolvido)tile que remove storage was marked as the answercoloca 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)
 
- 		
			FeeTads's post in (Resolvido)NPC que troca varios itens por x item em determinado tempo was marked as the answerlocal 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
 
- 		
			FeeTads's post in (Resolvido)Como criar itens VIP was marked as the answer1º 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 ***
 
 
     
     
     
     
			
				