Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Losowy DMG PB


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
6 odpowiedzi w tym temacie

#1 szczypek1g

    Pomocny

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:50
Offline

Napisano 31.03.2024 20:18

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);
}


  • +
  • -
  • 0

#2 Boski Z Polski

    Profesjonalista

  • Użytkownik

Reputacja: 61
Pomocny

  • Postów:183
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Offline

Napisano 31.03.2024 22:05

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

  • +
  • -
  • 0

#3 szczypek1g

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 1
Nowy

  • Postów:50
Offline

Napisano 31.03.2024 22:13

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 ?


  • +
  • -
  • 0

#4 Boski Z Polski

    Profesjonalista

  • Użytkownik

Reputacja: 61
Pomocny

  • Postów:183
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Offline

Napisano 31.03.2024 22:49

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ę 


  • +
  • -
  • 0

#5 PANDA_2zl

    Guru

  • Power User

Reputacja: 178
Profesjonalista

  • Postów:726
  • Imię:Michał
  • Lokalizacja:Kraków
Offline

Napisano 31.03.2024 23:11

Można też tak
ExecuteHam(Ham_TakeDamage, ent, owner, owner, random_float(95.0, 100.0), 4098);

  • +
  • -
  • 0

#6 Hard D'RING

    Początkujący

  • Użytkownik

Reputacja: 4
Nowy

  • Postów:15
Offline

Napisano 01.04.2024 00:23

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);

  • +
  • -
  • 1

#7 PANDA_2zl

    Guru

  • Power User

Reputacja: 178
Profesjonalista

  • Postów:726
  • Imię:Michał
  • Lokalizacja:Kraków
Offline

Napisano 01.04.2024 00:52

Podał przykład, tak jak ja, nie widzę powodu do dyskusji z twojej strony
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych