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] większy dmg z broni dla małych lvl (0-40lvl)

cod nowy

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

#1 tytusek

    Czempion

  • Power User

Reputacja: 229
Wszechwidzący

  • Postów:822
Offline

Napisano 13.07.2014 16:30

Witam w kiedyś na forum był taki temat tak jak w opisie

 

czy jest może jeszcze bo nie mogę znaleźć albo ktoś umiał by zrobić taki plugin czy modyfikacje do silnika

 

czyli od 1 do 40lvl każdy gracz ma większy o 20dmg z broni


  • +
  • -
  • 0

#2 HaDeS From HELL

    CoD MoD Fanatyk

  • Użytkownik

Reputacja: 163
Profesjonalista

  • Postów:453
  • Lokalizacja:Szczecin
Offline

Napisano 20.07.2014 06:51

Masz dodaną statystykę DMG do silnika cod'a ?


  • +
  • -
  • 0

#3 tytusek

    Czempion

  • Autor tematu
  • Power User

Reputacja: 229
Wszechwidzący

  • Postów:822
Offline

Napisano 20.07.2014 11:47

Masz dodaną statystykę DMG do silnika cod'a ?

Nie


  • +
  • -
  • 0

#4 HaDeS From HELL

    CoD MoD Fanatyk

  • Użytkownik

Reputacja: 163
Profesjonalista

  • Postów:453
  • Lokalizacja:Szczecin
Offline

Napisano 23.07.2014 14:53

do public Obrazenia(this, idinflictor, idattacker, Float:damage, damagebits) 

dodaj przed ,, return HAM_IGNORED; "

 to

if(poziom_gracza[id] <= 40)
damage+=20;

  • +
  • -
  • 1

#5 tytusek

    Czempion

  • Autor tematu
  • Power User

Reputacja: 229
Wszechwidzący

  • Postów:822
Offline

Napisano 23.07.2014 21:11

 

do public Obrazenia(this, idinflictor, idattacker, Float:damage, damagebits) 

dodaj przed ,, return HAM_IGNORED; "

 to

if(poziom_gracza[id] <= 40)
damage+=20;

wyskakuje błąd 

Spoiler
 
w kodzie sma wygląda to tak
 
public Obrazenia(this, idinflictor, idattacker, Float:damage, damagebits)
{
if(!is_user_alive(idattacker))
return HAM_IGNORED;
 
if(get_user_team(this) == get_user_team(idattacker))
return HAM_IGNORED;
 
if(get_user_health(this) <= 1)
return HAM_IGNORED;
 
if(PobierzWytrzymalosc(this, 1, 1, 1) <= 0)
return HAM_IGNORED;
 
SetHamParamFloat(4, damage*(1.0-redukcja_obrazen_gracza[this]));
 
if(poziom_gracza[id] <= 40)
    damage+=20;
 
return HAM_IGNORED;
}

 


Użytkownik tytusek edytował ten post 23.07.2014 21:13

  • +
  • -
  • 0

#6 GoldenKill

    Guru

  • Power User

Reputacja: 507
Wszechwiedzący

  • Postów:792
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Trzebnica
Offline

Napisano 24.07.2014 02:08

Zmień poziom_gracza[id] na poziom_gracza[this]


  • +
  • -
  • 1

#7 HaDeS From HELL

    CoD MoD Fanatyk

  • Użytkownik

Reputacja: 163
Profesjonalista

  • Postów:453
  • Lokalizacja:Szczecin
Offline

Napisano 24.07.2014 06:12

jak kolega napisał wyżej wystarczy zmienić id na this , pisałem to troche na szybko i nie zwróciłem uwagi :P


  • +
  • -
  • 0

#8 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 24.07.2014 06:41

To:

if(poziom_gracza[idattacker] <= 40)
    damage+=20;

daj przed tym:

SetHamParamFloat(4, damage*(1.0-redukcja_obrazen_gracza[this])); //odpowiada za zmiane dmg

Jeżeli byś zostawił tak jak było to:

  1. Obrażenia nie zostały by zmienione (dlaczego? Domyśl się)
  2. Nawet jakbyś poprawił to co w pierwszym pkt to też by nie działało. Dlaczego? Bo poziom_gracza[this]. this to index ofiary. Ten kod robi tak: Jeżeli lvl ofiary jest mniejszy od 41 to zadaj +20 dmg. Bez sensu. Dlatego powinno tam być idattacker.

 

Może walnąłem błąd. Dziękuję, dobranoc, koniec imprezy.


  • +
  • -
  • 1

#9 tytusek

    Czempion

  • Autor tematu
  • Power User

Reputacja: 229
Wszechwidzący

  • Postów:822
Offline

Napisano 24.07.2014 11:08

Zmień poziom_gracza[id] na poziom_gracza[this]

też nie działa 

ale dzięki za chęci

 

To:

if(poziom_gracza[idattacker] <= 40)
    damage+=20;

daj przed tym:

SetHamParamFloat(4, damage*(1.0-redukcja_obrazen_gracza[this])); //odpowiada za zmiane dmg

Jeżeli byś zostawił tak jak było to:

  1. Obrażenia nie zostały by zmienione (dlaczego? Domyśl się)
  2. Nawet jakbyś poprawił to co w pierwszym pkt to też by nie działało. Dlaczego? Bo poziom_gracza[this]. this to index ofiary. Ten kod robi tak: Jeżeli lvl ofiary jest mniejszy od 41 to zadaj +20 dmg. Bez sensu. Dlatego powinno tam być idattacker.

 

Może walnąłem błąd. Dziękuję, dobranoc, koniec imprezy.

tutaj też nie działa :/ 

inne pomysły ?


  • +
  • -
  • 0

#10 GoldenKill

    Guru

  • Power User

Reputacja: 507
Wszechwiedzący

  • Postów:792
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Trzebnica
Offline

Napisano 24.07.2014 11:12

RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
 
public TakeDamage(this, inflictor, attacker, Float:damage)
{
        if(is_user_alive(attacker))
        {
            if(poziom_gracza[attacker] != 40)
            {
                damage += 20 
                SetHamParamFloat(4, damage);
            }
        }
}

A spróbuj dodać tak do silnika 


  • +
  • -
  • 1

#11 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 24.07.2014 11:31

#include amxmodx
#include codmod
#include hamsandwich

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "sharkowy"

#pragma tabsize 0

#define DMG_BULLET (1<<1)

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
}

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_alive(this) || !is_user_connected(idattacker))
		return HAM_IGNORED;
	
	if(get_user_team(this) != get_user_team(idattacker) && cod_get_user_level(idattacker) <= 40 && damagebits & DMG_BULLET)
        {
		SetHamParamFloat(4, damage+20)
                return HAM_HANDLED
        }
		
	return HAM_IGNORED;
}

Wypadało by sprawdzić czy ofiara jest żywa. Ktoś kiedyś napisał że do zwiększania dmg należy używać SetHamParamFloat()

 

 

 

Ale musi się to dać zrobić w silinku.

 

//shark #1

Ale wtedy będzie dziwna ikonka w DeathMsg. http://amxx.pl/topic...-dodatkowe-dmg/

a zresztą...

 

//shark #2

Chodzi mi o takie cos. Ofiara ma 30 hp, gracz z 1 lvl zada jej 15 dmg i to dodatkowe 20dmg. CZyli najpierw walnie 15 a potem 20 i zabije ofiare. A w prawym górnym rogu pokaże się ikonka czaszki.

 

//shark #3

:)

 


sharkowy (24.07.2014 11:34):
A po co sprawdzać, czy ofiara jest żywa, skoro nic się nie stanie jeżeli atakujący nie żyje? xD to tak samo jakby jednocześnie sprawdzać, czy gracz żyje i jest połączony :P cod_inflict_damage można w cod modzie używać tak, jak SetHam
sharkowy (24.07.2014 11:55):
Przy takich prostych obrażeniach z broni nigdy nie miałem problemów z cod_inflict_damage :P więc dla autora tematu takie coś w zupełności wystarczy.
sharkowy (24.07.2014 12:07):
Jakoś nigdy mi się to nie zdarzyło, ale dobra niech Ci będzie.

  • +
  • -
  • 1

#12 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 24.07.2014 13:18

sharkowy funkcja cod_inflict_damage wcale nie działa jak SetHamParamFloat bo ona zadaje osobne dmg którego nie złapiesz za pomocą Ham_TakeDamage. Co do ikonki to zazwyczaj jest to kwestia damagebits lecz czasem i tak wyskoczy czacha tzn. podczas dmg które nie było jednoznaczne a pełno takich w cs'ie. Nie lubię się powtarzać haha.gif Masz linki w których to tłumaczę:
- http://amxx.pl/topic...-setparamfloat/ (post oznaczony jako naj)
- http://amxx.pl/topic...-dodatkowe-dmg/

TibacK nie tak:

SetHamParamFloat(4, damage+20)

Tylko jak już coś to tak:
SetHamParamFloat(4, damage+20.0)
Mam pytanie do autora w takim razie po co wbijać lvl'e? Jak na 41 lvl'u jestem słabszy niż na 40? Levele zostały stworzony by razem z ich zwrostem gracz też rósł na sile
  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#13 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 24.07.2014 13:34

TibacK nie tak:

SetHamParamFloat(4, damage+20)
Tylko jak już coś to tak:
SetHamParamFloat(4, damage+20.0)

Dlaczego tak? Nie wywala błędu kompilacji, a działa.
  • +
  • -
  • 1

#14 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 24.07.2014 13:38

Bo jeśli będziesz tak robił to ci wejdzie w nawyk dodawania int+float może nie zawsze walnie ci ostrzeżenie przy kompilacji tag mismatch czy jakoś tak ale przez taki nawyk bedziesz się dziwił dlaczego kod (przy dzieleniu) ci nie działa gdyż przy dzieleniu liczba tak przedstawiona będzie się zaokrąglała
  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#15 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 24.07.2014 13:43

To jest dodawanie. Spokojnie. Ja wiem co robie.

Jestem młody i szybko mi rzeczy wchodzą do głowy (wychodzą też szybko).

A co ze sprawdzaniem czy ofiara zyje? sharku napisal ze nie trza.
  • +
  • -
  • 2

#16 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 24.07.2014 13:51

A co ze sprawdzaniem czy ofiara zyje? sharku napisal ze nie trza

Można ale nie trzeba. Większej różnicy to nie robi. Poza tym pamiętajcie iż osoba która nie żyje także może otrzymać dmg (może nie w normalny sposób ale się da)
  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#17 tytusek

    Czempion

  • Autor tematu
  • Power User

Reputacja: 229
Wszechwidzący

  • Postów:822
Offline

Napisano 24.07.2014 16:55

 Mam pytanie do autora w takim razie po co wbijać lvl'e? Jak na 41 lvl'u jestem słabszy niż na 40? Levele zostały stworzony by razem z ich zwrostem gracz też rósł na sile 

 

większy dmg ma pomagać graczom co zaczynają grać na moim serwerze bo taki 1lvl nic nie zrobi 200lvl co ma hp 300 

więc im to bardzo pomoże w wbijaniu lvli dobiją ten 40lvl i będą już dawali rade mnie więcej :)

 

jeśli chodzi o plugin działa bardzo dobrze takiego efektu chciałem ale pytanie jeszcze można go do silnika wklepać ?

 

 


Użytkownik tytusek edytował ten post 24.07.2014 17:06

  • +
  • -
  • 0

#18 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 24.07.2014 17:43

Mozna. Podaj funkcje ObrazeniaPre (Ham_TakeDamage pre).

Chodziło mu o to że na 41 lvl jesteśmy gorsi niż na 40. Dlatego starałbym się tracić expa :)
  • +
  • -
  • 0

#19 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 24.07.2014 17:56

Tak można to do silnika dodać. Dopracował bym tą dodatkowa moc była np. do 50 lvl'a ale rozchodziła się stopniowo a nie nagle nam ją zabierają na 51 lvl'u. Dodatkowo dodawanie stale 20 dmg niezbyt dobrze wygląda bo w stope normalnie (przykładowo) walniesz 15+20(te otrzymane 20) = 35 a w banie 128+20(te otrzymane 20) = 148 przez co te 20 dmg niezbyt dobrze wygląda gdyż to stała wartość i nie bierze ona pod uwagę z jakiej broni bijemy, w jaką część ciała dlatego lepiej dmg mnożyć przez pewną wartość. Także bym wziął pod uwagę różnicę lvl'ową atakującego i atakowanego ale akurat to zostawiam tobie.

Twoja funkcja powinna tak wyglądać:
public Obrazenia(id, ent, attacker, Float:damage, damagebits)
{
	if(!is_user_connected(attacker) || get_user_team(id) == get_user_team(attacker))	return HAM_IGNORED


	if(PobierzWytrzymalosc(id, 1, 1, 1) > 0)	damage*=1.0-redukcja_obrazen_gracza[id]
	if(poziom_gracza[attacker] < 51) damage*=1.0+float(51-poziom_gracza[attacker])*0.005
 
	SetHamParamFloat(4, damage)
	return HAM_HANDLED
}
Napisałeś że chcesz mieć dmg zwiększone z:

z broni

Dlatego nie wnikam jak zadajesz dmg. Co właściwie zrobiłem? Zwiększyłem dmg gracza w zależności od jego lvl'a ale tylko do lvl'a 50.
Malutka regułka:
• 1 lvl +25% dmg
• 11 lvl +20% dmg
• 21 lvl +15% dmg
• 31 lvl +10% dmg
• 41 lvl +5% dmg
• 51 lvl +0% dmg

Oczywiście to dmg przechodzi stopniowo z lvl'a na lvl a nie co 10 lvl'i tylko nie chciało mi się robić większej tej regułki. X% wartość dodatkowego dmg na Y lvl'u można policzyć tak:
(51-LEVEL_GRACZA)*0.5 = X%
Taka zależność jest dużo bardziej przyjazna dla ludzi gdyż uwzględniam z jakiej broni gracz atakuje, w jaką część ciała oraz jaki ma lvl by % wartośc dodatkowego dmg nagle się nie urwała.
  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika





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