Bom pessoal eu resolvi compartilhar o meu sistema de torneio para poketibia que fiz para meu projeto, ele tem a função de ocorrer 4 vezes ao dia....Falando apenas com o 1 NPC Nick da cidade aonde você por....
Como funciona ? Mata todos e o ultimo que sobrar na arena de batalha é o ganhador!
1° Pasta LIB copie um arquivo e deverá renomear para torneio ficando torneio.lua apaga tudo que tem dentro e add
torneio = {
awardTournament = 2148, ---moeda usada para entra no torneio--
awardAmount = 1000, -- quantidade de moeda que o player vai ganhar ao vencer o torneio--
playerTemple = {x = 893, y = 499, z = 15}, --pra onde vai o player quando morrer ?--
tournamentFight = {x = 894, y = 538, z = 15}, --centro da arena torneio combate--
area = {fromx = 866, fromy = 508, fromz = 15, tox = 922, toy = 572, toz= 15},--canto acima direito da arena combate-canto esquerdo abaixo da arena combate--
waitPlace = {x = 969, y = 544, z = 15}, --centro da sala de espera--
waitArea = {fromx = 957, fromy = 536, fromz = 15, tox = 983, toy = 552, toz= 15}, --canto esquerdo acima da sala de espera--canto abaixo esquerdo da sala de espera--
startHour1 = "07:50:00", --horario do aviso?--
endHour1 = "08:00:00",--horario que começa?--
startHour2 = "11:50:00",--horario do aviso?--
endHour2 = "12:00:00",--horario do aviso?--
startHour3 = "17:50:00",--horario do aviso?--
endHour3 = "18:00:00",--horario do aviso?--
startHour4 = "22:50:00",--horario do aviso?--
endHour4 = "23:00:00",--horario do aviso?--
price = 500,--valor para entrar no torneio ? 500 dollar no caso--
revivePoke = 12344,--aqui é revive se tiver e se não tiver não precisa mexer--
}
function getPlayersInArea(area)
local players = {}
for x = area.fromx,area.tox do
for y = area.fromy,area.toy do
for z = area.fromz,area.toz do
local m = getTopCreature({x=x, y=y, z=z}).uid
if m ~= 1 and isPlayer(m) then
table.insert(players, m)
end
end
end
end
return players
end
apaga os coments do scripts acima com --blablabla--
2° GLOBALEVENTS vá na pasta globalevents/scripts copia um arquivo que voc?ê deverá renomear para torneio ficando torneio.lua e add
function onTime()
if #getPlayersInArea(torneio.area) > 1 then
doBroadcastMessage("O Torneio dessa vez não teve vencedor, tente na proxima vez")
return true
end
for _, pid in ipairs(getPlayersInArea(torneio.waitArea)) do
puxar = math.random(-2, 2)
doTeleportThing(pid, {x = torneio.tournamentFight.x + puxar, y = torneio.tournamentFight.y + puxar, z = torneio.tournamentFight.z})
end
doBroadcastMessage("O torneio Iniciou!")
return true
end
ou dependendo do tfs pode ser
function onTimer()
if #getPlayersInArea(torneio.area) > 1 then
doBroadcastMessage("O Torneio dessa vez não teve vencedor, tente na proxima vez")
return true
end
for _, pid in ipairs(getPlayersInArea(torneio.waitArea)) do
puxar = math.random(-2, 2)
doTeleportThing(pid, {x = torneio.tournamentFight.x + puxar, y = torneio.tournamentFight.y + puxar, z = torneio.tournamentFight.z})
end
doBroadcastMessage("O torneio Iniciou!")
return true
end
ainda em globalevents vá em globalevents/scripts copie outro arquivo e renomeia para, msgtorneio ficando msgtorneio.lua e add
local i = {
["07:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"},
["07:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"},
["07:59"] = {nome = "As inscrições do Torneio fecharam!"},
["11:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"},
["11:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"},
["11:59"] = {nome = "As inscrições do Torneio fecharam!"},
["17:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"},
["17:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"},
["17:59"] = {nome = "As inscrições do Torneio fecharam!"},
["22:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"},
["22:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"},
["22:59"] = {nome = "As inscrições do Torneio fecharam!"},
}
function onThink(interval, lastExecution)
hours = tostring(os.date("%X")):sub(1, 5)
tb = i[hours]
if tb then
doBroadcastMessage(hours .. " - " .. tb.nome .. "")
end
return true
end
agora as tag globalevents.xml add
3° ACTIONS para o player receber a recompensa... vá em actions/scripts copie um arquivo lá e renomeia para torneio ficando torneio.lua e add
function onUse(cid, item)
local torneios = 1
if #getCreatureSummons(cid) >= 1 then
doPlayerSendCancel(cid, "Volte seu pokémonDBR!")
else
if #getPlayersInArea(torneio.area) > 1 then
doPlayerSendTextMessage(cid, 20 ,"Só o ultimo que ficar na arena, poderá abrir está porta! ") return true end
doTeleportThing(cid, torneio.playerTemple)
doBroadcastMessage("[Torneio] Parabéns ao treinador "..getCreatureName(cid).." foi o ganhador do torneio de hoje, verifique o rank em nosso site www.seusite.com!")
doPlayerAddItem(cid,2148,300)
addTopt(cid, torneios)
doPlayerSendTextMessage(cid,MESSAGE_EVENT_ORANGE,"[Torneio] Você já venceu "..(getTopt(cid,torneio)).."x, Parabéns.")
doPlayerAddItem(cid, torneio.awardTournament, torneio.awardAmount)
return true
end
end
agora a tag de actions.xml add
<action uniqueid="18279" event="script" value="torneio.lua"/>
*18279 é unique ID que vc terá que por numa porta alavanca o que for pra depois o ultimo player clicar...
4° NPC vá na pasta npc/scripts copia um arquivo e você deverá renomear para torneio ficando torneio.lua e add
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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 creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if msgcontains(msg, 'torneio') or msgcontains(msg, 'enter') then
if getPlayerItemCount(cid, torneio.revivePoke) >= 1 then
selfSay('Voce nao Pode entrar no torneio com {revives}, por favor guarde eles e volte a falar comigo novamente.', cid)
return true
end
selfSay('Voce quer Participar no torneio por '..torneio.price..' de Dollars?', cid)
talkState[talkUser] = 2
elseif talkState[talkUser] == 2 then
if msgcontains(msg, 'yes') or msgcontains(msg, 'sim') then
if os.date("%X") < torneio.startHour1 or os.date("%X") > torneio.endHour1 then
if os.date("%X") < torneio.startHour2 or os.date("%X") > torneio.endHour2 then
if os.date("%X") < torneio.startHour3 or os.date("%X") > torneio.endHour3 then
if os.date("%X") < torneio.startHour4 or os.date("%X") > torneio.endHour4 then
selfSay('As inscrições para o torneiro ainda não abriram, volte ás 07:50 AM, 11:50 AM, 17:50 AM ou ás 22:50 PM todo os dias', cid)
return true
end
end
end
end
if doPlayerRemoveMoney(cid, torneio.price) then
doTeleportThing(cid, torneio.waitPlace)
doPlayerSendTextMessage(cid, 21, "Bem vindo, esta e a sala de espera, voce espera aqui enquanto o torneio nao começa.")
else
selfSay('Voce não tem ('..torneio.price..') Dollars.', cid)
end
else
selfSay('Certeza que voce não quer Participar? Ok, ate a Proxima', cid)
talkState[talkUser] = 0
end
end
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
bom agora volte um pasta e copia um arquivo.xml e renomeia para torneio ficando torneio.xml e add
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Nick" script="torneio.lua" walkinterval="999000" floorchange="0">
<health now="150" max="150"/>
<look type="1245" head="20" body="100" legs="50" feet="99" corpse="2212"/>]
<parameters>
<parameter key="message_greet" value="Ola |PLAYERNAME|. Sou o NIKE, Encarregado pelo Torneio diario caso queira entrar diga: {torneio}."/>
</parameters>
</npc>
5° importa para seu mysql o código
ALTER TABLE `players` ADD `torneio` int(11) NOT NULL default '0';
agora a vá na pasta lib copia um arquivo.lua e renomeia para torneio e add ficando torneio.lua
function getTopt(cid)
local check4 = db.getResult("SELECT `torneio` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. " LIMIT 1")
return check4:getDataInt("torneio") <= 0 and 0 or check4:getDataInt("torneio") end
function addTopt(cid,amount)
db.executeQuery("UPDATE `players` SET `torneio` = "..getTopt(cid).."+"..amount.." WHERE `id` = "..getPlayerGUID(cid)) end
function removeTopt(cid,amount)
db.executeQuery("UPDATE `players` SET `torneio` = "..getTopt(cid).."-"..amount.." WHERE `id` = "..getPlayerGUID(cid)) end
function setTopt(cid,value)
db.executeQuery("UPDATE `players` SET `torneio` = "..value.." WHERE `id` = "..getPlayerGUID(cid)) end
6° pronto torneio 4 vezes ao dia + npc + rank para site como usar o rank no site ? vai em htdocs/template/seulayout/index.tpl e add em algum lugar lá
<div class="top-box">
{include_php file='torneio.php'}
</div>
agora vá em htdocs criar um novo text com nome torneio.php e add
<?PHP
//** Connection to the database **//
$ots = POT::getInstance();
$ots->connect(POT::DB_MYSQL, connection());
$SQL = POT::getInstance()->getDBHandle();
//** Top Players + online status By Kavvson **//
$money_list = $SQL->query('SELECT name,torneio FROM players ORDER BY torneio DESC LIMIT 5')->fetchAll();
$i = 1;
foreach($money_list as $money_chr){
echo '<center>';
echo $i.'. <a href="/pt/index.php/character/view/'.urlencode($money_chr['name']).'">';
$player = $ots->createObject('Player');
$player->find($money_chr['name']);
echo '<font color="';
echo ($player->isOnline()) ? 'green' : 'green';
echo '">';
echo ''.$money_chr['name'].'</b></a></font>'; echo' Torneio Ganhos: '.$money_chr['torneio'].'</B>';
$i++;
}
for( $i; $i <= 1; $i++ ){
echo $i.'. <br><i>Empty</i><br /><br />';
}
echo '</center>';
isso ai pessoal é completo eu fiz pro meu PokémonDBR que tinha fechado então resolvi compartilhar.... qualquer copia favor bote devido créditos e não quero ver ninguém vendendo meu scripts....
Créditos a mim... qualquer dúvida falando que não sou o dono aqui minha página da PokémonDBR e agora somos otPokémon World Online http://facebook.com/otpwonline
Para concertar isso, abra o arquivo com o programa NOTEPAD++ vai em Formatar, e escolhe: Converter para UTF-8 (sem bom), todos os acentos serão corrigidos.
Olá galerinha do TibiaKing!
Hoje trago para vocês um tutorial bem simples e muito útil para quem gosta de detalhes...
Como o titulo já diz, vou mostrar como adicionar uma imagem como button.
Bom, sem mais delongas vamos para o tutorial.
Arquivos usados:
Vamos utilizar o modern.css, em outros é mais conhecido como style.css, style1.css e etc.. e também o index.tpl.
dentro do modern.css/ou style.css, vou adicionar o seguinte:
obs: vamos utilizar duas imagem, uma para o mouse on, e outra para o mouse off, vou deixar uma demonstração de como fica após feito isso.
2- Da para fazer da seguinte forma e que eu consegui fazer foi:
O player passa pelo tile perde o item, porém não é teleportado, da para você colocar um portal logo na frente do tile para o player ser teleportado para a pos desejada.
caso queira utilizar, tá ai:
Em movements/script/crie um arquivo.lua e coloque:
Não sei se vai ser do seu gosto, segue:
NPC/crie um arquivo chamado james.xml ou como preferir e adicione:
Agora em NPC/Script crie um arquivo chamado james.lua e adicione:
Agora em CreatureScript/Script/ crie um arquivo chamado count_quest e adicone:
Agora em creatureScript.xml add:
<event type="kill" name="quest_count" script="count_quest.lua"/>
ainda em creaturescript/script/login.lua procure por algum
registerCreatureEvent e embaixo adiciona:
registerCreatureEvent(cid, "quest_count")
Ai você pode cria um local que o player vai poder ter acesso só quando falar com esse NPC terminando a missão, basta adicionar um local com uma porta e adicionar essa action id: 4151
depois adicione em Action/Script/Quests/ nomedaquest.lua:
Por ultimo em Actions.xml add a tang:
<action actionid="4151" event="script" value="quests/nomedaquest.lua"/>
1 - As SPR quase sempre se encontra em: data/things/854
2 - Layout do cliente, a imagem de fundo, você muda em: data/imagens/background
3 - Sobre as novas SPR você pode encontrar varias nesse topico: SPR otPokémon (04-09-2018) [Version 14.53] - Spriting - xTibia - Sua comunidade de Otserv e Tibia
4 - Nesse outro topico você encontra um website totalmente editavel e compativél:
Tibia King - Tudo sobre Tibia, OTServ e Bots!
Certo!
Aqui está um tutorial bastante agradevel e que me ajudou muito a evoluir e, ter uma noção basica sobre ambas funções:
Tibia King - Tudo sobre Tibia, OTServ e Bots!
Aaah mano, infelizmente não é oque eu pensei... Esse modelo de trade que você quer é do OLD cliente, pra alterar no new eu creio que você vai precisar fazer alterações no Modules do OTC, não vou conseguir ajudar.
Ali em rateSpawnMax = 5 você trocou e mesmo assim demora nascer?
Acho que da pra fazer essa alteração abrindo o seguinte arquvi: seu mapa/spawn, dentro você encontra a seguinte linha:
<monster name="Electrode" x="1" y="-1" z="2" spawntime="60" />
spawntime="60" 60 é o time do resp (que ele demora nascer após morte) = 1m
Edita ai pra ver
Descrição: Com estas alterações nas sources do servidor e do OTC você conseguirá adicionar ao jogo uma barra de carregamento nas criaturas do jogo. Esta barra é personalizável e pode ser utilizada de diversas formas em diferentes scripts.
Server sources.
No arquivo game.h
Abaixo de:
Adicione:
No arquivo game.cpp
Adicione:
No arquivo luascript.h
Abaixo de:
Adicione:
No arquivo luascript.cpp
Abaixo de:
Adicione:
Abaixo de:
Adicione:
No arquivo player.h
Abaixo de:
Adicione:
No arquivo protocolgame.h
Abaixo de:
Adicione:
No arquivo protocolgame.cpp
No final do arquivo adicione:
Client sources.
No arquivo protocolcodes.cpp
Abaixo de:
Adicione:
No arquivo protocolgame.h
Abaixo de:
Adicione:
No arquivo protocolgameparse.cpp
Abaixo de:
Adicione:
Abaixo de:
Adicione:
No arquivo creature.h
Abaixo de:
Adicione:
Abaixo de:
Adicione:
No arquivo creature.cpp
Abaixo de:
Adicione:
Substitua o código abaixo:
Por este código:
E ainda no arquivo creature.cpp no final da página adicione:
Olá galerinha, hoje resolvi trazer para vocês uma BASE que estava estacionado aqui no meu PC.
A alguns anos atrás eu abri esse servidor, na época como era uma base recém "spawnada" os donos ficavam atacando e atacando, chegou um certo tempo que desisti e deixei parado, hoje resolvi trazer para vocês, tem bastante coisa interessante na base.
Enfim, segue ai:
[ + ]SERVIDOR OPEN SOURCE [ - ]
[+] addonbox System 100%
[+] Boost Stone System 100%
[+] Shiny Stone System 100%
[+] Addon System 100%
[+] Bike System 100%
[+] Respawn de Shiny Aléatorio
[+] Zorua System 100%
[+] Balanceado alguns pokemon's shiny!
[+] Mapa 100% reformulado com spr novas, caso queria o antigo mapa, basta usar o backup.
[+] 1º 2º 3º 4º 5º 6º Geração. Algumas estão completas.
obs: não citei tudo pois não me lembro muito bem como a base está, boa sorte!