NA

(Pedido) Deathlist

Por Nathan96, 12 de abr. de 2012 em Scripts

script
49
7.7k
StyflerDrunouS
17 de abril de 2012 às 20:11

Voce usa sqlite não é?

 

pera ae.

 

Tenta isso.

 

local config = {
deathAssistCount = getConfigValue('deathAssistCount') + 1,
maxDeathRecords = getConfigValue('maxDeathRecords'),
limit = ""
}
if(config.deathAssistCount > 0) then
config.limit = " LIMIT 0, " .. config.deathAssistCount
end
function onSay(cid, words, param, channel)
local query = db.getResult("SELECT `name`, `id` FROM `players` WHERE `name` = " .. db.escapeString(param) .. ";")
if(target:getID() == -1) then
 doPlayerSendCancel(cid, "Este jogador não existe.")
 return true
end
local targetName, targetId = target:getDataString("name"), target:getDataInt("id")
target:free()
local str, deaths = "", db.executeQuery("SELECT `id`, `date`, `level` FROM `player_deaths` WHERE `player_id` = " .. targetId .." ORDER BY `date` DESC LIMIT 0, " .. config.maxDeathRecords)
if(deaths:getID() ~= -1) then
 repeat
  local killers = db.getResult("SELECT environment_killers.name AS monster_name, players.name AS player_name FROM killers LEFT JOIN environment_killers ON killers.id = environment_killers.kill_id LEFT JOIN player_killers ON killers.id = player_killers.kill_id LEFT JOIN players ON players.id = player_killers.player_id WHERE killers.death_id = " .. deaths:getDataInt("id") .. " ORDER BY killers.final_hit DESC, killers.id ASC" .. config.limit)
  if(killers:getID() ~= -1) then
   if(str ~= "") then
	 str = str .. "\n" .. os.date("%d %B %Y %X ", deaths:getDataLong("date"))
   else
	 str = os.date("%d %B %Y %X ", deaths:getDataLong("date"))
   end
   local count, i = killers:getRows(false), 0
   repeat
	 local monster = killers:getDataString("monster_name")
	 if(i == 0 or i == (count - 1)) then
	  monster = string.gsub(monster:gsub("an ", ""), "a ", "")
	 end
	 if(killers:getDataString("player_name") ~= "") then
	  if(i == 0) then
	   str = str .. "Killed at level " .. deaths:getDataInt("level") .. " por:\n  "
	  elseif(i == count) then
	   str = str .. " e por "
	  elseif(i % 4 == 0) then
	   str = str .. ",\n  "
	  else
	   str = str .. ", "
	  end
	  if(monster ~= "") then
	   str = str .. monster .. " sumonado por "
	  end
	  str = str .. killers:getDataString("player_name")
	 else
	  if(i == 0) then
	   str = str .. "Morto no level " .. deaths:getDataInt("level") .. " por:\n  "
	  elseif(i == count) then
	   str = str .. " e por "
	  elseif(i % 4 == 0) then
	   str = str .. ",\n  "
	  else
	   str = str .. ", "
	  end
	  str = str .. monster
	 end
	 i = i + 1
	 if(i == count) then
	  str = str .. "."
	 end
   until not(killers:next())
   killers:free()
  end
 until not(deaths:next())
 deaths:free()
else
 str = "Não tem mortes."
end
doPlayerPopupFYI(cid, "Deathlist do player: " .. targetName .. ".\n\n" .. str)
return true
end

 

Se pá... vai dar tudo errado, mais vou ver como é que vai ficar esse script para Sqlite.

Nathan96N
17 de abril de 2012 às 21:09

não funcionou

JeanCristianJ
18 de abril de 2012 às 00:45

ahhhhh se funcioar é rep+ to de olho ein o.O

StyflerDrunouS
18 de abril de 2012 às 11:51

eae funfou?

 

@jean...

 

voce usa mysql né? então é esse aqui para voce...

 

local config = {
deathAssistCount = getConfigValue('deathAssistCount') + 1,
maxDeathRecords = getConfigValue('maxDeathRecords'),
limit = ""
}
if(config.deathAssistCount > 0) then
config.limit = " LIMIT 0, " .. config.deathAssistCount
end
function onSay(cid, words, param, channel)
local target = db.getResult("SELECT `name`, `id` FROM `players` WHERE `name` = " .. db.escapeString(param) .. ";")
if(target:getID() == -1) then
 doPlayerSendCancel(cid, "Este jogador não existe.")
 return true
end
local targetName, targetId = target:getDataString("name"), target:getDataInt("id")
target:free()
local str, deaths = "", db.getResult("SELECT `id`, `date`, `level` FROM `player_deaths` WHERE `player_id` = " .. targetId .." ORDER BY `date` DESC LIMIT 0, " .. config.maxDeathRecords)
if(deaths:getID() ~= -1) then
 repeat
  local killers = db.getResult("SELECT environment_killers.name AS monster_name, players.name AS player_name FROM killers LEFT JOIN environment_killers ON killers.id = environment_killers.kill_id LEFT JOIN player_killers ON killers.id = player_killers.kill_id LEFT JOIN players ON players.id = player_killers.player_id WHERE killers.death_id = " .. deaths:getDataInt("id") .. " ORDER BY killers.final_hit DESC, killers.id ASC" .. config.limit)
  if(killers:getID() ~= -1) then
   if(str ~= "") then
	 str = str .. "\n" .. os.date("%d %B %Y %X ", deaths:getDataLong("date"))
   else
	 str = os.date("%d %B %Y %X ", deaths:getDataLong("date"))
   end
   local count, i = killers:getRows(false), 0
   repeat
	 local monster = killers:getDataString("monster_name")
	 if(i == 0 or i == (count - 1)) then
	  monster = string.gsub(monster:gsub("an ", ""), "a ", "")
	 end
	 if(killers:getDataString("player_name") ~= "") then
	  if(i == 0) then
	   str = str .. "Killed at level " .. deaths:getDataInt("level") .. " por:\n  "
	  elseif(i == count) then
	   str = str .. " e por "
	  elseif(i % 4 == 0) then
	   str = str .. ",\n  "
	  else
	   str = str .. ", "
	  end
	  if(monster ~= "") then
	   str = str .. monster .. " sumonado por "
	  end
	  str = str .. killers:getDataString("player_name")
	 else
	  if(i == 0) then
	   str = str .. "Morto no level " .. deaths:getDataInt("level") .. " por:\n  "
	  elseif(i == count) then
	   str = str .. " e por "
	  elseif(i % 4 == 0) then
	   str = str .. ",\n  "
	  else
	   str = str .. ", "
	  end
	  str = str .. monster
	 end
	 i = i + 1
	 if(i == count) then
	  str = str .. "."
	 end
   until not(killers:next())
   killers:free()
  end
 until not(deaths:next())
 deaths:free()
else
 str = "Não tem mortes."
end
doPlayerPopupFYI(cid, "Deathlist do player: " .. targetName .. ".\n\n" .. str)
return true
end

 

Se não for mysql, vai dar erro '-' eu nao sei mudar para sqlite...

Se algum scripter souber, posta ai.

Nathan96N
18 de abril de 2012 às 16:45

sqlite plz

StyflerDrunouS
18 de abril de 2012 às 20:52

Pow, eu conheço alguns scripters, mais nem um deles me respondem '-'

DersinhoD
20 de abril de 2012 às 12:01

vodkart vc mesmo disse > existe sim, eu estou vendo algumas querys aqui, para mysql existe vários comandos death list:

mysql para sql sem ser saite sempre da debug olha que ja testei varios scrips.

allisson nao existe o deathlist de la da debug,deathlist do stylle e um poko diferente ele funciona mais nao aparace pra quem ele morreu e ainda da uns erro na tabela do ot =/

2 semanas depois...
Nathan96N
30 de abril de 2012 às 22:04

Pelo visto ninguém consegue, topico morto '-'

Makelin1M
01 de maio de 2012 às 13:59

SIM AJUDENOSSSSSSSSSSS

 

velho para de flood tu encheu o topico de flood reportado

ate

 

se saiu completamente de acordo do pedido

ate

VodkartV
01 de maio de 2012 às 14:15

vodkart vc mesmo disse > existe sim, eu estou vendo algumas querys aqui, para mysql existe vários comandos death list:

mysql para sql sem ser saite sempre da debug olha que ja testei varios scrips.

allisson nao existe o deathlist de la da debug,deathlist do stylle e um poko diferente ele funciona mais nao aparace pra quem ele morreu e ainda da uns erro na tabela do ot =/

pois é, para qslite é diferente, desse jeito funciona, porém não aparece para quem morreu:

 

limit = 5
function onSay(cid, words, param, channel)
local getPlayer = db.getResult("SELECT `name`, `id` FROM `players` WHERE `name` = " .. db.escapeString(param) .. ";")
if(getPlayer:getID() == -1) then doPlayerSendCancel(cid, "Este Player não existe.") return true end
local getGuid = getPlayer:getDataInt("id")
getPlayer:free()
local str = ""
local qry = db.getResult("SELECT `id`, `date`, `level` FROM `player_deaths` WHERE `player_id` = " .. getGuid .." ORDER BY `date` DESC LIMIT 0, " .. limit)
if(qry:getID() ~= -1) then
repeat
str = str .."\n "..os.date("%d %B %Y %X ", qry:getDataInt("date")).." Morto no level "..qry:getDataInt("level")..""
until not(qry:next()) 
qry:free()
else
str = "Não há mortes."
end
doPlayerPopupFYI(cid, "Lista de Mortes de: " .. param .. ".\n\n" .. str)
return true
end

VildenV
01 de maio de 2012 às 14:33

Galera vamos esperar a ajuda, ficar pedindo toda hora não vai faze com que

ela se resolva, além do mais, pode até chegar a ser um flood.

 

Cuidado.

PsyMcKenzieP
01 de maio de 2012 às 14:34

Vodkart abre uma exceção pra mim velho por favor?

Faz o script pra mim la?

http://www.xtibia.com/forum/topic/184816-script-reino/page__fromsearch__1

 

Tu disse q é facil.

E se puder fazer algo por mim nesse, não tem nada a ver com pokemon,

é só o nome do sistema:

http://www.xtibia.com/forum/topic/185060-duvida-script-mkalo/page__fromsearch__1

 

Obrigado.

Até+

Abraços!!

VodkartV
01 de maio de 2012 às 16:53

consegui (:

 

5pQIb.png

 

acho que funfa em sqlite e mysql '-'

VildenV
01 de maio de 2012 às 17:07

Vodkart, se você não for postar a script e ajudar os caras não é necessário

esse comentário a cima, certo?

 

abç

VodkartV
01 de maio de 2012 às 17:23

mas eu vou postar sim, só estou vendo se eles vão querer '-'

 

-------------------------------------

 

está ai para quem quiser:

 

 

 

na sua db executa isso:

 

CREATE TABLE death_list (
id		  INTEGER NOT NULL,
player_id   INTEGER NOT NULL,
date		INTEGER NOT NULL,
level	   INTEGER NOT NULL,
killer_name INTEGER NOT NULL,
PRIMARY KEY ( id )
);

 

creaturescript

 

death_list.lua

function onDeath(cid, corpse, deathList)
local death = "field item"
if isPlayer(deathList[1]) or isMonster(deathList[1]) then
death = getCreatureName(deathList[1])
end
db.executeQuery("INSERT INTO `death_list` (`player_id`, `date`, `level`, `killer_name`) VALUES ('".. getPlayerGUID(cid).."', '".. os.time() .."', '".. getPlayerLevel(cid) .."', '".. death .."');")   
return true   
end

 

creaturescript.xml

<event type="death" name="DeathList" event="script" value="death_list.lua"/> 

 

creaturescript/script/login.lua

registerCreatureEvent(cid, "DeathList")

 

talkactions

 

deathlist.lua

limit = 5
function onSay(cid, words, param, channel)
local getPlayer = db.getResult("SELECT `name`, `id` FROM `players` WHERE `name` = " .. db.escapeString(param) .. ";")
if(getPlayer:getID() == -1) then doPlayerSendCancel(cid, "Este Player não existe.") return true end
local getGuid = getPlayer:getDataInt("id")
getPlayer:free()
local str = ""
local qry = db.getResult("SELECT `id`, `date`, `level`, `killer_name` FROM `death_list` WHERE `player_id` = " .. getGuid .." ORDER BY `date` DESC LIMIT 0, " .. limit)
if(qry:getID() ~= -1) then
repeat
str = str .."\n "..os.date("%d %B %Y %X ", qry:getDataInt("date")).." Morto no level "..qry:getDataInt("level").." Por: "..qry:getDataString("killer_name").."."
until not(qry:next())
qry:free()
else
str = "Não há mortes."
end
doPlayerPopupFYI(cid, "Lista de Mortes de: " .. param .. ".\n\n" .. str)
return true
end

 

talkactions.xml

<talkaction words="!deathlist" script="deathlist.lua"/>

Editado Maio 1 por Vodkart