Senior Member
Join Date: Aug 2017
Location: Kyiv
|
09-10-2020
, 15:16
Throwing Swords
|
#1
|
1. Put the ability to Bots - do not throw swords - something is wrong ((
2. You need to somehow block the ability by pressing E - that is, you press E, there is a Bar strip, then you move the sight closer to you at a distance - writes No space for a Throw (but in this case, one Sword takes away)
How is it necessary to prohibit the taking of the Sword knifeammo [id]
3.And the kill with the Sword is triggered every time this touch with the player - that is, the sword flies through the player with a blunt sword, as if the player is transparent ... Maybe in Solid it is xs ..
Sorry - I can't throw off the full code as I asked, if there are nuances, then throw off the bits - but there are enough of them)))
PHP Code:
/////BOTS ABILITY TO THROW SWORDS
enum (+= 7564364)
{
TASK_BOT_USE_SKILL
}
#define ID_BOT_USE_SKILL (taskid - TASK_BOT_USE_SKILL)
public round_start()
{
roundfreeze = false
kill_all_entity("throwing_knife")
kill_all_entity("knife_pickup")
for (new id=1; id<33; id++)
{
if (!is_user_connected(id)) continue;
if (is_user_bot(id))
{
if (task_exists(id+TASK_BOT_USE_SKILL)) remove_task(id+TASK_BOT_USE_SKILL)
set_task(float(random_num(20,30)), "bot_use_skill", id+TASK_BOT_USE_SKILL)
}
}
}
// bot use skill
public bot_use_skill(taskid)
{
new id = ID_BOT_USE_SKILL
if (!is_user_alive(id)) return;
if (!is_user_bot(id)) return;
command_knife(id)
if (task_exists(taskid)) remove_task(taskid)
set_task(float(random_num(20,30)), "bot_use_skill", id+TASK_BOT_USE_SKILL)
}
/////EXECUTING THE SHOT ON THE E KEY
public CmdStart(id)
{
if(!is_user_alive(id))
return;
static iButton; iButton = pev(id, pev_button)
static iOldButton; iOldButton = pev(id, pev_oldbuttons)
new Float: fOriginStart[3], Float: fOriginEnd[3], Float: fAngles[3], Float: fDist
new weapon,clip,ammo
weapon = get_user_weapon(id,clip,ammo)
if( ( iButton & IN_USE ) && !( iOldButton & IN_USE ) )
{
if(weapon == CSW_KNIFE)
{
if(!is_user_alive(id))
return;
get_data_aim(id, fOriginStart, fOriginEnd, fAngles)
fDist = get_distance_f(fOriginStart, fOriginEnd)
if(fDist < THROW_MIN_DIST)
{
client_print(id, print_center, "No Sword Throwing Space
")
message_begin(MSG_ONE, gMsgBarTime, _, id)
write_byte(0)
write_byte(0)
message_end()
return;
}
if(knifeammo[id] == 0)
{
client_print(id, print_center, "No more Swords
", knifeammo[id])
message_begin(MSG_ONE, gMsgBarTime, _, id)
write_byte(0)
write_byte(0)
message_end()
return;
}
if(!cs_get_user_shield(id))
{
knife_animation(id, 2, "models/models_wc/v_knife.mdl")
emit_sound(id, CHAN_VOICE, KNIFE_SOUND, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
message_begin(MSG_ONE, gMsgBarTime, _, id)
write_byte(get_pcvar_num(cvar_timeknife))
write_byte(0)
message_end()
set_task(get_pcvar_float(cvar_timeknife), "command_knife", id+TASK_BARTIME)
}
}
if( iOldButton & IN_USE && !( iButton & IN_USE ) )
set_task(0.1, "knife_stop", id)
}
public knife_stop(id)
{
message_begin(MSG_ONE, gMsgBarTime, _, id)
write_byte(0)
write_byte(0)
message_end()
remove_task(id+TASK_BARTIME)
}
/////SWORD TOUCH FUNCTION WITH PLAYER
public vexd_pfntouch(pToucher, pTouched)
{
if ( !is_valid_ent(pToucher) ) return
new Classname[32]
entity_get_string(pToucher, EV_SZ_classname, Classname, 31)
new owner = entity_get_edict(pToucher, EV_ENT_owner)
new Float:kOrigin[3]
entity_get_vector(pToucher, EV_VEC_origin, kOrigin)
if(equal(Classname,"knife_pickup")) {
if ( !is_valid_ent(pTouched) ) return
new Class2[32]
entity_get_string(pTouched, EV_SZ_classname, Class2, 31)
if(!equal(Class2,"player") || knifeammo[pTouched] >= get_cvar_num("amx_maxknifeammo")) return
if((knifeammo[pTouched] + holdammo[owner]) > get_cvar_num("amx_maxknifeammo")) {
holdammo[owner] -= get_cvar_num("amx_maxknifeammo") - knifeammo[pTouched]
knifeammo[pTouched] = get_cvar_num("amx_maxknifeammo")
emit_sound(pTouched, CHAN_ITEM, KNIFE_DEPLOY, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
else {
knifeammo[pTouched] += holdammo[owner]
emit_sound(pTouched, CHAN_ITEM, KNIFE_DEPLOY, 1.0, ATTN_NORM, 0, PITCH_NORM)
remove_entity(pToucher)
}
}
else if(equal(Classname,"throwing_knife")) {
if(is_user_alive(pTouched)) {
new movetype = entity_get_int(pToucher, EV_INT_movetype)
if(movetype == 0 && knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) {
if(knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) knifeammo[pTouched] += 1
client_print(pTouched,print_center,"Вы взяли Меч",knifeammo[pTouched])
emit_sound(pTouched, CHAN_ITEM, KNIFE_DEPLOY, 1.0, ATTN_NORM, 0, PITCH_NORM)
Give_Knife(pTouched)
screen_fade(pTouched)
remove_entity(pToucher)
}
else if (movetype != 0) {
if(owner == pTouched) return
remove_entity(pToucher)
if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(pTouched) == get_user_team(owner)) return
new pTdead[33]
entity_set_float(pTouched, EV_FL_dmg_take, get_cvar_num("amx_knifedmg") * 1.0)
if((get_user_health(pTouched) - get_cvar_num("amx_knifedmg")) <= 0) {
pTdead[pTouched] = 1
}
else {
set_user_health(pTouched, get_user_health(pTouched) - get_cvar_num("amx_knifedmg"))
}
if(get_user_team(pTouched) == get_user_team(owner)) {
new name[33]
get_user_name(owner,name,32)
}
emit_sound(pTouched, CHAN_ITEM, KNIFE_HIT, 1.0, ATTN_NORM, 0, PITCH_NORM)
if(pTdead[pTouched]) {
if(get_user_team(pTouched) == get_user_team(owner)) {
set_user_frags(owner, get_user_frags(owner) - 1)
}
else {
set_user_frags(owner, get_user_frags(owner) + 1)
}
new gmsgScoreInfo = get_user_msgid("ScoreInfo")
new gmsgDeathMsg = get_user_msgid("DeathMsg")
set_msg_block(gmsgDeathMsg,BLOCK_ONCE)
set_msg_block(gmsgScoreInfo,BLOCK_ONCE)
user_kill(pTouched,1)
message_begin(MSG_ALL,gmsgScoreInfo)
write_byte(owner)
write_short(get_user_frags(owner))
write_short(get_user_deaths(owner))
write_short(0)
write_short(get_user_team(owner))
message_end()
message_begin(MSG_ALL,gmsgScoreInfo)
write_byte(pTouched)
write_short(get_user_frags(pTouched))
write_short(get_user_deaths(pTouched))
write_short(0)
write_short(get_user_team(pTouched))
message_end()
message_begin(MSG_ALL,gmsgDeathMsg,{0,0,0},0)
write_byte(owner)
write_byte(pTouched)
write_byte(0)
write_string("knife")
message_end()
new tknifelog[16]
if (get_cvar_num("amx_tknifelog")) tknifelog = "throwing_knife"
else tknifelog = "knife"
new namea[32], authida[35], teama[32]
new namev[32], authidv[35], teamv[32]
get_user_name(owner,namea,31)
get_user_authid(owner,authida,34)
get_user_team(owner,teama,31)
get_user_name(pTouched,namev,31)
get_user_authid(pTouched,authidv,34)
get_user_team(pTouched,teamv,31)
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
namea,get_user_userid(owner),authida,teama,namev,get_user_userid(pTouched),authidv,teamv,tknifelog)
}
}
}
else {
entity_set_int(pToucher, EV_INT_movetype, 0)
}
}
}
/////FUNCTION OF THE SWORD FLIGHT
public command_knife(id)
{
id -= TASK_BARTIME
if(!is_user_alive(id) || roundfreeze) return PLUGIN_HANDLED
if(get_cvar_num("amx_knifeautoswitch"))
{
knifeout[id] = true
client_cmd(id,"weapon_knife")
}
if(!knifeammo[id]) client_print(id,print_center,"Больше нет Мечей",knifeammo[id])
if(!knifeout[id] || !knifeammo[id]) return PLUGIN_HANDLED
if(tossdelay[id] > get_gametime() - 0.5) return PLUGIN_HANDLED
else tossdelay[id] = get_gametime()
knifeammo[id]--
if (knifeammo[id] == 3) {
client_print(id,print_center,"Осталось %i Меча",knifeammo[id])
}
if (knifeammo[id] == 2) {
client_print(id,print_center,"Осталось %i Меча",knifeammo[id])
}
if (knifeammo[id] == 1) {
client_print(id,print_center,"Остался %i Меч",knifeammo[id])
}
if (knifeammo[id] == 0) {
client_print(id,print_center,"Больше нет Мечей",knifeammo[id])
ExecuteHamB(Ham_Item_Deploy, get_pdata_cbase(id, OFFSET_CURRENT_WEAPON))
}
new Float: fOriginStart[3], Float: fOriginEnd[3], Float: fAngles[3], Float: fVelocity[3], Float: fDist, Float: Aiming[3]
get_data_aim(id, fOriginStart, fOriginEnd, fAngles)
fDist = get_distance_f(fOriginStart, fOriginEnd)
if(fDist > THROW_MIN_DIST)
{
new iEnt = create_entity(DEFAULT_CLASSNAME)
entity_set_string(iEnt, EV_SZ_classname, "throwing_knife")
entity_set_edict(iEnt, EV_ENT_owner, id)
entity_set_vector(iEnt, EV_VEC_origin, fOriginStart)
fAngles[0] -= 90
entity_set_vector(iEnt, EV_VEC_angles, fAngles)
new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(iEnt, EV_VEC_mins, MinBox)
entity_set_vector(iEnt, EV_VEC_maxs, MaxBox)
entity_set_model(iEnt, KNIFE_MODEL)
entity_set_int(iEnt, EV_INT_movetype, 6)
entity_set_int(iEnt, EV_INT_solid, 1)
entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + KNIFE_TIME )
set_task(0.1, "knife_fire", iEnt + 984154)
for(new i; i < 3; i++)
fVelocity[i] = (fOriginEnd[i] - fOriginStart[i]) * THROW_MUL_VELOCITY / fDist
entity_set_vector(iEnt, EV_VEC_velocity, fVelocity)
Aiming[0] = random_float(-255.0, 255.0)
Aiming[1] = random_float(-255.0, 255.0)
Aiming[2] = random_float(-255.0, 255.0)
set_pev(iEnt, pev_avelocity, Aiming)
}
else
client_print(id, print_center, "Нет пространства для броска Меча")
return PLUGIN_HANDLED
}
__________________
• МультиМод CS • 83.222.97.124:27015
|
|