Dinastias - Dopushcreature By Dokmos 30/01

Dokmos
Por Dokmos
em Mods, funções e outros

Dokmos

Visite www.avataronline.com.br ...
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 29/11/07Posts: 81Char no Tibia: Dokmos

logo-d10.jpg

 

 

 

Function doPushCreature(uid, direction[, distance[, speed]])

by Dokmos



 

 

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

 

Características

 

Função atualizada 30/01!

A fórmula foi optimizada com um sistema menor, mais simples e avançado!

 

Bom, esse é um script que modifiquei com funções loop e tabelas, além de alguns sistemas adicionais. A função basicamente empurra uma determinada criatura para uma direção, caso essa direção não possa ser ocupada (paredes, criaturas, buracos) ela empurra para a direção mais próxima que está desocupada, ou então não empurra.

 

Por exemplo, vamos empurrar um rato para o norte, se a posição ao norte estiver livre o rato vai para o norte, caso não esteja verifica-se aleatoriamente se a posição nordeste ou noroeste está livre, e se também não estiver verifica-se novamente aleatoriamente se o leste ou oeste do rato está livre, se neste último caso também não for possível ele não empurra o rato.

 

A finalidade disto é deixar a função mais dinâmica e real, além do sistema adicional de empurrar mais de 1 sqm e com o tempo desejado.

 

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



 

Instalação

 

 

Adicione essa função dentro do data\global.lua, você também pode colocá-la em outros libs, mas o global.lua já servirá para todas funções como spells, talkactions, actions, etc.

 

Obs: Alguas versões de OT o global.lua está no data\lib\constant.lua

 

function doPushCreature(uid, direction, distance, speed)
-- Desenvolvido por Dokmos 30/01/2009
-- Apoio Dinastias
local pos = getThingPos(uid)
local PARAM = {{1}, {500}}
local DIRECTION = {
{{0,0},{6,7},{1,3}}, {{1,1},{5,7},{0,2}}, {{2,2},{4,5},{1,3}}, {{3,3},{4,6},{0,2}},
{{4,4},{2,3}}, {{5,5}, {1,2}}, {{6,6},{0,1}}, {{7,7},{0,3}}
}
table.insert(PARAM[1], distance)
table.insert(PARAM[2], speed)

for dvar = 1, #DIRECTION[direction+1] do
rand = math.random(2)
d = DIRECTION[direction+1][dvar][rand]
dir = {x = (math.fmod(d,2)*(-(d-2))+math.floor(d/4)*math.fmod(d,2)*d-math.floor(d/4)), y = (((d-1)*(d-1-(d-1)*math.abs(d-2))*(1-math.floor(d/4)))-(math.floor(d/4)*(math.floor(d/6)*2-1)))}
newtile = {x = (pos.x+dir.x), y = (pos.y+dir.y), z = pos.z}
	if  (getTileThingByPos(newtile).uid ~= 0) and (hasProperty(getTileThingByPos(newtile).uid,3) == FALSE) and (queryTileAddThing(uid,newtile) == 1) then break end
rand = (math.fmod(rand,2)+1)
d = DIRECTION[direction+1][dvar][rand]
dir = {x = (math.fmod(d,2)*(-(d-2))+math.floor(d/4)*math.fmod(d,2)*d-math.floor(d/4)), y = (((d-1)*(d-1-(d-1)*math.abs(d-2))*(1-math.floor(d/4)))-(math.floor(d/4)*(math.floor(d/6)*2-1)))}
newtile = {x = (pos.x+dir.x), y = (pos.y+dir.y), z = pos.z}
	if  (getTileThingByPos(newtile).uid ~= 0) and (hasProperty(getTileThingByPos(newtile).uid,3) == FALSE) and (queryTileAddThing(uid,newtile) == 1) then break end
	if (dvar == #DIRECTION[direction+1]) then
	newtile = pos
	end
end

doTeleportThing(uid, newtile, TRUE)
if (PARAM[1][#PARAM[1]] > 1) then
addEvent(doPushCreature, PARAM[2][#PARAM[2]], uid, direction, (distance-1), speed)
end	
end

 

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



 

Funcionamento

 

 

Quando utilizar fica a seu critério, vou mostrar um exemplo básico de empurrar alguma criatura no target.

 

function onSay(cid, words, param)
local creature = getCreatureTarget(cid)
local pos = getThingPos(cid)

  if isCreature(creature) == TRUE then
  doSendDistanceShoot(pos,getThingPos(creature),38)
  doSendMagicEffect(getThingPos(creature),3)
  doPushCreature(creature,getPlayerLookDir(cid))
  else
  doPlayerSendCancel(cid,"Você precisa selecionar o alvo.")
  end

return TRUE
end

 

Este exemplo acima de uma talkaction verifica se existe alguma criatura no target e caso tenha, empurra a criatura para a direção que o jogador está olhando.

 

Agora, vou mostrar um exemplo de uma spell modificada que utiliza o sistema de getPosfromArea, caso você não o tenha instalado em seu ot, veja neste tópico Function getPosfromArea by Dokmos

 

Após ambos instalados vamos ao script de exemplo:

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1.4, 0, -1.9, 0)

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

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
pos = getPosfromArea(cid,arr)
n = 0

while n < #pos do
n = n+1
thing = {x=pos[n].x,y=pos[n].y,z=pos[n].z,stackpos=253}
  if isCreature(getThingfromPos(thing).uid) == TRUE then
  doPushCreature(getThingfromPos(thing).uid,getPlayerLookDir(cid))
  end
end

return doCombat(cid, combat, var)
end

 

A spell acima é o energy wave modificado, agora além de causar danos ela também empurra, fiz ela só para mostrar um exemplo a vocês de como configurar seus scripts de spells que utilizam área, caso seu script já tenha a criatura é só colocá-lo no doPushCreature e divirta-se!

 

Obs: Lembrando que o sistema de empurrar a criatura mais de 1 sqm e com tempo definido é opcional, caso você não coloque a distância nem o tempo, não tem problema, ele será definido como padrão 1 sqm.

 

Espero que consigam aproveitar a função em seus scripts, qualquer bug ou erro postem aqui para eu dar uma verificada, e a configuração em seus scripts fica por conta de vocês.

 

:positive:

 

Atenciosamente,

Dokmos

Dokmos - Coordenador Avatar Online - Progamador Lua

 

MSN: dokmosbr@hotmail.com

Comunidade: www.orkut.com/Main#Community?cmm=63982377

Avatar Online: www.xtibia.com/forum/topic/132936-avatar-the-last-airbender/

 

 

banner.png

alissonlinneker

ñ frite bacon sem kmiza xP
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 15/12/07Posts: 239

ja vi parecido, mais tão bom igual ao seu....nunca!



Devo esquecer aqueles que me impuseram obstáculos infundados e agradecer àqueles que me impulsionaram adiante. É hora, mais do que nunca, de valorizar as amizades e os conhecimentos adquiridos aqui. Agradeço a todos que me apoiaram. Vlw xTibia!
Amais!
[Retired]



~~>Meus Trabalhos:

---Sistema De Domínio De Castelos. (Action)
---Sistema De Mineraçao (Action)
---Scroll Que Da X Exp Quando é Usada (Action)
---Portas Não Abrem? Venha Aqui Ver Como Arruma! (Action)
---Crie Suas Quest´s De Uma Maneira Rapida E Facil. (Action)
---The Demon OaK Quest (Action)

---Addon Por Item, Com Todos Os Outfits. (Npc)

---Aprenda a colocar suas quests no Quest Log (Tutorial+scripts _ data/xml/quests.xml)
---Conhecendo Melhor A Pasta Globalevents (Tutorial+scripts)
---Gerencie O Seu Mysql Como Se Fosse Sqlite (Tutorial)
---Multi World Sistem - Como Funciona. (Tutorial)

---Projeto de tradução do TFS 8.31 SQL - Inglês para o Portugês (Server 8.31)

---2 Templantes para Web Site de OT (Websites de OTserv)
---Atualização de sites do Gesior para sistema de mult-world (Websites de OTserv)

---Thyrania editado (Map)
---Yalahar Global Completo (Map)

---Pic Editor para Tibia 8.2+ (Programa)
---Ztracker - Clone mapas 8.4 (Programa)



h3online

.......0.o.......
avatar
Artesão
Artesão

INFOS

Grupo: ArtesãoRegistrado: 21/02/07Posts: 137Char no Tibia: GOD Grimrath

cara tu ta sinistro nos escripts mais um sinistraço parabens cara.



[X]Camponês
[X]Caçador
[X]Cavaleiro
[X]Baronete
[X]Barão


Tibi4ee e Colex melhores escripters
Mapper e RPG Maker

renatotbreis

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/07/08Posts: 17Char no Tibia: Daeron Remus

Dokmos, a sua função é perfeita para o meu servidor! *-*

 

porém... to com um probleminhão aki...

o meu global não reconhece uma ou duas funções utilizadas no 'doPushCreature', acho que são as 'getTileThingByPos' e 'queryAddTileThing', algo assim.

pode me passar essas do seu global, ou melhor ainda, me passar o seu global pra eu pegá-las?

 

obrigado desde já.

 

braço!

Assinatura irregular, movido para o "quem sou eu"

Narutinhow

O seu destino é você quem faz.
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 21/03/08Posts: 23Char no Tibia: Lord Zmile

Aqui não ta dando certo não na spell.Ela simplismente não empurra só ataca oO

Olá ShadowRock!


Sua assinatura foi movida para a área "Quem sou eu" por que estava danificando o [i]layout[/i] do fórum.
Você pode reestruturar sua assinatura acessando seu painel de controle > perfil > editar "quem sou eu"
Pedimos desculpa pela inconveniência.


Atenciosamente,
Henrique.


Dokmos

Visite www.avataronline.com.br ...
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 29/11/07Posts: 81Char no Tibia: Dokmos

@TheTNT

 

O seu problema é a versão do seu servidor, essas funções já são inseridas nas sources dos servidores recentes. Por isso não tem como eu te passar os códigos.

 

 

@ShadowRock

 

Eu passei a estrutura da função, agora inserí-la em seu script é com vocês.

Dokmos - Coordenador Avatar Online - Progamador Lua

 

MSN: dokmosbr@hotmail.com

Comunidade: www.orkut.com/Main#Community?cmm=63982377

Avatar Online: www.xtibia.com/forum/topic/132936-avatar-the-last-airbender/

 

 

banner.png

renatotbreis

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 26/07/08Posts: 17Char no Tibia: Daeron Remus

@Dokmos

 

diacho... não tem como arrumar isso, ou criar esta função para server 8.1? meu servidor não tem algumas das funções recentes. preciso arrumar um jeito de fazer com que o alvo seja empurrado em spells de target e de area. não tem outro modo? eu preciso muito disso T.T

 

braço!

Assinatura irregular, movido para o "quem sou eu"

Slinix

The Slinix ® TCS Developer
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 19/04/08Posts: 53Char no Tibia: Akilles Palyy

Hey , Dokmos , Queria saber se tinha como Ter uma Function para eu Por em uma "UE" ( Ultimate Explosion ) Que inves de impurrar para onde estou olhando , Empurrar para lonje de min , Se o montro estiver a minha esquerda , sera impurado para a Esquerda , Se estiver a direita , sera para a direita , e assim vai , como tbm para cima e baixo , OBS : nao importando apra onde estou olhando

slinixmapper.jpgsimbo.jpg

 

 

slinixfanbar2dz1.jpguserlovefirefox7dm4arohvk6.gif

 

headerqh0.jpg

opensourcelogo.jpg

spiderspr

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 21/12/06Posts: 1

Ei dokmos vc poderia por o sistema de jump?? por favor, sempre kis saber como funcionava...

Rasinsk

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 20/10/12Posts: 58

Fantástico o sistema, com ele n precisa mais se complica com scripts longos de magia pra empurra a criatura ou player, REP+