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

wieksze obrażenia z broni dla 1 gracza


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

#1 AmD

    aemde

  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 14.09.2010 21:32

Witam!

Chce zrobić funkcje która po wpisaniu komendy daje większe obrażenia z wszystkich broni (nie wiem czy da się jakoś to sensownie napisać bez "&&"), chwilowo zrobiłem tylko dla 3 broni dla testu ale nie działa
oto mój kod:


public ZadajDamage(id, victim, entity, Float:damage, damagebits)
{
if(is_user_connected(id) && is_user_connected(victim))
{
if(get_user_weapon(id) == CSW_AK47 && CSW_M4A1 && CSW_DEAGLE)
{
SetHamParamFloat(4, damage * 9.5);
}
return HAM_OVERRIDE;
}
return HAM_IGNORED;
}


co zrobiłem źle? i jak to poprawić? :D
  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 14.09.2010 21:40

public ZadajDamage(id, entity, victim, Float:damage, damagebits)
{
        if(is_user_connected(id) && is_user_connected(victim))
        {
                new asd = get_user_weapon(id)
                if(asd == CSW_AK47 || asd == CSW_M4A1 || asd ==CSW_DEAGLE)
                {
                        SetHamParamFloat(4, damage * 9.5);
                }
                return HAM_HANDLED;
        }
        return HAM_IGNORED;
}
pisane na forum

twój warunek było co prawda prawdziwy ale tylko dla ak47 jak by miałm4 to już nie
&& - i
|| - lub

OVERRIDE - zatrzymuje nadpisywanie
  • +
  • -
  • 1

#3 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 14.09.2010 22:09

dzięki ale nadal nie wiem czemu funkcja działa na każdym graczu a miała tylko na jednym (id=1)
  • +
  • -
  • 0

#4 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 14.09.2010 22:14

nie sprawdzasz id gracza sprawdzasz tylko czy atakujacy i ofiara sa na servie i to tyle musiałbyś dac if(idattacker == 1)
  • +
  • -
  • 1

#5 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 15.09.2010 00:38

public ZadajDamage(id, entity, victim, Float:damage, damagebits)
pisane na forum

twój warunek było co prawda prawdziwy ale tylko dla ak47 jak by miałm4 to już nie
&& - i
|| - lub

OVERRIDE - zatrzymuje nadpisywanie



powinno być:
(victim, idinflictor, idattacker, Float:damage, damagebits)

  • +
  • -
  • 1

#6 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 15.09.2010 14:47

grankee a co to ma dorzeczy ?
nazywać zmienne mogę jak chcę ;F
  • +
  • -
  • 1

#7 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 15.09.2010 22:12


public ZadajDamage(Victim, Useless, Attacker, Float:damage, damagebits)
{
if(is_user_connected(Attacker) && is_user_connected(Victim))
{
new asd = get_user_weapon(Attacker)
if(asd == CSW_AK47 || asd == CSW_M4A1 || asd ==CSW_DEAGLE)
{
SetHamParamFloat(4, damage * 9.5);
}
return HAM_HANDLED;
}
return HAM_IGNORED;
}
zrobiłem tak ale nie działa :/

Użytkownik AmD edytował ten post 15.09.2010 22:13

  • +
  • -
  • 0

#8 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 15.09.2010 22:18

logi ? caly kod :F ?
  • +
  • -
  • 1

#9 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 15.09.2010 22:36

Owszem nazwy nie mają znaczenia, jednak ma znaczenie ich kolejność.
Kolejna sprawa DarkGL nie wprowadzaj w błąd :P Dokładnie to powinien użyć HAM_OVERRIDE tak jak to zrobił.
public ZadajDamage(Victim, Useless, Attacker, Float:damage, damagebits)
{
if(is_user_connected(Attacker) && is_user_connected(Victim))
{
new asd = get_user_weapon(Attacker)
if(asd == CSW_AK47 || asd == CSW_M4A1 || asd ==CSW_DEAGLE)
{
SetHamParamFloat(4, damage * 9.5);
return HAM_OVERRIDE
}
}
return HAM_IGNORED;
}



rozumiem, że zarejestrowałeś Ham_TakeDamage?

Użytkownik grankee edytował ten post 15.09.2010 22:46

  • +
  • -
  • 1

#10 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 15.09.2010 22:39

nie rozumiem ? u mnie victim zasze będzie przechowywać id atakującego (gracza/bytu)
u ciebie to jest idattacker więc o co chodzi :D
  • +
  • -
  • 1

#11 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 15.09.2010 22:49

victim=ofiara a nie atakujący, błędnie nazywasz zmienne, wprowadzasz w błąd innego programiste, który to czyta.
  • +
  • -
  • 1

#12 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 15.09.2010 22:54

ooo lol no tak facepalm <_<
Możemy po prostu anulować obrażenia przez zwrócenie HAM_SUPERCEDE lub HAM_OVERRIDE - cytat z tutka reksia
Po operacjach zwracamy HAM_HANDLED, aby zatwierdzić zmiany. - kolejny
no i nie wiem w co wieżyć gdyby to nie działało R3X by tego nie dodał ale ham_const daje mi takie info
#define HAM_IGNORED		1	/**< Calls target function, returns normal value */
#define HAM_HANDLED		2	/**< Tells the module you did something, still calls target function and returns normal value */
#define HAM_OVERRIDE	3	/**< Still calls the target function, but returns whatever is set with SetHamReturn*() */
#define HAM_SUPERCEDE	4	/**< Block the target call, and use your return value (if applicable) (Set with SetHamReturn*()) */

  • +
  • -
  • 1

#13 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 15.09.2010 23:01

supercede co prawda nie zablokuje obrazen w sensie ich zaistnienia, ale prawdopodobnie zablokuje informacje w silniku gry co za tym idzie nie wykryje ich np. plugin bulletdamage, ani nawet zwykly od statystyk, po prostu nie zaistnieje dalsza informacja jakoby te obrazenia zostaly zadane, w przeciwienstwie do override, ktory tylko zmieni wartosc
  • +
  • -
  • 1

#14 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 16.09.2010 08:13

HAM_HANDLED jak uzywasz sethamparamfloat do dmg przynajmniej tak wnioskuje z tutka

@grankee nie wiem dokladnie jak bedzie bo nie sprawdzalem ale jesli bulletdmg bedzie wyzej w plugins.ini to mozliwe ze obrazenia zostana pokazane :D nie wiem jak to wyglada dla RegisterHam() czy tez RegisterHamB()
  • +
  • -
  • 1
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#15 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 16.09.2010 09:12

Nie ma znaczenia kolejnosc pluginów tylko kolejność zaistnienia zdarzeń. Najpierw jest Ham_TakeDamage, a później client_damage, wiadomo to po tym, ze w pierszym można zmienić wartości, a w drugim tylko je poznać. Coś na zasadzie register_message i register_event, event tylko poinformuje, message da możliwość zatrzymania i zgodnie z tym wywoła się najpierw.
  • +
  • -
  • 1

#16 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 16.09.2010 16:08

jak zarejestruje TakeDamage to wtedy wszyscy mają większe obrażenia a nie jedna osoba...
by było jasne tak to ma wyglądać?

RegisterHam(Ham_TakeDamage, "player", "ZadajDamage")


nie rozumiem po co cały kod skoro błąd tutaj tkwi...

funkcje wykorzystuje w menu (chwilowo jest zwykłym menu potem zrobię w formie)


ps. to powiedzcie mi w końcu który kod jest poprawny? :D


a... logi czyste :)

Użytkownik AmD edytował ten post 16.09.2010 16:21

  • +
  • -
  • 0

#17 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 16.09.2010 16:10

musisz dodać globala czy ma mieć zwiększone obrazenai czy nie
  • +
  • -
  • 1

#18 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 16.09.2010 16:13

Nie ma znaczenia kolejnosc pluginów tylko kolejność zaistnienia zdarzeń. Najpierw jest Ham_TakeDamage, a później client_damage, wiadomo to po tym, ze w pierszym można zmienić wartości, a w drugim tylko je poznać. Coś na zasadzie register_message i register_event, event tylko poinformuje, message da możliwość zatrzymania i zgodnie z tym wywoła się najpierw.



mozliwe aczkolwiek zalezy tez od tego czy sobie zarejestrujesz "event" jako pre czy post :D

jak zarejestruje TakeDamage to wtedy wszyscy mają większe obrażenia a nie jedna osoba...


nie bez zarejestrowania funkcja nie bedzie dzialac a w funkcji musisz juz sprawdzac czy aktualnie obrazenia zadaje dana osoba np przez pobranie nicku/sid'u/ip/flag/setinfo
  • +
  • -
  • 1
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#19 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 16.09.2010 16:27

hmm czyli w funkcji mam dodać coś typu:

new AmD[32]
get_user_authid(id,AmD,charsmax(AmD));
if(equal(AmD,"STEAM_0:MOJE:SID")) {
?


zrobiłem tak:


public ZadajDamage(id, Victim, Useless, Attacker, Float:damage, damagebits)
{
new AmD[32]
get_user_authid(id,AmD,charsmax(AmD));
if(equal(AmD,"STEAM_0:0:208******")) {

if(is_user_connected(Attacker) && is_user_connected(Victim))
{
new asd = get_user_weapon(Attacker)
if(asd == CSW_AK47 || asd == CSW_M4A1 || asd ==CSW_DEAGLE)
{
SetHamParamFloat(4, damage * 9.5);
return HAM_OVERRIDE
}
}
return HAM_IGNORED;
}
}

i kompilator wyrzuca log:
Warning: Function "ZadajDamage" should return a value on line 1473

Użytkownik AmD edytował ten post 16.09.2010 16:30

  • +
  • -
  • 0

#20 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 16.09.2010 16:36

wyrzuc sobie ostatniego returna za przed ostatnia klamre i bedzie git
  • +
  • -
  • 1
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D




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

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