Ir para conteúdo
Entre para seguir isso  
Dokmos

[8.1+] System doPushCreature by Dokmos

Recommended Posts

Dokmos    1
Dokmos

Bom, já vi várias dúvidas em como criar uma spell/action que empurra o player, mas este não entra para paredes/fields/creatures/etc. Como não vi nenhuma resposta, resolvi liberar meu sistema de empurrar uma criatura para a direção que você escolher (como o doMoveCreature - porém não empurra contra obstáculos).

 

Então, vamos lá... (Y)

 

Dentro de data/actions/lib/actions.lua adicione:

function doPushCreature(cid, moveuid, posx, posy, distance, time)

 

function moving(info)

local pos = getThingPos(moveuid)

local newpos = {x=pos.x+posx, y=pos.y+posy, z=pos.z, stackpos=1}

 

if queryTileAddThing(cid, newpos) == 1 then

if distance == 1 then

doTeleportThing(moveuid, newpos, TRUE)

else

distance = (distance - 1)

doTeleportThing(moveuid, newpos, TRUE)

addEvent(moving, time, info)

end

else

doPlayerSendCancel(cid, "Sorry, not possible.")

end

end

 

Lembrando que você colocá-la também no /lib/ do data/spell,/talkactions/ e outros...

 

Function:

doPushCreature(cid, moveuid, posx, posy, distance, time)

 

CID - Player que realiza a action.

MOVEUID - Criatura que será movida.

DIRECTION - Direção que a criatura será empurrada.

POSX - O aumento do .x para a nova posição.

POSY - O aumento do .y para a nova posição.

DISTANCE - Quantos sqm que a criatura será empurrada.

TIME - Em quanto tempo a criatura será lançada em milésimos de segundos (Tempo Máximo para que a criatura não possa se mexer é 500 - acima disto terá um efeito parecido com drunk ;D)

 

NORTE

POSX = 0

POSY = -1

 

SUL

POSX = 0

POSY = 1

 

LESTE

POSX = 1

POSY = 0

 

OESTE

POSX = -1

POSY = 0

 

Exemplo:

function onSay(cid, words, param)

 

local target = getCreatureTarget(cid)

 

if isCreature(target) == TRUE then

doPushCreature(cid, target, 0, -1, 5, 500)

else

doPlayerSendCancel(cid, "You can only use it on creatures.")

end

 

end

 

Então é isso aí, espero que façam bom proveito, qualquer dúvida ou problemas postem aqui... e peço que quando postarem em outro fórum, coloquem pelo menos os créditos e o apoio. Esta function poderá ser útil em várias actions, basta apenas ser criativo! :bye:

 

Obs: Atualizei o sistema novamente, além de estar funcionando 100% sem problemas, agora tem sistema de sqm e tempo da ação!

 

PS: Estou disponibilizando o sistema de empurrar, agora aprender a configurar em sua spell/action é com vocês.

 

Créditos: Dokmos

Apoio: Avatar/Heroes Project

 

Atenciosamente,

Dokmos

Editado por Dokmos

Compartilhar este post


Link para o post
AkillesW    6
AkillesW

Muito Bom gostei bastante.Parabéns pelo Script

Compartilhar este post


Link para o post
Pedro    1
Pedro

Muito bom, quebrou o galho de muitos Scripters, gostei muito da função.

 

Só acho que na estruturação do código deixou a desejar, é bem díficil de ler, poderia ter organizado melhor(colocando os espaços nuns lugares, e etc). Para códigos use as tags [.code] e [./code] (sem os pontos).

 

~pedroo

Compartilhar este post


Link para o post
Dokmos    1
Dokmos

Obrigado, Pedro sobre o [.code] parece que tem um problema quando posto que aumenta a margen da página, então resolvi coloca apenas o [.quote], mas estiver realmente difícil de enteder eu melhoro...

 

Dokmos

Compartilhar este post


Link para o post
Machine!    2
Machine!

Hey pefect ^^ usarei nu meu servidor..

 

Dokmos: atualizei o outro topic sabe!

Compartilhar este post


Link para o post
Dokmos    1
Dokmos

Ok, Marlon essa function é bem útil para quem gosta de usar doMoveCreature nas spells/actions...

 

Obrigado e divirta-se! ;D

Compartilhar este post


Link para o post
Kaotar    5
Kaotar

Meu caro DoKmos, mesmo erro que achei no script do Marlon, esta citado "moveuid" e "cid" sendo eles a mesma coisa, ao invez disso você poderia fazer um sqms para aumentar o quanto o player sera movido e usar retuns exemplo return False ao inves de "doPlayerSendCancel(cid, "Sorry, not possible.")" e no script onde usar a função botar "if (doPushCreature(cid, direction)== False) then doPlayerSendCancel(cid, "Sorry, not possible.")"

 

Espero que entenda tudo o que eu descrevi e que goste das ideias.

Compartilhar este post


Link para o post
Dokmos    1
Dokmos
Meu caro DoKmos, mesmo erro que achei no script do Marlon, esta citado "moveuid" e "cid" sendo eles a mesma coisa, ao invez disso você poderia fazer um sqms para aumentar o quanto o player sera movido e usar retuns exemplo return False ao inves de "doPlayerSendCancel(cid, "Sorry, not possible.")" e no script onde usar a função botar "if (doPushCreature(cid, direction)== False) then doPlayerSendCancel(cid, "Sorry, not possible.")"

 

Espero que entenda tudo o que eu descrevi e que goste das ideias.

 

 

Bom, o script não é do Marlon, ele apenas pegou de outro fórum onde eu havia postado e colocou aqui. E o cid e o moveuid não é a mesma coisa, cid é quem empurra e moveuid é o player empurrado, o que eu achei melhor porque como você disse para colocar o return FALSE e no script colocar if doPushCreature(moveuid, direction) == TRUE then, isso fará com que o script fiquei maior e desnecessário, portanto fica melhor do jeito que está...

 

Ah, eu gostei da idéia de mover quantos sqms o player escolher, já estou trabalhando e irei atualizar... Espero que tenha entendido o que eu disse (Y)

 

Sem mais,

Dokmos

Compartilhar este post


Link para o post
Capaverde    1
Capaverde

@dokmos na verdade fica de igual tamanho, e nem sempre o cara que fizer a spell vai querer que ela mande um sendcancel

 

quanto ao script.. talvez funcione, mas tá muito grande, olha isso aqui: http://forums.otserv.com.br/showthread.php?t=50582

Editado por Capaverde

Compartilhar este post


Link para o post
Dokmos    1
Dokmos

@Capaverde

 

Eu entreguei o script todo pronto para todos, por isso que já coloquei até o SendCancel, porque muitos que estão em começando a mexer já têm problemas com isso, agora o bom scripter sem dúvidas nenhuma pega uma function e modifica a seu gosto, se você está tendo problemas em configurar o SendCancel, só me enviar mp que eu te ajudo...

 

Ah, e sobre o seu script... o que você fez vou foi só colocar um script dentro do outro, não vi nenhuma vantagem, além do mais o meu tem sistema de tempo e velocidade! (Y)

 

Sem mais,

Dokmos

Compartilhar este post


Link para o post
Capaverde    1
Capaverde

@dokmos

a minha função está mais organizada que a sua, ela nao usa todos aqueles else-ifs para achar a posiçao a ser checada, além de usar queryTileAddThing pra verificar se é possível andar no tile ou não, que é uma função das sources criada especialmente com esse propósito, sem a necessidade de tantos getThings.

 

sim, eu botei um script (funçao) dentro do outro, isso é chamado reutilização de software e ajuda muitos programadores a não ficarem repetindo linhas de código desnecessárias, qual o problema?

 

na verdade eu só tenho duas coisas contra seu script: é muito grande e confuso e tem a mesma funcionalidade do meu que é muito menor, e sobre o seu "sistema de tempo e velocidade", eu poderia ter colocado um event também, facilmente, mas achei melhor deixar como opção do scripter criar um event próprio, e deixar minha função apenas com as partes verdadeiramente necessárias.

Compartilhar este post


Link para o post
Dokmos    1
Dokmos

@Capaverde

 

Não vou discutir com você, porque essa é a pior coisa que tem em divulgar scripts, sempre existem aqueles que não conseguem deixar o orgulho do lado e criticar, bem se você conseguiu fazer o script menor, meus parabéns! Agora você disse que poderia colocar o sistema de tempo e velocidade, não vou duvidar, mas a questão aqui é que você não colocou, eu sim... então não vem aqui com nariz empinado dizendo que seu script é melhor, antes de responder esse post pense bem, para que não se submeta a um nível ridículo novamente, pois não terei tempo para você...

Compartilhar este post


Link para o post
Capaverde    1
Capaverde

@dokmos

normalmente eu só criticaria, com a unica intenção de que você melhorasse sua função e se tornasse um melhor scripter e talz..

mas nesse caso ja existia uma função pronta, minha ou não, não importa, e você nao tinha necessidade de postar uma outra, eu até lhe desculparia se a sua fosse melhor que a original, ou se quando eu postasse apontando a existencia dela pra você, voce reconhecesse e dissesse que não tinha visto, mas ao invés disso vc fez o oposto disso, e por isso eu só lamento

Editado por Capaverde

Compartilhar este post


Link para o post
Dark    3
Dark

Epa, Epa, Epa.

 

Vamo parar com a briga. A função do Capa Verde realmente esta menor e de facil entendimento, mas, apesar do script do Dokmos estar maior, esta bem explicado e acredito que seja por isso que ela tenha sido aprovada.

 

Espero que as "alfinetadas" não continuem, ou terei que tomar medidas que não gostaria de tomar (Y)

Compartilhar este post


Link para o post
Dokmos    1
Dokmos

@ Dark

 

Sem problemas, agora o script está menor e melhor! ;D

Compartilhar este post


Link para o post
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.

×