Otóż chcę zrobić, by gracz, który jest blisko wieżyczki mógł "podnieść ją" naciskając RAZ klawisz "E". A mógł ją upuśćić ( lecz nie w miejscu, gdzie ono jest zablokowane ) naciskając DRUGI RAZ klawisz "E".
Mam taki kod:
new iTime[33];
public client_PreThink(id)
{
if(!is_user_alive(id) || is_user_hltv(id))
return PLUGIN_CONTINUE
static entlist[3]
if(find_sphere_class(id, "turret", 10.0, entlist, 2))
{
if(is_turret(entlist[0]) && get_gametime() > ThinkTime[id]+0.5 && (get_sentry_owner_by_ent_id(entlist[0]) == id) && !gMenuTurretsInMenu[id] && !task_exists(entlist[0]))
{
static Float:Origin[3], fOrigin[3]
pev(entlist[0], pev_origin, Origin)
FVecIVec(Origin, fOrigin)
msg_circle(id, fOrigin, gSpriteLaserBeam, {255, 255, 0}, gTurretsRange[id][get_sentry_id_by_ent(id, entlist[0])]-220)
ThinkTime[id] = get_gametime()
}
if(get_gametime() > ThinkInfoTime[id]+2.0)
{
static nick[33], szTemp[64], szTurret[64], id2
id2 = get_sentry_owner_by_ent_id(entlist[0])
get_user_name(id2, nick, 32)
formatex(szTemp, 63, "Wiezyczka gracza: %s", nick)
if(gTurretsType[id2][get_sentry_id_by_ent(id2, entlist[0])])
{
formatex(szTurret, 63, "^nTyp : %s^nAmunicja : %d", gTurretName[gTurretsType[id2][get_sentry_id_by_ent(id2, entlist[0])]], gTurretsAmmo[id2][get_sentry_id_by_ent(id2, entlist[0])])
add(szTemp, 63, szTurret)
}
ThinkInfoTime[id] = get_gametime()
set_hudmessage(0, 255, 0, 0.31, 0.79, 1, 6.0, 2.0, _, _, 2)
ShowSyncHudMsg(id, gSync4, szTemp)
}
}
if(g_iOwnedEnt[id] && IsMovingEnt[id])
{
static Float:Origin[3], Float:Origin2[3], GOrigin[3]
get_user_origin(id, GOrigin, 3)
IVecFVec(GOrigin, Origin)//origin
IVecFVec(GOrigin, Origin2)//turn
get_origin_from_dist_player(id, 45.0, Origin)
Origin[2]-=36.0
set_pev(g_iOwnedEnt[id], pev_origin, Origin)
sentry_turntotarget2(g_iOwnedEnt[id], Origin, Origin2)
if(is_turret_stuck(g_iOwnedEnt[id]))
{
client_print(id, print_center, "Nie mozesz tutaj postawic tej wiezyczki!")
CanDropTurret[id] = false
}
else
CanDropTurret[id] = true;
entity_set_float(g_iOwnedEnt[id], EV_FL_nextthink, 0.0)
}
return PLUGIN_CONTINUE
}
public fw_CmdStart( id, uc_handle, randseed )
{
if (!is_user_alive(id))
return FMRES_IGNORED
if((pev(id, pev_button) & IN_USE) && !(pev(id, pev_oldbuttons) & IN_USE))
{
LastCanDropTurret[id] = !LastCanDropTurret[id]
//LastCanDropTurret[id] = LastCanDropTurret[id]?!LastCanDropTurret[id]:LastCanDropTurret[id]
if(LastCanDropTurret[id])
{
iTime[id] = floatround(get_gametime());
cmdGrabEnt(id)
}
if(!LastCanDropTurret[id] && CanDropTurret[id] && ( iTime[id]+1 == floatround(get_gametime()) ))
{
cmdStopEnt(id)
}
}
//else if(oldbutton & IN_USE && !(button & IN_USE) && CanDropTurret[id])
// cmdStopEnt(id
return FMRES_IGNORED;
}
public cmdGrabEnt(id)
{
client_cmd(id, "+use")
new entlist[3]
new ent
if(find_sphere_class(id, "turret", 17.5, 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
client_cmd(id, "-use")
return PLUGIN_HANDLED
}
public cmdStopEnt(id)
{
//client_cmd(id, "-use")
if (!g_iOwnedEnt[id])
return PLUGIN_HANDLED;
new ent = g_iOwnedEnt[id]
set_pev(ent,pev_rendermode, kRenderNormal)
set_pev(ent,pev_rendercolor, {0, 0, 0})
set_pev(ent,pev_renderamt, 255.0)
g_iOwnedEnt[id] = 0;
IsMovingEnt[id] = false
drop_to_floor(ent)
entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1)
return PLUGIN_CONTINUE
}
O to o co mi chodzi
1. Podchodze do wieżyczki - naciskam klawisz "E" 2. Podnoszę wieżyczke, puszczam klawisz "E" ( client_cmd(id, "+use") ) 3. Dalej trzymam tą wieżyczkę 4. Idę w inne miejsce 5. To miejsce jest zablkowane ( is_turret_stuck ) 6. Nie mogę postawić tam wieżyczki ( Naciskając drugi raz klawisz "E" ) 7. Idę w inne miejsce 8. To miejsce jest dobre i mogę tam postawić wieżyczkę 9. Postawiam wieżyczkę 10. I tak w kółko
A ten kod co dałem działa tak:
1. Podchodze do wieżyczki - naciskam klawisz "E" 2. Podnoszę wieżyczke, puszczam klawisz "E" ( client_cmd(id, "+use") ) 3. Dalej trzymam tą wieżyczkę 4. Idę w inne miejsce 5. To miejsce jest zablkowane ( is_turret_stuck ) 6. Nie mogę postawić tam wieżyczki ( Naciskając drugi raz klawisz "E" ) 7. Idę w inne miejsce 8. To miejsce jest dobre i NIE mogę tam postawić wieżyczkę 9. W ogóle nie mogę postawić nigdzie wieżyczki. 10. I tak w kółko
Gdy dam restart, żeby podnieść wieżyczkę, musze wpisać komendę do konsoli: "-use"
Czemu tak się dzieję ? Proszę o pomoc.


Dodatki SourceMod














