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

Jak pobrać id broni


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
29 odpowiedzi w tym temacie

#1 1stADXionC

    Wszechobecny

  • Użytkownik

Reputacja: 2
Nowy

  • Postów:443
  • Imię:Rafał
  • Lokalizacja:Wrocław
Offline

Napisano 13.08.2015 09:45

Witam.

Na serwerze posiadam plugin pod komendą "/me":

 

public cmdMe(id) 
{ 
     if(Damage[id]) 
     {
            ColorChat(0, GREEN, "*^x01 Zadales dotychczas^x03 %d^x01 obrazen.", Damage[id]);
     }
     else ColorChat(0, GREEN, "*^x01 Nie zadales obrazen przeciwnikowi.");


     return PLUGIN_HANDLED;
}

Jest możliwość zrobienia, gdy gracz zada dmg np z m4a1 oraz z deagla to wyświetli się tekst:

 

* (M4A1) Zadałeś dotychczas 70 obrazen.

* (Deagle) Zadałeś dotychczas 30 obrazen.

 

I tak z każdą bronią oraz granatami ;)

Jak zada tylko dmg z deagla to tekst:

 

* (Deagle) Zadałeś dotychczas 150 obrazen.


  • +
  • -
  • 0

DiabloMod - 10%

 

COD:MW3 - BETATESTY

 


#2 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 13.08.2015 11:16

Tworzymy tablicę która będzie odpowiadać za nazwy broni.

new const playerWeapon[][] = {
	"",
	"P228",
	"",
	"SCOUT",
	"HEGRENADE",
	"XM1014",
	"",
	"MAC10",
	"AUG",
	"",
	"ELITE",
	"FIVESEVEN",
	"UMP45",
	"SG550",
	"GALIL",
	"FAMAS",
	"USP",
	"GLOCK18",
	"AWP",
	"MP5",
	"M249",
	"M3",
	"M4A1",
	"TMP",
	"G3SG1",
	"",
	"DEAGLE",
	"SG552",
	"AK47",
	"KNIFE",
	"P90"
}

Teraz wystarczy odpowiednie ID które będzie równe naszej nazwie z tablicy. W prosty sposób ID pobieramy przez get_user_weapon.

A więc twoja funkcja cmdMe będzie wyglądać tak:

public cmdMe(id) 
{ 
	if(Damage[id]) 
	{
		ColorChat(id, RED, "^x04*^x03(%s)^x01 Zadales dotychczas^x04 %d^x01 obrazen.", playerWeapon[get_user_weapon(id)], Damage[id]);
	}
	else ColorChat(id, RED, "*^x01 Nie zadales obrazen przeciwnikowi.");
	
	
	return PLUGIN_HANDLED;
}

A i zmieniłem w ColorChat(0, [...]) na ColorChat(id, [...]) - chyba nie chcesz żeby każdy widział wiadomość ile gracz i jaką bronią zadał obrażenia :)

 

Po napisaniu wszystkiego dopiero się skapłem o co Ci chodzi dokładniej. Tylko powiedz mi jeszcze jedno. Chcesz by obrażenia był zaliczane osobno, więc muszą się zapisać do jakiejś zmiennej (z tym nie będzie problemu), jednak czy one mają być tylko na jedną rundę? Od nowej rundy się zerują mam nadzieję?


  • +
  • -
  • 1

#3 1stADXionC

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:443
  • Imię:Rafał
  • Lokalizacja:Wrocław
Offline

Napisano 13.08.2015 21:17

 

 



Po napisaniu wszystkiego dopiero się skapłem o co Ci chodzi dokładniej. Tylko powiedz mi jeszcze jedno. Chcesz by obrażenia był zaliczane osobno, więc muszą się zapisać do jakiejś zmiennej (z tym nie będzie problemu), jednak czy one mają być tylko na jedną rundę? Od nowej rundy się zerują mam nadzieję?

 

Tak mają być na jedną rundę.

A jak zrobić, gdy gracz zada dmg np z Ak i deagla to wyświetla sie tak:

 

* (AK47) Zadales dotychczas 50 obrazen.*

* (Deagle) Zadales dotychczas 30 obrazen.

 

public cmdMe(id) 
{ 
if(Damage[id]) 
{
if(xxx) 
{
ColorChat(id, RED, "^x04 *^x03 (%s)^x01 Zadales dotychczas^x03 %d^x01 obrazen.", playerWeapon[get_user_weapon(id)], Damage[id]);
}
else
{
ColorChat(id, RED, "^x04 *^x03 (%s)^x01 Zadales dotychczas^x03 %d^x01 obrazen.", playerWeapon[get_user_weapon(id)], Damage[id]);
ColorChat(id, RED, "^x04 *^x03 (%s)^x01 Zadales dotychczas^x03 %d^x01 obrazen.", playerWeapon[get_user_weapon(id)], Damage[id]);
}
}
else ColorChat(id, RED, "*^x01 Nie zadales obrazen przeciwnikowi.");




return PLUGIN_HANDLED;
}

Tylko co wpisać w miejsce XXX ? 

 


Użytkownik 1stADXionC edytował ten post 13.08.2015 21:45

  • +
  • -
  • 0

DiabloMod - 10%

 

COD:MW3 - BETATESTY

 


#4 NoLiFeR

    Wszechobecny

  • Użytkownik

Reputacja: 103
Zaawansowany

  • Postów:483
  • GG:
  • Imię:Adrian
  • Lokalizacja:Sosnowiec
Offline

Napisano 13.08.2015 23:18

musisz stworzyć tablice, która będzie miała ilość slotów taką jak weaponki od Oena, lecz będzie to tablica dodatkowo taka, do której będziemy mogli przypisać te dane graczowi.

 

new damages[33][31]

 

i sprawdzać, czy ilość slotów zawierających dla danego gracza wartości większe od 0 jest wieksza niż zero.

dam ci funkcyjke

bool:wiecejnizjeden(id)
{
    if(!is_user_connected(id))
        return false;

    new bool:temp = false;

    for(new i=0;i<31;i++){
        if(damages[id][i] > 0){
            if(!temp)
                temp = true;
            else
                return true;
        }
    }
    return false;
}

(Tak wiem, z flasha np nie zadam dmg ^^, ale zachowanie konpatybilności z get_user_weapon przyda Ci się przy pisaniu tych funkcji.)

 

 

Możesz również zastosować 100 razy wydajniejszą, pewniejszą pętle :)
Jeżeli gracz zadał z broni dmg, to napisz mu to :)


Użytkownik NoLiFeR edytował ten post 13.08.2015 23:28

  • +
  • -
  • 1

#5 1stADXionC

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:443
  • Imię:Rafał
  • Lokalizacja:Wrocław
Offline

Napisano 13.08.2015 23:43

public ForwardPlayerDmg(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits) 
{


Damage[iAttacker] += fDamage;
floatround(Damage[iAttacker], floatround_floor);
}


public cmdMe(id) 
{ 
if(Damage[id]) 
{
ColorChat(id, RED, "^x04 *^x03 (%s)^x01 Zadales dotychczas^x03 %d^x01 obrazen.", playerWeapon[get_user_weapon(id)], Damage[id]);
}
}
else ColorChat(id, RED, "*^x01 Nie zadales obrazen przeciwnikowi.");




return PLUGIN_HANDLED;
}


public NewRound() 
{
for(new id = 0; id<33; id++) 
{
Damage[id] = 0.0;
}


g_playersnum = get_playersnum();
}

Czyli jak ten kod powinien wyglądać? :)


  • +
  • -
  • 0

DiabloMod - 10%

 

COD:MW3 - BETATESTY

 


#6 Asiap

    Wszechpomocny

  • Girl

Reputacja: 171
Profesjonalista

  • Postów:323
  • Lokalizacja:Kętrzyn
Offline

Napisano 14.08.2015 00:56

public GetWeaponName(id, szReturn[], iLen)
{
	new szName[24];
	if(get_weaponname(get_user_weapon(id), szName, 23)) {
		replace(szName, 23, "weapon_", "");
		copy(szReturn, iLen, szName);
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

przyklad

new szWeapon[24];
GetWeaponName(id, szWeapon, 23);
ColorChat(id, RED, "^x04 *^x03 (%s)^x01 Zadales dotychczas^x03 %d^x01 obrazen.", szWeapon, Damage[id]);

Użytkownik Asiap edytował ten post 14.08.2015 00:57

  • +
  • -
  • 2

#7 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 14.08.2015 09:02

public GetWeaponName(id, szReturn[], iLen)
{
	new szName[24];
	if(get_weaponname(get_user_weapon(id), szName, 23)) {
		replace(szName, 23, "weapon_", "");
		copy(szReturn, iLen, szName);
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

przyklad

new szWeapon[24];
GetWeaponName(id, szWeapon, 23);
ColorChat(id, RED, "^x04 *^x03 (%s)^x01 Zadales dotychczas^x03 %d^x01 obrazen.", szWeapon, Damage[id]);

Fajna funkcja tylko że nazwa będzie z małych liter :X

 

Wyskrobałem co nieco :D

#include <amxmodx>
#include <colorchat>
#include <hamsandwich>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "oeN."

new pWeapon[33][31], Damage[33][31], bool:pDamage[33];

new const playerWeapon[][] = {
	"",
	"P228",
	"",
	"SCOUT",
	"HEGRENADE",
	"XM1014",
	"",
	"MAC10",
	"AUG",
	"",
	"ELITE",
	"FIVESEVEN",
	"UMP45",
	"SG550",
	"GALIL",
	"FAMAS",
	"USP",
	"GLOCK18",
	"AWP",
	"MP5",
	"M249",
	"M3",
	"M4A1",
	"TMP",
	"G3SG1",
	"",
	"DEAGLE",
	"SG552",
	"AK47",
	"KNIFE",
	"P90"
}

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_clcmd("say /me", "cmdMe");
	register_clcmd("say_team/me", "cmdMe");
	register_logevent("NewRound", 2, "1=Round_Start");
	RegisterHam(Ham_TakeDamage, "player", "ForwardPlayerDmg", 1);
}

public NewRound() {
	for(new id = 1; id<=32; id++){
		if(!is_user_connected(id)) continue;
		
		pDamage[id] = false;
		for(new i=1;i<=31;i++){
			Damage[id][i] = 0;
			pWeapon[id][i] = 0;
		}
	}
}

public ForwardPlayerDmg(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits) {
	pWeapon[iAttacker][get_user_weapon(iAttacker)] = get_user_weapon(iAttacker);
	Damage[iAttacker][get_user_weapon(iAttacker)] += floatround(fDamage);
	if(!pDamage[iAttacker]) pDamage[iAttacker] = true;
}

public cmdMe(id) 
{ 
	if(pDamage[id]){
		for(new i=1;i<=31;i++){
			if(pWeapon[id][i])
				ColorChat(id, RED, "^x04*^x03(%s)^x01 Zadales dotychczas^x04 %d^x01 obrazen.", playerWeapon[pWeapon[id][i]], Damage[id][pWeapon[id][i]]);
		}
	}
	else ColorChat(id, RED, "*^x01 Nie zadales obrazen przeciwnikowi.");
	
	return PLUGIN_HANDLED;
}

pWeapon - zapisuje id broni jakiej użył gracz podczas zadawania obrażeń

Damage - zapisuje obrażenia danej broni (id broni)

pDamage - sprawdza czy gracz zadał obrażenia

 

Dzięki pWeapon możemy wypisywać z tablicy nazwy broni oraz ile z tej broni zadano obrażeń. Wszystko resetuje się przy nowej rundzie.

 

Sprawdź :P


Użytkownik oeN. edytował ten post 14.08.2015 09:04

  • +
  • -
  • 1

#8 Asiap

    Wszechpomocny

  • Girl

Reputacja: 171
Profesjonalista

  • Postów:323
  • Lokalizacja:Kętrzyn
Offline

Napisano 14.08.2015 11:40

no to mozna zrobic aby pierwsza lutera byla duza lub wszystkie duze

public GetWeaponName(id, szReturn[], iLen)
{
	if(get_weaponname(get_user_weapon(id), szReturn, iLen)) {
		replace(szReturn, iLen, "weapon_", "");
		ucfirst(szReturn); // pierwsza litera z duzej np. knife -> Knife
		strtoupper(szReturn) // pelna nazwa broni z duzych liter np. knife -> KNIFE
		copy(szReturn, iLen, szReturn);
		return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}

Użytkownik Asiap edytował ten post 14.08.2015 11:42

  • +
  • -
  • 2

#9 1stADXionC

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:443
  • Imię:Rafał
  • Lokalizacja:Wrocław
Offline

Napisano 14.08.2015 12:23

Dzięki działa, leczy są takie logi:

 

L 08/14/2015 - 13:15:55: [AMXX] Displaying debug trace (plugin "ranga_dd2.amxx")
L 08/14/2015 - 13:15:55: [AMXX] Run time error 4: index out of bounds 
L 08/14/2015 - 13:15:55: [AMXX]    [0] ranga_dd2.sma::NewRound (line 183)

Nie będę pisał nowego tematu więc napisze tutaj.

Chcę zrobić jeszcze pod komendą "/hp" :

 

Zabity przez (nick gracza, ktory nas zabił) z (bron) 


  • +
  • -
  • 0

DiabloMod - 10%

 

COD:MW3 - BETATESTY

 


#10 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 14.08.2015 15:40

W cmdMe:

for(new i=1;i<=31;i++)

Na

for(new i=1;i<=30;i++)

  • +
  • -
  • 1

#11 1stADXionC

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:443
  • Imię:Rafał
  • Lokalizacja:Wrocław
Offline

Napisano 14.08.2015 20:26

Chcę zrobić jeszcze pod komendą "/hp" :

 

Zabity przez (nick gracza, ktory nas zabił) z (bron) 


  • +
  • -
  • 0

DiabloMod - 10%

 

COD:MW3 - BETATESTY

 


#12 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 14.08.2015 20:48

Proste.

#include <amxmodx>
#include <colorchat>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "oeN."

new killName[33][32], killWpn[33];

new const playerWeapon[][] = {
	"",
	"P228",
	"",
	"SCOUT",
	"HEGRENADE",
	"XM1014",
	"",
	"MAC10",
	"AUG",
	"",
	"ELITE",
	"FIVESEVEN",
	"UMP45",
	"SG550",
	"GALIL",
	"FAMAS",
	"USP",
	"GLOCK18",
	"AWP",
	"MP5",
	"M249",
	"M3",
	"M4A1",
	"TMP",
	"G3SG1",
	"",
	"DEAGLE",
	"SG552",
	"AK47",
	"KNIFE",
	"P90"
}

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_clcmd("say /hp", "cmdHp");
	register_clcmd("say_team /hp", "cmdHp");
}

public DeathMsg()
{
	new kid = read_data(1);
	new vid = read_data(2);
	
	get_user_name(kid, killName[vid], 31);
	killWpn[vid] = get_user_weapon(kid);
}

public cmdHp(id){
	if(!is_user_alive(id))
		ColorChat(id, RED, "^x01Zabity przez^x03 %s^x01 z^x03 %s", killName[id], playerWeapon[killWpn[id]]);
	else
		client_print(id, print_chat, "Jestes nadal zywy.");
}


Użytkownik oeN. edytował ten post 14.08.2015 20:54

  • +
  • -
  • 1

#13 1stADXionC

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:443
  • Imię:Rafał
  • Lokalizacja:Wrocław
Offline

Napisano 14.08.2015 21:43

tekst na say:

 

Zabity przez  z  

 

To oznacza, że nie pobiera id więc co jest zle?

public cmdHp(id)
{
if(!is_user_alive(id))
ColorChat(id, GREEN, "*^x01 Zabity przez^x03 %s^x01 z^x03 %s", killName[id], playerWeapon[killWpn[id]]);
else
ColorChat(id, GREEN, "*^x01 Jestes nadal zywy.");
}

 


Użytkownik 1stADXionC edytował ten post 14.08.2015 21:48

  • +
  • -
  • 0

DiabloMod - 10%

 

COD:MW3 - BETATESTY

 


#14 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 14.08.2015 22:00

:wstyd: :mur:

register_event("DeathMsg", "DeathMsg", "a")

Do plugin_init


  • +
  • -
  • 1

#15 1stADXionC

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:443
  • Imię:Rafał
  • Lokalizacja:Wrocław
Offline

Napisano 14.08.2015 22:08

Nadal nie działa ;/


  • +
  • -
  • 0

DiabloMod - 10%

 

COD:MW3 - BETATESTY

 


#16 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 14.08.2015 22:10

E no, nie możliwe.

 

Podaj cały kod.


  • +
  • -
  • 1

#17 1stADXionC

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:443
  • Imię:Rafał
  • Lokalizacja:Wrocław
Offline

Napisano 14.08.2015 22:22

O to wszystko co dodałem do mojego silnika.

register_event("DeathMsg", "DeathMsg", "a")

new killName[33][32], killWpn[33];

new const playerWeapon[][] = {
    "",
    "P228",
    "",
    "SCOUT",
    "HEGRENADE",
    "XM1014",
    "",
    "MAC10",
    "AUG",
    "",
    "ELITE",
    "FIVESEVEN",
    "UMP45",
    "SG550",
    "GALIL",
    "FAMAS",
    "USP",
    "GLOCK18",
    "AWP",
    "MP5",
    "M249",
    "M3",
    "M4A1",
    "TMP",
    "G3SG1",
    "",
    "DEAGLE",
    "SG552",
    "AK47",
    "KNIFE",
    "P90"
}

public DeathMsg()
{
new kid = read_data(1);
new vid = read_data(2);


get_user_name(kid, killName[vid], 31);
killWpn[vid] = get_user_weapon(kid);
}


public cmdHp(id)
{
if(!is_user_alive(id))
ColorChat(id, GREEN, "*^x01 Zostales zabity przez^x03 %s^x01 z^x03 %s", killName[id], playerWeapon[killWpn[id]]);
else
ColorChat(id, GREEN, "*^x01 Jestes nadal zywy.");
}

  • +
  • -
  • 0

DiabloMod - 10%

 

COD:MW3 - BETATESTY

 


#18 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 15.08.2015 08:25

Jeśli dobrze to wkleiłeś to musi działać, nie ma tutaj żadnego błędu.

Jeśli nie chcesz upubliczniać całego kodu, wyślij mi go na PW.


Użytkownik oeN. edytował ten post 15.08.2015 08:26

  • +
  • -
  • 1

#19 1stADXionC

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:443
  • Imię:Rafał
  • Lokalizacja:Wrocław
Offline

Napisano 16.08.2015 11:38

Dzięki działa :)

 

A mógłbyś mi jeszcze powiedzieć jak zrobić top15 aby wyświetlało się tak:

 

#     Nick                Ranga              Kill        Ded

1     1stADXionC     Wieśniak          15         20

2     1stADXionC     Wieśniak          15         20

3     1stADXionC     Wieśniak          15         20


Użytkownik 1stADXionC edytował ten post 16.08.2015 11:40

  • +
  • -
  • 0

DiabloMod - 10%

 

COD:MW3 - BETATESTY

 


#20 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 16.08.2015 16:11

Zmieniałeś coś w statsx pluginie? Jeśli tak to musisz go podesłać żeby go przerobić.


Użytkownik oeN. edytował ten post 16.08.2015 16:15

  • +
  • -
  • 1




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

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