←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
[ROZWIĄZANE] Nie działa natychmiastowe zab...


Najlepsza odpowiedź d0naciak 28.08.2013 21:54

bo zamiast

  •         if(damagebits & DMG_HEGRENADE && get_user_team(this) != get_user_team(idattacker))
  •             cod_inflict_damage(idattacker, this, 801.0-damage, 1.0, idinflictor, damagebits);

 

powinno byc

if(damagebits & DMG_HEGRENADE && random_num(1, 1) == 1)       
                cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);

 

gdzie (1, 1) to 1/1 jak zmienisz (1, 2) to bedziesz mial 1/2 z he itp

 

i Łap tą klase z 1/2 szans z he
 

Jasne, ze nie dziala, bo nie sprawdzasz, czy bronia jest HE

Wszyscy znacie się na kodzie widzę jak (cytuję cheq): prosiak na gwiazdach -,-

 

Prawda jest taka, że przed sprawdzeniem czy obrażenia są z HE, ignorujesz resztę funkcji jeżeli obrażenia nie są obrażeniami od pocisku, a to wszystko przez ten kod

if(!(damagebits & DMG_BULLET))
   return HAM_IGNORED;

Wywal go.

Polecam też sprawdzić przed wywołaniem jakichkolwiek operacji w TakeDamage, od razu sprawdzać czy drużyna twoja a drużyna obrywającego nie jest tą samą drużyną.

 

P.S.

 

Twoja wersja sprawiłaby, że zabijałby też swoich ludzi z teamu przez usunięcie warunku sprawdzającego, czy atakujący jest w tej samej drużynie co ofiara -,-

To też musi zostać

 

 

hah tu sie mylisz ja wiem co ci podaje pozatym zabiłoby tylko wtedy jesli masz właczany ff na serwerze

 

 

To rzuć sobie HE przed nosem. Co się stanie??

W ostateczności, nie powinno zabrać obrażeń koledze z drużyny jeżeli FF jest wyłączony, bo wg. kodu dodawane są obrażenia do np. HE do każdego odebrania obrażeń za pomocą HE (wiem, masło maślane :F), czyli bez warunku będziesz mógł zabić tylko siebie i przeciwników natychmiastowo, chociaż nigdy nie testowałem, to tylko takie warte uwagi spostrzeżenie.

Przejdź do postu
Zablokowany

  • +
  • -
Hagis - zdjęcie Hagis 27.08.2013

Witam, stworzyłem klasę na CodMod. Klasa powinna mieć 1/2 szansy na natychmiastowe zabicie z granatu wybuchowego.

Jak w temacie ów natychmiastowe zabicie nie chce działać.

#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <cstrike>
#include <fakemeta>
#include <fun>

#define DMG_BULLET (1<<1)
#define DMG_HEGRENADE (1<<24)

new const nazwa[]   = "Piekielny [Unikalna]";
new const opis[]    = "Natychmiastowe zabicie ze scouta, 1/2 szansy na natychmiastowe zabicie z HE, +10dmg z Aug, dodatkowe 3 skoki";
new const bronie    = 1<<CSW_SCOUT | 1<<CSW_AUG | 1<<CSW_HEGRENADE;
new const zdrowie   = 85;
new const kondycja  = 100;
new const inteligencja = 30;
new const wytrzymalosc = 85;


new ma_klase[33];
new skoki[33];

public plugin_init()
{
	register_plugin(nazwa, "1.0", "Hagis");
	
	cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);   

	register_forward(FM_CmdStart, "fwCmdStart_MultiJump");

	RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
	
}

public cod_class_enabled(id)
{
	if(!(get_user_flags(id) & ADMIN_LEVEL_A))
	{
		client_print(id, print_chat, "[Piekielny] Nie masz uprawnien, aby uzywac tej klasy.")
		return COD_STOP;
	}

	give_item(id, "weapon_hegrenade");
	cs_set_user_defuse(id, 1);
	ma_klase[id] = true;

	return COD_CONTINUE;
}

public cod_class_disabled(id)
{
	ma_klase[id] = false;
}

public fwCmdStart_MultiJump(id, uc_handle)
{
	if(!is_user_alive(id) || !ma_klase[id])
		return FMRES_IGNORED;

	new flags = pev(id, pev_flags);

	if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && skoki[id])
	{
		skoki[id]--;
		new Float:velocity[3];
		pev(id, pev_velocity,velocity);
		velocity[2] = random_float(265.0,285.0);
		set_pev(id, pev_velocity,velocity);
	}
	else if(flags & FL_ONGROUND)
		skoki[id] = 3;

	return FMRES_IGNORED;
}


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_BULLET))
                return HAM_IGNORED;
        
        if(get_user_weapon(idattacker) == CSW_SCOUT)
                cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);
				
		if(get_user_weapon(idattacker) == CSW_AUG && damagebits & DMG_BULLET)
			cod_inflict_damage(idattacker, this, 10.0, 0.0, idinflictor, damagebits);
			
		if(damagebits & DMG_HEGRENADE && get_user_team(this) != get_user_team(idattacker))
			cod_inflict_damage(idattacker, this, 801.0-damage, 1.0, idinflictor, damagebits);
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
				
        return HAM_IGNORED;
}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/

 

 

Długo się z tym bawiłem, ostatecznie skopiowałem kod z perku, który daje 1/1 z HE. W perku działa - tu nie.

Próbowałem też tak:

if(get_user_weapon(idattacker) == CSW_HEGRENADE)
   cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);

I oczywiście też skucha.

Oraz próbowałem zamienić 

float(get_user_health(this))-damage+1.0

na 2000.0 i oczywiście też lipa.

 

Odpowiedz

everston - zdjęcie everston 27.08.2013

bo zamiast

  •         if(damagebits & DMG_HEGRENADE && get_user_team(this) != get_user_team(idattacker))
  •             cod_inflict_damage(idattacker, this, 801.0-damage, 1.0, idinflictor, damagebits);

 

powinno byc

if(damagebits & DMG_HEGRENADE && random_num(1, 1) == 1)       
                cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);

 

gdzie (1, 1) to 1/1 jak zmienisz (1, 2) to bedziesz mial 1/2 z he itp

 

i Łap tą klase z 1/2 szans z he

Załączone pliki


Użytkownik everston edytował ten post 27.08.2013 23:19
Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 27.08.2013

Twoja wersja sprawiłaby, że zabijałby też swoich ludzi z teamu przez usunięcie warunku sprawdzającego, czy atakujący jest w tej samej drużynie co ofiara -,-

To też musi zostać

Odpowiedz

everston - zdjęcie everston 27.08.2013

hah tu sie mylisz ja wiem co ci podaje pozatym zabiłoby tylko wtedy jesli masz właczany ff na serwerze


Użytkownik everston edytował ten post 27.08.2013 23:22
Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 27.08.2013

To rzuć sobie HE przed nosem. Co się stanie??


Użytkownik MAGNET edytował ten post 27.08.2013 23:37
Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 27.08.2013

I nie sprawdzasz, czy broń to HE :)

Odpowiedz

  • +
  • -
Hagis - zdjęcie Hagis 28.08.2013

Wrzuciłem skompilowany plik od Ciebie everston i nadal lipa.

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 28.08.2013

Jasne, ze nie dziala, bo nie sprawdzasz, czy bronia jest HE
Odpowiedz

  • +
  • -
Najlepsza odpowiedź d0naciak - zdjęcie d0naciak 28.08.2013

bo zamiast

  •         if(damagebits & DMG_HEGRENADE && get_user_team(this) != get_user_team(idattacker))
  •             cod_inflict_damage(idattacker, this, 801.0-damage, 1.0, idinflictor, damagebits);

 

powinno byc

if(damagebits & DMG_HEGRENADE && random_num(1, 1) == 1)       
                cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits);

 

gdzie (1, 1) to 1/1 jak zmienisz (1, 2) to bedziesz mial 1/2 z he itp

 

i Łap tą klase z 1/2 szans z he
 

Jasne, ze nie dziala, bo nie sprawdzasz, czy bronia jest HE

Wszyscy znacie się na kodzie widzę jak (cytuję cheq): prosiak na gwiazdach -,-

 

Prawda jest taka, że przed sprawdzeniem czy obrażenia są z HE, ignorujesz resztę funkcji jeżeli obrażenia nie są obrażeniami od pocisku, a to wszystko przez ten kod

if(!(damagebits & DMG_BULLET))
   return HAM_IGNORED;

Wywal go.

Polecam też sprawdzić przed wywołaniem jakichkolwiek operacji w TakeDamage, od razu sprawdzać czy drużyna twoja a drużyna obrywającego nie jest tą samą drużyną.

 

P.S.

 

Twoja wersja sprawiłaby, że zabijałby też swoich ludzi z teamu przez usunięcie warunku sprawdzającego, czy atakujący jest w tej samej drużynie co ofiara -,-

To też musi zostać

 

 

hah tu sie mylisz ja wiem co ci podaje pozatym zabiłoby tylko wtedy jesli masz właczany ff na serwerze

 

 

To rzuć sobie HE przed nosem. Co się stanie??

W ostateczności, nie powinno zabrać obrażeń koledze z drużyny jeżeli FF jest wyłączony, bo wg. kodu dodawane są obrażenia do np. HE do każdego odebrania obrażeń za pomocą HE (wiem, masło maślane :F), czyli bez warunku będziesz mógł zabić tylko siebie i przeciwników natychmiastowo, chociaż nigdy nie testowałem, to tylko takie warte uwagi spostrzeżenie.

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 28.08.2013


Wszyscy znacie się na kodzie widzę jak (cytuję cheq): prosiak na gwiazdach -,-

Cóż, tak to jest, jak się sprawdza kod na androidzie :)

 


W ostateczności, nie powinno zabrać obrażeń koledze z drużyny jeżeli FF jest wyłączony

Nie trzeba tutaj mówić o obrażeniach w samej funkcji. Pomimo wyłączonego ff HE ranią swoich z drużyny. Miałem kiedyś u siebie perk 1/1 z HE i jeśli byłem zbyt blisko - dead ;]  (ff off)

Szczerze powiedziawszy to strasznie namąciliście mi w głowie i już sam nie wiem, jaka forma jest poprawna :)

Odpowiedz

  • +
  • -
Hagis - zdjęcie Hagis 30.08.2013

1/1 z HE powinno zadawać obrażenia rzucającemu, tak jest na "moim" serwerze i tak powinno być. Nawet jak założysz serwer bez żadnych pluginów, z wyłączonym ff, to będziesz mógł popełnić samobójstwo granatem. Tak było, jest i ma być.

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 01.09.2013

I z tego właśnie powodu trzeba dodać warunek get_user_team

Odpowiedz
Zablokowany