Ir para conteúdo

Featured Replies

Postado

Iae TK,

queria pedir 4 scripts que seja configurável....

ele e assim voce equipa x item dai ele te da 4 spells ao clicar com o direito nele, e esse item te da x buff 

1-raio: cara hit no inimigo tem 50% de chance de causar dano em area mas so sai effect onde tiver bixo/player

2- fogo: deixa o player/bixo queimando(configuravel o dano tbm)

3-planta: cura o player em porcentagem de vida. com porcentagem de chance de cura

4-agua: da ao player que uso dano em volta dele, tipo exori mais fica por 30 sec

obs: se for dificil fazer esses scripts, so queria um que mostra-se 4 magias e desse um hit com porcentagem de chance de ativar esse hit como se fosse um double hit mas com o elemento do item...

                                                 Projects are being developed....

  • Respostas 6
  • Visualizações 555
  • Created
  • Última resposta

Top Posters In This Topic

Postado

@ahrizinhas2,

Antes de terminar o script certinho eu gostaria que você me desse um feedback sobre o que devo mudar, o que está faltando, se está  tudo errado, etc. achei o tópico um quanto confuso.

 

P.S.: Ainda tenho que mexer algumas coisas pra facilitar a configuração do sistema

 

Em data/creaturescripts/creaturescripts.xml adicione a tag:

	<event type="attack" name="PlayerAttack" event="script" value="weapon.lua"/>

Em data/creaturescripts/scripts crie um arquivo chamado weapon.lua e cole isto dentro dele:

local weaponsConfig = {
	storage = 23000,
	lightning = {
		lightChance = 50,
		lightEffect = 11,
	},
	fire = {
		burnInterval = 1, -- seconds
		burnDamage = 5,
		burnTicks = 5,
		burnEffect = 15,
	},
	plant = {
		healPercent = 25,
		healChance = 25,
		healEffect = 45,
	},
	water = {
		cooldown = 30,
	}
}

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)

local condition = createConditionObject(CONDITION_FIRE)
setConditionParam(condition, CONDITION_PARAM_DELAYED, 1)
addDamageCondition(condition, 10, 2000, -10)
setCombatCondition(combat, condition)
------------------------------------------------------------------------
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
--setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -0.6, -30, -1.2, 0)

local arr = {
	{0, 0, 0},
	{1, 3, 1},
	{0, 0, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat1, area)
------------------------------------------------------------------------
local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, 1)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -0.6, -30, -1.2, 0)

local arr2 = {
	{1, 1, 1},
	{1, 2, 1},
	{1, 1, 1}
}

local area = createCombatArea(arr2)
setCombatArea(combat2, area)
------------------------------------------------------------------------

function onAttack(cid, target)
	storageStatus = getPlayerStorageValue (cid, weaponsConfig.storage)
	if storageStatus == 0 then
		return true
	elseif storageStatus == 1 then
		dist = getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target))
		if dist == 1 then
			if math.random(0, 100) < weaponsConfig.lightning.lightChance then
				doCombat(cid, combat1, numberToVariant(target))
				doSendMagicEffect (getCreaturePosition(target), weaponsConfig.lightning.lightEffect)
			end	
		end		
	elseif storageStatus == 2 then
		dist = getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target))
		if dist == 1 then
			doCombatAreaCondition(cid, getCreaturePosition (target), nil, condition, weaponsConfig.fire.burnEffect)
		end
	elseif storageStatus == 3 then
		random = math.random (0, 100)
		dist = getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target))
		if dist == 1 then
			if random < weaponsConfig.plant.healChance then
				maxHealth = getCreatureMaxHealth (cid)
				doCreatureAddHealth (cid, getCreatureMaxHealth(cid) * weaponsConfig.plant.healPercent / 100)
				doSendMagicEffect (getCreaturePosition (cid), weaponsConfig.plant.healEffect)
			end
		end
	elseif storageStatus == 4 then
		dist = getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target))
		if dist == 1 then
			if getPlayerStorageValue(cid, 23001) < os.time() then
				cooldown = weaponsConfig.water.cooldown
				setPlayerStorageValue (cid, 23001, os.time() + cooldown)
				addEvent (waterCombat, 1000, cid, cooldown)
			end
		end
	end
	return true
end

function waterCombat (cid, times)
	if times == 0 then
		return true
	else
		doCombat (cid, combat2, numberToVariant(cid))
		addEvent (waterCombat, 1000, cid, times - 1)
	end
end

Em data/creaturescripts/scripts/login.lua adicione isso:

	registerCreatureEvent(cid, "PlayerAttack")    

Para fazer os testes para trocar entre os modos da arma (alternar entre os storageIDs) você pode usar este script:

Em data/actions/actions.xml adicione a tag:

	<action itemid = "XXXX" event = "script" value = "buffSword.lua" />

XXXX é o ID do item que voce vai dar use para alternar entre as formas

Em data/actions/scripts/ crie um arquivo buffSword.lua e cole isto nele:

function onUse(cid, item, frompos, item2, topos)
	storageStatus = getPlayerStorageValue (cid, 23000)
	print (storageStatus)
	if storageStatus == 0 or storageStatus == -1 then
		setPlayerStorageValue(cid, 23000, storageStatus + 1)
	elseif storageStatus == 1 then
		setPlayerStorageValue(cid, 23000, storageStatus + 1)
	elseif storageStatus == 2 then
		setPlayerStorageValue(cid, 23000, storageStatus + 1)
	elseif storageStatus == 3 then
		setPlayerStorageValue(cid, 23000, storageStatus + 1)
	elseif storageStatus == 4 then
		setPlayerStorageValue(cid, 23000, 0)
	end
	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "MODE = ".. getPlayerStorageValue(cid, 23000))
	return true
end

 

Editado por marcot (veja o histórico de edições)

Postado
  • Autor

@marcot po cara vlw pela ajuda mais nao tem como separar os scripts nao? e que queria fazer 4 item da mesma quest! saca?

mas vo testa e te passo os feedbacks eu tbm achei um pouco confuso tava pensando em editar dnv para esclarecer melhor...

 

@marcot cara funfa 100% sem nenhum erro! 

                                                 Projects are being developed....

Postado

Amanhã vou dar uma otimizada em algumas coisas do script e terminar a parte de configuração. Tem mais algo que você queira? (Mesmo que os itens sejam diferentes ainda dá pra fazer com um só script).

 

@ahrizinhas2

A versão abaixo está um pouco mais intuitiva para configuração e tem uma pequena melhora de desempenho

-- Configuracoes do script
local globalConfig = {
	storageID = 23000,
}
local burnBuff = {
	interval = 1, -- intervalo entre turnos
	damage = 5, -- dano de cada turno
	ticks = 5, -- quantidade de turnos
	effect = CONST_ME_HITBYFIRE, -- efeito
}
local energyBuff = {
	chance = 50, -- % de ativacao, 0~100
	effect = CONST_ME_ENERGYHIT, -- efeito
}
local healBuff = {
	chance = 25, -- % de ativacao, 0~100
	lifePercentage = 25, -- % de vida em cura, 0~100
	effect = CONST_ME_SMALLPLANTS, -- efeito
}
local waterBuff = {
	cooldown = 30, -- tempo para ativar proximo
	cooldownStorage = 23001, -- storage
	interval = 1, -- intevalo entre turnos
	effect = CONST_ME_LOSEENERGY, -- efeito
}

-- Caso queira configurar damage/area, que não se apliquem nas configuracoes acima,
-- modifique abaixo:

-- FIRE EFFECT
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, burnBuff.effect)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)

local condition = createConditionObject(CONDITION_FIRE)
setConditionParam(condition, CONDITION_PARAM_DELAYED, 1)
addDamageCondition(condition, burnBuff.ticks, burnBuff.interval, -burnBuff.damage)
setCombatCondition(combat, condition)
------------------------------------------------------------------------
-- ENERGY EFFECT
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -0.6, -30, -1.2, 0)

local arr = {
	{0, 0, 0},
	{1, 3, 1},
	{0, 0, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat1, area)
------------------------------------------------------------------------
-- WATER EFFECT
local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, waterBuff.effect)
setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -0.6, -30, -1.2, 0)

local arr2 = {
	{1, 1, 1},
	{1, 2, 1},
	{1, 1, 1}
}

local area = createCombatArea(arr2)
setCombatArea(combat2, area)
------------------------------------------------------------------------

function onAttack(cid, target)
	storageStatus = getPlayerStorageValue (cid, globalConfig.storageID)
	playerPos = getCreaturePosition (cid)
	targetPos = getCreaturePosition (target)

	if storageStatus == 0 then return true end -- FIM - jogador sem o buff
	if getDistanceBetween (playerPos, targetPos) > 1 then return true end -- FIM - jogador longe

	if storageStatus == 1 then -- Efeito Energy
		if math.random (0, 100) < energyBuff.chance then -- % de ativacao
			doCombat(cid, combat1, numberToVariant(target)) -- Dano em area
			doSendMagicEffect (targetPos, energyBuff.effect) -- efeito
		end	

	elseif storageStatus == 2 then -- Efeito de Burn
		doCombatAreaCondition(cid, targetPos, nil, condition, burnBuff.effect)

	elseif storageStatus == 3 then -- Efeito de Heal
		if math.random (0, 100) < healBuff.chance then -- % de ativacao
			doCreatureAddHealth (cid, getCreatureMaxHealth(cid) * healBuff.lifePercentage / 100) -- formula de Heal
			doSendMagicEffect (playerPos, healBuff.effect) -- efeito
		end

	elseif storageStatus == 4 then
		if getPlayerStorageValue(cid, waterBuff.cooldownStorage) < os.time() then -- respeitando intervalo (para nao stackar 2 skills)
			setPlayerStorageValue (cid, waterBuff.cooldownStorage, os.time() + waterBuff.cooldown) -- cooldown set
			addEvent (waterCombat, waterBuff.interval * 1000, cid, waterBuff.cooldown) -- inicia evento waterCombat, responsavel pela skill
		end
	end
	return true
end

-- evento waterCombat
function waterCombat (cid, times)
	if times == 0 then -- caso base de recursividade, quando termina o evento
		return true
	else -- caso recursivo
		doCombat (cid, combat2, numberToVariant(cid)) -- skill individual
		addEvent (waterCombat, waterBuff.interval * 1000, cid, times - 1) -- reativa o evento
	end
end

 

Editado por marcot (veja o histórico de edições)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo