Junior Member
|
07-10-2021
, 12:32
Re: Base Builder Locking
|
#10
|
Quote:
Originally Posted by Supremache
Replace these functions:
PHP Code:
public cmdGrabEnt(id)
{
if (g_fBuildDelay[id] + BUILD_DELAY > get_gametime())
{
g_fBuildDelay[id] = get_gametime()
client_print (id, print_center, "%L", LANG_SERVER, "BUILD_SPAM")
return PLUGIN_HANDLED
}
else
g_fBuildDelay[id] = get_gametime()
if (g_isBuildBan[id])
{
client_print (id, print_center, "%L", LANG_SERVER, "BUILD_BANNED")
client_cmd(id, "spk %s", LOCK_FAIL);
return PLUGIN_HANDLED;
}
if (g_isZombie[id] && !access(id, FLAGS_OVERRIDE))
return PLUGIN_HANDLED
if (!g_boolCanBuild && !access(id, FLAGS_BUILD) && !access(id, FLAGS_OVERRIDE))
{
client_print (id, print_center, "%L", LANG_SERVER, "BUILD_NOTIME")
return PLUGIN_HANDLED
}
if (g_iOwnedEnt[id] && is_valid_ent(g_iOwnedEnt[id]))
cmdStopEnt(id)
new ent, bodypart
get_user_aiming (id,ent,bodypart)
if (!is_valid_ent(ent) || ent == g_iEntBarrier || is_user_alive(ent) || IsMovingEnt(ent))
return PLUGIN_HANDLED;
if ((BlockLocker(ent) && BlockLocker(ent) != id) || (BlockLocker(ent) && !access(id, FLAGS_OVERRIDE)))
return PLUGIN_HANDLED;
new szClass[10], szTarget[7];
entity_get_string(ent, EV_SZ_classname, szClass, 9);
entity_get_string(ent, EV_SZ_targetname, szTarget, 6);
if (!equal(szClass, "func_wall") || equal(szTarget, "ignore"))
return PLUGIN_HANDLED;
ExecuteForward(g_fwGrabEnt_Pre, g_fwDummyResult, id, ent);
new 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];
g_fEntDist[id] = get_user_aiming(id, ent, bodypart);
if (g_fEntMinDist)
{
if (g_fEntDist[id] < g_fEntMinDist)
g_fEntDist[id] = g_fEntSetDist;
}
else if (g_fEntMaxDist)
{
if (g_fEntDist[id] > g_fEntMaxDist)
return PLUGIN_HANDLED
}
set_pev(ent,pev_rendermode,kRenderTransColor)
set_pev(ent,pev_rendercolor, g_fColor[g_iColor[id]] )
set_pev(ent,pev_renderamt, g_fRenderAmt[g_iColor[id]] )
MovingEnt(ent);
SetEntMover(ent, id);
g_iOwnedEnt[id] = ent
//Checked after object is successfully grabbed
if (!g_boolCanBuild && (access(id, FLAGS_BUILD) || access(id, FLAGS_OVERRIDE)))
{
new adminauthid[32],adminname[32]
get_user_authid (id,adminauthid,31)
get_user_name(id,adminname,31)
Log("[MOVE] Admin: %s || SteamID: %s moved an entity", adminname, adminauthid)
}
client_cmd(id, "spk %s", GRAB_START);
cmdLockBlock(id)
ExecuteForward(g_fwGrabEnt_Post, g_fwDummyResult, id, ent);
return PLUGIN_HANDLED
}
public cmdStopEnt(id)
{
if (!g_iOwnedEnt[id])
return PLUGIN_HANDLED;
new ent = g_iOwnedEnt[id]
ExecuteForward(g_fwDropEnt_Pre, g_fwDummyResult, id, ent);
if (BlockLocker(ent))
{
switch(g_iLockBlocks)
{
case 0:
{
set_pev(ent,pev_rendermode,kRenderTransColor)
set_pev(ent,pev_rendercolor, Float:{ LOCKED_COLOR })
set_pev(ent,pev_renderamt,Float:{ LOCKED_RENDERAMT })
}
case 1:
{
set_pev(ent,pev_rendermode,kRenderTransColor)
if(is_user_admin(id))
{
set_pev(ent,pev_rendercolor,g_fColor[g_iColor[id]])
}
set_pev(ent,pev_renderamt,Float:{ LOCKED_RENDERAMT })
}
}
}
else
set_pev(ent,pev_rendermode,kRenderNormal)
UnsetEntMover(ent);
SetLastMover(ent,id);
g_iOwnedEnt[id] = 0;
UnmovingEnt(ent);
client_cmd(id, "spk %s", GRAB_STOP);
ExecuteForward(g_fwDropEnt_Post, g_fwDummyResult, id, ent);
return PLUGIN_HANDLED;
}
public cmdLockBlock(id)
{
if (!g_boolCanBuild && g_iLockBlocks)
{
client_print(id, print_center, "%L", LANG_SERVER, "FAIL_LOCK");
return PLUGIN_HANDLED;
}
if (!access(id, FLAGS_LOCK) || (g_isZombie[id] && !access(id, FLAGS_OVERRIDE)))
return PLUGIN_HANDLED;
new ent, bodypart
get_user_aiming (id,ent,bodypart)
new szTarget[7], szClass[10];
entity_get_string(ent, EV_SZ_targetname, szTarget, 6);
entity_get_string(ent, EV_SZ_classname, szClass, 9);
if (!ent || !is_valid_ent(ent) || is_user_alive(ent) || ent == g_iEntBarrier || !equal(szClass, "func_wall") || equal(szTarget, "ignore"))
return PLUGIN_HANDLED;
ExecuteForward(g_fwLockEnt_Pre, g_fwDummyResult, id, ent);
switch (g_iLockBlocks)
{
case 0:
{
if (!BlockLocker(ent) && !IsMovingEnt(ent))
{
LockBlock(ent, id);
set_pev(ent,pev_rendermode,kRenderTransColor)
set_pev(ent,pev_rendercolor,Float:{LOCKED_COLOR})
set_pev(ent,pev_renderamt,Float:{LOCKED_RENDERAMT})
client_cmd(id, "spk %s", LOCK_OBJECT);
}
else if (BlockLocker(ent))
{
UnlockBlock(ent)
set_pev(ent,pev_rendermode,kRenderNormal)
client_cmd(id, "spk %s", LOCK_OBJECT);
}
}
case 1:
{
if (!BlockLocker(ent) && !IsMovingEnt(ent))
{
if (g_iOwnedEntities[id]<g_iLockMax || !g_iLockMax)
{
LockBlock(ent, id)
g_iOwnedEntities[id]++
set_pev(ent,pev_rendermode,kRenderTransColor)
if(is_user_admin(id))
{
set_pev(ent,pev_rendercolor,g_fColor[g_iColor[id]])
}
set_pev(ent,pev_renderamt,Float:{LOCKED_RENDERAMT})
client_print(id, print_center, "%L [ %d / %d ]", LANG_SERVER, "BUILD_CLAIM_NEW", g_iOwnedEntities[id], g_iLockMax)
client_cmd(id, "spk %s", LOCK_OBJECT);
}
else if (g_iOwnedEntities[id]>=g_iLockMax)
{
client_print(id, print_center, "%L", LANG_SERVER, "BUILD_CLAIM_MAX", g_iLockMax)
client_cmd(id, "spk %s", LOCK_FAIL);
}
}
else if (BlockLocker(ent))
{
if (BlockLocker(ent) == id || access(id, FLAGS_OVERRIDE))
{
g_iOwnedEntities[BlockLocker(ent)]--
set_pev(ent,pev_rendermode,kRenderNormal)
client_print(BlockLocker(ent), print_center, "%L [ %d / %d ]", LANG_SERVER, "BUILD_CLAIM_LOST", g_iOwnedEntities[BlockLocker(ent)], g_iLockMax)
UnlockBlock(ent)
client_cmd(id, "spk %s", LOCK_OBJECT);
}
else
{
client_print(id, print_center, "%L", LANG_SERVER, "BUILD_CLAIM_FAIL")
client_cmd(id, "spk %s", LOCK_FAIL);
}
}
}
}
ExecuteForward(g_fwLockEnt_Post, g_fwDummyResult, id, ent);
return PLUGIN_HANDLED
}
|
And please, when the player wants to take the piece used by another, to display a message like "This piece is already used"
Edit: ShowSyncHudMsg(id, g_HudSync, "This object is already used");
|
|