Ir para conteúdo

guiguizera

Campones
  • Total de itens

    8
  • Registro em

  • Última visita

Histórico de Reputação

  1. Upvote
    guiguizera deu reputação a GMRaphael em [Tutorial] Todos Os Gym   
    Primeiramente Se Ja Tiver Um Tópico Com Todos os GYM Completos Tirem o Meu Tópico.
     
     
    Dae Galera Do XTibia Hoje Vim Falar Para Vocês Como Adcionar Todos os GYM Em Seus Serves De Pokemon.
     
    E Irei Anexar os Arquivos Lá em Baixo.
     
     
    Bom Vamos Lá:
     
     
    1º Passo: Anexe Todos Arquivos Em Sua Área de Trabalho.
     
    2º Passo: Extraia o Arquivo Lib Em (DATA/LIB).
     
    3º Passo: Extraia o Arquivo CreatureScripts Em (DATA/CRATURESCRIPTS).
     
    4º Passo: Abra o Arquivo TagCreatureScripts Copie o Que Está Dentro e Adcione Esta Tag Em (DATA/CREATURESCRIPTS/ Cresturescripts.XML)
     
    5º Passo: Extraia o Arquivo NPCSCRIPTS Em (DATA/NPC/SCRIPTS)
     
    6º Passo: Extraia o Arquivo NPC Em (DATA/NPC)
     
    7º Passo: Extraia o Arquivo Monsters Em (DATA/MONSTERS/POKES)
     
    8º Passo: Abra o Arquivo TagMonsters Copie o Que Está Dentro e Adcione Esta Tag Em (DATA/MOSTERS/ Monsters.XML)
     
    9º Passo: Para Testar os NPCS GYM Só Falar /n E os Nomes do NPCS E Se Divertir.
     
     
    Creditos:
     
    Creditos Ao brun123 Por Ter Feito o Brock.
    Creditos A Mim Por Ter Feito os Outros GYM.
     
     
    Edit: Funcionando Corretamente.
    Lib.rar
    CreatureScripts.rar
    TagCreatureScripts.txt
    NPCSCRIPTS.rar
    NPC.rar
    Monsters.rar
    TagMonsters.txt
  2. Upvote
    guiguizera deu reputação a Vilden em Aprenda A Usa Rme Map Editor   
    Remere's Map Editor

     
     
    Tópico meu para download do Rme 8.54
    Download clique aqui!
     
     
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     
    Remere's map editor veio para revolucionar, tornando mais fácil de se fazer mapas e
    em pouco tempo, remeres facilitou a vida dos mappers por ter suas bordas automáticas
    e muitas funções adicionais, entre todos os mappers editores remeres é o melhor.
     
     

    Primeiro passo


     
    O primeiro passo para usa-lo é preencher uma boa área com agua assim você poderá
    colocar algum solo como grama, gelo, terra etc.. lembrando que o remeres faz as bordas
    automaticamente.
     
     
    Palette
     
    Palette é aquela janelinha onde fica várias opções e agora irei explicar cada uma delas..
     
     
    Terrain palette
     
    Cave:
     
    Aqui você acha os tiles básicos para começar uma caverna, como chão, parede de caverna, lava, buracos etc..
     
    Nature
     
    Aqui você tem várias coisas, tiles de grama, terra, gelo, montanhas, você também acha alguns
    opções para da um look em seu tile, as 'poeiras' temos 3 opções, areia, terra, pedra.
     
    Roofs
     
    Neste local você acha os telhados, tem vários tipos de telhados, os mais usado é o primeiro.
     
    Snow
     
    Aqui você encontra quase tudo para fazer uma área de gelo, escadas, tiles, montanhas de gelo, cave de gelo
     
    Stairs
    Vários tipos de escadas, não tem todos mais os mais usados estão aqui.
     
    Town
     
    Coisas necessárias para montar uma cidade, pisos diferentes, ruas, paredes, grades etc..
     
     
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     
    Doodad Palette
     
    Architecture
     
    Pilastras, colunas, postes de luz
     
    Beds
     
    Vários tipos de Cama
     
    Corpses
     
    Corpos de humanos, monstros etc..
     
    Exterior
     
    Tochas, portal, alavancas, caixa de correio, enfeites, caixões, carroças etc..
     
    Hangables
     
    Coisas que ficam na parede como, lampadas, relogio, cortinas etc..
     
    Interior
     
    Cadeiras, mesas, balcões, baús, caixas, vazo, tapetes etc..
     
    Magic fields
     
    Os famosos fields, de fire, energy, poison, também magic wall, lembrando que algumas ficam permanentes e outros não
     
    Nature
     
    Tudo de natureza, arvores, pedas, flores etc..
     
    Signs
     
    Todos os tipos de placas.
     
    Smithing
     
    Items para monta sua loja de forjamento
     
    Snow
     
    Já aqui é a natureza de gelo, arvores, pedras, etc..
     
    Splash
     
    Agua, sangue..
     
    Statues
     
    Muitos tipos de Estátuas
     
    Trash
     
    Lixo
     
    Underwater
     
    Caso queira montar algo no estilo fundo do mar, pedras, estrelas do mar, conchas etc..
     
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     
    Item palette
     
    Tudo que é considerado objeto você encontra aqui, não é preciso nem explica os próprios nomes
    já dizem, segue as categorias:
     
     
    House palette, Waypoint palette e Creature palette
     
    House palette ~> Aqui é onde você monta as houses, e vê as que já estão montadas
    (Tutorial de como criar house no final do tópico)
     
    Waypoint palette ~> Não sei exatamente para que serve.
     
    Creature palette ~> Aqui você encontra todas as criaturas do tibia, você pode monta respaws.
    (Tutorial de como criar respaw no final do tópico)
     
    RAW palette
     
    Aqui você vai encontra tudo como veio ao mundo, exemplo se no doodad você clicava na cama
    e ela ja vinha montadinha aqui não, você tem que monta ela por partes, aqui você encontrara tudo, tudo mesmo
    tudo que existe no tibia estará aqui, são um total de 30 categorias.
     
     
     

    .::Tutoriais::.


     
     
    Como criar um respaw:
     
    Vá em creature palette la embaixo tem uma opção a Brushes e la tem spawn time/spawn size, deixe como
    está e tem um botão assim -> Place respaw, clique nele e logo após no local aonde você quer colocar um monster
    a área ira ficar vermelha no map editor então você procura um monster a sua escolha, clicar no nome do monster
    e coloca ele nessa área em vermelho.
     
     
    Como criar house:
    Entre neste link para ler um tutorial feito por Filippe Ferreira, http://www.xtibia.com/forum/topic/114854-fazendo-casas-no-rme/
     
    Como adicionar um novo monster/Npc:
    Entre neste link para ler um tutorial feito por Vilden http://www.xtibia.com/forum/topic/122238-adicionando-npcsmonster-no-palette-rme/
     
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     

    Ferramentas do Map Editor


     
     
    Vá no Terrain pallete, repare que existe uns ícones la embaixo
     
    Opitional Auto Border:
    Aí você vai usando isso para por a "borda" nas montanhas, ele também pode ser usado para por bordas nos items como wooden floor, para pontes.... e ele é um "auto border manual".
     
    Eraser:
    Usado para apagar.
     
    Normal Door, Locked Door, Quest Door e Magic Door:
    São as portas, OBS: só você usar numa parede que o MAP EDITOR automaticamente seleciona o tipo de porta.
     
    Hatch Window:
    Janelas do UPdate 7.92, aquelas que da para fechar.
     
    Window:
    Janelas normais, que não é possível fechar.
     
    PZ TOOL:
    Área de protection Zone.
     
    NON PVP TOOL:
    Igual a pz tool, só que sua mana sobe e tal...
     
    NO LOGOUT TOOL:
    Uma área em que você fica com battle.
     
    PVP ZONE TOOL:
    Área em que os players podem se atacar.
     
     
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     
    FAQ-
     
     
    Como rodar os items?
    Simples, com alguns items do DOODAD palette é possível rodar, apertando a tecla X
     
    Como Randomizar mapa inteiro:
    O RME MAP EDITOR conta com uma função muito útil para os otservers em que você fez com o SIMONE MAP EDITOR, "Randomize Map"
    Nessa função ele randomiza quase todos os tiles, as gramas, o gelo, a terra das caves e etc...
    Para fazer isso vá em Edit > Border Options > e clique em Randomize Map.
     
    Como Fazer todas as bordas:
    Essa função permite por bordas no seu mapa inteiro de uma vez, vá nas opçoes do auto border e clique em Borderize Map, o seu mapa ficará com as bordas.
     
    Como aumentar o zoom?
    Simples, use a "roleta" que tem no mouse.
     
    Como adicionar cidades?
    Map > Edit Towns > Add
    Selecione o jeito que você quer e clique em OK.
     
    Como faço para alterar andar?
    Use o "+" e "-".
    Como faço para apagar tiles de casas / PZ?
    Você pode apagar com qualquer "pincel", mantenha pressionada a tecla CTRL e desenhe. (Shift ainda funciona como normal)
     
    Como eu utilizo a ferramenta apagar?
    Selecione a ferramenta de apagar.
    Se você só clicar com o botão esquerdo do mouse, você só removerá itens na posição atual.
    Se você manter pressionada Ctrl ao clicar com o botão esquerdo do mouse, você apagará telhas e chão.
    Se você manter pressionado Shift ao clicar com o botão esquerdo do mouse você pode selecionar um espaço de onde você deseja excluir todos os itens.
    Se você mantenha pressionada Ctrl, Shift e o botão esquerdo do mouse você pode selecionar um espaço de onde você deseja excluir todos os itens e todo terreno.
    A não ser que você desmarque a opção "Eraser não deleta unique itens" no Menu preferências a borracha não exclui itens em containers ou itens com unique e / ou action ID.
     
    Como eu faço casas?
    Bom, para fazer casas no RME MAP EDITOR você deve criar uma cidade primeiro....
    Para criar uma cidade vá até MAP > EDIT TOWNs
    Ali você faz a cidade...
    Agora faça uma casa, vá no pallete de casas, selecione a cidade e clique em ADD.
    Selecione os Tiles da casa e depois a saída dela.
    Pronto, aí está sua casa.
     
     
    Eu não encontrar um certo item, onde está ela?
    Você pode encontrar todos os itens utilizando o "Raw Palette" ou procure - o pressionando "J" no teclado. Você pode procurar por ambos os nomes e IDs. A lista com todos os itens encontrados de pesquisa serão exibidos em uma lista abaixo.
     
    Como faço para copiar / colar / mover uma parte do mapa?
    Se você tem um item ou "pincel" selecionado de um espaço para selecionar o "ponteiro" (ou o que ele é chamado). Agora mantenha pressionado shift e arraste o mouse, mantendo baixo botão esquerdo do mouse para selecionar uma área. Agora, você pode simplesmente mover a área selecionada ou pressione Ctrl + c, Ctrl + v para, em seguida, colá - lo no Editor. Você precisará clicar com o botão esquerdo do mouse antes de botar o conteúdo colado ao próprio mapa.
     
    Eu não posso colocar staglamites sobre a água!
    Você pode colocar doodads sobre blocking tiles, mantenha pressionada ALT.
     
    Eu quero outra árvore! Posso ver os tipos de variações?
    Mantenha pressionada CTRL e clique em espaço, enquanto o doodad estiver selecionado a variação mudará.
     
    As paredes têm a orientação errada! Como faço para rodar elas?
    Mantenha pressionado ALT com o wallbrush selecionado e clique no tile para girar que parede.
     
    Como fazer montanhas de neve/gelo?
    Bom, primeiro você deve baixar isso AQUI, quando substituir os arquivos, vá até a terrain pallete, e depois snow.
    Irá perceber que há 2 novos ícones, snowy mountain e icy mountain.
    Agora clique neles, faça a montanha que quiser, ficara meio "bugado", agora vá na ferramente "optional auto border", e faça as bordas da montanha de gelo.
     
    Quando eu abro meu mapa a tela fica branca!!
    Não é em qualquer pc que o remeres funciona, caso aconteça isso no seu pc
    apenas reabra o mapa caso ainda fique com a tela branca tente reinstala o
    remeres, tente abrir apenas o remeres.
     
     
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
    -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     
    Atalhos
     
     
     
    Lembrando que existem outros, mais não são importantes igual aos citados.
     
     
    Video auxiliar:
    --------------------------------------------------------------

    http://www.youtube.com/watch?v=vHnw9VTv3C8&feature=player_embedded
    --------------------------------------------------------------
     
     
     
     
     
     
    Qualquer dúvida pode postar, atualizarei o tópico sempre que puder, caso encontre algum erro
    poste.
     
    Obrigado.
     
     
    Tópico original (desatualizado) ~> clique aqui!
  3. Upvote
    guiguizera deu reputação a GuuhTorres em Guuh Torres Vs 4.0   
    Guuh Torres Vs 4.0
     
    *Pessoal,me desculpem pela demora da atualização,pois tinha muitos bugs nesta base,e em pedidos de vários xtibianos,arrumei o "Pokemon Squadium" do brun123...Este server era um bom server,mais tinha muitos bugs,irei listar os que eu arrumei,ou acrescentei:
     
    -Catch
    -Goback
    -Portrait
    -Pokedex
    -Order
    -Talkactions
    -!lg para mudar a linguagem (English-Português)
    -Status sistema
    -Novos pokemons (Johto-Shinys)
    -Coloquei mais moves (Johto)
    -Npc Name (Que coloca um apelido ao pokemon) no ultimo andar do CP
    -Novo Mapa do Betinhowz666
    -Novas quests
    -Novas Spawns (Eu não sei fazer muito bem,mais dá para usar)
    -PVP ZONE
    -Efeito ao upar level
    -Client na pasta (IP : 127.0.0.1)
    -Senha do GOD : guuh/torres
     
    DOWNLOAD do server:
     
    -Guuh Torres vs 4.0
     
    Créditos :
     
    -GuuhTorres 25%
    -Brun123 40% (Caso você ler este tópico,peço que adicione ght-2-@hotmail.com)
    -Betinhowz666 15%
    -Xtibia 5%
    -Victorkta 5%
    -Ciffer 5%
    -Italo 5%
     
     
     
     
    QUE VENHAM OS REPS :button_ok:
    -------------------------------------------------------------
    PRÓXIMA ATUALIZAÇÃO!!!
     
    Na próxima atualização irei fazer sem os BUGS,que vocês falarem...
  4. Upvote
    guiguizera deu reputação a Kydrai em Vip System By Account V1.0   
    Vip System by Account 1.0


    By Kydrai

     
    Este é um vip system por account, ou seja, um sistema de vip válido para todos os characters de uma determinada conta.
     
    O script foi testado no TFS 0.3.6 - 8.54.
    E no site Gesior 0.3.4 beta4.
    Em caso de erros ou dúvidas é só postar.
     

    Funções do Script


    Função necessária para começar a usar o script:
    installVip() -> Cria a coluna no banco de dados para usar o sistema de vip (testei somente em sqlite, mas acredito que funcione em mysql)
     
    Funções que utilizam o account id:
    doTeleportPlayersByAccount(acc, topos) -> Teleporta todos os players da account
    getVipTimeByAccount(acc) -> Pega o tempo de vip
    setVipTimeByAccount(acc, time) -> Edita o tempo de vip
    getVipDaysByAccount(acc) -> Pega o tempo de vip em dias
    isVipAccount(acc) -> Verifica se é vip
    addVipDaysByAccount(acc, days) -> Adiciona dias de vip
    doRemoveVipDaysByAccount(acc, days) -> Remove dias de vip
    getVipDateByAccount(acc) -> Pega a data e hora que irá terminar a vip
     
    Funções que utilizam o creature id (cid):
    doTeleportPlayers(cid, topos) -> Teleporta todos os players da account
    getVipTime(cid) -> Pega o tempo de vip
    setVipTime(cid, time) -> Edita o tempo de vip
    getVipDays(cid) -> Pega o tempo de vip em dias
    isVip(cid) -> Verifica se é vip
    addVipDays(cid, days) -> Adiciona dias de vip
    doRemoveVipDays(cid, days) -> Remove dias de vip
    getVipDate(cid) -> Pega a data e hora que irá terminar a vip
     

    Inserindo as funções


    Abra a pasta data/lib, crie um arquivo lua e coloque:
    vipAccount.lua

    --[[ Name: Vip System by Account Version: 1.0 Author: Kydrai Forum: http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/ [Functions] -- Install installVip() -- By Account doTeleportPlayersByAccount(acc, topos) getVipTimeByAccount(acc) setVipTimeByAccount(acc, time) getVipDaysByAccount(acc) isVipAccount(acc) addVipDaysByAccount(acc, days) doRemoveVipDaysByAccount(acc, days) getVipDateByAccount(acc) -- By Player doTeleportPlayers(cid, topos) getVipTime(cid) setVipTime(cid, time) getVipDays(cid) isVip(cid) addVipDays(cid, days) doRemoveVipDays(cid, days) getVipDate(cid) ]]-- -- Install function installVip() if db.executeQuery("ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;") then print("[Vip System] Vip System instalado com sucesso!") return TRUE end print("[Vip System] Não foi possível instalar o Vip System!") return FALSE end -- By Account function doTeleportPlayersByAccount(acc, topos) if db.executeQuery("UPDATE `players` SET `posx` = "..topos.x..", `posy` = "..topos.y..", `posz` = "..topos.z.." WHERE `account_id` = "..acc..";") then return TRUE end return FALSE end function getVipTimeByAccount(acc) local vip = db.getResult("SELECT `viptime` FROM `accounts` WHERE `id` = "..acc..";") if vip:getID() == -1 then print("[Vip System] Account not found!") return FALSE end return vip:getDataInt("viptime") end function setVipTimeByAccount(acc, time) if db.executeQuery("UPDATE `accounts` SET `viptime` = "..time.." WHERE `id` = "..acc..";") then return TRUE end return FALSE end function getVipDaysByAccount(acc) local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) return days <= 0 and 0 or days end function isVipAccount(acc) return getVipDaysByAccount(acc) > 0 and TRUE or FALSE end function addVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue) setVipTimeByAccount(acc, time) return TRUE end return FALSE end function doRemoveVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local time = vipTime - daysValue setVipTimeByAccount(acc, (time <= 0 and 1 or time)) return TRUE end return FALSE end function getVipDateByAccount(acc) if isVipAccount(acc) then local vipTime = getVipTimeByAccount(acc) return os.date("%d/%m/%y %X", vipTime) end return FALSE end -- By Player function doTeleportPlayers(cid, topos) doTeleportPlayersByAccount(getPlayerAccountId(cid), topos) end function getVipTime(cid) return getVipTimeByAccount(getPlayerAccountId(cid)) end function setVipTime(cid, time) return setVipTimeByAccount(getPlayerAccountId(cid), time) end function getVipDays(cid) return getVipDaysByAccount(getPlayerAccountId(cid)) end function isVip(cid) return isVipAccount(getPlayerAccountId(cid)) end function addVipDays(cid, days) return addVipDaysByAccount(getPlayerAccountId(cid), days) end function doRemoveVipDays(cid, days) return doRemoveVipDaysByAccount(getPlayerAccountId(cid), days) end function getVipDate(cid) return getVipDateByAccount(getPlayerAccountId(cid)) end

    Exemplos de uso


    Talkaction
     
    GOD:
    /installvip
    /addvip name, days
    /removevip name, days
    /checkvip name
     
    Player:
    /buyvip
    /vipdays
     
    talkactions.xml:

    <talkaction log="yes" access="5" words="/installvip;/addvip;/removevip;/checkvip" event="script" value="vipaccgod.lua"/> <talkaction words="/buyvip;/vipdays" event="script" value="vipaccplayer.lua"/>
    vipaccgod.lua:

    function onSay(cid, words, param, channel) local t = param:explode(",") local name, days = t[1], tonumber(t[2]) if words == "/installvip" then if installVip() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Vip System instalado com sucesso!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não foi possível instalar o Vip System!") end elseif words == "/addvip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then addVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip ao "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar dia(s) de vip a este player.") end elseif words == "/removevip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then doRemoveVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você retirou "..days.." dia(s) de vip do "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar dia(s) de vip a este player.") end elseif words == "/checkvip" then if name then local acc = getAccountIdByName(name) if acc ~= 0 then local duration = getVipDateByAccount(acc) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O "..name.." possui "..getVipDaysByAccount(acc).." dias de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode visualizar os dias de vip a este player.") end end return TRUE end
    vipaccplayer.lua:

    function onSay(cid, words, param, channel) if words == "/buyvip" then local price = 1000000 local days = 30 if doPlayerRemoveMoney(cid, price) then addVipDays(cid, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..price.." para adicionar "..days.." dia(s) de vip.") end elseif words == "/vipdays" then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end
    Movement (Tile)
     
    Coloque actionid 15000 em um tile onde somente os vips poderão passar.
     
    movements.xml:

    <movevent type="StepIn" actionid="15000" event="script" value="viptile.lua"/>
     
    viptile.lua:

    function onStepIn(cid, item, position, fromPosition) if isVip(cid) == FALSE then doTeleportThing(cid, fromPosition, false) doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Somente players vip podem passar.") end return TRUE end
    Creaturescript (Login)
     
    Quando player logar irá verificar se a vip do player acabou, se sim então irá teleportar todos os players da account para o templo, se não irá mostrar o tempo da vip.
     
    creaturescripts.xml:

    <event type="login" name="viplogin" script="viplogin.lua"/>
     
    viplogin.lua:

    function onLogin(cid) local vip = isVip(cid) if getVipTime(cid) > 0 and vip == FALSE then local townid = 1 doPlayerSetTown(cid, townid) local templePos = getTownTemplePosition(getPlayerTown(cid)) doTeleportThing(cid, templePos, false) setVipTime(cid, 0) doTeleportPlayers(cid, templePos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua Vip acabou!") elseif vip == TRUE then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end
    Action (Door)
     
    Coloque actionid 15001 na door onde somente os vips poderão passar. Use a porta gate of expertise (id: 1227)
     
    actions.xml:

    <action actionid="15001" script="vipdoor.lua"/>
     
    vipdoor.lua:

    function onUse(cid, item, fromPosition, itemEx, toPosition) if isVip(cid) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Somente players vip podem passar.") elseif item.itemid == 1227 then doTransformItem(item.uid, item.itemid + 1) doTeleportThing(cid, toPosition) end return TRUE end
    NPC (Vendedor de VIP)
     
    vipnpc.xml:

    <?xml version="1.0" encoding="UTF-8"?> <npc name="Vendedor de VIP" script="vipnpc.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="Hello |PLAYERNAME|, I sell {vip} days."/> </parameters> </npc>
     
    vipnpc.lua:

    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) end function onThink() npcHandler:onThink() end function buyVip(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if doPlayerRemoveMoney(cid, parameters.price) then addVipDays(cid, parameters.days) npcHandler:say('Thanks, you buy '..parameters.days..' vip days. You have '..getVipDays(cid)..' vip days.', cid) else npcHandler:say('Sorry, you don\'t have enough money.', cid) end npcHandler:resetNpc() return true end local node1 = keywordHandler:addKeyword({'vip'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want buy 30 vip days for 1000000 gp\'s?'}) node1:addChildKeyword({'yes'}, buyVip, {price = 1000000, days = 30}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, then.', reset = true}) npcHandler:addModule(FocusModule:new())
     

    Erros e Soluções


     

    Configurando o Gesior


    Com essa configuração irá aparecer o vip status do player no site e será possível vender vip pelo site.
    Se eu esqueci de alguma coisa é só avisar.
     
    accountmanagement.php
    Depois de:

    if(!$account_logged->isPremium()) $account_status = '<b><font color="red">Free Account</font></b>'; else $account_status = '<b><font color="green">Premium Account, '.$account_logged->getPremDays().' days left</font></b>';
    Adicione:

    if(!$account_logged->isVip()) $account_vip_status = '<b><font color="red">Not Vip Account</font></b>'; else $account_vip_status = '<b><font color="green">Vip Account, '.$account_logged->getVipDays().' days left</font></b>';
    Depois de:

    <td class="LabelV" >Account Status:</td><td>'.$account_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" >
    Adicione:

    <td class="LabelV" >Account Vip Status:</td><td>'.$account_vip_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" >
     
    pot/OTS_Account.php
    Substitua:

    private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0);
    Por:

    private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0, 'viptime' => 0);
    Substitua:

    $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch();
    Por:

    $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('viptime') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch();
    Substitua:

    $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);
    Por:

    $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('viptime') . ' = ' . (int) $this->data['viptime'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']);
    Depois de:

    public function getPremDays() { if( !isset($this->data['premdays']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return $this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])); }
    Adicione:

    public function getVipDays() { if( !isset($this->data['viptime']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return ceil(($this->data['viptime'] - time()) / (24*60*60)); }
    Depois de:

    public function isPremium() { return ($this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])) > 0); }
    Adicione:

    public function isVip() { return ceil(($this->data['viptime'] - time()) / (24*60*60)) > 0; }
     
    characters.php
    Substitua:

    if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Vip Status:</TD>'; $vip = $SQL->query('SELECT * FROM player_storage WHERE player_id = '.$id.' AND `key` = '.$config['site']['show_vip_storage'].';')->fetch(); if($vip == false) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } }
    Por:

    if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Account Vip Status:</TD>'; if(!$account->isVip()) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } }
     
    shopsystem.php (+Créditos ao GM Bekman)
    Substitua:

    if($buy_offer['type'] == 'pacc') { $player_premdays = $buy_player_account->getCustomField('premdays'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); $buy_player_account->setCustomField('premdays', $player_premdays+$buy_offer['days']); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_premdays == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>PACC added!</h2><b>'.$buy_offer['days'].' days</b> of Premium Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.<br />Now you have <b>'.$user_premium_points.' premium points</b>.<br /><a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; }
    Por:

    if($buy_offer['type'] == 'pacc') { $player_viptime = $buy_player_account->getCustomField('viptime'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); if($player_viptime > 0) $buy_player_account->setCustomField('viptime', $player_viptime + ($buy_offer['days'] * 24 * 60 * 60)); else $buy_player_account->setCustomField('viptime', time() + ($buy_offer['days'] * 24 * 60 * 60)); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_viptime == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>VIP Days added!</h2><b>'.$buy_offer['days'].' days</b> of Vip Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.<br />Now you have <b>'.$user_premium_points.' premium points</b>.<br /><a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; }
     

    Links Úteis


    01- [Gesior Acc] Vendedo Vip Pelo Pacc
    Créditos: GM Bekman
     
    02- Double Exp Para Vip
    Créditos: Vodkart
     
    03- Outfits Só Para Jogadores Vips
    Créditos: Vodkart
  5. Upvote
    guiguizera deu reputação a ultimate1996 em [Tutorial]Criando Website Com Xampp   
    Opa, fala xTibia '-'.. Vi que muitas pessoas estavam querendo fazer um site para seu servidor e não sabem como fazer... Então resolvi postar um tutorial completíssimo aqui..
     

    O que vamos precisar? -&amp;gt; Xampp ( 1.6.5 ) - Download - http://www.oldapps.com/xampp.php?old_xampp=38 -&amp;gt; Gesior Acc. Maker ( 0.3.8 ) - Download - http://www.mediafire.com/?u0bao9bcp9ua5vr -&amp;gt; Um servidor de sua escolha.Pode ser qualquer um desde que tenha o arquivo .mysql.
     
    PS: NÃO RESPONDO A QUEM TIVER O ERRO DO INSTALL.PHP . ESSE ERRO É CAUSADO POR CAUSA DA UTILIZAÇÃO DE OUTRA VERSÃO DO XAMPP E DO GESIOR, POR ESSE MOTIVO EU COLOQUEI O XAMPP 1.6.5 QUE ESTÁ FUNCIONANDO! NÃO USE A VERSÃO MAIS RECENTE DO XAMPP!
     
    Vamos ao tutorial!
    Espere... vai criar um site sem saber como funciona?
    O site de seu servidor será feito em PHP. E o que vai ter nele? Os jogadores de seu servidor poderão criar suas contas, ver notícias do servidor, ver outros jogadores, criar guildas, e muito mais dependendo de como você manusear seu website.
     
    OBS1 : É altamente recomendável que escolha uma forte senha para sua conta de Admin. Pois se seu servidor tiver sucesso, certamente "hackers" tentarão atacar sua database e seu servidor.
     
    OBS 2: Seu site ficará online apenas quando o Xampp estiver ativo com o Apache e MySQL sendo executados, ou seja, apenas quando você estiver no computador. Para seu site ficar online 24 horas, você precisaria de uma hospedagem para php.
     
    Agora que já temos tudo, vamos começar !!
     
     
    1°) Abra o instalador do XamPP, e instale-o.

     
    2°) Selecione aonde a pasta do XamPP ficará salva. (de preferência algum lugar de fácil acesso)

     
    3°) Deixe apenas a primeira e a segunda opções marcadas e clique em Next.

     
    4°) Aguarde o fim da instação e provavelmente uma tela preta irá aparecer.

     
    5°) Após o fim da instalação, clique em Yes para abrir o XamPP e dê Start em Apache e MySQL.

     
    6°) Clique em Admin do Apache. Você será redirecionado para a sua localhost (endereço que apenas você entra). Clique em Português (Brasil).

     
    7°) No canto esquerdo do site , clique na Aba Segurança. Vá descendo até achar " http://localhost/sec...mppsecurity.php " . Clique.
     
    OBS : Se você não conseguiu abrir a página de Segurança, vá na pasta do seu Xampp/security/htdocs/lang e renomeie o arquivo pt para pt_br .
     
    8°) Após ter clicado, deverá ser redirecionado para uma página parecida com essa:

     
    OBS :Faça o numero 1 e depois clique em Alterar Senha. Depois Faça o numero 3 e clique em Tornar Seguro o Diretorio do XamPP.
     
    9°) Após ter feito isso, dê Stop no MySql (no XamPP) e dê Start denovo. Agora vá em seu navegador e digite :

    localhost/phpmyadmin
     
     
    10°) Digite a senha que foi criada há pouco tempo que eu disse que era para a criação do banco de dados.
     
    11°) Minimize seu navegador e vá na pasta de seu servidor, e abra o arquivo config.lua.
    Tire todos os espaços iniciais e as "frases" iniciadas com o sinal de " - " .
    Veja :

     
    12°) Não feche o config.lua ainda, vá descendo até achar informações sobre a database de seu servidor ... algo parecido com isto :

    sqlType = "mysql" &amp;lt;- se estiver em sqlite, mude para mysql sqlHost = "localhost" sqlPort = 3306 sqlUser = "root" sqlPass = "123456" &amp;lt; - coloque a senha que foi criada para entrar no banco de dados. sqlDatabase = "otserv" &amp;lt; - coloque o nome de sua database , coloque " otserv " para facilitar. sqlFile = "otserv.s3db" &amp;lt; - de prefencia, coloque " otserv.s3db " ( o mesmo nome de sua database ) sqlKeepAlive = 0 mysqlReadTimeout = 10 mysqlWriteTimeout = 10 encryptionType = "plain"
     
    13°) Salve e feche o config.lua. Agora vamos voltar a pagina minimizada (localhost/phpmyadmin) :

     
    14°) Clique na aba Importar na parte superior da tela.
     
    15°) Agora Selecione o Arquivo para Importar. Selecione o arquivo terminado em .sql que fica na pasta de seu servidor e clique em Executar no canto inferior direito.
     
    16°) Pronto !! A database de seu servidor foi criada. Agora vamos instalar os arquivos do site.
     
    17°) Abra a pasta do XamPP/htdocs. Apague tudo que tem dentro de htdocs e cole tudo o que veio dentro da pasta do Gesior ACC.
     
    18°) Abra o XamPP novamente e clique em Admin do Apache.
     
    19°) Uma nova pagina foi aberta, agora você terá que fazer mais 5 passos rápidos.
     
    19.1) Set Server Path
    Coloque o diretório da pasta de seu servidor. Ex : C:\Users\user\Desktop\Tibia Server
    Clique em Set Server Path.
     
    19.2) Check database connection
     
    19.3) Add tables and columns to DB
     
    19.4) Agora desça e clique no botão.
     
    19.5) Set Admin Account
    Coloque uma senha SEGURA pois esse será o password do administrador do site e servidor.
     
    19.6) Load Monsters from OTS
    Carregue os monstros do servidor.
     
    19.7) Load Spells from OTS
    Carregue as magias do servidor.
     
    20°) Agora você deverá ser redirecionado para seu site, e você pode acessá-lo pelo localhost ou pelo ip do seu servidor.
    Para acessar sua database, digite em seu navegador : localhost/phpmyadmin
     
    Pronto !! Seu site foi criado :]
     
    Colocando seu site online pelo 8090 e Desbloqueando a porta 8090 :
     
    1° - Acesse a pasta do XamPP/apache/conf e abra o arquivo httpd com o bloco de notas.
     
    Procure por :

    Listen 80
     
    E por :

    ServerName localhost:80
     
    Substitua todos os 80 por 8090.
     
    2° - Dentro da pasta conf, abra a pasta extra, e em seguida abra httpd-ssl e procure por :
     

    Listen 443
     
    E por:

    <virtualhost _default_:443="">
     
    Substitua esses 443 por 4499.
     
    Agora vá em seu firewall e Adicione a Porta 8090 e Porta 80 e marca a opção TCP.
     
    Se usar Roteador, desbloqueie as portas também.
     
    Site por porta 80
    localhost
     
    Site por porta 8090
    localhost:8090
     
     
    Colocando seu site online pela porta 80 (A porta 80 seria o ip normal de seu servidor. Exemplo : teste.servegame.com. ) A porta 80 não necessita de nada no final.
     
    Para que as pessoas entrem pela porta 80, não necessita mudar nada na pasta do Xampp. Pois ela ja está configurada para entrarem.
     
    Só é necessário desbloquear a porta 80 no seu modem ou roteador. E desbloquear a porta 80 pelo Firewall também.
     
    VIDEO AULA - FEITA EM 2/4/2012 (DESCULPA , AS VEZES TENHO QUE PENSAR QUANDO FALO EM PORTUGUES, PORQUE NAO MORO NO BRASIL)!!
     
     
    Créditos : 100% por Mim :]
     
    Não mexo mais com Tibia, mas ainda respondo a qualquer dúvida que eu esteja capacitado a responder (:
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...