Summon Creature

Bague
Por Bague
em Scripts

Bague

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 24/08/15Posts: 23

Bom galera , estou precisando de um script de summon creature, que invoque e retire o monstro (Configurável) por comando (Exemplo: !Demon)

 

 

 

Aguardo respostas, Grato desde já..

MatheusGlad

<~~> Scripter <~~>
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 09/09/09Posts: 528Char no Tibia: Emekalo Makalo

Retire o monstro depois de um tempo ou quando voce usar o comando denovo?

Yours Mkalo :)

Bague

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 24/08/15Posts: 23

Retire o monstro depois de um tempo ou quando voce usar o comando denovo?

quando usar o comando denovo.

MatheusGlad

<~~> Scripter <~~>
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 09/09/09Posts: 528Char no Tibia: Emekalo Makalo

Use /create Demon pra sumonar o demon e /create demon denovo pra remover, caso o demon esteja morto ele vai sumonar outro.

Funciona com varios monstros ao mesmo tempo.

 

data\talkactions\scripts\nomedoscript.lua:

function setGlobalStorageTable(storage, tab)
	local tabstr = "&"
	for i,x in pairs(tab) do
		tabstr = tabstr .. i .. "," .. x .. ";"
	end
	setGlobalStorageValue(storage, tabstr:sub(1, #tabstr-1))
end

function getGlobalStorageTable(storage)
	local tabstr = getGlobalStorageValue(storage)
	local tab = {}
	if type(tabstr) ~= "string" then
		return {}
	end

	if tabstr:sub(1,1) ~= "&" then
		return {}
	end

	local tabstr = tabstr:sub(2, #tabstr)
	local a = string.explode(tabstr, ";")
	for i,x in pairs(a) do
		local b = string.explode(x, ",")
		tab[tonumber(b[1]) or b[1]] = tonumber(b[2]) or b[2]
	end
	return tab
end


function onSay(cid, words, param, channel)
	local pos = getCreaturePosition(cid)
	local globaltab = getGlobalStorageTable(14023)
	if not globaltab[param:lower()] or not isCreature(globaltab[param:lower()]) then
		local monster = doCreateMonster(param, pos)
		if monster then
			globaltab[param:lower()] = monster
			setGlobalStorageTable(14023, globaltab)
		else
			doPlayerSendDefaultCancel(cid, (monster == false and RETURNVALUE_NOTPOSSIBLE or RETURNVALUE_NOTENOUGHROOM))
		end
	else
		doRemoveCreature(globaltab[param:lower()])
		globaltab[param:lower()] = nil
		setGlobalStorageTable(14023, globaltab)
	end
	return true
end

tag:

<talkaction access="5" words="/create" event="script" value="nomedoscript.lua"/>

 

Yours Mkalo :)

Bague

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 24/08/15Posts: 23

Use /create Demon pra sumonar o demon e /create demon denovo pra remover, caso o demon esteja morto ele vai sumonar outro.

Funciona com varios monstros ao mesmo tempo.

 

 

 

 

Script funcionou perfeitamente, mais esqueci de colocar uma coisa no topico, que seria o monstro atacar o mesmo alvo do seu invocador e seguilo, tipo os "fire elemental" da magia utevo res.

 

teria como modificar ?

MatheusGlad

<~~> Scripter <~~>
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 09/09/09Posts: 528Char no Tibia: Emekalo Makalo

Tem um comando pra god fazer isso ja "/s" mas como ele nao remove:

function setGlobalStorageTable(storage, tab)
	local tabstr = "&"
	for i,x in pairs(tab) do
		tabstr = tabstr .. i .. "," .. x .. ";"
	end
	setGlobalStorageValue(storage, tabstr:sub(1, #tabstr-1))
end

function getGlobalStorageTable(storage)
	local tabstr = getGlobalStorageValue(storage)
	local tab = {}
	if type(tabstr) ~= "string" then
		return {}
	end

	if tabstr:sub(1,1) ~= "&" then
		return {}
	end

	local tabstr = tabstr:sub(2, #tabstr)
	local a = string.explode(tabstr, ";")
	for i,x in pairs(a) do
		local b = string.explode(x, ",")
		tab[tonumber(b[1]) or b[1]] = tonumber(b[2]) or b[2]
	end
	return tab
end


function onSay(cid, words, param, channel)
	local pos = getCreaturePosition(cid)
	local globaltab = getGlobalStorageTable(14023)
	if not globaltab[param:lower()] or not isCreature(globaltab[param:lower()]) then
		local monster = doCreateMonster(param, pos)
		if monster then
			doConvinceCreature(cid, monster)
			globaltab[param:lower()] = monster
			setGlobalStorageTable(14023, globaltab)
		else
			doPlayerSendDefaultCancel(cid, (monster == false and RETURNVALUE_NOTPOSSIBLE or RETURNVALUE_NOTENOUGHROOM))
		end
	else
		doRemoveCreature(globaltab[param:lower()])
		globaltab[param:lower()] = nil
		setGlobalStorageTable(14023, globaltab)
	end
	return true
end

Yours Mkalo :)

Bague

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 24/08/15Posts: 23

 

Tem um comando pra god fazer isso ja "/s" mas como ele nao remove:

 

 

Estou querendo de mais, mais esqueci dessa parte também (desculpa) que no casso seria. Somente players que tiver posse de um item em sua bag ou equipado (ItemID 9019) poderá usar o comando ? e não axei a parte de mudar o monstro aonde seria?

 

 

Obs: Script 100% Funcional mano, valeu pela atenção

MatheusGlad

<~~> Scripter <~~>
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 09/09/09Posts: 528Char no Tibia: Emekalo Makalo

Vei ~~ não é mais facil fazer quando der use no item sumonar o monstro e quando der use retirar ele? Do jeito que eu fiz ali era pra sair qualquer monstro do server pra um god usar (Pelo menos foi o que eu entendi do seu post muito vago...)

 

Da proxima vez tenta formular sua ideia 100% antes de postar:

http://www.xtibia.com/forum/topic/234500-regras-pedidos-e-duvidas-scripting/

Yours Mkalo :)

Bague

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 24/08/15Posts: 23

Vei ~~ não é mais facil fazer quando der use no item sair o monstro? Do jeito que eu fiz ali era pra sair qualquer monstro do server pra um god usar (Pelo menos foi o que eu entendi do seu post muito vago...)

 

Da proxima vez tenta formular sua ideia 100% antes de postar:

http://www.xtibia.com/forum/topic/234500-regras-pedidos-e-duvidas-scripting/

é como falei, desculpa ... então dei uma pesquisada e axei este aqui, que sumona o montro pelo item, mais tem um probleminha, o player não precisa estar com item em sua bp ou equipado para invocar, basta clicar em qualquer lugar que ira sumar..

 

Script.

 

 

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

local dolls = {
[11256] = {pet = "Demon"},
[11207] = {pet = "Ashmunrah"},
[11144] = {pet = "Demon"},
[9019] = {pet = "Vampire"},
}
local go = dolls[item.itemid]
local summon = getCreatureSummons(cid)
---------------------------------------------------
if #summon >= 1 then
for _, pid in ipairs(getCreatureSummons(cid)) do
doRemoveCreature(pid)
doCreatureSay(cid, "Can go rest ["..go.pet.."]", TALKTYPE_ORANGE_1)
end
return true
end
doConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid)))
doCreatureSay(cid, "Let battle ["..go.pet.."]", TALKTYPE_ORANGE_1)
return true

end

 

 

MatheusGlad

<~~> Scripter <~~>
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 09/09/09Posts: 528Char no Tibia: Emekalo Makalo
function getContainerItems(containeruid)
    local items = {}
    local containers = {}
    if type(getContainerSize(containeruid)) ~= "number" then
        return false
    end
    for slot = 0, getContainerSize(containeruid)-1 do
        local item = getContainerItem(containeruid, slot)
        if item.itemid == 0 then
            break
        end
        if isContainer(item.uid) then
            table.insert(containers, item.uid)
        end
        table.insert(items, item)
    end
    if #containers > 0 then
        for i,x in ipairs(getContainerItems(containers[1])) do
            table.insert(items, x)
        end
        table.remove(containers, 1)
    end
    return items
end

function playerHasItemEquipped(cid, itemuid)
    if not isPlayer(cid) then
        return false
    end

    for i = CONST_SLOT_FIRST, CONST_SLOT_LAST do
        if getPlayerSlotItem(cid, i).uid == itemuid then
            return true
        end
    end
end


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

local dolls = {
[11256] = {pet = "Safira"},
[11207] = {pet = "Ashmunrah"},
[11144] = {pet = "Demon"},
[9019] = {pet = "Vampire"},
}
local go = dolls[item.itemid]
local summon = getCreatureSummons(cid)


---------------------------------------------------
	local backpack = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK).uid
	if table.find(getContainerItems(backpack), item.uid) or playerHasItemEquipped(cid, item.uid) then
		if #summon >= 1 then
			for _, pid in ipairs(getCreatureSummons(cid)) do
				doRemoveCreature(pid)
				doCreatureSay(cid, "Can go rest ["..go.pet.."]", TALKTYPE_ORANGE_1)
			end
			return true
		end

		doConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid)))
		doCreatureSay(cid, "Let battle ["..go.pet.."]", TALKTYPE_ORANGE_1)
		return true
	end
end

Nao testei mas deve funcionar.

Yours Mkalo :)

Bague

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 24/08/15Posts: 23
Nao testei mas deve funcionar.

A parte de sumonar o montro com o item equipado esta perfeita! mais a parte de remover o montro quando não estiver usando o item não funcionou (nem sei se isso é possível)

MatheusGlad

<~~> Scripter <~~>
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 09/09/09Posts: 528Char no Tibia: Emekalo Makalo

Não é possivel sem editar sources, somente se o item realmente estiver equipado em algum slot pra usar a function onDeEquip, nao funcionaria dentro da backpack.

Yours Mkalo :)

Bague

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 24/08/15Posts: 23

Não é possivel sem editar sources, somente se o item realmente estiver equipado em algum slot pra usar a function onDeEquip, nao funcionaria dentro da backpack.

também percebi isso. por isso pedi se possível em "comando".

MatheusGlad

<~~> Scripter <~~>
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 09/09/09Posts: 528Char no Tibia: Emekalo Makalo

Do mesmo jeito o player poderia tirar o item e o summon nao ia desaparecer.

Yours Mkalo :)

Bague

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 24/08/15Posts: 23

Do mesmo jeito o player poderia tirar o item e o summon nao ia desaparecer.

Mais pelo o comando o player ganharia um item, ao dar use no item ele ganharia uma storage (item sumiria de seu personagem), assim , somente players com esta "Storage" poderiam usar o comando.

 

Essa era a ideia principal mais fui infeliz ao me explicar no tópico. kkkk laugh.png