Ir para conteúdo

gustavoMtek

Cavaleiro
  • Total de itens

    175
  • Registro em

  • Última visita

  • Dias Ganhos

    1

Histórico de Reputação

  1. Upvote
    gustavoMtek recebeu reputação de Erimyth em New Eri Baiak 8.6 Editado. V2.0   
    Rep+ para incentivar você continuar com seus update, gogo em busca de um baiak 100% sem bug !!!
  2. Upvote
    gustavoMtek recebeu reputação de mario21 em Vip Promotion   
    removido
  3. Upvote
    gustavoMtek recebeu reputação de SarioYana em Erro nas Vocations ! Me ajude!   
    funfo? Rep
     
    cria outro topico com esse pedido
  4. Upvote
    gustavoMtek deu reputação a Erimyth em New Eri Baiak 8.6 Editado. V2.0   
    AGORA NA VERSÃO 2.0
     
    Ola amigo Xtibianos vim trazer uma novidade a vocês...
    sei que existem varios Baiaks por ai.. todos diferentes alguns são até iguais mais com funções inovadoras..
     
    A um tempo atras resolvi criar um Baiakão pra mim rsrs. E pior que deu certo, em 5 dias online consegui conquistar mais de 100 players fixos online. mais acabei ficando sem tempo de resolver tudo sozinho e resolvi fechar.
     
    o server ficou parado aqui.. muitos no msn me pedirão e eu nunca tive coragem de entregar ele assim de mão beijada né guardei por um bom tempo.. Mais.... hoje resolvi dar uma olhada nele e enquanto eu via o mapa .. funções.. e outras coisas mais , acabei achando interessante eu liberar ele aqui pra vocês Xtibianos... Então chega de papo e vamos ao que Importa....
     
    Baiak 8.60
    Usando Crystal server
    All features, actions, funções 100%
    Addons 100%
    Spells 100%
    Vocações balanceadas.
    Estabilidade garantida.
    Serve save sem lag
    Clean 100%
    Talkactions GOD, CM, GM 100%

    MAPA
    Baiak Yourots Editado por mim.
    INQ. Quest 100%
    POI 100%
    Anihi 100%
    Areá VIP com Hunts e teleports 100%
    Sala de teleports Arenas e muito mais...

    LAST UPDATE
    VIP 1 - 100%
    VIP 2 - 100%
    Adicionado Comando !buyvip por 3kk
    Adicionado Novos Outfits "Elf e Vampire"
    Mapa com novo visual
    npcs concertados e melhorados
    Novas quests
    novas hunts
    novas arenas

    PRINTS...
     
    Trainers
     
    Cidade...
     
    Addon Elf...
     
    Vampire Addon...
     
    Templo...

     
     
    Novos Teleports no DP

     
     
    É isso ai galera .. já que viram um pouco do mapa.. irei postar abaixo beleza xD acho que sera util para alguem que esteja a proucura de um baiak estavel.. Se a galera curtir estarei disponibilizando ele na versão 9.44 do Crystal server...
     
    ACC GOD = god/god
     
    CREDITOS:
    Tryller - desenvolvedor crystal server.
    Erimyth - Edição, melhorias e adaptações de novas actions.
    Equipe Baiak Yourots.

    DOWNLOAD:
    LINK ON - >>> Mediafire <<<

    SCAN: CLICK AQUI - VIRUSTOTAL <- Scan atualizado com a versão 2.0
  5. Upvote
    gustavoMtek recebeu reputação de SirPotter em NOVO! Baiak Extreme Otprojects 0.7 - O Melhor Baiak! - Com Woe,dota, Coliseum,war System   
    /\ -,- acabei de baixar ....
     
    apos vc clika no link de download, la em sima no canto >>/\ tem clika lá e baixa o server e seja feliz
  6. Upvote
    gustavoMtek deu reputação a SirPotter em NOVO! Baiak Extreme Otprojects 0.7 - O Melhor Baiak! - Com Woe,dota, Coliseum,war System   
    Baiak Extreme OTProjects 0.7 - O MELHOR BAIAK! (8.60)
    Servidor feito pela Otprojects.
    Fala galera estou aqui para apresentar o novo Baiak Extreme, A OTProjects trabalhou muito tempo neste servidor. Ele custava cerca de 35 Reais na loja da OTprojects, mas foi liberado de graça e eu estou repassando pra vocês. Este servidor é um dos Mapas Baiak mais completos, possui WoE, Dota, Coliseum, Zombie e outros Eventos. Tá esperando o que? Confira logo!

    Cidades:
    ├ Baiak City
    ├ Desert City
    ├ Hydraland
    ├ Yalahar (Cidade VIP)
    └ Thais


    Imagem #1:
    Templo - Baiak City

    Imagem #2:
    Glacial Area


    Imagem #3:
    Baiak City





    O Que Contêm no Servidor:
    ├ Eventos Exclusivos :
    ├DotA
    ├ WoE
    ├ Coliseum
    ├ Zombie Event
    ├ Yalahar como City VIP
    ├ City do Baiak Totalmente Reformulada.
    ├ Novos Teleports e Quests
    ├ War Castle
    ├ Novos NPC'S
    ├ War System.
    └ TFS 0.4 DEV Rev: 3777 Já Compilado.




    Lista Das Principais Quests (Todas Funcionando 100%):
    ├ The Annihilator Quest
    ├ Demon Helmet Quest
    ├ Firewalker Boots Quest
    ├ The Inquisition Quest
    ├ The Pits of Inferno Quest
    ├ The Demon Oak Quest
    └ In Service of Yalahar Quest







    Update 0.7:
    - Sem o Bug dos Stages
    - Com TFS 0.4 REV 3884 - O MELHOR PARA WINDOWS
    - Crashes no Console Removidos
    - Agora em MYSQL, Recomendo que usem o Xampp e o Gesior para fazer o Site.




    Senha do God:
    god/god




    Como Abrir o Mapa Caso dê Erro:
    Vai no RME
    Aperta em File>New>Import Map e Selecione o Mapa do Baiak Extreme.



    Download & Scan
    ATENÇÃO:
    UTILIZE MYSQL para Melhor Resultado!


    Download




    Os vírus acusados estão no Distro, o Servidor está Limpo!



     



    ATENÇÃO!
    Para o MELHOR FUNCIONAMENTO DO OT, Recomendo que USEM MYSQL!




    Créditos:
     
  7. Upvote
    gustavoMtek deu reputação a crazyboy em Atlantyda World. Agora Com Executável.   
    Eu gostaria de compartilhar com vocês como é interessante que Atlantida World servidor. Ao mesmo tempo o projeto nasce de um grande OTS .
    Atlantyda World tratou-se um super server que pertencia a uma equipa polaca, tive o prazer de jogar nele, mas ao final de algum tempo fechou.


    O server esteve online varios meses, no entanto, alguém nao se apercebeu que as más escolhas da administração resultou em uma grande queda. Pack Full contém literalmente tudo para gozar as suas Atlântida! Mapa, scripts, actions, monters,etc! O importante é tudo isso vem de uma fonte legal como era na administração.Pessoalmente, eu não tenho tempo para abrir de novo este OTS por isso quis compartilhar com vocês tudo o que qualquer um de vocês pode reconstruir o que foi acima no fumo!
     
     
     
     
     
     




     
     


    Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 2202x1392.



    Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 801x586.



    Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 801x586.



    Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 801x586.



    Esta imagem é reduzida. Clique nesta barra para ver a imagem completa. Imagem original: 801x586.




     



     
     



     



     



     

    Download


    ou



    Download



    Vírus Total

     
     

    Depois de vários pedidos decidi colocar um executável compactivel com windows, mas aconselho a configurar os vossos itens aconselho a utilização de rook para um maior rpg, bom jogo não esqueçam de um comentário e do REP+.


     

    Download Com exe e dlls

     

    Se tiver alguma dificuldade reporte-me, server configurado para ligar um mysql.






  8. Upvote
    gustavoMtek recebeu reputação de Eskylo em Mudanças No Server Save   
    os kra ia com makers e pegava posion pra um scorpion, ai pedia pra algum noob usa convince rune no bixo e depois os kra morria com os makers que tinha pegado poison e o mlk que convenceu pegava frag :X ai geral saia red ou black skull
  9. Upvote
    gustavoMtek recebeu reputação de dudumal em [Encerrado] Bug Estranho No Target   
    Baixa esse executavel e troca pelo oque que tem no seu servidor e que o bug vai parar....
     
    Executavel compilado: Megaupload
    Scan: VirusTotal
     
    Rep :button_ok:
  10. Upvote
    gustavoMtek recebeu reputação de NightmareRullesz em [Encerrado] Bug No Target   
    Download
     
    Executavel compilado: Megaupload
    Scan: VirusTotal
     
    Creditos:MatheusMkalo
  11. Upvote
    gustavoMtek recebeu reputação de 1579091 em [Encerrado] Bug No Target   
    Download
     
    Executavel compilado: Megaupload
    Scan: VirusTotal
     
    Creditos:MatheusMkalo
  12. Upvote
    gustavoMtek recebeu reputação de yurisavio em [Pedido] - Alavanca Que Sumona Monstros E !aol   
    em data\talkactions\talkactions.xml
     

    <talkaction words="!aol" script="aol.lua"/>
     
    em data\talkactions\scripts
    criar um arquivo .lua e adc

    function onSay(cid, words, param) if(words == "!aol") then if(doPlayerRemoveMoney(cid, 0000) == TRUE) then doPlayerAddItem(cid,2173,1) doSendMagicEffect(getCreaturePosition(cid),tmp, CONST_ME_MAGIC_RED) else doPlayerSendCancel(cid, "Você não tem o dinheiro suficiente.") return TRUE end elseif(words == "!sellaol") then if doPlayerRemoveItem(cid,2173,1) == TRUE then doPlayerAddMoney(cid, 10000) doSendMagicEffect(getCreaturePosition(cid),tmp, CONST_ME_MAGIC_RED) else doPlayerSendCancel(cid, "Você não tem o Amulet of Loss(AoL)") end end return TRUE end
     
    @yurisaviosimoesaab - O preço da aol ficaria quantos em 10000? Queria que fosse 50 moedas antes da crystal coin.
     
    coloquei para custa 50k
  13. Upvote
    gustavoMtek deu reputação a Oneshot em Vip Promotion   
    Esse é o problema, você havia citado uma 3ª promotion e na verdade, você quis dizer a 2ª.
     
     

    local function pegarNome(name) return string.sub(name, 7) end function onLogin(cid) local name = getCreatureName(cid) local nome = getPlayerGUID(cid) if isVip(cid) then if string.sub(name, 1,6) == "[VIP] " then return true else db.executeQuery("UPDATE `players` SET `name` = '[VIP] "..name.."' WHERE `id`= " .. nome .. ";") doPlayerSendTextMessage(cid,19,"Você vai kikado em 10 segundos para atualizar o nome. ") addEvent(doRemoveCreature,10000,cid) if getPlayerPromotionLevel(cid) ~= 2 then setPlayerPromotionLevel(cid, 2) end end else if string.sub(name, 1,6) == "[VIP] " then db.executeQuery("UPDATE `players` SET `name` = '"..pegarNome(getCreatureName(cid)).."' WHERE `id`= " .. nome .. ";") doPlayerSendTextMessage(cid,19,"Voce ira ser kikado em 10 segundo para por [VIP]. Logue sua conta novament.") addEvent(doRemoveCreature,10000,cid) end end return true end
  14. Upvote
    gustavoMtek deu reputação a williampasqualini em Usar Account Manager + Site Gesior   
    Conteúdo exclusivo para o xtibia.com!
     
     
     

    Usar Account Manager + Site Gesior


     
     
    <p>Após instalar seu site Gesior e ele estar funcionando 100% , sem nenhum bug e o server estar online, suponho que você enfrente o seguinte problema:
     

    -[b] A preguiça dos players em acessarem seu site para criar um char.[/b]
     
    Principalmente os players que descobrem seu server através do otserverlist.org!
     
    Então vou explicar como utilizar o site e o account manager do server ao mesmo tempo!
     
    1º - Vá até a pasta do seu server e abra o arquivo config.lua com o bloco de notas.
     
    Na linha do accountManager deixe como está abaixo: (caso esteja como ="no" ou ="false")

    accountManager = "true"
     
    Salve as alterações e fexe seu config.lua
     
    2º - Agora que seu account manager esta ativado...vamos configura - lo para ser utilizado em conjunto com o site.
     
    Ao instalar o site gesior, você obteve sua conta de administrador. Se observar a conta de administrador é justamente a account 1, portanto você terá que altera - la.
     
    Abra o XAMPP Control Panell e acesse seu phpMyAdmin, clicando no botão Admin do lado do Mysql. Se preferir pode acessar através do endereço:

    http://localhost/phpmyadmin/
    caso você utilize a porta :8090 utilize o seguinte...

    http://localhost:8090/
     
    Digite o usuario: root e a senha que escolheu na hora de instalar o Xampp, clique no botão executar.
     
    Agora clique na database do seu servidor para ter acesso a ela.
     
    Clique em accounts
     
    Você vera uma tabela com id,name,password,etc...
     
    clique no lápis [Editar] do lado do X [Remover] em vermelho, para editar a conta que desejar, no caso é a account name = 1 de id = 1 (normalmente a primeira linha da tabela Accounts).
     
    Edite esta tabela da seguinte maneira:
     
     
    Clique em Executar após terminar de fazer as alterações.
     
    Agora clique na Tabela Players de sua database.
     
    Edite o Account Manager (Normalmente o Player com id=1) - Só clicar no lápis [Editar] no campo do lado esquerdo do Account Manager.
     
    Edite ele da seguinte maneira:
     
    Group_id = 1
     
    Account_id = 1
     
    Lookyype = pode por oque quiser, por exemplo o de um monstro ou god. "este numero é oque mudara a aparência de seu account manager".
    exemplos:
    Yeti = 110
    GOD = 302
     
    town_id; posx ; posy e posz são as coordenadas x,y,z que tem no config.lua na pasta do seu servidor.
     
    As do meu config.lua são:
     
    newPlayerSpawnPosX = 160
    newPlayerSpawnPosY = 54
    newPlayerSpawnPosZ = 7
    newPlayerTownId = 1
     
    então meu account manager do site fica assim:
    town_id = 1
    posx= 160
    posy= 54
    posz = 7
     
    obs: O account manager esta configurado para aparecer no templo, porém você pode escolher qualquer coordenada do mapa para ele aparecer.
     
    agora que você já configurou seu account manager, clique em executar. Para salvar as alterações.
     
    Você vera outros chars com os seguintes nomes:
     
    Rook Sample, Sorcerer Sample, Druid Sample, Paladin Sample, e Knight Sample.
     
    Edite cada um deles modificando a seguinte linha:
    deleted = 1  
    motivo? para que estes chars não apareçam na lista de chars quando os novos players entrarem na account 1/1 (account manager) para criar suas contas.
     
    Agora entre no seu site e crie uma conta para você administar seu site.
     
    Vá no phpmyadmin denovo, na database do seu servidor e entre em accounts.
     
    Clique no botão Procurar na parte superior e em Name, digite o nome de usuario escolhido ao criar a conta. Depois clique no botão Executar.
     
    Se você digitou o nome certo ira aparecer sua conta...é clicar em Editar [No lápis] e altere o seguinte campo:

    page_access = 0
    para

    page_access = 5
     
    E clique no botão Executar, para salvar as alterações.
     
    OBS: Se quiser pode fecha a pagina de seu phpmyadmin.
     
    Pronto, sua conta de administrador está prontinha! Seu account manager está pronto para ser usado, e também é possivel criar chars e contas pelo site. Porém não acabou ainda!
     
    3º - Bloquiar o acesso do Account Manager pelo site, para evitar que alterem a senha ou excluam - lo.
     
    Abra a pasta: \xampp\htdocs
     
    E substitua o código de seu accountmanagement.php por este aqui que irei postar:
     
    http://www.4shared.com/file/l7-bobb8/accountmanagement.html
     
    Pronto, Ninguém ira conseguir entrar na conta 1/1 que no caso é a do account manager. Tornando impossivel deleta - lo ou usar esta conta para postar besteiras no fórum.
     
    Tutorial 100% criado por mim.
    Código do account management encontrado não me lembro aonde.
     
    Obrigado.
     
    Atualizado dia 13 de julho de 2012
  15. Upvote
    gustavoMtek recebeu reputação de Carlinhow789 em Pedido De Rank Reset   
    Vá em Data>Talkactions>Scripts
    e Tente achar a Pasta Ranking.lua ou Ranks.lua Abra Ela Apague Tudu e Coloque Isso
     

    function getPlayerNameByGUID2(n) local c = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..n..";") if c:getID() == -1 then return "SQL_ERROR["..n.."]" end return c:getDataString("name") end function onSay(cid, words, param) local max = 20 local letters_to_next = 20 local skills = { ['fist'] = 0, ['club'] = 1, ['sword'] = 2, ['axe'] = 3, ['distance'] = 4, ['shielding'] = 5, ['fishing'] = 6, ['dist'] = 4, ['shield'] = 5, ['fish'] = 6, } local name_now local name = "Highscore for level\n" local rkn = 0 local no_break = 0 param = string.lower(param) dofile('config.lua') if param == "" or param == "level" and ( param ~= "magic" and param == "ml") and skills[param] == nil then name = name.."\n" name = name.."Rank Level - Nome do Jogador\n" local v = db.getResult("SELECT `name`, `level`, `experience` FROM `players` WHERE `group_id` <= 2 ORDER BY `experience` DESC LIMIT 0,"..(max)..";") repeat no_break = no_break +1 if v:getID() == -1 then break end rkn = rkn+1 name_now, l = v:getDataString("name"), string.len(v:getDataString("name")) space = "" for i=1, letters_to_next-l do space = space.." " end name = name..rkn..". "..v:getDataInt("level") .." - "..name_now..space.." ".."\n" if no_break >= 20 then break end until v:next() == false elseif param == "magic" or param == "ml" then name = name.."\n" name = name.."Rank Magic - Nome do Jogador\n" local v = db.getResult("SELECT `name`, `level`, `maglevel` FROM `players` WHERE `group_id` <= 2 ORDER BY `maglevel` DESC LIMIT 0,"..(max)..";") repeat if v:getID() == -1 then break end rkn = rkn+1 name_now, l = v:getDataString("name"), string.len(v:getDataString("name")) space = "" for i=1, letters_to_next-l do space = space.." " end name = name..rkn..". "..v:getDataInt("maglevel").." - "..name_now..space.." ".." ".."".."\n" until v:next() == false elseif param == "reset" or param == "resets" then name = name.."\n" name = name.."Rank Reset - Nome do Jogador\n" local v = db.getResult("SELECT `player_id`, `value` FROM `player_storage` WHERE `key` = 36874 ORDER BY cast(value as INTEGER) DESC;") local kk = 0 repeat if kk == max or v:getID() == -1 then break end kk = kk+1 name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id"))) space = "" for i=1, letters_to_next-l do space = space.." " end if name_now == nil then name_now = 'sql error['..v:getDataInt("player_id")..']' end name = name..kk..". "..v:getDataInt("value").." - "..name_now..space.." \n" until v:next() == false elseif skills[param] ~= nil then name = name.."\n" name = name.."Rank "..param.." fighting - Nome do Jogador\n" local v = db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..skills[param].." ORDER BY `value` DESC;") local kk = 0 repeat if kk == max or v:getID() == -1 then break end kk = kk+1 name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id"))) space = "" for i=1, letters_to_next-l do space = space.." " end if name_now == nil then name_now = 'sql error['..v:getDataInt("player_id")..']' end name = name..kk..". "..v:getDataInt("value").." - "..name_now..space.." \n" until v:next() == false end if name ~= "Highscore\n" then doPlayerPopupFYI(cid, name) end return TRUE end
     
    Quero rep :button_ok: :positive:
  16. Upvote
    gustavoMtek deu reputação a Sanf em Mapa Bronson   
    Olá galera, notei que muita gente tá atraz do mapa do bronson então vim aki disponibilizar para todos.. o mapa tá uns 70% full
     
    lembrando que eu vendo o servidor completo, com todos sistemas e vocaçoes (:
     

     
     
    Download
     
    Se gostou da um REP+ ae '-'
  17. Upvote
    gustavoMtek deu reputação a Leoprotons em Guild War System Com Escudos   
    Bom vamos começar pelo site :
     
     
     
    Vá em Xampp/Htdocs e crie e um arquivo chamado wars.php,dentro add isto:

    <?php $main_content = "<h1 align=\"center\">Guild Wars</h1> <script type=\"text/javascript\"><!-- function show_hide(flip) { var tmp = document.getElementById(flip); if(tmp) tmp.style.display = tmp.style.display == 'none' ? '' : 'none'; } --></script> <a onclick=\"show_hide('information'); return false;\" style=\"cursor: pointer;\"><h1><center>» Click to se the commands «<center></h1></a> <table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\" id=\"information\" style=\"display: none;\";> <tr align=\"center\"><b>You must send this commands in GUILD CHAT.</tr> <tr style=\"background: #512e0b;\"><td align=\"center\" class=\"white\"><b>Command</b></td><td colspan=\"2\" align=\"center\" class=\"white\"><b>Description</b></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war invite, guild name, fraglimit</b></td><td>Sends an invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150<BR></font><B>(Invite a guild to war with 150 frags count.)</B></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/war invite, guild name, fraglimit, money</b></td><td>Send the invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150, 10000</font><br><B> (Invite a guild to war with 150 frags count and payment of 10000 gold coins <- you need donate to guild to use it.)<B></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war accept, guild name</b></td><td>Accepts the invitation to start a war. Example: <font color=red><BR>/war accept, Chickens</font><BR><B>(Accept the war against guild \"Chickens\".)</b></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/war reject, guild name</b></td><td>Rejects the invitation to start a war. Example: <font color=red><BR>/war reject, Chickens</font><BR><B>(Reject a invitation to war from Chickens.)</B></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war cancel, guild name</b></td><td>Cancels the invitation. Example: <font color=red><BR>/war cancel, Chickens</font><br><b>(Cancel my guild invitation to war with Chickens.)</b></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/balance</b></td><td>See the guild balance - balance of money.</td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/balance donate value</b></td><td>Deposits money on the guild's bank account. All players can donate. Example: <font color=red><BR>/balance donate 100000 </font><BR><B>(You will donate 100k to your guild balance.)</B></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/balance pick value</b></td><td>Withdraws money from the guild's bank account. Can be used only by the guild leader. Example: <font color=red><BR>/balance pick 100000 </font><BR><B>(You will withdraw 100k from your guild balance.)</B></td></tr> </table> <table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\"> <tr> <td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Aggressor</b></td> <td style=\"background: #512e0b\" class=\"white\"><b>Information</b></td> <td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Enemy</b></td> </tr><tr style=\"background: #F1E0C6;\">"; $count = 0; foreach($SQL->query('SELECT * FROM `guild_wars` WHERE `status` IN (1,4) OR ((`end` >= (UNIX_TIMESTAMP() - 604800) OR `end` = 0) AND `status` IN (0,5));') as $war) { $a = $ots->createObject('Guild'); $a->load($war['guild_id']); if(!$a->isLoaded()) continue; $e = $ots->createObject('Guild'); $e->load($war['enemy_id']); if(!$e->isLoaded()) continue; $alogo = $a->getCustomField('logo_gfx_name'); if(empty($alogo) || !file_exists('guilds/' . $alogo)) $alogo = 'default_logo.gif'; $elogo = $e->getCustomField('logo_gfx_name'); if(empty($elogo) || !file_exists('guilds/' . $elogo)) $elogo = 'default_logo.gif'; $count++; $main_content .= "<tr style=\"background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$a->getId()."\"><img src=\"guilds/".$alogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$a->getName()."</a></td> <td align=\"center\">"; switch($war['status']) { case 0: { $main_content .= "<b>Pending acceptation</b><br />Invited on " . date("M d Y, H:i:s", $war['begin']) . " for " . ($war['end'] > 0 ? (($war['end'] - $war['begin']) / 86400) : "unspecified") . " days. The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment.")."<br />Will expire in three days."; break; } case 3: { $main_content .= "<s>Canceled invitation</s><br />Sent invite on " . date("M d Y, H:i:s", $war['begin']) . ", canceled on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 2: { $main_content .= "Rejected invitation<br />Invited on " . date("M d Y, H:i:s", $war['begin']) . ", rejected on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 1: { $main_content .= "<font size=\"6\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred; font-weight: bold;\">On a brutal war</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ($war['end'] > 0 ? ", will end up at " . date("M d Y, H:i:s", $war['end']) : "") . ".<br />The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment."); break; } case 4: { $main_content .= "<font size=\"6\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred;\">Pending end</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", signed armstice on " . date("M d Y, H:i:s", $war['end']) . ".<br />Will expire after reaching " . $war['frags'] . " frags. ".($war['payment'] > 0 ? "The payment is set to " . $war['payment'] . " bronze coins." : "There's no payment set."); break; } case 5: { $main_content .= "<i>Ended</i><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", ended on " . date("M d Y, H:i:s", $war['end']) . ". Frag statistics: <span style=\"color: red;\">" . $war['guild_kills'] . "</span> to <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span>."; break; } default: { $main_content .= "Unknown, please contact with gamemaster."; break; } } $main_content .= "<br /><br /><a onclick=\"show_hide('war-details:" . $war['id'] . "'); return false;\" style=\"cursor: pointer;\">» Details «</a></td> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$e->getId()."\"><img src=\"guilds/".$elogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$e->getName()."</a></td> </tr> <tr id=\"war-details:" . $war['id'] . "\" style=\"display: none; background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td colspan=\"3\">"; if(in_array($war['status'], array(1,4,5))) { $deaths = $SQL->query('SELECT `pd`.`id`, `pd`.`date`, `gk`.`guild_id` AS `enemy`, `p`.`name`, `pd`.`level` FROM `guild_kills` gk LEFT JOIN `player_deaths` pd ON `gk`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `gk`.`war_id` = ' . $war['id'] . ' AND `p`.`deleted` = 0 ORDER BY `pd`.`date` DESC')->fetchAll(); if(!empty($deaths)) { foreach($deaths as $death) { $killers = $SQL->query('SELECT `p`.`name` AS `player_name`, `p`.`deleted` AS `player_exists`, `k`.`war` AS `is_war` FROM `killers` k LEFT JOIN `player_killers` pk ON `k`.`id` = `pk`.`kill_id` LEFT JOIN `players` p ON `p`.`id` = `pk`.`player_id` WHERE `k`.`death_id` = ' . $death['id'] . ' ORDER BY `k`.`final_hit` DESC, `k`.`id` ASC')->fetchAll(); $count = count($killers); $i = 0; $others = false; $main_content .= date("j M Y, H:i", $death['date']) . " <span style=\"font-weight: bold; color: " . ($death['enemy'] == $war['guild_id'] ? "red" : "lime") . ";\">+</span> <a href=\"index.php?subtopic=characters&name=" . urlencode($death['name']) . "\"><b>".$death['name']."</b></a> "; foreach($killers as $killer) { $i++; if($killer['is_war'] != 0) { if($i == 1) $main_content .= "killed at level <b>".$death['level']."</b> by "; else if($i == $count && $others == false) $main_content .= " and by "; else $main_content .= ", "; if($killer['player_exists'] == 0) $main_content .= "<a href=\"index.php?subtopic=characters&name=".urlencode($killer['player_name'])."\">"; $main_content .= $killer['player_name']; if($killer['player_exists'] == 0) $main_content .= "</a>"; } else $others = true; if($i == $count) { if($others == true) $main_content .= " and few others"; $main_content .= ".<br />"; } } } } else $main_content .= "<center>There were no frags on this war so far.</center>"; } else $main_content .= "<center>This war did not began yet.</center>"; $main_content .= "</td> </tr>"; } if($count == 0) $main_content .= "<tr style=\"background: ".$config['site']['darkborder'].";\"> <td colspan=\"3\">Currently there are no active wars.</td> </tr>"; $main_content .= "</table>"; $main_content .= '<div align="right"><small><b>Customized by: <a href="http://www.xtibia.com/forum/user/240289-walef-xavier">Walef Xavier</a></b></small></div><br />'; ?>
     
     
     
    Agora vá em Xampp/Htdocs/index.php e add o seguinte:

    case "wars"; $subtopic = "wars"; $topic = "Guild Wars"; include("wars.php"); break;
     
     
    Agora para finalizar a parte do site vá em Xampp/Htdocs/Layout/Tibiacom/layout.php e add o seguinte:

    <a href='?subtopic=wars'> <div id='submenu_wars' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_polls' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'><font color=red>Guild Wars</font></div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a>
     
     
    Agora vamos para seu Ot:
     
     
     
    Va em GlobalEvents/scripts/start.lua e add o seguinte:

    executeQuery("DELETE FROM `guild_wars` WHERE `status` = 0 AND `begin` < " .. (os.time() - 2 * 86400) .. ";") db.executeQuery("UPDATE `guild_wars` SET `status` = 5, `end` = " .. os.time() .. " WHERE `status` = 1 AND `end` > 0 AND `end` < " .. os.time() .. ";")
     
     
    Agora vá em Lib e crie um arquivo .lua chamado 101-war,dentro add o seguinte:

    WAR_GUILD = 0 WAR_ENEMY = 1
     
     
    Agora para finalizar vamos colocar os comandos em Talkactions !
     
     
     
    Vá em Talkactions/scripts e crie dois arquivos chamados war.lua e balance.lua,dentro add o seguinte:
     
    War.lua

    function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0) return true end local t = string.explode(param, ",") if(not t[2]) then doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0) return true end local enemy = getGuildId(t[2]) if(not enemy) then doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0) return true end if(enemy == guild) then doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0) return true end local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy) if(tmp:getID() ~= -1) then enemyName = tmp:getDataString("name") tmp:free() end if(isInArray({"accept", "reject", "cancel"}, t[1])) then local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild if(t[1] == "cancel") then query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy end tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0") if(tmp:getID() == -1) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end if(t[1] == "accept") then local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment") _tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0) return true end db.query("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild) end query = "UPDATE `guild_wars` SET " local msg = "accepted " .. enemyName .. " invitation to war." if(t[1] == "reject") then query = query .. "`end` = " .. os.time() .. ", `status` = 2" msg = "rejected " .. enemyName .. " invitation to war." elseif(t[1] == "cancel") then query = query .. "`end` = " .. os.time() .. ", `status` = 3" msg = "canceled invitation to a war with " .. enemyName .. "." else query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1" end query = query .. " WHERE `id` = " .. tmp:getDataInt("id") if(t[1] == "accept") then doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD) doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY) end tmp:free() db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE) return true end if(t[1] == "invite") then local str = "" tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)") if(tmp:getID() ~= -1) then if(tmp:getDataInt("status") == 0) then if(tmp:getDataInt("guild_id") == guild) then str = "You have already invited " .. enemyName .. " to war." else str = enemyName .. " have already invited you to war." end else str = "You are already on a war with " .. enemyName .. "." end tmp:free() end if(str ~= "") then doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0) return true end local frags = tonumber(t[3]) if(frags ~= nil) then frags = math.max(10, math.min(1000, frags)) else frags = 100 end local payment = tonumber(t[4]) if(payment ~= nil) then payment = math.max(100000, math.min(1000000000, payment)) tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0) return true end db.query("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild) else payment = 0 end local begining, ending = os.time(), tonumber(t[5]) if(ending ~= nil and ending ~= 0) then ending = begining + (ending * 86400) else ending = 0 end db.query("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");") doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE) return true end if(not isInArray({"end", "finish"}, t[1])) then return false end local status = (t[1] == "end" and 1 or 4) tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status) if(tmp:getID() ~= -1) then local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id") tmp:free() doGuildRemoveEnemy(guild, enemy) doGuildRemoveEnemy(enemy, guild) db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end if(status == 4) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1") if(tmp:getID() ~= -1) then if(tmp:getDataInt("end") > 0) then tmp:free() doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id") tmp:free() db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true
     
     
    balance.lua

    local function isValidMoney(value) if(value == nil) then return false end return (value > 0 and value <= 99999999999999) end function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(guild == 0) then return false end local t = string.explode(param, ' ', 1) if(getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER and isInArray({ 'pick' }, t[1])) then if(t[1] == 'pick') then local money = { tonumber(t[2]) } if(not isValidMoney(money[1])) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end local result = db.getResult('SELECT `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end money[2] = result:getDataLong('balance') result:free() if(money[1] > money[2]) then doPlayerSendChannelMessage(cid, '', 'The balance is too low for such amount.', TALKTYPE_CHANNEL_W, 0) return true end if(not db.query('UPDATE `guilds` SET `balance` = `balance` - ' .. money[1] .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')) then return false end doPlayerAddMoney(cid, money[1]) doPlayerSendChannelMessage(cid, '', 'You have just picked ' .. money[1] .. ' money from your guild balance.', TALKTYPE_CHANNEL_W, 0) else doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_W, 0) end elseif(t[1] == 'donate') then local money = tonumber(t[2]) if(not isValidMoney(money)) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end if(getPlayerMoney(cid) < money) then doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_W, 0) return true end if(not doPlayerRemoveMoney(cid, money)) then return false end db.query('UPDATE `guilds` SET `balance` = `balance` + ' .. money .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;') doPlayerSendChannelMessage(cid, '', 'You have transfered ' .. money .. ' money to your guild balance.', TALKTYPE_CHANNEL_W, 0) else local result = db.getResult('SELECT `name`, `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end doPlayerSendChannelMessage(cid, '', 'Current balance of guild ' .. result:getDataString('name') .. ' is: ' .. result:getDataLong('balance') .. ' bronze coins.', TALKTYPE_CHANNEL_W, 0) result:free() end return true end
     
     
     
    Agora vá em Talkactions/talkactions.xml e add as duas tags:

    <talkaction words="/war" channel="0" event="script" value="war.lua" desc="(Guild channel command) War management."/> <talkaction words="/balance" channel="0" event="script" value="balance.lua" desc="(Guild channel command) Balance management."/>
     
     
     
    Pronto,seu Guild War Systema está instalado...mas para funcionar necessitará das tabelas na sua database e do Tfs 0.4 .Vou posta-los abaixo,respectivamente.
     
    . Tabelas .
     
    Para quem ainda não sabe add tabelas a sua database,vou ensinar:
     
    Acesse seu phpmyadmin,digite sua senha (caso tenha),clique no nome da sua database a esquerda,assim que carregar a sua database clique em SQL lá em cima...Aparecerá um espaço em branco lá voce irá add as seguintes tabelas...e depois clicar em Executar.
     
     
     

    CREATE TABLE IF NOT EXISTS `guild_wars` ( `id` INT NOT NULL AUTO_INCREMENT, `guild_id` INT NOT NULL, `enemy_id` INT NOT NULL, `begin` BIGINT NOT NULL DEFAULT '0', `end` BIGINT NOT NULL DEFAULT '0', `frags` INT UNSIGNED NOT NULL DEFAULT '0', `payment` BIGINT UNSIGNED NOT NULL DEFAULT '0', `guild_kills` INT UNSIGNED NOT NULL DEFAULT '0', `enemy_kills` INT UNSIGNED NOT NULL DEFAULT '0', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `status` (`status`), KEY `guild_id` (`guild_id`), KEY `enemy_id` (`enemy_id`) ) ENGINE=InnoDB; ALTER TABLE `guild_wars` ADD CONSTRAINT `guild_wars_ibfk_1` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_wars_ibfk_2` FOREIGN KEY (`enemy_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `guilds` ADD `balance` BIGINT UNSIGNED NOT NULL AFTER `motd`; CREATE TABLE IF NOT EXISTS `guild_kills` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `guild_id` INT NOT NULL, `war_id` INT NOT NULL, `death_id` INT NOT NULL ) ENGINE = InnoDB; ALTER TABLE `guild_kills` ADD CONSTRAINT `guild_kills_ibfk_1` FOREIGN KEY (`war_id`) REFERENCES `guild_wars` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_2` FOREIGN KEY (`death_id`) REFERENCES `player_deaths` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_3` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `killers` ADD `war` INT NOT NULL DEFAULT 0;
     
    Para finalizar é necessário que o seu .exe tenha incluído na compilação o parâmetro, -D__WAR_SYSTEM__.
    Como adiciono?
    Para adicionar é necessário ter a source do otserver que você utiliza. Abra a source em um dev-cpp aperte alt+p na coluna paraments add -D__WAR_SYSTEM__ da ok e compila.
     
    Se você não souber compilar existem tutorias bem explicativas que tornam fácil aprender a compilar, veja abaixo:
     
    Compilando no Windows
    Compilando no Linux ubuntu
     
     
    Pronto o Guild Wars System está totalmente instalado!
     
    Para os preguiçosos Ocupados coloquei o download do sistema completo.
     
    Download Aqui
     
    Link do Scan
     
    Creditos: Walef Xavier - War System
    AgaSsI - Tópico original
    Gm Beckman - Completou o tópico
  18. Upvote
    gustavoMtek 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
  19. Upvote
    gustavoMtek deu reputação a felipol em Remeres Map_Editor (8.60X)   
    LEIA ATENTAMENTE E SEM PREGUIÇA!

    (para um trabalho bem feito)

     

    * Opção de download rapido: Download - Rme 2.1 + Tibia.dat e spr

     

    Bom galera muito nego aqui no XTibia ta se matando para poder conseguir abrir o REMERES MAP EDITOR na versão 2.1 (8.60x). Claro ja foram postados tutoriais solucionando o problema do mesmo. Porém esse aqui é diferente e 100% cérto. Vou ensinar perfeitamente como você pode abrir seu REMERES de outra forma sem que isso se torne um problema maldito de solucionar!

     

    Antes de tudo: Desinstale seu REMERES e seu TIBIA Agora!

     

    Primeiramente você vai diretamente no site OFFICIAL do Remeres Map Editor abaixo:

     

    SITE OFFICIAL: Clique Aqui Para faser o download.

     

    Após ter feito o download do Remeres, vá direto para o outro site abaixo:

     

    SITE OFFICIAL: Clique Aqui e baixe a versão do Tibia 8.60x (OBS: se você tem o tibia baixado no seu PC de qualquer outro site, desinstale-o.)

     

    PRONTO! já baixou os dois arquivos acima? Muito bem, agora vamos faser o seguinte:

     

    1° Vá para a pasta: Meu Computador > Disco Local (C:) > Arquivos de Programas > Tibia

    2° Na pasta do Tibia existem dois arquivos super importantes para esse procedimento, chamados: Tibia.spr e Dat, copie-os!

     



     

    3° Volte para a pasta: Arquivos de Programas e crie uma nova pasta chamada: SPR

     



     

    4° Dentro désta pasta SPR criada, você vai colar os dois arquivos: Tibia.spr e Dat. (Feche)

    5° Abra seu Remeres map editor

    6° Quando Aparecer a mensagem para procurar "Couldn't Find Tibia.dat Or Tibi.spr" você vai abrir a pasta SPR que criou a pouco!

     

    PRONTO! Seu Remeres map editor está pronto para ser ultilizado =D

       

    Dúvidas? (MSN: fefo_wg@hotmail.com)

     

    Se possível o teste, e aprovação do tutorial; Rep+

     



    Recomende para seus amigos.

     

    :XTibia_smile:

  20. Upvote
    gustavoMtek recebeu reputação de igor6 em [Talkaction]!online Modificado   
    removido
  21. Upvote
    gustavoMtek recebeu reputação de k2lan em [Talkaction]!online Modificado   
    removido
  22. Upvote
    gustavoMtek recebeu reputação de Demonbholder em Ajuda Com Vocaçoes !   
    mude
    <skill id="6" multiplier="1.4"/> <formula meleeDamage="1.2"
     
     
    para subir skills igual o de kina,acho que é isso que vc tem de mudar ! nao tenho ctz
  23. Upvote
    gustavoMtek recebeu reputação de Sofft em (War System)Placa Da Guild Quando Loga   
    removido
  24. Upvote
    gustavoMtek deu reputação a locosporot em Tudo Sobre Ot Server   
    Ola Xtibianos
     
    Vo postar algumas coisas sobre OT, nao irei posta comandos porque ja tem um tutorial sobre issu no forum
     
     
    1 -Como Editar Accounts ou Chars.
    2 -Como por munição e runa infinita no seu OT.
    3 -Como por POT infinito
    4 -Como editar a cor do XP de quando se mata um bixo.
    5 - Como Mudar a XP/Skill/ML/ Protection level/ lvl para comprar houses.
    6 -Como colocar Teleports no seu OT.
    7 - Como botar XP stages em seu ot.
    8 - Juntando 2 mapas pelo RME.
    9 - Como criar areas Non-PVP/PZ etc...
    10 - Criando um Char GM/GOD.
     
     
    1- Como Editar Accounts ou Chars.
     
    • Abram o SQLite
    • Cliquem numa pastinha preta com uma florzinha vermelha em cima.
    • Escolham o arquivo q no final esteja escrito .s3db
    • Botem OK e cliquem em Substituir
    • Clique em Accounts para editar as contas
    • Clique em Players para editar os players
     
     
     
     
    2 -Como por munição e runa infinita no seu OT.
    • Abram a pasta do seu ot
    • Abram o config.lua
    • Procurem por uma linha escrita isso:
     
    removeWeaponAmmunition = "no"
    removeWeaponCharges = "no"
     
    • Troque o "no" por "yes", se vc baixo o ot e ele ja veio com yes escrito e n estar infinita troque o "yes" por "no".
    • Fexem e salvem.
     
    3- Como por POT infinito.
     
    • Abram a pasta do seu ot
    • Abram a pasta data/actions/scripts/liquids
    • Abram o Script do POT que vcs querem deixar infinito e procurem pela linha
     
    doTransformItem(item.uid, EMPTY_POTION)
     
    • Apaguem ela fechem e salvem.
     
     
    4-Como editar a cor do XP de quando se mata um bixo
     
    • Abram a pasta do seu OT
    • Abram o Config.lua
    • Procurem pela linha:
     
    gainExperienceColor = 215
     
    • Troquem o 215 por qualquer numero, o numero 215 é a cor Branca(-1 ela fica colorida).
     
     
     
    5- Como Mudar a XP/Skill/ML/ Protection level/ lvl para comprar houses.
     
    • Abram a pasta do seu OT
    • Abram o Config.lua
    • Procurem pela linha:
     
    rateExperience = essa linha é para mudar a XP do seu ot [ Aqui botem um numero qualquer ] exemplo 50, seu ot vai ter xp 50
     
    rateSkill = aqui é a skill do seu ot
     
    rateMagic = é a ML do seu ot
     
    rateLoot = é o Lot do sue OT
     
    rateSpawn = é o Spawn dos bixos do seu OT
     
    • Fechem e salvel
     
     
    6- Como colocar Teleports no seu OT.
     
    • Abram o RME ou qual quer otro Map Editor.
    • Adicione o seu Teleport aonde quiser.
    • Cliquem com o butão direito nele e cliquem em Propriedades.
    • Adicionem as Coordenadas de onde vc quer q seu teleport leve '' X: Y: Z: ''
     
     
    7- Como botar XP stages em seu ot.
     
    • Abram a pasta do seu OT
    • Abram o Config.lua
    • Procurem pela linha:
     
    experienceStages = false
     
    • Troquem o " False " por " True " sem as aspas.
    • Fechem e salvem.
    • Abram a pasta data\XML
    • Abram o arquivo stages.xml como Bloco de Notas
    • Vai estar +/- assim:
     
    ?xml version="1.0" encoding="UTF-8"?>
    <stages>
    <world id="0">
    <stage minlevel="1" maxlevel="8" multiplier="9999"/>
    <stage minlevel="9" maxlevel="20" multiplier="99999"/>
    <stage minlevel="21" maxlevel="50" multiplier="999999"/>
    <stage minlevel="51" maxlevel="100" multiplier="999999"/>
    <stage minlevel="101" maxlevel="200 multiplier="9999"/>
    </world>
    </stages>
     
    • Ai está assim: do lvl 1 ate o 8 xp 9999 do lvl 9 até o 20 xp 99999... e assim vai... quer adicionar mais ? é só copiar e colar e midar o min level e deixar 1 level a mais do q o max level de antes, mudar o max level e a XP.
     
    • Exemplo:
    <stage minlevel="51" maxlevel="100" multiplier="999999"/>
    quer mais 1 ?
    adicione:
    <stage minlevel="101" maxlevel="200" multiplier="999999"/>
     
     
    8- Juntando 2 mapas pelo RME.
     
    • Abra o RME com o mapa que você quer copiar, após isso vá em File/Open e procure o mapa em que você quer colar outro.
    • E então ficara os dois no mesmo RME, só que em abas diferentes.
    • Feito isso vá no mapa que você quer copiar, no canto terá um quadradinho, clique nele, o mesmo vai virar um lápis.
    • Continue no mapa que deseja copiar, e então segura shift e arraste o mouse por cima da área que você quer copiar, ele ficará escuro após selecionar.
    • Depois é só apertar ctrl + v no mapa que você quer colar.
     
    9- Como criar areas Non-PVP/PZ etc...
     
    • Abram o seu Mapa com o RME.
    • Vão até Terrain pallete la em baixo tera uns quadradinhos com as opçoes:
    Eraser, Hatch Window, Window, PZ TOOL, NON PVP TOOL, NO LOGOUT TOOL, PVP ZONE TOOL.
    • É só escolher oq quer usar e selecionar aonde quer usar.
     
     
     
     
    10-Criando um Char GM/GOD.
     
    • Abram a pasta do seu ot.
    • Abram o SQLite.
    • Vão ate a parte: Player
    • Selecione o player q vai virar GOD/GM
    • Na aba Group_ID mude o acces para:
     
    6- GOD
    5- CM
    4- GM
    3- Sênior Tutor
    2- Tutor
    1- Player
     
    • OBS: o player tem q estar OFF.
    • Ou vc fica de frente pro player e fala /attr group (e oque vc quer da para ele)
     
     
    Creditos:
     
    Caio Felipe
     
    Msn para contato:
     
    caio_games_10@hotmail.com
  25. Upvote
    gustavoMtek recebeu reputação de FoxElite em (War System)Placa Da Guild Quando Loga   
    removido
  • Quem Está Navegando   0 membros estão online

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