Jump to content
Sign in to follow this  
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

Edited by Mickfern

Share this post


Link to post
Share on other sites
Biozard    0
Biozard

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

Share this post


Link to post
Share on other sites
Mock    32
Mock

ai vc precisa saber mto de scripting e mto de math

Share this post


Link to post
Share on other 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 \

Share this post


Link to post
Share on other sites
Biozard    0
Biozard

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Edited by Mickfern

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×