Ir para conteúdo
  • Cadastre-se

(Resolvido)[AJUSTE] Jogar item fora enquanto usa


Ir para solução Resolvido por L3K0T,

Posts Recomendados

Preciso de uma adaptação nessa script que está funcionando no meu servidor.

 

slots.png?1516590263

Gostaria que o jogador só pudesse usar a bicicleta quando ela estivesse colocada no devido slot. Impedindo assim, do mesmo jogar o item fora enquanto está usando. Tipo o ride system.

 

Aqui vai meu script de não mover item:

function onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos)
if not isCreature(cid) then return false end
if isWatchingTv(cid) then return false end
local name = getCreatureName(cid)
local transform = false
--- nao retirar item que estao no slot 8 e sao uniques
if fromPos.x ~= 0 and toContainer.uid == 0 and fromContainer.uid == 0 and toPos.x == 65535 and getPlayerSlotItem(cid, 8).uid ~= 0 then
	doPlayerSendCancel(cid, MSG_NAO_E_POSSIVEL)
	return false
end	

local itemID = item.itemid
if itemID >= 14795 and itemID <= 14879 or pokeballs[getPokeballType(itemID)] and (itemID ==  pokeballs[getPokeballType(itemID)].use and (#getCreatureSummons(cid) > 0 or isRiderOrFlyOrSurf(cid))) then
   doPlayerSendCancel(cid, "Você não pode mover este item.")
   return false
end

if isFly(cid) and (getTileThingByPos(toPos).itemid == 460 or getTileThingByPos(toPos).itemid == 12171 or getTileThingByPos(toPos).itemid == 12172 or (toContainer.uid == 0 and getThingPos(cid).z ~= toPos.z)) then
	doPlayerSendDefaultCancel(cid, RETURNVALUE_CANNOTTHROW)
	return false
end

if isInArray({2589, 15446, 15447, 15448, 15449, 12355}, toContainer.itemid)then -- nao fazer nada no cp
   return true
end	

local pos =  toPos
local items = getItemsfromPos(pos)
for i = 1, #items do
	local name = getItemInfo(items[i].itemid).name
	if string.find(name, "fainted") or string.find(name, "defeated") then 
	   doSendMsg(cid, "Não pode jogar lá.")
       return false
    end	   
end

	if isPokeball(item.itemid) and toPos.x == 65535 then
		if not getItemAttribute(item.uid, "unique") and getPlayerFreeCap(cid) > 1 then
			 doTransformPokeballIcon(cid, item, count, toContainer, fromContainer, fromPos, toPos)
		end
	else
		  if not getItemAttribute(item.uid, "unique") and not getItemAttribute(item.uid, "torneio") then
	         doTransformPokeballIcon(cid, item, count, toContainer, fromContainer, fromPos, toPos)
		  end
	end


if isPokeball(item.itemid) or isContainer(item.uid) then
if hasSqm(toPos) then

  if isContainer(item.uid) then

   local itens = getItensUniquesInContainer(item.uid)
   local sendMsg = false
    if #itens >= 1 then
	   doSendMsg(cid, #itens.." item"..(#itens < 2 and "" or "s").." neste recipiente "..(#itens < 2 and "é exclusivo" or "são exclusivos")..". Você não pode joga-lo"..(#itens < 2 and "" or "s").." fora!")
	   return false
    end
   
  else

   if getItemAttribute(item.uid, "unique") or getItemAttribute(item.uid, "torneio") then 
      doSendMsg(cid, "Isso é um item exclusivo, você não pode joga-lo fora!")
      return false 
   end  
  end
  
elseif isContainer(toContainer.uid) and (isPokeball(item.itemid) or isContainer(item.uid)) then 

   if toContainer.itemid == getPlayerSlotItem(cid, 3).itemid then -- nao fazer nada na poke bag principal
      return true
   end


  if not isPosEqual(getThingPos(toContainer.uid), getThingPos(cid)) then
	  if isContainer(item.uid) then
	  
			local itens = getItensUniquesInContainer(item.uid)
			local sendMsg = false
			  if #itens >= 1 then
				doSendMsg(cid, #itens.." item"..(#itens < 2 and "" or "s").." neste recipiente "..(#itens < 2 and "é exclusivo" or "são exclusivos")..". Você não pode joga-lo"..(#itens < 2 and "" or "s").." fora!")
				return false
			  end
	   
	  else
		 if getItemAttribute(item.uid, "unique") or getItemAttribute(item.uid, "torneio") then 
			doSendMsg(cid, "Isso é um item exclusivo, você não pode joga-lo fora!")
			return false 
		 end  
	  end
  end
   
end
end  

  return true
end 



function getItemsfromPos(position, fromStackpos)
	local toret = { } -- table to return items
 
	position.stackpos = fromStackpos
	if position.stackpos == nil then
		position.stackpos = 1 -- default
	end
 
	while true do -- loop to catch the items and insert them in toret table
		local thing = getThingfromPos(position)
		if thing.itemid == 0 then -- thing doesn't exist, break the loop...
			break
		end
 
		if getWholeThing ~= nil and getWholeThing ~= 0 then
			-- if getWholeThing isn't nil and isn't 0
			table.insert(toret,thing)
		else
			-- else, insert only item uid in toret table
			table.insert(toret,thing)
		end
 
		position.stackpos = position.stackpos + 1 -- get next item
	end
 
	return toret
end

 

Link para o post
Compartilhar em outros sites
  • Sub-Admin

bom a minha bike que fiz foi assim.......

 

criei 2 sprite diferente no cliente com a configuração move na 1 e no move na 2

 

criei 2 ID = 2 itens pelo item editor.

 

assim usando item 1 ele transforma no item 2 que não se mexe... para ficar perfeito eu coloquei uma função no login.lua quando relogar ele se transforma e voltar a roupa normal

 

sobre o slot... você deve por a função no items.xml do seu server modo "FEET" outra coisa fazer uma verificação ao usar a bike que seria.

 

 

if getPlayerSlotItem(cid, CONST_SLOT_RING).uid ~= item.uid then
return doPlayerSendCancel(cid, "Voce precisa por a (BIKE) no lugar correto.")
end


 

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

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites
  • Sub-Admin
  • Solução
2 minutos atrás, tavarb disse:

@L3K0T Poderia me ajudar? Esse sistema é de suma importância para meu servidor!

Eu entendi "por cima" como funciona.

adiciona isso no script da bike 

 

if getPlayerSlotItem(cid, CONST_SLOT_RING).uid ~= item.uid then
return doPlayerSendCancel(cid, "Voce precisa por a (BIKE) no lugar correto.")
end
 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites

@L3K0T aparenta estar funcionando, mas o slot não é esse, onde acho no meu servidor?

Acho que é no slot ammo

3 minutos atrás, tavarb disse:

@L3K0T aparenta estar funcionando, mas o slot não é esse, onde acho no meu servidor?

Acho que é no slot ammo

Acertei, era nele mesmo, está funcionando perfeitamente! obrigado

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo