20/02/2015, 12:53 AM (Última modificación: 27/05/2020, 09:40 AM por Manu. Edited 2 times in total.)
Minas láser
Bueno, simple descripción... Son unas minas láser que voy actualizando a medida que me piden que tenga nuevas funcionalidades. El código en sí es medio viejo pero completamente funcional, y me atrevo a decir que funciona mejor que el resto de los lasers publicados por ahí.
Lo que mas destacaría de estos lasers son:
Poseen todas las cualidades de los lasers v2.3.
Los beams no son temp entities.
Se puede configurar casi todo por medio de CVARs.
Se puede modificar el máximo de lasers por jugador en particular usando las natives provistas por el plugin.
No es necesario implementar código extra para corroborar si un jugador fue asesinado/dañado por un laser.
Las CVARs que mas destacaría son:
Evitar que tus compañeros rompan tus lasers.
Modificar la fuerza de empuje al romper un laser.
Evitar que bugueen los lasers poniendo otro laser encima.
Dañar a todos los que estén tocando un laser y no solo al "primero de la fila".
- Changelog
Código:
26/11/2015: Limpié el código, ahora se ve mejor y debería de funcionar mejor también.
31/03/2016: Todos los fix y versión zp.
23/04/2016: Mas "fixs", valores cacheados y archivo de configuraciones.
22/02/2017: Pequeños arreglos a las minas tanto de ZP como comunes.
12/03/2017: Se agregaron algunas cvars para que sean mas configurables.
26/11/2017: Se agregaron nuevas cvars y se hicieron algunos pequeños cambios.
29/11/2017: Pequeños cambios y fixes.
27/05/2020: Unos cuantos cambios al código y nuevas cvars.
- CVARS
Código:
// Estado de las minas.
//
// 0 - Deshabilitadas.
// 1 - Normal.
// 2 - Una vez puestas no se pueden remover.
//
lm_status "1"
// Modo en el que operarán las minas.
//
// [!] Se actualiza al comienzo de una nueva ronda.
//
// 0 - Normal.
// 1 - Tripmine (explotan cuando se toca el laser).
//
lm_tripmine "1"
// Comportamiento del hud.
//
// [!] Se actualiza al comienzo de una nueva ronda.
// [!] Si se elige la opción permanente se mostrará además la vida y el creador de la mina a la que se le esté apuntando.
//
// 0 - Deshabilitado.
// 1 - Permanente (estando vivo).
// 2 - Se muestra temporalmente al comprar/plantar/remover una mina.
//
lm_hud "2"
// Determina si los lasers detendrán su búsqueda al colisionar con un primer objetivo.
//
// [!] Se actualiza al comienzo de una nueva ronda.
// [!] Si esta deshabilitado, todos los jugadores que estén tocando el láser recibirán daño por igual, no solo el primero.
// [!] Esto también evita que una mina quede inutilizada al colocarle otra mina enemiga "por encima" de esta.
//
// 0 - Los lasers no se pueden "buguear".
// 1 - Los lasers pueden "buguearse".
//
lm_bugable "1"
// Permite proteger las minas del daño recibido.
//
// [!] Si se deja en 0, los daños que no provengan de jugadores también dañarán las minas.
// [!] Si se le asigna un valor, los daños que no provengan de jugadores no dañarán las minas.
//
// 0 - Cualquiera les puede hacer daño.
// 1 - Los enemigos pueden hacerles daño.
// 2 - Los dueños pueden hacerles daño.
// 3 - Los dueños y enemigos pueden hacerles daño.
// 4 - Nadie les puede hacer daño.
//
lm_protect "0"
// Tiempo de espera en segundos desde el inicio de la ronda hasta poder plantar minas.
//
lm_wait "10.0"
// Costo de las minas.
//
// [!] En versión ZP este será el costo en ammo-packs que tendrán las minas.
//
// -1 - Las minas no podrán comprarse.
// 0 - Las minas serán gratuitas.
//
lm_cost "100"
// Cantidad de vida que tendrán las minas.
//
lm_health "500.0"
// Daño que sufrirá un enemigo al tocar un láser.
//
// [!] Se actualiza al comienzo de una nueva ronda.
//
lm_damage "300"
// Cantidad de minas por defecto que tendra un jugador.
//
// [!] Se asignará al ingresar al servidor por primera vez.
//
lm_def_amt "1"
// Cantidad maxima de minas por jugador.
//
// [!] Se asigna por unica vez al ingresar al servidor (putinserver).
// [!] Si se quiere utilizar un valor personalizado por plugin deberá asignarse luego del putinserver.
//
lm_maximum "3"
// Determina si los lasers seran removidos al final de la ronda.
//
// 0 - No se remueven.
// 1 - Se remueven todos los lasers al finalizar la ronda.
//
lm_remove "1"
// Determina si se les removeran las minas compradas al jugador.
//
// 0 - No se le removerán las minas que tenga guardadas.
// 1 - Se removerán las minas al terminar la ronda.
// 2 - Se removerán las minas guardadas al ser infectado (exclusivo ZP).
//
lm_rebuy "0"
// Determina si las minas eliminadas al final de la ronda van a ser devueltas o no al dueño.
//
// 0 - No se devuelven.
// 1 - Se le devuelven las minas que se hayan eliminado.
//
lm_retrieve "1"
// Personalización del color del láser.
//
// 0 - Color del equipo al que pertenecen.
// random - Color aleatorio
// RRR GGG BBB - Color personalizado.
//
// Ejemplo para que todos los lásers sean verdes: "000 255 000"
//
lm_color "0"
// Daño en area que harán las minas al romperse.
//
lm_explosion "25.0"
// Radio de la explosión de las minas.
//
lm_radius "200.0"
// Fuerza del empuje que causarán las minas al romperse.
//
lm_force "25.0"
// Destrabar automáticamente a los jugadores que queden atascados al plantar una mina
//
// 0 - Deshabilitado.
// 1 - Destrabar automáticamente si quedan trabados con la mina.
//
lm_unstuck "0"
// Bloquear el movimiento mientras se planta o remueve una mina.
//
// 0 - Permitir movimiento.
// 1 - Bloquear movimiento.
//
lm_freeze "1"
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Tenkiu la verdad q me alegraste el dia cuando termine lo q estoy haciendo ahora tenia pensado hacerme unos laser no tan bug y mas orientados a lo q quiero q el laser_v23 ahora no voy a tener q buscar entre 1000 lineas de code lo q necesito
20/02/2015, 10:35 AM (Última modificación: 20/02/2015, 11:00 AM por ErikMav94.)
miro el código y te digo
es mejor seguramente este (aunque tenga bug [aun no testie nada e.e]) ya que las otras lasermine traen tripmine para zp aunque uno no las vaya a usar y es código al pedo
Pone en el thread que se necesita compilar con 1.8.3 , sino van a venir cada uno preguntando lo mismo con Ham_CS_Player_ResetMaxSpeed
20/02/2015, 11:06 AM (Última modificación: 20/02/2015, 11:38 AM por Manu.)
No se supone que es "obligatorio" compilar con 1.8.3? Igual eso está por el hamsandwich update de joaquinmandrade y arkshine ( creo ) , despues se junto con la 1.8.3 por eso funciona xP
Te digo que estas lasermines estan mucho mejor que las otras porque mas alla de que tiene menos boludeces, las pocas cosas que tiene estan bien hechas a simple vista
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
(20/02/2015, 10:35 AM)ErikMav94 escribió: Pone en el thread que se necesita compilar con 1.8.3 , sino van a venir cada uno preguntando lo mismo con Ham_CS_Player_ResetMaxSpeed
PD: Gran aporte Treki. No hasta la 1.8.2 esta, por que las 1.8.2 damos soporte, anteriores no.
- pones una mina en el aire y sale el laser igual y desviado
- cuando rompes la mina , está la explosión pero no el impulso que te manda a a la mierda (aunque veo que no lo pusiste :B)
- el print color no es de colores xD
- cuando pones un laser adelante del otro sale torcido, en vez de derecho respecto al otro
- pones una mina en el aire y sale el laser igual y desviado
- cuando rompes la mina , está la explosión pero no el impulso que te manda a a la mierda (aunque veo que no lo pusiste :B)
- el print color no es de colores xD
El primero es fácil de arreglar al igual que el tercero. El segundo es intencional, llego a casa y lo miro.
EDIT: Volví pero tengo sueño, me voy a tirar una siesta y se los arreglo. Lo de la explosión puede ser un simple velocity by aim, porque el código de la lasermine de esa explosión era un asco a mi punto de vista, y ni siquiera lo podías leer correctamente jaja. Lo que si ya fixié el colorchat Saludos!
El bug del primero también es medio semi-intencional. Yo freezeaba la cámara del jugador con flags, entonces aunque mirara para otro lado el láser se pondría donde apuntaba originalmente, pero en un HnS común ( suponiendo que es el modo mas común donde la gente prefiere un láser bugueable ) la gente lo pone en el aire, pero me despreocupe de que el láser saliera para cualquier ángulo.
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
20/02/2015, 08:00 PM (Última modificación: 20/02/2015, 08:03 PM por Manu.)
Listo, los dos errores que mencionaste están fixeados @Erik. El último es algo que no me voy a meter a arreglarlo porque dudo que sea tan fácil hacerlo. Yo vine a aportar esto justamente para no meterle tanta garra porque no me sobra el tiempo, sino lo hubiera re-escrito y posteado en plugins ^_^
Supongo que el resto tendría que funcionar bien. Nunca las probé a fondo, solo con unas pocas personas, así que puede haber algún otro bug... pero no es la gran cosa.
Ahí edité el thread y agregué otros detalles por los que también cree estos lásers!
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
(20/02/2015, 08:00 PM)Treki escribió: Listo, los dos errores que mencionaste están fixeados @Erik. El último es algo que no me voy a meter a arreglarlo porque dudo que sea tan fácil hacerlo. Yo vine a aportar esto justamente para no meterle tanta garra porque no me sobra el tiempo, sino lo hubiera re-escrito y posteado en plugins ^_^
Supongo que el resto tendría que funcionar bien. Nunca las probé a fondo, solo con unas pocas personas, así que puede haber algún otro bug... pero no es la gran cosa.
Ahí edité el thread y agregué otros detalles por los que también cree estos lásers!
lo sé , pero mostré los bugs que encontré a simple vista por si otra persona quiere usar este plugin ya sabe los bugs que tiene , no para que los fixees
excelente aporte , me gustó y veo si encuentro mas bugs , los fixeo y lo posteo acá si no te es molestia
20/02/2015, 08:25 PM (Última modificación: 20/02/2015, 08:26 PM por Manu.)
(20/02/2015, 08:14 PM)ErikMav94 escribió: lo sé , pero mostré los bugs que encontré a simple vista por si otra persona quiere usar este plugin ya sabe los bugs que tiene , no para que los fixees
excelente aporte , me gustó y veo si encuentro mas bugs , los fixeo y lo posteo acá si no te es molestia
Tranquilo, no tengo problema en darle soporte a mi propio aporte, tampoco soy tan malo
Mas allá de eso, en el momento en que lo codié ya tenía una linda idea sobre Pawn, así que dudo que halla muchos bugs restantes. ( No significa que me moleste que fixees los bugs que encuentres, mejor para todos si lo haces ^_^ )
Si cualquier persona quiere ayuda sobre el aporte no tengo problema en ayudar, para eso estoy Saludos!
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Aca esta como hacer lo de la explosion q te manda a la mierda lo saque del lasermin_v23
Código PHP:
CreateDamage(iCurrent,Float:DmgMAX,Float:Radius) { // Get given parameters
new Float:vecSrc[3]; pev(iCurrent, pev_origin, vecSrc);
new AtkID =pev(iCurrent,LASERMINE_OWNER); new TeamID=pev(iCurrent,LASERMINE_TEAM);
new ent = -1; new Float:tmpdmg = DmgMAX;
new Float:kickback = 0.0;
// Needed for doing some nice calculations :P new Float:Tabsmin[3], Float:Tabsmax[3]; new Float:vecSpot[3]; new Float:Aabsmin[3], Float:Aabsmax[3]; new Float:vecSee[3]; new trRes; new Float:flFraction; new Float:vecEndPos[3]; new Float:distance; new Float:origin[3], Float:vecPush[3]; new Float:invlen; new Float:velocity[3]; new iHitHP,iHitTeam; // Calculate falloff new Float:falloff; if (Radius > 0.0) { falloff = DmgMAX / Radius; } else { falloff = 1.0; }
// Find monsters and players inside a specifiec radius while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0) { if(!pev_valid(ent)) continue; if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER))) { // Entity is not a player or monster, ignore it continue; } if(!pev_user_alive(ent)) continue; // Reset data kickback = 1.0; tmpdmg = DmgMAX;
// The following calculations are provided by Orangutanz, THANKS! // We use absmin and absmax for the most accurate information pev(ent, pev_absmin, Tabsmin); pev(ent, pev_absmax, Tabsmax); xs_vec_add(Tabsmin,Tabsmax,Tabsmin); xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes); get_tr2(trRes, TR_flFraction, flFraction); // Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD) if (flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent) { // Work out the distance between impact and entity get_tr2(trRes, TR_vecEndPos, vecEndPos);
CreateDamage(iCurrent,Float:DmgMAX,Float:Radius) { // Get given parameters
new Float:vecSrc[3]; pev(iCurrent, pev_origin, vecSrc);
new AtkID =pev(iCurrent,LASER_OWNER); new TeamID=pev(iCurrent,LASER_TEAM);
new ent = -1; new Float:tmpdmg = DmgMAX;
new Float:kickback = 0.0;
// Needed for doing some nice calculations :P new Float:Tabsmin[3], Float:Tabsmax[3]; new Float:vecSpot[3]; new Float:Aabsmin[3], Float:Aabsmax[3]; new Float:vecSee[3]; new trRes; new Float:flFraction; new Float:vecEndPos[3]; new Float:distance; new Float:origin[3], Float:vecPush[3]; new Float:invlen; new Float:velocity[3]; //new iHitHP,iHitTeam; // Calculate falloff new Float:falloff; if (Radius > 0.0) { falloff = DmgMAX / Radius; } else { falloff = 1.0; }
// Find monsters and players inside a specifiec radius while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0) { if(!pev_valid(ent)) continue; if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER))) { // Entity is not a player or monster, ignore it continue; } if(pev(ent,pev_deadflag)!= DEAD_NO) continue; // Reset data kickback = 1.0; tmpdmg = DmgMAX;
// The following calculations are provided by Orangutanz, THANKS! // We use absmin and absmax for the most accurate information pev(ent, pev_absmin, Tabsmin); pev(ent, pev_absmax, Tabsmax); xs_vec_add(Tabsmin,Tabsmax,Tabsmin); xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes); get_tr2(trRes, TR_flFraction, flFraction); // Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD) if (flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent) { // Work out the distance between impact and entity get_tr2(trRes, TR_vecEndPos, vecEndPos);
21/02/2015, 02:16 AM (Última modificación: 21/02/2015, 02:56 AM por wicho.)
podrias ponerle un guardado de vida? es decir supongamos que la mina tiene 1500 de vida y le bajaron 500 y el owner decide quitarlo y plantarlo de nuevo, la mina tendria 1000 y no 1500 otra vez porque eso pasa se regenera otra vez..
21/02/2015, 07:11 PM (Última modificación: 21/02/2015, 07:11 PM por Manu.)
(21/02/2015, 02:16 AM)wicho escribió: podrias ponerle un guardado de vida? es decir supongamos que la mina tiene 1500 de vida y le bajaron 500 y el owner decide quitarlo y plantarlo de nuevo, la mina tendria 1000 y no 1500 otra vez porque eso pasa se regenera otra vez..
Lo que pedís dependería mucho de saber el valor predeterminado que tendrá cada jugador como máximo de lásers, y lo único que hay de tipo "memoria dinámica" en Pawn son las arrays dinámicas supongo. Con eso te doy una idea, pero no tengo tiempo de hacerlo, lo siento xP
Saludos.
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Hola, vengo pidiendo ashuda, como hago para ponerle que solamente le haga danio al zombie en zombie plague y que en vez de que le haga danio solamente lo ralentize o que almentos le haga 0.01 de danio y que lo ralentize...
(03/08/2018, 03:13 PM)Skylar escribió: Está bien que pidas ayudas, pero no para que crees 20 post todos los días mogolico de mierda, me tenes re podrido ya, contraté 10000 sicarios para que te busquen y te maten toda la familia, y a vos que te revienten con una bazooka.
(22/02/2015, 05:49 PM)Kane escribió: Muy buenas.
Podrias ponerle para que los de tu equipo no las puedan destruir xd
Muy buena idea, no se me ocurrió en aquel momento. Acabo de hacerlo con un TakeDamage a las minas láser, habría que testearlo para ver si tu team puede o no romperlas.
También cambié la manera en que obtiene el team de un jugador, antes yo había creado un stock porque existía un bug con el número que returneaba la función get_user_team, pero se fixeó unos builds atrás, así que ya no sirve.
switch( sTeam[ 0 ] ) { case 'T': return 0 case 'C': return 1 }
return -1; }
(22/02/2015, 08:33 PM)elpapimejor escribió: Hola, vengo pidiendo ashuda, como hago para ponerle que solamente le haga danio al zombie en zombie plague y que en vez de que le haga danio solamente lo ralentize o que almentos le haga 0.01 de danio y que lo ralentize...
Hay una parte específica donde el láser mata a quien toque, simple de ejecución y sencilla de encontrar. Ahí podés tan solo fijar la velocidad máxima del jugador a un valor ( 200.0 por ejemplo ) y remover la función que mata, logrando que ralentice a quien toque en vez de matarlo.
sino , no aparece nada en el chat solo el prefijo de "g_szCommunity".
-----------------------------
Después con lo de no romper un laser del mismo team, siendo ct y quiero romper mi propio laser y no podría
También probé el code de mongito para cuando se explota un laser te impulse , pero no funciona
---------------------------------
Si rompo un laser solamente con el cuchillo y con el slash , no se crea explosión y el laser sigue ahí , solo se remueve el model :p
Yo lo probe al code q pase y andaba no se con las nuevas actualizaciones si cambio algo
PD: yo queria preguntar algo de paso como seria para q si esta en el aire el laser lo ponga mirando hacia abajo no se si se entiende osea supongo q sera jugar con los angulos creo