public ltm_Think( i_Ent ) {
if(!pev_valid(i_Ent))
return FMRES_IGNORED;
new EntityName[32];
pev(i_Ent, pev_classname, EntityName, 31);
if(!equal( EntityName, ENT_CLASS_NAME))
return FMRES_IGNORED;
static Float:fCurrTime;
fCurrTime = get_gametime();
new typid = pev(i_Ent, LASERMINE_STEP);
switch(typid) {
case POWERUP_THINK: {
new Float:fPowerupTime;
pev(i_Ent, LASERMINE_POWERUP, fPowerupTime);
if(fCurrTime > fPowerupTime) {
set_pev(i_Ent, pev_solid, SOLID_BBOX);
set_pev(i_Ent, LASERMINE_STEP, BEAMBREAK_THINK);
PlaySound(i_Ent, ACTIVATE_SOUND);
}
new teamid = pev(i_Ent, LASERMINE_TEAM);
switch(teamid)
{
case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,0,255,0,kRenderNormal,10);
case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,0,0,255,kRenderNormal,10);
}
set_pev(i_Ent, pev_nextthink, fCurrTime + 0.1);
}
case BEAMBREAK_THINK: {
static Float:vEnd[3],Float:vOrigin[3];
pev(i_Ent, pev_origin, vOrigin);
pev(i_Ent, LASERMINE_BEAMENDPOINT, vEnd);
static iHit, Float:fFraction;
engfunc(EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, i_Ent, 0);
get_tr2(0, TR_flFraction, fFraction);
iHit = get_tr2(0, TR_pHit);
if(fFraction < 1.0) {
if(pev_valid(iHit)) {
pev(iHit, pev_classname, EntityName, 31);
if(!equal(EntityName, ENT_CLASS_NAME)) {
set_pev(i_Ent, pev_enemy, iHit);
if(get_pcvar_num(g_LMODE) == MODE_LASERMINE)
CreateLaserDamage(i_Ent, iHit);
else
if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit))
set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);
if (!pev_valid(i_Ent))
return FMRES_IGNORED;
set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
}
}
}
if(get_pcvar_num(g_LDMGMODE)!=0)
if(pev(i_Ent,LASERMINE_HITING) != iHit)
set_pev(i_Ent,LASERMINE_HITING,iHit);
// -- Tripmine is still there.
if(pev_valid(i_Ent)) {
static Float:fHealth;
pev(i_Ent, pev_health, fHealth);
if(fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME)) {
set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK );
set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) );
}
static Float:fBeamthink;
pev(i_Ent, LASERMINE_BEAMTHINK, fBeamthink);
if(fBeamthink < fCurrTime && get_pcvar_num(g_LVISIBLE)) {
DrawLaser(i_Ent, vOrigin, vEnd);
set_pev(i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1);
}
set_pev(i_Ent, pev_nextthink, fCurrTime + 0.01);
}
}
case EXPLOSE_THINK: {
// -- Stopping entity to think
set_pev(i_Ent, pev_nextthink, 0.0);
PlaySound(i_Ent, STOP_SOUND);
g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
CreateExplosion(i_Ent);
CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))
RemoveEntity(i_Ent);
}
}
return FMRES_IGNORED;
}
BEAMBREAK_THINK jest odpowiedzialny właśnie gdy ktoś w niego wejdzie zadaje obrażenia, i zauważyłem że iHit = get_tr2(0, TR_pHit); jest odpowiedzialne za ID któremu ma zadać obrażenia, czy ktoś ma jakieś pomysły?