Ir para conteúdo
  • 0

Script tile guild members online do vodkart


gmstrikker

Pergunta

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
end

 

movement.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
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

 

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
Link para o comentário
Compartilhar em outros sites

  • 0

@@gmstrikker,

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.

Link para o comentário
Compartilhar em outros sites

  • 0

@@gmstrikker,

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 por gmstrikker
Link para o comentário
Compartilhar em outros sites

  • 0

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?

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

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 Minervino

aparece uma parada no console

 

4FWB0y1.png

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...