Muito bom VODKART. Iria te dar um REP+ por isso. Mas já usei minhas chances de REP por hj.
info
Grupo: Barão
Registrado: 05/08/10
Posts: 218
Reputação: +86
Gênero: Masculino

Vodkart simplismente brilhante mto bacana cara!
rep+
info
Grupo: Campones
Registrado: 15/06/11
Posts: 34
Reputação: +5
Char no Tibia: Thygas / Zarvazy faloon

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
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

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.
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.
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...
info
Grupo: Conde
Registrado: 16/06/08
Posts: 998
Reputação: +185
Gênero: Masculino

Se eu utilizar um método por sources, sem nada de queries, seria melhor?
Bom sistema, rep+
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
info
Grupo: Conde
Registrado: 16/06/08
Posts: 998
Reputação: +185
Gênero: Masculino

Éé agora que vi a 2 opção sem queries kk'
mtu bom o sistema =]
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

up
info
Grupo: Visconde
Registrado: 10/02/11
Posts: 377
Reputação: +78

ele dar up num topic mo antigo ninguem fala nd né '-'
muito certo
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

e qual problema? está claro que nas regras pode...
info
Grupo: Marquês
Registrado: 02/08/12
Posts: 1k
Reputação: +234
Char no Tibia: Maurolkit

Belo script vodkart, parabéns, rep+.
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:
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>
@Vodkart essa segunda versão tem q criar q pasta no logs ??










info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino
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:
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