Introdução ao Comando WALKTO.

Bem-vindo!

Ao se registrar conosco, você poderá discutir, compartilhar e enviar mensagens privadas com outros membros da nossa comunidade.

Registrar agora!
  • PROMOÇÃO DE NATAL NO AR

    Novo servidor: CraftLandia Olimpo


Status
Não está aberto para novas respostas.
Entrou
Jan 13, 2014
Mensagens
6,632
Pontuação de reação
1,781
Idade
29
Localização
Steam
Cubos
0
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
Prezados, após meses de espera e testes venho aqui dar um "presentinho" de Natal aos Programadores e usuários de Macros, o presentinho é um novo comando relacionada a Movimentação. Antes da Explicação do comando, seus Bugs e Limitações venho dizer o por quê de não ter o postado antes. Eu descobri o comando a 6 meses quando estava traduzindo o Mod Macro da 1.5.2, já que não Havia a linguagem português, encontrei o comando dentre os arquivos do Mod e logo percebi que nunca havia visto o mesmo, fui pesquisar para ver sua utilidade e aplicação e também percebi que o mesmo nem se quer era Público na Internet. Então sem mais Delongas vai a Explicação do mesmo:
WALKTO
WALKTO(X,Y,Z,Velocidade,Raio);
(Andar Para)
O Comando WALKTO é um comando para andar, basta colocar as coordenadas (X,Y,Z) e o comando irá partir de sua posição atual para a posição indicada. o "Raio" é a distância em que ele pode terminar referente ao seu destino (X,Y,Z) ou seja, se você colocar um raio de 10 blocos ele poderá parar a 10 blocos de distância de seu destino já que num raio de 10 blocos está seu destino. E Velocidade não precisa de explicação né...
"Tá mais da pra fazer isso com comandos para andar junto como keydown."
A diferença de Walkto para outros comandos é a forma como ele foi feito, ele usa uma espécie de I.A (inteligência artificial) para andar até o local desejado. "Como assim uma Inteligência Artificial?" Um exemplo básico, se você fosse colocar a Macro para andar em uma linha reta com Keydown(forward) ela andará reto mas se tiver um obstáculo como um bloco na frente ela parará no bloco e ficará ali, já Se usarmos o comando Walkto ela desviará do bloco sozinha sem nenhum outro comando, pois sua I.A identificou um obstáculo e desviou do mesmo.
Ou seja, basicamente o comando anda para a coordenada definida desviando de obstáculos, se tiver um bloco na frente ele desviará ou ira passar por cima. Se tiver uma parede na frente a macro fará a volta na parede para onde ela acha que têm uma entrada. O comando pode parecer simples, mais vai facilitar muito a vida dos programadores em Macros que usam este tipo de movimentação. É claro que como dito no início do Tópico o comando contém bugs e limitações mais em muitos casos ainda será útil. Abaixo os Bugs e Limitações do mesmo:
Nos testes o Comando só funciona se seu Destino for menor que 90 Blocos:
Ex: Seu X é 0, e seu destino é X 100, a macro ficará parada.
Ou seja, seu destino só pode estar a no Máximo a 90 blocos (média de 70 em diagonal).
A I.A do comando apresentou algumas falhas nos testes, como tentar pular cercas de Madeira, o que é impossível. Portanto os programadores devem fazer testes antes de postar qualquer macro com o mesmo.
Outra falha na I.A faz com é que, se têm uma parede na sua frente, mais a "porta" dela está muito longe de você o comando tenta atravessar a parede então testes devem ser feitos antes do uso.
A I.A do comando até é boa, mais não a sobrecarregue fazendo ela passar em lugares onde ela deverá virar muitas vezes, como labirintos ou lugares com várias vias. Obs: Eu a testei em um Labirinto e não deu muito certo...
A I.A do comando não reage bem com escadas de Parede, portanto não é aconselhável usar para tal.
Esses são os Bugs que consegui perceber nos testes, se alguém descobrir mais algum me envie uma MP e estarei atualizando o Tópico. Se alguém tiver dúvida sobre o comando me envie uma MP ou pergunte aqui nos comentários.
Att. zRyjo
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
CHANGLOG
-18/12/2015 ► Criação do Tópico.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
 
acho q esse comando vai ajudar mto em muitas coisas, boaa
 
Boa jão , queria saber fazer esses bagui de programação
 
GoodManLP disse:
acho q esse comando vai ajudar mto em muitas coisas, boaa
Vai facilitar 50% a vida dos programadores, nas macros que se movimentam é claro :P
yDame disse:
Boa jão , queria saber fazer esses bagui de programação
rsrs Tem que ter paciência, ler re-ler, testar várias vezes...
 
acho q é só pra 1.5.2 em, e tambem eu vi aq que o comando é


WALKTO(<X>,<Y>,<Z>,<VELOCIDADE>,<RAIO>);
nao

WALKTO(<X>,<Y>,<Z>,<RAIO>,<VELOCIDADE>);

se quiser, pode verificar o codigo fonte da classe do comando aqui em baixo
package net.eq2online.macros.scripting.actions.game;

import bdv;
import bfh;
import bfi;
import kx;
import net.eq2online.macros.MovementInputFromAI;
import net.eq2online.macros.compatibility.PrivateFields;
import net.eq2online.macros.scripting.ScriptAction;
import net.eq2online.macros.scripting.ScriptCore;
import net.eq2online.macros.scripting.api.IMacro;
import net.eq2online.macros.scripting.api.IMacroAction;
import net.eq2online.macros.scripting.api.IReturnValue;
import net.eq2online.macros.scripting.api.IScriptActionProvider;
import net.minecraft.client.Minecraft;
import nx;
import ny;
import nz;
import oj;
import px;

public class ScriptActionWalkTo
extends ScriptAction
{
private oj swimmingAI;
private int lastPosX;
private int lastPosY;
private int lastPosZ;
private int stuckCounter;

public ScriptActionWalkTo()
{
super("walkto");
}

public boolean isPermissable()
{
return true;
}

public String getPermissionGroup()
{
return "input";
}

public void onStopped(IScriptActionProvider provider, IMacro macro, IMacroAction instance)
{
bdv thePlayer = Minecraft.x().g;
bfh oldMovementInput = (bfh)instance.getState();
if ((thePlayer != null) && (oldMovementInput != null)) {
thePlayer.b = oldMovementInput;
}
}

public boolean canExecuteNow(IScriptActionProvider provider, IMacro macro, IMacroAction instance, String rawParams, String[] params)
{
bdv thePlayer = Minecraft.x().g;
bfh oldMovementInput = (bfh)instance.getState();
if (params.length > 2)
{

/*
X, Y e Z em ordem
---------------------------------------------------------------*/
float xPos = ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[0], false), 0.0F);
float yPos = ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[1], false), 0.0F);
float zPos = ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[2], false), 0.0F);
/*-------------------------------------------------------------*/
if (oldMovementInput != null)
{
if (this.swimmingAI.a()) {
this.swimmingAI.e();
}
thePlayer.aC().e();
if (thePlayer.aC().f())
{
if (this.stuckCounter > 200)
{
thePlayer.b = oldMovementInput;
return true;
}
double remaining2D = thePlayer.f(xPos, thePlayer.v, zPos);
if (remaining2D < 1.0D)
{
double deltaX = xPos - thePlayer.u;
double deltaZ = zPos - thePlayer.w;
thePlayer.d(deltaX, 0.0D, deltaZ);

thePlayer.b = oldMovementInput;
return true;
}
if (remaining2D < 5.0D) {
thePlayer.aA().a(xPos, thePlayer.v + 1.0D, zPos, 1.0F);
}
}
int newPosX = kx.c(thePlayer.u);
int newPosY = kx.c(thePlayer.v);
int newPosZ = kx.c(thePlayer.w);
if ((newPosX == this.lastPosX) && (Math.abs(newPosY = this.lastPosY) < 2) && (newPosZ == this.lastPosZ)) {
this.stuckCounter += 1;
} else {
this.stuckCounter = 0;
}
this.lastPosX = newPosX;
this.lastPosY = newPosY;
this.lastPosZ = newPosZ;

thePlayer.aA().c();
thePlayer.az().a();
thePlayer.aB().b();
((MovementInputFromAI)thePlayer. B).assignValuesFromPlayer(thePlayer);

return false;
}
if (thePlayer != null)
{
/*
VELOCIDADE e RAIO em ordem
---------------------------------------------------------------*/
float speed = params.length > 3 ? Math.min(Math.max(ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[3], false), 1.0F), 0.1F), 1.0F) : 1.0F;
float radius = params.length > 4 ? Math.min(Math.max(ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[4], false), 64.0F), 16.0F), 512.0F) : 64.0F;
/*-------------------------------------------------------------*/

PrivateFields.navigatorPathSearchRange.set(thePlayer.aC(), Float.valueOf(radius));

double distance2D = thePlayer.f(xPos, thePlayer.v, zPos);
if (((thePlayer.b instanceof bfi)) && ((thePlayer.aC().a(xPos, yPos, zPos, speed)) || (distance2D < 5.0D)))
{
this.stuckCounter = 0;
this.swimmingAI = new oj(thePlayer);

oldMovementInput = thePlayer.b;
instance.setState(oldMovementInput);

thePlayer.b = new MovementInputFromAI();
return false;
}
}
}
return true;
}

public boolean isClocked()
{
return false;
}

public IReturnValue execute(IScriptActionProvider provider, IMacro macro, IMacroAction instance, String rawParams, String[] params)
{
return null;
}
}
 
Mtycon disse:
acho q é só pra 1.5.2 em, e tambem eu vi aq que o comando é

WALKTO(<X>,<Y>,<Z>,<VELOCIDADE>,<RAIO>);
nao

WALKTO(<X>,<Y>,<Z>,<RAIO>,<VELOCIDADE>);
se quiser, pode verificar o codigo fonte da classe do comando aqui em baixo
package net.eq2online.macros.scripting.actions.game;

import bdv;
import bfh;
import bfi;
import kx;
import net.eq2online.macros.MovementInputFromAI;
import net.eq2online.macros.compatibility.PrivateFields;
import net.eq2online.macros.scripting.ScriptAction;
import net.eq2online.macros.scripting.ScriptCore;
import net.eq2online.macros.scripting.api.IMacro;
import net.eq2online.macros.scripting.api.IMacroAction;
import net.eq2online.macros.scripting.api.IReturnValue;
import net.eq2online.macros.scripting.api.IScriptActionProvider;
import net.minecraft.client.Minecraft;
import nx;
import ny;
import nz;
import oj;
import px;

public class ScriptActionWalkTo
extends ScriptAction
{
private oj swimmingAI;
private int lastPosX;
private int lastPosY;
private int lastPosZ;
private int stuckCounter;

public ScriptActionWalkTo()
{
super("walkto");
}

public boolean isPermissable()
{
return true;
}

public String getPermissionGroup()
{
return "input";
}

public void onStopped(IScriptActionProvider provider, IMacro macro, IMacroAction instance)
{
bdv thePlayer = Minecraft.x().g;
bfh oldMovementInput = (bfh)instance.getState();
if ((thePlayer != null) && (oldMovementInput != null)) {
thePlayer.b = oldMovementInput;
}
}

public boolean canExecuteNow(IScriptActionProvider provider, IMacro macro, IMacroAction instance, String rawParams, String[] params)
{
bdv thePlayer = Minecraft.x().g;
bfh oldMovementInput = (bfh)instance.getState();
if (params.length > 2)
{

/*
X, Y e Z em ordem
---------------------------------------------------------------*/
float xPos = ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[0], false), 0.0F);
float yPos = ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[1], false), 0.0F);
float zPos = ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[2], false), 0.0F);
/*-------------------------------------------------------------*/
if (oldMovementInput != null)
{
if (this.swimmingAI.a()) {
this.swimmingAI.e();
}
thePlayer.aC().e();
if (thePlayer.aC().f())
{
if (this.stuckCounter > 200)
{
thePlayer.b = oldMovementInput;
return true;
}
double remaining2D = thePlayer.f(xPos, thePlayer.v, zPos);
if (remaining2D < 1.0D)
{
double deltaX = xPos - thePlayer.u;
double deltaZ = zPos - thePlayer.w;
thePlayer.d(deltaX, 0.0D, deltaZ);

thePlayer.b = oldMovementInput;
return true;
}
if (remaining2D < 5.0D) {
thePlayer.aA().a(xPos, thePlayer.v + 1.0D, zPos, 1.0F);
}
}
int newPosX = kx.c(thePlayer.u);
int newPosY = kx.c(thePlayer.v);
int newPosZ = kx.c(thePlayer.w);
if ((newPosX == this.lastPosX) && (Math.abs(newPosY = this.lastPosY) < 2) && (newPosZ == this.lastPosZ)) {
this.stuckCounter += 1;
} else {
this.stuckCounter = 0;
}
this.lastPosX = newPosX;
this.lastPosY = newPosY;
this.lastPosZ = newPosZ;

thePlayer.aA().c();
thePlayer.az().a();
thePlayer.aB().b();
((MovementInputFromAI)thePlayer. B).assignValuesFromPlayer(thePlayer);

return false;
}
if (thePlayer != null)
{
/*
VELOCIDADE e RAIO em ordem
---------------------------------------------------------------*/
float speed = params.length > 3 ? Math.min(Math.max(ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[3], false), 1.0F), 0.1F), 1.0F) : 1.0F;
float radius = params.length > 4 ? Math.min(Math.max(ScriptCore.tryParseFloat(ScriptCore.parseVars(provider, macro, params[4], false), 64.0F), 16.0F), 512.0F) : 64.0F;
/*-------------------------------------------------------------*/

PrivateFields.navigatorPathSearchRange.set(thePlayer.aC(), Float.valueOf(radius));

double distance2D = thePlayer.f(xPos, thePlayer.v, zPos);
if (((thePlayer.b instanceof bfi)) && ((thePlayer.aC().a(xPos, yPos, zPos, speed)) || (distance2D < 5.0D)))
{
this.stuckCounter = 0;
this.swimmingAI = new oj(thePlayer);

oldMovementInput = thePlayer.b;
instance.setState(oldMovementInput);

thePlayer.b = new MovementInputFromAI();
return false;
}
}
}
return true;
}

public boolean isClocked()
{
return false;
}

public IReturnValue execute(IScriptActionProvider provider, IMacro macro, IMacroAction instance, String rawParams, String[] params)
{
return null;
}
}
kkkkkk sim o comando é da maneira como você disse, foi um simples erro na edição do tópico, muito ctrl+c e v me perdi, desculpas e obrigado por lembrar.
 
zRyjo disse:
kkkkkk sim o comando é da maneira como você disse, foi um simples erro na edição do tópico, muito ctrl+c e v me perdi, desculpas e obrigado por lembrar.
de boua kkkk
 
zRyjo disse:
Muito tópico ta ligado, ai quando fui fazer esse os dedo tava com parkinson kkkkk
é a emoçaum de ter escrito o primeiro topico explicando o comando kkk
 
SLEEPP disse:
:) Já esta quase pronta uma macro que estou programando com este comando.
Boa intro.

Bjos.
Haha valeu, também tenho planos para ele, mas estou meio ocupado con outras coisas, boa sorte ai e se você acharem algum bugme avisem para que eu possa atualizar o tópico.
Mtycon disse:
é a emoçaum de ter escrito o primeiro topico explicando o comando kkk
Kkk primeiro tópico a deixa ele público ;)
HeySoul disse:
Ah muleke, boa, macroeiros darão UP nesse tópico klkkkk
Rsrs /o/
iKewaii disse:
Boa Ryjo [emoji14]
Valeu [emoji14]
 
ErickH9 disse:
Salvei os tópicos nos favoritos,vou testar na 1.7,ver se consigo fazer umas gambiarras...
Boa sorte amigo, infelizmente não sei te dizer se o mesmo se aplica a 1.7/1.8 creio eu que não, mas não tenho certeza, uma pena pois o comando é muito legal :)
 
Status
Não está aberto para novas respostas.

Usuários que estão visualizando este tópico

Voltar
Topo