Czytanie map z pliku - pętla
Scorpion Flail
28.08.2013
Witam. Mam taki kod:
new sniperlevel = g_PlayerBadges[id][BADGE_SNIPER]; if ( sniperlevel ) { if ( random_num(1, (4-sniperlevel)) == 1 ) { new weaponName[32]; new weaponID = get_user_weapon(id); new file[128]; new map[32]; get_configsdir( file, 127 ) format(file,127,"%s/odznaki/scout.ini",file) new line=0,text[128],chars line = read_file(file,line,text,127,chars) trim(text); get_mapname(map,31); trim(text); if(equali(map,text)) { ColorChat(id,RED,"Scout zablokowany na tej mapie"); givenitem = false; } else { fm_give_item(id, "weapon_scout"); givenitem = true; } if ( weaponID ) { get_weaponname(weaponID, weaponName, charsmax(weaponName)); engclient_cmd(id, weaponName); } } }
Obecnie jest tak, że czyta tylko 1-szą mapę z pliku. Na innych robi jakby nie były dodane do pliku.
Próbowałem z do/while, jednak wtedy na 1 mapie wykonywało co chciałem, a na kolejnych robilo 2 rzeczy: pokazywało tekst i dawało scouta.
Nie wiem już w jaki sposób to zapisać, proszę o pomoc.
Scorpion Flail
28.08.2013
Tak to teraz wygląda:
if ( sniperlevel ) { if ( random_num(1, (4-sniperlevel)) == 1 ) { new weaponName[32]; new weaponID = get_user_weapon(id); new g_MapName[32]; get_mapname(g_MapName, charsmax(g_MapName)); new g_Path[128]; formatex(g_Path[ get_configsdir(g_Path, charsmax(g_Path)) ], charsmax(g_Path), "/codmod_mapy.ini"); new g_Line[128], g_Len; for(new i = 0; read_file(g_Path, i, g_Line, charsmax(g_Line), g_Len); i++) { if(!g_Len || !g_Line[0] || g_Line[0] == ';') { continue; } trim(g_Line); if(equal(g_MapName, g_Line)) { ColorChat(id,RED,"Scout zablokowany na tej mapie"); givenitem = false; } else { fm_give_item(id, "weapon_scout"); givenitem = true; } } if ( weaponID ) { get_weaponname(weaponID, weaponName, charsmax(weaponName)); engclient_cmd(id, weaponName); } } }
Nie jestem pewien czy tego else miałem też objąć i gdzie dać break: po pokazaniu tekstu czy po wykonaniu else?
speedkill
28.08.2013
formatex(g_Path[ get_configsdir(g_Path, charsmax(g_Path)) ], charsmax(g_Path), "/codmod_mapy.ini");->
formatex(g_Path[ get_configsdir(g_Path, charsmax(g_Path)) ], charsmax(g_Path), "/odznaki/scout.ini");
if(equal(g_MapName, g_Line)) { ColorChat(id,RED,"Scout zablokowany na tej mapie"); givenitem = false; }->
if(equal(g_MapName, g_Line)) { ColorChat(id,RED,"Scout zablokowany na tej mapie"); givenitem = false; break; }
Scorpion Flail
28.08.2013
Kod wygląda tak:
if ( sniperlevel ) { if ( random_num(1, (4-sniperlevel)) == 1 ) { new weaponName[32]; new weaponID = get_user_weapon(id); new g_MapName[32]; get_mapname(g_MapName, charsmax(g_MapName)); new g_Path[128]; formatex(g_Path[ get_configsdir(g_Path, charsmax(g_Path)) ], charsmax(g_Path), "/odznaki/scout.ini"); new g_Line[128], g_Len; for(new i = 0; read_file(g_Path, i, g_Line, charsmax(g_Line), g_Len); i++) { if(!g_Len || !g_Line[0] || g_Line[0] == ';') { continue; } trim(g_Line); if(equal(g_MapName, g_Line)) { ColorChat(id,RED,"Scout zablokowany na tej mapie"); givenitem = false; break; } else { fm_give_item(id, "weapon_scout"); givenitem = true; } } if ( weaponID ) { get_weaponname(weaponID, weaponName, charsmax(weaponName)); engclient_cmd(id, weaponName); } } }
Jest nadal jak było tzn:
na 1. mapie w pliku działa prawidłowo, jednak na kolejnych:
robi 2x rzeczy na raz, tj pokazuje colorchat i daje scouta jednocześnie
Plik z mapami:
scout.ini 40 bajtów 16 Ilość pobrań
G[o]Q
19.09.2013
no bo rak napisales kod zeby to robil
mapa de_dust
a w pliku masz de_dust i inferno wiec przy pierwszym razie pisze ze zablokowany scout ale przy nastepnym juz nie bo grasz dusta a czytasz inferno zrob sobie osobna funkcje do sprawdzania czy dana mapa ma zablokowanego scouta i sprawdzaj to w plugin_init i ustawiaj jakąś zmienna globalną i na jej podstawie zrob warunek