VO
mod

Trade Logs

Por Vodkart, 31 de mai. de 2012 em Mods, funções e outros

script
15
4.5k
VodkartV
31 de maio de 2012 às 16:17

Explicação:

 

Vocês sabem que os comandos que o GOD usa ficam salvos em um arquivo.txt certo?

Esse sistema é parecido, só que quando o jogador for trocar items pelo trade vão ficar salvo os IDS dos items que foram trocados e os nomes dos players.

 

 

 

 

1° Versão é feita pelo Banco de dados:

 

 

obs: Eu só testei em servidor com Sqlite, não sei se vai funcionar para os demais como mysql.

 

 

Query:

CREATE TABLE players_trade (
	id	INTEGER NOT NULL,
	world_id INTEGER NOT NULL,
	player_id INTEGER NOT NULL,
	target_id INTEGER NOT NULL,
	player_items  INTEGER NOT NULL,
	target_items  INTEGER NOT NULL,
	date	 INTEGER NOT NULL,
PRIMARY KEY ( id )
);

 

TradeLogDB.xml

<?xml version="1.0" encoding="UTF-8"?>  
<mod name="Trade Log" version="1.0" author="Vodkart" contact="none.com" enabled="yes">  
<config name="TradeLog_func"><![CDATA[
function natural(number)
local n = number - math.floor(number)
return n >= 0.5 and math.ceil(number) or math.floor(number)
end
function containerItemsToString(cont)
  local s = ""
  for _ = 0, getContainerSize(cont) - 1 do
  local item = getContainerItem(cont, _)
  s = s..",".. item.itemid
  if isContainer(item.uid) and getContainerSize(item.uid) > 0 then
	 s = s..":1"..containerItemsToString(item.uid)
  else
	 s = s..":".. natural(getItemWeight(item.uid)/getItemWeightById(item.itemid))
  end
  end
  return s
end
]]></config>
<event type="login" name="TradeRegister" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "TradeLog")
return true
end]]></event>	  
<event type="tradeaccept" name="TradeLog" event="script"><![CDATA[
domodlib('TradeLog_func')
function onTradeAccept(cid, target, item, targetItem)
if (not isPlayer(cid)) or (not isPlayer(target)) then return false end
local items1,items2 = ""..item.itemid,""..targetItem.itemid
items1 = isContainer(item.uid) and getContainerSize(item.uid) > 0 and items1..":1"..containerItemsToString(item.uid) or items1 ..":".. natural(getItemWeight(item.uid)/getItemWeightById(item.itemid))
items2 = isContainer(targetItem.uid) and getContainerSize(targetItem.uid) > 0 and items2 ..":1"..containerItemsToString(targetItem.uid) or items2 ..":".. natural(getItemWeight(targetItem.uid)/getItemWeightById(targetItem.itemid))
db.executeQuery("INSERT INTO `players_trade` (`world_id`, `player_id`, `target_id`, `player_items`, `target_items`, `date`) VALUES ('".. getConfigValue("worldId") .."', '".. getPlayerGUID(cid) .."', '".. getPlayerGUID(target) .."', '".. items1 .."', '".. items2 .."', '".. os.time() .."');")
return true
end
]]></event>
</mod>

 

 

2° Versão é salvo em um arquivo.txt em data/logs

 

 

TradeLog.xml

<?xml version="1.0" encoding="UTF-8"?>  
<mod name="Trade Log" version="1.0" author="Vodkart" contact="none.com" enabled="yes">  
<config name="TradeLog_func"><![CDATA[
function natural(number)
local n = number - math.floor(number)
return n >= 0.5 and math.ceil(number) or math.floor(number)
end
function containerItemsToString(cont)
  local s = ""
  for _ = 0, getContainerSize(cont) - 1 do
  local item = getContainerItem(cont, _)
  s = s..",".. item.itemid
  if isContainer(item.uid) and getContainerSize(item.uid) > 0 then
	 s = s..":1"..containerItemsToString(item.uid)
  else
	 s = s..":".. natural(getItemWeight(item.uid)/getItemWeightById(item.itemid))
  end
  end
  return s
end
]]></config>
<event type="login" name="TradeRegister" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "TradeLog")
return true
end]]></event>	  
<event type="tradeaccept" name="TradeLog" event="script"><![CDATA[
domodlib('TradeLog_func')
function onTradeAccept(cid, target, item, targetItem)
if (not isPlayer(cid)) or (not isPlayer(target)) then return false end
local items1,items2 = ""..item.itemid,""..targetItem.itemid
items1 = isContainer(item.uid) and getContainerSize(item.uid) > 0 and items1..":1"..containerItemsToString(item.uid) or items1 ..":".. natural(getItemWeight(item.uid)/getItemWeightById(item.itemid))
items2 = isContainer(targetItem.uid) and getContainerSize(targetItem.uid) > 0 and items2 ..":1"..containerItemsToString(targetItem.uid) or items2 ..":".. natural(getItemWeight(targetItem.uid)/getItemWeightById(targetItem.itemid))
f = io.open("data/logs/Trades.txt", "a+")
f:write("World: ".. getConfigValue("worldId") .." -  "..getPlayerName(cid).." Traded: [".. items1 .."] for [".. items2 .."] With Player "..getPlayerName(target)..". At " .. os.date("%d %B %Y - %X.", os.time()) .."\n\n----------------------------------------------------------\n")
f:close()
return true
end
]]></event>
</mod>

 

Editado Junho 4 por Vodkart

SmiXS
31 de maio de 2012 às 16:22

Muito bom VODKART. Iria te dar um REP+ por isso. Mas já usei minhas chances de REP por hj.

MulizeuM
31 de maio de 2012 às 18:02

Vodkart simplismente brilhante mto bacana cara!

 

rep+

landugasparL
31 de maio de 2012 às 21:28

Blz cara, eu não sei para que serve trade logs e acho que muitos que entrarem aqui também não vão saber, tem como você explicar melhor?

Vlw ae abraço

VodkartV
31 de maio de 2012 às 21:43

Blz cara, eu não sei para que serve trade logs e acho que muitos que entrarem aqui também não vão saber, tem como você explicar melhor?

Vlw ae abraço

 

pronto, atualizado.

VildenV
31 de maio de 2012 às 23:11

Muito bom vodkart, muito bom mesmo, isso ajuda a ter um controle e até a descobrir pessoas que clonam items entre outros inexistentes no jogo.

RHCPR
05 de junho de 2012 às 15:12

Queria uma ajudinha, eu gostaria de usar esse sistema pelo log em txt, porém queria que mudasse pra tipo:

Fizesse apenas o log se o item tiver o id x,y,z... entenderam?

 

com isso voce faz mais controles sobre os itens VIP, pq em meu server tem umas pessoas que doam, pegam os items e abre disputa...

05 de junho de 2012 às 15:39

Se eu utilizar um método por sources, sem nada de queries, seria melhor?

 

Bom sistema, rep+

OneshotO
05 de junho de 2012 às 17:22

Um sistema desse feito pelas sources não iria ter nenhuma diferença notável, pois sua execução não "pesa" muito no processamento e memória do servidor.

Editado Junho 5 por Oneshot

07 de junho de 2012 às 09:23

Éé agora que vi a 2 opção sem queries kk'

 

mtu bom o sistema =]

10 meses depois...
VodkartV
15 de abril de 2013 às 17:41

up

rohfagundesR
15 de abril de 2013 às 19:32

ele dar up num topic mo antigo ninguem fala nd né '-'

muito certo

VodkartV
15 de abril de 2013 às 20:59

e qual problema? está claro que nas regras pode...

SkymagnumS
16 de abril de 2013 às 15:12

Belo script vodkart, parabéns, rep+.

5 anos depois...
bilauxB
27 de janeiro de 2019 às 22:02
Em 31/05/2012 em 16:17, Vodkart disse:

Explicação:

 

Vocês sabem que os comandos que o GOD usa ficam salvos em um arquivo.txt certo?

Esse sistema é parecido, só que quando o jogador for trocar items pelo trade vão ficar salvo os IDS dos items que foram trocados e os nomes dos players.

 

 

 

 

1° Versão é feita pelo Banco de dados:

 

  Mostrar conteúdo oculto

 

obs: Eu só testei em servidor com Sqlite, não sei se vai funcionar para os demais como mysql.

 

 

Query:

 


CREATE TABLE players_trade (
	id	INTEGER NOT NULL,
	world_id INTEGER NOT NULL,
	player_id INTEGER NOT NULL,
	target_id INTEGER NOT NULL,
	player_items  INTEGER NOT NULL,
	target_items  INTEGER NOT NULL,
	date	 INTEGER NOT NULL,
PRIMARY KEY ( id )
);
 

 

 

TradeLogDB.xml

 


<?xml version="1.0" encoding="UTF-8"?>  
<mod name="Trade Log" version="1.0" author="Vodkart" contact="none.com" enabled="yes">  
<config name="TradeLog_func"><![CDATA[
function natural(number)
local n = number - math.floor(number)
return n >= 0.5 and math.ceil(number) or math.floor(number)
end
function containerItemsToString(cont)
  local s = ""
  for _ = 0, getContainerSize(cont) - 1 do
  local item = getContainerItem(cont, _)
  s = s..",".. item.itemid
  if isContainer(item.uid) and getContainerSize(item.uid) > 0 then
	 s = s..":1"..containerItemsToString(item.uid)
  else
	 s = s..":".. natural(getItemWeight(item.uid)/getItemWeightById(item.itemid))
  end
  end
  return s
end
]]></config>
<event type="login" name="TradeRegister" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "TradeLog")
return true
end]]></event>	  
<event type="tradeaccept" name="TradeLog" event="script"><![CDATA[
domodlib('TradeLog_func')
function onTradeAccept(cid, target, item, targetItem)
if (not isPlayer(cid)) or (not isPlayer(target)) then return false end
local items1,items2 = ""..item.itemid,""..targetItem.itemid
items1 = isContainer(item.uid) and getContainerSize(item.uid) > 0 and items1..":1"..containerItemsToString(item.uid) or items1 ..":".. natural(getItemWeight(item.uid)/getItemWeightById(item.itemid))
items2 = isContainer(targetItem.uid) and getContainerSize(targetItem.uid) > 0 and items2 ..":1"..containerItemsToString(targetItem.uid) or items2 ..":".. natural(getItemWeight(targetItem.uid)/getItemWeightById(targetItem.itemid))
db.executeQuery("INSERT INTO `players_trade` (`world_id`, `player_id`, `target_id`, `player_items`, `target_items`, `date`) VALUES ('".. getConfigValue("worldId") .."', '".. getPlayerGUID(cid) .."', '".. getPlayerGUID(target) .."', '".. items1 .."', '".. items2 .."', '".. os.time() .."');")
return true
end
]]></event>
</mod>
 

 

 

 

2° Versão é salvo em um arquivo.txt em data/logs

 

  Mostrar conteúdo oculto

 

TradeLog.xml

 


<?xml version="1.0" encoding="UTF-8"?>  
<mod name="Trade Log" version="1.0" author="Vodkart" contact="none.com" enabled="yes">  
<config name="TradeLog_func"><![CDATA[
function natural(number)
local n = number - math.floor(number)
return n >= 0.5 and math.ceil(number) or math.floor(number)
end
function containerItemsToString(cont)
  local s = ""
  for _ = 0, getContainerSize(cont) - 1 do
  local item = getContainerItem(cont, _)
  s = s..",".. item.itemid
  if isContainer(item.uid) and getContainerSize(item.uid) > 0 then
	 s = s..":1"..containerItemsToString(item.uid)
  else
	 s = s..":".. natural(getItemWeight(item.uid)/getItemWeightById(item.itemid))
  end
  end
  return s
end
]]></config>
<event type="login" name="TradeRegister" event="script"><![CDATA[
function onLogin(cid)
registerCreatureEvent(cid, "TradeLog")
return true
end]]></event>	  
<event type="tradeaccept" name="TradeLog" event="script"><![CDATA[
domodlib('TradeLog_func')
function onTradeAccept(cid, target, item, targetItem)
if (not isPlayer(cid)) or (not isPlayer(target)) then return false end
local items1,items2 = ""..item.itemid,""..targetItem.itemid
items1 = isContainer(item.uid) and getContainerSize(item.uid) > 0 and items1..":1"..containerItemsToString(item.uid) or items1 ..":".. natural(getItemWeight(item.uid)/getItemWeightById(item.itemid))
items2 = isContainer(targetItem.uid) and getContainerSize(targetItem.uid) > 0 and items2 ..":1"..containerItemsToString(targetItem.uid) or items2 ..":".. natural(getItemWeight(targetItem.uid)/getItemWeightById(targetItem.itemid))
f = io.open("data/logs/Trades.txt", "a+")
f:write("World: ".. getConfigValue("worldId") .." -  "..getPlayerName(cid).." Traded: [".. items1 .."] for [".. items2 .."] With Player "..getPlayerName(target)..". At " .. os.date("%d %B %Y - %X.", os.time()) .."\n\n----------------------------------------------------------\n")
f:close()
return true
end
]]></event>
</mod>
 

 

 

@Vodkart essa segunda versão tem q criar q pasta no logs ??