Roach AI: Cucarachas cochinas
#1
Ya que Mario me quizo cagar posteando sus cucarachas, les traigo las que habia hecho yo, y están muy bien educadas Proud

Código PHP:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <xs>

const ROACH_BLOOD 195;
const 
Float:SPAWN_DISTANCE 64.0;
const 
Float:ROACH_BASE_SPEED 50.0;

new const 
MODEL_ROACH[] = "models/roach.mdl";
new const 
SOUND_ROACH_DIE[] = "roach/rch_smash.wav";
new const 
ROACH_CLASSNAME[] = "roach";
new const 
ROACH_REAL_CLASSNAME[] = "info_target";

new 
bool:g_bSomeRoachOnWorld;
new 
g_iBloodSpraySpriteIdg_iBloodDropSpriteId;
new 
HamHook:g_pKilledFwdHamHook:g_pBloodColorFwd;

#define EV_VEC_roachprevpos EV_VEC_vuser1
#define EV_INT_roachflags EV_INT_weaponanim
#define EV_FL_nextroachdir EV_FL_fuser2

#define ROACH_LEFT (1<<22)
#define ROACH_IS (1<<23)

public plugin_init()
{
    
register_plugin("Roach AI""0.1""PM");
    
    
register_clcmd("say /roach""ClientCommand_Roach");
    
register_event("HLTV""Event_RoundStart""a""1=0""2=0");
    
register_think(ROACH_CLASSNAME"OnRoach_Think")
    
register_touch(ROACH_CLASSNAME"*""OnRoach_Touch")
    
    
g_bSomeRoachOnWorld false
    g_pKilledFwd 
RegisterHam(Ham_KilledROACH_REAL_CLASSNAME"OnRoach_Killed")
    
g_pBloodColorFwd RegisterHam(Ham_BloodColorROACH_REAL_CLASSNAME"OnRoach_BloodColor")
    
    
UpdateForwards();
}

public 
plugin_precache()
{
    
precache_model(MODEL_ROACH);
    
precache_sound(SOUND_ROACH_DIE);
    
    
g_iBloodSpraySpriteId precache_model("sprites/bloodspray.spr")
    
g_iBloodDropSpriteId precache_model("sprites/blood.spr")
}

public 
Event_RoundStart()
{
    new 
iEntId = -1;
    
    while( (
iEntId find_ent_by_class(iEntIdROACH_CLASSNAME)) > )
        
remove_entity(iEntId);
        
    
g_bSomeRoachOnWorld false;
    
UpdateForwards();
}

public 
OnRoach_Think(iEntId)
{
    if(!
is_valid_ent(iEntId))
        return;
        
    static 
bool:bChangeAnglesFloat:flCurrentTimeFloat:vecTemp[3], Float:vecOrigin[3], Float:vecVelocity[3], Float:vecAngles[3]
    
entity_get_vector(iEntIdEV_VEC_originvecOrigin);
    
entity_get_vector(iEntIdEV_VEC_velocityvecVelocity);
    
entity_get_vector(iEntIdEV_VEC_roachprevposvecTemp);

    
xs_vec_sub(vecOriginvecTempvecTemp);
    
    
bChangeAngles false;
    
flCurrentTime get_gametime();

    if(
xs_vec_len(vecTemp) < 1.0)
    {
        
vecVelocity[0] = random_float(-ROACH_BASE_SPEEDROACH_BASE_SPEED);
        
vecVelocity[1] = random_float(-ROACH_BASE_SPEEDROACH_BASE_SPEED);

        
vector_to_angle(vecVelocityvecAngles);
        
bChangeAngles true;
    }
    else if(
entity_get_int(iEntIdEV_INT_flags) & FL_ONGROUND)
    {
        static 
iFlags;
        
iFlags entity_get_int(iEntIdEV_INT_roachflags);
        
        
vector_to_angle(vecVelocityvecAngles);
        
bChangeAngles true;
        
        if(
entity_get_float(iEntIdEV_FL_nextroachdir) < flCurrentTime)
        {
            
entity_set_float(iEntIdEV_FL_nextroachdirflCurrentTime random_float(2.05.0));
            
iFlags ^= ROACH_LEFT;
            
entity_set_int(iEntIdEV_INT_roachflagsiFlags)
        }
        
        
vecAngles[1] += (iFlags ROACH_LEFT) ? -3.0 3.0
        
        angle_vector
(vecAnglesANGLEVECTOR_FORWARDvecVelocity)
        
xs_vec_mul_scalar(vecVelocityROACH_BASE_SPEEDvecVelocity)
    }
    
    
entity_set_vector(iEntIdEV_VEC_velocityvecVelocity);
    
entity_set_vector(iEntIdEV_VEC_roachprevposvecOrigin);

    if(
bChangeAngles)
    {
        
vecAngles[0] = 0.0
        
vecAngles[2] = 0.0;
        
entity_set_vector(iEntIdEV_VEC_anglesvecAngles);
    }
    
    
entity_set_float(iEntIdEV_FL_nextthinkflCurrentTime 0.1);
}

public 
OnRoach_Touch(iEntIdiOtherId)
{
    if(!
is_valid_ent(iEntId))
        return;
        
    if(
is_user_alive(iOtherId) && entity_get_edict(iOtherIdEV_ENT_groundentity) == iEntId)
    {
        new 
Float:vecStart[3], Float:vecDirection[3], Float:vecTarget[3]
        
entity_get_vector(iEntIdEV_VEC_originvecTarget)
        
entity_get_vector(iOtherIdEV_VEC_originvecStart)
        
UTIL_BloodDrips(vecTargetROACH_BLOOD5)
        
        
xs_vec_sub(vecTargetvecStartvecDirection)
        
xs_vec_normalize(vecDirectionvecDirection)
        
        
vecTarget[0] = vecStart[0] + (vecDirection[0] * 9999.0)
        
vecTarget[1] = vecStart[1] + (vecDirection[1] * 9999.0)
        
vecTarget[2] = vecStart[2] + (vecDirection[2] * 9999.0)
        
        new 
iTr create_tr2()
        
        
engfunc(EngFunc_TraceLinevecStartvecTargetDONT_IGNORE_MONSTERSiOtherIdiTr)
        
ExecuteHamB(Ham_TraceBleediEntId25.0vecDirectioniTrDMG_SLASH)
        
        
free_tr2(iTr)
        
        
ExecuteHamB(Ham_KillediEntIdiOtherId0)
    }
}

public 
OnRoach_Killed(iVictimiAttacker)
{
    if(
entity_get_int(iVictimEV_INT_roachflags) & ROACH_IS)
    {
        new 
Float:vecOrigin[3], Float:vecDirection[3]
        
entity_get_vector(iVictimEV_VEC_originvecOrigin)
        
xs_vec_set(vecDirectionrandom_float(-1.01.0), random_float(-1.01.0), random_float(0.01.0))
        
        
UTIL_StreakSplash(vecOriginvecDirection51650200);
        
        
emit_sound(iVictimCHAN_VOICESOUND_ROACH_DIEVOL_NORMATTN_NORM0PITCH_NORM)
        
        
entity_set_string(iVictimEV_SZ_classname""); // fix para find_ent_by_class
        
if(find_ent_by_class(-1ROACH_CLASSNAME) <= 0)
        {
            
g_bSomeRoachOnWorld false;
            
UpdateForwards();
        }
    }
}

public 
OnRoach_BloodColor(iEntId)
{
    if(
entity_get_int(iEntIdEV_INT_roachflags) & ROACH_IS)
    {
        
SetHamReturnInteger(ROACH_BLOOD)
        return 
HAM_OVERRIDE;
    }
    
    return 
HAM_IGNORED;
}

public 
ClientCommand_Roach(iId)
{
    if(!
is_user_alive(iId))
    {
        
client_print(iIdprint_center"#Cstrike_TitlesTXT_Command_Not_Available");
        return 
PLUGIN_HANDLED;
    }
    
    new 
Float:vecStart[3], Float:vecAngles[3], Float:vecDiff[3]
    
EyePosition(iIdvecStart);
    
    
entity_get_vector(iIdEV_VEC_v_anglevecAngles);
    
vecAngles[0] = 0.0;
    
vecAngles[2] = 0.0;
    
angle_vector(vecAnglesANGLEVECTOR_FORWARDvecDiff);
    
    
xs_vec_mul_scalar(vecDiffSPAWN_DISTANCEvecDiff);
    
xs_vec_add(vecStartvecDiffvecStart);
    
xs_vec_normalize(vecDiffvecDiff);
    
    if(!
CreateRoach(vecStartvecAnglesvecDiff))
    {
        
client_print(iIdprint_center"Hazlo en algun lugar con mas espacio");
        return 
PLUGIN_HANDLED;
    }
    
    if(!
g_bSomeRoachOnWorld)
    {
        
g_bSomeRoachOnWorld true;
        
UpdateForwards();
    }
    
    
client_print(iIdprint_center"Cucaracha spawneada");
    return 
PLUGIN_CONTINUE;
}

CreateRoach(Float:vecStart[3], Float:vecAngles[3], Float:vecDirection[3])
{
    new 
iEntId create_entity(ROACH_REAL_CLASSNAME)
    
entity_set_string(iEntIdEV_SZ_classnameROACH_CLASSNAME)
    
    
entity_set_origin(iEntIdvecStart)
    
entity_set_model(iEntIdMODEL_ROACH)
    
entity_set_size(iEntIdFloat:{-1.0, -1.00.0}, Float:{1.01.02.0}) // roach.cpp
    
    
entity_set_vector(iEntIdEV_VEC_anglesvecAngles)
    
    
entity_set_int(iEntIdEV_INT_solidSOLID_BBOX)
    
entity_set_int(iEntIdEV_INT_movetypeMOVETYPE_BOUNCE)
    
    if(
IsEntityStucked(iEntIdvecStart))
    {
        
remove_entity(iEntId);
        return 
0;
    }
    
    
xs_vec_mul_scalar(vecDirectionROACH_BASE_SPEEDvecDirection)
    
entity_set_vector(iEntIdEV_VEC_velocityvecDirection)
    
entity_set_vector(iEntIdEV_VEC_roachprevposvecStart)
    
    
entity_set_int(iEntIdEV_INT_sequence0// run
    
entity_set_int(iEntIdEV_INT_flagsentity_get_int(iEntIdEV_INT_flags) | FL_MONSTER)
    
entity_set_int(iEntIdEV_INT_roachflagsROACH_IS)
    
    new 
Float:flCurrentTime get_gametime()
    
entity_set_float(iEntIdEV_FL_fov180.0)
    
entity_set_float(iEntIdEV_FL_health1.0)
    
entity_set_float(iEntIdEV_FL_gravity0.5)
    
entity_set_float(iEntIdEV_FL_friction0.5)
    
entity_set_float(iEntIdEV_FL_framerate1.0)
    
entity_set_float(iEntIdEV_FL_takedamageDAMAGE_AIM)
    
entity_set_float(iEntIdEV_FL_animtimeflCurrentTime)
    
entity_set_float(iEntIdEV_FL_nextthinkflCurrentTime 0.1)
    
entity_set_float(iEntIdEV_FL_nextroachdirflCurrentTime)
    
    return 
iEntId;
}

EyePosition(iIdFloat:vecOrigin[3])
{
    static 
Float:vecViewOffs[3]
    
    
entity_get_vector(iIdEV_VEC_view_ofsvecViewOffs)
    
entity_get_vector(iIdEV_VEC_originvecOrigin)
    
    
xs_vec_add(vecOriginvecViewOffsvecOrigin)
}

bool:IsEntityStucked(iEnt, const Float:vecPosition[3])
{
    
engfunc(EngFunc_TraceMonsterHulliEntvecPositionvecPositionDONT_IGNORE_MONSTERSiEnt0);
    
    return (
get_tr2(0TR_StartSolid) || get_tr2(0TR_AllSolid) || !get_tr2(0TR_InOpen))
}

UpdateForwards()
{
    if(
g_bSomeRoachOnWorld)
    {
        
EnableHamForward(g_pKilledFwd);
        
EnableHamForward(g_pBloodColorFwd);
    }
    else
    {
        
DisableHamForward(g_pKilledFwd);
        
DisableHamForward(g_pBloodColorFwd);
    }
}

UTIL_BloodDrips(const Float:vecOrigin[3], const iColor, const iSize)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvecOrigin0)
    
write_byte(TE_BLOODSPRITE)
    
engfunc(EngFunc_WriteCoordvecOrigin[0])
    
engfunc(EngFunc_WriteCoordvecOrigin[1])
    
engfunc(EngFunc_WriteCoordvecOrigin[2])
    
write_short(g_iBloodSpraySpriteId)
    
write_short(g_iBloodDropSpriteId)
    
write_byte(iColor// color index
    
write_byte(iSize// size
    
message_end()
}

UTIL_StreakSplash(const Float:vecOrigin[3], const Float:vecDirection[3], const iColor, const iCount, const iSpeed, const iVelocityRange)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvecOrigin0);
    
write_byte(TE_STREAK_SPLASH);
    
engfunc(EngFunc_WriteCoordvecOrigin[0]);
    
engfunc(EngFunc_WriteCoordvecOrigin[1]);
    
engfunc(EngFunc_WriteCoordvecOrigin[2]);
    
engfunc(EngFunc_WriteCoordvecDirection[0]);
    
engfunc(EngFunc_WriteCoordvecDirection[1]);
    
engfunc(EngFunc_WriteCoordvecDirection[2]);
    
write_byte(min(iColor255));
    
write_short(iCount);
    
write_short(iSpeed);
    
write_short(iVelocityRange);// random velocity modifier
    
message_end();

  • No pueden aparecer trabadas
  • Al pillar una muralla buscan otra direccion
  • Van girando izquierda derecha
  • Las puedes pisar, matandolas y reventandoles en sangre
  • Les puedes disparar y matar
  • Son hermosas Rainbow

Usen /roach en chat para spawnear una en frente de ustedes.


Archivos adjuntos
.sma   Descargar AMXX / roach.sma (Tamaño: 9.37 KB / Descargas: 287)
Responder
#2
Rainbow Rainbow Rainbow Rainbow


Cucas Everywhere *-*
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#3
Hay que hacer un concurso de la mejor AI para cucarachas...
[Imagen: paypalqr.png]
Responder
#4
no había leído que las podías pisar, lo probé con los bots y cuando uno piso una cuca , me mate de risa jajaja

es muy bueno , falta reemplazar la c4 por un insecticida y listo (?
Responder
#5
(23/02/2015, 02:32 PM)ErikMav94 escribió: es muy bueno , falta reemplazar la c4 por un insecticida y listo (?

Roflmao

Van a llenar el foro de cucarachas Oh god why
Responder
#6
before Rainbow

[Imagen: spfj1KB.jpg]

after Roflmao

[Imagen: b6AVggA.jpg]
Responder
#7
Esta buenooo ajjajja , que qleado
[Imagen: tumblr_mt8w6d7yz11rn3500o1_400.gif]
Responder
#8
(23/02/2015, 02:57 PM)ErikMav94 escribió: before Rainbow

[Imagen: spfj1KB.jpg]

after Roflmao

[Imagen: b6AVggA.jpg]

Con unos amigos llenamos un sv de cucarachas, parecia post pelicula porno el piso Roflmao
Responder
#9
Tenes que hacer uno con pandas, ya que hay tantos pandas. Roflmao

PD: Lindas cucharachitas .

EDIT: ahora que me acuerdo hay models de gallinitas :3 podrían hacer un zoológico.
Responder
#10
Código PHP:
register_clcmd("say /roach""ClientCommand_Roach"); 

--------->

Código PHP:
register_clcmd("say /cuca""ClientCommand_Roach"); 

RoflmaoRoflmaoRoflmao
Responder
#11
Código PHP:
bool:IsEntityStucked(iEnt, const Float:vecPosition[3])
{
    
engfunc(EngFunc_TraceMonsterHulliEntvecPositionvecPositionDONT_IGNORE_MONSTERSiEnt0);
    
    return (
get_tr2(0TR_StartSolid) || get_tr2(0TR_AllSolid) || !get_tr2(0TR_InOpen))


te pregunto por acá , sino de ultima hago un thread...

ese es como el que esta en los plugins de anti stuck (pero para players)
este sirve para cualquier entidad?

Nunca leí sobre traces y quería saber si me podes explicar ese stock Proud
Responder
#12
Código PHP:
new bool:g_bSomeRoachOnWorld

el #Panda no aprueba este plugin

Nothingdohere
Hi Milashkasiya CrabCrab

Soy un #Panda.. Soy solo un tipo que parece #común pero soy todo lo contrario; alguien #atípico en esta sociedad actual

[Imagen: xl0jvd-5.png]
Link
Responder
#13
(23/02/2015, 02:32 PM)Neeeeeeeeeel.- escribió: Hay que hacer un concurso de la mejor AI para cucarachas...

En unos días saco mi siguiente versión...
Anima a más gente a que publique sus cucarachas Trolleyes
Responder
#14
Dios mio, lo que es este código para unas simples cucarachas asquerosas. Cutecry


(23/02/2015, 02:32 PM)Neeeeeeeeeel.- escribió: Hay que hacer un concurso de la mejor AI para cucarachas...

Es obvio que hay un solo ganador (?
O quizá... [Imagen: 4yOLB.png]
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#15
Esto no es un plugin nuevo? :3
Responder
#16
Te voy a demandar por no darme derechos de autor. NO

(23/02/2015, 02:57 PM)ErikMav94 escribió: before Rainbow

[Imagen: spfj1KB.jpg]

after Roflmao

[Imagen: b6AVggA.jpg]

Omelette de Cuca Roflmao

PD: Lo hiciste tal cual lo pedi metal, que grande. Pero Mario se porto mejor, y me dio creditos Excitedeyes
Responder
#17
(23/02/2015, 05:41 PM)ErikMav94 escribió:
Código PHP:
bool:IsEntityStucked(iEnt, const Float:vecPosition[3])
{
    
engfunc(EngFunc_TraceMonsterHulliEntvecPositionvecPositionDONT_IGNORE_MONSTERSiEnt0);
    
    return (
get_tr2(0TR_StartSolid) || get_tr2(0TR_AllSolid) || !get_tr2(0TR_InOpen))


te pregunto por acá , sino de ultima hago un thread...

ese es como el que esta en los plugins de anti stuck (pero para players)
este sirve para cualquier entidad?

Nunca leí sobre traces y quería saber si me podes explicar ese stock Proud

Lo ubique yo, ya que ningun gringo puto lo hizo, y sirve para detectar entidades trabadas Proud funciona de la misma manera que el metodo de stuck para players, incluso puedes usar este con players y da el mismo resultado.

@hud el credito es para el HLSDK por el model, los sonidos, y algunos calculos Genius
Responder
#18
(23/02/2015, 10:58 PM)meTaLiCroSS escribió:
(23/02/2015, 05:41 PM)ErikMav94 escribió:
Código PHP:
bool:IsEntityStucked(iEnt, const Float:vecPosition[3])
{
    
engfunc(EngFunc_TraceMonsterHulliEntvecPositionvecPositionDONT_IGNORE_MONSTERSiEnt0);
    
    return (
get_tr2(0TR_StartSolid) || get_tr2(0TR_AllSolid) || !get_tr2(0TR_InOpen))


te pregunto por acá , sino de ultima hago un thread...

ese es como el que esta en los plugins de anti stuck (pero para players)
este sirve para cualquier entidad?

Nunca leí sobre traces y quería saber si me podes explicar ese stock Proud

Lo ubique yo, ya que ningun gringo puto lo hizo, y sirve para detectar entidades trabadas Proud funciona de la misma manera que el metodo de stuck para players, incluso puedes usar este con players y da el mismo resultado.

@hud el credito es para el HLSDK por el model, los sonidos, y algunos calculos Genius

Si, me cague buscando en el otro foro y nunca he encontrado algo así , sos groso Proud

me sirve mucho ese stock Cutecry
Responder
#19
(23/02/2015, 10:58 PM)meTaLiCroSS escribió: @hud el credito es para el HLSDK por el model, los sonidos, y algunos calculos Genius

#ThinkMyFriend

Si yo no hubiera hecho mi comentario no hubiera ocurrido esta genialidad, por lo tanto meresco un mero reconocimiento Crab
Responder
#20
(23/02/2015, 11:38 PM)hud escribió:
(23/02/2015, 10:58 PM)meTaLiCroSS escribió: @hud el credito es para el HLSDK por el model, los sonidos, y algunos calculos Genius

#ThinkMyFriend

Si yo no hubiera hecho mi comentario no hubiera ocurrido esta genialidad, por lo tanto meresco un mero reconocimiento Crab

Entonces el credito va a BAILOPAN por haber creado el amxx... y a Neeeeel por el foro, y a Arkshine por la 1.8.2, y a OLO por haber creado el amx default

Y a Half-Life por haberlo hecho primero que yo Roflmao
Responder
#21
(23/02/2015, 11:45 PM)meTaLiCroSS escribió:
(23/02/2015, 11:38 PM)hud escribió:
(23/02/2015, 10:58 PM)meTaLiCroSS escribió: @hud el credito es para el HLSDK por el model, los sonidos, y algunos calculos Genius

#ThinkMyFriend

Si yo no hubiera hecho mi comentario no hubiera ocurrido esta genialidad, por lo tanto meresco un mero reconocimiento Crab

Entonces el credito va a BAILOPAN por haber creado el amxx... y a Neeeeel por el foro, y a Arkshine por la 1.8.2, y a OLO por haber creado el amx default

Y a Half-Life por haberlo hecho primero que yo Roflmao

No voy a seguir con esta discusion, tus niveles de KI actuales sobrepasan 10 a 1 a los mios. Yao ming
Responder
#22
si puedes hacerte una con zombies que te persigan y ataquen sin ningun tipo de hud, exp, nivel ni nada, solo unas cvars para ponerle el dmg que hacen dichos zombies y la su respectiva hp sería bueno, también con un punto de origen editable Sonrisa como para ponerlo en mod Fre for all, matando zombies a lo L4D para darle una espectativa nuevo a los usuarios Cutecry
Responder
#23
Metali como hago para que no me tire el sv 100 de choke y 100 de loss? spawnee 400 cucarachas por ay :c
Responder
#24
(03/03/2015, 06:00 PM)LeooO xD escribió: Metali como hago para que no me tire el sv 100 de choke y 100 de loss? spawnee 400 cucarachas por ay :c

renta un buen server >.<
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#25
(03/03/2015, 06:00 PM)LeooO xD escribió: Metali como hago para que no me tire el sv 100 de choke y 100 de loss? spawnee 400 cucarachas por ay :c

La visualizacion de demaciadas entidades te generará excesivo choke, asi lo comprobe yo tambien
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)