-
Total de itens
175 -
Registro em
-
Última visita
-
Dias Ganhos
1
Histórico de Reputação
-
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 !!!
-
-
gustavoMtek recebeu reputação de SarioYana em Erro nas Vocations ! Me ajude!
funfo? Rep
cria outro topico com esse pedido
-
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
-
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
-
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:
-
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.
-
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
-
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:
-
gustavoMtek recebeu reputação de NightmareRullesz em [Encerrado] Bug No Target
Download
Executavel compilado: Megaupload
Scan: VirusTotal
Creditos:MatheusMkalo
-
gustavoMtek recebeu reputação de 1579091 em [Encerrado] Bug No Target
Download
Executavel compilado: Megaupload
Scan: VirusTotal
Creditos:MatheusMkalo
-
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
-
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
-
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
-
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:
-
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 '-'
-
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
-
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
-
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:
-
-
-
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
-
-
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
-
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.