Arma que só ataca Player

iagonp
Por iagonp
em Scripts
  • 1
  • 2

iagonp

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/01/11Posts: 34Char no Tibia: Sem Char

Galera alguém sabe como colocar uma condição na arma para quando o player atacar um monstro hitar no máximo 800 e se atacar player o hite é calculado pelo Level e ML, dai o hite iria ser mais que 9k.

 

Ex: Player com a arma editada ataca outro player a arma calula o Level e ML como se fosse uma skill para tirar o dano aproximado de 9000, mais se o player ataca um monstro o dano será apenas 800 ou calcular com o Level e ML mais o hite seria próximo a 800.

 

Tem como fazer uma arma assim? Seria tipo uma arma PVP, que serviria mais para x1 ou WAR do que UPA.

 

Alguém teria ideia de como fazer se for possível? Agradeço!

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

iagonp

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/01/11Posts: 34Char no Tibia: Sem Char

É porque Wand, Livro e Rod não conta ML na hora de atacar.. Por isso queria o calculo do ML e Skill e Level.

 

Ex: Wand, Rod e Livro teria a formula Level * ML. Axe, Sword, Club e Crossbow teria a formula Level * Skill.

 

Se deixar padrão as wand não vão contar o ML que seria o certo já que é mage.

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

Entendi, mas testa ai o que eu fiz pra armas corpo-a-corpo so pra gente ter uma base:


@EDIT - tava com um erro mas arrumei, testa ai.


local id_da_arma = 4322 -- id da SWORD
local dano = 100,1000 -- dano minimo e maximo

function onCombat(cid, target)
    local formula = getPlayerLevel(cid) * getPlayerSkillLevel(cid,2)
    
 
    if getPlayerSlotItem(cid,5).itemid == id_da_arma or getPlayerSlotItem(cid,6).itemid == id_da_arma then 
        if isMonster(target) then     
            if combat == COMBAT_PHYSICALDAMAGE then
                doCreatureAddHealth(target, -math.random(dano))
                return false
            end
        end
   
    elseif isPlayer(cid) and combat == COMBAT_PHYSICALDAMAGE then
        doCreatureAddHealth(target, -formula)
        return false
    end
    return true
end

iagonp

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/01/11Posts: 34Char no Tibia: Sem Char

Não funcionou.. Bateu 2100 no monstro! =/

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

Não funcionou.. Bateu 2100 no monstro! =/

 

Testou esse ultimo que eu editei?

 

 

@EDIT - Esqueci de avisar que eh em creaturescripts que vc tem que por isso.

 

TAG

 

<event type="combat" name="AttackMonster" script="SeuSCRIPT.lua"/>
E tem que registar no login.lua
registerCreatureEvent(cid, "AttackMonster")

iagonp

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/01/11Posts: 34Char no Tibia: Sem Char

Testei agora novamente, mais continuo do mesmo jeito. Coloquei no creaturescript e não deu nenhum erro, também coloquei no login o registro.

 

No monstro bate até 2k e pouco. =/

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

Zaruss

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 31/08/13Posts: 93Char no Tibia: Evarin Thin

troca essa tag do login.lua

registerCreatureEvent(cid, "AttackMonster")

 

por essa(nao sei se vai funcionar)

registerCreatureEvent(target, "AttackMonster")

Killua

Vivendo e Aprendendo
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 29/04/09Posts: 904Char no Tibia: Jabuti Selvagem

craigmabbit

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 05/10/12Posts: 245

amoeba usa onTarget que vai funcionar ^^

iagonp

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/01/11Posts: 34Char no Tibia: Sem Char

Estou no aguardo para! ^^

Omega

o/
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 17/06/07Posts: 1165Gênero: MasculinoChar no Tibia: Nenhum

amoeba usa onTarget que vai funcionar ^^

 

A funcao q eu usei ta errada, teria q ser a onStatsChange. Dai do jeito que o Zaruss falou eh registerCreatureEvent(attacker, "AttackMonster")

To tentando aqui ainda...

 

Jovens padawans, pelo que eu entendi, fica muito mais fácil fazer usando weapons:

 

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)

function getCombatFormulas(cid, lv, maglv)
	local formula_min = -((lv*2 + maglv*10) * 0.2)
	local formula_max = -((lv*2 + maglv*10) * 0.5)
	return formula_min, formula_max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas")

function onUseWeapon(cid)
	local target = getCreatureTarget(cid)
	if isMonster(target) then
		doSendDistanceShoot(getThingPos(cid), getThingPos(target), CONST_ANI_ENERGY)
		doTargetCombatHealth(cid, target, COMBAT_ENERGYDAMAGE, -200, -800, CONST_ME_ENERGYHIT)
		return true
	end
	local var = numberToVariant(getCreatureTarget(cid))
	return doCombat(cid, combat, var)
end

 

 

E registra no weapons.xml:

<wand id="id da wand" level="level para usar" mana="mana que gasta com cada hit" event="script" value="wandtry.lua">
	<vocation id="1"/>
	<vocation id="5"/>
	<vocation id="2"/>
	<vocation id="3"/>
	<vocation id="4"/>
	<vocation id="10" showInDescription="0"/>
</wand>

Aí é só mudar o script pra usar a fórmula que você quiser e ajeitar as tags pra suas necessidades. Então é só felicidade.

No caso, isso é uma rod ou wand que dá dano de energy, adapte pro que você preferir.

Ah, salva esse código em weapons/scripts como wandtry.lua

iagonp

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 03/01/11Posts: 34Char no Tibia: Sem Char

 

amoeba usa onTarget que vai funcionar ^^

 

A funcao q eu usei ta errada, teria q ser a onStatsChange. Dai do jeito que o Zaruss falou eh registerCreatureEvent(attacker, "AttackMonster")

To tentando aqui ainda...

 

Jovens padawans, pelo que eu entendi, fica muito mais fácil fazer usando weapons:

 

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)

function getCombatFormulas(cid, lv, maglv)
	local formula_min = -((lv*2 + maglv*10) * 0.2)
	local formula_max = -((lv*2 + maglv*10) * 0.5)
	return formula_min, formula_max
end

setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "getCombatFormulas")

function onUseWeapon(cid)
	local target = getCreatureTarget(cid)
	if isMonster(target) then
		doSendDistanceShoot(getThingPos(cid), getThingPos(target), CONST_ANI_ENERGY)
		doTargetCombatHealth(cid, target, COMBAT_ENERGYDAMAGE, -200, -800, CONST_ME_ENERGYHIT)
		return true
	end
	local var = numberToVariant(getCreatureTarget(cid))
	return doCombat(cid, combat, var)
end

 

 

E registra no weapons.xml:

<wand id="id da wand" level="level para usar" mana="mana que gasta com cada hit" event="script" value="wandtry.lua">
	<vocation id="1"/>
	<vocation id="5"/>
	<vocation id="2"/>
	<vocation id="3"/>
	<vocation id="4"/>
	<vocation id="10" showInDescription="0"/>
</wand>

Aí é só mudar o script pra usar a fórmula que você quiser e ajeitar as tags pra suas necessidades. Então é só felicidade.

No caso, isso é uma rod ou wand que dá dano de energy, adapte pro que você preferir.

Ah, salva esse código em weapons/scripts como wandtry.lua

 

 

Perfeito cara, exatamente o que eu queria...

Contando Level * ML para mages e Level * Skill para físicos.. Você é o cara, rep+ para você e outro para o amoeba13 por tentar fazer. Valeu pela atenção e muito obrigado!

  • 1
  • 2