TeaM KingS
[center]Ola Convidado, seja bem vindo ao TeaM KingS !

Nós temos tutoriais sobre o WarCraft World Editor: se você tiver alguma duvida pode perguntar que os moderadores ou membros experientes vão lhe ajudar.

Para melhor utilizar nossos recursos é extremamente recomendado que esteja logado em nosso fórum e que leia o nosso regulamento oficial.

Também temos fóruns sobre DotA AllstarS, com guias, estratégias, e muito mais!



[RESOURCE|JASS] EUM - Event a Unit Movement

Página 1 de 2 1, 2  Seguinte

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 02:31

é um systeminha jass que é mais para auxilio para gui users chamado eum
consiste em um systema q forja um evento de quando uma unit se movimenta do lugar q ela estava no momento que voce a "marcou" no systema.
//FINALMENTE NA VERSÃO 2.8, O EUM TOMOU ESTABILIDADE A PONTO DE SER USADO EM SPELLS PARABÉNS A ... ??? me
//e o tek que ajudou pacas, principalmente bills (GOD!) por seus toques e força, victor , por seus reports de bugs e leaks,
//e ao Lcc, pelos Ah que se foda! e seu conhecimento superior a muita gente da hive, (exeto o carinha que meche com lua de la Ah que se foda!)
//that's it, and i hope you like of the system and use it some day XD
//que espero fulturamente, a partir do que eu aprendi nesta function, a fazer events e ser realmente especial no mundo dos
//noobs programadores em WE

v2.8 - Atts em relaçao a versão 2.2

Bugs corrigidos
A lot of Leaks removed
Trigger Unit ativado
Code reduzido drasticamente!


Como instalar:
abra a janela de trigger (f4)
clica no "X" (janela de variaveis)
crie uma nova clickando no "x" verde
no camp nome, coloque "pchs", na lista abaixo, selecione hashtable e de enter
crie uma nova clickando no "x" verde
no camp nome, coloque "pchst", na lista abaixo, selecione timer e de enter
crie uma nova clickando no "x" verde
no camp nome, coloque "pchstid", na lista abaixo, selecione integer e de enter
crie uma nova clickando no "x" verde
no camp nome, coloque "pchsg", na lista abaixo, selecione unit group e de enter

crie uma nova trigger, com o nome que quiser, aqui é onde vc colocara as ações q ocorreram quando a unidade se mover
click aqui abra com o bloco de notas e copie todo o texto que houver e cole no lugar que tem acima das triggers na janela de triggers (a parte que contem este icone )
pronto, instalação completa, para saber como usar, leia o quadro abaixo e nao se esqueça dos creditos, pois esta na licensa GPL, gratuito, pode modificar o quanto quiser, mas se usar da forma que encontrar, nao esqueça de por os creditos, no caso, creditos a mim (iky) XD

ReadMe


Demo
download



Última edição por Iky em 2011-12-25, 10:56, editado 29 vez(es)


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por .Itap em 2011-12-19, 02:57

=OOOOOOOOO gostei
avatar
.Itap

Número de Posts : 1351
Data de inscrição : 09/11/2009
Reputação : 78 Pontos : 16589

Warning Necropost
95 / 10095 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 02:59

acho que isso ajudaria em algumas spells sei la


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por VicToR em 2011-12-19, 11:54

Então isso dai identifica quando uma unit se move ?!
avatar
VicToR

Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 15175

Warning Necropost
4 / 1004 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 11:59

nao e sim, indentifica em uma boolean se moveu, quando vc usa a funçao que checka isso, vc vio a descriçao la no map?


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por VicToR em 2011-12-19, 12:14

Iky escreveu:nao e sim, indentifica em uma boolean se moveu, quando vc usa a funçao que checka isso, vc vio a descriçao la no map?

Nem baixei
avatar
VicToR

Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 15175

Warning Necropost
4 / 1004 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 12:23

é o seguinte, vc ta la no meu do codigo, e por exe.:
é uma magia de duration, e se o hero sair do lugar, ai na trigger inicial vc poe
um custon script:
call PreSetupWithUnit(udg_Caster)

certo, agora sua unit ta no esquema, agora é so vc chamar outra funçao para saber, ai no caso vc poe uma trigger acada 0.03 s para testar
o objetivo é vc guardar um true ou false de a unit ter se mechido em uma variavel para vc usar como condiçao em algo ex.:

custon script: set udg_CondicaoBoo = CheckLocation(udg_Caster)
if
C>CondicaoBoo equal true
A>//alguma coisa//

o que isso funcionaria? se a unit se moveu NAO vai dar em verdadeiro ali o if

entendeu?


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por VicToR em 2011-12-19, 12:56

Então ele verifica se uma unidade se moveu, se sim, retorna true, se não retorna false, sendo assim facilitaria a vida de quem quer fazer uma rupture ult do bloodseeker. certo ?!
avatar
VicToR

Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 15175

Warning Necropost
4 / 1004 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 13:02

ele retorna true se a unidade ficou parada


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por VicToR em 2011-12-19, 13:10

Iky escreveu:ele retorna true se a unidade ficou parada

hum, entendi, foi vc que fez essa function ?!
avatar
VicToR

Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 15175

Warning Necropost
4 / 1004 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 13:14

foi, se vc olhar o codigo direitinho, é ate simples
EDIT
daqui a pouco vou fazer um que se a unit mover, depois de registrada no systema, vai fazer algo
é leak free e MUI


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 15:39

updated


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por VicToR em 2011-12-19, 17:58

Agora que vi, tá cheio de leak veio...
avatar
VicToR

Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 15175

Warning Necropost
4 / 1004 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 18:00

qqqqqqqqqqqqq???????????????????
como onde? pq?
EDIT
deve ser o timer ne>?
é o novo ou antigo?


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Bills em 2011-12-19, 18:20

É alem de leaks, posso citar algumas coisas como:

- use 4 espaços para indicar que um código está dentro de um bloco, ajuda a ler seu codigo.
- Evite criar variaveis locais atoa, tipo para armazenar um valor que só sera usado uma vez... como fez "acho" que em todas functions.
Spoiler:
Ao inves disso:
Código:
function CheckingOutPoint takes unit u, real x, real y returns boolean
   local real xx = GetUnitX(u)
   local real yy = GetUnitY(u)
   if ((x == xx)and(y == yy)) then
      return true
   endif
   return false
endfunction

Faça isso:
Código:
function CheckingOutPoint takes unit u, real x, real y returns boolean
   if x == GetUnitX(u) and y == GetUnitY(u) then
      return true
   endif
   return false
endfunction

- Não precisa ficar usando esse StringHash, use numeros mesmo, tipo 0,1,2,3.
Spoiler:
call SaveUnitHandle(udg_PointCheckHS,GetHandleId(checkTimer),0,takedUnit)
call SaveReal(udg_PointCheckHS,GetHandleId(checkTimer),1,xxx)
call SaveReal(udg_PointCheckHS,GetHandleId(checkTimer),2,yyy)
call SaveBoolean(udg_PointCheckHS , GetHandleId(checkTimer),3,checkBoo)

- Não olhei direito, mas parece que seu system cria um novo timer toda vez. Isso é ruim pakas, gasta desenpenho atoa.

To sem tempo, se não corrigiria ele pra vc.

flws
avatar
Bills

Número de Posts : 1446
Data de inscrição : 04/12/2010
Reputação : 173 Pontos : 19399

Warning Necropost
35 / 10035 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 18:28

como retirar o leak de timer sem quebrar o id do timer?


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-19, 23:55

updated again, timer leak retirado (acho)
more leaks and bugs found, please, report


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por VicToR em 2011-12-20, 02:38

Continua com leak...

Voce está esquecendo de anular as locais...
avatar
VicToR

Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 15175

Warning Necropost
4 / 1004 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-20, 04:05

ve se agora ta com leak ainda


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por VicToR em 2011-12-20, 14:00

Nessa aqui você está dando null na "u" do parâmetro ?! LOL

Código:
function CheckingOutPoint takes unit u, real x, real y returns boolean
  if ((x == GetUnitX(u))and(y == GetUnitY(u))) then
  set u = null
  return true
  endif
  set u = null
  return false
endfunction

Não é necessário criar uma local (local timer tmpt) e depois seta-lo, você pode fazer assim:

local timer tmpt = CreateTimer()

e tbm esqueceu de dar null na "tmpt" que é um timer, por isso precisa de null.

Código:
function CheckNow takes nothing returns nothing
local boolean result
local unit chuc =  LoadUnitHandle(udg_PointCheckHS,GetHandleId(GetExpiredTimer()),StringHash("takedUnit"))
local real lx =  LoadReal(udg_PointCheckHS,GetHandleId(GetExpiredTimer()),StringHash("xxx"))
local real ly =  LoadReal(udg_PointCheckHS,GetHandleId(GetExpiredTimer()),StringHash("yyy"))
local boolean lboo = LoadBoolean(udg_PointCheckHS, GetHandleId(GetExpiredTimer()), StringHash("filter"))
local integer key = LoadInteger(udg_PointCheckHS, GetHandleId(chuc) ,GetHandleId(chuc))
local timer tmpt
if (key != 0) then
set result = CheckingOutPoint(chuc,lx ,ly)
if(result == false)then
set udg_PointCheckMU = chuc
call TriggerExecute(gg_trg_PointCheckerAction)
call SaveBoolean  (udg_PointCheckHS , GetHandleId(GetExpiredTimer()) , StringHash("filter")    ,  false                )
else
set tmpt = CreateTimer()
call SaveUnitHandle(udg_PointCheckHS , GetHandleId(tmpt) , StringHash("takedUnit") ,  LoadUnitHandle(udg_PointCheckHS,GetHandleId(GetExpiredTimer()),StringHash("takedUnit"))                )
call SaveReal      (udg_PointCheckHS , GetHandleId(tmpt) , StringHash("xxx")      ,  LoadReal(udg_PointCheckHS,GetHandleId(GetExpiredTimer()),StringHash("xxx"))              )
call SaveReal      (udg_PointCheckHS , GetHandleId(tmpt) , StringHash("yyy")      ,  LoadReal(udg_PointCheckHS,GetHandleId(GetExpiredTimer()),StringHash("yyy"))              )
call SaveBoolean  (udg_PointCheckHS , GetHandleId(tmpt) , StringHash("filter")    ,  LoadBoolean(udg_PointCheckHS, GetHandleId(GetExpiredTimer()), StringHash("filter"))                )
call TimerStart    ( tmpt      ,        0.03            , false                  ,  function CheckNow )
call DestroyTimer(GetExpiredTimer())
endif
else
call DestroyTimer(GetExpiredTimer())
endif
set chuc = null

endfunction

Novamente esqueceu do "null" do timer e deu "null" no "u" do parâmetro.

Código:
function TellWhenMove takes unit u, boolean b returns nothing
local timer checkTimer = CreateTimer()
local real xxx  = GetUnitX(u)
local real yyy = GetUnitY(u)
if (udg_PointCheckHS == null) then
set udg_PointCheckHS = InitHashtable()
endif
if (b == true) then                                                                                       
call SaveUnitHandle(udg_PointCheckHS , GetHandleId(checkTimer) , StringHash("takedUnit") ,  u                )
call SaveReal      (udg_PointCheckHS , GetHandleId(checkTimer) , StringHash("xxx")      ,  xxx              )
call SaveReal      (udg_PointCheckHS , GetHandleId(checkTimer) , StringHash("yyy")      ,  yyy              )
call SaveInteger  (udg_PointCheckHS , GetHandleId(u)          , GetHandleId(u)          ,  GetHandleId(u)    )
call TimerStart    ( checkTimer      ,        0.03            , false                  ,  function CheckNow )
else
call SaveInteger  (udg_PointCheckHS, GetHandleId(u),GetHandleId(u),0)
endif
set u = null
endfunction
avatar
VicToR

Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 15175

Warning Necropost
4 / 1004 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por lcc em 2011-12-20, 16:40

Na minha opinião...
First make it a library in vjass, because there is no point to use only jass when vjass is turned in jass when compiled...
(WTF pq eu escrevi isso em inglês ? e ainda bem mal (acho q é pq "it's sounds good"))
Faça todas as funções usadas apenas pelo sistema sejão privates, faça as funções de API sejão public (apesar de eu achar um pé no saco escrever o nome da library antes , mais é bom pra garantir q ñ vai ter nenhuma function com o mesmo nome )
Eu ia dizer que é melhor trocar a hashtable por uma struct , só que isso faria o sistema ser dependente de outro sistema , anão ser que vc faça completamente dentro da struct interface.

Vc não precisa de um timer cada para cada unit, 1 timer para o sistema todo já é o suficiente, e ele só precissa rodar enquanto tiver unidades indexadas no sistema(pendentes a condição)
Como o Bills disse ñ precissa usa stringhash, isso só converte os caracteres em numeros, porém isso serve para ñ confundir os valores, só q como vai chamar uma função a mais usar diretamente os numeros é mais rapido.

A unica variavel local q vc precissa na primeira func é a do timer, mais se vc for usar só um timer para todo o sistema isso ñ sera necessario... a unit do parametro ñ recissa ser anulado, a variavel do timer q precissa.

uma local de timer seria bom para ñ usar GetExpiredTimer varias vezes na function "CheckNow", só lembre-se de anular ela depois

Não entendi praq a variavel ''Key'' serve, ela é salva como a handle da unit, a handle a unit numca vai ser 0 (eu acho) "call SaveInteger (udg_PointCheckHS , GetHandleId(u) , GetHandleId(u) , GetHandleId(u) )"

Vc não precissa criar outro timer depois q o primeiro expira, é só criar um timer repetitivo.


Quer ajudar alguém? Então leia isso

____________________________________
avatar
lcc

Número de Posts : 933
Data de inscrição : 13/07/2010
Reputação : 104 Pontos : 14669

Warning Necropost
0 / 1000 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por VicToR em 2011-12-20, 17:49

lcc escreveu:Na minha opinião...
First make it a library in vjass, because there is no point to use only jass when vjass is turned in jass when compiled...
(WTF pq eu escrevi isso em inglês ? e ainda bem mal (acho q é pq "it's sounds good"))



Você fumou algo cara ? e_e
avatar
VicToR

Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 15175

Warning Necropost
4 / 1004 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por lcc em 2011-12-20, 17:52

Nem, odeio fumaça


Quer ajudar alguém? Então leia isso

____________________________________
avatar
lcc

Número de Posts : 933
Data de inscrição : 13/07/2010
Reputação : 104 Pontos : 14669

Warning Necropost
0 / 1000 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Iky em 2011-12-20, 18:08

@victor,@Lcc
em relação a destruição dos timers, eu deixei sem destruir a varivel local no medo de anular o timer como o todo, gostaria de saber se quebra o timer se destruir a variavel.
@Lcc
e em relaçao a key , é um mecanisno para o usuario poder tirar a unit do sys antes mesmo q ela se mova, preste atençao na function inicial quando se tem o parametro false.


avatar
Iky

Número de Posts : 2065
Data de inscrição : 06/04/2010
Reputação : 99 Pontos : 18774

Warning Necropost
10 / 10010 / 100


http://icaro.glauco

Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por lcc em 2011-12-20, 19:01

Anular a variavel ñ é destruir o conteudo dela.

Sobre o "key" agora q vc falou eu reparei melhor, e me fez lembrar que, se vc ñ der flush nas handles armazenadas pela hashtable , tmb é leak.
"call SaveInteger (udg_PointCheckHS , GetHandleId(u) , GetHandleId(u) , GetHandleId(u) )"
Eu ñ tinha entendido tmb pq vc usa GetHandleId 3 vezes, 1 seria o suficiente, na row era só usar algum numero e o valor a ser salvo tmb é só colocar algum numero, 1 por exemplo ou usar um boolean (que por dentro daria na mesma)


Quer ajudar alguém? Então leia isso

____________________________________
avatar
lcc

Número de Posts : 933
Data de inscrição : 13/07/2010
Reputação : 104 Pontos : 14669

Warning Necropost
0 / 1000 / 100


Voltar ao Topo Ir em baixo

Re: [RESOURCE|JASS] EUM - Event a Unit Movement

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Página 1 de 2 1, 2  Seguinte

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum