ok qndo chegar em casa eu edito
Script tile guild members online do vodkart
Por gmstrikker, 27 de jul. de 2015 em Scripts
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

info
Grupo: Herói
Registrado: 01/05/08
Posts: 2.6k
Reputação: +536
Gênero: Masculino

Tentei, vamos ver se vai:
function onStepIn(cid, item, position, fromPosition)
local c_amount, k = 5, 0
if not isPlayer(cid) then return true end
if item.actionid == 12000 then
if getPlayerGuildId(cid) <= 0 or #getGuildMembers(getPlayerGuildId(cid)) < c_amount then
pass = false
else
for _, var in pairs(getGuildMembers(getPlayerGuildId(cid))) do
if db.getResult("SELECT `level` FROM `players` WHERE `id` = "..getPlayerGUIDByName(var)):getDataInt("level") >= 50 then
k = k + 1
if k > c_amount then break end
end
end
pass = k < c_amount and false or true
end
if not pass then
doPlayerSendCancel(cid, "Você precisa estar em guild ou sua guild precisa ter no minimo " .. c_amount .. " jogadores level 50 ou mais.")
doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
doTeleportThing(cid, fromPosition, true)
return true
end
doBroadcastMessage("A guild " .. getPlayerGuildName(cid) .. " está penetrando no castelo.")
elseif item.actionid == 12001 then
doBroadcastMessage("A guild " .. getPlayerGuildName(cid) .. " já está dentro do castelo.")
elseif item.actionid == 12002 then
doBroadcastMessage("A guild " .. getPlayerGuildName(cid) .. " está perto de conquistar o castelo.")
end
return true
end
Utilizei as actionids 12000, 12001 e 12002 como exemplo:
No exemplo apenas a 12000 faz a verificação de level/guild, as demais apenas envia a mensagem, para evitar fazer uma checagem em todos os pisos já que apenas o principal define quem vai ou não entrar.
Att.
info
Grupo: Campones
Registrado: 14/04/13
Posts: 89
Reputação: 0
Char no Tibia: GM Strikker

Tentei, vamos ver se vai:
function onStepIn(cid, item, position, fromPosition) local c_amount, k = 5, 0 if not isPlayer(cid) then return true end if item.actionid == 12000 then if getPlayerGuildId(cid) <= 0 or #getGuildMembers(getPlayerGuildId(cid)) < c_amount then pass = false else for _, var in pairs(getGuildMembers(getPlayerGuildId(cid))) do if db.getResult("SELECT `level` FROM `players` WHERE `id` = "..getPlayerGUIDByName(var)):getDataInt("level") >= 50 then k = k + 1 if k > c_amount then break end end end pass = k < c_amount and false or true end if not pass then doPlayerSendCancel(cid, "Você precisa estar em guild ou sua guild precisa ter no minimo " .. c_amount .. " jogadores level 50 ou mais.") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) doTeleportThing(cid, fromPosition, true) return true end doBroadcastMessage("A guild " .. getPlayerGuildName(cid) .. " está penetrando no castelo.") elseif item.actionid == 12001 then doBroadcastMessage("A guild " .. getPlayerGuildName(cid) .. " já está dentro do castelo.") elseif item.actionid == 12002 then doBroadcastMessage("A guild " .. getPlayerGuildName(cid) .. " está perto de conquistar o castelo.") end return true end
Utilizei as actionids 12000, 12001 e 12002 como exemplo:
No exemplo apenas a 12000 faz a verificação de level/guild, as demais apenas envia a mensagem, para evitar fazer uma checagem em todos os pisos já que apenas o principal define quem vai ou não entrar.
Att.
Porra brother boa ideia, pra q ficar verificando toda vez que for passar pelo piso né? Se passou por um não precisa ficar pegando o processo todo de novo ;D kkk
Vlw por ajudar, mas não ta funfando n, tem uns BUGs que teria que corrigir
1- Não está mandando a broad qnd passa pelo piso
Mas só no primeiro, onde faz a checagem se tem os players online, pq os outros está mandando a msg de boas
Ta até com um problema, pq fica floodando se o cara ficar entrando e saindo do piso fica floodando ou se dois membros da msm guild passar pelo piso fica floodando na tela de todos os players
2- Qualquer um que tem guild pode passar pelo piso sem ter os player necessarios online
E teria como você colocar uma variavel dizendo se pode passar de MC ou não? Pra eu testar e dps colocar pra nego só passar se tiver 5 players diferentes msm, sem ser MC?
Editado Julho 28 por gmstrikker
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

pra checar se está de MC tem que ver se o jogador está online, como você falou que a contagem era de todos os membros(on e off) não dei muita importância pra MC, sobre as mensagens da pra fazer elas aleatórias numa tabela, e de forma randômica mandar as msg.
sobre o piso não é melhor checar se os membros estão online?
info
Grupo: Campones
Registrado: 14/04/13
Posts: 89
Reputação: 0
Char no Tibia: GM Strikker

pra checar se está de MC tem que ver se o jogador está online, como você falou que a contagem era de todos os membros(on e off) não dei muita importância pra MC, sobre as mensagens da pra fazer elas aleatórias numa tabela, e de forma randômica mandar as msg.
sobre o piso não é melhor checar se os membros estão online?
Mas a ideia era saber se tinha 5 membros online mesmo!
Sobre a MSG pra todos, isso ia irritar muito os players, eu só consigo pensar um jeito de parar isso, se vc souber outro melhor ainda
- Só mandar a MSG quando UM membro da guild passar ai ter um timer sei lá algo assim, pra mandar essa msm msg de novo, mas vcs manjam mais devem saber
O script do
Bruno Minervinoaparece uma parada no console

local config = {
level = 50,
count = 5,
messages = {
[12000] = "A guild %s está penetrando no castelo.",
[12001] = "A guild %s já está dentro do castelo.",
[12002] = "A guild %s está perto de conquistar o castelo."
}
}
function table.insert(table, value)
table[#table + 1] = value
end
function getGuildOnlineMembers(guildId)
local pid, ip = {}, {}
for _, cid in pairs(getPlayersOnline()) do
if getPlayerGuildId(cid) == guildId and getPlayerLevel(cid) >= config.level and not isInArray(ip, getPlayerIp(cid)) then
table.insert(pid, cid)
table.insert(ip, getPlayerIp(cid))
end
end
return pid
end
function onStepIn(cid, item, position, fromPosition)
if not isPlayer(cid) then return true end
if item.actionid == 12000 then
if getPlayerGuildId(cid) < 1 or #getGuildOnlineMembers(getPlayerGuildId(cid)) < config.count then
doPlayerSendCancel(cid, "Você precisa estar em guild ou sua guild precisa ter no minimo "..config.count.." jogadores level "..config.level.." ou mais.")
doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
doTeleportThing(cid, fromPosition, true)
return true
end
end
if getGlobalStorageValue(item.actionid + 4819) < os.time() then
broadcastMessage(config.messages[item.actionid]:format(getPlayerGuildName(cid)))
setGlobalStorageValue(item.actionid + 4819, os.time() + 10)
end
return true
end
info
Grupo: Campones
Registrado: 14/04/13
Posts: 89
Reputação: 0
Char no Tibia: GM Strikker

Vlw
Editado Agosto 2 por gmstrikker




info
Grupo: Campones
Registrado: 14/04/13
Posts: 89
Reputação: 0
Char no Tibia: GM Strikker
To precisando de ajuda com um script do Vodkart (tile que só passa com membros online da guild)
To com 3 Problemas nele
1- Não está mandando a mensagem quando passa
doBroadcastMessage("A guild "..getPlayerGuildName(cid).." Está penetrando no castelo.")2- Uma mensagem só fica osso, um tile só fica osso, queria que nesse mesmo script eu pude-se configurar 3 tiles
Tipo
1- A guild Xtibia está invadindo carlin (AVISO UM)
2- A guild Xtibia está invadindo carlin (PARTE 2)
3- A guild Xtibia está invadindo carlin corre mano fudeu eles tão na ultima parte
3- Não adianta nada colocar essa restrição se não checa se ta de MC, os caras logam outro char passam e já era
Alguem sabe colocar pra checar se um desses é MC
Codigo pra qm for analisar e qm quiser usar:
Em lib/050-function adicione:
function getGuildMembers(GuildId) local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");") if (query:getID() ~= -1) then repeat table.insert(players,query:getDataString("name")) until not query:next() query:free() end return #players > 0 and players or false endmovement.lua
function onStepIn(cid, item, position, fromPosition) local c_amount, k = 5, 0 if not isPlayer(cid) then return true end if getPlayerGuildId(cid) <= 0 or #getGuildMembers(getPlayerGuildId(cid)) < c_amount then pass = false else for _, var in ipairs(getGuildMembers(getPlayerGuildId(cid))) do if db.getResult("SELECT `level` FROM `players` WHERE `id` = "..getPlayerGUIDByName(var)):getDataInt("level") >= 50 then k = k +1 if k > c_amount then break end end end pass = k < c_amount and false or true end if not pass then doPlayerSendCancel(cid,"você precisa estar em guild ou sua guild precisa ter no minimo "..c_amount.." jogadores level 50 ou mais.") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) doTeleportThing(cid, fromPosition, true) return true end doBroadcastMessage("A guild "..getPlayerGuildName(cid).." Está penetrando no castelo.") return true end