←  Prośby o Klasę/Perk

AMXX.pl: Support AMX Mod X i SourceMod

»

Klasa
Proszę o klasę Polaris

  • +
  • -
1stADXionC's Photo 1stADXionC 26.12.2016

Nazwa: Polaris

Opis: Obrażenie lepsze o 15% ( z każdej broni )

Quote

  • +
  • -
NEQU#'s Photo NEQU# 26.12.2016

Sprawdź czy na pewno 15% więcej zadaje, słaby w tym jestem ^^

#include <amxmodx>
#include <codmod>
#include <hamsandwich>

new const nazwa[] = "Polaris";
new const opis[] = "15%% wieksze obrazenia z kazdej broni";
new const bronie = 1<<CSW_M3;
new const zdrowie = 0;
new const kondycja = 0;
new const inteligencja = 0;
new const wytrzymalosc = 0;

public plugin_init() {
	register_plugin(nazwa, "1.0", "QTM_Peyote");
	
	cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
	RegisterHam(Ham_TakeDamage, "player","fwTakeDamage",0);
}


public fwTakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
	if(damagebits & DMG_BULLET)

	damage*=0.15
	SetHamParamFloat(4,damage)

	return HAM_IGNORED;
}


edit.

Możesz też zamienić funkcje na

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;
		
		cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits);

	return HAM_IGNORED;
}

lub dla bezpieczeństwa dodać sprawdzanie czy ma klase

cod_class_enabled(id)

{

ma_klase[id] = true;

}

 

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;
		
	if(ma_klase[idattacker])
		cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits);

	return HAM_IGNORED;
}

Edited by NEQU#, 26.12.2016 23:53.
Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 27.12.2016

 

Sprawdź czy na pewno 15% więcej zadaje, słaby w tym jestem ^^

#include <amxmodx>
#include <codmod>
#include <hamsandwich>

new const nazwa[] = "Polaris";
new const opis[] = "15%% wieksze obrazenia z kazdej broni";
new const bronie = 1<<CSW_M3;
new const zdrowie = 0;
new const kondycja = 0;
new const inteligencja = 0;
new const wytrzymalosc = 0;

public plugin_init() {
	register_plugin(nazwa, "1.0", "QTM_Peyote");
	
	cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
	RegisterHam(Ham_TakeDamage, "player","fwTakeDamage",0);
}


public fwTakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
	if(damagebits & DMG_BULLET)

	damage*=0.15
	SetHamParamFloat(4,damage)

	return HAM_IGNORED;
}


edit.

Możesz też zamienić funkcje na

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;
		
		cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits);

	return HAM_IGNORED;
}

lub dla bezpieczeństwa dodać sprawdzanie czy ma klase

cod_class_enabled(id)

{

ma_klase[id] = true;

}

 

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;
		
	if(ma_klase[idattacker])
		cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits);

	return HAM_IGNORED;
}

 

A jak sprawdzić czy zadaje 15% wiecej :D ?

Quote

  • +
  • -
NEQU#'s Photo NEQU# 27.12.2016

No proste, standardowe dmg z broni np. ak + dolicz 15% tego, uderz kogos i się dowiesz. 

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;
		
	if(ma_klase[idattacker])
		cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits);
 
	return HAM_IGNORED;
}

to na 100% zadziała

Quote

  • +
  • -
_McHappy's Photo _McHappy 27.12.2016

damage*=0.15
SetHamParamFloat(4,damage)

 

Matematyka?

 

damage = 70.0

 

damage *= 0.15 --> damage = damage*0.15  --> damage = 70.0*0.15 --> damage = 10.5

SetHamParamFloat(4,damage) --> SetHamParamFloat(4,10.5)

 

Koniec końców redukujemy obrażenia do 15%, a nie je zwiększamy.

 

Więc należy to ująć tak:

public fwTakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
	if(is_user_connected(attacker) && ma_klase[attacker] && damagebits & DMG_BULLET)
	{
		damage*=1.15;
		SetHamParamFloat(4,damage);
	}
	
	return HAM_IGNORED;
}

Edited by _McHappy, 27.12.2016 13:28.
Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 27.12.2016

No proste, standardowe dmg z broni np. ak + dolicz 15% tego, uderz kogos i się dowiesz. 

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;
		
	if(ma_klase[idattacker])
		cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits);
 
	return HAM_IGNORED;
}

to na 100% zadziała

 

A taki kod będzie poprawny?

 

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_connected(idattacker))
return HAM_IGNORED;


if(!ma_klase[idattacker])
return HAM_IGNORED;


cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits); 


if(damagebits & DMG_BULLET)
{
new weapon = get_user_weapon(idattacker);
if(weapon == CSW_HEGRENADE)
cod_inflict_damage(idattacker, this, damage*2.0, 0.0, idinflictor, damagebits);     
}
return HAM_IGNORED;
}
Quote

  • +
  • -
_McHappy's Photo _McHappy 27.12.2016

if(damagebits & DMG_BULLET)
{
new weapon = get_user_weapon(idattacker);
if(weapon == CSW_HEGRENADE)
cod_inflict_damage(idattacker, this, damage*2.0, 0.0, idinflictor, damagebits);     
}

Tak, ale w nierealnych okolicznościach :)

Gracz strzela gracza i zanim pocisk dotrze do celu, zmienia broń na granat - tylko wtedy aktywują się podwojone obrażenia z granata ;)

 

Poza tym metoda ta nie podwaja, a potraja zadane obrażenia ("naturalne" obrażenia damage + "sztuczne" obrażenia wywołane funkcją Cod Mod'a.

 

Jeżeli chcesz zmodyfikować obrażenia z granata, polecam tę metodę:

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
    if(!is_user_connected(idattacker))
        return HAM_IGNORED;
    
    if(!ma_klase[idattacker])
        return HAM_IGNORED;

    cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits); 
        
    if(damagebits & DMG_HEGRENADE) SetHamParamFloat(4, 2*damage)

    return HAM_IGNORED;
}

+ poniżej sekcji <include> dodaj:

#define DMG_HEGRENADE (1<<24) 

Ale z opisu klasy nie wynika, że miałaby ona mieć dodatkowe obrażenia z granata :)

 


Edited by _McHappy, 27.12.2016 13:44.
Quote

  • +
  • -
1stADXionC's Photo 1stADXionC 27.12.2016

if(damagebits & DMG_BULLET)
{
new weapon = get_user_weapon(idattacker);
if(weapon == CSW_HEGRENADE)
cod_inflict_damage(idattacker, this, damage*2.0, 0.0, idinflictor, damagebits);     
}

Tak, ale w nierealnych okolicznościach :)

Gracz strzela gracza i zanim pocisk dotrze do celu, zmienia broń na granat - tylko wtedy aktywują się podwojone obrażenia z granata ;)

 

Poza tym metoda ta nie podwaja, a potraja zadane obrażenia ("naturalne" obrażenia damage + "sztuczne" obrażenia wywołane funkcją Cod Mod'a.

 

Jeżeli chcesz zmodyfikować obrażenia z granata, polecam tę metodę:

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
    if(!is_user_connected(idattacker))
        return HAM_IGNORED;
    
    if(!ma_klase[idattacker])
        return HAM_IGNORED;

    cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits); 
        
    if(damagebits & DMG_HEGRENADE) SetHamParamFloat(4, 2*damage)

    return HAM_IGNORED;
}

+ poniżej sekcji <include> dodaj:

#define DMG_HEGRENADE (1<<24) 

Ale z opisu klasy nie wynika, że miałaby ona mieć dodatkowe obrażenia z granata :)

 

 

Czyli ten kod będzie najlepszy: 

 

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
    if(!is_user_connected(idattacker))
        return HAM_IGNORED;
    
    if(!ma_klase[idattacker])
        return HAM_IGNORED;
        
    if(damagebits & DMG_HEGRENADE) SetHamParamFloat(4, 2*damage)
    
    cod_inflict_damage(idattacker, this, damage*0.15, 0.0, idinflictor, damagebits); 
}
Quote

  • +
  • -
_McHappy's Photo _McHappy 27.12.2016

Potestuj i zobaczymy, czy Ci pasuje :D

Quote