←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Jak zrobić wyrzucanie broni przez set_task ?

  • +
  • -
aRrOw - zdjęcie aRrOw 24.07.2015

Witam.

 

Na codzie, mam problem z dawaniem podstawowych broni ( USP/GLOCK ) nawet gdy nie są one przypisane klasie. Wiem że jest poradnik jak usunąć te bronie. Ale ja nie chcę ich usuwać ze wszystkich klas tylko z tej jednej. I mam do was pytanie jak dodać to klasy. Żeby przez set_task sprawdzało czy gracz ma inne bronie niż P228, jeśli ma to poprostu je dropie mam zrobiony taki kod ale on nie działa:

public CurWeapon(id)

{

	    if(ma_klase[id] && read_data(2) != CSW_KNIFE)
	    if(ma_klase[id] && read_data(2) != CSW_P228)

	    {

					    set_task(0.1 ,"ma" ,id)

	    }

}

public ma(id)

{

	    strip_user_weapons(id);

	    give_item(id, "weapon_knife");
	    give_item(id, "weapon_P228");

}

Ale z tego co widze to i tak jak gracz będzie w TT to będzie mu dropało pake czy nie? Jak to zrobić w inny sposób?

 

 

 

 

 

Odpowiedz

  • +
  • -
Alelluja - zdjęcie Alelluja 24.07.2015

Tak o ?

 

public CurWeapon(id)
{
    
    if ((get_user_weapon(id) != CSW_C4) && get_user_weapon(id) != CSW_KNIFE && get_user_weapon(id) != CSW_P228)        
    {
        
        set_task(0.1 ,"ma" ,id)
        
    }
    
}

public ma(id)
{
    
    strip_user_weapons(id);
    
    give_item(id, "weapon_knife");
    give_item(id, "weapon_p228");
    
}

Odpowiedz

  • +
  • -
aRrOw - zdjęcie aRrOw 24.07.2015

Niestety nie wyrzuca broni

Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 27.07.2015

Niestety nie wyrzuca broni

 

Ma je koniecznie wyrzucac? Dziwne rozwiazanie ale coz. Sprawdz tak

public CurWeapon(id)
{

    if ((get_user_weapon(id) != CSW_C4) && get_user_weapon(id) != CSW_KNIFE && get_user_weapon(id) != CSW_P228)        
		set_task(0.1 ,"ma" ,id)
}
public ma(id)
{
	client_cmd(id, "drop");
}

Kompletnie bezsensowne jest uzywanie taska, poza tym lepiej blokowac np podnoszenie i dawanie niz wyrzucac co chwila.

Odpowiedz

  • +
  • -
aRrOw - zdjęcie aRrOw 27.07.2015

Kompletnie bezsensowne jest uzywanie taska, poza tym lepiej blokowac np podnoszenie i dawanie niz wyrzucac co chwila.


Zainteresowałeś mnie tą wypowiedzią. Wiesz może jak je zablokować inaczej? Oczywiście sprawdze też ten sposób.
Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 27.07.2015

Silnik raz raz to przerobie. Ustawiasz by nie dalo sie podnosic okreslonej broni jezeli gracz gra okreslona klasa. Tyle, a w funkcji perkow blokujesz dawanie broni/itemu dla tej samej klasy.

Odpowiedz

  • +
  • -
aRrOw - zdjęcie aRrOw 27.07.2015

A mógłbyś mi to po prostu pokazać na zwykłym codzie a ja bym to przerobił pod swój :) ??

Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 27.07.2015

CurWeapon zamien na

public CurWeapon(id)
{
	if(!is_user_connected(id))
		return;
		
	new team = get_user_team(id);
	
	if(team > 2)
		return;
		
	new bron = read_data(2);
	new bronie;
	if(PobierzKlase(id) == PobierzNazweKlasy(PobierzKlase, "nazwaklasy"))
		bronie = (bronie_klasy[klasa_gracza[id]] | bonusowe_bronie_gracza[id] | bronie_dozwolone);
	else
		bronie =  (bronie_klasy[klasa_gracza[id]] | bonusowe_bronie_gracza[id] | bronie_druzyny[team] | bronie_dozwolone);

	if(!(1<<bron & bronie))
	{
		new weaponname[22];
		
		get_weaponname(bron, weaponname, 21);
		ham_strip_weapon(id, weaponname);
	}
	
	if(cs_get_user_shield(id) && !gracz_ma_tarcze[id])
		engclient_cmd(id, "drop", "weapon_shield");	
		
	UstawSzybkosc(id);
}

Tylko nie jestem pewien, czy nazwy natywow sa okej. A do usuwania broni w codzie uzywaj lepiej codtakeweapon

Odpowiedz

  • +
  • -
aRrOw - zdjęcie aRrOw 27.07.2015

Dzięki :)
Odpowiedz

  • +
  • -
aRrOw - zdjęcie aRrOw 27.07.2015

Niestety nie działa. Przy kompilacji wyskakuje:

Error: Syntax error in the expression, or invalid function call on line 1245

jest to ta linijka"

if(PobierzKlase(id) == PobierzNazweKlasy(PobierzKlase, "nazwaklasy"))
Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 28.07.2015

 

Niestety nie działa. Przy kompilacji wyskakuje:

Error: Syntax error in the expression, or invalid function call on line 1245

jest to ta linijka"

if(PobierzKlase(id) == PobierzNazweKlasy(PobierzKlase, "nazwaklasy"))

 

Tak jak mowilem, od dawna nie zajmuje sie nowym codem wiec zapomnialem tych wszystkich natywow itp itd :). Zamien to na

if(klasa_gracza[id] == PobierzKlasePrzezNazwe("NazwaKlasy"))

 

Odpowiedz

  • +
  • -
aRrOw - zdjęcie aRrOw 28.07.2015

Niestety nie działa. Przy kompilacji wyskakuje:

Error: Syntax error in the expression, or invalid function call on line 1245
jest to ta linijka"
if(PobierzKlase(id) == PobierzNazweKlasy(PobierzKlase, "nazwaklasy"))
 
Tak jak mowilem, od dawna nie zajmuje sie nowym codem wiec zapomnialem tych wszystkich natywow itp itd :). Zamien to na
if(klasa_gracza[id] == PobierzKlasePrzezNazwe("NazwaKlasy"))
Dzięki.
Odpowiedz

  • +
  • -
aRrOw - zdjęcie aRrOw 29.07.2015

Tak jak mowilem, od dawna nie zajmuje sie nowym codem wiec zapomnialem tych wszystkich natywow itp itd . Zamien to na
if(klasa_gracza[id] == PobierzKlasePrzezNazwe("NazwaKlasy"))

Wczoraj skompilowałem i wrzuciłem na serwer, ale nie testowałem bo poprostu myślałem że będzie działać. Dzisiaj wchodzę na serwer i zamiast mi odbierać usp/glocka to mi je daje dwie naraz. Do klasy nie mam ich przypisanych. Co może być źle?
Użytkownik aRrOw edytował ten post 29.07.2015 09:59
Odpowiedz

  • +
  • -
aRrOw - zdjęcie aRrOw 29.07.2015

Linux, zauważyłem że twój kod ma dodatkowo poważny błąd który crashuje serwer podczas zmiany mapy. Więc nawet mapy nie można zmienić bo od razu jest crash i serwer pada. Nie wiem dokładnie jaki to błą już nie pamiętam bo rano o zauważyłem. W logach było coś o jakimś natywie ale dokładnie nwm. Jak już ma być tyle problemów z tym to ja jednak chyba to usune i dam sobie spokój. Można close.
Odpowiedz