Jump to content
  • 0

Summon Creature


Bague

Question

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á..

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

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"/>

 

Link to comment
Share on other sites

  • 0

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 ?

Link to comment
Share on other sites

  • 0

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

Edited by MatheusMkalo
Link to comment
Share on other sites

  • 0

 

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

Edited by Bague
Link to comment
Share on other sites

  • 0

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/

Edited by MatheusMkalo
Link to comment
Share on other sites

  • 0

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

 

 

Edited by Bague
Link to comment
Share on other sites

  • 0
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.

Edited by MatheusMkalo
Link to comment
Share on other sites

  • 0
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)

Link to comment
Share on other sites

  • 0

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".

Link to comment
Share on other sites

  • 0

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

Edited by Bague
Link to comment
Share on other sites

×
×
  • Create New...