Ir para conteúdo

Plastic Bomb


colex

Posts Recomendados

PLASTIC BOMB BY COLEX

 

Como funciona?

O player faz use em uma Plastic Bomb (eu uso o item 4825), e ficará imóvel um certo tempo (default é 5 segundos) instalando a bomba, depois de a bomba estar instalada o player poderá mover-se e a bomba irá demorar um certo tempo para explodir (default 5 segundos). A explosão será causada numa área 3x3 em que o player que estiver no centro da explosão levará sempre os danos mais elevados possiveis e os outros players que estiverem à volta será aleatório entre os danos maiores e menores (os danos são definidos no inicio do script em MAX_HIT e MIN_HIT).

 

 

1º Passo: na pasta data/actions/scripts crie um novo arquivo com o nome bomb.lua e insira o seguinte texto dentro dele:

----------Plastic Bomb by Colex-----------

local PLANTING_DELAY = 5 --seconds
local EXPLOSION_DELAY = 5000 --milliseconds
local MAX_HIT = 500
local MIN_HIT = 100

local PVP = true -- true for PVP, false for Non-PVP


local PLAYERS = {}

function isInArray(table, valor)
 for i,j in pairs(table) do
if (j == valor) then
  return i
end
 end
 return 0
end

function explosion(info)
  area = {
	{0,0,0,0,0},
	{0,1,1,1,0},
	{0,1,1,1,0},
	{0,1,1,1,0}, 
	{0,0,0,0,0},
   }
hitpos = {x=info.pos.x, y=info.pos.y, z=info.pos.z, stackpos=253}
	center = {}
	center.y = math.floor(table.getn(area)/2)+1
for i in ipairs(area) do
	  center.x = math.floor(table.getn(area[i])/2)+1
	  for j, v in ipairs(area[i]) do
		if (v == 1) then
	  hitpos.x = info.pos.x + (j - center.x)
	  hitpos.y = info.pos.y + (i - center.y)
	  if (getTilePzInfo(hitpos) == 0) then   
		victim = getThingfromPos(hitpos)
	effect = 4
	if ((j == center.x) and (i == center.y)) then
	  doSendAnimatedText(hitpos,"KABOOOOOM",TEXTCOLOR_RED)
	  hitpoints = MAX_HIT
	  effect = 5
	else
	  hitpoints = math.random(MIN_HIT,MAX_HIT)
	end
			if (isPlayer(victim.uid) == 1) then
	  if (PVP == true) then
				 doPlayerSendTextMessage(victim.uid,20,"You have lost "..hitpoints.." hitpoints by "..getPlayerName(info.player).."'s plastic bomb") 
			  else
				hitpoints = 0
			  end
			end
	if (isCreature(victim.uid) == 1) then
	  doPlayerAddHealth(victim.uid,-hitpoints)
			end
		doSendMagicEffect(hitpos,effect)
		  end
		end
  end
end
 PLAYERS[isInArray(PLAYERS, info.player)] = 0
 mayNotLogout(info.player, 0)
 return 1
end

function planting(info)
 if info.num == PLANTING_DELAY then
doPlayerSendTextMessage(info.player,22,"Plastic Bomb successfully planted!")
mayNotMove(info.player,0)
addEvent(explosion,EXPLOSION_DELAY,info)
 else
info.num = info.num + 1
doPlayerSendTextMessage(info.player,22,info.num.."...")
addEvent(planting,1000,info)
 end
 return 1
end

function onUse(cid, item, frompos, item2, topos) 
 position = getThingPos(item.uid)
 if (getTilePzInfo(position) == 0) then
  	if (isInArray(PLAYERS, cid) == 0) then	
	table.insert(PLAYERS, cid)	
	doSendMagicEffect(frompos,3) 
	info = {player = cid, pos = position, num = 1} 
	doPlayerSendTextMessage(cid,22,"Planting the bomb...")
	doPlayerSendTextMessage(cid,22,"1...")
	mayNotMove(cid,1)
	mayNotLogout(cid, 1)
	doRemoveItem(item.uid,1)
	addEvent(planting,1000,info)
else
	doPlayerSendCancel(cid,"You can only plant one bomb at the same time.")
end
 else
doPlayerSendCancel(cid,"You can not plant this bomb in a PZ!")
 end	
 return 1
end

 

 

2º Passo: abra a pasta data/actions e adicione a seguinte linha dentro do arquivo actions.xml:

<action itemid="4852" script="bomb.lua"  />

 

Pronto! Sua plastic bomb deve estar funcional...

 

 

Alguma dúvida? poste e eu tentarei ajuda-lo!

 

(Esta action foi apenas testado em um server 8.0)

 

Colex

Editado por colex
Link para o comentário
Compartilhar em outros sites

Ele funcionará em Outros servers com a mesma função

 

eu usei o DevLand para fazer o script

 

vou adicionar o mayNotLogout, mas da para fazer exit na mesma, obrigado pela idéia!

Link para o comentário
Compartilhar em outros sites

@colex

Obviamente, mas creio que só o Forgotten tem essa função, já que foi o próprio Talaturen que a fez.

 

 

O DevLand tem essa função, como eu disse eu usei o DevLand para fazer este script...

Não sei se mais algum outro OT tem essa função ou alguma função semelhante, mas pelo menos esses dois :p

Link para o comentário
Compartilhar em outros sites

Colex e nostradamus... vcs sao Genios vlw ae ^^

cara to com uma lista de idéias na minha cabeça

 

se forem realisar uma delas postem os creditos da ideia para min

 

-assim como akele tapete voador vcs podiam criar um barco q se mexe tambem ^^

-achei essa ideia meio unitil mas tudu bem... quando vc usar alguma ropa mudar o outif do char

-sabe akele buneco de neve do update ?? intao criar tipo de um monster para fazer guerrinha de neve

e quando se desmanchar pareeçer akela bola redonda d neve

-tbm akele trap de quando o bixo for incima ele fica preso .. eu nunca vi ..

-quando vc leva um hit de um player no life fica sangue no chao....vcs poderiam fazer quando leva hit na mana ficar

agua azul no chao pareçendo mana UHAUSa

sao essas ae

^^

c fizerem uma me avisem

Link para o comentário
Compartilhar em outros sites

UPDATE NO SCRIPT

 

@tochaazul

 

a idéia do barco que se mvoe, acho que ja foi feita pela B.O. (sem confirmação)

 

Mas de qualquer forma, obrigado pelas ideias, não sei se iremos desenvolver alguma delas, mas caso fizermos avisamos!

 

Colex

Editado por colex
Link para o comentário
Compartilhar em outros sites

SCRIPT UPDATED

*Atinge qualquer criatura

*Só pode usar uma bomba de cada vez (bugfix)

*Nova estrutura na área (facilita a criação da sua própria área):

area = {

{0,0,0,0,0},

{0,1,1,1,0},

{0,1,1,1,0},

{0,1,1,1,0},

{0,0,0,0,0},

}

 

@Jp P

Da sim, e agora com o novo update é mais facil (só editar o Area)

Exemplo:

area = {

{0,0,0,0,0,0,0},

{0,0,0,1,0,0,0},

{0,0,1,1,1,0,0},

{0,1,1,1,1,1,0},

{0,0,1,1,1,0,0},

{0,0,0,1,0,0,0},

{0,0,0,0,0,0,0},

}

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...