Indeks tablicy odpowiedni do zmiennej gracza.
oeN.
08.04.2015
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
Rivit
08.04.2015
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)
oeN.
08.04.2015
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.
Rivit
08.04.2015
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
oeN.
08.04.2015
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
Rivit
08.04.2015
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
oeN.
09.04.2015
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
oeN.
12.04.2015
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
Rivit
12.04.2015
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
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
Ł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; }
oeN.
12.04.2015
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?
Rivit
12.04.2015
Tak, ale ja bym dodał nawias jeszcze dla pewności..
bronie_gracza[id] |= ((1<<CSW_M249)|(1<<CSW_G3SG1)|(1<<CSW_SG550))
GwynBleidD
12.04.2015
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ć.
oeN.
12.04.2015
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
Rivit
12.04.2015
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
GwynBleidD
12.04.2015
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ć <=.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?
Pod linią 271 dodaj warunek: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)
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].
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 dobreGwyn, 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
oeN.
12.04.2015
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?
GwynBleidD
13.04.2015
Upewnij się, czy return jest prawidłowy. Wyrzuć go na moment (olej warningi) i sprawdź co wtedy.
oeN.
13.04.2015
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.