Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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
Modyfikacja

[AMXX 1.8.1] Zmiana ilości Amunicji dla danej broni

Modyfikacja

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

#1 Daku

    Zaawansowany

  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 12.11.2009 20:09

Witam

Chodzi mi o plugin do AMXX'a który zmieniał by ilość amunicji dla danej broni np

z wcześniejszych tematów znalazłem plugin z DUAL MP5 i chciałbym żeby jeszcze Mp5 miało 2x więcej ammo czyli 60/magazynek i 240 w zapasie

czy to jest możliwe wiem ze gdzieś to widziałem

może będzie coś takiego

new weapon = get_user_weapon(id, wclip, wammo); 

if(weapon == CSW_MP5NAVY) 
{ 
Nie wiem co tu wpisać  
}

  • +
  • -
  • 0

#2 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 12.11.2009 20:22

Daku, jesli wiesz gdzie to widziales to by bylo pomocne jakbys podal gdzie...

cs_set_weapon_ammo ( index, newammo )

index, to id obiektu broni (nie numer broni, 2 rozne AK maja 2 rozne indexy). Trzeba przechwycic kupowanie, tworzenie broni i w tym momencie zmienic ich maxymalne ammo.
  • +
  • -
  • 0

#3 Daku

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 12.11.2009 20:25

na serwerze ZOMBIE ale zagraniczny mam swój i chciałbym go Bardzo rozbudować

tu mam coś o broniach

http://wiki.alliedmo...ons_Information

ale dalej nie wiem jak to zastosować, jak by się dało połączyć plugin który chcę zrobic z zamianą modelu
  • +
  • -
  • 0

#4 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 12.11.2009 21:07

http://amxx.pl/topic...tingu-vt539.htm

Tez mam link do tematu co ma link ten co podales ^^ ale i tak tam nie ma pomocy co do zmiany danych broni.

Mechanika gry wymaga stworzenia obiektu broni a nastepnie wymusic "dotkniecie" i w ten sposob dac graczowi bron.
pfn_touch ( ptr, ptd )
Wykrywa dotkniecie (engine)

Mozna użyć gotowych tablic do sprawdzania czy obiekt to bron i jaka bron:
http://amxx.pl/topic...19135.htm#96437

ptr i ptd to id obiektow, wiec jak bedziemy wiedziec, ze to ta bron, to mozemy zmienic ilosc ammo.
  • +
  • -
  • 0

#5 Daku

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 12.11.2009 21:43

czyli dla Mp5 id to 19
ID__NAME_______________SPEED__CLIP___AMMO__AID__ANAME
19__weapon_mp5navy_____250____30_____120____10___ammo_9mm


czyli na polski id broni Mp5 to 19
szybkostrzelność to 250 MS czyli 1/4 sekundy na 1 strzał
amunicja na magazynek to 30 amunicja zapas MAX to 120
ID amunicji to 10 nazwa ammo_9mm

to jak to powinno wyglądać ??

pfn_touch (Id Broni, Id ammo ) ??

nie wiem czy to coś da ale jest plugin na zmianę ilości granatów np He 5 FB 5 sg 20

#include <amxmodx>
#include <cstrike>
#include <engine>

#define PLUGIN	"Grenade Sack"
#define VERSION	"0.4.1"
#define AUTHOR	"v3x"

#define CSTRIKE_DEFAULT_FB_COST 200
#define CSTRIKE_DEFAULT_HE_COST 300
#define CSTRIKE_DEFAULT_SG_COST 300

new MSG_NO_FUNDS[] = "You have insufficient funds!";
new MSG_CANT_CARRY[] = "You cannot carry anymore!";

new CVAR_STR_FB[] = "mp_max_fb";
new CVAR_STR_HE[] = "mp_max_he";
new CVAR_STR_SG[] = "mp_max_sg";

new VAL_DEF_FB[] = "3";
new VAL_DEF_HE[] = "2";
new VAL_DEF_SG[] = "2";

new NADE_PICKUP_SOUND[] = "items/9mmclip1.wav";

// The following block of code was VEN's idea
// --->
// initial AMXX version number supported CVAR pointers in get/set_pcvar_* natives
#define CVAR_POINTERS_AMXX_INIT_VER_NUM 170

// determine if get/set_pcvar_* natives can be used
#if defined AMXX_VERSION_NUM && AMXX_VERSION_NUM >= CVAR_POINTERS_AMXX_INIT_VER_NUM
	#define CVAR_POINTERS
	new g_PCVAR_FB;
	new g_PCVAR_HE;
	new g_PCVAR_SG;

	#define CVAR_FB get_pcvar_num(g_PCVAR_FB)
	#define CVAR_HE get_pcvar_num(g_PCVAR_HE)
	#define CVAR_SG get_pcvar_num(g_PCVAR_SG)
#else
	#define CVAR_FB get_cvar_num(CVAR_STR_FB)
	#define CVAR_HE get_cvar_num(CVAR_STR_HE)
	#define CVAR_SG get_cvar_num(CVAR_STR_SG)
#endif
// <---

public plugin_init() 
{
	register_plugin(PLUGIN , VERSION , AUTHOR);

	register_menucmd(register_menuid("BuyItem") , (1<<2) , "fb_buy");	// Buy FB (old style)
	register_menucmd(register_menuid("BuyItem") , (1<<3) , "he_buy");	// Buy HE (old style)
	register_menucmd(register_menuid("BuyItem") , (1<<4) , "sg_buy");	// Buy SG (old style)

	register_menucmd(-34 , (1<<2) , "fb_buy");	// Buy FB (VGUI)
	register_menucmd(-34 , (1<<3) , "he_buy");	// Buy HE (VGUI)
	register_menucmd(-34 , (1<<4) , "sg_buy");	// Buy SG (VGUI)

	register_clcmd("flash"  , "fb_buy");		// Buy FB (Steam)
	register_clcmd("hegren" , "he_buy");		// Buy HE (Steam)
	register_clcmd("sgren"  , "sg_buy");		// Buy SG (Steam)

#if defined CVAR_POINTERS
	g_PCVAR_FB = register_cvar(CVAR_STR_FB , VAL_DEF_FB);
	g_PCVAR_HE = register_cvar(CVAR_STR_HE , VAL_DEF_HE);
	g_PCVAR_SG = register_cvar(CVAR_STR_SG , VAL_DEF_SG);
#else
	register_cvar(CVAR_STR_FB , VAL_DEF_FB);
	register_cvar(CVAR_STR_HE , VAL_DEF_HE);
	register_cvar(CVAR_STR_SG , VAL_DEF_SG);
#endif

	register_message(get_user_msgid("TextMsg") , "block_message");

	register_event("HLTV" , "new_round" , "a" , "1=0" , "2=0");

	register_touch("armoury_entity" , "player" , "touch_player");

	check_mod();
}

new Float:g_GameTime;

public plugin_precache()
	precache_sound(NADE_PICKUP_SOUND);

public fb_buy(id) 
	if(get_nade_num(CSW_FLASHBANG) > 2) 
		handle_buy(id , CSW_FLASHBANG);

public he_buy(id) 
	if(get_nade_num(CSW_HEGRENADE) > 1) 
		handle_buy(id , CSW_HEGRENADE);

public sg_buy(id) 
	if(get_nade_num(CSW_SMOKEGRENADE) > 1) 
		handle_buy(id , CSW_SMOKEGRENADE);

public handle_buy(id , nade) 
{
	if(!is_user_alive(id) || get_user_team(id) > 2)
		return PLUGIN_CONTINUE;

	new ammo = cs_get_user_bpammo(id , nade);

	if(!ammo) /* If the player doesn't have a nade yet, let CS handle it */
		return PLUGIN_CONTINUE;

	if(!cs_get_user_buyzone(id)) /* Check if the player is in the buyzone */
		return PLUGIN_CONTINUE;

	new max_ammo , cost;

	switch(nade) 
	{
		case CSW_FLASHBANG:	max_ammo = get_nade_num(CSW_FLASHBANG)	  , cost = CSTRIKE_DEFAULT_FB_COST;
		case CSW_HEGRENADE:	max_ammo = get_nade_num(CSW_HEGRENADE)	  , cost = CSTRIKE_DEFAULT_HE_COST;
		case CSW_SMOKEGRENADE:	max_ammo = get_nade_num(CSW_SMOKEGRENADE) , cost = CSTRIKE_DEFAULT_SG_COST;
	}

	new Float:buytime = get_cvar_float("mp_buytime") * 60.0;
	new Float:timepassed = get_gametime() - g_GameTime;

	if(floatcmp(timepassed , buytime) == 1)
		return PLUGIN_HANDLED;

	if(cs_get_user_money(id) - cost <= 0) 
	{
		client_print(id , print_center , MSG_NO_FUNDS);
		return PLUGIN_HANDLED;
	}

	if(ammo == max_ammo) 
	{
		client_print(id , print_center , MSG_CANT_CARRY);
		return PLUGIN_HANDLED;
	}

	give_nade(id , nade);

	cs_set_user_money(id , cs_get_user_money(id) - cost , 1);

	return PLUGIN_CONTINUE;
}

public touch_player(pToucher , pTouched) 
{
	if(!is_valid_ent(pToucher) || !is_user_alive(pTouched))
		return PLUGIN_CONTINUE;

	if(entity_get_int(pToucher , EV_INT_iuser1))
		return PLUGIN_HANDLED;

	new pToucherMdl[64];
	entity_get_string(pToucher , EV_SZ_model , pToucherMdl , 63);

	new model = check_nade_model(pToucherMdl); /* Check if the model is a grenade's */

	if(model != -1) /* If it's a grenade it'll return a value > -1 */
	{
		new ammo = cs_get_user_bpammo(pTouched , model) , max_ammo;

		switch(model) /* Get the max values for grenade ammo types */
		{
			case CSW_FLASHBANG:	max_ammo = get_nade_num(CSW_FLASHBANG);
			case CSW_HEGRENADE:	max_ammo = get_nade_num(CSW_HEGRENADE);
			case CSW_SMOKEGRENADE:	max_ammo = get_nade_num(CSW_SMOKEGRENADE);
		}

		if(max_ammo <= 0) /* If the max ammo cvar doesn't have a value > 0 then hault the code */
			return PLUGIN_CONTINUE;

		if(ammo <= 0) /* Let CS handle the first grenade */
		{ 
			set_entity_visibility(pToucher , 0);
			entity_set_int(pToucher , EV_INT_iuser1 , 1);

			return PLUGIN_CONTINUE;
		}

		if(ammo > 0 && ammo < max_ammo) /* Everything is OK so give the grenade! */
		{
			set_entity_visibility(pToucher , 0);
			entity_set_int(pToucher , EV_INT_iuser1 , 1);
			give_nade(pTouched , model);

			return PLUGIN_HANDLED;
		}
	}

	return PLUGIN_CONTINUE;
}

public give_nade(id , grenade) 
{
	new ammo = cs_get_user_bpammo(id , grenade);
	cs_set_user_bpammo(id , grenade , ammo + 1);

	emit_sound(id, CHAN_WEAPON , NADE_PICKUP_SOUND , 1.0 , ATTN_NORM , 0 , PITCH_NORM);
}

public check_nade_model(model[]) 
{
	if(equal(model, "models/w_flashbang.mdl" )) 
		return CSW_FLASHBANG;
	if(equal(model, "models/w_hegrenade.mdl")) 
		return CSW_HEGRENADE;
	if(equal(model, "models/w_smokegrenade.mdl")) 
		return CSW_SMOKEGRENADE;

	return -1;
}

public get_nade_num(grenade) 
{
	switch(grenade) 
	{
		case CSW_FLASHBANG:	return CVAR_FB;
		case CSW_HEGRENADE:	return CVAR_HE;
		case CSW_SMOKEGRENADE:	return CVAR_SG;
	}

	return -1;
}

public new_round() 
{
	g_GameTime = get_gametime();

	new ent = -1;

	while((ent = find_ent_by_class(ent , "armoury_entity")) != 0) 
	{
		set_entity_visibility(ent , 1);
		entity_set_int(ent , EV_INT_iuser1 , 0);
	}
}

public block_message() /* Blocks the "You cannot carry anymore" message" */
{
	if(get_msg_argtype(2) == ARG_STRING) 
	{
		new value[64];
		get_msg_arg_string(2 , value , 63);

		if(equali(value , "#Cannot_Carry_Anymore"))
			return PLUGIN_HANDLED;
	}

	return PLUGIN_CONTINUE;
}

public check_mod() /* Check if the mod is CS, if not, pause the entire plugin */
{
	new modname[21];
	get_modname(modname , 20);

	if(!equal(modname , "cstrike"))
		pause("ad");
}

może by jakoś go przerobić ??
  • +
  • -
  • 0

#6 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 12.11.2009 23:02

index, to id obiektu broni (nie numer broni, 2 rozne AK maja 2 rozne indexy)


Przestrzen gry jest w duzej mierze zrobiona z obiektow (entity). Obietami sa gracze, skrzynie, bronie, nawet rzeczy nie widzialne - trigery na de_aztec wywolujacy blyskawice, nawet zrodlo dzwieku na mapach jest obiektem.

Obiekty graczy sa z gory zarezerwowane i maja indexy od 1 do 32. Pozostale obiekty nie maja ustalonej kolejnosci (choc najczesciej spawnpointy chyba sa zaraz po graczach ale to nie istotne)... W cs'ie mamy moze lekko ponad 30 broni? Wiec jakbys bral id broni (nie obiektu broni) to by na pewno sie mieszalo z graczami - takie podejscie jest bledne.

pfn_touch ( ptr, ptd )
Dotkniecia wystepuja miedzy 2 obiektami. Jeden obiekt to moze byc gracz, a drugi moze byc np. bron. Kombinacja moze byc tak naprawdę dowolna, wiec nie licz, ze przy kazdym evencie bedzie w ktoryms z tych parametrow bron. Nawet kolejnosc nie jest zawsze ustalona, raz ten sam obiekt moze byc pierwszym, jak i drugim parametrem.

Jesli chcesz sie wyspecjalizowac w konkretnych obiektach, mozna zdefiniowac event jak:
register_touch("throwing_knife", "player", "touchKnife")
Jak obiekt o nazwie "throwing_knife" dotknie "player" - oficjalna nazwa gracza - to zostanie wywolana funkcja "touchKnife"
public touchKnife(knife, id)
Kolejnosc taka jak w evencie, po lewej noz a po prawej gracz. Oba parametry to id obiektu.

Nie jestem pewny czy obiekty broni, to sa te z weapon_* wiec na dzien dzisiejszy nie będę nic dalej z tym robic... A metoda z tego pluga pozwala tylko na wymuszanie obecnej liczby ammo w zapasie (granaty nie maja magazynka :F).
  • +
  • -
  • 0

#7 Daku

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 13.11.2009 15:19

a może z cstrike.inc skożystać ??

native cs_set_weapon_ammo(index, newammo);

znalazłem takie coś ale nie wiem czy to zadziała proszę o sprawdzenie !!

#include <amxmodx>
#include <engine>
#include <cstrike>
//----------------------------------------------------------------------------------------------
public plugin_init()
{
    register_event("CurWeapon","changeWeapon","be","1=1")
}
//----------------------------------------------------------------------------------------------
public changeWeapon(id)
{
    new iWPNidx = -1
    new clip, ammo, wpn[32]
    new wpnid = get_user_weapon(id, clip, ammo)

    if ( wpnid == CSW_C4 || wpnid == CSW_HEGRENADE || wpnid == CSW_SMOKEGRENADE || wpnid == CSW_FLASHBANG || wpnid == CSW_KNIFE ) return

    // Never Run Out of Ammo!
    if ( clip == 0 ) {
        get_weaponname(wpnid,wpn,31)
        while ((iWPNidx = find_ent_by_class(iWPNidx, wpn)) != 0){
            if (id == entity_get_edict(iWPNidx, EV_ENT_owner)) {
                cs_set_weapon_ammo(iWPNidx, getMaxClipAmmo(wpnid))
                break
            }
        }
    }
}

//----------------------------------------------------------------------------------------------
stock getMaxBPAmmo(wpnid) {

    new bpammo = 0
    switch (wpnid) {
        case CSW_P228         : bpammo = 52
        case CSW_SCOUT      : bpammo = 90
        case CSW_HEGRENADE    : bpammo = 1
        case CSW_XM1014  : bpammo = 32
        case CSW_MAC10      : bpammo = 100
        case CSW_AUG            : bpammo = 90
        case CSW_SMOKEGRENADE   : bpammo = 1   
        case CSW_ELITE      : bpammo = 120 
        case CSW_FIVESEVEN    : bpammo = 100 
        case CSW_UMP45      : bpammo = 100 
        case CSW_SG550      : bpammo = 90  
        case CSW_GALIL      : bpammo = 90  
        case CSW_FAMAS      : bpammo = 90  
        case CSW_USP            : bpammo = 100 
        case CSW_GLOCK18        : bpammo = 120 
        case CSW_AWP            : bpammo = 30  
        case CSW_MP5NAVY        : bpammo = 120 
        case CSW_M249         : bpammo = 200 
        case CSW_M3   : bpammo = 21  
        case CSW_M4A1         : bpammo = 90  
        case CSW_TMP            : bpammo = 120 
        case CSW_G3SG1      : bpammo = 90  
        case CSW_FLASHBANG    : bpammo = 2   
        case CSW_DEAGLE  : bpammo = 35  
        case CSW_SG552      : bpammo = 90  
        case CSW_AK47         : bpammo = 90  
        case CSW_P90            : bpammo = 100 
    }                               
    return bpammo                 
}                                    
//----------------------------------------------------------------------------------------------
stock getMaxClipAmmo(wpnid) {        
                                     
    new clipammo = 0                
    switch (wpnid) {                
        case CSW_P228         : clipammo = 13
        case CSW_SCOUT      : clipammo = 10
        case CSW_HEGRENADE    : clipammo = 0
        case CSW_XM1014  : clipammo = 7
        case CSW_MAC10      : clipammo = 30
        case CSW_AUG            : clipammo = 30
        case CSW_SMOKEGRENADE   : clipammo = 0
        case CSW_ELITE      : clipammo = 15
        case CSW_FIVESEVEN    : clipammo = 20
        case CSW_UMP45      : clipammo = 25
        case CSW_SG550      : clipammo = 30
        case CSW_GALIL      : clipammo = 35
        case CSW_FAMAS      : clipammo = 25
        case CSW_USP            : clipammo = 12
        case CSW_GLOCK18        : clipammo = 20
        case CSW_AWP            : clipammo = 10
        case CSW_MP5NAVY        : clipammo = 30
        case CSW_M249         : clipammo = 100
        case CSW_M3   : clipammo = 8
        case CSW_M4A1         : clipammo = 30
        case CSW_TMP            : clipammo = 30
        case CSW_G3SG1      : clipammo = 20
        case CSW_FLASHBANG    : clipammo = 0
        case CSW_DEAGLE  : clipammo = 7
        case CSW_SG552      : clipammo = 30
        case CSW_AK47         : clipammo = 30
        case CSW_P90            : clipammo = 50
    }
    return clipammo
}
//----------------------------------------------------------------------------------------------

  • +
  • -
  • 0

#8 Nuupek

    Zaawansowany

  • Użytkownik

Reputacja: 4
Nowy

  • Postów:111
  • Lokalizacja:Wielkopolska
Offline

Napisano 13.11.2009 20:02

Powinno zadzialac ... (sorki nie sprawdze nie mam serwa a newgame nie dziala amxx)

1 kolumna odpowiada za max ammo (ilość) a 2 za magazynek (wyjątek granaty)

Ale myślę że mógł by być problem z amunicją np ustawisz dla ak że 1 magazynek ma 90 naboi a ogółem 900 to 1 magazynek jaki kupisz za pomocą przecinka (zalezy od binda) by dało 30 ammo!

Tak jest z krową...

A powiedzmy nie jest to problem ale chcesz mieć duży max a ktoś kliknie b i kliknie 6 no to będzie lipa u niego z kasą
  • +
  • -
  • 0

#9 Daku

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 13.11.2009 20:33

no tylko to będzie do serwera zombie i tam ceny nie grają roli, mam już plugin na zmianę amunicji zapasowej ale nie wiem jak zrobić ( to wyżej nie działa) żeby po reloadzie dalej dodawało ammo i żeby po wyrzuceniu nie pobierało z zapasu

[ Dodano: 13-11-2009, 20:50 ]
Miczu mam działające tylko jeszcze mi nie pasuje !!

1. Po reloadzie jest standard z broni
2. Po wyrzuceniu daje ustaloną wartość bez reloadu i zabiera z zapasu
3. nie wiem gdzie dopisać żeby zmieniało model
4. coś jeszcze dopisze później

#include <amxmodx>
#include <engine>
#include <cstrike>

// should be greater than corresponding standard
#define CLIP_AMMO 60

public plugin_init() {
    register_event("WeapPickup", "event_weapon_pickup", "be")
}

public event_weapon_pickup(id) {
    // get id of collected weapon
    new wid = read_data(1)

    if (wid == CSW_MP5NAVY) {
        new param[1]
        param[0] = wid

        // wait a bit since weapon entity not created yet
        set_task(0.1, "task_set_ammo", id, param, 1)
    }
}

public task_set_ammo(param[1], id) {
    new wid = param[0], wname[20]

    // weapon name is the same as weapon entity classname
    get_weaponname(wid, wname, 19)

    // find weapon entity index by it's classname and owner
    new went = find_ent_by_owner(-1, wname, id)
    if (!went) // if weapon entity isn't found
        return

    // get amount of ammo in clip of collected weapon
    new clip = cs_get_weapon_ammo(went)
    if (clip >= CLIP_AMMO) // if ammo addition isn't required
        return

    // get amount of player's pack ammo for collected weapon
    new pack = cs_get_user_bpammo(id, wid)
    if (!pack) // if player have no ammo for that weapon
        return

    // total available amount of ammo for collected weapon
    new total = clip + pack

    // here will be stored result ammo amount for clip and pack
    new clip2, pack2

    // if total ammo greater than or equal to defined clip ammo
    if (total >= CLIP_AMMO) {
        clip2 = CLIP_AMMO
        pack2 = total - CLIP_AMMO
    }
    else {
        clip2 = total
        pack2 = 0
    }

    // set new clip and pack ammo amount for collected weapon
    cs_set_weapon_ammo(went, clip2)
    cs_set_user_bpammo(id, wid, pack2)
}

  • +
  • -
  • 0

#10 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 13.11.2009 21:17

register_event("CurWeapon","CurWeapon","be", "1=1")
register_event("DeathMsg", "DeathMsg", "a")
new old_ammo[33]

public CurWeapon(id) 
{ 
    new wid = read_data(2)    // Id broni 
    new ammo = read_data(3)    // liczba naboi w magazynku 
    if(wid== CSW_MP5NAVY)
    {
       if(old_ammo[id]<ammo)  // reload
       {
           new param[1] 
           param[0] = wid
           set_task(0.1, "task_set_ammo", id, param, 1)
       }
       old_ammo[id]=ammo
    }
}

public DeathMsg() 
{  
    new vid = read_data(2)    // ofiara
    old_ammo[id]=0
}

public client_connect(id) 
{ 
    old_ammo[id]=0
}

Dodaj tylko, ze jak bron ma 30 ammo a old_ammo!=30 to laduje do pelna za darmo.
  • +
  • -
  • 0

#11 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 13.11.2009 21:19

register_event("CurWeapon","CurWeapon","be", "1=1")
register_event("DeathMsg", "DeathMsg", "a")
new old_ammo[33]

public CurWeapon(id) 
{ 
    new wid = read_data(2)    // Id broni 
    new ammo = read_data(3)    // liczba naboi w magazynku 
    if(wid== CSW_MP5NAVY)
    {
       if(old_ammo[id]<ammo)  // reload
       {
           new param[1] 
           param[0] = wid
           set_task(0.1, "task_set_ammo", id, param, 1)
           ammo=CLIP_AMMO
       }
       old_ammo[id]=ammo
    }
}

public DeathMsg() 
{  
    new vid = read_data(2)    // ofiara
    old_ammo[id]=0
}

public client_connect(id) 
{ 
    old_ammo[id]=0
}

Dodaj tylko, ze jak bron ma 30 ammo a old_ammo!=30 to laduje do pelna za darmo.
  • +
  • -
  • 0

#12 Daku

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 13.11.2009 21:52

tylko gdzie nazwa broni musi być CSW_MP5NAVY

jak laduje za free ??

ten plugin co dałem wyżej daje w broni "X" ammo ale zabiera x-standard np mp5 ustawie 60 ammo to standard był 30 więc zabiera mi 60-30=30 czyli zabiera mi z zapasu już a ja chcę żeby ładowało ZAWSZE początkową NOWĄ !! czyli po 60 za każdym razem
  • +
  • -
  • 0

#13 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 13.11.2009 22:33

Daku, mowiles ze jak ktos da bron na ziemie to kasuje stara ilosc ammunicji - to akurat na ten bug... chyba beda jeszcze inne problemy, ale robmy metoda malych kroczkow :F

No chyba, ze za duzo od ciebie wymagam, to moge przerobic sam, ale tak sie czegos uczysz :)
  • +
  • -
  • 0

#14 Daku

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 13.11.2009 22:37

nie kasuje tylko np było 50 ammo wystrzeliłem 10 i wyżuciłem z 40 w magazynku

wchodząc na broń podnoszę i zabiera mi od razu ( jakby przeładowanie ) do 50

a jakprzeładuję bez wyszucenia to TYLKO do 30
  • +
  • -
  • 0

#15 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 13.11.2009 22:40

Daku, moj kod zalatwi reload. Chcesz sie pozbyc bugu z ladowniem broni z zmiemi?
  • +
  • -
  • 0

#16 Daku

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 13.11.2009 22:43

tak

ale też chcę zrobić to że jak ładuję to żeby nie wracało do standardu tylko do nowej wartości

zaraz ci na filmie pokaże o co mi biega !!

masz tu zaraz będzie to o co mi biega (PATRZ NA AMMO)



Po dodaniu twojego kodu dalej nie działa z Reloadem , albo nie wiem czy dobrze wklejam

#include <amxmodx>
#include <engine>
#include <cstrike>

// should be greater than corresponding standard
#define CLIP_AMMO 60


public plugin_init() {
    register_event("WeapPickup", "event_weapon_pickup", "be")
}

public event_weapon_pickup(id) {
    // get id of collected weapon
    new wid = read_data(1)

    if (wid == CSW_MP5NAVY) {
        new param[1]
        param[0] = wid

        // wait a bit since weapon entity not created yet
        set_task(0.1, "task_set_ammo", id, param, 1)
    }
}

public task_set_ammo(param[1], id) {
    new wid = param[0], wname[20]

    // weapon name is the same as weapon entity classname
    get_weaponname(wid, wname, 19)

    // find weapon entity index by it's classname and owner
    new went = find_ent_by_owner(-1, wname, id)
    if (!went) // if weapon entity isn't found
        return

    // get amount of ammo in clip of collected weapon
    new clip = cs_get_weapon_ammo(went)
    if (clip >= CLIP_AMMO) // if ammo addition isn't required
        return

    // get amount of player's pack ammo for collected weapon
    new pack = cs_get_user_bpammo(id, wid)
    if (!pack) // if player have no ammo for that weapon
        return

    // total available amount of ammo for collected weapon
    new total = clip + pack

    // here will be stored result ammo amount for clip and pack
    new clip2, pack2

    // if total ammo greater than or equal to defined clip ammo
    if (total >= CLIP_AMMO) {
        clip2 = CLIP_AMMO
        pack2 = total - CLIP_AMMO
    }
    else {
        clip2 = total
        pack2 = 0
    }

    // set new clip and pack ammo amount for collected weapon
    cs_set_weapon_ammo(went, clip2)
    cs_set_user_bpammo(id, wid, pack2)
}

new old_ammo[33] 

public CurWeapon(id) 
{ 
    new wid = read_data(2)
    new ammo = read_data(3)
    if(wid== CSW_MP5NAVY) 
    { 
       if(old_ammo[id]<ammo)
       { 
           new param[1] 
           param[0] = wid 
           set_task(0.1, "task_set_ammo", id, param, 1) 
           ammo=CLIP_AMMO 
       } 
       old_ammo[id]=ammo 
    } 
} 

tylko tak się skomplikował plugin inaczej były błędy !!

#include <amxmodx>
#include <engine>
#include <cstrike>

// should be greater than corresponding standard
#define CLIP_AMMO 60
register_event("CurWeapon","CurWeapon","be", "1=1") 
register_event("DeathMsg", "DeathMsg", "a")


public plugin_init() {
    register_event("WeapPickup", "event_weapon_pickup", "be")
}

public event_weapon_pickup(id) {
    // get id of collected weapon
    new wid = read_data(1)

    if (wid == CSW_MP5NAVY) {
        new param[1]
        param[0] = wid

        // wait a bit since weapon entity not created yet
        set_task(0.1, "task_set_ammo", id, param, 1)
    }
}

public task_set_ammo(param[1], id) {
    new wid = param[0], wname[20]

    // weapon name is the same as weapon entity classname
    get_weaponname(wid, wname, 19)

    // find weapon entity index by it's classname and owner
    new went = find_ent_by_owner(-1, wname, id)
    if (!went) // if weapon entity isn't found
        return

    // get amount of ammo in clip of collected weapon
    new clip = cs_get_weapon_ammo(went)
    if (clip >= CLIP_AMMO) // if ammo addition isn't required
        return

    // get amount of player's pack ammo for collected weapon
    new pack = cs_get_user_bpammo(id, wid)
    if (!pack) // if player have no ammo for that weapon
        return

    // total available amount of ammo for collected weapon
    new total = clip + pack

    // here will be stored result ammo amount for clip and pack
    new clip2, pack2

    // if total ammo greater than or equal to defined clip ammo
    if (total >= CLIP_AMMO) {
        clip2 = CLIP_AMMO
        pack2 = total - CLIP_AMMO
    }
    else {
        clip2 = total
        pack2 = 0
    }

    // set new clip and pack ammo amount for collected weapon
    cs_set_weapon_ammo(went, clip2)
    cs_set_user_bpammo(id, wid, pack2)


    }
new old_ammo[33] 

public CurWeapon(id) 
{ 
    new wid = read_data(2)    // Id broni 
    new ammo = read_data(3)    // liczba naboi w magazynku 
    if(wid== CSW_MP5NAVY) 
    { 
       if(old_ammo[id]<ammo)  // reload 
       { 
           new param[1] 
           param[0] = wid 
           set_task(0.1, "task_set_ammo", id, param, 1) 
           ammo=CLIP_AMMO 
       } 
       old_ammo[id]=ammo 
    } 
} 

public DeathMsg() 
{  
    new vid = read_data(2)    // ofiara 
    old_ammo[id]=0 
} 

public client_connect(id) 
{ 
    old_ammo[id]=0 
}

}

mam 3 błędy 2 że nie zdefiniowane id,wid i 3 unmatched closing brace
  • +
  • -
  • 0

#17 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 13.11.2009 23:36

register_event("CurWeapon","CurWeapon","be", "1=1") 
register_event("DeathMsg", "DeathMsg", "a")

To do public plugin_init() myslalem, ze to zalapiesz ;>
  • +
  • -
  • 0

#18 Daku

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 13.11.2009 23:40

Dalej jest błąd

nie zdefiniowany symbol id i to z unmatched closing brace

to mój PIERWSZY plugin i nie wiem co i gdzie dać !!
  • +
  • -
  • 0

#19 Miczu

    Godlike

  • Przyjaciel

Reputacja: 646
Wszechmogący

  • Postów:2862
Offline

Napisano 13.11.2009 23:44

public DeathMsg() 
{  
    new vid = read_data(2)    // ofiara 
    old_ammo[vid]=0 
}

brakowalo 'v' nie bylo az tak zle... poza tym pisze w ktorej lini jest problem, wiec mogles do tego dojsc ( a przynajmniej podac linie) O:)
  • +
  • -
  • 0

#20 Daku

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 6
Nowy

  • Postów:96
  • Lokalizacja:Żory
Offline

Napisano 13.11.2009 23:51

Zrobiłem innym sposobem w 2 pluginach i DZAIŁA !!




DO ZAMKNIĘCIA !!!

  • +
  • -
  • 0





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

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

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