Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Olá Pessoal do TK olha eu aqui di novo :D

Então,meu problema agora é com um script de Castle War.

script:

Boa noite,

Bom, quem me conhece sabe que eu era Spriter/Client Maker, e fiz ate 2 apostilas sobre o assunto.

Derrepente me deu vontade de aprender script, e fiquei lendo tutoriais em varios Foruns. E hoje estou aqui pra mostrar meu primeiro trabalho medio divulgado!

Nome do Script: Castle War 2.0 ultimate

Versão testada: Tfs 0.3.6 ( deve funcionar em versões anteriores )

Descriçao: Um sistema de Guerra de castelos para guilds, deferente :]!

Como funciona: O Player vai no castelo, e puxa uma lavanca, e automaticamente, todos da guild dele, tem acesso ao castelo ( porta ). Alem de contar pontos pra ganhar premios por vezes que ele conseguiu conquistar Castelos!

Bom, eu sei que já existe muitos scripts deste tipo, porem eu melhorei ele, com algumas novidades. Como o monstro guarda, que é invocado, caso um player que não é da guild , tentar abrir a porta, ou andar sobre algum local pre definido ( Se alguem pedir, eu faço este script simples ). Ou simplesmente voce pode colocaar ele como respawn em algum lugar no castelo.

ps: esse guarda é configurado para não atacar os ‘donos’ do castelo! :fail:

Features:

- Guerra entre 2 Castelos ( por alavanca )

- Monstro ‘Guarda’, que só ataca membro de guilds rivais!

- Premios por pontuaçao. ( por player, somente.)

- Sala especial, dentro do castelo, para membros da guild*. ( depende da sua criatividade) bloquiada por um Porta.

- Broadcast.

* É a porta que eu tinha falado.

Instalação

Actions

Va na pasta Data/action/action.xml e adicione isto:

Quote

<action actionid="9999" event="script" value="castlewar1.lua"/>


<action actionid="9998" event="script" value="castledoor1.lua"/>

<action actionid="8888" event="script" value="castlewar2.lua"/>

<action actionid="8887" event="script" value="castledoor2.lua"/>
Agora vá em Data/actions/scripts , crie esses 4 arquivos abaixo: castlewar1.lua
-----------------------------------			


---------SCRIPT por PC98------------	NAO REMOVA OS CREDITOS	  

-----------------------------------			



function onUse(cid, item, frompos, item2, topos)


------------------ Inicio das Config ------------


local castle_one_name = "Ratim Bum"				  -- Nome do castelo 1

local storages = {154154,54321,123123}			   -- Storages ( se vc eh iniciante, deixe como est&#225;...)




-------PREMIOs  I N D I V I D U A L ---------


local premio_por_vezes = 1		 -- Premio por vezes de conquista de castelo. (1) = Ativo  (0) = Desativa.

local premio_vezes = 13			-- Caso ativo, a quantidade de conquista que o player tem, para ganhar PREMIO.

local premio = 2472				-- ID do Premio

local premio_cont = 1			  -- Quantidade do Premio

local premio_reset = 1			 -- Resetar o contador do premio depois que atingir a meta?? (1) = SIM  (0) = NAO


-------FIM PREMIOs I N D I V I D U A L ---------





----------------- FIM DAS CONFIG -----------------


local sto_ativ = getGlobalStorageValue(storages[2])

position = getCreaturePosition(cid)



   if isPlayerGuild(cid) == TRUE then

	  if sto_ativ == 1 or sto_ativ == -1 then


		 guildname = getPlayerGuildName(cid)	

		 guild = getPlayerGuildId(cid)			  

		 guild_sto = getGlobalStorageValue(storages[3])


			if guild ~= guild_sto then			

			   setPlayerStorageValue(cid,guild_sto,guild)					  

			   if getPlayerStorageValue(cid,storages[1]) == -1 then

				  setPlayerStorageValue(cid,storages[1],0)

			   end


			   sto_vezes = getPlayerStorageValue(cid,storages[1])				  


			   setGlobalStorageValue(storages[3],getPlayerGuildId(cid))

			   setPlayerStorageValue(cid,storages[1], sto_vezes + 1)


			   sto_vezes_total = getPlayerStorageValue(cid,storages[1])


			   doBroadcastMessage("O(a) "..getCreatureName(cid).." acabou de conquistar o castelo "..castle_one_name.." para a guild \""..guildname.."\" pela "..sto_vezes_total.."&#170; vez(s).", 22)

			   doSendMagicEffect(position, 39)  


				 if premio_por_vezes == 1 then

					if getPlayerStorageValue(cid,storages[1]) == premio_vezes then

					   if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then

						  doBroadcastMessage("O "..getCreatureName(cid).." ganhou uma(o) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!", 21)

						  doPlayerAddItem(cid, premio,premio_cont)

						  doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!")

						-----------------------------------------------  --  

							if premio_reset == 1 then					--

							   setPlayerStorageValue(cid,storages[1],0)  --  Resetar a contagem

							end										  --

						-----------------------------------------------  --


					   else

					   doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Vamos verificar novamente em 10 segundos!")

					   addEvent(additem,10000,cid,premio,premio_cont,premio_reset)

					   end

					end										

				 end			  

			else

			  doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!")

			  doSendMagicEffect(position, 2)

			end

	  else

	  doPlayerSendCancel(cid,"O sistema est&#225; desativado")

	  end	  

   else

   doPlayerSendCancel(cid,"&#201; nescessario ter guild para dominar o castelo!")

   doSendMagicEffect(position, 2)

   end

end


------------------------- por pc98


function additem(cid,premio,premio_cont,premio_reset)


if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then

	doPlayerAddItem(cid, premio,premio_cont)

	doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!")

	 if premio_reset == 1 then

		setPlayerStorageValue(cid,storages[1],0)

	 end

	stopEvent(additem)

  else

  doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Verificando novamente em 10 segundos!")

  addEvent(additem,10000,cid)

  end

end


-------------------------  por pc98

function isPlayerGuild(cid)

if getPlayerGuildName(cid) ~= "" then

return TRUE

else

return FALSE

end

end

castlewar2.lua
-----------------------------------			


---------SCRIPT por PC98------------	NAO REMOVA OS CREDITOS	  

-----------------------------------			



function onUse(cid, item, frompos, item2, topos)


------------------ Inicio das Config ------------


local castle_two_name = "do Dracula"				  -- Nome do castelo 2

local storages = {154154,54321,321321}				-- Storages ( se vc eh iniciante, deixe como est&#225;...)



-------PREMIOs  I N D I V I D U A L ---------


local premio_por_vezes = 1		 -- Premio por vezes de conquista de castelo. (1) = Ativo  (0) = Desativa.

local premio_vezes = 13			-- Caso ativo, a quantidade de conquista que o player tem, para ganhar PREMIO.

local premio = 2472				-- ID do Premio

local premio_cont = 1			  -- Quantidade do Premio

local premio_reset = 0			 -- Resetar o contador do premio depois que atingir a meta?? (1) = SIM  (0) = NAO


-------FIM PREMIOs I N D I V I D U A L ---------





----------------- FIM DAS CONFIG -----------------


local sto_ativ = getGlobalStorageValue(storages[2])

position = getCreaturePosition(cid)



   if isPlayerGuild(cid) == TRUE then

	  if sto_ativ == 1 or sto_ativ == -1 then


		 guildname = getPlayerGuildName(cid)	

		 guild = getPlayerGuildId(cid)			  

		 guild_sto = getGlobalStorageValue(storages[3])


			if guild ~= guild_sto then			

			   setPlayerStorageValue(cid,guild_sto,guild)


			   -----------------------------------------------------					  

			   if getPlayerStorageValue(cid,storages[1]) == -1 then

				  setPlayerStorageValue(cid,storages[1],0)

			   end

			   -----------------------------------------------------


			   sto_vezes = getPlayerStorageValue(cid,storages[1])				  


			   setGlobalStorageValue(storages[3],getPlayerGuildId(cid))

			   setPlayerStorageValue(cid,storages[1], sto_vezes + 1)


			   sto_vezes_total = getPlayerStorageValue(cid,storages[1])


			   doBroadcastMessage("O(a) "..getCreatureName(cid).." acabou de conquistar o castelo "..castle_two_name.." para a guild \""..guildname.."\" pela "..sto_vezes_total.."&#170; vez(s).", 22)

			   doSendMagicEffect(position, 39)  


				 if premio_por_vezes == 1 then

					if getPlayerStorageValue(cid,storages[1]) == premio_vezes then

					   if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then

						  doBroadcastMessage("O "..getCreatureName(cid).." ganhou uma(o) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!", 21)

						  doPlayerAddItem(cid, premio,premio_cont)

						  doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!")

						-----------------------------------------------  --  

							if premio_reset == 1 then					--

							   setPlayerStorageValue(cid,storages[1],0)  --  Resetar a contagem

							end										  --

						-----------------------------------------------  --


					   else

					   doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Vamos verificar novamente em 10 segundos!")

					   addEvent(additem,10000,cid,premio,premio_cont,premio_reset)

					   end

					end										

				 end			  

			else

			  doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!")

			  doSendMagicEffect(position, 2)

			end

	  else

	  doPlayerSendCancel(cid,"O sistema est&#225; desativado")

	  end	  

   else

   doPlayerSendCancel(cid,"&#201; nescessario ter guild para dominar o castelo!")

   doSendMagicEffect(position, 2)

   end

end


------------------------- Por PC98.


function additem(cid,premio,premio_cont,premio_reset)


if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then

	doPlayerAddItem(cid, premio,premio_cont)

	doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!")

	 if premio_reset == 1 then

		setPlayerStorageValue(cid,storages[1],0)

	 end

	stopEvent(additem)

  else

  doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Verificando novamente em 10 segundos!")

  addEvent(additem,10000,cid)

  end

end


-------------------------  por pc98

function isPlayerGuild(cid)

if getPlayerGuildName(cid) ~= "" then

return TRUE

else

return FALSE

end

end

castledoor1.lua
 ---------------												  


-----BY PC98-------  

  ---------------												  


function onUse(cid, item, frompos, item2, topos)


-------------------------Config-----------------------------------------------------------------


door_opened = 1228							 -- ID da porta aberta

storage_guild = getGlobalStorageValue(123123)  -- A 3&#170; storage configurada em Castle.lua


guarda_ativ = 1	   -- Caso um invasor tente abrir a porta, sumonar o Monstro "Guarda"??  | (1) = SIM  (0) = NAO

guarda_cont = 2								 -- Caso ativo: a quantidade de guardas a sumonar

guarda_pos = {x=123,y=123,y=7}				  -- Posi&#231;ao a ser sumonada os guardas!


-------------------------Fim de Config-----------------------------------------------------------



if getPlayerGuildId(cid) == storage_guild then

   doTeleportThing(cid,getThingPos(item.uid))

   doTransformItem(item.uid, door_opened)

   doPlayerSendTextMessage(cid, 22, "Seja bem vindo a vosso castelo!")  

   return TRUE

else

	if guarda_ativ == 1 then

	   doPlayerSendTextMessage(cid, 22, "Guaaaardas, tirem esses invasores daqui!!")

		for i=1, guarda_cont do

			doSummonCreature("Guarda", guarda_pos)

		end

	return FALSE

	else

	doPlayerSendTextMessage(cid, 22, "Este castelo nao pertence a sua guild")

	return FALSE

	end

end

end




castledoor2.lua

---------------												  

-----BY PC98-------  

  ---------------												  


function onUse(cid, item, frompos, item2, topos)


-------------------------Config-----------------------------------------------------------------


door_opened = 1228							 -- ID da porta aberta

storage_guild = getGlobalStorageValue(321321)  -- A 3&#170; storage configurada ( ja esta configurada o PADRAO )


guarda_ativ = 1	   -- Caso um invasor tente abrir a porta, sumonar o Monstro "Guarda"??  | (1) = SIM  (0) = NAO

guarda_cont = 4								 -- Caso ativo: a quantidade de guardas a sumonar

guarda_pos = {x=321,y=321,y=7}				  -- Posi&#231;ao a ser sumonada os guardas!


-------------------------Fim de Config-----------------------------------------------------------



if getPlayerGuildId(cid) == storage_guild then

   doTeleportThing(cid,getThingPos(item.uid))

   doTransformItem(item.uid, door_opened)

   doPlayerSendTextMessage(cid, 22, "Seja bem vindo a vosso castelo!")  

   return TRUE

else

	if guarda_ativ == 1 then

	   doPlayerSendTextMessage(cid, 22, "Guaaaardas, tirem esses invasores daqui!!")

		for i=1, guarda_cont do

			doSummonCreature("Guarda", guarda_pos)

		end

	return FALSE

	else

	doPlayerSendTextMessage(cid, 22, "Este castelo nao pertence a sua guild")

	return FALSE

	end

end

end
Talkactions Va na pasta Data/talkaction/talkactions.xml , clique com o botao direito e depois editar. Adicione esta linha:
<talkaction words="/war" event="script" value="castlesystem.lua"/>
Agora va na pasta scripts , e crie um arquivo lua chamado castlesystem.lua. castlesystem.lua
function onSay(cid, words, param)



access = 4  -- Coloque aqui o access requirido para Ativar/Desativar o sistema


if param == "start" then

   if getPlayerAccess(cid) == access then

	  setGlobalStorageValue(54321,1)

	  doPlayerSendTextMessage(cid, 20, "Voce ativou o Castle Wars com suscesso!")

	  return TRUE

   end

elseif param == "stop" then

   if getPlayerAccess(cid) == access then

	  setGlobalStorageValue(54321,2)

	  doPlayerSendTextMessage(cid, 20, "Voce desativou o Castle Wars com suscesso!")

	  return TRUE

   end

end

end

Monster O mostro Guarda... aquele que eu disse que pode ficar dentro do castelo :] Instalaçao: va na pasta data/monsters e edite o arquivo Monster.xml , adicionando esta linha:
<monster name="Guarda" file="guarda.xml"/>
e depois crie um arquivo na mesma pasta chamado guarda.xml guarda.xml
<?xml version="1.0"?>


<monster name="Guarda" nameDescription="the guard" experience="6000" speed="268" race="Blood">

  <health now="20000" max="20000"/>

  <look type="73" corpse="6080"/>

  <strategy attack="200" defense="300"/>

  <targetchange speed="420" chance="1"/>

  <flags>

	<flag canpushitems="1"/>

	<flag canpushcreatures="1"/>

	<flag attackable="1"/>

	<flag pushable="0"/>

	<flag staticattack="90"/>

	<flag targetdistance="1"/>

  </flags>

  <attacks>

	<attack name="melee" interval="2000" chance="100" min="-400" max="-800" range="1"/>

	<attack name="physical" interval="4000" chance="25" min="-600" max="-700" range="7" radius="8" target="1">

	  <attribute key="shootEffect" value="arrow"/>

	</attack>

  </attacks>

  <defenses defense="45" armor="40"/>

  <immunities>

	<immunity name="paralyze"/>

	<immunity name="invisible"/>

  </immunities>

  <voices speed="2200" chance="75">

	<voice sentence="Grrrrrrrrrr" yell="1"/>

	<voice sentence="Saia daqui intrusos!" yell="1"/>

	<voice sentence="Sua resistencia e inutil!" yell="1"/>

	<voice sentence="Voce vai ser preso!" yell="1"/>

  </voices>

  <script>

	<event name="guard"/>

  </script>

  <elements/>

  <loot/>

</monster>
Creatures Scripts Bom, agora a gente tem de configurar pra esse bixo nao atacar os donos do castelo neh, se nao ele vai sair porai matando GERAL :fuu:. Vamo nessa. Va na pasta data/creaturescripts e edite o arquivo creaturescripts.xml adicionando esta linha:
<event type="combat" name="guard" script="guard.lua"/>
agora abra a pasta scripts, que esta na mesma pasta e crie um arquivo chamado guard.lua. guard.lua
function onCombat(cid, target)



if(not isPlayer(target)) then

return TRUE

else


targets = getMonsterTargetList(cid)


if getPlayerGuildId(target) == getGlobalStorageValue(123123) then

   addEvent(check,1000,cid,targets)

   return FALSE

else

return TRUE

end

end

end


function check(cid,targets)


for i=1, #targets do

	if getPlayerGuildId(targets[i]) == getGlobalStorageValue(123123) then


	   addEvent(check,1000,cid,targets)

	   return FALSE

	else

		stopEvent(check)

		return TRUE

	end

end

end

Esta configurado o Monstro! Vamos pra proxima etapa!

Instalaçao no MapaEditor

Va ate no primeiro castelo, e adicione uma lavanca ( id recomendado: 1945 ) e coloque aonde voce quiser. Depois de colocado a lavanca, clique nela com o botao direito do mouse e va em property.

No campo "ActionID:" coloque 9999.

Faça a mesma coisa com o segundo castelo, crie la a lavanca, e coloque actionID 8888.

Se voce quiser voce pode criar uma porta especial, por onde so os 'donos' do castelo pode entrar, afinal, ja ta instalado! :fail:

Coloque ActionID 9998 na porta no primeiro castelo, e actionID 8887 na porta do segundo castelo.

Comandos

/war start - Para Ativar o sistema ( ja vem ativado por padrao)

/war stop - Para desativar o sistema.

Bom, eh isso ai. Eh meu primeiro Script ( de muitos ) pro forum tibiaking, e espero ta ajudando o forum.

Creditos:

PC98 - Pelo script

MonsterEditor - Pelo mosntro Guarda. ( blackdemon)

obs: Esse mesmo script foi postado em outro forum, porem fui eu mesmo que postei ( PC98 - mesmo nick ).

abraços!

Ele funciona certinho,mas o problema é o /war stop,não funciona,sendo assim o castle fica ativado para sempre,se alguém souber como resolver me ajuda.Tentei falar com o auto to script,ele falou que não lembrava mais,e tals...Então é isso.

Abraços.

Editado por Gabriel10101 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 2 years later...
  • 2 years later...

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