Jump to content

Olá Tibiano! Notamos que você está com um adblocker ligado... 

Nós promovemos servidores dentro da comunidade, para que eles tenham visibilidade.

Por favor, nos ajude a continuar promovendo esses servidores. Adicione nosso domínio na whitelist de seu adblocker, ok? :)

Gengo

[OtClient] Auto-Loot

Recommended Posts

Fala ai galera do xtibia estou aqui trazendo mais um module para o otClient.
Esses dias atras estavo jogando pokestorm e me deparei com o autoloot e decidi fazer um parecido com o deles e então pensei porque não trazer para a comunidade? Afinal não vejo muitos modulos de autoloot para otClient o unico que vi foi o autoloot da DxP, porem não é muito intuitivo comparado com modulo da pokestorm, bom sem mais enrolação vamos lá.

 

Feito o download do arquivo, coloque-o na pasta do seu otClient em /modules/ e pronto já é possível "utilizar-lo", porem com algumas exceções de algumas configurações básicas que temos que fazer para poder utilizar-lo com algumas eficiências.

 

Na pasta do seu otClient/data/ crie uma pasta chamada items e coloque o seus arquivos items.otb e items.xml.

Vai até a pasta do seu otClient/modules/game_things abre o arquivo things.lua e procure a função load(), e coloque o seguinte:

g_things.loadOtb ('/items/items.otb')
g_things.loadXml('/items/items.xml')

Obs: Não se assustem quando entrarem no client para logar, no inicio vai dar uma travada, mas depois de esperar uns segundos ele normaliza, pois o único problema é que o carregamento dos arquivos dos items eles são demorados.

 

Também é preciso fazer umas configurações rápida na parte do servidor para poder funcionar.


Copie e cole esse script e coloque na pasta do servidor em  mods/ e de o nome de autoloot.xml

Please login or register to see this spoiler.

 

Share this post


Link to post
Share on other sites
2 minutos atrás, Thalles Vitor disse:

Seus sistemas são excelentes! vou usa-lo, bom se não for pedir demais é possível que o autoloot funcione sem o button de autoloot?  no caso da imagem em png,quero que funcione sem botão se puder ajudar.

Você fala usar sem o topbutton que fica lá no topo?

 

Share this post


Link to post
Share on other sites

É só remover essa linha:

btnAutoLoot = modules.client_topmenu.addRightGameToggleButton('lootButton', tr('Auto-Loot'), 'loot', toggle)

E caso queira chamar pela tecla de atalho utilize essa:

g_keyboard.bindKeyPress('Ctrl+E', toggle)

 

Share this post


Link to post
Share on other sites
3 minutos atrás, Thalles Vitor disse:

data/creaturescripts/scripts/login.lua:onLogin
Description:
data/creaturescripts/scripts/login.lua:22: attempt to call global 'doSendPlayerExtendedOpcode' (a nil value)
stack traceback:
        data/creaturescripts/scripts/login.lua:22: in function <data/creaturescripts/scripts/login.lua:8>

E seu servidor tem suporte a opcodes?

Share this post


Link to post
Share on other sites
2 minutos atrás, Thalles Vitor disse:

Acho que sim ,meu servidor é base OTPokémon

Certeza? Me parece se não me engano o erro fala que vc não tem a função doSendPlayerExtendedOpcode e ainda manda algo nulo.

Ou então você deve ter configurado algo errado, por favor faça um teste com outra coisa só para tirar a duvida se vc tem essa função, já tem 2 servidores que testei esse autoloot e estão funcionando normal sem esse erro que vc cita.

Share this post


Link to post
Share on other sites
6 minutos atrás, Tiu Biel disse:

Oi amigo, coloquei tudo certinho no meu, mas ao matar o Pokémon ele não pega o loot selecionado na aba, sabe o por que?

Tenta outro autoloot da parte do servidor para poketibia e adapta para usar no módulo, como o autoloot que fica no servidor não foi eu que desenvolvi, não vou saber oque pode estar ocorrendo de errado no seu.

Share this post


Link to post
Share on other sites

@Gengo estou com o seguinte erro:

[16/01/2019 19:24:37] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/login.lua:21: unexpected symbol near 'ï'
[16/01/2019 19:24:37] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/login.lua)
[16/01/2019 19:24:37] data/creaturescripts/scripts/login.lua:21: unexpected symbol near 'ï'


O código:
 

Please login or register to see this spoiler.

 

Share this post


Link to post
Share on other sites
2 horas atrás, Rookie disse:

@Gengo estou com o seguinte erro:

[16/01/2019 19:24:37] [Error - LuaScriptInterface::loadFile] data/creaturescripts/scripts/login.lua:21: unexpected symbol near 'ï'
[16/01/2019 19:24:37] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/login.lua)
[16/01/2019 19:24:37] data/creaturescripts/scripts/login.lua:21: unexpected symbol near 'ï'


O código:
 

Please login or register to see this spoiler.

O erro que acontece é que quando cópia código daqui do forum e coloca em um editor, vem bugado, escreva manualmente ou atente-se os caracteres especiais do code que veio bugado do forum e corriga no seu.

Share this post


Link to post
Share on other sites
3 minutos atrás, braisvilela disse:

Aqui vai até a tela de Login, escolho o personagem e o jogo não loga, o que pode ser?

Devido o carregamento dos arquivo do item xml e otb, ele gera uma lentidão na hora de carregar, porem uma vez carregada ele fica normal, espere um pouco e veras que vai carregar, mas é logico se vc fez tudo certo.

Share this post


Link to post
Share on other sites
Citar


[06/02/2019 16:41:03] [Error - CreatureScript Interface]
[06/02/2019 16:41:03] data/creaturescripts/scripts/player/login.lua:onLogin
[06/02/2019 16:41:03] Description:
[06/02/2019 16:41:03] data/creaturescripts/scripts/player/login.lua:170: attempt to index global 'info' (a nil value)
[06/02/2019 16:41:03] stack traceback:
[06/02/2019 16:41:03]     data/creaturescripts/scripts/player/login.lua:170: in function <data/creaturescripts/scripts/player/login.lua:43>

Eu tenho um problema, eu recebo este erro, você poderia me ajudar?

Mylogin.lua


 

Citar

local config = {
    loginMessage = getConfigValue('loginMessage'),
    useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))
}
local megasStones = {15131, 15133, 15136, 15793, 15783, 15781, 15794, 15784, 15780, 15792}
local megasToPlayer = {
    ["Alakazite"] = {id = 15131, megaID = "", pokeName = "Alakazam"},
    ["Blastoisinite"] = {id = 15133, megaID = "", pokeName = "Blastoise"},    
    ["Gengarite"] = {id = 15136, megaID = "", pokeName = "Gengar"},    
    
    ["Venusaurite"] = {id = 15793, megaID = "", pokeName = "Venusaur"},    
    ["Kangaskhanite"] = {id = 15783, megaID = "", pokeName = "Kangaskhan"},
    ["Tyranitarite"] = {id = 15781, megaID = "", pokeName = "Tyranitar"},
    ["Ampharosite"] = {id = 15794, megaID = "", pokeName = "Ampharos"},    
    ["Scizorite"] = {id = 15784, megaID = "", pokeName = "Scizor"},    
    
    ["Aggronite"] = {id = 15780, megaID = "", pokeName = "Aggron"},        
    ["Blazikenite"] = {id = 15792, megaID = "", pokeName = "Blaziken"},    
}


function BetaItem(cid)
    if getPlayerStorageValue(cid, storages.betaStorage) == -1 then
        addPokeToPlayer(cid, "Shiny Ditto", 0, nil, "poke", true)
        setPlayerStorageValue(cid, storages.betaStorage, 1)
        doSendMsg(cid, "Você ganhou um Shiny Ditto, uma TV Cam e uma Mega Stone para testalos a vontade.")
        
        item = doCreateItemEx(12330)
        doItemSetAttribute(item, "unique", getCreatureName(cid))
        doPlayerAddItemEx(cid, item)
        
        local mega = megasStones[math.random(1, #megasStones)]
        
        for a, b in pairs(megasToPlayer) do
            if mega == b.id then
                addPokeToPlayer(cid, b.pokeName, 0, nil, "shinyyume", true, a)
                break
            end
        end    
    end
end

function onLogin(cid)    

    
    doPlayerSetVocation(cid, 10)
    doSendPlayerExtendedOpcode(cid, 126, "nao")
    doResetPlayerTVSystem(cid)
    
    if not isGod(cid) then
       setPlayerGroupId(cid, 1)
       doRegainSpeed(cid)
    end
    
        if isGod(cid) then -- Resetar diarias se for God
            setPlayerStorageValue(cid, storages.miniQuests.storDayTask1, -1)
            setPlayerStorageValue(cid, storages.miniQuests.storDayTask2, -1)
            setPlayerStorageValue(cid, storages.miniQuests.storDayTask3, -1)
            setPlayerStorageValue(cid, storages.miniQuests.storDayTask4, -1)
        end
        
    if getPlayerLevel(cid) >= 1 and getPlayerLevel(cid) <= 10 then
       doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 0)
    else     
       doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, (getPlayerLevel(cid) >= 200 and 100 or math.floor(getPlayerLevel(cid)/2)) )
    end

    doRegainSpeed(cid)
 print(getCreatureName(cid).. " Se ha conectado")
 --////// storages \\\\\\--
 setPlayerStorageValue(cid, 98988, 0)
   doEreaseDuel(cid)
   setPlayerStorageValue(cid, 500, -1)
   setPlayerStorageValue(cid, 8085, 0)
   --// duel
   setPlayerStorageValue(cid, storages.requestCountPlayer, 0)
   setPlayerStorageValue(cid, storages.requestCountPokemon, 0)
   setPlayerStorageValue(cid, storages.requestedPlayer, 0)
   --// duel
 --////// storages \\\\\\--
 
 --////// Eventos \\\\\\--
registerCreatureEvent(cid, "GodLight")
     registerCreatureEvent(cid, "ShowPokedex")
     registerCreatureEvent(cid, "ClosePokedex")
      registerCreatureEvent(cid, "Mail")
     registerCreatureEvent(cid, "WildAttack")
     registerCreatureEvent(cid, "GuildMotd")
     registerCreatureEvent(cid, "Idle")
     registerCreatureEvent(cid, "ReportBug")
     registerCreatureEvent(cid, "AdvanceSave")
     --Adicionados \/
     registerCreatureEvent(cid, "PlayerLogout")
     registerCreatureEvent(cid, "LookSystem")
     registerCreatureEvent(cid, "Opcode")
     registerCreatureEvent(cid, "EmeraldShop")
     registerCreatureEvent(cid, "PokeStats")
     registerCreatureEvent(cid, "PokeWalk")
     registerCreatureEvent(cid, "PokeSleep")
     registerCreatureEvent(cid, "MoveItem")
     registerCreatureEvent(cid, "UpLevel")
     registerCreatureEvent(cid, "BlockWords")
     --registerCreatureEvent(cid, "PartySystem")
     registerCreatureEvent(cid, "Target")
     registerCreatureEvent(cid, "GeneralConfiguration")
     registerCreatureEvent(cid, "EffectOnAdvance")
     registerCreatureEvent(cid, "TradeRequest")
     registerCreatureEvent(cid, "TradeAccpet")
     registerCreatureEvent(cid, "onAdvance")
     registerCreatureEvent(cid, "onAdvance2")
     registerCreatureEvent(cid, "onAdvance3")
     registerCreatureEvent(cid, "onAdvance4")
     registerCreatureEvent(cid, "onAdvance5")
 --////// Eventos \\\\\\--
 
    if(not isPlayerGhost(cid)) then
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
    end
   
local legs = getPlayerSlotItem(cid, CONST_SLOT_LEGS)
local ball = getPlayerSlotItem(cid, ?

    if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid ~= 0 then
        doItemEraseAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "healthChanged")
    end
    --doOTCSendPokemonHealth(cid)
    --doClearPokemonStatus(cid)

    if isRiderOrFlyOrSurf(cid) and ball.uid ~= 0 then
    local pokeName = getItemAttribute(ball.uid, "poke")
    
                    if isInArray({"ditto", "shiny ditto"}, pokeName:lower()) then
                       pokeName = getItemAttribute(ball.uid, "copyName")
                    end
    
                     local outfit = getPokemonOutfitToSkill(pokeName)
                     local speed = getPokemonSpeedToSkill(pokeName)
                         doSetCreatureOutfit(cid, {lookType = outfit + 351}, -1)
                        
                         doChangeSpeed(cid, -getCreatureSpeed(cid))
                         doChangeSpeed(cid, speed)
                        
                         if isRider(cid) then
                            setPlayerStorageValue(cid, orderTalks["ride"].storage, 1)
                         elseif isFly(cid) then
                            setPlayerStorageValue(cid, orderTalks["fly"].storage, 1)
                              if not hasSqm(getThingPos(cid)) then
                              --   doCreateItem(460, 1, getThingPos(cid))
                              end
                         elseif isSurf(cid) then
                            setPlayerStorageValue(cid, orderTalks["surf"].storage, 1) -- rever o markedPos
                            doChangeSpeed(cid, -getCreatureSpeed(cid))
                            doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
                         end
                         doTeleportThing(cid, getMarkedSpawnPos(cid))
                         setPokemonGhost(cid)
    end                    
    
    setPlayerStorageValue(cid, storages.gobackDelay, -1)
    setPlayerStorageValue(cid, storages.pokedexDelay, -1)
    setPlayerStorageValue(cid, 154585, -1)
    doAddFirstItemsToPlayer(cid)
    --doAddShoppingItem(cid)
        
    -- otclient life
        doSendLifePokeToOTC(cid)
    -- otclient life
    
    local loot = ''
        for i = 1, #getPlayerStorageTable(cid, info.Storages[1]) do
        loot = loot..getItemInfo(getPlayerStorageTable(cid, info.Storages[1])).clientId..'-'..getItemNameById(getPlayerStorageTable(cid, info.Storages[1]))..'@'
end
doSendPlayerExtendedOpcode(cid, 157, loot)
    
    
    return true
end
function doAddFirstItemsToPlayer(cid)
local config = {
            storage = 30001,
            items = {1988, 1987, 2382, 2120, 2550, 2580, 7385, 2395}
            -- 7385 (pokeinfo)
            -- 2395 (portfoil)  ok
            -- 2382    (pokedex)    ok
            -- 2550 (order)        ok
            -- 1987 (bag)        ok
            -- 1988 (badge case)    ok
            -- 2120 (rope)        ok
            -- 2580 (fishing rod)    ok
        }
            setPlayerCap(cid, 7)
            if getCreatureName(cid) == "Account Manager" then
                doSetCreatureOutfit(cid, {lookType = 655}, -1)
            return true
            end
            if getPlayerStorageValue(cid, storages.BugFishing) ~= -1 then return true end
            
            if getPlayerSlotItem(cid, CONST_SLOT_ARMOR).itemid > 0 then
            return true
            end
            
            for _, id in ipairs(config.items) do
                doPlayerAddItem(cid, id, 1)
            end
            local bag = getPlayerItemById(cid, false, 1988).uid
            doAddContainerItem(bag, 12267, 1)
            doAddContainerItem(bag, 12266, 1)
            doAddContainerItem(bag, 12264, 1)
            doAddContainerItem(bag, 12265, 1)
            doAddContainerItem(bag, 12263, 1)
            doAddContainerItem(bag, 12262, 1)
            doAddContainerItem(bag, 12261, 1)
            doAddContainerItem(bag, 12260, 1)
            setPlayerStorageValue(cid, duelTable.wins, 0)
            setPlayerStorageValue(cid, duelTable.loses, 0)
            local pokeBag = getPlayerItemById(cid, false, 1987).uid
            setPlayerStorageValue(cid, storages.BugFishing, 1)
            doTeleportThing(cid, getTownTemplePosition(1), false)

return true
end

local itensShopping = {
    [1] = {{2394, 100}, {12344, 25}, {12286, 2}},
    [2] = {{2391, 200}, {2393, 100}, {2392, 100}},
    [3] = {{12832, 1}},
    [4] = {{12286, 1}},
    [5] = {premiumDays = 30}
}

function doAddShoppingItem(cid)
    local allItems = {}
    local compra = 0
    local msg = ""
    local result = db.getResult("SELECT itemID, compraID FROM playercompras WHERE playerID = '" .. getPlayerGUID(cid) .. "' AND entregue = 0")
    if result:getID() ~= -1 then
        compra = result:getDataInt("compraID")
        allItems[#allItems+1] = result:getDataInt("itemID")
        db.executeQuery("UPDATE playercompras SET entregue = 13 WHERE compraID = ".. compra ..";")
        while(result:next()) do
            allItems[#allItems+1] = result:getDataInt("itemID")
            compra = result:getDataInt("compraID")
            db.executeQuery("UPDATE playercompras SET entregue = 13 WHERE compraID = ".. compra ..";")
        end
    end
    
    if #allItems > 0 then
        for i = 1, #allItems do
            if allItems == 5 then
                doPlayerAddPremiumDays(cid, itensShopping[allItems].premiumDays)
                msg = "Seu pacote de '30 premium days' foi adicionado a sua conta com sucesso!"
                doSendMsg(cid, msg)
            else
            local bag = doCreateItemEx(12694) -- cubone bag de gratis
                for j = 1, #itensShopping[allItems] do
                    doAddContainerItem(bag, itensShopping[allItems][j][1], itensShopping[allItems][j][2])
                end
            
                doPlayerSendMailByName(getCreatureName(cid), bag, 1)
                msg = "Os itens que foram comprados pelo shopping foram enviados para seu cp."
                doSendMsg(cid, msg)
            end
        end
    end
end

function addSkillsToDB(cid)
        local str1 = "INSERT INTO player_skills (player_id, skillid, value, count) VALUES (" .. getPlayerGUID(cid) .. ", 5, 5, 0);"
        local str2 = "INSERT INTO player_skills (player_id, skillid, value, count) VALUES (" .. getPlayerGUID(cid) .. ", 6, 5, 0);"
            db.executeQuery(str1)
            db.executeQuery(str2)
end

 

Edited by Step Records

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By Togumelo
      Please login or register to see this link.

       
      LANÇAMENTO ÀS 8h DA NOITE DESSA SEXTA-FEIRA!
      Mas o test server já ta rolando, dá uma olhada no site!
       

      Please login or register to see this attachment.
       
      O que faz ele ser diferente do Tibia / The Forgotten Server?
      Não tem vocações
      Todo mundo começa como um simples ser-humano com pontos pra serem distribuidos entre os skills
        Não precisa treinar skills
      Cada level que você passa você recebe pontos pra serem distribuidos entre os skills. Quanto maior o seu level, menos pontos você ganha.


      essa gif não é atual
        Todos clubs, sword e axes tem dano baseado no skill Strenght
        Armas corpo-a-corpo e armas à distância dão hit crítico (vê no site seção sobre Critical Hit!)
        Você pode usar duas armas ao mesmo tempo
      A velocidade de ataque vai dobrar (fixar em 200%) mas o ataque da arma vai diminuir em 10%.


        Armas à distância tem o dano baseado em Strenght e/ou Dexterity
        Armas corpo-a-corpo de duas mãos podem causar sangramento
        Você não precisa abrir os monstros enquanto caça (talvez nem usar o mouse)
      Só precisa dar ctrl + click no item que deseja lootear automaticamente, e há também um modo de atacar ao pressionar a barra de espaço.


        Não precisa recarregar a munição
      Basta colocar tudo no quiver.


        O dano máximo das wands e rods pode ser aumentado
      Quando você avança o skill de intelligence você aumenta o dano máximo da wand. A mesma coisa acontece pra faith e rod.
        O acesso às spells é baseado apenas nos skills intelligence e faith
      Não tem requerimento de level ou magic level, você só precisa aumentar o intelligence e faith pra ter novas magias.
        Para usar runas e ter mais dano com spells e runas é preciso ter mais magic
        A tela tem 1 sqm a mais
        Você pode dar um título pro seu char (quando dá look)
      Se tiver os skills necessários você pode ser um mage, um supporter, um knight ou um ranger.
        Skills
      Magic
      Mais dano com spell, runa e dá mais mana.
        Vitality
      Mais vida
        Strenght
      Mais dano com armas corpo-a-corpo e armas à distância de duas mãos
        Defence
      Aumenta a defesa quando tá usando escudo e quando tá sem também (só com arma)
        Dexterity
      Mais velocidade de ataque, velocidade de movimento e dano com armas à distância
        Intelligence
      Mais mana e acesso pra magias e runas ofensivas
        Faith
      Mais mana e acesso pra magias e runas de suporte
        Endurance
      Mais cap e vida

      Please login or register to see this attachment.

       
      Please login or register to see this attachment.


      O SERVER VAI ABRIR ÀS 20h DESSA SEXTA-FEIRA!!!
      Mas o test server já ta rolando, checa o site!

      Please login or register to see this attachment.
    • By RAJADAO
      Ola prezados, estou com um projeto de otserver old school 7.4, estou usando um old cliente 7.72 porem não estamos satisfeitos com ele, gostaria de um novo cliente proprio pro meu projeto, estou disposto a pagar pelo serviço, interessados favor entrar em contato, segue a lista do que preciso.
       

      -Cliente começar com o MAPA FULL aberto.
      -Cliente obter a opção de caminhar pelas teclas WASD.
      -Cliente com ABA LATERAL EXTRA, muito limitado para abrir bps, battle, vip,etc.
      -Opção de sumir players do battle e npcs para facilitar na hora de hunt.
      -Colocar opção para o player ver seu FPS/PING.
      -Desenvolver sistema de CAST no cliente. 
      -Colocar o acess acc do cliente direto pro site oficial do ot.
      -Adicionar o sistema de addons  e outfits 8.6 ao cliente.
       
    • By BlazerX
      Trainer Card
      Fala galera do Xtibia, vim trazer mais uma contribuição para a comunidade, é um módulo para otclient básico porém legal.
       

       
      Como funciona?
      O Trainer Card vai mostrar digamos algumas informações do seu personagem, 
      você pode adicionar mais informações a esse card, vai da criatividade de cada um deixar bem funcional.
       

       
      Script do servidor:
      Crique um arquivo na pasta do seu servidor em data/creaturescript/ e coloque o nome de trainercard.lua
      Please login or register to see this spoiler.
       
    • By Jedediasisme
      Essa modificação permite que ao passar o mouse sobre um item, apareça uma descrição do item. Não tem como causar lag no servidor nem no cliente, pois carrega as informações dentro do arquivo na TAG itemsList
       
      Vai em otclient/modules/game_interface/widgets e abra o arquivo uiitem.lua
      Procure por 
      function UIItem:onHoverChange(hovered)
        UIWidget.onHoverChange(self, hovered)
       
      Salte uma linha e coloque o código abaixo
      Please login or register to see this spoiler.
       
    • By ZoR
      Olá, comecei meus estudos em Otclient, porem tenho muitas duvidas!.
       

       
      Oque ser isso? variaveis? porque todas nil?
       

       
      @onLoad: init() ?
      @onUnload: terminate() ?
       

      Please login or register to see this attachment.
       
      Variaveis com local sem o nil? oque isso muda?
      porque g_game? g_game.IsOnine ? isso é uma função do otclient? como posso tirar essa função da sourcer?
       
       
      Como se inicia um modulo? com local Nome ou Local Nome = nil? ou só a variavel = nil?
      todas ela tem que tem function init()? function onGameConnectionError(message, code) ? de onde saiu onGameConnection?
      sourcer? function CharacterList.terminate() ? 
       
      if charactersWindow then -- se for charactersWindow entao characterList = nil -- lista de char = nil? charactersWindow:destroy() -- :destroy a lista de char ok! charactersWindow = nil -- nil novamente? end function CharacterList.doLogin() ? de onde tira isso? das funçoes da sourcer?
×
×
  • Create New...