Ir para conteúdo
Entre para seguir isso  
Dark Dem0

War System.

Recommended Posts

Dark Dem0    0
Dark Dem0

Atualização: O War System com escudos já esta no ar, para adquiri-lo, acesse o seguinte tópico:

http://forums.otserv.com.br/f106/vendo-war-system-escudos-169315/

-> Informações Gerais < -

 

Nome do Sistema: War System.

Nome do autor: Está nos créditos.

Servidor Testado: The Forgotten Server 0.3.5 (TFS 3.5).

 

War System é um sistema onde duas guild entram em Guerra, e frags não são contados.

 

• 1 - Crie um arquivo com o nome GuildWar.lua dentro da pasta do seu OTServer, aonde fica o distro, dll's , etc. E copie este código:

 

DelayToCancel = 24 * 60 * 60 --minutes

Maps = {
["map 1"] = 
{
Guild1Pos = {x=998, y=1006, z=7},
Guild2Pos = {x=1002, y=1006, z=7}
},
["map 2"] =
{
Guild1Pos = {x=994, y=1004, z=6},
Guild2Pos = {x=1000, y=1003, z=6} 
}
}

TimeToTeleport = 1 --minutes, when star 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 .." minutes 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 getGuildWarInfo(id)
local Info = db.getResult("SELECT `invited_to`, `invited_by`, `in_war_with`,`war_time` FROM `guilds` WHERE `id` = " .. id .. "")
if Info:getID() ~= LUA_ERROR 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 LUA_ERROR
end

function getGuildNameById(id)
local Info = db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. id .. "")
if Info:getID() ~= LUA_ERROR then
local Name = Info:getDataString("name")
Info:free()
return Name
end
return LUA_ERROR
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)
db.executeQuery("UPDATE `guilds` SET `invited_to` = ".. enemyGuild .." 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, `war_time` = ".. StartTime ..", `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 registerDeath(myGuild, enemyGuild, cid, target)
db.executeQuery("INSERT INTO `deaths_in_wars` (`guild_id`, `player_id`, `killer_guild`, `killer`, `date`) VALUES ("..enemyGuild..", "..getPlayerGUID(target)..", "..myGuild..", "..getPlayerGUID(cid)..", " .. os.time() ..");") 
db.executeQuery("UPDATE `guilds` SET `kills` = `kills` + 1 WHERE `id` = ".. myGuild .."")
end

function StopWar(myGuild, enemyGuild)
cleanInfo(myGuild)
cleanInfo(enemyGuild)
removeDeaths(myGuild)
removeDeaths(enemyGuild)
end

function removeDeaths(id)
db.executeQuery("DELETE FROM `deaths_in_wars` WHERE `guild_id` = " ..id .. ";")
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 getTilePzInfo(getCreaturePosition(Members[i])) == TRUE then
doTeleportThing(Members[i], pos, FALSE)
doSendMagicEffect(pos, CONST_ME_TELEPORT)
doSendMagicEffect(getCreaturePosition(Members[i]), CONST_ME_POFF)
end
end
end
end

function removeFrag(cid)
local FragTime = getConfigInfo('timeToDecreaseFrags')
local myFragTime = getPlayerRedSkullTicks(cid)
local Remo = (myFragTime - FragTime)
if Remo < 0 then
Remo = 0
end
doPlayerSetRedSkullTicks(cid, Remo)
end

function getGuildsWithWar()
local res = db.getResult("SELECT `id` FROM `guilds` WHERE `in_war_with` > 0")
local GuildW = {}
if res:getID() ~= LUA_ERROR 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() ~= LUA_ERROR then
local ret = Get:getDataInt("id")
Get:free()
return ret
end
return LUA_ERROR
end

function StarWar(x)
teleportGuild(x.myGuild, Maps[x.map].Guild1Pos)
teleportGuild(x.enemyGuild, Maps[x.map].Guild2Pos)
--[[ 
putWarOn(x.myGuild, x.enemyGuild)
if StopBattle == TRUE then
addEvent(StopWarNow, 60 * 1000, {myGuild = x.myGuild, enemyGuild = x.enemyGuild})
end
]]
end 

--[[
function StopWarNow©
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
]]

• 2 -Crie um novo arquivo em: data\creaturescripts\scripts\ com o nome de: war_attack.lua e copie este código:

 

dofile("./GuildWar.lua")

function onAttack(cid, target)
if isPlayer(cid) == TRUE and isPlayer(target) == TRUE then
local myGuild = getPlayerGuildId(cid)
local enemyGuild = getPlayerGuildId(target)
if myGuild ~= 0 and enemyGuild ~= 0 then
if enemyGuild == getGuildWarInfo(myGuild).With then
if getPlayerSkullType(cid) == 3 or getPlayerSkullType(cid) == 4 then
if getPlayerSkullType(target) == 0 then
doCreatureSetSkullType(cid, 1)
doCreatureSetSkullType(target, 1)
end
end
end
end
end
return TRUE
end

• 2.1 - Crie um novo arquivo em: data\creaturescripts\scripts\ com o nome de: war_kill.lua e copie este código:

 

dofile("./GuildWar.lua")

local PZ = createConditionObject(CONDITION_INFIGHT)
setConditionParam(PZ, CONDITION_PARAM_TICKS, getConfigInfo('whiteSkullTime'))

function onKill(cid, target)
if isPlayer(cid) == TRUE and isPlayer(target) == TRUE then
local myGuild = getPlayerGuildId(cid)
local enemyGuild = getPlayerGuildId(target)
if myGuild ~= 0 and enemyGuild ~= 0 then
if enemyGuild == getGuildWarInfo(myGuild).With then
doAddCondition(cid, PZ)
registerDeath(myGuild, enemyGuild, cid, target)
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "This frag will not count!")

end
end
end
return TRUE
end

• 2.2 - Abra login.lua (data/creaturescripts/scripts/):

 

Após:

registerCreatureEvent(cid, "WarKill") 

Adicione:

registerCreatureEvent(cid, "WarAttack")
         registerCreatureEvent(cid, "WarKill")

Salve e Feche.

 

• 2.3 - Adicione isto em: creaturescripts.xml

 

<event type="attack" name="WarAttack" event="script" value="war_attack.lua"/>
         <event type="kill" name="WarKill" event="script" value="war_kill.lua"/>

• 3.0 - Crie um novo arquivo com o nome de wars.lua em: (data\globalevents\scripts) e copie este código:

 

dofile("./GuildWar.lua")

function onThink(interval, lastExecution)
   for _, id in ipairs(getGuildsWithWar()) do
       local Check = db.getResult("SELECT `name` FROM `guilds` WHERE id = ".. getGuildWarInfo(id).With .."")
       if Check:getID() == LUA_ERROR then
           cleanInfo(id)
       end
   end
   return TRUE
end

• 3.1 - Adicione isto em: globalevents.xml:

 

<globalevent name="wars" interval="1800" event="script" value="wars.lua"/> <!--1800 is 30 minutes-->

• 4.0 - Crie um novo arquivo com o nome GuildWar.lua em: (data\talkactions\scripts\) e copie este código:

 

dofile("./GuildWar.lua")

function onSay(cid, words, param)
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) ~= LUA_ERROR then
local invitedGuild = getGuildId(param)
if invitedGuild ~= LUA_ERROR then
if invitedGuild ~= myGuild then
if GuildIsInPEace(invitedGuild) == true then
doInviteToWar(myGuild, invitedGuild)
doBroadcastMessage(BroadCast[1][1] ..getPlayerGuildName(cid).. BroadCast[1][2] ..getGuildNameById(invitedGuild).. BroadCast[1][3], BroadCast_Type)
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 getGuildWarInfo(myGuild).With ~= 0 and getGuildWarInfo(myGuild).ON == 0 then
local enemyGuild = getGuildWarInfo(myGuild).With
addEvent(StarWar, 15 * 1000, {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 * DelayToCancel) then
StopWar(myGuild, enemy)
doBroadcastMessage(BroadCast[6][1] ..getGuildNameById(myGuild).. BroadCast[6][2] ..getGuildNameById(enemy).. BroadCast[6][3], BroadCast_Type)
else
doPlayerSendCancel(cid, CancelMessagesWar[11])
end
else
doPlayerSendCancel(cid, CancelMessagesWar[10])
end
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

• 5.0 - Adicione isto em: talkactions.xml

 

<!--Guilds Wars-->
   <talkaction words="/war-invite" event="script" value="GuildWar.lua"/>    
   <talkaction words="/war-accept" event="script" value="GuildWar.lua"/>    
   <talkaction words="/war-reject" event="script" value="GuildWar.lua"/>
   <talkaction words="/war-cancel" event="script" value="GuildWar.lua"/>    
   <talkaction words="/war-challenge" event="script" value="GuildWar.lua"/>    
   <talkaction words="/war-cancel-invite" event="script" value="GuildWar.lua"/>

• 6.0 Adicione isto na DataBase do seu servidor (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;

 

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

) ENGINE = MYISAM;

Créditos:

 

 

GeKirAh

Nahruto

christiandb

Xampy

 

Editado por Dark Dem0
Atualização.

Compartilhar este post


Link para o post
Gpwjhlkdcf    21
Gpwjhlkdcf

Tópico Aprovado e Movido para Scripting > Scripts Prontos > Sistemas e Bibliotecas.

 

Padrão de Qualidade: OK

 

O script está bom, é um belo trabalho, obrigado pela contribuição :)

Compartilhar este post


Link para o post
god_dreamer    1
god_dreamer

Eu ja usei esse script é mto bom, recomendo pra Ots Low Rate%.

 

Como o Luan é Colaborador com apenas 9 posts???

 

Clique na Imagem Para ver o video desta GATA!

182072.jpg

 

HMM e eu sou Fraco?!?

 

dreamerdvd.jpg

Compartilhar este post


Link para o post
Stormex    0
Stormex

mais como q faz pra aceitar.. enviar o pedido pros mano?

Compartilhar este post


Link para o post
god_dreamer    1
god_dreamer

Aqui:

 

<talkaction words="/war-invite" event="script" value="GuildWar.lua"/>

<talkaction words="/war-accept" event="script" value="GuildWar.lua"/>

Compartilhar este post


Link para o post
subdark    0
subdark

Nusss, vlws gostei muito

Compartilhar este post


Link para o post
Welkin Guide    0
Welkin Guide

Gostei muito.

Meus parabéns :)

Ao criador e a tu por trazer.

 

---

 

Como o Luan é Colaborador com apenas 9 posts???

 

Ele pagou...

 

W~~

Compartilhar este post


Link para o post
Sparken    0
Sparken

sqlite ou mysql?

Compartilhar este post


Link para o post
god guizao    0
god guizao

sqlite ou mysql? ²

Bom vo tenta adiciona aki...

Compartilhar este post


Link para o post
Reyntek    12
Reyntek

É um sistema um pouco velho, e demorou pra chegar aqui na otnet, mas eu adorei sua inicitiva em postar aqui, valeu, eu procurava por esse sistema. Colocou credito e tal... Parabens mesmo, continue assim.

E

Eu ja usei esse script é mto bom, recomendo pra Ots Low Rate%.

 

Como o Luan é Colaborador com apenas 9 posts???

 

Clique na Imagem Para ver o video desta GATA!

HMM e eu sou Fraco?!?

 

Até onde sei, não prescisa de Posts pra ser COLABORADOR.

:fail:

Compartilhar este post


Link para o post
Keztoker    0
Keztoker

Ótimo.

Primeiro script seu que vejo e vejo que é um bom scripter.

Meus parabéns. Irei usar.

:]

 

K~~

Compartilhar este post


Link para o post
Tezzeret Vol    0
Tezzeret Vol

Vale a pena usar em seu OT.

Usei e aprovei.

Parabéns.

 

Adept~~

Compartilhar este post


Link para o post
moskao    0
moskao

Bom (:

 

Seria massa se quando aceitasse, todos de 1 guild usasse 1 outfit e a outra , outra outfit, assim que aceitasse a war ^^, não podendo tirar, que nem em um ot de war mesmo (:

Compartilhar este post


Link para o post
Rafael2009    0
Rafael2009

Deveria ter um tutorial de como utilizar, como a Poll system.

Tem kra que nao sabe como usar.Nao sei pq postam, pq quem sab script nem precisa saber faz até melhor como eu tenho.

So que este forum nao merece ter.

Compartilhar este post


Link para o post
mal mal    0
mal mal

ow aki se vc mata tipo se mata 3 vezes... pega red skull dai vc taka de novo o mlk da guild inimiga vc volta yelow skull... dai vc mata mais 3 vezes... pega blackskull... e num pode mais ataka

Oo

ai tbm ta assim?

Compartilhar este post


Link para o post
Rafael2009    0
Rafael2009

Ih mal mal, esses kras fazem esses scripts nao sei pra q. Eles fazem pra quem ja sabe.E quem sabe nao lhe interressa nao eh. Soh postam aki para se mostrarem. Igual o mock post scripts aki e la no otland para se mostra.

 

Nao sei o que esses kra tem na cabeça!

axo que tem na cabeça é só SCRIPT kkkkkkkkkk

Compartilhar este post


Link para o post
MatheusGrilo    0
MatheusGrilo

Eu não consegui quando eu falo não aparece nada xP

Compartilhar este post


Link para o post
patrick_db    0
patrick_db

cara te amo eu tava procurando isso em 10 foruns diferentes e so axei nesse otnet é a melhorr te amoo

Compartilhar este post


Link para o post
thiagoadd    0
thiagoadd

como eh os comando?

/war-invite e o nome da guild?

Compartilhar este post


Link para o post
perestp    0
perestp

Vou colocar no meu OT

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×