Jump to content

Projeto Tutores de Scripting


Killua

Recommended Posts

tava tentando fazer um sorteador de items, ja que ninguem ajudou, (só o omega), bom,

tenho esse script

 

 

function onUse(cid, item, frompos, item2, topos)

local helds = {
"12952",
"12953",
"12954",
"12955",
"12956",
"12957",
"12958",
"12959",
"12960",
"12961",
"12962",
"12963",
"12964",
"12965",
"12966",
"12967",
"12968",
"12969",
"12970",
"12971",
"12972",
"12973",
"12974",
"12975",
"12976",
"12977",
"12978",
"12979",
"12980",
"12981",
"12982",
"12983",
"12944",
"12940",
"12941"
}

if getPlayerItemCount(cid, 12949) < 500 then
doPlayerPopupFYI(cid, "Voce Precisa de 500 "..getItemNameById(12949).." para Pegar Seu Held Item.") 
return true
end


doPlayerAddItem(cid, helds[math.random(1, #helds)], 1)
doPlayerPopupFYI(cid, "Voce ganhou seu Held Item.")
doPlayerRemoveItem(cid, 12949, 500)

end
 

 

 

 

primeiramente eu gostaria de quando "doPlayerPopupFYI(cid," Voce ganhou seu Held Item." aparecesse o nome do item, acho que é mais ou menos assim: doPlayerPopupFYI(cid, Voce Ganhou um "..getItemNameById(helds).." ")

mas nao obtive sucesso, sempre da bug no script.

 

 

segundo eu gostaria que desse pro player escolher qual opção ele gostaria, opção 1- se tiver 50 do item 12949, da um item aleatorio configurados em outro local, e etc.

 

Obrigado pela atenção.

Link to comment
Share on other sites

^ Antes de tudo, gostaria de recomendar retirar as aspas dos elementos da tabela helds. Ou, você pode fazer uma pequena alteração para transformar a string resultada do math.random em number. Até porquê, ficar removendo aspas é um saco.

 

local it = tonumber(helds[math.random(1, #helds)])
doPlayerAddItem(cid, it, 1)
doPlayerPopupFYI(cid, "Voce ganhou seu "..getItemNameById(it)..".")
doPlayerRemoveItem(cid, 12949, 500)
Link to comment
Share on other sites

Galera vi em um script que o cara fazia o script em um arquivo e em outro ele chamava seus atributos, ou algo assim (tipo importando um modulo), nesse segundo arquivo ele usava isto aqui: dofile ("Nome_Arquivo.lua"), poderiam explicar como se faz isso, seria bastante útil para um sistema mais elaborado, que precisaria de varios arquivos em diferentes locais.

Link to comment
Share on other sites

@Homer

 

Sou iniciante, mesmo assim tentarei dar uma forcinha rsrs, mesmo não entendendo muito.

 

local it = tonumber(helds[math.random(1, #helds)])

Do 1 até o ultimo irá randomizar um item da tabela #(helds)
doPlayerAddItem(cid, it, 1)

Irá adicionar o item na condição "IT" que no caso seria o sorteio, com a quantidade ,1

doPlayerPopupFYI(cid, "Voce ganhou seu "..getItemNameById(it)..".")

Você ja deve saber sobre o popup, getItemNameById(it) irá pegar o nome do item que ira sair na tabela, no sorteio do local "IT"
doPlayerRemoveItem(cid, 12949, 500)

Edited by Pasteel
Link to comment
Share on other sites

Eu Denovo =)

dessa vez é algo mais simples (ou não)

tava tentando fazer com que essa função fique a cada segundo,

onPokeHealthChange(cid)

acho que seria um creaturescript, talvez com a função if isPlayerOnline(cid) then

mas não tenho certeza,

 

Obrigado Pela Atenção, espero que me ajudem.

Link to comment
Share on other sites

Oi estou com um Problema nesse Script aki:

 

 

function onTarget(cid, target)
if isMonster(target) and not isSummon(target) then
return true
end
if isSummon(target) and getCreatureMaster(target) == cid then
doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUMAYNOTATTACKTHISCREATURE)
doPlayerSendCancel(cid, "You can't attack your Pokemon.")
return false
end

if getPlayerStorageValue(getCreatureMaster(target), 6666) == 1 and getPlayerStorageValue(cid, 6666) == 1 then
doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time")
elseif getPlayerStorageValue(getCreatureMaster(target), 6667) == 1 and getPlayerStorageValue(cid, 6667) == 1 then
doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time")
return false
end
return true
end

 

 

Como posso fazer para nao Atacar o Pokemon(Sumon) do Mesmo Storage?

- OBS: nao é PDA nao usa funçao: function canAttackOther(cid, pid)

Edited by Nextbr
Link to comment
Share on other sites

^ Em outras palavras, se o value da key/storage y do jogador x (no caso, cid) for igual à do treinador do pokémon/summon target, retornará falso (ou seja, não poderá targetar). Estou certo?

@homer

Você quer que a função seja executada repetidamente, num intervalo de 1 segundo? Se sua resposta for sim, você pode chamar a função dentro dela mesma com um addEvent. Por exemplo:

function Model()
    addEvent(Model, 1000)
end
Model()
Edited by zipter98
Link to comment
Share on other sites

Exato zipter, eu tava usando a function \/

function getStringOfTaskArray(array)
if type(array) ~= 'table' or not next(array) then return "" end

local result = {}
for _, value in ipairs(array) do
local thing, num = (type(value[1]) == 'string' and value[1] or getItemNameById(value[1])), value[2]
table.insert(result, (_ == 1 and "" or ", ")..num.." "..thing..(num == 1 and "" or "s"))
end
result[#result] = " and"..(result[#result]:sub(2,#result[#result]))
return table.concat(result)
end

function getVitalityByMaster(cid)
if not isCreature(cid) then return 0 end
local ball = getPlayerSlotItem(cid, 8).uid
if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end
return pokes[getItemAttribute(ball, 'poke')].vitality * (getPlayerLevel(cid) + (getItemAttribute(ball, 'boost') or 0))
end

function onPokeHealthChange(cid, zerar)
if not isCreature(cid) then return true end
if zerar then doPlayerSendCancel(cid, '#ph#,0,0') end
local ball = getPlayerSlotItem(cid, 8).uid
if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end

if #getCreatureSummons(cid) >= 1 and getPlayerStorageValue(cid, 212124) <= 0 then --alterado v1.6
local pokemon = getCreatureSummons(cid)[1]
local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))
doItemSetAttribute(ball, "hp", pokelife)
end

local rd = 1 - (tonumber(getItemAttribute(ball, "hp")))
local maxHp = HPperVITsummon * getVitalityByMaster(cid)
local hp = maxHp -(maxHp * rd)
doPlayerSendCancel(cid, '#ph#,'.. math.floor(hp) ..','.. math.floor(maxHp))
end 

só que ela nao atualiza na hora que o poke leva um hit. Por isso o addevent, obrigado, se poder dar alguma ideia.

Link to comment
Share on other sites

Sim e exatamente isso Mais quando eu testo no server ele praticamente ignora e so sai a msg que "nao pode atacar o proprio time"

O erro está nessa parte:

	if getPlayerStorageValue(getCreatureMaster(target), 6666) == 1 and getPlayerStorageValue(cid, 6666) == 1 then
		doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time")
	elseif getPlayerStorageValue(getCreatureMaster(target), 6667) == 1 and getPlayerStorageValue(cid, 6667) == 1 then
		doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time")
		return false
	end

Note que você só colocar return false no elseif, quando o primeiro if tem condição verdadeira, ele executa o bloco e continua a execução do restante nos escopos abaixo(após o end)

 

Solução:

	if getPlayerStorageValue(getCreatureMaster(target), 6666) == 1 and getPlayerStorageValue(cid, 6666) == 1 then
		doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time")
                return false
	elseif getPlayerStorageValue(getCreatureMaster(target), 6667) == 1 and getPlayerStorageValue(cid, 6667) == 1 then
		doPlayerSendCancel(cid, "Nao Pode Atacar Pokemon ou Player Do Mesmo Time")
		return false
	end
Link to comment
Share on other sites

Galera to com um problema poderiam min ajudar?

É o seguinte estou usando a função onCombat(cid, target) nela eu coloquei uma condição retornar false caso o cid e o target tenham a mesma storage, está funcionado, porém se o cid estiver em party com um player X que não tem essa storage, mas um player Y que tem essa storage estiver perto e o cid usar uma magia de área ele pega pk devido o player Y.

Link to comment
Share on other sites

Galera to com um problema poderiam min ajudar?

É o seguinte estou usando a função onCombat(cid, target) nela eu coloquei uma condição retornar false caso o cid e o target tenham a mesma storage, está funcionado, porém se o cid estiver em party com um player X que não tem essa storage, mas um player Y que tem essa storage estiver perto e o cid usar uma magia de área ele pega pk devido o player Y.

A callback onCombat não engloba ataques em area, para ataques em area use:

 

onAreaCombat(cid, tileItem, tilePosition, isAggressive)
Link to comment
Share on other sites

 

Galera to com um problema poderiam min ajudar?

É o seguinte estou usando a função onCombat(cid, target) nela eu coloquei uma condição retornar false caso o cid e o target tenham a mesma storage, está funcionado, porém se o cid estiver em party com um player X que não tem essa storage, mas um player Y que tem essa storage estiver perto e o cid usar uma magia de área ele pega pk devido o player Y.

A callback onCombat não engloba ataques em area, para ataques em area use:

onAreaCombat(cid, tileItem, tilePosition, isAggressive)

como faço uma comparação entre o cid e quem a magia pegou com essa função que você disse?

Link to comment
Share on other sites

×
×
  • Create New...