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
CoD Nowy

[ROZWIĄZANE] Nie działa natychmiastowe zabicie z HE

cod nowy

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


  • Zamknięty Temat jest zamknięty
11 odpowiedzi w tym temacie

#1 Hagis

    Początkujący

  • Użytkownik

Reputacja: -2
Nowy

  • Postów:13
  • Imię:Ryszard
  • Lokalizacja:Dom
Offline

Napisano 27.08.2013 22:43

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.

 


  • +
  • -
  • 0

#2 everston

    Banned

  • Zbanowany

Reputacja: -2
Nowy

  • Postów:32
  • Imię:paweł
  • Lokalizacja:polska
Offline

Napisano 27.08.2013 23:14

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


#3 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 27.08.2013 23:18

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ć


  • +
  • -
  • 0

#4 everston

    Banned

  • Zbanowany

Reputacja: -2
Nowy

  • Postów:32
  • Imię:paweł
  • Lokalizacja:polska
Offline

Napisano 27.08.2013 23:20

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


#5 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 27.08.2013 23:33

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


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

  • +
  • -
  • 0

#6 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 27.08.2013 23:39

I nie sprawdzasz, czy broń to HE :)


  • +
  • -
  • 0

#7 Hagis

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: -2
Nowy

  • Postów:13
  • Imię:Ryszard
  • Lokalizacja:Dom
Offline

Napisano 28.08.2013 05:33

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


  • +
  • -
  • 0

#8 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 28.08.2013 21:33

Jasne, ze nie dziala, bo nie sprawdzasz, czy bronia jest HE
  • +
  • -
  • 0

#9 d0naciak

    Godlike

  • Power User

Reputacja: 1 029
Hero

  • Postów:2 414
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 28.08.2013 21:54   Najlepsza odpowiedź

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.


  • +
  • -
  • 1

#10 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 28.08.2013 22:19


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


  • +
  • -
  • 0

#11 Hagis

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: -2
Nowy

  • Postów:13
  • Imię:Ryszard
  • Lokalizacja:Dom
Offline

Napisano 30.08.2013 01:56

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ć.


  • +
  • -
  • 0

#12 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 01.09.2013 00:04

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


  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: cod nowy

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

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