elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Curso de javascript por TickTack


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 235
131  Programación / Programación General / ¿Se puede hacer un bat que abra john the rippley y le de un comando? en: 15 Diciembre 2024, 19:07 pm
Tendré que usarlo muchas veces creo, así que quisiera automatizar un poco la tarea:
- Abrir la carpeta run donde están los ejecutables de john.
- En la barra de direcciones, escribir CMD.
- Pasarle el comando john --wordlist=Mywords.txt rar.hashes.

Ese archivo lo cambiaré manualmente luego de que john termine.

¿Cómo lo hago?

baia baia, respuesta de God PT:
Citar
¡Claro que puedes hacerlo! Puedes crear un archivo batch (`.bat`) para automatizar este proceso y que ejecute directamente el comando sin necesidad de escribir manualmente en la barra de direcciones o abrir el símbolo del sistema por separado. Aquí tienes una guía paso a paso:

### 1. **Crea el archivo batch**

1. Abre un editor de texto como *Bloc de notas* o cualquier otro editor de texto simple.
2. Escribe el siguiente código (personalizando las rutas según tu configuración):

```batch
@echo off
:: Cambia a la carpeta donde está el ejecutable de John the Ripper
cd /d "C:\ruta\a\la\carpeta\run"

:: Ejecuta el comando con el archivo de wordlist y el archivo de hashes
john --wordlist=Mywords.txt rar.hashes

:: Pausa para que puedas ver el resultado
pause
```

3. Guarda el archivo con la extensión `.bat`. Por ejemplo, podrías llamarlo `ejecutar_john.bat`.

   - Asegúrate de que al guardar uses **Guardar como...** y selecciones "Todos los archivos" como tipo, para evitar que Windows lo guarde como `ejecutar_john.bat.txt`.

---

### 2. **Cómo usar el archivo batch**

1. Coloca el archivo batch (`.bat`) en cualquier lugar que te sea conveniente.
2. Haz doble clic en el archivo batch. Esto hará lo siguiente:
   - Cambiará al directorio `run` donde está el ejecutable de John the Ripper.
   - Ejecutará el comando `john --wordlist=Mywords.txt rar.hashes`.
   - Mantendrá abierta la ventana de la consola al final (gracias al comando `pause`) para que puedas leer los resultados.

---

### 3. **Personaliza el archivo batch**

Si más adelante necesitas cambiar los parámetros (como el archivo de wordlist o el archivo de hashes), simplemente edita el archivo batch con un editor de texto y ajusta las líneas correspondientes.

---

### 4. **Automatización adicional (opcional)**

Si siempre tendrás los archivos `rar.hashes` y `Mywords.txt` en la misma carpeta, podrías simplificar aún más las cosas:

- Coloca el archivo batch en el directorio donde están los archivos, y modifica el batch para que no tengas que cambiar de directorio:

```batch
@echo off
:: Ejecuta John the Ripper directamente en el directorio actual
"C:\ruta\a\la\carpeta\run\john.exe" --wordlist=Mywords.txt rar.hashes

:: Pausa para ver los resultados
pause
```

De este modo, el archivo batch puede ejecutarse desde cualquier lugar, pero necesitarás asegurarte de que `Mywords.txt` y `rar.hashes` estén en la misma carpeta que el batch.

---

### 5. **Cosas a tener en cuenta**

- Si utilizas rutas con espacios, asegúrate de que estén entre comillas, como en `"C:\Program Files\John the Ripper\run"`.
- Si necesitas cambiar el archivo `rar.hashes` manualmente, asegúrate de que esté en el directorio donde espera el batch.
- Si tienes varias tareas similares pero con diferentes archivos, podrías crear diferentes archivos batch para cada tarea con los nombres de archivo correspondientes.

¡Y listo! Con esto, puedes automatizar el proceso y ahorrarte tiempo.
132  Foros Generales / Foro Libre / Re: expliquen en: 14 Diciembre 2024, 16:18 pm
Ni idea si es IA, pero es spam sobre un casino, spam con la excusa de responder algo.
133  Foros Generales / Noticias / Re: No te has enterado, pero Google tiene una nueva función en su buscador que cambia todos los resultados en: 11 Diciembre 2024, 11:18 am
Lo que necesita es un bloqueador de resultados, como solía haber. Quizá alguien lo rehizo, yo es que me cansé de buscar otro. Hablo de una extensión en la que agregabas páginas y luego ellas no eran mostradas en los resultados de Google. Aunque supongo que especificar la búsqueda es mejor. Es que yo ponía Nombre de la serie capítulo número, pero entre algunas tonterías me aparecían resúmenes en Youtube, y eso no lo voy a bloquear...
134  Foros Generales / Noticias / Re: Si usas esta letra, tus contraseñas serán casi imposibles de descifrar: así lo aseguran los hackers en: 11 Diciembre 2024, 11:09 am
Hoy Cuevana no me dejó ver una serie tranquilo así que no ando paciente, y ahora esto ¿por qué en vez de tanto blablabla no dicen la letra? ¿por qué Internet tiene tanta basura en los 1eros puestos?
135  Media / Juegos y Consolas / Mejorar estas ideas sobre los tipos de videojuegos. en: 10 Diciembre 2024, 20:55 pm
Está inconcluso y yo algo liado:
Citar
¿Cuales son las variables de los juegos y cual es el más sencillo?


Quiero hacer un juego de cada tipo, comenzando por los más sencillos. El programa tendría una pantalla inicial donde se podría modificar variables y basado en eso aparecería un juego u otro.


El juego más sencillo que se me ocurre es uno que se gane por hacer algo, no importa qué, mover el mouse por ejemplo. Pero eso debería representar algo, por ejemplo que un personaje en la pantalla se movió.
También puede ser ganar por hacer nada durante cierto tiempo. Ganar por actuar o no, me parece que no, no tendría gracia.


En cuanto a variables pienso en:

1- Dimensiones del universo: ¿?
Me dijeron que una aventura de texto, como fueron algunos 1eros juegos, podría tener 0d. No sé.
Un juego de 1d también es posible pero se vería como uno 2d, al menos según pensé. Puede que los personajes sólo se muevan hacia una dirección, pero van a tener cierto alto y ancho, son 2d. Incluso si sólo fuesen 1 pixel cada uno, el pixel tiene cierto alto y cierto ancho.
En el caso de juegos de cartas o algún otro, se podría decir que cada mano es una dimensión, así como la pila de descarte y alguna otra cosa, pero parece un poco forzado, no parece una dimensión normal. Si se tienen opciones, no es que la lista de opciones sea una dimensión. Las cartas en la mano son opciones... En fin, es un caso especial.
Yo creo que lo más simple para empezar es 2d. Las pantallas son 2d. Una aventura de texto, a estas alturas no tiene mucho sentido hacer. Incluso las novelas visuales tienen lugares y si hay más de 1 personaje, no aparecen ambos en el medio.

2- Posibles estados del personaje : ¿?
No su posición en las dimensiones. No es necesario que haya movimiento. El juego puede ser, por ejemplo, que el personaje deba ponerse del mismo color que otro.

3- Máximas caras visibles del personaje: 0~6
Considerado como un cubo, cuántas se pueden llegar a ven. Pueden ser 0, como en juegos de cartas, donde el personaje no se ve.
El máximo normal es 3. Puede ser cuando se muestra medio en diagonal, medio arriba de su cabeza, su perfil y espalda/frente. En vez de arriba de su cabeza podría ser desde abajo, pero es bastante atípico.
Es más de 3 cuando hay más de 2 cámaras mostrando diferentes partes del personaje. Tiene sentido por ejemplo si es una nave que puede ser atacada desde diversos lados.

4- Perfil del personaje es visible: N/S
Se refiere a si su perfil se ve en alguna ocasión o no. No daré relevancia a si se ve uno y no el otro. Por ejemplo del clásico Mario sólo se ve 1 perfil, pero considero que se ve de perfil y ya está.

5- El personaje es visible desde arriba: N/S
Si en algún punto se ve completamente desde arriba o no. Los clásicos de Zelda no se ven completamebte desde arriba, esto se da en juegos de naves scrolldown, por ejemplo.

6- Espalda del personaje es visible: N/S
Lo mismo respecto a su espalda. En este caso supongo que Zelda vale.

7- Frente del personaje es visible: N/S
Simple.

- El personaje es visible desde abajo: N/S
Extraño, pero posible si por ejemplo es una nave y cosas se acercan desde la pantalla. Se vería más o menos como vemos desde abajo a un avión, y desde ahí se le acercarían cosas. Como es tan raro, no lo tendré en cuenta.

8- Perfil, arriba y espalda del pers. es visible: N/S
Si en algún momento se verá todo eso a medias, a la vez.

9- Perfil, arriba y frente del pers. es visible: N/S
Parecido.

- Perfil, abajo y espalda del pers. es visible: N/S
El caso atípico que comenté, por ahora no lo tendré en cuenta.

- Perfil, abajo y frente del pers. es visible: N/S
Parecido.

10- Posibles objetos del personaje: 0~
Típico.

11- El personaje puede moverse hacia adelante: N/S
Típico.

12- El personaje puede moverse hacia atrás:
Aquí las opciones son:
A- No.
B- Sí pero queda mirando hacia allí.
C- Sí.
D- Sí, con opción de quedar mirando hacia allí.

13- El personaje puede moverse hacia los costados:
A- No.
B- Sí pero queda mirando hacia allí.
C- Sí.
D- Sí, con opción de quedar mirando hacia allí.
De nuevo, no consideraré que sólo se pueda mover hacia 1 costado. Es hacia ambos o nada.

14- El personaje puede moverse hacia arriba:
Aquí las opciones me parece complicado decidir cuales serían, se me ocurre:
A- No.
B- Saltando, volando, nadando o trepando, pero queda mirando hacia allí y cae.
C- Saltando, volando, nadando o trepando, pero cae.
D- Volando, nadando o trepando, pero queda mirando hacia allí.
E- Saltando, volando, nadando o trepando, con opción de quedar mirando hacia allí, pero cae.
F- Volando, nadando o trepando, con opción de quedar mirando hacia allí.
En Demon Crest se ve eso de que el personaje se mantiene flotando, no cae, y puede subir con cierto poder. Aunque también puede caer si quiere. En fin, sería para un juego donde no tenga sentido caer, y no subir sea mantenerse.

15- El personaje puede moverse hacia abajo:
Parecido supongo:
A- No.
B- Sí, pero queda mirando hacia allí y sube.
C- Sí, pero sube.
D- Sí, pero queda mirando hacia allí.
E- Sí, con opción de quedar mirando hacia allí, pero sube.
F- Sí, con opción de quedar mirando hacia allí.
Podría subir en el caso de que quiera hundirse y no sea suficientemente denso, o si en la parte de arriba de la pantalla hay un agujero negro u objeto con mucha gravedad, se me ocurre. Como que el motor genera un impulso pero se apaga, hay que reencenderlo, y así.



Veo unas 16 variables*3+2, o 16 cuyos valores pueden ser también letras, y 2. Ah, no, en un caso habría más de 30 posibilidades. Otra posibilidad es considerar sólo la máxima complejidad de cada una, no distinguir entre personajes o enemigos o aliados, pero hay diferencia...
Lo de letras es porque los juegos se llamarían por ejemplo 11111... etc, tantos caracteres como variables, y para reducir caracteres pensaba en que 10 fuese A, etc.
136  Foros Generales / Foro Libre / 2 juegos en el foro. en: 10 Diciembre 2024, 19:57 pm
El 1ero, típico, consistiría en:
- Todo usuario comienza teniendo 1 punto.
- Un usuario plantea un reto y un plazo.
- Los que quieran plantean soluciones.
- Terminado el plazo, cada usuario conocido (*) puede, durante 1 semana:
   - Decir que la solución de otro es correcta. O de otros.
   - Votar por una solución que no sea la suya.
- Cada usuario cuya solución haya sido catalogada como correcta, obtiene la mitad de puntos del catalogador que tenga más (éste no los pierde). Máximo 1 decimal.
- Cada usuario cuya solución haya sido votada, obtiene tantos puntos como tiene su votante (de nuevo, éste no los pierde).
- Si se vota por una se entiende que se la considera correcta y sólo tiene efecto el voto de favorita, no de correcta.
(*): Para evitar amiguismos o multicuentas.

Ejemplo:
- Hacer programa que genere cuentos en castellano de mínimo 20 palabras, antes del próximo mes.
- A postea una solución, B postea otra, C postea otra.
- Termina el plazo, empieza el plazo de votación, 1 semana.
- A dice que la solución de B es correcta y vota la de C.
- B tiene 1.5 puntos, C tiene 2.
- B vota la de A.
- A tiene 2.
- C vota la de A y dice que la de B es correcta.
- A 3, B 2, C 2.
- D dice que todas fueron correctas y vota la de C.
- A 3.5, B 2.5, C 3.
- D sigue con 1 porque no dió solución ni fue votado, etc.

Si se les ocurre cómo hacerlo mejor, díganme, yo intenté que sea justo y no muy complicado.

---------------------------------------------------------------------------------------------------------

El 2ndo sería:
- Todo usuario comienza teniendo 1 punto.
- Cada semana, los que quieran postean una conversación que se haya tenido con un chatbox sobre Informática. Que no se haya posteado antes.
- Durante la semana siguiente, cada usuario conocido puede:
   - Decir que conversación o conversaciones le gustaron. Que no sea la suya.
   - Votar por una conversación que no sea la suya.
- Cada usuario cuya conversación haya sido gustada, obtiene la mitad de puntos del catalogador que tenga más (éste no los pierde). Máximo 1 decimal.
- Cada usuario cuya conversación haya sido votada, obtiene tantos puntos como tiene su votante.

¿Hacen algo similar los dueños de los chatbots?
137  Informática / Software / Re: Dudas sobre John the Ripper. en: 7 Diciembre 2024, 20:07 pm
De esto no tengo mucha idea.

¿Está bien?

Digo por los warnings. ¿Y se estima que tardará 17 horas?  :o ¿o qué es ETA?
138  Informática / Software / Re: Dudas sobre John the Ripper. en: 7 Diciembre 2024, 17:56 pm
Tengo una lista de contraseñas generadas con Python. La puse en el directorio run.

No logro hacerla funcionar:


¿Cómo lo logro?
139  Programación / Programación General / Ayuda con las funciones de string de AS 1.0. en: 5 Diciembre 2024, 07:34 am
Intenté hacer una simulación de un sorteo pero ni con ayuda de GPT pude >__<

Se tiene una urna con 2 bolas blancas y una negra. 3 personas van sacando por turnos hasta que saquen la negra. Esa persona pierde. Yo quería ver si sacar 1ero da ventaja, desventaja, o si está favorecido el 2ndo, etc.

Código
  1. BaseUrna = "WWB";
  2. AlexPerdidas = 0;
  3. BartPerdidas = 0;
  4. CamiloPerdidas = 0;
  5. function Sortear () {
  6. // Preparar urna:
  7. Urna = BaseUrna;
  8. // Elección de la 1er persona, Alex:
  9. BolaDeAlexNro = random(3);
  10. if (BolaDeAlexNro == 2) {
  11. AlexPerdidas++;
  12. } else {
  13. BolaDeAlex = Urna.charat(BolaDeAlexNro);
  14. Parte1 = substring(Urna, 0, BolaDeAlexNro);
  15. trace(Parte1);
  16. Parte2 = substring(Urna, BolaDeAlexNro+1, Urna.length);
  17. trace(Parte2);
  18. Urna = Parte1+Parte2;
  19. // trace(Urna);
  20. // Elección de la 2nda persona, Bart:
  21. BolaDeBartNro = random(2);
  22. if (BolaDeBartNro == 1) {
  23. BartPerdidas++;
  24. } else {
  25. CamiloPerdidas++;
  26. }
  27. }
  28. }
La función se repite y los resultados se muestran en pantalla. Lo de Parte1 y Parte2 se lo copié a GPT pero no funciona bien.

Quiero que de Urna se remueva la bola que fue elegida. Es claro que en ese punto será una W, así que siempre quedaría WB, pero quiero aprender a hacerlo de este modo.

Es que no entiendo los métodos string, la ayuda de Flash carece de ejemplos en eso.

Además no vi algo que sirva para remover un caracter.

Citar
myString.concat(valor1,...valorN);
Argumentos

valor1,...valorN
Cero o más valores que se van a concatenar.

Descripción

Método; combina los valores especificados y devuelve una nueva cadena. Si es necesario, cada argumento valor se convierte en una cadena y se anexa, en orden, al final de la cadena.
No se entiende bien lo de ",...", imagino que es cualquier cantidad de valores, y los concatena, pero es más fácil hacer esto:
Concatenado = ""+Valor1+Valor2;
o:
Concatenado = String(Valor1)+Valor2;

Quizá la diferencia es que .concat modifica el valor. No:
Código:
BaseUrna = "ABC";
BaseUrna.concat("D");
trace(BaseUrna);
eso me da ABC.

No entiendo qué hace exactamente o qué ventaja tiene comparado con lo que dije.

Siguiente:
Citar
myString.slice(inicio, fin);
Argumentos

inicio: Un número que especifica el índice del punto de inicio del sector. Si inicio es un número negativo, el punto inicial se especifica desde el final de la matriz, donde -1 es el último elemento.

fin: Un número que especifica el índice del punto final del sector. Si no se especifica fin, el sector incluye todos los caracteres desde el inicio al final de la cadena. Si fin es un número negativo, el punto final se determina desde el final de la cadena, donde -1 es el último carácter.

Descripción
Método; extrae un sector o una subcadena del objeto String especificado, después la devuelve como una nueva cadena sin modificar el objeto String original. La cadena devuelta incluye el carácter inicio y todos los caracteres hasta (pero sin incluir) el carácter fin.

Código: Resultado
BaseUrna.slice(0, 0):
BaseUrna.slice(0, 1): A
BaseUrna.slice(0, 2): AB
BaseUrna.slice(0, 3): ABC
BaseUrna.slice(1, 1):
BaseUrna.slice(1, 2): B
BaseUrna.slice(2, 3): C
BaseUrna.slice(3, 3):
El final se nombra como si fuese +1 a lo que se quiere, no tiene mucho sentido. Si quiero del 0 al 2, debo decir del 0 al 3.

La cosa es que esto de cortar tiene poco, sólo es obtener parte de una cadena.

Citar
myString.split(delimitador);
Argumentos

delimitador: El carácter utilizado para delimitar la cadena.

Descripción

Método. divide un objeto String rompiendo la cadena cuando se produce el argumento delimitador especificado y devuelve las subcadenas en una matriz. Si no se especifica delimitador, la matriz devuelta contiene solamente un elemento: la propia cadena. Si el delimitador es una cadena vacía, cada carácter del objeto String se convierte en un elemento de la matriz.
No lo entiendo, lo pruebo.
BaseUrna.split(0): ABC
BaseUrna.split(1): ABC
BaseUrna.split(2): ABC
BaseUrna.split(3): ABC
No sé, no veo división, ni siquiera cambio. ¿Hay que especificar el caracter, no es un número?

Citar
myString.substr(inicio, longitud);
Argumentos

inicio: Un número entero que indica la posición del primer carácter de la subcadena que se está creando. Si inicio es un número negativo, el punto inicial se determina desde el final de la matriz, donde -1 es el último carácter.

longitud: El número de caracteres en la subcadena que se está creando. Si no se especifica longitud, la subcadena incluye todos los caracteres desde el inicio al final de la cadena.

Descripción

Método; devuelve los caracteres de una cadena desde el índice especificado en el argumento inicio, hasta el número de caracteres especificados en el argumento longitud.

Este lo he usado y lo entiendo, creo. Además es lo que me conviene usar, creo. Pero cómo.
Si la bola elegida es la 0, no necesito 2 partes, hago:
Urna = Urna.substr(1, Urna.length);

Si fuera la última, más o menos lo mismo:
Urna = Urna.substr(0, (Urna.length)-1);
pero eso no funciona:
Urna.substr(0, (Urna.length)-1):
Urna.substr(0, Urna.length: ABC
Urna.substr(1, (Urna.length)-1):
Urna.substr(1, Urna.length: BC

Sin los paréntesis tampoco. Ah, tenía mal escrito length a la derecha de los :, suelo escribir mal esa palabra, ahora sí:
Urna.substr(0, (Urna.length)-1): AB
Urna.substr(0, Urna.length: ABC
Urna.substr(1, (Urna.length)-1): BC
Urna.substr(1, Urna.length: BC

¿pero por qué el 3ero da BC en vez de B?
trace("Urna.substr(1, (Urna.length)-1): "+Urna.substr(1, (Urna.length)-1));
Ah, porque lo 2ndo es la cantidad de caracteres a obtener, no hasta cual. En este caso serán 2. Bien.

Y bueno, si se quiere remover un caracter intermedio, sí, en partes:
Parte1 = Urna.substr(0, X);
Parte2 = Urna.substr(BolaDeAlexNro+1, Y);

¿Está bien? Debo calcular X e Y.

En este caso, el número elegido es el 1. Entonces se quiere captar, en la Parte1, sólo el caracter 0. Entonces va 1. ¿Pero cual es la fórmula?
Si hubieran más elementos: ABCDE
Si se elige el 1, B, queremos obtener sólo A.
Si se elige 2, C, queremos AB.
Entonces la cantidad de números que queremos obtener es igual al número elegido:
Parte1 = Urna.substr(0, BolaDeAlexNro);

Ahora Y. Bueno, siempre se va a querer hasta el caracter final, así que es:
Parte2 = Urna.substr(BolaDeAlexNro+1, Urna.lenght);
lo escribí mal de nuevo >___< th, th, th, th, th, th...
Parte2 = Urna.substr(BolaDeAlexNro+1, Urna.length);

Así parece ok:
Código
  1. BaseUrna = "ABCD";
  2. AlexPerdidas = 0;
  3. BartPerdidas = 0;
  4. CamiloPerdidas = 0;
  5. function Sortear () {
  6. // Preparar urna:
  7. Urna = BaseUrna;
  8. // Elección de la 1er persona, Alex:
  9. BolaDeAlexNro = random(4);
  10. if (BolaDeAlexNro == 3) {
  11. AlexPerdidas++;
  12. } else {
  13. BolaDeAlex = Urna.charat(BolaDeAlexNro);
  14. Parte1 = Urna.substr(0, BolaDeAlexNro);
  15. // trace(Parte1);
  16. Parte2 = Urna.substr(BolaDeAlexNro+1, Urna.length);
  17. // trace(Parte2);
  18. Urna = Parte1+Parte2;
  19. trace(Urna);
  20. }
  21. }

Remueve A, B o C sin problema. No es necesario un if cuando sólo se quiere remover la parte 0.

Listo.

Citar
myString.substring(desde, hasta);
Argumentos

desde: Un número entero que indica la posición del primer carácter de la subcadena que se está creando. Los valores válidos para desde van de 0 a string.length - 1.

hasta: Un número entero que es 1 + el índice del último carácter de la subcadena que se está creando. Los valores válidos para hasta van de 1a string.length. Si no se especifica el argumento hasta, el final de la subcadena es el final de la cadena. Si desde es igual a hasta, el método devuelve una cadena vacía. Si desde es mayor que hasta, los argumentos se intercambian automáticamente antes de que se ejecute la función.

Descripción

Método; devuelve una cadena que consiste en los caracteres entre los puntos especificados por los argumentos desde y hasta.
Por ahora me cansé. Esa es la que me dijo GPT.

Citar
substring(cadena, índice, recuento);
Argumentos

cadena La cadena de la que extraer la nueva cadena.

índice El número del primer carácter que se va a extraer.

recuento El número de caracteres que se van a incluir en la cadena extraída, sin incluir el carácter de índice.

Descripción

Función de cadena; extrae parte de una cadena.
Esta es probablemente la que necesitaba. Como es distinta (no empieza con "variable."), no pensé que fuese la que buscaba. Que me sirva de lección xP

En fin, lamento el entrevero.
140  Programación / Programación General / Re: Simulación de empuje. en: 4 Diciembre 2024, 09:26 am
Logré algo que me parece aceptable a pesar de todo.

Básicamente puse que al momento de empujar se considere el ancho máximo del personaje.

Y tenía un error en que el ancho del barril es 24, o sea que el número en el cálculo era 12, no 14. Cuando tenía los números 14 y 12 en el cálculo y sustituí uno porque se considere el ancho variable del personaje, sustituí el incorrecto. Igual no sé si era el problema.

https://youtu.be/QltICF6s-Gw

Lo que sucede al final es que el personaje empezó a caminar cuando un barril lo estaba tocando, eso es otro tema.

Código
  1. // Indica si el juego continúa o no:
  2. Game = "Ok";
  3. // Por motivos que no recuerdo, las imágenes se ponen...
  4. // en un objeto I.
  5. // Agregar personaje:
  6. I.attachMovie("sMedaMan", "Player", 1);
  7. // X es porque la posición real del personaje no admite...
  8. // tantos valores, los simplifica, se pierde parte;
  9. // de este modo no:
  10. I.Player.X = 0;
  11. I.Player._X = I.Player.X;
  12. I.Player._Y = 584;
  13. I.Player.Action = "Quiet";
  14. LV = 1;
  15. Recorrido = 0;
  16. BarrilesToAdd = 0;
  17. // Aunque hay 0 barriles se pone 10 porque también es...
  18. // el valor que determina qué tan adelante se ponen,
  19. // y el valor 1 es del personaje,
  20. // entonces realmente los barriles es esto-10:
  21. Barriles = 10;
  22. // La mínima distancia a la que Medaman y un barril se tocan...
  23. // depende de qué dibujo tenga Medaman, ya que al caminar,
  24. // uno es más ancho. Pero para simplificar,
  25. // se considerará el más ancho: 32. El ancho del barril es 24.
  26. // Además se agrega 0.2 porque es lo que Medaman...
  27. // se podría mover, y 0.05 para evitar fallas por...
  28. // inexactitudes al operar decimales.
  29. MinDistanciaSinChoque = 16+12+0.25;
  30. // /////////////////////////////////////////////
  31. // /////////////////  MedaMan  /////////////////
  32. // /////////////////////////////////////////////
  33. function AumentarRecorrido () {
  34. Recorrido++;
  35. if (Recorrido == 50) {
  36. Recorrido = 0;
  37. LV++;
  38. }
  39. }
  40. function Walk () {
  41. I.Player.Action = "Walking";
  42. I.Player.gotoAndStop(2);
  43. // Ver si empuja algún barril:
  44. I.Player.Empujar = "No";
  45. // Se comienza desde 10 por lo ya explicado
  46. // (tal vez convenga chequear desde el último):
  47. BarrilesChequeados = 10;
  48. trace("Checking empuje");
  49. do {
  50. BarrilesChequeados++;
  51. BarrilaChequear = "I.Barril"+BarrilesChequeados;
  52. BarrilX = eval("I.Barril"+BarrilesChequeados+".X");
  53. // Si el barril existe:
  54. if (BarrilX != undefined) {
  55. DistanciaPlayerBarril = Math.abs(I.Player.X-BarrilX);
  56. if (DistanciaPlayerBarril < MinDistanciaSinChoque) {
  57. trace ("Empuja");
  58. I.Player.Empujar = "Sí";
  59. break;
  60. }
  61. }
  62. } while (BarrilesChequeados<Barriles);
  63. if (I.Player.Empujar == "No") {
  64. // El personaje avanza lo normal:
  65. I.Player.X = I.Player.X+0.2;
  66. AumentarRecorrido();
  67. } else {
  68. // Avanza menos:
  69. I.Player.X = I.Player.X+0.1;
  70. // Ojo que fue hecho para que avance 0.2, puede que lo empuje desde muy lejos.
  71. // Recorrido debe aumentar acorde a eso, arreglarlo:
  72. AumentarRecorrido();
  73. // Empuja un barril:
  74. // Esto sólo aumenta la velocidad, ojo que si no se mueve puede que quede tocando al personaje:
  75. BarrilSpeed = BarrilaChequear+".Speed";
  76. set (BarrilSpeed, 0.15);
  77. }
  78. I.Player._X = I.Player.X;
  79. }
  80. function Quiet () {
  81. I.Player.Action = "Quiet";
  82. I.Player.gotoAndStop(1);
  83. }
  84. // Whens:
  85. function RightWhenQuiet () {
  86. // Ver si toca algún barril:
  87. BarrilesChequeados = 10;
  88. do {
  89. BarrilesChequeados++;
  90. if (I.Player.hitTest(eval("I.Barril"+BarrilesChequeados)) == true) {
  91. trace("Apareció en barril");
  92. // Game over:
  93. Game = "Over";
  94. I.Player.gotoAndStop(2);
  95. break;
  96. }
  97. } while (BarrilesChequeados<Barriles);
  98. if (Game == "Ok") {
  99. Walk();
  100. } else {
  101. // Esto probablemente esté bien antes del break:
  102. gotoAndStop (3);
  103. }
  104. }
  105. function RightWhenWalking () {
  106. // AumentarRecorrido();
  107. Walk();
  108. }
  109. function QuietWhenWalking () {
  110. Quiet();
  111. }
  112. // QuietWhenQuiet nada hace.
  113. function ControlPlayer () {
  114. if (Key.isDown(39)) {
  115. // Si se presiona derecha:
  116. eval("RightWhen"+I.Player.Action)();
  117. } else {
  118. // Si nada se presiona:
  119. eval("QuietWhen"+I.Player.Action)();
  120. }
  121. }
  122. // /////////////////////////////////////////////
  123. // ////////////////  Barriles  /////////////////
  124. // /////////////////////////////////////////////
  125. function AddBarriles () {
  126. BarrilesToAdd = BarrilesToAdd+random(LV)/1000;
  127. while (BarrilesToAdd>=1) {
  128. BarrilesToAdd--;
  129. Barriles++;
  130. // Probablemente innecesario, y causante de bugs si no se parchea:
  131. if (Barriles>1010) {
  132. Barriles = 11;
  133. }
  134. BarrilAgreado = "Barril"+Barriles;
  135. I.attachMovie("sBarril", BarrilAgreado, Barriles);
  136. BarrilAgreado = "I."+BarrilAgreado;
  137. set(BarrilAgreado+".X", 0);
  138. setProperty (BarrilAgreado, _x, 0);
  139. setProperty (BarrilAgreado, _y, 584);
  140. set (BarrilAgreado+".Speed", random(LV)/10);
  141. set (BarrilAgreado+".Spin", 0.1+random(LV)/10);
  142. }
  143. }
  144. function MoveBarriles () {
  145. Moved = 10;
  146. // trace("Checking golpe");
  147. do {
  148. Moved++;
  149. BarrilaMover = "I.Barril"+Moved;
  150. BarrilSpeed = BarrilaMover+".Speed";
  151. EvaluedBarrilSpeed = eval(BarrilSpeed);
  152. // Aplicar rozamiento:
  153. if (EvaluedBarrilSpeed > 0) {
  154. EvaluedBarrilSpeed = EvaluedBarrilSpeed/1.0025;
  155. // Si la velocidad queda muy baja:
  156. if (EvaluedBarrilSpeed < 0.05) {
  157. // Frena completamente:
  158. EvaluedBarrilSpeed = 0;
  159. }
  160. set (BarrilSpeed, EvaluedBarrilSpeed);
  161. }
  162. BarrilX = eval(BarrilaMover+".X")+EvaluedBarrilSpeed;
  163. // Si ya no está en la pantalla:
  164. if (BarrilX>850) {
  165. // Quitarlo:
  166. removeMovieClip (BarrilaMover);
  167. } else {
  168. // Actualizar posición y girar su parte:
  169. set(BarrilaMover+".X", BarrilX);
  170. setProperty (BarrilaMover, _x, BarrilX);
  171. ParteaRotar = BarrilaMover+".Part";
  172. setProperty (ParteaRotar, _rotation, getProperty(ParteaRotar, _rotation)+EvaluedBarrilSpeed*2);
  173. // Si tocan al personaje y él se está moviendo:
  174. if (I.Player.hitTest(eval(BarrilaMover)) == true && I.Player.Action == "Walking") {
  175. trace("Golpeado");
  176. // Game over:
  177. gotoAndStop (3);
  178. break;
  179. } else {
  180. // Ver si tocó al barril anterior, que está delante:
  181. BarrilAnterior = "I.Barril"+(Moved-1);
  182. if (eval(BarrilaMover).hitTest(eval(BarrilAnterior)) == true) {
  183. // Pasarle la velocidad:
  184. set (BarrilAnterior+".Speed", eval(BarrilAnterior+".Speed")+EvaluedBarrilSpeed);
  185. // Quedar sin velocidad:
  186. set (BarrilSpeed, 0);
  187. }
  188. }
  189. }
  190. } while (Moved<Barriles);
  191. }
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 235
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines