Dodanie if'u.
Black004
09.04.2019
Witam, mój problem polega na tym że nie wiem jak dodać if, pokaże kod będzie mi łatwiej wytłumaczyć.
public AllSkins(){ new Line[128], Data[5][48], Len; allSkins++; if(file_exists("addons/amxmodx/configs/csgo/skins.cfg")) { for(new i; i < file_size("addons/amxmodx/configs/csgo/skins.cfg", 1); i++) { read_file("addons/amxmodx/configs/csgo/skins.cfg", i, Line, charsmax(Line), Len); if(strlen(Line) < 5 || Line[0] == ';') continue; parse(Line, Data[0], charsmax(Data[]), Data[1], charsmax(Data[]), Data[2], charsmax(Data[]), Data[3], charsmax(Data[]), Data[4], charsmax(Data[])); skinWeaponid[allSkins] = str_to_num(Data[0]); copy(skinName[allSkins], charsmax(skinName), Data[1]); if(ValidMdl(Data[2])) { precache_model(Data[2]); copy(skinModelsPath[allSkins], charsmax(skinModelsPath), Data[2]); } skinChanceDrop[allSkins] = str_to_num(Data[3]); greenCase[allSkins] = str_to_num(Data[4]); allSkins++; } } }
Mam tu kod na ustawianie id skina nazwy itd. A tutaj jest kod na otwieranie skrzynki:
public chestOpen3(id) { new rWeapon = random_num(1, allSkins); new rNum = random_num(1, 100); if(skinChanceDrop[rWeapon]>= rNum) { if(40 >= random_num(1, 100)) { new Name[33]; get_user_name(id, Name, charsmax(Name)); playerSkin[rWeapon][id]++; playerOpenChest[id]++; ColorChat(0, TEAM_COLOR, "[CS:GO]^x01 Gracz^x04 %s^x01 otworzył skrzynie AWP + KNIFE. Wydropil^x03 %s^x01 Gratulacje! :)", Name, skinName[rWeapon]); MsgToLog("[CS:GO] %s znalazl w skrzyni AWP + KNIFE %s", Name, skinName[rWeapon]); menuCore(id); } else { ColorChat(id, GREEN, "[CSGO:MOD]^x03 Skrzynka AWP + KNIFE byla PUSTA!"); menuCore(id); } } else chestOpen3(id); }
Jak dodać w nim że tylko skin który ma właśnie np: 1 czyli ma budowe "id skina" "nazwa" "sciezka" "szansa na drop" "i tutaj ta 1" tylko on będzie mógł wydropić z tej skrzynki próbowałem sam dodać, ale coś nie działa Próbowałem zrobić przez właśnie tego if'a np. "if(Case[rWeapon] == 1)" Ale to nie działało lub może w złym miejscu dodałem.
Użytkownik Black004 edytował ten post 09.04.2019 22:54
Black004
10.04.2019
W pierwszym poście zamisat
greenCase[allSkins] = str_to_num(Data[4]);
Miało być:
Case[allSkins] = str_to_num(Data[4]);
Rivit
10.04.2019
Nie można dać szansy na 100 i żadnych innych skinów w tej skrzynce?
Nie do końca rozumiem pytania - wyjaśnij bardziej.
Black004
10.04.2019
Nie można dać szansy na 100 i żadnych innych skinów w tej skrzynce?
Nie do końca rozumiem pytania - wyjaśnij bardziej.
Mam skiny które są zapisywane w pliku. Chce dodać skrzynke z której będą dropić tylko te skiny które mają nazwe skrzynki z której dropią w swojej tak budowie czyli:
Ten skin nie będzie dropił w mojej skrzyni:
"26" "Deagle - Blaze" "models/csgo/v_deagle_blaze.mdl" "15"
Ale ten już bedzię bo ma w nazwie nazwę skrzynki z której ma dropić:
"18" "AWP - Hawking" "models/csgo/v_awp_hawking.mdl" "10" "SkrzynkaAWPKNIFE"
I jak zedytować ten kod żeby dropiło tylko skiny z właśnie tą nazwą?
Wiem że to "Case[allSkins] = str_to_num(Data[4]);" Trzeba usunąć i zmienic na coś innego bo to tylko czyta liczby nie nazwy skrzynek.
public chestOpen3(id) { new rWeapon = random_num(1, allSkins); new rNum = random_num(1, 100); if(skinChanceDrop[rWeapon]>= rNum) { if(40 >= random_num(1, 100)) { new Name[33]; get_user_name(id, Name, charsmax(Name)); playerSkin[rWeapon][id]++; playerOpenChest[id]++; ColorChat(0, TEAM_COLOR, "[CS:GO]^x01 Gracz^x04 %s^x01 otworzył skrzynie AWP + KNIFE. Wydropil^x03 %s^x01 Gratulacje! :)", Name, skinName[rWeapon]); MsgToLog("[CS:GO] %s znalazl w skrzyni AWP + KNIFE %s", Name, skinName[rWeapon]); menuCore(id); } else { ColorChat(id, GREEN, "[CSGO:MOD]^x03 Skrzynka AWP + KNIFE byla PUSTA!"); menuCore(id); } } else chestOpen3(id); }
Użytkownik Black004 edytował ten post 10.04.2019 20:22
Black004
11.04.2019
Czyli ten system obecny nie ma w ogóle podziału na skrzynki tak?
Jest, już zrobiłem nową skrzynke i klucz do niej i się ładnie wszystko zapisuję chce teraz, albo zrobić nowy plik do każdej skrzyn z jakiej skrzyni ma dropic jaki skin lub juź do istniejącego własnie dodać to. I właśnie nie wiem jak dodać żeby dany skin który ma coś dopisane na końcu np. SKRZYNKAAWPKNIFE:
"18" "AWP - Hawking" "models/csgo/v_awp_hawking.mdl" "10" "SkrzynkaAWPKNIFE"
Tylko on będzie dropił z danej skrzyni.
Black004
11.04.2019
Próbowałem po prostu zrobić nowy plik który będzie zapisywał dane skiny do danej skrzynki, ale wtedy się jakoś psuło i skiny z danej skrzynki dropiły w innych
Użytkownik Black004 edytował ten post 11.04.2019 19:38
Rivit
11.04.2019
zamiast stringa możesz wczytywać liczbe
Czyli np zakladasz se ze twoja awp case jest numerem jeden
reszte domyslnie niech mają zero.
I juz masz elegansio
Black004
11.04.2019
Czyli w ChestOpen3 mam zrobić tak?
public chestOpen3(id) { new rWeapon = random_num(1, allSkins); new rNum = random_num(1, 100); if(skinChanceDrop[rWeapon]>= rNum && Case[rWeapon] == 1) { if(40 >= random_num(1, 100)) { new Name[33]; get_user_name(id, Name, charsmax(Name)); playerSkin[rWeapon][id]++; playerOpenChest[id]++; ColorChat(0, TEAM_COLOR, "[CS:GO]^x01 Gracz^x04 %s^x01 otworzył skrzynie AWP + KNIFE. Wydropil^x03 %s^x01 Gratulacje! :)", Name, skinName[rWeapon]); MsgToLog("[CS:GO] %s znalazl w skrzyni AWP + KNIFE %s", Name, skinName[rWeapon]); menuCore(id); } else { ColorChat(id, GREEN, "[CSGO:MOD]^x03 Skrzynka AWP + KNIFE byla PUSTA!"); menuCore(id); } } else chestOpen3(id); }
A w tym tak?
public AllSkins(){ new Line[128], Data[5][48], Len; allSkins++; if(file_exists("addons/amxmodx/configs/csgo/skins.cfg")) { for(new i; i < file_size("addons/amxmodx/configs/csgo/skins.cfg", 1); i++) { read_file("addons/amxmodx/configs/csgo/skins.cfg", i, Line, charsmax(Line), Len); if(strlen(Line) < 5 || Line[0] == ';') continue; parse(Line, Data[0], charsmax(Data[]), Data[1], charsmax(Data[]), Data[2], charsmax(Data[]), Data[3], charsmax(Data[]), Data[4], charsmax(Data[])); skinWeaponid[allSkins] = str_to_num(Data[0]); copy(skinName[allSkins], charsmax(skinName), Data[1]); if(ValidMdl(Data[2])) { precache_model(Data[2]); copy(skinModelsPath[allSkins], charsmax(skinModelsPath), Data[2]); } skinChanceDrop[allSkins] = str_to_num(Data[3]); Case[allSkins] = str_to_num(Data[4]); allSkins++; } } }
Black004
11.04.2019
Tak, działa wszystko. Dzięki za pomoc, dobrze że wspomniałeś ze reszta ma mieć np. domyślnie 0, poniewaz to pomijałem i się bugowało
Rivit
11.04.2019
Tak, ale radze Ci - zrób se enum z ze skrzynkami bo sie pogubisz potem
enum _:kTypes{ DEFAULT_CASE = 0, AWP_CASE, DEAGLE_CASE }
Myśle, że ogarniesz