Моделлер
Участник
Пользователь
- Сообщения
- 1,544
- Реакции
- 1,545
- Помог
- 2 раз(а)
Решил и я создать такую тему - а что же делать то...да и не плодить по несколько тем - пускай всё в одной куче будет
Исключительно буду спрашивать и показывать уже попытки решения,а не просто так.
===========
Функция спавна ножей ( в начале раунда возвращает 3 ножа для броска,даже если в руках не было ножей.т.е. - пустые руки )
Функция подбора ножей с земли ( та ещё ФФункция ))
И нужно сделать так как для спавна...
Пример: если в руках ничего нет ( модель пустых рук ) - то вначале раунда функция вернет и ножи для броска и соответственно даст игроку в руки модель ножа
Вот подхожу я с пустыми руками к ножу он берёться - но нужно его давать в руки,а не прятать ...
Пробовал сделать вот так:
Это просто пихал в функцию подбора и ничего не выйшло - напротив теперь вообще ножи не подбираються
Далее функция полёта ножа заданная по расстоянию
Если расстояние для броска очень маленькое - по центру влупит принт о том,что так и есть
Но следовательно нож один пропадёт из арсенала
Вообще они запускаються по шкале Бара
Этот Бар нужно как-то остановить
Также пробовал его туда и вставить
И опять ничего...
Или нужно чёт здесь опредилить с
Исключительно буду спрашивать и показывать уже попытки решения,а не просто так.
===========
Функция спавна ножей ( в начале раунда возвращает 3 ножа для броска,даже если в руках не было ножей.т.е. - пустые руки )
Код:
public fwHam_SpawnPlayer_Post(id)
{
if(!is_user_connected(id))
return;
if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo")
if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo")
tossdelay[id] = 0.0
new iWeapon = get_pdata_cbase(id, OFFSET_CURRENT_WEAPON);
if(!is_valid_ent(iWeapon))
return;
ExecuteHamB(Ham_Item_Deploy, iWeapon);
}
Код:
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(pToucher, CHAN_ITEM, KNIFE_DEPLOY, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
else {
knifeammo[pTouched] += holdammo[owner]
emit_sound(pToucher, 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(pToucher, CHAN_ITEM, KNIFE_DEPLOY, 1.0, ATTN_NORM, 0, PITCH_NORM)
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)
emit_sound(pToucher, CHAN_ITEM, KNIFE_HITWALL, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
}
Пример: если в руках ничего нет ( модель пустых рук ) - то вначале раунда функция вернет и ножи для броска и соответственно даст игроку в руки модель ножа
Вот подхожу я с пустыми руками к ножу он берёться - но нужно его давать в руки,а не прятать ...
Пробовал сделать вот так:
Это просто пихал в функцию подбора и ничего не выйшло - напротив теперь вообще ножи не подбираються
Код:
new iWeapon = get_pdata_cbase(id, OFFSET_CURRENT_WEAPON);
ExecuteHamB(Ham_Item_Deploy, iWeapon);
Далее функция полёта ножа заданная по расстоянию
Код:
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
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] = {-15.0, -20.0, -1.0}
new Float:MaxBox[3] = {15.0, 20.0, 15.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 )
for(new i; i < 3; i++)
fVelocity[i] = (fOriginEnd[i] - fOriginStart[i]) * THROW_MUL_VELOCITY / fDist
entity_set_vector(iEnt, EV_VEC_velocity, fVelocity)
}
else
client_print(id, print_center, "Нет пространства для броска")
return PLUGIN_HANDLED
}
Но следовательно нож один пропадёт из арсенала
Вообще они запускаються по шкале Бара
Этот Бар нужно как-то остановить
Также пробовал его туда и вставить
И опять ничего...
Код:
message_begin(MSG_ONE, gMsgBarTime, _, id)
write_byte(0)
write_byte(0)
message_end()
return;
if(fDist > THROW_MIN_DIST)