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

Indeks tablicy odpowiedni do zmiennej gracza.


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

#1 oeN.

    Wszechwidzący

  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 08.04.2015 15:53

Witam,
 
Mam 2 tablice:

new const ModeleBroni[23][] = {
    "0",
    "models/reborn_golden/v_glock18.mdl",
    "models/reborn_golden/v_usp.mdl",
    "models/reborn_golden/v_p228.mdl",
    "models/reborn_golden/v_fiveseven.mdl",
    "models/reborn_golden/v_deagle.mdl",
    "models/reborn_golden/v_elite.mdl",
    "models/reborn_golden/v_tmp.mdl",
    "models/reborn_golden/v_mac10.mdl",
    "models/reborn_golden/v_ump45.mdl",
    "models/reborn_golden/v_mp5.mdl",
    "models/reborn_golden/v_p90.mdl",
    "models/reborn_golden/v_m3.mdl",
    "models/reborn_golden/v_xm1014.mdl",
    "models/reborn_golden/v_famas.mdl",
    "models/reborn_golden/v_galil.mdl",
    "models/reborn_golden/v_ak47.mdl",
    "models/reborn_golden/v_m4a1.mdl",
    "models/reborn_golden/v_aug.mdl",
    "models/reborn_golden/v_sg552.mdl",
    "models/reborn_golden/v_sg550.mdl",
    "models/reborn_golden/v_g3sg1.mdl",
    "models/reborn_golden/v_m249.mdl"
}

new NazwyBroni[23] = {
    0,
    CSW_GLOCK18,
    CSW_USP,
    CSW_P228,
    CSW_FIVESEVEN,
    CSW_DEAGLE,
    CSW_ELITE,
    CSW_TMP,
    CSW_MAC10,
    CSW_UMP45,
    CSW_MP5NAVY,
    CSW_P90,
    CSW_M3,
    CSW_XM1014,
    CSW_FAMAS,
    CSW_GALIL,
    CSW_AK47,
    CSW_M4A1,
    CSW_AUG,
    CSW_SG552,
    CSW_SG550,
    CSW_G3SG1,
    CSW_M249
}

Oraz kod do nich użyty:

if(weapon == NazwyBroni[player_reborns[iOwner]])
        entity_set_string(iOwner, EV_SZ_viewmodel, ModeleBroni[player_reborns[iOwner]])

Pytanie moje brzmi. Jeśli zmienna player_reborns jest równa lub większa np. 5 to czy index tablicy NazwyBroni będzie też mniejszy niż 5 w tym przypadku? Czy powinienem zrobić pętlę?

for(new i=0; i < player_reborns[iOwner]; i++)
{
if(weapon == NazwyBroni[i])
        entity_set_string(iOwner, EV_SZ_viewmodel, ModeleBroni[i])
}

Chodzi mi o to że nawet gdy player_reborns ma wartość 20 to wszystkie modele poniżej indeksu 20 też będa przyznane graczowi.


Użytkownik oeN. edytował ten post 08.04.2015 15:58

  • +
  • -
  • 0

#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.04.2015 16:06

Nie wiem co chcesz osiągnąć ale

entity_set_string(iOwner, EV_SZ_viewmodel, ModeleBroni[i])

Można ustawić jeden model naraz.

 


Jeśli zmienna player_reborns jest równa lub większa np. 5 to czy index tablicy NazwyBroni będzie też mniejszy niż 5 w tym przypadku?

 

player_reborns w tym przypadku to index tablicy.

Jeżeli player_reborns = 3

to:

NazwyBroni[player_reborns[iOwner]]

czyli:

NazwyBroni[3]

czyli:

CSW_P228

czyli:

1 (zobacz w amxconst.inc)


  • +
  • -
  • 0

#3 oeN.

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 08.04.2015 16:12

Zmiana modelu broni wywołana jest przy wyciągnięciu danej broni (sposób od DarkGL). Jak w takim razie używająć tablic mogę tego dokonać? Wcześniej używałem tego:

if(hasGLOCK[iOwner] && weapon == CSW_GLOCK18)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_glock18.mdl")
    else if(hasUSP[iOwner] && weapon == CSW_USP)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_usp.mdl")
    else if(hasP228[iOwner] && weapon == CSW_P228)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_p228.mdl")
    else if(hasFIVESEVEN[iOwner] && weapon == CSW_FIVESEVEN)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_fiveseven.mdl")
    else if(hasDEAGLE[iOwner] && weapon == CSW_DEAGLE)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_deagle.mdl")
    else if(hasELITE[iOwner] && weapon == CSW_ELITE)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_elite.mdl")
    else if(hasTMP[iOwner] && weapon == CSW_TMP)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_tmp.mdl")
    else if(hasMAC10[iOwner] && weapon == CSW_MAC10)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_mac10.mdl")
    else if(hasUMP45[iOwner] && weapon == CSW_UMP45)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_ump45.mdl")
    else if(hasMP5[iOwner] && weapon == CSW_MP5NAVY)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_mp5.mdl")
    else if(hasP90[iOwner] && weapon == CSW_P90)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_p90.mdl")
    else if(hasM3[iOwner] && weapon == CSW_M3)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_m3.mdl")
    else if(hasXM1014[iOwner] && weapon == CSW_XM1014)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_xm1014.mdl")
    else if(hasFAMAS[iOwner] && weapon == CSW_FAMAS)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_famas.mdl")
    else if(hasGALIL[iOwner] && weapon == CSW_GALI)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_galil.mdl")
    else if(hasAK47[iOwner] && weapon == CSW_AK47)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_ak47.mdl")
    else if(hasM4A1[iOwner] && weapon == CSW_M4A1)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_m4a1.mdl")
    else if(hasAUG[iOwner] && weapon == CSW_AUG)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_aug.mdl")
    else if(hasSG552[iOwner] && weapon == CSW_SG552)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_sg552.mdl")
    else if(hasSG550[iOwner] && weapon == CSW_SG550)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_sg550.mdl")
    else if(hasG3SG1[iOwner] && weapon == CSW_G3SG1)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_g3sg1.mdl")
    else if(hasM249[iOwner] && weapon == CSW_M249)
        entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_m249.mdl")

Ale jest to raczej mało optymalne.


  • +
  • -
  • 0

#4 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.04.2015 16:29

Hm, a jakby zamiast tablic has zrobić jedną zmienną i dodawać tam bitowo bronie?

new bronie[33];

bronie[id] |= (1<<CSW_P90)
//czyli w tym przypadku
bronie[id] |= (1<<weapon)

Kod by wyglądał tak (chyba):

if((bronie[iOwner] & (1<<weapon))
   entity_set_string(iOwner, EV_SZ_viewmodel, TablicazModfelami)

Ważne pytanie, w jakim evencie zmieniasz model?

 

 

i na jakiej zasadzie działa player_reborn :X


  • +
  • -
  • 0

#5 oeN.

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 08.04.2015 16:37

Na bronie:

new classname[32] // Zmienna do której bedziemy pobierac classname poszczególnych broni
    for(new i=1;i<31;++i)
        if(i!=2) {
        get_weaponname(i,classname,31) //Pobieram classname danej broni
        
        RegisterHam(Ham_Item_Deploy, classname, "fwItemDeploy",1);
    }

player_reborn to ilość Odrodzeń jaką gracz posiada, dostaje się je jak wbije się maksymalny poziom na serwerze.

Mówisz, że twoje to "chyba" będzie tak wyglądało, ktoś to można jakoś obejżeć i poprawić jeśli trzeba?


Użytkownik oeN. edytował ten post 08.04.2015 16:37

  • +
  • -
  • 0

#6 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.04.2015 19:10

Skoro masz Deploya to w funkcji masz index entity które gracz wyciągnął.

Można to zamienić na CSW_* (cs_get_weaponid)

 

Daj całą funkcję od deploya. Coś poradzimy :P


  • +
  • -
  • 0

#7 oeN.

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 09.04.2015 10:03

new classname[32] // Zmienna do której bedziemy pobierac classname poszczególnych broni
for(new i=1;i<31;++i)
if(i!=2) {
get_weaponname(i,classname,31) //Pobieram classname danej broni
 
RegisterHam(Ham_Item_Deploy, classname, "fwItemDeploy",1);
}
public fwItemDeploy(wpn){
static iOwner;
iOwner = entity_get_edict(wpn, EV_ENT_owner)
new weapon = cs_get_weapon_id(wpn)
 
if(hasGLOCK[iOwner] && weapon == CSW_GLOCK18)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_glock18.mdl")
else if(hasUSP[iOwner] && weapon == CSW_USP)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_usp.mdl")
else if(hasP228[iOwner] && weapon == CSW_P228)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_p228.mdl")
else if(hasFIVESEVEN[iOwner] && weapon == CSW_FIVESEVEN)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_fiveseven.mdl")
else if(hasDEAGLE[iOwner] && weapon == CSW_DEAGLE)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_deagle.mdl")
else if(hasELITE[iOwner] && weapon == CSW_ELITE)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_elite.mdl")
else if(hasTMP[iOwner] && weapon == CSW_TMP)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_tmp.mdl")
else if(hasMAC10[iOwner] && weapon == CSW_MAC10)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_mac10.mdl")
else if(hasUMP45[iOwner] && weapon == CSW_UMP45)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_ump45.mdl")
else if(hasMP5[iOwner] && weapon == CSW_MP5NAVY)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_mp5.mdl")
else if(hasP90[iOwner] && weapon == CSW_P90)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_p90.mdl")
else if(hasM3[iOwner] && weapon == CSW_M3)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_m3.mdl")
else if(hasXM1014[iOwner] && weapon == CSW_XM1014)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_xm1014.mdl")
else if(hasFAMAS[iOwner] && weapon == CSW_FAMAS)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_famas.mdl")
else if(hasGALIL[iOwner] && weapon == CSW_GALI)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_galil.mdl")
else if(hasAK47[iOwner] && weapon == CSW_AK47)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_ak47.mdl")
else if(hasM4A1[iOwner] && weapon == CSW_M4A1)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_m4a1.mdl")
else if(hasAUG[iOwner] && weapon == CSW_AUG)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_aug.mdl")
else if(hasSG552[iOwner] && weapon == CSW_SG552)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_sg552.mdl")
else if(hasSG550[iOwner] && weapon == CSW_SG550)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_sg550.mdl")
else if(hasG3SG1[iOwner] && weapon == CSW_G3SG1)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_g3sg1.mdl")
else if(hasM249[iOwner] && weapon == CSW_M249)
entity_set_string(iOwner, EV_SZ_viewmodel, "models/reborn_golden/v_m249.mdl")
 
/*for(new i=0;i<player_reborns[iOwner];i++)
{
if(weapon == NazwyBroni[i])
entity_set_string(iOwner, EV_SZ_viewmodel, ModeleBroni[i])
}*/
}

Użytkownik oeN. edytował ten post 09.04.2015 10:03

  • +
  • -
  • 0

#8 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

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

Napisano 12.04.2015 11:42

chcesz się po prosut pozbyć tego ifa tak ?


  • +
  • -
  • 0

#9 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 12.04.2015 12:29

Mam pewien pomysł, jak działają zmienne hasGlock itp?
  • +
  • -
  • 0

#10 oeN.

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 12.04.2015 15:59

Szczerze to nie chciałem tego robić ale... Zapodam .sma całego pluginu.

 

@DarkGL

Tak, chcę to uprościć i skrócić jak najbardziej się da.

Załączone pliki


  • +
  • -
  • 0

#11 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 12.04.2015 17:22

Dobra, ja Ci tego całego nie edytuje ale powiem co i jak...

 

tworzysz nową zmienną new bronie_gracza[33];

I teraz tak:

w connect i disconnect dajesz

bronie_gracza[id] = 0

I wszystkie ustawienia jakiejś zmiennej has* na true zastępujesz tym:

bronie_gracza[id] |= (1<<CSW_GLOCK18)

Oczywiscie broń z CSW_ podajesz tą co BYŁA w nazwie poprzedniej zmiennej has*

 

Przykład:

hasUSP[id] = true;

->

bronie_gracza[id] |= (1<<CSW_USP)

Jak to zrobisz to daj kod, wtedy ogarniemy deploya

 

Spoiler

 

 

 

EDIT: Twój deploy:

public fwItemDeploy(wpn)
{
	static iOwner;
	iOwner = entity_get_edict(wpn, EV_ENT_owner)
	new weapon = cs_get_weapon_id(wpn)
	
	if(bronie_gracza[iOwner] & (1<<weapon))
		entity_set_string(iOwner, EV_SZ_viewmodel, ModeleBroni[weapon])
}

Teraz tylko przepisać tablice z modelami żeby dało się odwoływać po CSW_

 

 

EDIT EDIT

Tablica z modelami do podmiany dla Ciebie:

new const ModeleBroni[CSW_P90+1][] = {
	"",
	"models/reborn_golden/v_p228.mdl",
	"",
	"",
	"models/reborn_golden/v_xm1014.mdl",
	"",
	"models/reborn_golden/v_mac10.mdl",
	"models/reborn_golden/v_aug.mdl",
	"",
	"models/reborn_golden/v_elite.mdl",
	"models/reborn_golden/v_fiveseven.mdl",
	"models/reborn_golden/v_ump45.mdl",
	"models/reborn_golden/v_sg550.mdl",
	"models/reborn_golden/v_galil.mdl",
	"models/reborn_golden/v_famas.mdl",
	"models/reborn_golden/v_usp.mdl",
	"models/reborn_golden/v_glock18.mdl",
	"",
	"models/reborn_golden/v_mp5.mdl",
	"models/reborn_golden/v_m249.mdl"
	"models/reborn_golden/v_m3.mdl",
	"models/reborn_golden/v_m4a1.mdl",
	"models/reborn_golden/v_tmp.mdl",
	"models/reborn_golden/v_g3sg1.mdl",
	"",	
	"models/reborn_golden/v_deagle.mdl",
	"models/reborn_golden/v_sg552.mdl",
	"models/reborn_golden/v_ak47.mdl",
	"",
	"models/reborn_golden/v_p90.mdl",
}

EDIT EDIT EDIT:

Zapomniałem o TakeDamage :X

Łap:

public fw_TakeDamagePre( this, idinflictor, idattacker, Float:damage)
{
	if( !is_user_alive( idattacker ) || !is_user_alive( this ))
		return HAM_IGNORED;
	
	if(bronie_gracza[iOwner] & (1<<get_user_weapon(idattacker)))
	{
		SetHamParamFloat( 4, damage * 2.0 );
		return HAM_HANDLED;
	}
	
	return HAM_IGNORED;
}


  • +
  • -
  • 1

#12 oeN.

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 12.04.2015 17:50

Czyli np. mam zrobić tak:

bronie_gracza[id] |= (1<<CSW_M249)|(1<<CSW_G3SG1)|(1<<CSW_SG550)

Jeśli chcę dodać kilka broni na wyższych wartościach player_reborn?


  • +
  • -
  • 0

#13 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 12.04.2015 17:51

Tak, ale ja bym dodał nawias jeszcze dla pewności..

bronie_gracza[id] |= ((1<<CSW_M249)|(1<<CSW_G3SG1)|(1<<CSW_SG550))

  • +
  • -
  • 1

#14 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 12.04.2015 18:00

Troszkę roboty będzie, ale się opłaci. Widzę w tą stronę szedłeś ale nie wiedziałeś co dalej (wykomentowana pętla).
 
Tablicę z listą broni już mamy, dorzucimy teraz prostą funkcję typu stock, która dla nazwy broni zwróci jej indeks z Twojej tablicy:
 
 
stock idBroni(weapon) {
    for (new i=0; i<sizeof(NazwyBroni); ++i) {
        if (NazwyBroni[i] == weapon)
            return i;
    }
    return 0;
}
Funkcji używamy w prosty sposób:
 
id_broni_z_tablicy = idBroni(CSW_AK47)
Pamiętaj, że jeśli nie znajdzie broni w tablicy, zwróci 0, więc jeśli chcesz z tą wartością coś dalej zrobić sprawdź czy nie jest to 0. W większości przypadków nie będzie to problemem.
 
Masz również tablice z modelami, super :) Odpada nam część pracy.
 
Trzeba jednak jeszcze jedną tablicę dorobić i 22 wyrzucić. Mówię tu o tablicach hasBRON, które zastąpimy jedną tablicą hasWeapon.
 
Na pierwszy rzut oka tablica powinna być 2 wymiarowa, 1 wymiar (33) na graczy, 2 wymiar (23) na bronie. Ale... Każda broń w CSie używa ID od 1 do 30, które kryją się pod właśnie stałymi CSW_, wyjątkiem są tutaj 3 rzeczy: kamizelka, kamizelka + hełm i shieldgun (chyba tarcza taktyczna anty-terrorystów, ale głowy nie daję, nigdy tego nie sprawdzałem). Tych 3ch rzeczy nie używasz, więc możemy śmiało przyjąć zakres do 30.
 
A 30 to mniej niż 32, co oznacza że każda broń może posiadać własny bit :) Dlatego stworzymy tablicę hasWeapon:
 
 
new hasWeapon[33];
 
Teraz zamienimy trochę przypisań, by użyć hasWeapon zamiast hasBROŃ, zacznijmy od client_connect, gdzie wystarczy teraz nam:
 
hasWeapon[id] = 0;
 
w client_disconnect robimy dokładnie tak samo.
 
Teraz optymalizacja, której się nie spodziewałeś... Jednak żeby jej dokonać musimy zmienić kolejność w tablicach NazwyBroni i ModeleBroni. Musi ona odpowiadać kolejności w której dajesz graczowi bronie w funkcji Odrodzenie, czyli:
 
 
            hasGLOCK[id] = true;
            hasUSP[id] = true;
            hasP228[id] = true;
            hasFIVESEVEN[id] = true;
            hasDEAGLE[id] = true;
            hasELITE[id] = true;
            hasTMP[id] = true;
            hasMAC10[id] = true;
            hasUMP45[id] = true;
            hasMP5[id] = true;
            hasP90[id] = true;
            hasFAMAS[id] = true;
            hasGALIL[id] = true;
            hasM3[id] = true;
            hasXM1014[id] = true;
            hasAK47[id] = true;
            hasM4A1[id] = true;
            hasAUG[id] = true;
            hasSG552[id] = true;
            hasSG550[id] = true;
            hasG3SG1[id] = true;
            hasM249[id] = true;
 
To chyba nie będzie trudne... Pamiętaj jednak, że kolejność w tablicy modeli musi odpowiadać tej w tablicy broni. Pamiętaj też, że na zerowej pozycji nadal pozostawiamy to "magiczne" zero! Możemy oczywiście je usunąć, ale doda nam to troszkę roboty...
 
Teraz to, co mamy w Odrodzenie (ten cały switch) zamieniamy na:
 
 
hasWeapon[id] = 0; // Na wszelki wypadek resetujemy graczowi bronie
for (new i=1; i<sizeof(NazwyBroni) && i<=player_reborns[id]; ++i) {
    hasWeapon[id] |= (1<<NazwyBroni[id]);
}
To może być dość trudne do zrozumienia... Krótkie więc objaśnienie. Najpierw zerujemy graczowi jego listę broni, następnie jedziemy pętlą po wszystkich dostępnych broniach, kończąc na broni równej ilości odrodzeń gracza. Każdą broń dodajemy do zmiennej hasWeapon (jeśli nie rozumiesz w jaki sposób, poczytaj o operacjach bitowych (1 i 2) i operatorach).
 
Idąc dalej, pętlę która jest zakomentowana w plugin_precache odkomentuj, zamień tylko i<23 na i<sizeof(ModeleBroni), da to lepszą elastyczność gdy będziesz chciał jakieś bronie dodać lub z jakichś zrezygnować.
 
Teraz przychodzi czas na nasze kochane fwItemDeploy. Zastąpimy naszego wielgachnego IFa czymś takim:
 
 
new idWeapon = idBroni(weapon);
if ( idWeapon && hasWeapon[id] & (1<<weapon) ) { // Sprawdzamy czy broń nas interesuje i czy gracz posiada daną broń, tutaj również odsyłam do operacji bitowych jeśli nie rozumiesz... Wygląda to trochę jak sprawdzanie czy gracz ma podaną flagę
    entity_set_string(iOwner, EV_SZ_viewmodel, ModeleBroni[idWeapon])
}
 
Optymalizację możemy uczynić również dalej. Jako że zabierasz za każdym razem po prostu 2x damage jeśli gracz posiada złotą broń, jest to dość proste. Ale wcale nie jest bardziej skomplikowane gdy chcemy zmienić damage dla każdej broni z osobna. Pewnie tego nie potrzebujesz, więc kod sobie uprościsz ale przedstawię bogatszą wersję. Tworzymy jeszcze jedną tablicę typu Float o nazwie DamageBroni:
 
new Float:DamageBroni[23] = {
    1.0, // zauważ że na pozycji zerowej mamy 1.0, tutaj nie ma żadnej broni więc formalnie można tu wpisać cokolwiek. Zostaw jednak tutaj 1.0, w razie wpadki przy sprawdzaniu czy broń nas interesuje, nic złego się nie stanie tj nie zmienisz wcale obrażeń.
    2.0,
    2.0,
    // CIACH... Wiesz co pisać dalej :)
}
I użyjemy jej ładnie. Właściwie bardzo podobnie jak w fwItemDeploy użyliśmy modeli:
 
 
new idWeapon = idBroni(weapon);
if ( idWeapon && hasWeapon[id] & (1<<weapon) ) { // Sprawdzamy czy broń nas interesuje i czy gracz posiada daną broń, tutaj również odsyłam do operacji bitowych jeśli nie rozumiesz... Wygląda to trochę jak sprawdzanie czy gracz ma podaną flagę
    SetHamParamFloat( 4, damage * DamageBroni[idWeapon] );
}
 
To chyba wszystko... Jeśli gdzieś jeszcze operowałeś na starych tablicach posiadania broni, powinieneś sobie poradzisz żeby to zamienić.
GwynBleidD (12.04.2015 18:00):
Wow, 3 posty doszły gdy ja pisałem swój referat. Mój post odnosi się do postu #10 z tego tematu.
GwynBleidD (12.04.2015 18:04):
W plugin_precache oczywiście wywal dotychczasowe ładowanie modeli, jeśli wrzucasz tam pętlę.

  • +
  • -
  • 3

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#15 oeN.

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 12.04.2015 18:18

for (new i=1; i<sizeof(NazwyBroni) && i<player_reborns[id]; ++i) {
        hasWeapon[id] |= (1<<NazwyBroni[id]);
    }

Na pewno:

i<=player_reborns[id]

A nie:

i<player_reborns[id]

W pierwszym przypadku gracz będzie miał o jeden więcej niż ma aktualnie, prawda?

 

@Edit

Errory:

L 04/12/2015 - 19:36:19: Start of error session.
L 04/12/2015 - 19:36:19: Info (map "zm_aztec2015") (file "addons/amxmodx/logs/error_20150412.log")
L 04/12/2015 - 19:36:19: [AMXX] Displaying debug trace (plugin "reborn_system.amxx", version "1.0")
L 04/12/2015 - 19:36:19: [AMXX] Run time error 4: index out of bounds
L 04/12/2015 - 19:36:19: [AMXX]    [0] reborn_system.sma::fwItemDeploy (line 274)
L 04/12/2015 - 19:37:00: [AMXX] Displaying debug trace (plugin "reborn_system.amxx", version "1.0")
L 04/12/2015 - 19:37:00: [AMXX] Run time error 4: index out of bounds
L 04/12/2015 - 19:37:00: [AMXX]    [0] reborn_system.sma::fwItemDeploy (line 274)
L 04/12/2015 - 19:37:23: [AMXX] Displaying debug trace (plugin "reborn_system.amxx", version "1.0")
L 04/12/2015 - 19:37:23: [AMXX] Run time error 4: index out of bounds
L 04/12/2015 - 19:37:23: [AMXX]    [0] reborn_system.sma::fwItemDeploy (line 274)
L 04/12/2015 - 19:39:39: [AMXX] Displaying debug trace (plugin "reborn_system.amxx", version "1.0")
L 04/12/2015 - 19:39:39: [AMXX] Run time error 4: index out of bounds
L 04/12/2015 - 19:39:39: [AMXX]    [0] reborn_system.sma::DajBonus (line 234)
L 04/12/2015 - 19:39:39: [AMXX]    [1] reborn_system.sma::Odrodzenie (line 241)

Dotyczy tej tablicy:

new NazwyBroni[23] = {
    0,
    CSW_GLOCK18,
    CSW_USP,
    CSW_P228,
    CSW_FIVESEVEN,
    CSW_DEAGLE,
    CSW_ELITE,
    CSW_TMP,
    CSW_MAC10,
    CSW_UMP45,
    CSW_MP5NAVY,
    CSW_P90,
    CSW_FAMAS,
    CSW_GALIL,
    CSW_M3,
    CSW_XM1014,
    CSW_AK47,
    CSW_M4A1,
    CSW_AUG,
    CSW_SG552,
    CSW_SG550,
    CSW_G3SG1,
    CSW_M249
}

Załączone pliki


Użytkownik oeN. edytował ten post 12.04.2015 18:46

  • +
  • -
  • 0

#16 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 12.04.2015 18:42

Gwyn, czy Twój sposób jest podobny do mojego i czy mój styknie? Rzuć okiem w wolnej chwili bo jestem bardzo ciekawy

Twój sposób lepiej uŻywa tablicy z id broni. Ja usunąłem to całkowicie i jest więcej pisania. I nie dałem możliwości ustawiania dmg :/
  • +
  • -
  • 0

#17 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 12.04.2015 20:05

for (new i=1; i<sizeof(NazwyBroni) && i<player_reborns[id]; ++i) {
        hasWeapon[id] |= (1<<NazwyBroni[id]);
    }
Na pewno:
i<=player_reborns[id]
A nie:
i<player_reborns[id]
W pierwszym przypadku gracz będzie miał o jeden więcej niż ma aktualnie, prawda?

Na pewno. Pierwsza broń jest na indeksie 1 w tablicy, na 0 jest stan "pusty". Chcemy dać graczowi wszystkie bronie do broni odpowiadającej aktualnemu levelowi włącznie. Dlatego powinno to być <=.

Errory:

L 04/12/2015 - 19:36:19: Start of error session.
L 04/12/2015 - 19:36:19: Info (map "zm_aztec2015") (file "addons/amxmodx/logs/error_20150412.log")
L 04/12/2015 - 19:36:19: [AMXX] Displaying debug trace (plugin "reborn_system.amxx", version "1.0")
L 04/12/2015 - 19:36:19: [AMXX] Run time error 4: index out of bounds
L 04/12/2015 - 19:36:19: [AMXX]    [0] reborn_system.sma::fwItemDeploy (line 274)
L 04/12/2015 - 19:37:00: [AMXX] Displaying debug trace (plugin "reborn_system.amxx", version "1.0")
L 04/12/2015 - 19:37:00: [AMXX] Run time error 4: index out of bounds
L 04/12/2015 - 19:37:00: [AMXX]    [0] reborn_system.sma::fwItemDeploy (line 274)
L 04/12/2015 - 19:37:23: [AMXX] Displaying debug trace (plugin "reborn_system.amxx", version "1.0")
L 04/12/2015 - 19:37:23: [AMXX] Run time error 4: index out of bounds
L 04/12/2015 - 19:37:23: [AMXX]    [0] reborn_system.sma::fwItemDeploy (line 274)
L 04/12/2015 - 19:39:39: [AMXX] Displaying debug trace (plugin "reborn_system.amxx", version "1.0")
L 04/12/2015 - 19:39:39: [AMXX] Run time error 4: index out of bounds
L 04/12/2015 - 19:39:39: [AMXX]    [0] reborn_system.sma::DajBonus (line 234)
L 04/12/2015 - 19:39:39: [AMXX]    [1] reborn_system.sma::Odrodzenie (line 241)

Pod linią 271 dodaj warunek:

if (id > 32 || id < 1)
    return HAM_IGNORED;
Dodaj również return na końcu funkcji aby uniknąć warningów.

W linii 234 zmień NazwyBroni[id] na NazwyBroni[i].
 
 

Gwyn, czy Twój sposób jest podobny do mojego i czy mój styknie? Rzuć okiem w wolnej chwili bo jestem bardzo ciekawy

Twój sposób lepiej uŻywa tablicy z id broni. Ja usunąłem to całkowicie i jest więcej pisania. I nie dałem możliwości ustawiania dmg :/

Jakby nie patrzeć sposoby się różnią. Głównie tym, że mój uwzględnia łatwą możliwość edycji poziomów, Twój tutaj niestety leży... Oba są w jakiś sposób dobre :)
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#18 oeN.

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 12.04.2015 21:43

public fwItemDeploy(wpn){
    static id;
    id = entity_get_edict(wpn, EV_ENT_owner)
    new weapon = cs_get_weapon_id(wpn)
    
    if (id > 32 || id < 1)
        return HAM_IGNORED;
    
    new idWeapon = idBroni(weapon);
    if ( idWeapon && hasWeapon[id] & (1<<weapon) ) { // Sprawdzamy czy bron nas interesuje i czy gracz posiada dana bron, tutaj równiez odsylam do operacji bitowych jesli nie rozumiesz... Wyglada to troche jak sprawdzanie czy gracz ma podana flage
        entity_set_string(id, EV_SZ_viewmodel, ModeleBroni[idWeapon])
    }
    
    return HAM_HANDLED;
}

 

Nie ma modelu złotego, coś przeoczyłem?


  • +
  • -
  • 0

#19 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 13.04.2015 10:42

Upewnij się, czy return jest prawidłowy. Wyrzuć go na moment (olej warningi) i sprawdź co wtedy.


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#20 oeN.

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 95
Zaawansowany

  • Postów:294
  • Lokalizacja:Dom
Offline

Napisano 13.04.2015 14:37

Nic. Nie działa, dalej błędy.
 
L 04/13/2015 - 15:36:39: Start of error session.
L 04/13/2015 - 15:36:39: Info (map "zm_compilation") (file "addons/amxmodx/logs/error_20150413.log")
L 04/13/2015 - 15:36:39: [AMXX] Displaying debug trace (plugin "reborn_system.amxx", version "1.0")
L 04/13/2015 - 15:36:39: [AMXX] Run time error 4: index out of bounds
L 04/13/2015 - 15:36:39: [AMXX]    [0] reborn_system.sma::DajBonus (line 234)
L 04/13/2015 - 15:36:39: [AMXX]    [1] reborn_system.sma::Odrodzenie (line 241)
@Edit
Gracz w pewnym momencie gdy się odrodził dostał M4 jako złotą broń ale nic więcej, powinien też mieć USP jednak nic.
  • +
  • -
  • 0




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

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