Bom Galera , este é meu primeiro tutorial sobre websites.
Só vai funcionar com database phpmyadmin
Que pode ser muito útil para aqueles que gostam de resetar mas nao quer devolver items. =D
Vamos lá.
1) Acesse seu localhost/phpmyadmin
2) Vá na sua database e depois em SQL
3) Vai aparecer "Faser consulta no banco de dados"
4) Nele voce escreve os codigos correspondentes á açao que voce quer faser.
-AS açoes vou listar elas abaixo
@Tryller
Já rastreado e encontramos as máquinas deles na limestone, o datacenter já enviou uma notificação de desligamento. Não vou dar mais detalhes para não atrapalhar as investigações dos caras mas já encontramos mais de 7 projetos deles e estamos indo em cima de todos. Todos os projetos tem um responsável aqui do RJ. A "empresa" deles já foi notificada e se até hoje não cooperarem serão processados.
Raids/Invasões: -Rat -Orshabaal -Ghazbaran -Giant spider/The old window -Ferumbras -Morgaroth
Spells: -Magias editadas para balanceamento das vocações
Changelog Atualização [3.4 BETA]: - Removido áreas não usadas no mapa, diminuindo o tamanho em MBs - Adicionado Anti Magebomb System - Corrigido bugs no npc addon - Adicionado sistema onde os npcs falam sozinhos (Igual como foi adicionado no global). First ;] - Adicionado Elf village em Venonh ( bem parecida com a do global ;]) - Potions desaparecem quando usadas - Corrigido sistema de Up - Corrigido sistema de Monster Counter - Nova dragon lair em Mirand Theraan (Subsolo) - Adicionado porta de level, que protege leveis baixos acessarem os demons da cidade de Flam - Ampliado deserto da cidade de Mirand Theraan - Adicionado Ilha de Goroma - Adicionado Forbidden islands - Ampliado floresta da cidade de alfon e colocado área de macacos parecida com Banuta. - Ligação de alfon com Mirand Theraan - Corrigido bugs reportados nas portas das casas - Corrigido posição dos buracos e escadas - Adicionado beds em todas as casas - Corrigido bugs em casas de yalahar - Adicionado Blue legs quest ( Koshei The Deathless global) - Corrigidas quase todas as areas de Yalahar - Teleports em Yalahar substituidos por NPCs de teleport do global - Corrigido pequenos erros no npc Capitao Coruja, e adicionado viagem à goroma - diminuido ataque do Eye of the seven - Ice rapier agora quebra - Corrigido npc Banker - Adicionado quase todos os items 8.5 - Adicionado medusa - Adicionado Todos os outfits novos - Corrigido NPC Banker (que dava dinheiro) Script By Ta4e - Corrigido Annihilator Quest - Adicionado Notice System - Adicionado novo distro, compilado por Comedinha
Atualização nº 2 [3.4]: Otserv atualizado... Corrigido debugs frequentes Corrigido debugs na magia exevo pan Corrigido bugs nos npcs Roy e Firewalker Adicionados mais novos items 8.5, agora temos 90% dos items novos...
Atualização 3.5 [06/08/2009]: - Cidade principal (dorion) totalmente reformada - corrigido blue legs quest - Corrigido alavancas de compra de potions - Adicionado alavancas de compra de runas - Corrigido npc Bank - Adicionado NPC King Arthas, que vende promotion - Adicionado npc Rashid, que vende items. - Arrumado Wild Growth rune - Arrumado Utani Hur - Magias reajustadas - Novo estilo de server save - Ilha de mystic reformulada (by Nirk) - Adicionado nova magia para knights "Exkordium". - Adicionado nova magia para mages (promoted) "Exura Seil". - Adicionado nova magia para mages (promoted) "Exevo Gran Frigo". (arrumar -> sem exhausted nem gasta mana) - Adicionados novos monstros. - Adicionado quest challenge (lvl 250) - Corrigido bug do Dead Cyclops - Bug aol Arrumado - Poi Modificada - Corrigido teleports ghouls yalahar - Modificada demon helmet quest, assim como o premio da quest - Corrigido nome do Hallowed axe - Corrigido bug das houses - Corrigido bug dos items andaveis
Atualização Patch 3.5.1 [07/08/2009]: - Corrigido erro na inicialização do Ot - Bug das potions corrigido - Bug do aol corrigido (pelomenos pra mim) - Bug dos outfits corrigido - Corrigido erros nas escadas na ilha PvP - O monstro The Fastest Turtle agora não morre, se tornando um monstro apenas para atrapalhar - Retirada suposta quest dos 3 hellhounds e 1 minishabaal - Adicionado teleport de retorno na Ferumbras Tower - Corrigido posições da raid de The old widow - Corrigido bug das escadas nas minas de demons - Corrigido alguns bugs vistos no mapa
Atualização 3.6 [10/08/2009]: - Arrumado bugs criticos - Arrumado comando !promote/!demote - Atualizado Items.xml - Bug das Beds arrumado - Modificações na cidade, como, nature e caves - Nova sala de treino - Adicionado comando !highscores
Atualização 3.7! Beta [18/12/2009]: - Guildhall support (Elf) - Nova deathlist(Elf, OpenTibia SVN) - Frags funcionando (Elf) - Atualizado monstros e items (slawkens, KaczooH, Elf) - Novas talkactions: /commands, /wp, /storage, /config, /promote & /demote. (slawkens) - Novas funções lua - Novos creatureevents (slawkens, Elf) - Novos configuráveis (Elf, slawkens) - Modificado ataque de monstros existentes (especialmente outfits e velocidade) (Elf) - Monstros reorganizados & atualizados (Nem todos) (slawkens) - Melhorado sistema de banimentos (Elf) - Reescrita janela de Rule Violation (Elf) - Arrumado Stamina (Elf, OpenTibia SVN) - Casas agora são salvas nas modificações do dono (Elf) - Escadas de yalahar funcionando perfeitamente (Elf, Talaturen) - Sistema de nado & waterball completo (slawkens) - Monstros invisiveis não são mais mandandos ao client (anti bot) (OpenTibia SVN) - Anti-dash (OpenTibia SVN) - Sistema de leilão de casas, possibilidade de usar site para vender casas (house_actions table) (OpenTibia SVN, Elf) - Salvando bot actions para /logs/bots por cada player. Por exemplo, bot pode enviar mensagem com mais de 255 caracteres (slawkens) - Novos raid events- item spawning & disappearing and more (Elf) - Modificações no NPC system (Elf) - NPCs OutfitModule (Elf) - Completo 8.53 support, com wars (Elf) - Completo 8.54 support (Elf) - Arrumado NPC voices (Elf) - Players serão informados quando o Gamemaster logar ou ficar invisivel (slawkens) - Arrumado Player Deaths (Elf, slawkens) - Arrumado Abuso de PZ (slawkens) - Portas agora não ajudam players a entrar em PZ (slawkens) - Magic level formula (OpenTibia SVN, KaczooH) - Memory leaks (Elf) - Queries optimization (Talaturen) - Janelas podem ser abertas do lado de fora da casa- agora apenas GMs podem fazer isso (slawkens) - arrumado Efeitos para o Ghost (GM)- configuravel (slawkens) - Corrigido >> Ghost debugging players (OpenTibia SVN, Elf) - Corrigido erro na promotion (Elf) - Corrigido vários erros no console. (slawkens) - Corrigido Spam de magias (Elf) - Corrigido stamina premium (Elf) - Corrigido Clean (Elf) - Corrigido vários outfits (Elf) - Corrigido Ghost (Elf) - Todas as correções no OpenTibia SVN (Open Tibia SVN, Elf) - Corrigido Todos os crashes possiveis (Elf) - Npcs Corrigidos (Comedinha) - Distro Reformulado (comedinha) - Bugs de reports arrumados (Comedinha) - Novos outfits (Alissow) - Actions Arrumadas (Comedinha) - Libs trocadas (Comedinha) - Talkactions bugadas arrumadas (Comedinha) - Reforma na área Sul da cidade Dorion (Alissow) - Adicionado monstros 8.54 (Alissow) - Corrigido bug das potions infinitas (Alissow)
Atualização 3.7 Patch 1 [27/12/2009]: - Rampa na frente da loja de foods retirada (Alissow) - Arrumado bugs de mapa em anknor (Alissow) - Bug na Lib dos npcs corrigido (Alissow) - Bug do acc manager arrumado! (Alissow) - Magias "Exkordium" e "Ice Storm" arrumadas (Alissow) - Monstros 8.54 funcionando (Alissow) - 2º Addon Yalaharian arrumado (Alissow) - Addons Warmaster adicionados no NPC Addoner (Alissow) - Pequenas modificações na cidade principal, Dorion, para melhora da jogabilidade (Alissow) - Comando /Deathlist retirado (Alissow) - Magic Wall Rune arrumada (Alissow) - Quest Annihilator arrumada (Alissow) - "Your depot contain x items" Arrumado (Alissow) - Addons reorganizados, mais facil aggora (Alissow) - Tempo de Red skull e Black skull reduzidos para 24 e 42 horas (Alissow) - Reduzida porcentagem de morte (Alissow) - Acrescentado chance de critical hits (Alissow) - ShowHealingDamage Adicionado (Alissow) - Várias partes do mapa remapeadas (Alissow) - NPCs para recarga de Soft boots & Firewalker boots arrumados [Não testado] (Alissow) - Comando !frags arrumado! (Alissow) - Agora é possivel fazer addons sem precisar do comando !buypremium (Alissow)
Atualização 3.8 [17/01/2010]: - Arrumado bug nas escadas do Dlair (Alissow) - Todos os bugs nos NPCs arrumados (Comedinha) - Novas talkactions [a pedidos] (Comedinha) - Deathlist arrumada (Comedinha) - Novo Distro (Comedinha) - MySQL Atualizada (Comedinha) - Firewarker boots não é mais gasta quando não está usando (Comedinha) - Problemas com items no Rashid arrumados (Alissow, Comedinha, Comunidade) - O NPC Banker foi corrigido, mas achei mais seguro retira-lo, visto que ninguem usava e poderia causar outro tipo de bug - Ilha (Sim aqui é uma ilha) de Zao adicionada (Alissow, Barker) - Monstros 8.54 aperfeiçoados (Alissow, Markithu, Zkum) - Reduzido danos da magia Exkordium (Alissow) - Os npcs Dark Rodo e Rachel vendem Blank Runes (Alissow) - Magias que não hitavam anteriormente foram arrumadas (Alissow) - Comando !buypremium arrumado (Alissow) - Arena PVM - Mais conhecida como Arena Svargrond - FUNCIONANDO!!! (Alissow) - Magia LightChain Retirada (Alissow) - Adicionado um sisteminha legal no templo (Alissow) - NPC Rashid retirado (Alissow)
Atualização 3.8 Minor Patch 1 [17/01/2010]: - Comando Deathlist retirado novamente, fizemos testes equivocados. Se você é uma das 16 pessoas que baixou a versão anterior (3.8) não precisa baixar esta, basta retirar o comando !deathlist e /deathlist do seu Talkactions.xml, Os comandos causam quedas no servidor.
Atualização 3.9 [15/02/2010]: - Cidade principal (Dorion) reformada, novo templo, novo depot, novo porto, novos npcs :] (Alissow) - Adicionado Reputation System (Comedinha, Cybermaster) - Adicionado !bless system (Comedinha) - /info melhorado (Comedinha) - Jail System (Comedinha) - Bug chatinho nos tiles pretos arrumado. - Magic Wall Funcionando! (Alissow) - Agora você pode fazer bolos e pães :] (Comedinha, Jean, Ojani) - Adicionado sistema de casamento (Comedinha, ScorpiOOn93, Alissow) - Loot The Fastest Turtle diminuido (Alissow) - Loot e experiencia do Feromous mais baixo (Alissow) - Sistema de parceis para Dorion funcionando (Alissow) - Guildwar System (Comedinha) - Anti MageBomb System (Comedinha, Huggen) - Adicionado Anti Nuker - Esse funciona! (Comedinha) - Adicionado Map Marks, para os players novos (Alissow, Comedinha)
Atualização 4.0 [15/02/2010]: - Cidade Mountain totalmente reformada (Alissow) - Montanha de Goblins de Dorion reformada (Alissow) - Demonic Castle de Dorion reformado (Alissow) - Cidade de Venonh modificada (Luis) - Distro atualizado, funcionando nos clients 8.54, 8.55, 8.56 e 8.57 (Comedinha) - Comando !bless retirado (Alissow) - O NPC Ermes não vende mais items de decoração (Alissow) - Arrumado bugs na Ferumbras Tower (Alissow) - O comando !AFK on agora mantem o player parado (Comedinha) - Arrumado bugs nas escadas da área de DeathFans (Alissow) - Comando !Deathlist funcionando! (Alissow, Doidinmapper, GT Thionix) - Sistema de REP atualizado (Comedinha) - Sistema de Polls (Comedinha) - Banco por comandos (Comedinha) - Novos comandos de addon e accounts (Comedinha) - Sistema de futebol completo! (Comedinha) - Sistema Antibot (Comedinha) - Magia Spared Hur modificada (Alissow, Orzeleagle) - Adicionado sistema de montaria (Alissow, unknown666) - Adicionado Canivetes (Alissow, Siramix) - Nova hunt Subaquatica (Luis)
Atualização 4.11! [11/07/2010]: - Versão 8.6, todos os items, outfits e monstros novos (Comedinhasss, Fireelement) - Adicionados os novos monstros 8.6 (Alissow) - Bug das potions arrumado (Comedinha, Matheusmkalo, Gabriel linhares, Fireelement) - Erros das runas arrumado (Comedinha, Gabriel linhares, Matheusmkalo, fireelement)
Link protegido: http://lix.in/-8d4bc0 Scan VirusTotal: http://www.virustotal.com/pt/analisis/983abb574dbb957a75aa1fd29eb804065f775e6a0c43216aa277686d32bce22a-1263702373
Atenção
- Acc do God: god/god - LEIA o tópico antes de postar qualquer coisa ou duvida - Reportem se houver algum bug - A database fica na pasta schemas+Database - Proibido o uso do nosso distro sem o nosso consenso, obrigado.
Andei percebendo que há muitos mapas feitos por mim em outros servidores postados aqui no xtibia, eu não sei se vocês sabem, mas isso é PLÁGIO. Eu não sou uma pessoa egoista, tudo que eu posto aqui no XTibia é para ser compartilhado, mas desde que mantenham os devidos créditos. Será denunciado qualquer tipo de "roubo" sem minha autorização para beneficio próprio. Eu sei que vocês não se importam muito com isso, eu também não deveria me importar, mas é o tempo e a dedicação de outra pessoa que vocês estão roubando, então peço gentilmente aos que tem conhecimento desses mapas, que me apontem. Não tem graça trabalhar horas e horas e ser roubado em dois minutos.
WarSystem para TFS 0.3.5 ou TFS 0.3.6.
Precisa de Gesior.
Para quem usa TFS 0.4 , veja o tópico :Warsystem Para TFS 0.4 [apenas o arquivo MOD]
Bom , chega de enrolar , vamos começar o "tutorial":
*Nota : é extremamente recomendavel que você limpe a tabela 'deaths_in_wars' antes de usar o sistema.
1) Adicione o arquivo a seguir , a pasta mods (OTServer/data/mod) basta criar um arquivo XML ou copiar algum outro e apagar tudo que tiver dentro , coloque o nome do arquivo de: guildWarSystem.xml:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Guild War System" version="0.3.5+" author="Xampy and Nahruto" contact="otland.net" enabled="yes">
<config name="function_config"><![CDATA[
DelayToCancel = 24 -- HOURS <-> [max: 47 -- min: 24] --> default: 24 hours [1 day]
Maps = {
["map1"] =
{
Guild1Pos = {x=238, y=442, z=12},
Guild2Pos = {x=244, y=442, z=12}
},
["map2"] =
{
Guild1Pos = {x=994, y=1004, z=6},
Guild2Pos = {x=1000, y=1003, z=6}
}
}
TimeToTeleport = 1 --minutes, when start a challenge
StopBattle = TRUE --Stop battle after X time ? TRUE / FALSE
TimeToStop = 60 --Minutes Time to Stop if StopBattle = TRUE.
--Cancel messages~
CancelMessagesWar = {
--Message when player try accept/reject/cancel a war but there is no a invitation.
[1] = "Not pending invitations.",
--Message when the player is not the guild leader.
[2] = "Only Guild Leader can execute this command.",
--Message when try Cancel the invitation but the war is already accepted.
[3] = "The war is already accepted.",
--MEssage when the invited guild name is not correct or does not exist.
[4] = "Not correct guild name.",
--Message when try invite any guild to a war but his guild already have a war or a pending invitation.
[5] = "Your guild is already in war or have a pending invitation.",
--Same of the cancel message 5 but the the enemy guild.
[6] = "This guild is already in war or have a pending invitation.",
--Message when use invite command but not write guild name.
[7] = "Command needs param.",
--Message when try invite his guild.
[8] = "You can\'t invite you guild.",
--Message when the map name is not correct.
[9] = "Please write a correct name.",
--Message when try go to any map but the guild is have no received/sent any war invitation
[10] = "Your guild is not in any war.",
--When try to cancel a war before the delay
[11] = "You should wait ".. DelayToCancel .." hours to cancel the war"
}
--Broadcast messages when invite/accept/reject/cancel ~ Remember the Spaces.
BroadCast_Type = MESSAGE_EVENT_ADVANCE
BroadCast = {
--Message when inviting
[1] =
{
"Guild ",
--Here will be the guild name
" have invited guild ",
--Here will be the invited guild name
" to have a war."
},
--Message when accept.
[2] =
{
"Guild ",
--Here will be the guild name
" have accepted the invitation of the guild " ,
--Here will be the name of the guild who have invited em.
" to have a war."
},
--Message when reject.
[3] =
{
"Guild ",
--Here will be the guild name
" have rejected the invitation of the guild " ,
--Here will be the name of the guild who have invited em.
" to have a war."
},
--Message when cancel.
[4] =
{
"Guild ",
--Here will be the guild name
" have canceled the invitation to the guild " ,
--Here will be the name of the guild who have invited em.
" to have a war."
},
--Message whenstar a battle..
[5] =
{
"Guild ",
--Here will be the guild name
" and guild " ,
--Here will be the name of the guild who have invited em.
" will have a battle in the map :"
},
--message when a battle ends.
[6] =
{
"The battle betwen guild ",
--Here will be the guild name
" and guild " ,
--Here will be the name of the guild who have invited em.
" its over."
},
}
--Functions ~.
function getShowInfo(id)
local Info = db.getResult("SELECT `show` FROM `guilds` WHERE `id` = " .. id .. "")
if Info:getID() ~= -1 then
local showy = Info:getDataInt("show")
Info:free()
return showy
end
return -1
end
function getKills(name)
local Info = db.getResult("SELECT `kills` FROM `guilds` WHERE `name` = '"..name.."'")
if Info:getID() ~= -1 then
local killy = Info:getDataInt("kills")
Info:free()
return killy
end
return -1
end
function getGuildWarInfo(id)
local Info = db.getResult("SELECT `invited_to`, `invited_by`, `in_war_with`,`war_time` FROM `guilds` WHERE `id` = " .. id .. "")
if Info:getID() ~= -1 then
local invTo, invBy, warWith, Time = Info:getDataInt("invited_to"), Info:getDataInt("invited_by"), Info:getDataInt("in_war_with"), Info:getDataInt("war_time")
Info:free()
return {To = invTo, By = invBy, With = warWith, T = Time}
end
return -1
end
function getGuildNameById(id)
local Info = db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. id .. "")
if Info:getID() ~= -1 then
local Name = Info:getDataString("name")
Info:free()
return Name
end
return -1
end
function GuildIsInPEace(id)
local Info = getGuildWarInfo(id)
return (Info.To == 0 and Info.By == 0 and Info.With == 0)
end
function doInviteToWar(myGuild, enemyGuild)
local StartTime = os.time()
db.executeQuery("UPDATE `guilds` SET `invited_to` = ".. enemyGuild ..", `war_time` = ".. StartTime .." WHERE `id` = ".. myGuild .."")
db.executeQuery("UPDATE `guilds` SET `invited_by` = ".. myGuild .." WHERE `id` = ".. enemyGuild .."")
end
function WarAccept(myGuild, enemyGuild)
local StartTime = os.time()
db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `in_war_with` = ".. myGuild ..", `kills` = 0, `show` = 1 WHERE `id` = ".. enemyGuild .."")
db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `war_time` = ".. StartTime ..", `in_war_with` = ".. enemyGuild ..", `kills` = 0, `show` = 0 WHERE `id` = ".. myGuild .."")
end
function cleanInfo(myGuild)
db.executeQuery("UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `war_time` = 0, `in_war_with` = 0, `kills` = 0, `show` = 0 WHERE `id` = ".. myGuild .."")
end
function registerDeathOne(myGuild, enemyGuild, cid, target)
db.executeQuery("INSERT INTO `deaths_in_wars` (`guild_id`, `player_id`, `killer_guild`, `killer`, `date`, `result1`, `result2`) VALUES ("..enemyGuild..", "..getPlayerGUID(target)..", "..myGuild..", "..getPlayerGUID(cid)..", " .. os.time() ..", 1, 0);")
db.executeQuery("UPDATE `guilds` SET `kills` = `kills` + 1 WHERE `id` = ".. myGuild .."")
end
function registerDeathTwo(myGuild, enemyGuild, cid, target)
db.executeQuery("INSERT INTO `deaths_in_wars` (`guild_id`, `player_id`, `killer_guild`, `killer`, `date`, `result1`, `result2`) VALUES ("..enemyGuild..", "..getPlayerGUID(target)..", "..myGuild..", "..getPlayerGUID(cid)..", " .. os.time() ..", 0, 1);")
db.executeQuery("UPDATE `guilds` SET `kills` = `kills` + 1 WHERE `id` = ".. myGuild .."")
end
function removeDeaths(id)
db.executeQuery("DELETE FROM `deaths_in_wars` WHERE `guild_id` = " ..id .. ";")
end
function StopWar(myGuild, enemyGuild)
cleanInfo(myGuild)
cleanInfo(enemyGuild)
removeDeaths(myGuild)
removeDeaths(enemyGuild)
end
function WeAreInWar(myGuild, enemyGuild)
local myGuildInfo = getGuildWarInfo(myGuild)
local enemyGuildInfo = getGuildWarInfo(enemyGuild)
if myGuild == enemyGuildInfo.With and enemyGuild == myGuildInfo.With then
if enemyGuildInfo.ON == 1 and myGuildInfo.ON == 1 then
return TRUE
end
end
return FALSE
end
function getOnlineMembers(id)
local PlayersOnline = getPlayersOnline()
local MembersOnline = {}
for i, pid in ipairs(PlayersOnline) do
if id == getPlayerGuildId(PlayersOnline[i]) then
table.insert(MembersOnline, PlayersOnline[i])
end
end
return MembersOnline
end
function teleportGuild(id, pos)
local Members = getOnlineMembers(id)
if #Members > 0 then
for i = 1, #Members do
if #Members > 1 then
if getTilePzInfo(getCreaturePosition(Members[i])) == TRUE then
doTeleportThing(Members[i], pos, FALSE)
doSendMagicEffect(pos, CONST_ME_TELEPORT)
doSendMagicEffect(getCreaturePosition(Members[i]), CONST_ME_POFF)
doPlayerSendTextMessage(Members[i], 22, 'Prepare to fight!')
else
doPlayerPopupFYI(Members[i], 'GuildWar challenge error:\n\nBoth guild members must stay in Protection Zone.')
end
else
doPlayerPopupFYI(Members[i], 'GuildWar challenge error:\n\nBoth guilds must have more than one player online (leader & any member, at least).')
end
end
end
end
function getGuildsWithWar()
local res = db.getResult("SELECT `id` FROM `guilds` WHERE `in_war_with` > 0")
local GuildW = {}
if res:getID() ~= -1 then
while true do
table.insert(GuildW, res:getDataInt "id")
if not res:next() then
break
end
end
res:free()
end
return GuildW
end
function guildExist(nom)
local Get = db.getResult("SELECT `id` FROM `guilds` WHERE `name` = " .. db.escapeString(nom) .. ";")
if Get:getID() ~= -1 then
local ret = Get:getDataInt("id")
Get:free()
return ret
end
return -1
end
function StartWar(x)
teleportGuild(x.myGuild, Maps[x.map].Guild1Pos)
teleportGuild(x.enemyGuild, Maps[x.map].Guild2Pos)
if StopBattle == TRUE then
addEvent(StopWarNow, 60 * 1000, {myGuild = x.myGuild, enemyGuild = x.enemyGuild})
end
end
function StopWarNow(c)
StopWar(c.myGuild, c.enemyGuild)
doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(c.myGuild).. BroadCast[6][2] ..getGuildNameById(c.enemyGuild).. BroadCast[6][3], BroadCast_Type)
end
function putWarOn(myGuild, enemyGuild)
db.executeQuery("UPDATE `guilds` SET `war_time` = 1 WHERE `id` = ".. myGuild .."")
db.executeQuery("UPDATE `guilds` SET `war_time` = 1 WHERE `id` = ".. enemyGuild .."")
end]]></config>
<talkaction words="!disband; /war-invite; /war-accept; /war-reject; /war-cancel-invite; /war-cancel" event="script"><![CDATA[
domodlib('function_config')
function onSay(cid, words, param, channel)
if getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER then
local myGuild = getPlayerGuildId(cid)
if words == "/war-invite" then
if GuildIsInPEace(myGuild) == true then
if param ~= "" then
if guildExist(param) ~= -1 then
local invitedGuild = getGuildId(param)
if invitedGuild ~= -1 then
if invitedGuild ~= myGuild then
if GuildIsInPEace(invitedGuild) == true then
if getPlayerStorageValue(cid, 65570) <= os.time() then
doInviteToWar(myGuild, invitedGuild)
doBroadcastMessage(BroadCast[1][1] ..getPlayerGuildName(cid).. BroadCast[1][2] ..getGuildNameById(invitedGuild).. BroadCast[1][3], BroadCast_Type)
setPlayerStorageValue(cid, 65570, os.time()+(20*60))
else
local waitTime = (getPlayerStorageValue(cid, 65570) - os.time())
doPlayerSendCancel(cid, "You must wait " .. os.date("%M", waitTime) .. " minutes and " .. os.date("%S", waitTime) .. " seconds until declare another war.")
end
else
doPlayerSendCancel(cid, CancelMessagesWar[6])
end
else
doPlayerSendCancel(cid, CancelMessagesWar[8])
end
else
doPlayerSendCancel(cid, CancelMessagesWar[4])
end
else
doPlayerSendCancel(cid, CancelMessagesWar[4])
end
else
doPlayerSendCancel(cid, CancelMessagesWar[7])
end
else
doPlayerSendCancel(cid, CancelMessagesWar[5])
end
elseif words == "/war-accept" then
if getGuildWarInfo(myGuild).By ~= 0 then
local enemyGuild = getGuildWarInfo(myGuild).By
doBroadcastMessage(BroadCast[2][1] ..getPlayerGuildName(cid).. BroadCast[2][2] ..getGuildNameById(enemyGuild).. BroadCast[2][3], BroadCast_Type)
WarAccept(myGuild, enemyGuild)
else
doPlayerSendCancel(cid, CancelMessagesWar[1])
end
elseif words == "/war-reject" then
if getGuildWarInfo(myGuild).By ~= 0 then
doBroadcastMessage(BroadCast[3][1] ..getPlayerGuildName(cid).. BroadCast[3][2] ..getGuildNameById(getGuildWarInfo(myGuild).By).. BroadCast[3][3], BroadCast_Type)
cleanInfo(getGuildWarInfo(myGuild).By)
cleanInfo(myGuild)
else
doPlayerSendCancel(cid, CancelMessagesWar[1])
end
elseif words == "/war-cancel-invite" then
if getGuildWarInfo(myGuild).To ~= 0 then
if getGuildWarInfo(myGuild).With == 0 then
doBroadcastMessage(BroadCast[4][1] ..getPlayerGuildName(cid).. BroadCast[4][2] ..getGuildNameById(getGuildWarInfo(myGuild).To).. BroadCast[4][3], BroadCast_Type)
cleanInfo(getGuildWarInfo(myGuild).To)
cleanInfo(myGuild)
else
doPlayerSendCancel(cid, CancelMessagesWar[3])
end
else
doPlayerSendCancel(cid, CancelMessagesWar[1])
end
elseif words == "/war-challenge" then
local map = Maps[param]
if map then
if enemy ~= 0 then
local enemyGuild = getGuildWarInfo(myGuild).With
addEvent(StartWar, 15000, {myGuild = myGuild, enemyGuild = enemyGuild, map = param})
doBroadcastMessage(BroadCast[5][1] ..getPlayerGuildName(cid).. BroadCast[5][2] ..getGuildNameById(enemyGuild).. BroadCast[5][3] .. param ..".", BroadCast_Type)
else
doPlayerSendCancel(cid, CancelMessagesWar[10])
end
else
doPlayerSendCancel(cid, CancelMessagesWar[9])
end
elseif words == "/war-cancel" then
local enemy = getGuildWarInfo(myGuild).With
if enemy ~= 0 then
if (os.time() - getGuildWarInfo(myGuild).T) >= (60 * 60 * DelayToCancel) then
StopWar(myGuild, enemy)
doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(myGuild).. BroadCast[6][2] ..getGuildNameById(enemy).. BroadCast[6][3], BroadCast_Type)
else
local timeEnd = getGuildWarInfo(myGuild).T + (60 * 60 * DelayToCancel)
local timeLeft = timeEnd - os.time()
local hours = (os.date("%H", timeLeft) + 23)
doPlayerSendCancel(cid, "Time remaining: "..hours.." hours, " .. os.date("%M", timeLeft) .. " minutes and " .. os.date("%S", timeLeft) .. " seconds.")
end
else
doPlayerSendCancel(cid, CancelMessagesWar[10])
end
elseif words == "!disband" then
local enemy = getGuildWarInfo(myGuild).With
if enemy > 0 then
if channel == CHANNEL_GUILD then
if (os.time() - getGuildWarInfo(myGuild).T) >= (60 * 60 * DelayToCancel) then
StopWar(myGuild, enemy)
doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(myGuild).. BroadCast[6][2] ..getGuildNameById(enemy).. BroadCast[6][3], BroadCast_Type)
else
local timeEnd = getGuildWarInfo(myGuild).T + (60 * 60 * DelayToCancel)
local timeLeft = timeEnd - os.time()
local hours = (os.date("%H", timeLeft) + 23)
doPlayerSendCancel(cid, "Time remaining: "..hours.." hours, " .. os.date("%M", timeLeft) .. " minutes and " .. os.date("%S", timeLeft) .. " seconds.")
end
else
doPlayerSendCancel(cid, "You have to say this command in your guild channel.")
end
else
return FALSE
end
return FALSE
end
else
doPlayerSendCancel(cid, CancelMessagesWar[2])
end
local file = io.open("data/logs/Wars.txt", "a")
file:write("".. os.date("%d %B %Y %X ", os.time()) .." --> "..getCreatureName(cid)..": "..words.." "..param.."\n")
file:close()
return TRUE
end]]></talkaction>
<event type="login" name="WarLogin" event="script"><![CDATA[
domodlib('function_config')
function onLogin(cid)
registerCreatureEvent(cid, "WarKill")
return true
end]]></event>
<event type="kill" name="WarKill" event="script"><![CDATA[
domodlib('function_config')
local PZ = createConditionObject(CONDITION_INFIGHT)
setConditionParam(PZ, CONDITION_PARAM_TICKS, getConfigInfo('whiteSkullTime'))
function onKill(cid, target, lastHit)
if isPlayer(cid) == TRUE and isPlayer(target) == TRUE then
local config = {
removeFrags = true -- If 'true' player won't gain frags from a player that is versus him; else, player will gain frags as normal.
}
local GUID = getPlayerGUID(cid)
local namec = getPlayerName(cid)
local namet = getPlayerName(target)
local skull = getCreatureSkullType(cid)
local skullend = getPlayerSkullEnd(cid)
local playerPos = getPlayerPosition(cid)
local targetPos = getPlayerPosition(target)
local cidd = cid
local timeA = os.time()
local timesA = {today = (timeA - 86400), week = (timeA - (7 * 86400))}
local contentsA, resultA = {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` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (timeA - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC")
if(resultA:getID() ~= -1) then
repeat
local contentA = {
name = resultA:getDataString("name"),
level = resultA:getDataInt("level"),
date = resultA:getDataInt("date")
}
if(contentA.date > timesA.today) then
table.insert(contentsA.day, contentA)
elseif(contentA.date > timesA.week) then
table.insert(contentsA.week, contentA)
else
table.insert(contentsA.month, contentA)
end
until not resultA:next()
resultA:free()
end
local sizeA = {
day = table.maxn(contentsA.day),
week = table.maxn(contentsA.week),
month = table.maxn(contentsA.month)
}
local function removeFrag(cid)
local timeB = os.time()
local timesB = {today = (timeB - 86400), week = (timeB - (7 * 86400))}
local contentsB, resultB = {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` = " .. GUID .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (timeB - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC")
if(resultB:getID() ~= -1) then
repeat
local contentB = {
name = resultB:getDataString("name"),
level = resultB:getDataInt("level"),
date = resultB:getDataInt("date")
}
if(contentB.date > timesB.today) then
table.insert(contentsB.day, contentB)
elseif(contentB.date > timesB.week) then
table.insert(contentsB.week, contentB)
else
table.insert(contentsB.month, contentB)
end
until not resultB:next()
resultB:free()
end
local sizeB = {
day = table.maxn(contentsB.day),
week = table.maxn(contentsB.week),
month = table.maxn(contentsB.month)
}
if sizeB.day > sizeA.day or sizeB.week > sizeA.week or sizeB.month > sizeA.month then
db.executeQuery("UPDATE `killers` SET `unjustified` = 0 WHERE `id` IN (SELECT `kill_id` FROM `player_killers` WHERE `player_id` = "..GUID..") ORDER BY `death_id` DESC LIMIT 1;")
doPlayerSendTextMessage(cidd, 21, "Frag from "..namet.." wasn't counted.")
end
if skull == SKULL_RED then
if getCreatureSkullType(cidd) == SKULL_BLACK then
doPlayerSetSkullEnd(cidd, skullend, SKULL_RED)
doCreatureSetSkullType(cidd, SKULL_RED)
end
elseif skull == SKULL_WHITE then
if getCreatureSkullType(cidd) == SKULL_RED then
doPlayerSetSkullEnd(cidd, timeB, SKULL_RED)
doCreatureSetSkullType(cidd, SKULL_WHITE)
end
end
end
local myGuild = getPlayerGuildId(cid)
local enemyGuild = getPlayerGuildId(target)
if myGuild ~= 0 and enemyGuild ~= 0 then
if enemyGuild == getGuildWarInfo(myGuild).With then
local guildc = getPlayerGuildName(cid)
local guildt = getPlayerGuildName(target)
doAddCondition(cid, PZ)
if lastHit == TRUE then
if getTileZoneInfo(playerPos) == 0 and getTileZoneInfo(targetPos) == 0 then
if getShowInfo(myGuild) == 1 then
registerDeathOne(myGuild, enemyGuild, cid, target)
else
registerDeathTwo(myGuild, enemyGuild, cid, target)
end
else
doPlayerSendTextMessage(cid, 19, "Remember: in PvP zone the system doesn't register the frag.")
end
end
if config.removeFrags == true then
addEvent(removeFrag, 150)
end
local gsim = getShowInfo(myGuild)
local gsie = getShowInfo(enemyGuild)
if gsim > gsie then
resulta = getKills(guildc)
resultb = getKills(guildt)
else
resulta = getKills(guildt)
resultb = getKills(guildc)
end
local players = getOnlinePlayers()
for i,playerName in ipairs(players) do
local player = getPlayerByName(playerName);
if getPlayerGuildId(player) == myGuild then
if getTileZoneInfo(playerPos) == 0 and getTileZoneInfo(targetPos) == 0 then
doPlayerSendChannelMessage(player, "", "Opponent "..namet.." of the "..guildt.." was killed by "..namec..". The new score is "..resulta..":"..resultb.." frags.", TALKTYPE_CHANNEL_W, CHANNEL_GUILD)
end
end
end
end
end
end
return TRUE
end]]></event>
</mod>
2) Adicione isso a database (no phpMyAdmin):
ALTER TABLE `guilds`
ADD `invited_to` INT( 11 ) NOT NULL ,
ADD `invited_by` INT( 11 ) NOT NULL ,
ADD `in_war_with` INT( 11 ) NOT NULL ,
ADD `kills` INT( 11 ) NOT NULL ,
ADD `show` SMALLINT( 1 ) NOT NULL ,
ADD `war_time` INT( 11 ) NOT NULL ;
e isso:
CREATE TABLE `deaths_in_wars` (
`guild_id` INT( 11 ) NOT NULL ,
`player_id` INT( 11 ) NOT NULL ,
`killer_guild` INT( 11 ) NOT NULL ,
`killer` INT( 11 ) NOT NULL ,
`date` INT( 11 ) NOT NULL ,
`result1` INT( 11 ) NOT NULL ,
`result2` INT( 11 ) NOT NULL
) ENGINE = MYISAM ;
não sabe como adicionar ? basta abrir o bloco de notas , copiar o conteudo acima e colar e salvar como "nome.sql" apos isso va a http://localhost/phpmyadmin , loga-se escolha a database clique em importar e selecione o arquivo que você salvou.
3) Va até xampp/htdocs. Crie um arquivo chamado wars.php: [copie um arquivo php e apague tudo que tiver dentro ou abra o bloco de notas coloque o conteudo e salve como "wars.php"]
<?PHP
//Litle Config
$MaxShow = 100;
//END
if($action == '')
{
$main_content .= '
<P ALIGN=CENTER>
<br>
<FONT SIZE=4 COLOR=#8A0808>
How to use...
</FONT>
<br>
<br>
<FONT SIZE=2 COLOR=#DF0101>
* <b>/war-invite</b> :
<FONT SIZE=1 COLOR=green>
Send an invitation to start a war.<br>
<u>Example</u>: /war-invite Death Hard
</FONT><br>
* <b>/war-accept</b> :
<FONT SIZE=1 COLOR=green>
Accept the invitation to start a war.
</FONT><br>
* <b>/war-reject</b> :
<FONT SIZE=1 COLOR=green>
Reject the invitation to start a war.
</FONT><br>
* <b>/war-cancel-invite</b> :
<FONT SIZE=1 COLOR=green>
Cancel the invitation already sent to start a war.
</FONT><br>
* <b>/war-cancel</b> :
<FONT SIZE=1 COLOR=green>
Finish the current war: it can only be used after 1 day of war.
</FONT><br>
</FONT>
<br>
<FONT SIZE=2 COLOR=#8A0808>
Those commands can only be executed by guild leaders.<br><br>
<table border="1"><tr border="1"><td border="1"><h3>Remember:</h3>
<ul>
<li>You won\'t get any frag if you kill someone that is VERSUS you.</li>
<li>If you kill someone that is in your guild, you will get a frag.</li>
</ul></td></tr></table>
</FONT>
</P>
';
$wars = $SQL->query("
SELECT g.name AS gname, wg.name AS wgname, g.war_time AS gtime, wg.war_time AS wgtime, g.kills AS kills, wg.kills AS ekills, g.show AS s, g.id AS gid, wg.id AS wgid, g.logo_gfx_name AS glogo, wg.logo_gfx_name AS wglogo
FROM guilds AS g
INNER JOIN guilds AS wg
ON wg.id = g.in_war_with
ORDER BY s DESC LIMIT 50;
");
foreach ($wars as $k=>$v) {
if ($v[s] == 1)
{
$glogo = "default_logo.gif";
$wglogo = "default_logo.gif";
if(!empty($v[glogo]))
$glogo = $v[glogo];
if(!empty($v[wglogo]))
$wglogo = $v[wglogo];
if(is_int($number_of_rows / 2)) { $bgcolor = '#D4C0A1'; } else { $bgcolor = '#D5E1A2'; } $number_of_rows++;
$stats .="
<TR BGCOLOR=".$bgcolor.">
<TD WIDTH=30%><center><a href='index.php?subtopic=guilds&action=show&guild=" . $v[gname] . "'><font color='#5A2800'>$v[gname]</font></a></center></TD>
<TD WIDTH=40%><center><a href='index.php?subtopic=wars&action=show&war=" . $v[gid] . "'><font color='#5A2800'>{$v[kills]} - {$v[ekills]}</font></a></center></TD>
<TD WIDTH=30%><center><a href='index.php?subtopic=guilds&action=show&guild=" . $v[wgname] . "'><font color='#5A2800'>$v[wgname]</font></a></center></TD>
</TR>
<TR BGCOLOR=".$bgcolor.">
<TD><center><img border=1 src='guilds/".$glogo."' width='64px' height='64px'/></center></TD>
<TD><center><b>Declared at:</b><br />" . date("d/m/y H:i:s", $v[gtime]) . "<p><b>Started at:</b><br />" . date("d/m/y H:i:s", $v[wgtime]) . "</center></TD>
<TD><center><img border=1 src='guilds/".$wglogo."' width='64px' height='64px'/></center></TD>
</TR>
";
}
}
$main_content .= '
<table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody> <TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b><blink>Active Wars</blink></b></font></td></tr></tbody></table>
';
if(!$stats) {
$main_content .= '
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
<TR BGCOLOR='.$config['site']['darkborder'].'>
<TD>
No active wars in '.$config['server']['serverName'].' yet.
</TD>
</TR>
</TABLE>
';
} else {
$main_content .= "
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
$stats
</TABLE>
";
}
?>
<?PHP
$invitations = $SQL->query("
SELECT ig.name AS igname, i.name AS iname, i.id AS iid, ig.id AS igid, i.war_time AS itime, i.logo_gfx_name AS ilogo, ig.logo_gfx_name AS iglogo
FROM guilds AS i
INNER JOIN guilds AS ig
ON ig.id = i.invited_to
ORDER BY itime ASC LIMIT 50;
");
foreach ($invitations as $k=>$v) {
$ilogo = "default_logo.gif";
$iglogo = "default_logo.gif";
if(!empty($v[ilogo]))
$ilogo = $v[ilogo];
if(!empty($v[iglogo]))
$iglogo = $v[iglogo];
if(is_int($number_of_rows / 2)) { $bgcolor = '#D4C0A1'; } else { $bgcolor = '#D5E1A2'; } $number_of_rows++;
$invi .="
<TR BGCOLOR=".$bgcolor.">
<TD width=30%>
<center>
<b>
<a href='index.php?subtopic=guilds&action=show&guild=" . $v[iname] . "'><font color='#5A2800'>$v[iname]</font></a>
</b>
</center>
</TD>
<TD width=40%><center>0-0</center></TD>
<TD width=30%>
<center>
<b>
<a href='index.php?subtopic=guilds&action=show&guild=" . $v[igname] . "'><font color='#5A2800'>$v[igname]</font></a>
</b>
</center>
</TD>
</TR>
<TR BGCOLOR=".$bgcolor.">
<TD>
<center>
<img border=1 src='guilds/".$ilogo."' width='64px' height='64px'/>
</center>
</TD>
<TD><center><b>Declared on:</b><br />" . date("d/m/y H:i:s", $v[itime]) . "</center></TD>
<TD>
<center>
<img border=1 src='guilds/".$iglogo."' width='64px' height='64px'/>
</center>
</TD>
</TR>
";
}
$main_content .= '<br><br><br>
<table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody> <TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b><blink>Declared Wars</blink></b></font></td></tr></tbody></table>';
if(!$invi) {
$main_content .= '
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
<TR BGCOLOR='.$config['site']['darkborder'].'>
<TD>
No declared wars in '.$config['server']['serverName'].' yet.
</TD>
</TR>
</TABLE>
<br>
';
} else {
$main_content .= "
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
$invi
</TABLE>
";
}
}
//SHOW FRAGS ~~
if($action == 'show')
{
$guild = $ots->createObject('Guild');
$guild->load($_REQUEST['war']);
$ranks = $SQL->query("
SELECT
*
FROM
guild_ranks
WHERE
guild_id = ". $guild->getId() ."
ORDER BY
level DESC;
");
foreach ($ranks as $y)
{
$Players = $SQL->query("
SELECT
*
FROM
players
WHERE
rank_id = ". $y[id] ."
ORDER BY
name
ASC;");
foreach ($Players as $v)
{
$totDeaths = 0;
$deaths = $SQL->query("
SELECT
COUNT(player_id) AS n
FROM
deaths_in_wars
WHERE
player_id = ". $v[id] ."
GROUP BY
player_id
DESC LIMIT 1;");
foreach ($deaths as $q)
{
$totDeaths = $q[n];
}
if($totDeaths > 1 || $totDeaths == 0){
$deathL = "deaths";
}
else{
$deathL = "death";
}
$membersDeaths1 .="<tr bgcolor=#D4C0A1>
<td width=70%><a href=index.php?subtopic=characters&name=" . $v[name] . "><u>$v[name]</u></a></td>
<td width=30%>$totDeaths $deathL</td>
</tr>
";
$totFrags = 0;
$frags = $SQL->query("
SELECT
COUNT(killer) AS m
FROM
deaths_in_wars
WHERE
killer = ". $v[id] ."
GROUP BY
killer
DESC LIMIT 1;");
foreach ($frags as $p)
{
$totFrags = $p[m];
}
if($totFrags > 1 || $totFrags == 0){
$fragL = "frags";
}
else{
$fragL = "frag";
}
$membersFrags1 .= "<tr bgcolor=#D4C0A1>
<td width=70%><a href=index.php?subtopic=characters&name=" . $v[name] . "><u>$v[name]</u></a></td>
<td width=30%>$totFrags $fragL</td>
</tr>
";
}
}
$guild2 = $ots->createObject('Guild');
$guild2->load($guild->getCustomField(in_war_with));
$ranks2 = $SQL->query("
SELECT
*
FROM
guild_ranks
WHERE
guild_id = ". $guild2->getId() ."
ORDER BY
level DESC;
");
foreach ($ranks2 as $y)
{
$Players = $SQL->query("
SELECT
*
FROM
players
WHERE
rank_id = ". $y[id] ."
ORDER BY
name
ASC;");
foreach ($Players as $v)
{
$totDeaths2 = 0;
$deaths = $SQL->query("
SELECT
COUNT(player_id) AS n
FROM
deaths_in_wars
WHERE
player_id = ". $v[id] ."
GROUP BY
player_id
DESC LIMIT 1;");
foreach ($deaths as $q)
{
$totDeaths2 = $q[n];
}
if($totDeaths2 > 1 || $totDeaths2 == 0){
$deathL = "deaths";
}
else{
$deathL = "death";
}
$membersDeaths2 .= "<tr bgcolor=#D4C0A1>
<td width=70%><a href=index.php?subtopic=characters&name=" . $v[name] . "><u>$v[name]</u></a></td>
<td width=30%>$totDeaths2 $deathL</td>
</tr>
";
$totFrags2 = 0;
$frags = $SQL->query("
SELECT
COUNT(killer) AS m
FROM
deaths_in_wars
WHERE
killer = ". $v[id] ."
GROUP BY
killer
DESC LIMIT 1;");
foreach ($frags as $p)
{
$totFrags2 = $p[m];
}
if($totFrags2 > 1 || $totFrags2 == 0){
$fragL = "frags";
}
else{
$fragL = "frag";
}
$membersFrags2 .= "<tr bgcolor=#D4C0A1>
<td width=70%><a href=index.php?subtopic=characters&name=" . $v[name] . "><u>$v[name]</u></a></td>
<td width=30%>$totFrags2 $fragL</td>
</tr>
";
}
}
$deaths3 = $SQL->query("
SELECT
*
FROM
deaths_in_wars
WHERE
(killer_guild = ". $guild->getId() ." OR killer_guild = ". $guild2->getId() .")
ORDER BY
date
DESC LIMIT ". $MaxShow .";");
$deathsG1 = $SQL->query("
SELECT
*
FROM
deaths_in_wars
WHERE
killer_guild = ". $guild->getId() ."
ORDER BY
date
DESC LIMIT ". $MaxShow .";");
$deathsG2 = $SQL->query("
SELECT
*
FROM
deaths_in_wars
WHERE
killer_guild = ". $guild2->getId() ."
ORDER BY
date
DESC LIMIT ". $MaxShow .";");
$Topfragger1 = $SQL->query("
SELECT
killer, COUNT(killer) maximo
FROM
deaths_in_wars
WHERE
killer_guild = ". $guild->getId() ."
GROUP BY
killer
ORDER BY
maximo
DESC LIMIT 1;");
foreach ($Topfragger1 as $y)
{
$name = $ots->createObject('Player');
$name->load($y[killer]);
$TopFraggerName = $name->getName();
$numTop1 = $y[maximo];
}
$Topfragger2 = $SQL->query("
SELECT
killer, COUNT(killer) maximo
FROM
deaths_in_wars
WHERE
killer_guild = ". $guild2->getId() ."
GROUP BY
killer
ORDER BY
maximo
DESC LIMIT 1;");
foreach ($Topfragger2 as $y)
{
$name = $ots->createObject('Player');
$name->load($y[killer]);
$TopFraggerName2 = $name->getName();
$numTop2 = $y[maximo];
}
$mostDead = $SQL->query("
SELECT
player_id, COUNT(player_id) maximo
FROM
deaths_in_wars
WHERE
killer_guild = ". $guild->getId() ."
GROUP BY
player_id
ORDER BY
maximo
DESC LIMIT 1;");
foreach ($mostDead as $y)
{
$name = $ots->createObject('Player');
$name->load($y[player_id]);
$mostDeadName = $name->getName();
$mostDeadNum = $y[maximo];
}
$mostDead2= $SQL->query("
SELECT
player_id, COUNT(player_id) maximo
FROM
deaths_in_wars
WHERE
killer_guild = ". $guild2->getId() ."
GROUP BY
player_id
ORDER BY
maximo
DESC LIMIT 1;");
foreach ($mostDead2 as $y)
{
$name = $ots->createObject('Player');
$name->load($y[player_id]);
$mostDeadName2 = $name->getName();
$mostDeadNum2= $y[maximo];
}
foreach ($deaths3 as $a=>$b) {
$killed3 = $ots->createObject('Player');
$killed3->load($b[player_id]);
$killedName3 = $killed3->getName();
$killer3 = $ots->createObject('Player');
$killer3->load($b[killer]);
$killerName3 = $killer3->getName();
$guild3 = $ots->createObject('Guild');
$guild3->load($b[killer_guild]);
$guildName3 = $guild3->getName();
$totKills1 = 0;
$killss1 = $SQL->query("
SELECT
COUNT(result1) AS m
FROM
deaths_in_wars
WHERE
(killer_guild = ". $guild->getId() ." AND date <= ". $b[date] .")
GROUP BY
result1
DESC LIMIT 1;");
foreach ($killss1 as $p)
{
$totKills1 = $p[m];
}
$totKills2 = 0;
$killss2 = $SQL->query("
SELECT
COUNT(result2) AS n
FROM
deaths_in_wars
WHERE
(killer_guild = ". $guild2->getId() ." AND date <= ". $b[date] .")
GROUP BY
result2
DESC LIMIT 1;");
foreach ($killss2 as $q)
{
$totKills2 = $q[n];
}
$kills3 .="
<TR BGCOLOR=#D4C0A1>
<TD>
<a href='index.php?subtopic=characters&name=" . $killerName3 . "'><u>$killerName3</u></a>
</TD>
<TD>
<a href='index.php?subtopic=characters&name=" . $killedName3 . "'><u>$killedName3</u></a>
</TD>
<TD>
$guildName3
</TD>
<TD>
$totKills1:$totKills2
</TD>
<TD>
" . date("d/m/y H:i:s", $b[date]) . "
</TD>
</TR>
";
}
if(!empty($mostDeadNum)){$mostDeadNum = $mostDeadNum;}else{$mostDeadNum = 0 + $mostDeadNum;}
if(!empty($mostDeadNum2)){$mostDeadNum2 = $mostDeadNum2;}else{$mostDeadNum2 = 0 + $mostDeadNum2;}
if(!empty($numTop1)){$numTop1 = $numTop1;}else{$numTop1 = 0 + $numTop1;}
if(!empty($numTop2)){$numTop2 = $numTop2;}else{$numTop2 = 0 + $numTop2;}
foreach ($deathsG1 as $k=>$v) {
$killed = $ots->createObject('Player');
$killed->load($v[player_id]);
$killedName = $killed->getName();
$killer = $ots->createObject('Player');
$killer->load($v[killer]);
$killerName = $killer->getName();
$kills .="
<TR BGCOLOR=\"".$config['site'][($k % 2 == 1 ? 'light' : 'dark').'border']."\">
<TD>
<center>
<b>
<a href='index.php?subtopic=characters&name=" . $killedName . "'>$killedName</a>
</b>
</center>
</TD>
<TD>
<center>
<b>
<a href='index.php?subtopic=characters&name=" . $killerName . "'>$killerName</a>
</b>
</center>
</TD>
<TD>
<center>
" . date("d/m/y H:i:s", $v[date]) . "
</center>
</TD>
</TR>
";
}
foreach ($deathsG2 as $k=>$v) {
$killed = $ots->createObject('Player');
$killed->load($v[player_id]);
$killedName = $killed->getName();
$killer = $ots->createObject('Player');
$killer->load($v[killer]);
$killerName = $killer->getName();
$kills2 .="
<TR BGCOLOR=\"".$config['site'][($k % 2 == 1 ? 'light' : 'dark').'border']."\">
<TD>
<center>
<b>
<a href='index.php?subtopic=characters&name=" . $killedName . "'>$killedName</a>
</b>
</center>
</TD>
<TD>
<center>
<b>
<a href='index.php?subtopic=characters&name=" . $killerName . "'>$killerName</a>
</b>
</center>
</TD>
<TD>
<center>
" . date("d/m/y H:i:s", $v[date]) . "
</center>
</TD>
</TR>
";
}
if($numTop1 > 1 || $numTop1 == 0){$fragl1 = "frags";}else{$fragl1 = "frag";}
if($numTop2 > 1 || $numTop2 == 0){$fragl2 = "frags";}else{$fragl2= "frag";}
if($mostDeadNum > 1 || $mostDeadNum == 0){$deathl1 = "deaths";}else{$deathl1 = "death";}
if($mostDeadNum2 > 1 || $mostDeadNum2 == 0){$deathl2 = "deaths";}else{$deathl2 = "death";}
$main_content .= '
<table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody> <TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b>War Information</b></font></td></tr></tbody></table>
';
$logo = "default_logo.gif";
$logo2 = "default_logo.gif";
$a = $guild->getCustomField(logo_gfx_name);
$b = $guild2->getCustomField(logo_gfx_name);
if(!empty($a))
$logo = $a;
if(!empty($b))
$logo2 = $b;
$main_content .= "
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
<TR BGCOLOR='#D4C0A1'>
<TD WIDTH='35%'><center><a href='index.php?subtopic=guilds&action=show&guild=".$guild->getName()."'><font color='#5A2800'>".$guild->getName()."</font></a></center></TD>
<TD WIDTH='30%'><center><font color='#5A2800'><b>".$guild->getCustomField(kills)." - ".$guild2->getCustomField(kills)."</b></font></center></TD>
<TD WIDTH='35%'><center><a href='index.php?subtopic=guilds&action=show&guild=".$guild2->getName()."'><font color='#5A2800'>".$guild2->getName()."</font></a></center></TD>
</TR>
<TR BGCOLOR='#D4C0A1'>
<TD><center><img border=1 src='guilds/".$logo."' width='64px' height='64px'/><p><b><u>Top fragger:</b></u><br /><a href='index.php?subtopic=characters&name=".$TopFraggerName."'>".$TopFraggerName."</a> (".$numTop1." ".$fragl1.")<p><b><u>Most dead:</b></u><br /><a href='index.php?subtopic=characters&name=".$mostDeadName2."'>".$mostDeadName2."</a> (".$mostDeadNum2." ".$deathl2.")</center></TD>
<TD><center><b>Declared at:</b><br />" . date("d/m/y H:i:s", $guild->getCustomField(war_time)) . "<p><b>Started at:</b><br />" . date("d/m/y H:i:s", $guild2->getCustomField(war_time)) . "</center></TD>
<TD><center><img border=1 src='guilds/".$logo2."' width='64px' height='64px'/><p><b><u>Top fragger:</u></b><br /><a href='index.php?subtopic=characters&name=".$TopFraggerName2."'>".$TopFraggerName2."</a> (".$numTop2." ".$fragl2.")<p><b><u>Most dead:</u></b><br /><a href='index.php?subtopic=characters&name=".$mostDeadName."'>".$mostDeadName."</a> (".$mostDeadNum." ".$deathl1.")</center></TD>
</TR>
</TABLE>
";
$main_content .= '
<br><br><table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b>Kills - '.$guild->getName().' vs '.$guild2->getName().'</b></font></td></tr></tbody></table>
';
$main_content .= "
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
<TR BGCOLOR=#D4C0A1>
<TD><b>Killer</b></TD>
<TD><b>Victim</b></TD>
<TD><b>Fragging Guild</b></TD>
<TD><b>Result</b></TD>
<TD><b>Date</b></TD>
</TR>
$kills3
</TABLE>";
$main_content .= '
<br><br><table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b>Most Frags</b></font></td></tr></tbody></table>';
$main_content .= "
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
<TR BGCOLOR=#D4C0A1>
<TD width=50%>
<div align='right'>
<B>
". $guild->getName() ."
</B>
</div>
</TD>
<TD width=50%>
<div align='left'>
<B>
". $guild2->getName() ."
</B>
</div>
</TD>
</TR>
<TR BGCOLOR=#D4C0A1>
<TD>
<div align='right'>
<img src=guilds/".$logo." width='64px' height='64px' border=1/>
</div>
</TD>
<TD>
<div align='left'>
<img src=guilds/".$logo2." width='64px' height='64px'border=1/>
</div>
</TD>
</TR>
</TABLE>
<TABLE ALIGN=LEFT BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=50%>
$membersFrags1
</TABLE>
<TABLE ALIGN=RIGHT BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=50%>
$membersFrags2
</TABLE>
";
$main_content .= '
<table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR><td><font color="white" size=1>.</font></td></tr></tbody></table>';
$main_content .= '
<table border="0" CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><td><font color="white" size=4><b>Most Deaths</b></font></td></tr></tbody></table>';
$main_content .= "
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
<TR BGCOLOR=#D4C0A1>
<TD width=50%>
<div align='right'>
<B>
". $guild->getName() ."
</B>
</div>
</TD>
<TD width=50%>
<div align='left'>
<B>
". $guild2->getName() ."
</B>
</div>
</TD>
</TR>
<TR BGCOLOR=#D4C0A1>
<TD>
<div align='right'>
<img src=guilds/".$logo." width='64px' height='64px' border=1 />
</div>
</TD>
<TD>
<div align='left'>
<img src=guilds/".$logo2." width='64px' height='64px'border=1 />
</div>
</TD>
</TR>
</TABLE>
<TABLE ALIGN=LEFT BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=50%>
$membersDeaths1
</TABLE>
<TABLE ALIGN=RIGHT BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=50%>
$membersDeaths2
</TABLE>
";
}
$main_content .= "
<table border='0' CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tbody><TR><td><div style='text-align: right; margin: 20px auto; font-size: 10px;'>
Created by <a target='blank' href='http://otland.net/members/xampy/'>Xampy</a></div></td></tr></tbody></table>";
?>
4) Abra o arquivo guilds.php [da pasta htdocs] e DEPOIS de (linha 1740~):
Versao 0.1b Tutorial Voce nao Sabe nada sobre scripts e nem mesmo como funcionao e quer criar uma magia Voce pode ir no classico copy/paste: Primeiro Passo: Copie uma tag no spells.xml Exemplo:
E cole logo a baixo uma identica. Agora edite certos campos:
Vermelho Palavras a serem ditas para a magia sair Verde Level para Usar a magia Amarelo Mana pra Usar a magia
Negrito Voce deve mudar para o nome do seu script, no caso usaremos eternal extreme winter
Procure na pasta scripts/attack o bloco de notas chamado eternal winter copieo e cole renomeie-o para eternal extreme winter, abaixo ensino como editar.
Em seguida voce pode editar certas coisas
Azul Minimo Dano -- Leve em base que dakele geito que esta 2.7 ira dar 500 de dano se voce multiplicar por 2 o 2.7 ira ficar 5.4 e ira dar 1000 de dano Rosa Maximo Dano -- mesmo conceito de cima
Laranja se voce nao conhece o comando pode ser !z 1,2,3...66 ou /z 1,2,3...66 useo no seu ot e veja um bem legal e apague toda a parte laranja e bote o efeito que voce quer no meu caso irei botar 61
Conclusao a magia ira ficar com a forma do exevo gran mas frigo com otro dano e com otro efeito
___________ Update 0.2a
Usando tambem o comando !x ou /x 1,2,3...41
Na linha da sua magia vai estar assim:
Para usar os efeitos do /x ou !x voce deve botar antes do EFFECT a palavra DISTANCE e ficara assim:
Negrito Como devera ficar para utilizar o comando !x ou /x
Listinha de efeitos e seus devidos nomes:
___________________ Update 0.2b
Mudando a area da sua spell:
Repare a linha da nossa primeira spell la em cima
Neste local voce edita a area da sua magia vamos começar:
Apague toda akela linha acima em negrito e bote isto:
Legenda dos numeros: 0 = nao vai acertar a magia 1 = aonde a magia vai acertar 2 = centro que eh o player (nao acertara tambem)
Agora voce pode fazer uma area que voce queira de qualquer forma ___________________ Update 0.3a
Como Trocar o Dano da sua Magia:
Para trocar o tipo de dano repare a linha da magia:
Vermelho Eh o tipo de dano que ira dar eh so mudalo para outro tipo
Listinha de Danos:
COMBAT_PHYSICALDAMAGE - 1COMBAT_ENERGYDAMAGE - 2COMBAT_EARTHDAMAGE - 4COMBAT_POISONDAMAGE - 4COMBAT_FIREDAMAGE - 8COMBAT_UNDEFINEDDAMAGE - 16COMBAT_LIFEDRAIN - 32COMBAT_MANADRAIN - 64COMBAT_HEALING - 128COMBAT_DROWNDAMAGE - 256COMBAT_ICEDAMAGE - 512COMBAT_HOLYDAMAGE - 1024COMBAT_DEATHDAMAGE - 2048PS:Voce pode usar os numeros no lugar das palavras
___________________ Update 0.3b Botando em pratica tudo que aprendemos!
Neste update nos iremos usar todo o conteudo do tutorial para fazer uma magia com varios efeitos,danos e areas diferentes
Aqui esta o script que criei para trabalharmos em cima dele:
Legenda: Azul Dano de cada wave (onda) da sua magia Negrito Area das magias (arr) Vermelho Pausa de uma wave para outra, se quizer aumente bote 100,300,500...
Pronto agora se voce viu os outros updates sabera mudar dano efeito e fazer uma otima magia bem louca
Video de Demonstraçao:
__________ Fim dos Updates (Se voce tiver alguma opniao de update MP para mim que eu faço mais updates)
Ola Xtibianos, Vim hoje postar um Famoso Script de Pokeball System feito pelo Genioso Nahruto, claro pedi a autorização dele para postar.
A Todos que forem pegar Scripts de outras Pessoas, lembre-se de sempre pedir autorização e claro colocar os creditos.
Para Tfs: 0.34 , 0.35 e 0.36 Essas Forao Testadas E Funfo.
Versoes: 8.42 - 8.50 - 8.52 - 8.54 - 8.6.
Ots Testados: Snowz Yurots - Alissow Server - Styller Yurots
Primeiramente Vamos Fuçar em Function.lua, se voce nao Sabe onde fica vá em:
Data>Lib>Function.lua
Abra e Coloque Isto:
_warpzone = 2147483648 -- start storing strings here (THIS IS THE ABSOLUTE MAXIMUM VALUE FOR THIS)
_maxlength = 1024 -- multiply by 3 to get the true length.
setPlayerStorageInteger = setPlayerStorageValue
getPlayerStorageInteger = getPlayerStorageValue
function setPlayerStorageString(cid, key, value)
if #value > (_maxlength-1) * 3 - 1 then -- Last word is reserved for 0 termination of the string.
error("Storage string is too long")
end
if key > _warpzone / _maxlength then
error("Storage string key is too large (" .. key .. ")")
end
key = _warpzone + key * _maxlength
local word = 0
local wordwrap = 0
local wordcount = 0
local i = 1
while i <= #value do
local byte = string.byte(string.sub(value, i, i))
word = bit.bor(word, bit.lshift(byte, wordwrap))
wordwrap = wordwrap + 8
if wordwrap == 24 then
--[[
In the ideal world we would be able to store 4 characters per word,
however, as the default return value for getPlayerStorageValue is
-1, we cant use the last bit.
]]--
setPlayerStorageInteger(cid, key + wordcount, word)
word = 0
wordwrap = 0
wordcount = wordcount + 1
end
i = i + 1
end
-- store the last word
setPlayerStorageInteger(cid, key + wordcount, word)
end
function getPlayerStorageString(cid, key)
if key > _warpzone / _maxlength then
error("Storage string key is too large (" .. key .. ")")
end
key = _warpzone + key * _maxlength
local wordcount = 0
local str = ""
while true do
if wordcount >= _maxlength then
break
end
local word = getPlayerStorageInteger(cid, key + wordcount)
if word == -1 then
-- end of string
break
else
-- Extract the 3 characters from the value
byte = bit.band(word, 255)
if byte == 0 then break else str = str .. string.char(byte) end
byte = bit.rshift(bit.band(word, 65280), 8)
if byte == 0 then break else str = str .. string.char(byte) end
byte = bit.rshift(bit.band(word, 16711680), 16)
if byte == 0 then break else str = str .. string.char(byte) end
end
wordcount = wordcount + 1
end
return str
end
E Isso!
function doConvinceSummon(cid, creature, amount, pos)
summonplayerpos = {x=pos.x, y=pos.y, z=pos.z, stackpos=253}
summonplayer = getThingfromPos(summonplayerpos)
if(summonplayer ~= nil and summonplayer.itemid > 0) then
doPlayerSendCancel(cid,"There is not enough room to summon here.")
ret = 0
else
convince = doSummonCreature(creature, pos)
doConvinceCreature(cid, convince)
ret = 1
end
return ret
end
Agora Vamos Fazer o Script Vá em Pasta do Seu Ot > Data > Actions > Scripts Crie uma Pasta chamada pokeball.lua
e bote isso dentro
local notAllowed = {"Ferumbras", "Demon"}
local storage = {
status = 25650,
pokeName = 25651
}
local actionid_used = 7510
function onUse(cid, item, fromPos, item2, toPos)
local pokeballStatus = getPlayerStorageValue(cid, storage.status)
local pokeName = getPlayerStorageString(cid, storage.pokeName)
pos = getPlayerPosition(cid) pos.stackpos = 0
if pokeballStatus == -1 then
toPos.stackpos = 253
local pokeThing = getThingfromPos(toPos)
if isCreature(pokeThing.uid) == TRUE then
if isPlayer(pokeThing.uid) == FALSE then
local pokename_ = getCreatureName(pokeThing.uid)
if item.actionid ~= actionid_used then
-- local maxHealth = 400
-- local creatureHealth = getCreatureHealth(pokeThing.uid)
-- local divNum = (string.len(maxHealth)-1)^2
-- local result = math.floor((creatureHealth/divNum)/10)
-- local chance = math.random(1, math.random(4, math.random(7, math.max(result, 7))))
-- if chance == result then
if isInTable(notAllowed, pokename_) == TRUE then
doPlayerSendCancel(cid, "You cannot catch this creature")
else
setPlayerStorageString(cid, storage.pokeName, pokename_)
doRemoveCreature(pokeThing.uid)
doSendDistanceShoot(fromPos, toPos, 37)
setPlayerStorageValue(cid, storage.status, 1)
doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".")
doSetItemActionId(item.uid, actionid_used)
end
-- else
-- doSendMagicEffect(fromPos, 2)
-- doPlayerSendCancel(cid, "The Pokemom Escaped")
-- end
elseif item.actionid == actionid_used and pokename_ == pokeName then
doPlayerSay(cid, pokeName .. " Back!!", TALKTYPE_SAY)
doRemoveCreature(pokeThing.uid)
doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".")
setPlayerStorageValue(cid, storage.status, 1)
doSendDistanceShoot(fromPos, toPos, 37)
else
doSendMagicEffect(fromPos, 2)
doPlayerSendCancel(cid, "This pokeball is already used")
end
else
doPlayerSendCancel(cid, "You cannot catch this creature")
end
else
doPlayerSendCancel(cid, "Creature not found")
end
elseif pokeballStatus == 1 then
summons = getCreatureSummons(cid)
-- if #summons >= 2 then
-- doPlayerSendCancel(cid, "You cannot call more pokemons")
-- else
doConvinceSummon(cid, pokeName, 0, toPos)
doSendDistanceShoot(fromPos, toPos, 37)
doPlayerSay(cid, pokeName .. " Go!!", TALKTYPE_SAY)
setPlayerStorageValue(cid, storage.status, -1)
doSetItemSpecialDescription(item.uid, "it is empty.")
-- end
end
else
return 1
end
function isInTable(t, val)
for _, v in pairs(t) do
if v == val then
return TRUE
end
end
return LUA_ERROR
end
para TFS
local notAllowed = {"Ferumbras", "Demon"}
local storage = {
status = 15244,
pokeName = 15212
}
local actionid_used = 7510
function onUse(cid, item, fromPos, item2, toPos)
local pokeballStatus = getPlayerStorageValue(cid, storage.status)
local pokeName = getPlayerStorageString(cid, storage.pokeName)
pos = getPlayerPosition(cid) pos.stackpos = 0
if pokeballStatus <= 0 then
toPos.stackpos = 253
local pokeThing = getThingfromPos(toPos)
if isCreature(pokeThing.uid) == TRUE then
if isPlayer(pokeThing.uid) == FALSE then
local pokename_ = getCreatureName(pokeThing.uid)
if item.actionid ~= actionid_used then
-- local maxHealth = 400
-- local creatureHealth = getCreatureHealth(pokeThing.uid)
-- local divNum = (string.len(maxHealth)-1)^2
-- local result = math.floor((creatureHealth/divNum)/10)
-- local chance = math.random(1, math.random(4, math.random(7, math.max(result, 7))))
-- if chance == result then
if isInTable(notAllowed, pokename_) == TRUE then
doPlayerSendCancel(cid, "You cannot catch this creature")
else
setPlayerStorageString(cid, storage.pokeName, pokename_)
doRemoveCreature(pokeThing.uid)
doSendDistanceShoot(fromPos, toPos, 37)
setPlayerStorageValue(cid, storage.status, 1)
doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".")
doSetItemActionId(item.uid, actionid_used)
end
-- else
-- doSendMagicEffect(fromPos, 2)
-- doPlayerSendCancel(cid, "The Pokemom Escaped")
-- end
elseif item.actionid == actionid_used and pokename_ == pokeName then
doCreatureSay(cid, pokeName .. " Back!!", TALKTYPE_SAY)
doRemoveCreature(pokeThing.uid)
doSetItemSpecialDescription(item.uid, "it contains a " .. pokename_ .. ".")
setPlayerStorageValue(cid, storage.status, 1)
doSendDistanceShoot(fromPos, toPos, 37)
else
doSendMagicEffect(fromPos, 2)
doPlayerSendCancel(cid, "This pokeball is already used")
end
else
doPlayerSendCancel(cid, "You cannot catch this creature")
end
else
doPlayerSendCancel(cid, "Creature not found")
end
elseif pokeballStatus == 1 then
-- summons = doCreatureSummons(cid)
-- if #summons >= 2 then
-- doPlayerSendCancel(cid, "You cannot call more pokemons")
-- else
doConvinceSummon(cid, pokeName, 0, toPos)
doSendDistanceShoot(fromPos, toPos, 37)
doCreatureSay(cid, pokeName .. " Go!!", TALKTYPE_SAY)
setPlayerStorageValue(cid, storage.status, 0)
doSetItemSpecialDescription(item.uid, "it is empty.")
-- end
end
return 1
end
function isInTable(t, val)
for _, v in pairs(t) do
if v == val then
return TRUE
end
end
return LUA_ERROR
end
Agora Vamos Adicionar as Tags, vá em Data>Actions.xml e Adicione as Tags Corretas´
[font-"Georgia"]em <action itemid="xxxx" nos 4 X voce coloca o Number Id Do seu Item que Será como uma "Pokeball"[/font]
Oque o Script Faz Realmente:
- Guarda monstros dentro de objetos e salva seu status, você pode colocar pra salvar em qlqr objeto.. seria ótimo para projetos pokemons..
Creditos:
Nahruto
Print Screen's:
Snorlax Saindo da Pokeball:
Snorlax Voltando para a Pokeball
Look da Pokeball ( o Player so Ve assim You See a Pokeball , Have Snorlax )]
Lembrando que eu nao Adicionei o Efeito da Pokeball Abrindo e Jogando o Monstro.
Para fazer este Tipo de efeito voce vai ter que saber direitinho o LookType da Pokeball Fechando e Saindo, e transformar para um efeito e depois modificar no Script, aqui no xtibia Existe varios Tutoriais explicando isto, é so procurar!
Seguinte, vc precisa libera a porta 7171 e 7172 TCP/UDP.
E dependendo da net, para entrar no sv vc vai usa o ip do modem, por exemplo o site do modem é 10.1.1.1 se vc for ver seu endereço ip, normalmente é 10.1.1.2, esse vai ser o seu ip apenas vc entra nesse.
Tenta ai, espero ter ajudado.
Abraços.
Quem Está Navegando
0 membros estão online
Nenhum usuário registrado visualizando esta página.