Poste o script para alguém modificar para você...
Vocações sumonar quantidades diferente de monstros.
Por gabriel28, 23 de dez. de 2015 em Scripts
info
Grupo: Marquês
Registrado: 25/09/10
Posts: 1.3k
Reputação: +446
Gênero: Masculino

info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

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 Dezembro 24 por gabrielvs
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

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.
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

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.
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

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...
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

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'.
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

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
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

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'
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

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 Dezembro 26 por Danihcv
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

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
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

Sim, está correta.
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

<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
info
Grupo: Conde
Registrado: 07/04/15
Posts: 926
Reputação: +335
Gênero: Masculino

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 Dezembro 26 por Danihcv
info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian

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 Dezembro 26 por gabrielvs



info
Grupo: Visconde
Registrado: 26/08/10
Posts: 431
Reputação: +60
Gênero: Masculino
Char no Tibia: Gabriel Rookgaardian
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