Losowy DMG PB
szczypek1g
31.03.2024
Chciałbym się dowiedzieć, czy jest możliwość zrobienia na PB, tj. losowej szansy na dmg - jak może wiecie albo i nie, na PB przeważnie zabija się na 1 strzał, a jakby to urozmaicić i mamy np 50% szansy na to że zada 100 dmg albo zada mniej np. 95
Plugin ma cvar
cvar[DAMGE] = register_cvar("pbgun_damage", "100");
I tj. część odpowiadająca za "dotyk"
public fw_touch(bullet, ent) { new class[20]; pev(bullet, pev_classname, class, 19); if(!equali(class, "pbBullet")) return FMRES_IGNORED; new Float:origin[3], class2[20], owner = pev(bullet, pev_owner), is_ent_alive = is_user_alive(ent); pev(ent, pev_classname, class2, 19); pev(bullet, pev_origin, origin); if(is_ent_alive) { if(owner == ent || pev(ent, pev_takedamage) == DAMAGE_NO) return FMRES_IGNORED; if(get_user_team(owner) == get_user_team(ent)) if(!get_pcvar_num(cvar[FRIENDLYF])) return FMRES_IGNORED; ExecuteHam(Ham_TakeDamage, ent, owner, owner, float(get_pcvar_num(cvar[DAMGE])), 4098); } if(!equali(class, class2)) { set_pev(bullet, pev_velocity, Float:{0.0, 0.0, 0.0}); set_pev(bullet, pev_classname, "pbPaint"); set_pev(bullet, pev_solid, 0); set_pev(bullet, pev_movetype, 0); engfunc(EngFunc_SetModel, bullet, "sprites/paintball.spr"); new a, findpb = 0; while (a++ < g_pbcount && !findpb) if(g_paintballs[a] == bullet) findpb = g_pbstatus[a] = 2; remove_task(bullet); remove_task(bullet+TASK_PB_RESET); if(get_pcvar_num(cvar[SOUND])) { static wav[20]; formatex(wav, 20, is_ent_alive ? "player/pl_pain%d.wav" : "misc/pb%d.wav", is_ent_alive ? random_num(4,7) : random_num(1,4)); emit_sound(bullet, CHAN_AUTO, wav, 1.0, ATTN_NORM, 0, PITCH_NORM); } new bool:valid_surface = (is_ent_alive || containi(class2, "door") != -1) ? false : true; if(get_pcvar_num(cvar[BOMBS])) { if(pev(ent, pev_health) && !is_ent_alive) { ExecuteHam(Ham_TakeDamage, ent, owner, owner, float(pev(ent, pev_health)), 0); valid_surface = false; } } else { if(pev(ent, pev_health) && !is_ent_alive && pev(ent,pev_takedamage)) { ExecuteHam(Ham_TakeDamage, ent, owner, owner, float(pev(ent, pev_health)), 0); valid_surface = false; } } if(valid_surface) { paint_splat(bullet); set_task(float(get_pcvar_num(cvar[BLIFE])), "paint_reset", bullet+TASK_PB_RESET); } else paint_reset(bullet+TASK_PB_RESET); return FMRES_HANDLED; } return FMRES_IGNORED; } public paint_splat(ent) { new Float:origin[3], Float:norigin[3], Float:viewofs[3], Float:angles[3], Float:normal[3], Float:aiming[3]; pev(ent, pev_origin, origin); pev(ent, pev_view_ofs, viewofs); pev(ent, pev_v_angle, angles); norigin[0] = origin[0] + viewofs[0]; norigin[1] = origin[1] + viewofs[1]; norigin[2] = origin[2] + viewofs[2]; aiming[0] = norigin[0] + floatcos(angles[1], degrees) * 1000.0; aiming[1] = norigin[1] + floatsin(angles[1], degrees) * 1000.0; aiming[2] = norigin[2] + floatsin(-angles[0], degrees) * 1000.0; engfunc(EngFunc_TraceLine, norigin, aiming, 0, ent, 0); get_tr2(0, TR_vecPlaneNormal, normal); vector_to_angle(normal, angles); angles[1] += 180.0; if(angles[1] >= 360.0) angles[1] -= 360.0; set_pev(ent, pev_angles, angles); set_pev(ent, pev_v_angle, angles); origin[0] += (normal[0] * random_float(0.3, 2.7)); origin[1] += (normal[1] * random_float(0.3, 2.7)); origin[2] += (normal[2] * random_float(0.3, 2.7)); engfunc(EngFunc_SetOrigin, ent, origin); set_pev(ent, pev_frame, float(random_num( (pev(ent, pev_skin) * 18), (pev(ent, pev_skin) * 18) + 17 ) )); if(pev(ent, pev_renderfx) != kRenderFxNone) fm_set_rendering(ent); }
Boski Z Polski
31.03.2024
switch (random_num(0, 1)) { case 0: ExecuteHam(Ham_TakeDamage, ent, owner, owner, 100, 4098); // 100 obrażeń case 1: ExecuteHam(Ham_TakeDamage, ent, owner, owner, 95, 4098); // 95 obrażeń }
Użytkownik Boski Z Polski edytował ten post 31.03.2024 22:05
szczypek1g
31.03.2024
switch (random_num(0, 1)) { case 0: ExecuteHam(Ham_TakeDamage, ent, owner, owner, 100, 4098); // 100 obrażeń case 1: ExecuteHam(Ham_TakeDamage, ent, owner, owner, 95, 4098); // 95 obrażeń }
W jakimś konkretnym miejscu ?
Boski Z Polski
31.03.2024
if(is_ent_alive) { if(owner == ent || pev(ent, pev_takedamage) == DAMAGE_NO) return FMRES_IGNORED; if(get_user_team(owner) == get_user_team(ent)) if(!get_pcvar_num(cvar[FRIENDLYF])) return FMRES_IGNORED; ExecuteHam(Ham_TakeDamage, ent, owner, owner, float(get_pcvar_num(cvar[DAMGE])), 4098);
Za ostatnią linijkę
PANDA_2zl
31.03.2024
Można też tak
ExecuteHam(Ham_TakeDamage, ent, owner, owner, random_float(95.0, 100.0), 4098);
Hard D'RING
01.04.2024
Można też tak
ExecuteHam(Ham_TakeDamage, ent, owner, owner, random_float(95.0, 100.0), 4098);
twoj random bedzie losowal liczny takie jak 95, 96, 97, 98, 99, 100 czyli 1/6 szansy na zabicie a autor chcial 1/2 szansy, czyli jak już to:
ExecuteHam(Ham_TakeDamage, ent, owner, owner, random(1) ? 95.0 : 100.0, 4098);
PANDA_2zl
01.04.2024
Podał przykład, tak jak ja, nie widzę powodu do dyskusji z twojej strony