Ir para conteúdo
  • 0

Probleminha Em Talkaction


Pergunta

Fala galera blz?

 

Então, to usando um talkaction que funciona assim:

o lider da guild usa o comando !guildpoints, quando ele utiliza esse comando, todos os players da guild que atenderem o requisito de Level 150+ e não terem o mesmo Ip (até um limite), sendo eles 10+ players. Todos esses 10+ que atenderem a esses requisitos, ganharão 10 premium points, porém, fiz o teste e me deparei com 1 problema ao digitar !guildpoints:

 

01:41 10 players from your guild are valid (10 required), but you have together only 0 IPs (6 required).

 

O Script parece funcionar normalmente, porém, na parte de getPlayerIp acho que tem algum problema que não consigo resolver, parece que o script não consegue "achar" os ips dos membros da guild pra verificar se existem mc's. (Desses 10 players, 6 ips no minimo diferentes é necessário para que o script dê os points, mas o script não está detectando os ips, e retornando um valor zero)

 

Preciso de ajuda pra resolver esse problema.

 

vlw galera, aguardo!

 

Script:

local playersNeeded = 10
local ipsNeeded = 6
local minimumLevel = 150
local storageId = 47578
local pointsForPlayer = 10

local function sendPlayersList(cid, list)
for i, pid in ipairs(list) do
 local level = getPlayerLevel(pid) < minimumLevel and " - " .. getPlayerLevel(cid) .. " level " or ""
 local valid = getCreatureStorage(pid, storageId) > 1 and " - already received!" or ""
 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getCreatureName(pid) .. level)
end
end

function onSay(cid, words, param, channel)
if(getPlayerGuildLevel(cid) == 3) then
 local leaderGuild = getPlayerGuildId(cid)
 local players = getPlayersOnline()
 local guildMembersValid = {}
 local guildMembersInvalid = {}
 for i, pid in ipairs(players) do
  if(leaderGuild == getPlayerGuildId(pid)) then
if(getPlayerLevel(pid) >= minimumLevel and tonumber(getCreatureStorage(pid, storageId)) < 2) then
 table.insert(guildMembersValid, pid)
else
 table.insert(guildMembersInvalid, pid)
end
  end
 end

 if(#guildMembersValid >= playersNeeded) then
  local IPs = {}
  for i, pid in ipairs(guildMembersValid) do
local ip = getPlayerIp(pid)
if(IPs[ip] == nil) then
 IPs[ip] = ip
end
  end
  if(#IPs >= ipsNeeded) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Players that received points:")
sendPlayersList(cid, guildMembersValid)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Players that did not receive points:")
sendPlayersList(cid, guildMembersInvalid)
local accounts = {}
for i, pid in ipairs(guildMembersValid) do
 table.insert(accounts, getPlayerAccountId(pid))
 doCreatureSetStorage(pid, storageId, os.time())
end
db.executeQuery("UPDATE `accounts` SET `premium_points` = `premium_points`+" .. pointsForPlayer .. " WHERE `id` IN (" .. table.concat(accounts, ',') .. ");")
  else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, #guildMembersValid .. " players from your guild are valid (" .. playersNeeded .. " required), but you have together only " .. #IPs .. " IPs (" .. ipsNeeded .. " required)")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Valid players:")
sendPlayersList(cid, guildMembersValid)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Invalid players:")
sendPlayersList(cid, guildMembersInvalid)
  end
 else
  doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, #guildMembersValid .. " players from your guild are valid, " .. playersNeeded .. " required. Minimum level required is " .. minimumLevel)
  doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Valid players:")
  sendPlayersList(cid, guildMembersValid)
  doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Invalid players:")
  sendPlayersList(cid, guildMembersInvalid)
 end
else
 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Only guild leader can request points.")
end
return true
end

Editado por Lucas502
Link para o comentário
https://xtibia.com/forum/topic/188358-probleminha-em-talkaction/
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Reformulei a parte de ip, não tenho certeza se vai funcionar pois não testei mais ficou assim:

local playersNeeded = 10
local ipsNeeded = 6
local minimumLevel = 150
local storageId = 47578
local pointsForPlayer = 10

local function sendPlayersList(cid, list)
for i, pid in ipairs(list) do
 local level = getPlayerLevel(pid) < minimumLevel and " - " .. getPlayerLevel(cid) .. " level " or ""
 local valid = getCreatureStorage(pid, storageId) > 1 and " - already received!" or ""
 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, getCreatureName(pid) .. level)
end
end

function onSay(cid, words, param, channel)
if(getPlayerGuildLevel(cid) == 3) then
 local leaderGuild = getPlayerGuildId(cid)
 local players = getPlayersOnline()
 local guildMembersValid = {}
 local guildMembersInvalid = {}
 for i, pid in ipairs(players) do
  if(leaderGuild == getPlayerGuildId(pid)) then
    if(getPlayerLevel(pid) >= minimumLevel and tonumber(getCreatureStorage(pid, storageId)) < 2) then
	 table.insert(guildMembersValid, pid)
    else
	 table.insert(guildMembersInvalid, pid)
    end
  end
 end

 if(#guildMembersValid >= playersNeeded) then
   local IPs = {}
   for i=1, #guildMembersValid do
       local ip = getPlayerIp[guildMembersValid[i]]
       if not isArray(ip, IPs) then
           table.insert(IPs, ip)
       end
   end
  end

  if(#IPs >= ipsNeeded) then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Players that received points:")
    sendPlayersList(cid, guildMembersValid)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Players that did not receive points:")
    sendPlayersList(cid, guildMembersInvalid)
    local accounts = {}
    for i, pid in ipairs(guildMembersValid) do
	 table.insert(accounts, getPlayerAccountId(pid))
	 doCreatureSetStorage(pid, storageId, os.time())
    end
    db.executeQuery("UPDATE `accounts` SET `premium_points` = `premium_points`+" .. pointsForPlayer .. " WHERE `id` IN (" .. table.concat(accounts, ',') .. ");")
  else
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, #guildMembersValid .. " players from your guild are valid (" .. playersNeeded .. " required), but you have together only " .. #IPs .. " IPs (" .. ipsNeeded .. " required)")
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Valid players:")
    sendPlayersList(cid, guildMembersValid)
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Invalid players:")
    sendPlayersList(cid, guildMembersInvalid)
  end
 else
  doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, #guildMembersValid .. " players from your guild are valid, " .. playersNeeded .. " required. Minimum level required is " .. minimumLevel)
  doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Valid players:")
  sendPlayersList(cid, guildMembersValid)
  doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Invalid players:")
  sendPlayersList(cid, guildMembersInvalid)
 end
else
 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Only guild leader can request points.")
end
return true
end

 

Caso erro, fale que tento arrumar happy.png

Link para o comentário
https://xtibia.com/forum/topic/188358-probleminha-em-talkaction/#findComment-1281645
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...