Ir para conteúdo
  • Cadastre-se

(Resolvido)Mudar Elemento dá Wand por Item


Ir para solução Resolvido por gabrielzika,

Posts Recomendados

@gabrielzika Desculpa está revivendo o tópico após tanto tempo, mas estou com um problema parecido com esse, você poderia me dar uma força cara? No meu server o wand tem sistema de refinamento, até +6 cada refinamento feito na wand é trocado o ID do wand mas sempre continuando com o mesmo wand apenas trocando o ID. Como wand tem ataque fixo definido nos weapons então a solução para refinamento nele é somente assim trocando o ID. Tem o comando para trocar o elemento do wand também, eu queria saber se tu pode me ajudar a fazer esse comando ser válido para os 6 ID do wand. Pois cada vez que o player refinar o wand ele vai trocar o ID e preciso que o comando para troca de elemento continue sendo válido independe de qual ID esteja, Eu tentei fazer aqui mas não ficou 100%, tem hora que ele troca o elemento de um ID mas do outro não vai, ai volta a troca o elemento do ID que não estava indo, ta bem bagunçado, se puder me ajudar fico grato. 

Desde já, obrigado!

Link para o post
Compartilhar em outros sites
  • Respostas 49
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

@Gabrielk  function onUse(cid, item, fromPos, itemEx, toPos) ItemFire = 13743 -- ID dos Itens que precisa pra cada efeito... by: garden ItemIce = 13744 ItemEarth = 13745 ItemDeath = 13746 ItemEne

@Gabrielk ai Mano function onUse(cid, item, fromPos, itemEx, toPos) ItemFire = 13743 -- ID dos Itens que precisa pra cada efeito... by: garden ItemIce = 13744 ItemPoison = 13745 ItemDeath = 13746

function onUse(cid, item, fromPos, itemEx, toPos) ItemFire = 13743 -- ID dos Itens que precisa pra cada efeito... by: garden ItemIce = 13744 ItemPoison = 13745 ItemDeath = 13746 ItemEnergy = 13747 It

@Altairjr me explica direito que te ajudo sim bro

Editado por gabrielzika (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@gabrielzika Opa cara, primeiramente muito obrigado por responder e estar disposto a ajudar. Bom, vamos lá!

 

Eu tenho um server no qual tem pedra de refinamento, elas servem para dar upgrade nos items. Tanto sword, club, axe, bow como wands.

Por exemplo, se eu tenho uma sword ataque 130 e uso uma pedra de refinamento nela, ela fica com +1 ficando então 131atk e assim por diante até o +6 que é o limite de todos. No caso do Wand funciona um pouco diferente, quando eu uso a pedra de refinamento nele para fazer o upgrade, diferente da sword ou qualquer outro item que apenas acrescenta +1 no ataque ou defesa o Wand não faz assim. Nesse caso como o Wand já tem um ataque fixo definido la nos weapons  então, não tem como fazer o upgrade e aumentar o ataque dele como o exemplo da sword. Nesse caso do wand, funciona da seguinte maneira, tem 6 ID diferentes para o mesmo wand, então cada vez que é usada a pedra de refinamento no Wand, ele troca somente o ID mas continua o mesmo wand, entendeu? Na pasta weapons tem cadastrado já 6 tipos de ID para o mesmo item, mudando apenas o ID deles e em cada um está configurado um ataque fixado já. Então, cada vez que a pedra for usada no wand para fazer o upgrade, ele vai trocando o ID conforme os que estão configurados la no weapons, indo assim até chegar no +6.

 

Ai que entra minha dúvida, no server tem o comando para trocar o elemento do wand também, no caso o comando é !wand elemento dejado (exemplo: !wand holy)

mas no script da troca de wand está configurada apenas 1 ID de wand, então dos 6 ID diferentes que tem, apenas 1 deles irá funcionar o comando para a troca de wand, entende?

 

Vamos supor que esteja configurado no script da troca de elemento o ID do wand +2, então apenas quem fazer upgrade pro +2 consegue executar o comando da troca de elemento, wand sem upgrade,+1,+3,+4,+5,+6 todos esses não vão conseguir, entendeu? Eu queria que independente do upgrade que estiver ou sem nenhum, possa ser usado o comando para efetuar a troca do elemento.

 

Vou deixar aqui o script da troca de elemento e todos os ID do Wand.

 

ID dos Wand:

12629

12661

12662

12663

12664

12665

 

Script da Troca de elemento

local combat_values = {
	["none"] = -1,
	["ice"] = 1,
	["fire"] = 2,
	["earth"] = 3,
	["energy"] = 4,
	["holy"] = 5,
	["death"] = 6,
}

local config = {
	storage = 101010,
	time_storage = 101011,

	price = 1000000,
	delay = 0,

	msg = {
		help = "Use o comando exemplo: !wand holy Efeitos disponíveis: ice, fire, earth, energy, holy, death, e none para desabilitar. A troca para outro elemento custa 1kk.",
		invalid = "Por favor, digite um tipo valido.",
		changed = "O elemento da wand foi trocado para %s.",
		nomoney = "Você não possui dinheiro.",
		delayed = "Você precisa esperar para trocar o efeito.",
	}
}

-- /////////////////////Requerimentos///////////////////--
local req_itemid = 12629                                -- ID do item requerido
local req_text = "You cannot use this command."           -- Mensagem caso nao possua o item
--/////////////////////////////////////////////////////--

function onSay(cid, words, param)
	local param = param:lower()
	local value = combat_values[param]
if getPlayerItemCount(cid, req_itemid) > 0 then
	if param == "help" or param == "" then
		doShowTextDialog(cid, 12629, string.format(config.msg.help, config.price))
		return true
	end


	if not value then
		doPlayerSendCancel(cid, config.msg.invalid)
		return true
	end

	if getPlayerMoney(cid) < config.price then
		doPlayerSendCancel(cid, config.msg.nomoney)
		return true
	end

	if getPlayerMoney(cid) < config.price then
		doPlayerSendCancel(cid, config.msg.nomoney)
		return true
	end

	if getCreatureStorage(cid, config.time_storage) + config.delay > os.time() then
		doPlayerSendCancel(cid, config.msg.delayed)
		return true
	end

	doCreatureSetStorage(cid, config.storage, value)
	doCreatureSetStorage(cid, config.time_storage, os.time())
	doPlayerRemoveMoney(cid, config.price)
	doPlayerSendCancel(cid, string.format(config.msg.changed, param))
else
   doPlayerSendCancel(cid,req_text)
end
	return true
end

Eu tentei por conta própria dar um jeito, até que foi 50% mas como não manjo de script vim atrás de ajuda. 

 

O que eu fiz foi somente adicionar mais uma linha igual. a baixo do "local req_itemid = 12629" e troquei o ID para de outro wand e depois adicionei outra igual, a baixo da "doShowTextDialog(cid, 12629, string.format(config.msg.help, config.price))" e apenas deixei igual o ID da nova linha que eu tinha adicionado. Eu fiz isso para 3 ID diferentes de wand, e como eu disse funcionou 50%, quando abri o server para testar, apenas 2 estavam pegando o 3º não, mas depois o 2º também parou de pegar e ficou apenas o 1º pegando e não deu nenhum erro na distro, nem nada.

 

Enfim, espero que você possa ter entendido e desculpe por deixar tão grande, quis deixar o mais completo possível para você. Desde já muito obrigado!

Link para o post
Compartilhar em outros sites

@Altairjr veja se funciona ai bro (não testei). Qualquer erro me manda aqui :d

 

local combat_values = {
	["none"] = -1,
	["ice"] = 1,
	["fire"] = 2,
	["earth"] = 3,
	["energy"] = 4,
	["holy"] = 5,
	["death"] = 6,
}

local config = {
	storage = 101010,
	time_storage = 101011,

	price = 1000000,
	delay = 0,

	msg = {
		help = "Use o comando exemplo: !wand holy Efeitos disponíveis: ice, fire, earth, energy, holy, death, e none para desabilitar. A troca para outro elemento custa 1kk.",
		invalid = "Por favor, digite um tipo valido.",
		changed = "O elemento da wand foi trocado para %s.",
		nomoney = "Você não possui dinheiro.",
		delayed = "Você precisa esperar para trocar o efeito.",
	}
}

-- /////////////////////Requerimentos///////////////////--
local req_text = "You cannot use this command."           -- Mensagem caso nao possua o item
--/////////////////////////////////////////////////////--

function onSay(cid, words, param)
	local param = param:lower()
	local value = combat_values[param]
	local wand_left = getPlayerSlotItem(cid, CONST_SLOT_LEFT)
	local wand_right = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)

if wand_left.uid > 0 or wand_right.uid > 0 then
	if wand_left.uid > 0 and (param == "help" or param == "") then
		doShowTextDialog(cid, wand_left.itemid, string.format(config.msg.help, config.price))
		return true
	elseif wand_right.uid > 0 and (param == "help" or param == "") then
		doShowTextDialog(cid, wand_right.itemid, string.format(config.msg.help, config.price))
		return true
	end

	if not value then
		doPlayerSendCancel(cid, config.msg.invalid)
		return true
	end

	if getPlayerMoney(cid) < config.price then
		doPlayerSendCancel(cid, config.msg.nomoney)
		return true
	end

	if getPlayerMoney(cid) < config.price then
		doPlayerSendCancel(cid, config.msg.nomoney)
		return true
	end

	if getCreatureStorage(cid, config.time_storage) + config.delay > os.time() then
		doPlayerSendCancel(cid, config.msg.delayed)
		return true
	end

	doCreatureSetStorage(cid, config.storage, value)
	doCreatureSetStorage(cid, config.time_storage, os.time())
	doPlayerRemoveMoney(cid, config.price)
	doPlayerSendCancel(cid, string.format(config.msg.changed, param))
else
   doPlayerSendCancel(cid, req_text)
end
	return true
end

 

Editado por gabrielzika (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@gabrielzika Cara, deu super certo muitíssimo obrigado. Uma ultima questão, caso de trabalho ou não de certo não tem problema, não vai interferir em nada.

 

Os elementos estão sendo trocados nos wand, apenas no primeiro wand que não foi. É o wand que é comprado pelo site, ele vem sem nenhum upgrade, ele não trocou o elemento, apenas esta atacando com o holy que é o padrão que ele vem, a partir do upgrade +1 até +6 da pra trocar o elemento tranquilamente.

Eu não sei se tem algo a ver, mas esse wand que é comprado pelo site que vem sem upgrade o ID dele é o mesmo do wand +6, ambos tem o mesmo ID.

 

No weapons.xml eles estão assim:

Wand do site sem UPGRADE \/

Citar

<wand id="12655" level="8" mana="10" min="700" max="850" type="holy" event="function" value="default">

Wand com upgrade +6 \/

Citar

<wand id="12665" range="8" lvl="8" mana="10" enabled="1" exhaustion="0" script="donatestaff.lua">

 

A partir do +1 até o +6 eles tem o script e o ataque deles são declarado lá, apenas o Wand do site sem upgrade que é declaro apenas no weapons sem nenhum script.

 

Enfim, se não tiver como arrumar isso não tem problema, só de já ter pego a partir do +1 já está excelente. Uma segunda dúvida e sobre cobrar o preço quando usado o comando da troca e quando digita !wand help... Queria saber se tem como deixar para fazer a troca e digitar wand help apenas se estiver com os wands corretos, pois do jeito que ta qualquer um pode digitar !wand help e ficar trocando os elementos. Enfim, isso também não interfere em nada, era apenas para fazer uma restrição mesmo para quem possuir o wand seja ele sem upgrade ou qualquer upgrade até +6.

 

Mais uma vez, muito obrigado amigo. REP+ 

Link para o post
Compartilhar em outros sites

são realmente o mesmo id?

<wand id="12655" level="8" mana="10" min="700" max="850" type="holy" event="function" value="default">

e

<wand id="12665" range="8" lvl="8" mana="10" enabled="1" exhaustion="0" script="donatestaff.lua">

 

um tá 12655 e outro 12665 '-'

 

comenta os ids de todas as wands certinho aqui pra mim colocar só para algumas especificas usarem o !wand

 

e sobre cobrar, não está cobrando?? wtf kk tem o 

doPlayerRemoveMoney(cid, config.price)

 

Link para o post
Compartilhar em outros sites

Mil perdões cara, foi falha minha nem me atentei que eram IDS diferentes, eu bati o olho por cima e pensei que fossem iguais ?‍♂️... Enfim, somente o wand do ID 12655 que não esta efetuando a troca dos elementos.

 

Segue o ID de todos os wands:

 

12655

12629

12661

12662

12663

12664

12665

 

Sobre cobrar, ele está cobrando sim kkk, o que eu queria era que cobrasse apenas de quem tivesse o wand independente de qual ID dos 6 ele tiver, mas somente quem possuísse um desses 6 IDS do mesmo wand, entendeu?  Do jeito que está, qualquer um pode digitar a troca e é cobrado, por mais que não efetue a mudança. Por exemplo, um knight vai la e digita !wand holy, se ele tiver 1kk vai ser cobrado, entendeu? Queria que pudesse executar esse comando da troca de elemento, quanto o do !wand help apenas quem possuísse o wand, mas, se for dar muito trabalho ou não tiver como, pode deixar quieto, não vai interferir em nada é mais uma frescura mesmo minha por querer deixar mais organizado kkk...

 

Enfim, desde já obrigado cara.

 

Link para o post
Compartilhar em outros sites

@Altairjr espero que seja isso(não testei plx)

 

local combat_values = {
	["none"] = -1,
	["ice"] = 1,
	["fire"] = 2,
	["earth"] = 3,
	["energy"] = 4,
	["holy"] = 5,
	["death"] = 6,
}

local config = {
	storage = 101010,
	time_storage = 101011,

	price = 1000000,
	delay = 0,
	wands = {12629, 12655, 12661, 12662, 12663, 12664, 12665},

	msg = {
		help = "Use o comando exemplo: !wand holy Efeitos disponíveis: ice, fire, earth, energy, holy, death, e none para desabilitar. A troca para outro elemento custa 1kk.",
		invalid = "Por favor, digite um tipo valido.",
		changed = "O elemento da wand foi trocado para %s.",
		nomoney = "Você não possui dinheiro.",
		delayed = "Você precisa esperar para trocar o efeito.",
	}
}

-- /////////////////////Requerimentos///////////////////--
local req_text = "You cannot use this command."           -- Mensagem caso nao possua o item
--/////////////////////////////////////////////////////--

function onSay(cid, words, param)

	local param = param:lower()
	local value = combat_values[param]
	local wand_left = getPlayerSlotItem(cid, CONST_SLOT_LEFT)
	local wand_right = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)

	if wand_left.uid > 0 or wand_right.uid > 0 then
		if isInArray(config.wands, wand_left.itemid) or isInArray(config.wands, wand_right.itemid) then
			if wand_left.uid > 0 and isInArray(config.wands, wand_left.itemid) and (param == "help" or param == "") then
				doShowTextDialog(cid, wand_left.itemid, string.format(config.msg.help, config.price))
				return true
			elseif wand_right.uid > 0 and isInArray(config.wands, wand_right.itemid) and (param == "help" or param == "") then
				doShowTextDialog(cid, wand_right.itemid, string.format(config.msg.help, config.price))
				return true
			end

			if not value then
				doPlayerSendCancel(cid, config.msg.invalid)
				return true
			end

			if getPlayerMoney(cid) < config.price then
				doPlayerSendCancel(cid, config.msg.nomoney)
				return true
			end

			if getPlayerMoney(cid) < config.price then
				doPlayerSendCancel(cid, config.msg.nomoney)
				return true
			end

			if getCreatureStorage(cid, config.time_storage) > os.time() then
				doPlayerSendCancel(cid, config.msg.delayed)
				return true
			end

			doCreatureSetStorage(cid, config.storage, value)
			doCreatureSetStorage(cid, config.time_storage, os.time() + config.delay)
			doPlayerRemoveMoney(cid, config.price)
			doPlayerSendCancel(cid, string.format(config.msg.changed, param))
		else
			doPlayerSendCancel(cid, req_text)
		end
	else
		doPlayerSendCancel(cid, req_text)
	end
return true
end

 

Link para o post
Compartilhar em outros sites
Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.


×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo