[RESOURCE|JASS] EUM - Event a Unit Movement
5 participantes
Página 1 de 2
Página 1 de 2 • 1, 2
[RESOURCE|JASS] EUM - Event a Unit Movement
é 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 e seu conhecimento superior a muita gente da hive, (exeto o carinha que meche com lua de la )
//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
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 e seu conhecimento superior a muita gente da hive, (exeto o carinha que meche com lua de la )
//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
//
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)
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
=OOOOOOOOO gostei
.Itap- Número de Posts : 1351
Data de inscrição : 09/11/2009
Reputação : 78 Pontos : 29234
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
Então isso dai identifica quando uma unit se move ?!
VicToR- Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 27820
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
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?
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
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
VicToR- Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 27820
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
é 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?
é 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?
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
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 ?!
VicToR- Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 27820
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
Iky escreveu:ele retorna true se a unidade ficou parada
hum, entendi, foi vc que fez essa function ?!
VicToR- Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 27820
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
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
EDIT
daqui a pouco vou fazer um que se a unit mover, depois de registrada no systema, vai fazer algo
é leak free e MUI
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
Agora que vi, tá cheio de leak veio...
VicToR- Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 27820
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
qqqqqqqqqqqqq???????????????????
como onde? pq?
EDIT
deve ser o timer ne>?
é o novo ou antigo?
como onde? pq?
EDIT
deve ser o timer ne>?
é o novo ou antigo?
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
É 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.
- Não precisa ficar usando esse StringHash, use numeros mesmo, tipo 0,1,2,3.
- 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
- 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
Bills- Número de Posts : 1446
Data de inscrição : 04/12/2010
Reputação : 173 Pontos : 32044
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
como retirar o leak de timer sem quebrar o id do timer?
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
updated again, timer leak retirado (acho)
more leaks and bugs found, please, report
more leaks and bugs found, please, report
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
Continua com leak...
Voce está esquecendo de anular as locais...
Voce está esquecendo de anular as locais...
VicToR- Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 27820
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
Nessa aqui você está dando null na "u" do parâmetro ?! LOL
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.
Novamente esqueceu do "null" do timer e deu "null" no "u" do parâmetro.
- 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
VicToR- Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 27820
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
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.
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.
lcc- Número de Posts : 933
Data de inscrição : 13/07/2010
Reputação : 104 Pontos : 27314
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
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
VicToR- Número de Posts : 2002
Data de inscrição : 19/12/2010
Reputação : 243 Pontos : 27820
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
Nem, odeio fumaça
lcc- Número de Posts : 933
Data de inscrição : 13/07/2010
Reputação : 104 Pontos : 27314
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
@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.
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.
Re: [RESOURCE|JASS] EUM - Event a Unit Movement
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)
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)
lcc- Número de Posts : 933
Data de inscrição : 13/07/2010
Reputação : 104 Pontos : 27314
Página 1 de 2 • 1, 2
Tópicos semelhantes
» [JASS] Aulas de vJass/Jass/Script/Coisa do Cão
» [Duvida] Movement Speed
» [RESOURCE] Julgamento
» [RESOURCE] Gládios Dançantes [MUI]
» [Resource]KR Model Pack
» [Duvida] Movement Speed
» [RESOURCE] Julgamento
» [RESOURCE] Gládios Dançantes [MUI]
» [Resource]KR Model Pack
Página 1 de 2
Permissões neste sub-fórum
Não podes responder a tópicos