stock get_origin_from_dist_player(id, dist, origin[3], zPosition=3) {
new eyeOrigin[3];
get_user_origin(id, eyeOrigin, 1);
if(dist == 0) {
origin[0] = eyeOrigin[0];
origin[1] = eyeOrigin[1];
origin[2] = eyeOrigin[2];
return;
}
new aimOrigin[3];
get_user_origin(id, aimOrigin, 3);
aimOrigin[0] = aimOrigin[0] - eyeOrigin[0];
aimOrigin[1] = aimOrigin[1] - eyeOrigin[1];
aimOrigin[2] = aimOrigin[2] - eyeOrigin[2];
new Float:test[3]
IVecFVec(aimOrigin, test)
new aimLen = vector_length(test))
if(!zPosition)
get_user_origin(id, eyeOrigin);
origin[0] = aimOrigin[0]*aimLen
origin[1] = aimOrigin[1]*aimLen
origin[2] = zPosition==1?aimOrigin[2]*aimLen:eyeOrigin[2]
}
I wszystko działa pięknie:) Teraz jest tylko jeden problem, nie będę tworzył tematu, gdyż to są powikłania z tego
Ogólnie robie przemieszczanie wieżyczek na klawisz "e" i teraz wszystko działa tylko mam problem z tym kodem (inna bajka
)
if(gTurretsAmmo[id][sentryid] <= 0 && !IsMovingEnt[id] && !g_iOwnedEnt[id])
{
entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1);
return PLUGIN_CONTINUE
}
Tutaj przerywa thinka tego enta co powoduje, że gdy "upuszczę" wieżyczke, zmienne się wyzerują (IsMovingEnt jest jako bool więc jako false, g_iOwnedEnt na 0) i "think" nie chce działać.
To znaczy, postawię wieżyczke - Jest OK, przemieszcze ją i upuszczę - Think się przerywa, gdyż wykonuje się to sprawdzanie. Nie wiem, czemu ona się wywołuje tutaj daje cały kod, który może mieć wspólnego coś:
public client_PreThink(id)
{
if(is_user_alive(id) && g_iOwnedEnt[id] && IsMovingEnt[id])
{
static Float:Origin[3], Float:SOrigin[3], GOrigin[3]
get_user_origin(id, GOrigin, 3)
IVecFVec(GOrigin, Origin)
pev(g_iOwnedEnt[id], pev_origin, SOrigin)
sentry_turntotarget2(g_iOwnedEnt[id], SOrigin, Origin)
Origin[2]-=36.0
get_origin_from_dist_player(id, 45.0, SOrigin)
set_pev(g_iOwnedEnt[id], pev_origin, Origin)
}
}
public fw_CmdStart( id, uc_handle, randseed )
{
if (!is_user_alive(id))
return FMRES_IGNORED
//new button = pev(id, pev_button)
new button = get_uc( uc_handle , UC_Buttons );
new oldbutton = pev(id, pev_oldbuttons)
if( button & IN_USE && !(oldbutton & IN_USE))
cmdGrabEnt(id)
else if(oldbutton & IN_USE && !(button & IN_USE))
cmdStopEnt(id)
return FMRES_IGNORED;
}
public cmdGrabEnt(id)
{
new entlist[3]
new ent
if(find_sphere_class(id, "turret", 12.0, entlist, 2))
ent = entlist[0]
else
return PLUGIN_HANDLED
if (!is_valid_ent(ent) || is_user_alive(ent))
return PLUGIN_HANDLED;
static szClass[10]
entity_get_string(ent, EV_SZ_classname, szClass, 9);
if (!equal(szClass, "turret"))
return PLUGIN_HANDLED;
static Float:fOrigin[3], iAiming[3], Float:fAiming[3]
get_user_origin(id, iAiming, 3);
IVecFVec(iAiming, fAiming);
entity_get_vector(ent, EV_VEC_origin, fOrigin);
g_fOffset1[id] = fOrigin[0] - fAiming[0];
g_fOffset2[id] = fOrigin[1] - fAiming[1];
g_fOffset3[id] = fOrigin[2] - fAiming[2];
set_pev(ent,pev_rendermode,kRenderTransColor)
set_pev(ent,pev_rendercolor, {255, 0, 0})
set_pev(ent,pev_renderamt, 100.0)
IsMovingEnt[id] = true;
g_iOwnedEnt[id] = ent
return PLUGIN_HANDLED
}
public cmdStopEnt(id)
{
if (!g_iOwnedEnt[id])
return PLUGIN_HANDLED;
new ent = g_iOwnedEnt[id]
set_pev(ent,pev_rendermode, kRenderNormal)
g_iOwnedEnt[id] = 0;
IsMovingEnt[id] = false
drop_to_floor(ent)
PlayerTurretUpgradeMenu1(id, -1, -1)
return PLUGIN_HANDLED;
}
Sentry Think
http://wklej.to/oj4AX