Jump to content

Distro TFS 0.4 (ANTI-DV) (Atualizada 06/06/2013)


Spik3ex

Recommended Posts

Olá caro amigos do XTibia. Venho aqui apresentar pra vocês no momento a melhor REV 3884 100% works.

Quando eu digo 100% works, são todos os bugs e erros fixados, apresentamos os seguinte conteúdo nessa REV:

 

- Fix/Patch Hotkey que pode haver lag/freeze no servidor.

- Limite de peso de items no Mailbox 5000oz.

- Anti-Push Enable 1sec.

- PushTime Enable 1sec. (config.lua mudar pushCreatureDelay = 1 * 1)

- Anti-Divulgação 100% (Não pode enviar links nem com espaço (ex: www .site. com)).

- Anti-Clone items NPC (Hotkey Elfbot Patched/Fixed)

- Proteção para jogador não levar debug.

- Anti-Lag (correções na REV 0.4 , 0% de erros ao compilar)

- Fix/Patched server closed connection MySQL.

- Level e Vocação apareçem na tela de Login.

- Auto Attack + Runa + Spells ao mesmo tempo. (Não tem exhaust É UM BUG DA REV 3884 CORRIGIDO POR MIM)

- All hits works 100% players/monsters

- Script já incluso na source para não ser banido da OTServlist.org

 

Protocolo: 8.60

Tipo de Distro: CONSOLE

 

E outras coisas que não me lembro por colocar, mais enfim, é a REV 3884 mais segura que eu fiz no momento...

Essa versão é FREE, vou fazer mais atualizações, porém não vou postar, então usem e abusem dessa ultima atualização!

Crio qualquer tipo de Distro com Dual Weapons, ou qualquer outro comando a escolha ( skype: igorp999 )

 

Downloads:

Download (pasta data caso queira passar seu TFS para 0.4)

http://www.sendspace.com/file/qjekej

ATENÇÃO: Tome cuidado ao passar, peça a alguem experiente, pois podera bugar e parar o funcionamento de vários scripts do teu ATS.

 

Distro atualizada 08/06/2013 (more bugs fixed)

http://www.sendspace.com/file/d8rlf9

 

Distro atualizada (COM WAR SYSTEM) 08/06/2013 (more bugs fixed)

http://www.sendspace.com/file/kcsite

 

Dlls da distro:

http://www.sendspace.com/file/2xyu6q

 

Scans:

Dlls.rar

https://www.virustot...sis/1370769175/

 

data.rar

https://www.virustot...sis/1370769136/

 

Distro IgorPereira.exe

https://www.virustot...sis/1370769123/

 

Distro IgorPereira.exe (WAR SYSTEM)

https://www.virustot...sis/1370790278/

 

 

WAR SYSTEM



Se baixou com WAR SYSTEM leia abaixo como terminar a instalação.



Execute essa SQL em sua database.


CREATE TABLE IF NOT EXISTS `guild_wars` (
`id` INT NOT NULL AUTO_INCREMENT,
`guild_id` INT NOT NULL,
`enemy_id` INT NOT NULL,
`begin` BIGINT NOT NULL DEFAULT '0',
`end` BIGINT NOT NULL DEFAULT '0',
`frags` INT UNSIGNED NOT NULL DEFAULT '0',
`payment` BIGINT UNSIGNED NOT NULL DEFAULT '0',
`guild_kills` INT UNSIGNED NOT NULL DEFAULT '0',
`enemy_kills` INT UNSIGNED NOT NULL DEFAULT '0',
`status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `status` (`status`),
KEY `guild_id` (`guild_id`),
KEY `enemy_id` (`enemy_id`)
) ENGINE=InnoDB;

ALTER TABLE `guild_wars`
ADD CONSTRAINT `guild_wars_ibfk_1` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `guild_wars_ibfk_2` FOREIGN KEY (`enemy_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE;

ALTER TABLE `guilds` ADD `balance` BIGINT UNSIGNED NOT NULL AFTER `motd`;

CREATE TABLE IF NOT EXISTS `guild_kills` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`guild_id` INT NOT NULL,
`war_id` INT NOT NULL,
`death_id` INT NOT NULL
) ENGINE = InnoDB;

ALTER TABLE `guild_kills`
ADD CONSTRAINT `guild_kills_ibfk_1` FOREIGN KEY (`war_id`) REFERENCES `guild_wars` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `guild_kills_ibfk_2` FOREIGN KEY (`death_id`) REFERENCES `player_deaths` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `guild_kills_ibfk_3` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE;

ALTER TABLE `killers` ADD `war` INT NOT NULL DEFAULT 0;

 

Entre na pasta do seu OTServ/data/talkactions/talkactions.xml

 

<talkaction words="/war" channel="0" event="script" value="war.lua" desc="(Guild channel command) War management."/>
<talkaction words="/balance" channel="0" event="script" value="balance.lua" desc="(Guild channel command) Balance management."/>

 

 

Crie um arquivo dentro da scripts na talkactions chamado "WAR.LUA"

talkactions/scripts/war.lua

 


function onSay(cid, words, param, channel)
local guild = getPlayerGuildId(cid)
if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then
doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0)
return true
end

local t = string.explode(param, ",")
if(not t[2]) then
doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0)
return true
end

local enemy = getGuildId(t[2])
if(not enemy) then
doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0)
return true
end

if(enemy == guild) then
doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0)
return true
end

local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy)
if(tmp:getID() ~= -1) then
enemyName = tmp:getDataString("name")
tmp:free()
end

if(isInArray({"accept", "reject", "cancel"}, t[1])) then
local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild
if(t[1] == "cancel") then
query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy
end

tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0")
if(tmp:getID() == -1) then
doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
return true
end

if(t[1] == "accept") then
local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)
local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment")

_tmp:free()
if(state) then
doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0)
return true
end

db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild)
end

query = "UPDATE `guild_wars` SET "
local msg = "accepted " .. enemyName .. " invitation to war."
if(t[1] == "reject") then
query = query .. "`end` = " .. os.time() .. ", `status` = 2"
msg = "rejected " .. enemyName .. " invitation to war."
elseif(t[1] == "cancel") then
query = query .. "`end` = " .. os.time() .. ", `status` = 3"
msg = "canceled invitation to a war with " .. enemyName .. "."
else
query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1"
end

query = query .. " WHERE `id` = " .. tmp:getDataInt("id")
if(t[1] == "accept") then
doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD)
doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY)
end

tmp:free()
db.executeQuery(query)
doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE)
return true
end

if(t[1] == "invite") then
local str = ""
tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)")
if(tmp:getID() ~= -1) then
if(tmp:getDataInt("status") == 0) then
if(tmp:getDataInt("guild_id") == guild) then
str = "You have already invited " .. enemyName .. " to war."
else
str = enemyName .. " have already invited you to war."
end
else
str = "You are already on a war with " .. enemyName .. "."
end

tmp:free()
end

if(str ~= "") then
doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0)
return true
end

local frags = tonumber(t[3])
if(frags ~= nil) then
frags = math.max(10, math.min(1000, frags))
else
frags = 100
end

local payment = tonumber(t[4])
if(payment ~= nil) then
payment = math.max(100000, math.min(1000000000, payment))
tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild)

local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment
tmp:free()
if(state) then
doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0)
return true
end

db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild)
else
payment = 0
end

local begining, ending = os.time(), tonumber(t[5])
if(ending ~= nil and ending ~= 0) then
ending = begining + (ending * 86400)
else
ending = 0
end

db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");")
doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE)
return true
end

if(not isInArray({"end", "finish"}, t[1])) then
return false
end

local status = (t[1] == "end" and 1 or 4)
tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status)
if(tmp:getID() ~= -1) then
local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id")
tmp:free()
doGuildRemoveEnemy(guild, enemy)
doGuildRemoveEnemy(enemy, guild)

db.executeQuery(query)
doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
return true
end

if(status == 4) then
doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
return true
end

tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1")
if(tmp:getID() ~= -1) then
if(tmp:getDataInt("end") > 0) then
tmp:free()
doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
return true
end

local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id")
tmp:free()

db.executeQuery(query)
doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE)
return true
end

doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0)
return true
end

 

Crie um arquivo dentro da scripts na talkactions chamado "BALANCE.LUA"

talkactions/scripts/balance.lua

 


local function isValidMoney(value)
if(value == nil) then
return false
end

return (value > 0 and value <= 99999999999999)
end

function onSay(cid, words, param, channel)
local guild = getPlayerGuildId(cid)
if(guild == 0) then
return false
end

local t = string.explode(param, ' ', 1)
if(getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER and isInArray({ 'pick' }, t[1])) then
if(t[1] == 'pick') then
local money = { tonumber(t[2]) }
if(not isValidMoney(money[1])) then
doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0)
return true
end

local result = db.getResult('SELECT `balance` FROM `guilds` WHERE `id` = ' .. guild)
if(result:getID() == -1) then
return false
end

money[2] = result:getDataLong('balance')
result:free()

if(money[1] > money[2]) then
doPlayerSendChannelMessage(cid, '', 'The balance is too low for such amount.', TALKTYPE_CHANNEL_W, 0)
return true
end

if(not db.executeQuery('UPDATE `guilds` SET `balance` = `balance` - ' .. money[1] .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')) then
return false
end

doPlayerAddMoney(cid, money[1])
doPlayerSendChannelMessage(cid, '', 'You have just picked ' .. money[1] .. ' money from your guild balance.', TALKTYPE_CHANNEL_W, 0)
else
doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_W, 0)
end
elseif(t[1] == 'donate') then
local money = tonumber(t[2])
if(not isValidMoney(money)) then
doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0)
return true
end

if(getPlayerMoney(cid) < money) then
doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_W, 0)
return true
end

if(not doPlayerRemoveMoney(cid, money)) then
return false
end

db.executeQuery('UPDATE `guilds` SET `balance` = `balance` + ' .. money .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')
doPlayerSendChannelMessage(cid, '', 'You have transfered ' .. money .. ' money to your guild balance.', TALKTYPE_CHANNEL_W, 0)
else
local result = db.getResult('SELECT `name`, `balance` FROM `guilds` WHERE `id` = ' .. guild)
if(result:getID() == -1) then
return false
end

doPlayerSendChannelMessage(cid, '', 'Current balance of guild ' .. result:getDataString('name') .. ' is: ' .. result:getDataLong('balance') .. ' bronze coins.', TALKTYPE_CHANNEL_W, 0)
result:free()
end

return true
end

 

Passo IMPORTANTE: Crie um arquivo chamado "101-war.lua" na pasta data/lib

 


WAR_GUILD = 0
WAR_ENEMY = 1
WARINFO_LIMIT = 2

 

Agora em creaturescripts/scripts/start.lua ou init.lua adicione:

 


db.executeQuery("DELETE FROM `guild_wars` WHERE `status` = 0 AND `begin` < " .. (os.time() - 2 * 86400) .. ";")
db.executeQuery("UPDATE `guild_wars` SET `status` = 5, `end` = " .. os.time() .. " WHERE `status` = 1 AND `end` > 0 AND `end` < " .. os.time() .. ";")

 

Sistema 100% Funcionando, enjoy

;)

 



@TESTEM E COMENTEM & REP ++. Thank you.

Abraços, boa utilidade a todos. mdr.gif

Edited by Spik3ex
Link to comment
Share on other sites

Não tem as sources?

 

Não amigo, esse Distro contém códigos PREMIUM de um forum aí que eu não posso citar o nome, e eu não posso publicar as source.

Porém, é o melhor DISTRO no momento!

Link to comment
Share on other sites

Na hora do login dá debug o_O Por que isso? '-'

 

Você tá usando um OTServ 0.4?. Porque se não tiver vai ter que mudar as libs, e algumas functions no login.lua pra passa ele pra 0.4.

Se o seu OT for 0.3.6 eu também tenho uma distro 0.3.6 postada aqui com as mesmas funções dessa amigo...

Faça o download e abra ela.

Abraços.

 

>> http://www.xtibia.com/forum/topic/215766-distro-tfs-036-anti-dv-atualizada-07062013/

Edited by Spik3ex
Link to comment
Share on other sites

Nossa cara, esse distro deve ta show de bola. Eu tenho um sv e sofro com um bug que os cara liga antipush embaixo da porta e ficam la mt tempo,

e dai eles saem, o sv da uma travada. também tava com bug dos player toma debug..

 

 

edit:

 

Tentei botar o distro 04 e não funcionou, da debug nas contas e no account manager funciona.

ja o 036 funcionou.. você podia disponibiliza uma pasta /data pra gente usar como base?

Edited by Vilden
Link to comment
Share on other sites

Nossa cara, esse distro deve ta show de bola. Eu tenho um sv e sofro com um bug que os cara liga antipush embaixo da porta e ficam la mt tempo,

e dai eles saem, o sv da uma travada. também tava com bug dos player toma debug..

 

 

edit:

 

Tentei botar o distro 04 e não funcionou, da debug nas contas e no account manager funciona.

ja o 036 funcionou.. você podia disponibiliza uma pasta /data pra gente usar como base?

 

Olá caro amigo, tópico atualizado com a pasta data e dlls e nova Distro fixada.

Reveja o 1º post e baixe novamente!

 

Dúvidas, só postar.

Link to comment
Share on other sites

Tem War System ?

 

Nossa equipe não implantou o sistema de WarSystem devido a informação da equipe @TFS Team, o WarSystem incluso na source estava pesando mais o executavel (AUMENTO DE USO DE CPU).

Mais temos a source pronta também com WarSystem se quiser também posto com as mesmas funções dessa Distro, porém se o executavel aumentar o uso de memoria não é problema da Distro.

Temos também o WarSystem por Mod ou Scripts, que é 100% works nessa distro e sem nemhum tipo de alagamento na CPU.

 

Abraços, até mais.

Edited by Spik3ex
Link to comment
Share on other sites

Tipo sé você postar ele ai desse jeito com war system , irei gostar bastante !

 

Ok, se insiste adicionar por source :S, postando em breve.

Abraços.

 

@TOPICO ATUALIZADO.

Segue o 1º post e faça o download e a instalação do WAR SYSTEM.

Abraços.

Edited by Spik3ex
Link to comment
Share on other sites

×
×
  • Create New...