Ir para conteúdo
  • 0

Vocações sumonar quantidades diferente de monstros.


gabriel28

Pergunta

Gostaria de uma ajuda com isso. Queria que vocações sumonassem quantidades diferentes de monstros. Por exemplo: Druid sumona até 4 e Sorc até 2.
Tenho um script pra por nas source, mas ele não é compatível com a que uso, que é a tfs 0.3.6. Se alguém souber modificá-la, só pedir pra eu mandar.
Se possível, algum pra fazer vocações poderem sumonar alguns monstros e outra não. Por exemplo: Druid sumona Dragon e Sorc não.

 

De ante mão, obrigado a quem puder ajudar.


up


up

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

A parte de implementar o custo da mana? Sim, sim. Dá pra usar:

local storage = 79845 --storage para o exhaustion
local tempo = 5 --em segundos

local monsters = {
[1] = {summons = {"rat", "dragon"}, maxSummons = 2, minLevel = 10, mana = 50},
[2] = {summons = {"rat", "dragon"}, maxSummons = 4, minLevel = 10, mana = 50},
[5] = {summons = {"rat", "dragon"}, maxSummons = 4, minLevel = 10, mana = 500},
[6] = {summons = {"rat", "dragon"}, maxSummons = 6, minLevel = 10, mana = 500}
}

function onSay(cid, words, param, channel)
if exhaustion.check(cid, storage) then
doPlayerSendTextMessage(cid, 22, "You are exhausted.")
return true
end
	--Player Status
	local playerpos = getPlayerPosition(cid)

	for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do
		if (param == v)then

			if (monsters[getPlayerVocation(cid)]) and #getCreatureSummons(cid) >= monsters[getPlayerVocation(cid)].maxSummons then
				return doPlayerSendCancel(cid, "Você já tem sumons demais.")
			else
			--Summon
				if getPlayerLevel(cid) < monsters[getPlayerVocation(cid)].minLevel then
					return doPlayerSendCancel(cid, "Level insuficiente.")
				else
					doConvinceCreature(cid, doCreateMonster(param, playerpos))
					doPlayerAddMana(cid, -monsters[getPlayerVocation(cid)].mana, false)
					exhaustion.set(cid, storage, tempo)
					doSendMagicEffect(playerpos, 2)
				end
			return true
			end
		else
		doPlayerSendCancel(cid, "You can't summon this monster.")
		end
	end
return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

Tá ai:

 

 

 

1. spells.cpp

Find:

    if (player->getSummonCount() >= 2) {
       player->sendCancel("You cannot summon more creatures.");
       g_game.addMagicEffect(player->getPosition(), NM_ME_POFF);
       return false;
     }

Replace it with:

    if (player->getSummonCount() >= player->getMaxSummons()) {
       player->sendCancel("You cannot summon more creatures.");
       g_game.addMagicEffect(player->getPosition(), NM_ME_POFF);
       return false;
     }
---------------------------------------------------------------------------------

2. vocations.h

Find:

uint32_t getCapGain() const {
     return gainCap;
}

After it paste:

uint32_t getMaxSummons() const {
     return maxSummons;
}

Find:

uint32_t gainCap;

After it paste:

uint32_t maxSummons;
---------------------------------------------------------------------------------

3. vocations.cpp

Find:

          if (readXMLInteger(p, "gaincap", intVal)) {
             voc->gainCap = intVal;
           }

After it paste:

if(readXMLInteger(p, "maxsummons", intVal)) {
     voc->maxSummons = intVal;
}
Find:

gainCap = 5;

After it paste:

maxSummons = 2;
---------------------------------------------------------------------------------

4. player.h

Find:

    Vocation* getVocation() const {
       return vocation;
     }

After it paste:

uint32_t getMaxSummons() const {
     return vocation->getMaxSummons();
} 

 

 

Editado por gabrielvs
Link para o comentário
Compartilhar em outros sites

  • 0

Deixemos de lado a source...

Atualmente como está o "esquema" de summons em seu server?

Diga a quantidade de summons q cada vocação consegue fazer. Diga se tem numero ilimitado de summons, se tem um numero limitado... Se cada vocação já tem um numero maximo de summons e qual é esse numero atualmente.

Link para o comentário
Compartilhar em outros sites

  • 0

Deixemos de lado a source...

 

Atualmente como está o "esquema" de summons em seu server?

 

Diga a quantidade de summons q cada vocação consegue fazer. Diga se tem numero ilimitado de summons, se tem um numero limitado... Se cada vocação já tem um numero maximo de summons e qual é esse numero atualmente.

 

É um server Global, mas eu queria dar uma dinâmica maior, então estou mexendo muito. Ambos, Sorc, Druid, MS e ED, sumonam 2 monstros no máximo. Eu gostaria de por as vocações sumonando quantidades diferentes, EX: Sorc sumonando 2, Druid 4, MS 4 e ED 6.

Esse código que coloquei, permite que no vocation.xml, acrescente maxsummons="0" depois de gaincap="0", em cada vocação, tornando possível o que exemplifiquei. O problema é que ele é feito para outro TFS, o 0.4.5972, o que uso é o 0.4 Dev rev3884.

Link para o comentário
Compartilhar em outros sites

  • 0

Ok... Vamos fazer assim: criar uma talkaction. Vamos primeiro fazer o teste pra ver se a talkaction está funcionando corretamente antes de substituí-la de vez pela spell normal.

 

Crie uma talkaction e ponha este script nela:

 

local maxSorc = 2
local maxMS = 4

local maxDruid = 4
local maxED = 6

function onCastSpell(cid, param)
		--Player Status
	   local playerpos = getPlayerPosition(cid)
	   local health = getCreatureHealth(cid)
	   local maxhp = getCreatureMaxHealth(cid)
	local t = string.explode(param, ",")
	if t[1] ~= nil then
		local summon = doSummonCreature(t[1], playerpos)

		if getPlayerVocation(cid) == 1 and #getCreatureSummons(cid) >= maxSorc then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 2 and #getCreatureSummons(cid) >= maxDruid then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 5 and #getCreatureSummons(cid) >= maxMS then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 6 and #getCreatureSummons(cid) >= maxED then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")
		end
	   --Summon
	   doConvinceCreature(cid, summon)
	   setCreatureMaxHealth(summon, maxhp)
	   doCreatureAddHealth(summon, health)
	   doSendMagicEffect(playerpos, 2)
	return true
	else
	doPlayerSendCancel(cid,7,'Sorry not enough parameters.')
	end
end

 



Se ñ souber como criar uma talkaction, avise. (Ou então dê uma pesquisada rápida aqui no fórum que vc deve achar como fazer)

 

*ps: estou meio enferrujado mas creio que o script ñ contém erro... A questão é se esse script irá conseguir "burlar" a source...

Link para o comentário
Compartilhar em outros sites

  • 0

Ok... Vamos fazer assim: criar uma talkaction. Vamos primeiro fazer o teste pra ver se a talkaction está funcionando corretamente antes de substituí-la de vez pela spell normal.

 

Crie uma talkaction e ponha este script nela:

 

 

local maxSorc = 2
local maxMS = 4

local maxDruid = 4
local maxED = 6

function onCastSpell(cid, param)
		--Player Status
	   local playerpos = getPlayerPosition(cid)
	   local health = getCreatureHealth(cid)
	   local maxhp = getCreatureMaxHealth(cid)
	local t = string.explode(param, ",")
	if t[1] ~= nil then
		local summon = doSummonCreature(t[1], playerpos)

		if getPlayerVocation(cid) == 1 and #getCreatureSummons(cid) >= maxSorc then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 2 and #getCreatureSummons(cid) >= maxDruid then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 5 and #getCreatureSummons(cid) >= maxMS then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 6 and #getCreatureSummons(cid) >= maxED then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")
		end
	   --Summon
	   doConvinceCreature(cid, summon)
	   setCreatureMaxHealth(summon, maxhp)
	   doCreatureAddHealth(summon, health)
	   doSendMagicEffect(playerpos, 2)
	return true
	else
	doPlayerSendCancel(cid,7,'Sorry not enough parameters.')
	end
end

 

 

 

Se ñ souber como criar uma talkaction, avise. (Ou então dê uma pesquisada rápida aqui no fórum que vc deve achar como fazer)

 

*ps: estou meio enferrujado mas creio que o script ñ contém erro... A questão é se esse script irá conseguir "burlar" a source...

 

Deu 'event onSay not fount'.

Link para o comentário
Compartilhar em outros sites

  • 0

Putz, erro meu.

local maxSorc = 2
local maxMS = 4

local maxDruid = 4
local maxED = 6

function onSay(cid, param)
		--Player Status
	   local playerpos = getPlayerPosition(cid)
	   local health = getCreatureHealth(cid)
	   local maxhp = getCreatureMaxHealth(cid)
	local t = string.explode(param, ",")
	if t[1] ~= nil then
		local summon = doSummonCreature(t[1], playerpos)

		if getPlayerVocation(cid) == 1 and #getCreatureSummons(cid) >= maxSorc then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 2 and #getCreatureSummons(cid) >= maxDruid then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 5 and #getCreatureSummons(cid) >= maxMS then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 6 and #getCreatureSummons(cid) >= maxED then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")
		end
	   --Summon
	   doConvinceCreature(cid, summon)
	   setCreatureMaxHealth(summon, maxhp)
	   doCreatureAddHealth(summon, health)
	   doSendMagicEffect(playerpos, 2)
	return true
	else
	doPlayerSendCancel(cid,7,'Sorry not enough parameters.')
	end
end
Link para o comentário
Compartilhar em outros sites

  • 0

Não estou manjando em fazer a tag no xml hahaha

Coloquei assim: <talkaction words="!maxsummon" event="script" value="maxsummon.lua"/>
Deu erro no ConviceCreature, CreatureAddHealth, CreatureMaxHealth, tudo sendo 'creature not found'

Link para o comentário
Compartilhar em outros sites

  • 0


local maxSorc = 2

local maxMS = 4

 

local maxDruid = 4

local maxED = 6

 

function onSay(cid, param)

--Player Status

local playerpos = getPlayerPosition(cid)

 

local t = string.explode(param, ",")

if t[1] ~= nil then

if getPlayerVocation(cid) == 1 and #getCreatureSummons(cid) >= maxSorc then

return doPlayerSendCancel(cid, "Você já tem sumons demais.")

 

elseif getPlayerVocation(cid) == 2 and #getCreatureSummons(cid) >= maxDruid then

return doPlayerSendCancel(cid, "Você já tem sumons demais.")

 

elseif getPlayerVocation(cid) == 5 and #getCreatureSummons(cid) >= maxMS then

return doPlayerSendCancel(cid, "Você já tem sumons demais.")

 

elseif getPlayerVocation(cid) == 6 and #getCreatureSummons(cid) >= maxED then

return doPlayerSendCancel(cid, "Você já tem sumons demais.")

end

--Summon

doConvinceCreature(cid, doCreateMonster(t[1], playerpos))

doSendMagicEffect(playerpos, 2)

return true

else

doPlayerSendCancel(cid,7,'Sorry not enough parameters.')

end

end

 

Editado por Danihcv
Link para o comentário
Compartilhar em outros sites

  • 0
local maxSorc = 2
local maxMS = 4

local maxDruid = 4
local maxED = 6

function onSay(cid, param)
	--Player Status
	local playerpos = getPlayerPosition(cid)
	   
	local t = string.explode(param, ",")
	if t[1] ~= nil then
		if getPlayerVocation(cid) == 1 and #getCreatureSummons(cid) >= maxSorc then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 2 and #getCreatureSummons(cid) >= maxDruid then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 5 and #getCreatureSummons(cid) >= maxMS then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")

		elseif getPlayerVocation(cid) == 6 and #getCreatureSummons(cid) >= maxED then
			return doPlayerSendCancel(cid, "Você já tem sumons demais.")
		end
	   --Summon
	   doConvinceCreature(cid, doCreateMonster(t[1], playerpos))
	   doSendMagicEffect(playerpos, 2)
	return true
	else
	doPlayerSendCancel(cid,7,'Sorry not enough parameters.')
	end
end

 

Mas a tag está certa? Estou usando assim: !maxsummon fire elemental

Link para o comentário
Compartilhar em outros sites

  • 0

<LuaDoCreateMoster> monster with name '!maxsummon' not found
<LuaDoConvinceCreature> Creature not found

Esses são os erros. Estou usando a talkaction assim: !maxsummon fire elemental e !maxsummon "fire elemental

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, ok... Paciencia devemos ter... Ainda estou desenferrujando... sshuasuhsauh

local maxSorc = 2
local maxMS = 4

local maxDruid = 4
local maxED = 6

function onSay(cid, words, param, channel)
	--Player Status
   local playerpos = getPlayerPosition(cid)

	if getPlayerVocation(cid) == 1 and #getCreatureSummons(cid) >= maxSorc then
		return doPlayerSendCancel(cid, "Você já tem sumons demais.")

	elseif getPlayerVocation(cid) == 2 and #getCreatureSummons(cid) >= maxDruid then
		return doPlayerSendCancel(cid, "Você já tem sumons demais.")

	elseif getPlayerVocation(cid) == 5 and #getCreatureSummons(cid) >= maxMS then
		return doPlayerSendCancel(cid, "Você já tem sumons demais.")

	elseif getPlayerVocation(cid) == 6 and #getCreatureSummons(cid) >= maxED then
		return doPlayerSendCancel(cid, "Você já tem sumons demais.")
		
	if (param == '') then
	doPlayerSendCancel(cid,7,'Sorry not enough parameters.')
	return true
	end
        --Summon
        doConvinceCreature(cid, doCreateMonster(param, playerpos))
        doSendMagicEffect(playerpos, 2)
        return true
        end
end
Editado por Danihcv
Link para o comentário
Compartilhar em outros sites

  • 0

 

Ok, ok... Paciencia devemos ter... Ainda estou desenferrujando... sshuasuhsauh

local maxSorc = 2
local maxMS = 4

local maxDruid = 4
local maxED = 6

function onSay(cid, words, param, channel)
	--Player Status
   local playerpos = getPlayerPosition(cid)

	if getPlayerVocation(cid) == 1 and #getCreatureSummons(cid) >= maxSorc then
		return doPlayerSendCancel(cid, "Você já tem sumons demais.")

	elseif getPlayerVocation(cid) == 2 and #getCreatureSummons(cid) >= maxDruid then
		return doPlayerSendCancel(cid, "Você já tem sumons demais.")

	elseif getPlayerVocation(cid) == 5 and #getCreatureSummons(cid) >= maxMS then
		return doPlayerSendCancel(cid, "Você já tem sumons demais.")

	elseif getPlayerVocation(cid) == 6 and #getCreatureSummons(cid) >= maxED then
		return doPlayerSendCancel(cid, "Você já tem sumons demais.")
		
	if (param == '') then
	doPlayerSendCancel(cid,7,'Sorry not enough parameters.')
	return true
	end
        --Summon
        doConvinceCreature(cid, doCreateMonster(param, playerpos))
        doSendMagicEffect(playerpos, 2)
        return true
        end
end

 

 

Perfeito! Estava faltando um 'end' para fechar o primeiro 'if', depois que acrescentei, o último 'end' ficou avulso, dai tirei e funcionou. (ajeitei com o pouco de conhecimento que tenho)

Agora falta por pra magia, porque está sem exaust e não consome mana.

 

EDIT: Tem um problema, ele sumona qualquer mostro no jogo, e aqueles que não são sumonados pelo utevo res, vem como mostro selvagem.

Editado por gabrielvs
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...