Sveiki,
seniau kapščiausi šitu reikalu, gavau šiek tiek pagalbos, bet man vis tiek vis kažkas neveikia arba nemoku pasidaryti. Neatvaizduoja visko to kaip norėjau, kai sukraunu iš mysql viskas išsimeto 1, 3, 7 id. ir pan. nors norėčiau kad sukrautų 1,2, t.t. Nežinau pataisykit, padėkit ką blogai pasidaręs čia esu, pasiduodu. :D
Sąrašas
YCMD:itarimai(playerid,params[], help)
{
new bigstring[700],str[120];
for(new i; i < sizeof(itarimas); i++)
{
if(!itarimas[i][used]) continue;
format(str,sizeof(str),"{4a7ccf}%i{ffffff}. %s, {4a7ccf}%i\n", i+1, itarimas[i][alleg], itarimas[i][allegs]);
strcat(bigstring,str);
}
if(isnull(bigstring)) return SendError(playerid, "nėra sukurtų įtarimų !");
ShowPlayerDialog(playerid,950,DIALOG_STYLE_LIST,"Nr. / įtarimas / bauda",bigstring,"Pasirinkti","Išeiti");
return 1;
}
Sukūrimas
YCMD:itarimas(playerid, params[], help)
{
new eSlot = -1;
if(sscanf(params, "is[30]", params[0], params[1])) return SendError(playerid, "/addalleg įtarimo lygis priežastis ( iki 30 simbolių ).");
if(params[0] > 50) return SendError(playerid, "įvestas per didelis įtarimo lygis !");
if(strlen(params[1]) > 30) return SendError(playerid, "įvesta per daug simbolių !");
for(new i; i < 15; i++)
{
if(!itarimas[i][used])
{
eSlot = i;
break;
}
}
if(eSlot == -1) return SendError(playerid, "nėturiu kur įrašyti!");
itarimas[eSlot][used] = true;
itarimas[eSlot][allegs] = params[0];
format(itarimas[eSlot][alleg], 30, "%s", params[1]);
format(g_szBuffer, sizeof g_szBuffer,
"INSERT INTO "MySQL_ALLEGATIONS_TABLE" \
\
(pavadinimas, \
skaicius) \
\
VALUES \
('%s', '%i')", \
params[1],
params[0]);
mysql_query(g_szBuffer);
SendClientMessage(playerid, -1, "{4a7ccf}•{ffffff} sukurtas įtarimas");
format(zinute, 148, " '{4a7ccf}%s{ffffff}', įtarimo lygiai '{4a7ccf}%i{ffffff}' !", params[1], params[0]);
SendClientMessage(playerid, -1, zinute);
return 1;
}
Policijos darbuotojo naudojimas:
YCMD:itarti(playerid,params[], help)
{
new id, Float:Coo[3];
if(sscanf(params, "u", id)) return SendError(playerid, "naudojimas: /itarti Vardas_Pavarde/ID !");
if(id == INVALID_PLAYER_ID) return SendError(playerid, "tokio žaidėjo nėra !");
//if(id == playerid) return SendError(playerid, "savęs įtarti negalima");
if(GetPlayerWantedLevel(id) >= 100) return SendError(playerid, "žaidėjas jau per daug nusikaltęs !");
GetPlayerPos(id, Coo[0], Coo[1], Coo[2]);
if(!IsPlayerInRangeOfPoint(playerid, 10.0, Coo[0], Coo[1], Coo[2])) return SendError(playerid, "žaidėjas per toli nuo jūsų !");
new bigstring[700],str[120];
for(new i; i < sizeof(itarimas); i++)
{
if(!itarimas[i][used]) continue;
format(str,sizeof(str),"{4a7ccf}%i{ffffff}. %s, {4a7ccf}%i\n", i+1, itarimas[i][alleg], itarimas[i][allegs]);
strcat(bigstring,str);
}
if(isnull(bigstring)) return SendError(playerid, "nėra sukurtų įtarimų !");
ShowPlayerDialog(playerid,951,DIALOG_STYLE_LIST,"Nr. / įtarimas / bauda",bigstring,"Pasirinkti","Išeiti");
spId[playerid] = id;
return 1;
}
Later.... in dialogs
if(dialogid == 951)
{
if(!response)
{
spId[playerid] = INVALID_PLAYER_ID;
}
else
{
new id = spId[playerid], Float:Coo[3];
if(id == INVALID_PLAYER_ID) return SendError(playerid, "tokio žaidėjo nėra !"), spId[playerid] = INVALID_PLAYER_ID;
if(GetPlayerWantedLevel(id) >= 100) return SendError(playerid, "žaidėjas jau per daug nusikaltęs !");
GetPlayerPos(id, Coo[0], Coo[1], Coo[2]);
if(!IsPlayerInRangeOfPoint(playerid, 10.0, Coo[0], Coo[1], Coo[2])) return SendError(playerid, "žaidėjas per toli nuo jūsų !");
format(zinute, 148, "{4a7ccf}•{ffffff} buvote įtartas pareigūno {4a7ccf}%s{ffffff}, už {4a7ccf}%s{ffffff}, {4a7ccf}%i{ffffff} lygiu !", getName(playerid), itarimas[listitem][alleg], itarimas[listitem][allegs]);
SendClientMessage(id,-1, zinute);
format(zinute, 148, "{4a7ccf}•{ffffff} įtarėte {4a7ccf}%s{ffffff}, už {4a7ccf}%s{ffffff}, {4a7ccf}%i{ffffff} lygiu !", getName(id), itarimas[listitem][alleg], itarimas[listitem][allegs]);
SendClientMessage(id,-1, zinute);
SetPlayerWantedLevel(id, GetPlayerWantedLevel(id) + itarimas[listitem][allegs]);
}
}
if(dialogid == 952)
{
if(response)
{
switch(listitem)
{
case 0:
{
SendSucces(playerid, "įtarimo pavadinimo keitimas.");
format(zinute, 500, "{ffffff}Redaguojamas '{4a7ccf}%s{ffffff}' įtarimas, keičiamas pavadinimas. ", itarimas[spList[playerid]][alleg]);
ShowPlayerDialog(playerid, 953, DIALOG_STYLE_INPUT, "Įtarimo redagavimas", zinute, "Rinktis", "išeiti");
spListAction[playerid] = 1;
}
case 1:
{
SendSucces(playerid, "įtarimų lygio keitimas.");
format(zinute, 500, "{ffffff}Redaguojamas '{4a7ccf}%s{ffffff}' įtarimas, keičiama įtarimo lygiai, dabartiniai įtarimo lygiai {4a7ccf}%i{ffffff}.", itarimas[spList[playerid]][alleg], itarimas[spList[playerid]][allegs]);
ShowPlayerDialog(playerid, 953, DIALOG_STYLE_INPUT, "Įtarimo redagavimas", zinute, "Rinktis", "išeiti");
spListAction[playerid] = 2;
}
case 2:
{
SendWarn(playerid, "įtarimas ištrintas.");
format(g_szBuffer,128,"DELETE FROM `"MySQL_ALLEGATIONS_TABLE"` WHERE pavadinimas='%s'",itarimas[spList[playerid]][alleg]);
mysql_query(g_szBuffer);
itarimas[spList[playerid]][used] = false;
itarimas[spList[playerid]][allegs] = 0;
format(itarimas[spList[playerid]][alleg], 30, " - ");
}
}
}
}
if(dialogid == 953)
{
if(response)
{
switch(spListAction[playerid])
{
case 1:
{
if(strlen(inputtext) > 30) return SendError(playerid, "įvesta per daug simbolių > 30 !");
format(zinute, 148, "{4a7ccf}•{ffffff} pakeitėt '{4a7ccf}%s{ffffff}' įtarimo pavadinimą į '{4a7ccf}%s{ffffff}' !", itarimas[spList[playerid]][alleg], inputtext);
SendClientMessage(playerid,-1, zinute);
format(itarimas[spList[playerid]][alleg], 30, "%s", inputtext);
}
case 2:
{
if(!IsNumeric(inputtext)) return SendError(playerid, "galima naudoti tik skaičius !");
new kiek = strlen(inputtext);
if(kiek < 0) return SendError(playerid, "negalima naudoti minusinių reikšmių !");
if(kiek > 50) return SendError(playerid, "negalima naudoti reikšmių > 50 !");
format(zinute, 148, "{4a7ccf}•{ffffff} pakeitėt '{4a7ccf}%s{ffffff}' įtarimo lygius į '{4a7ccf}%s{ffffff}' !", itarimas[spList[playerid]][alleg], inputtext);
SendClientMessage(playerid,-1, zinute);
itarimas[spList[playerid]][allegs] = strval(inputtext);
}
}
}
}
Enums, load, shit:
enum itarimai
{
bool:used,
alleg[30],
allegs
}
new itarimas[15][itarimai];
stock loadItarimai()
{
mysql_query("SELECT * FROM `"MySQL_ALLEGATIONS_TABLE"` WHERE `id` < '15'");
mysql_store_result();
new buffer[31], id;
while(mysql_fetch_row_format(buffer, "|"))
{
printf("Buffer:%s", buffer); // Jei pažiūrėsi, pamatysi kad jame dabar yra visų stulpelių reikšmės atskirtos simboliu |
sscanf(buffer, "p<|>is[30]i", id, itarimas[id][alleg], itarimas[id][allegs]);
// Tarp [] turi įrašyti alleg dydį.
itarimas[id][used] = true;
id++;
}
mysql_free_result();
return 1;
}
Please help guys.
Bebras prieš 9 metus
Juk sakiau jau kad taip yra nes krauni į "id" indeksą, jei nori iš eilės:
stock loadItarimai()
{
mysql_query("SELECT * FROM `"MySQL_ALLEGATIONS_TABLE"` WHERE `id` < '15'");
mysql_store_result();
new buffer[31], id;
while(mysql_fetch_row_format(buffer, "|"))
{
sscanf(buffer, "p<|>{i}s[30]i", itarimas[id][alleg], itarimas[id][allegs]);
itarimas[id][used] = true;
id++;
}
mysql_free_result();
return 1;
}
Bit prieš 9 metus
Gaila, padėti nežinau kaip, bet turiu prašymą, gal galėtum pasidalinti/kažkaip man atsiųsti progress bar'ų filterscript ir include ? Nes nelabai randu pats.. :)
Funkis prieš 9 metus
Spėju paskutinis klausimas dabar jau :D
Kaip išvengti šito, kai ištryniau pvz. 1, saraše liko 2, 3t.t. tai jei naikinčiau kai būtų 20, 15 įtarimą, eitų taip 14,16. Kaip šito išvengti?
Bebras prieš 9 metus
Arba ištrynus ką nors iš vidurio, patrauk visus į šoną kad neliktų tarp:
YCMD:delete(playerid, params[], help)
{
new index;
if(sscanf(params, "i", index))
return SendClientMessage(playerid, -1, "Naudojimas /delete indeksas.");
for(new i = index; i < sizeof(itarimas)-1; i++)
itarimas[ i ] = itarimas [ i +1 ];
itarimas[ sizeof(itarimas)-1 ][ used ] = false;
return 1;
}
ARBA tiesiog rodydamas sąrašą naudok ne i... -_- Negi taip sunku pagalvoti?
YCMD:itarimai(playerid,params[], help)
{
new bigstring[700],str[120], numeris;
for(new i; i < sizeof(itarimas); i++)
{
if(!itarimas[i][used]) continue;
format(str,sizeof(str),"{4a7ccf}%i{ffffff}. %s, {4a7ccf}%i\n",numeris++, itarimas[i][alleg], itarimas[i][allegs]);
strcat(bigstring,str);
}
if(isnull(bigstring)) return SendError(playerid, "nėra sukurtų įtarimų !");
ShowPlayerDialog(playerid,950,DIALOG_STYLE_LIST,"Nr. / įtarimas / bauda",bigstring,"Pasirinkti","Išeiti");
return 1;
}
Funkis prieš 9 metus
Aš trinu šitaip:
if(dialogid == 952)
{
if(response)
{
switch(listitem)
{
case 0:
{
SendSucces(playerid, "įtarimo pavadinimo keitimas.");
format(zinute, 500, "{ffffff}Redaguojamas '{4a7ccf}%s{ffffff}' įtarimas, keičiamas pavadinimas. ", itarimas[spList[playerid]][alleg]);
ShowPlayerDialog(playerid, 953, DIALOG_STYLE_INPUT, "Įtarimo redagavimas", zinute, "Rinktis", "išeiti");
spListAction[playerid] = 1;
}
case 1:
{
SendSucces(playerid, "įtarimų lygio keitimas.");
format(zinute, 500, "{ffffff}Redaguojamas '{4a7ccf}%s{ffffff}' įtarimas, keičiama įtarimo lygiai, dabartiniai įtarimo lygiai {4a7ccf}%i{ffffff}.", itarimas[spList[playerid]][alleg], itarimas[spList[playerid]][allegs]);
ShowPlayerDialog(playerid, 953, DIALOG_STYLE_INPUT, "Įtarimo redagavimas", zinute, "Rinktis", "išeiti");
spListAction[playerid] = 2;
}
case 2:
{
SendWarn(playerid, "įtarimas ištrintas.");
format(g_szBuffer,128,"DELETE FROM `"MySQL_ALLEGATIONS_TABLE"` WHERE pavadinimas='%s'",itarimas[spList[playerid]][alleg]);
mysql_query(g_szBuffer);
itarimas[spList[playerid]][used] = false;
itarimas[spList[playerid]][allegs] = 0;
format(itarimas[spList[playerid]][alleg], 30, " - ");
}
}
}
}
Bebras prieš 9 metus
O, dabar tik į juos pažiūrėjau. Ne neveiks, nes tu OnDialogResposne daug kur naudoji listitem kaip indeksą, o kad tai veiktų visi elementai masyve turi eiti iš eilės. Vis dėl to tau reikia to pirmojo kodo trinant.
Bebras prieš 9 metus
Paimkim elementarų pavyzdį. Tarkime turime masyvą su tokiais skaičiais:
14|21|34|78|936|74
Sakykime pašalinam skaičių "34". Kad ten neliktų skylė, visus elementus patrauksime į kairę. Tai yra 4 elementas bus 3, 5 taps 4, o 6 taps 5.
14|21|78|936|74
Mano tas kodas būtent tai ir padaro. Viską pradedant nuo indekso kuriuo norime atsikratyti, perkelia į kairę.
Funkis prieš 9 metus
SendWarn(playerid, "įtarimas ištrintas.");
format(g_szBuffer,128,"DELETE FROM `"MySQL_ALLEGATIONS_TABLE"` WHERE pavadinimas='%s'",itarimas[spList[playerid]][alleg]);
mysql_query(g_szBuffer);
for(new i = spList[playerid]; i < sizeof(itarimas)-1; i++)
itarimas[ i ] = itarimas [ i +1 ];
itarimas[ sizeof(itarimas)-1 ][ used ] = false;
Tai šitaip tada turi būt?
Funkis prieš 9 metus
Yep, it work's. Ačiū. Vėliau dar reikės pagalbos su mysql, nes iš senai labai esu pastebėjęs klaidų su prisijungimų.