←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

dwa razy większe dmg z noża

  • +
  • -
Blondyna - zdjęcie Blondyna 07.01.2013

Cześć, robię klasę do cod mod nowy i mam problem :

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
        if(!is_user_connected(idattacker))
                return HAM_IGNORED;
        
        if(!ma_perk[idattacker])
                return HAM_IGNORED;
        
        if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_AK47 && damagebits & DMG_BULLET)
                cod_inflict_damage(idattacker, this, 5.0, 0.0, idinflictor, damagebits);
        
        return HAM_IGNORED;
}

Ten kod daje nam o ile chcemy większe dmg, pytanie jest taki:
Jak będzie wyglądał kod na 2x dmg z noża ;?
Odpowiedz

GT Team - zdjęcie GT Team 07.01.2013

Myślę że tak:


if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_KNIFE && damagebits & DMG_BULLET)
cod_inflict_damage(idattacker, this, (damage*2.0), 0.0, idinflictor, damagebits);
Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 07.01.2013

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)

{

				if(!is_user_connected(idattacker))

								return HAM_IGNORED;

				

				if(!ma_perk[idattacker])

								return HAM_IGNORED;

				

				if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_KNIFE && damagebits & DMG_BULLET)

								cod_inflict_damage(idattacker, this, damage, 0.0, idinflictor, damagebits); //po wywolaniu obrazen, jeszcze raz zadajesz obrazenia, czyli obrazenia podwoja sie

				

				return HAM_IGNORED;

}

Użytkownik d0n tHe Pr0oo edytował ten post 07.01.2013 19:37
Odpowiedz

GT Team - zdjęcie GT Team 07.01.2013


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

if(!ma_perk[idattacker])
return HAM_IGNORED;

if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_KNIFE)
damage *= 2

SetParamFloat(4, damage)
return HAM_IGNORED;
}


Tak też może być
Odpowiedz

  • +
  • -
Blondyna - zdjęcie Blondyna 07.01.2013

Dzięki ;)
Odpowiedz

GT Team - zdjęcie GT Team 07.01.2013

Tzn ze działa ?
Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 07.01.2013

a nie czasem tak ?
public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
                if(!is_user_connected(idattacker))
                                return HAM_IGNORED;
                
                if(!ma_perk[idattacker])
                                return HAM_IGNORED;
                
                if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_KNIFE)
                                SetHamParamFloat(4, damage*2)

                return HAM_IGNORED;
}

speedkill (07.01.2013 19:55):
A jaka będzie różnica między tym kodem co jest wyżej ?
Odpowiedz

GT Team - zdjęcie GT Team 07.01.2013

Własnie brat obok mi mówił, że tak było by lepiej, ale ja myślę, że Vesfper będzie chciał jeszcze dodać inne damage :P więc tak na przyszłość, ale oba roziązania były dobre :D
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 07.01.2013

Wszędzie tam gdzie jest sprawdzana broń tylko w taki sposób
get_user_weapon(idattacker) == CSW_KNIFE

jest źle, razem z
damagebits & DMG_BULLET

już jest lepiej choć najlepiej będzie tak, najpierw zapisujemy id broni do zmiennej, a potem dopiero dajemy warunki, z jakiej broni, itp.
new weapon;
if(idinflictor == idattacker) weapon = get_user_weapon(idattacker);
else if(damagebits & (1<<24) && is_valid_ent(idinflictor)) {
new szClass[32];
entity_get_string(idinflictor, EV_SZ_classname, szClass, 31);
if(equal(szClass, "grenade"))
weapon = CSW_HEGRENADE;
}
Odpowiedz

GT Team - zdjęcie GT Team 07.01.2013

Szczerze ? - Nie rozumiem :D Ale z tym damagebits to wiedzialem :D
Odpowiedz

Gość_21977_* 08.01.2013

Albo po prostu sprawdzić, czy damagebits zawiera DMG_SLASH, który domyślnie występuje jedynie przy obrażeniach z noża.
Odpowiedz