Ir para conteúdo
Entre para seguir isso  
Mock

getPosByAngle & rotatePos

Recommended Posts

Mock    32
Mock

Eu percebi que ninguem no mundo do otserv ja tinha usado as funçoes seno e cosseno. Ai so pq eu tava atoa³ fiz 2 funçoes que podem vir a ser MUITO uteis.

 

A segunda a roratePos você pode rodar uma posiçao, assim vc define o centro e o rai, em seguida vc pore rodar o raio, e a ponta do raio vai ser a posição, vc pdoe rodar 360º, assim pode fazer arcos, pode desenharu ma circunferencia e talz. Até se vc quiser fazer spells que rodam sem ter que fazer 1 area para cada passo.

 

Eu rodei isso:

require('gd')
im = gd.createTrueColor(500, 500)
for ang=1,360 do
local novo = rotatePos({x=250,y=250},100,ang)
im:setPixel(math.floor(novo.x),math.floor(novo.y),im:colorAllocate(255, 0,0))
end
im:png("out.png")
os.execute("out.png")

E saiu isso:

outq.png

Ou seja eu desenhei uma circunferencia XD

 

Com a outra funão você pega um ponto, e em seguida aponta uma distancia e um angulo e ele retorna onde fica, você pode por exemplo ao inves de fazer spelsl que saem em angolos digamos "retos" 360º, 90º ou 45º (spelsl na diagonal ou na frente do player) vc pode soltar spelsl que saem tortas, entre a parte reta e a diagonal xD

 

Em fim muitas utilidades. Ta aki as funçoes:

 

function getPosByAngle(pos,distance,ang) --By Mock the bear
local ang = math.rad(ang)
pos.x = (math.cos(ang)*pos.x)+distance
pos.y = (math.sin(ang)*pos.y)+distance
return pos
end

function rotatePos(center,radius,ang) --By Mock the bear
ang = math.rad(ang)
center.x = (radius * math.cos(ang) - radius * math.sin(ang))+center.x
center.y = (radius * math.sin(ang) + radius * math.cos(ang))+center.y
return center
end

Editado por Mickfern

Compartilhar este post


Link para o post
Compartilhar em outros sites
Biozard    0
Biozard

nossa,nao entendi quase nada...como vou colocar isso numa spells?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mock    32
Mock

ai vc precisa saber mto de scripting e mto de math

Compartilhar este post


Link para o post
Compartilhar em outros sites
ADM MaX DE    0
ADM MaX DE

Até intendi um pouco, mais pelas fotos mesmo, porque pelo texto... :S

 

Mas muito boas as funções, vou ver se uso em algo, gostei da idéia de spells na diagonal sem ser reta \

Compartilhar este post


Link para o post
Compartilhar em outros sites
Biozard    0
Biozard

alguem posta 1 exemplo de spell que usa essa função ai por favor...

Compartilhar este post


Link para o post
Compartilhar em outros sites
tigerx2    1
tigerx2

Tô estudando esse bang de seno, cosseno e tangente,

entendi como funciona, mas não sei como usar :P

 

Mas parabéns pela ideia ai de estar usando uma coisa

que ninguém tinha pensado ;d

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mock    32
Mock

oia ae:

function onCastSpell(cid)
    for ang=1,12 do
         local p = rotatePos(getPlayerPosition(cid),4,ang*30)
         doCombatAreaHealth(cid,p,[[spell params]])
    end
end

---ou

function onCastSpell(cid)
    local ang = math.random(0,360)
    for i=1,5 do
         local p = getPosByAngle(getCreaturePosition(cid),i,ang)
         doCombatAreaHealth(cid,p,[[spell params]])
    end
end

Editado por Mickfern

Compartilhar este post


Link para o post
Compartilhar em outros sites
Vítor Amaral    1
Vítor Amaral

achei muito interessante. vc é bom de mat, né mock? seu raciocínio parece muito bom para esse lado de lógica tb.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Marcelo Côrtes    0
Marcelo Côrtes

-Revivendo

Capaverde já tinha feito uma função parecida

http://forums.otserv.com.br/showthread.php?26646-rotateAreaToRight%28area%29

 

e até uma magia

 

http://forums.otserv.com.br/showthread.php?26660-Hurricane-%28furac%E3o%29-de-fogo

 

Enfim, acho que as duas tão bem diferentes... ele fez muita coisa a mais, não sei se foi sem necessidade ou acrescentando features.

De qualquer modo, parabéns :D

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×