Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: Paul Castellano poslato Februar 08, 2018, 09:59:46 PRE PODNE

Naslov: MySQL + Dialog
Poruka od: Paul Castellano poslato Februar 08, 2018, 09:59:46 PRE PODNE
Detaljan opis problema:
Pozdrav svima,

Želim napraviti da igrač može sa komandom provjeriti sve kuće koje su na prodaju na serveru i locirati ih klikom na nju.Ispis dialoga sam odradio i sve ja kako i treba,no ne znam kako ću napraviti da locira tu kuću,odnosno kako ću znati koju kuću želi locirati( U dialogu,jasno)
Dio skripte:
[pawn]mysql_tquery( MySQL, "SELECT Level, Cijena, Vrsta , ID FROM `kuce` WHERE ProveraVlasnika = '0' ORDER BY `Cijena` DESC LIMIT 10", "LoadFreeHouse", "i", playerid );[/pawn]

[pawn]forward LoadFreeHouse( playerid );
public LoadFreeHouse( playerid )
{
   new
      name[25], level, price, str[ 512 ],id;

   format(str, sizeof(str), "{FFC50A}ID\t{FFC50A}Vrsta kuce\t{FFC50A}Cijena\t{FFC50A}Level\n");
    for(new i =0; i < cache_num_rows(); i++)
    {
      cache_get_field_content(i, "Vrsta", name, MySQL, 24);
        price = cache_get_field_content_int(i,"Cijena");
        level = cache_get_field_content_int(i,"Level");
        id = cache_get_field_content_int(i,"ID");
        format(str, sizeof(str), "%s%d\t{2ECC71}%s\t%d\t%d\n", str,id , name, price , level);

   }
   AC_ShowPlayerDialog(playerid, DIALOG_FREEHOUSE, DIALOG_STYLE_TABLIST_HEADERS, "{FFC50A}Kuce: {FFFFFF}na prodaju", str, "Lociraj", "");
}[/pawn]


Neke slike/video za lakse dobivanje pomoci(neobavezno):
Ispis:
(https://i.imgur.com/ovHuq59.png)

Sada kada kliknem na kuću ID 168(Odnosno druga opcija) kako bi trebao napraviti lociranje?
Nisam nikad takve stvari pokušavao pa nemam baš iskustva i nemam nikakvu ideju kako bi se to moglo odraditi
Naslov: Odg: MySQL + Dialog
Poruka od: Łuk@ poslato Februar 08, 2018, 10:33:14 PRE PODNE
Od tod id kuce (to id 277 pretpostavljam da je id kuce, samo primjer inc), uzmes i kreiras 3 float varijable i getas poziciju od te kuce u te 3 varijable, i stavis checkpoint ako me kontas, valjda sam ja dobro skontao sta zelis
Naslov: Odg: MySQL + Dialog
Poruka od: Paul Castellano poslato Februar 08, 2018, 10:36:51 PRE PODNE
Citat: Łukmember=1996][/member] link=topic=119484.msg817708#msg817708 date=1518082394]
Od tod id kuce (to id 277 pretpostavljam da je id kuce, samo primjer inc), uzmes i kreiras 3 float varijable i getas poziciju od te kuce u te 3 varijable, i stavis checkpoint ako me kontas, valjda sam ja dobro skontao sta zelis


Ne znam jesi li gledao kod uopće.Lista se učitava iz baze i uzima Kuće koje su na prodaju(Odnosno ProveraVlasnika = 0) što znači da ako netko kupi tu kuću ,ta kuća neće biti na listi.(Logično).Što znači da redoslijed nikad neće biti isti i IDovi su ovdje kao primjer.

Naslov: Odg: MySQL + Dialog
Poruka od: Łuk@ poslato Februar 08, 2018, 10:38:45 PRE PODNE
On uzima id onoga sto si kliknuo a ne uvijek 277, tako da nema veze sto se lista mijenja
Naslov: Odg: MySQL + Dialog
Poruka od: Paul Castellano poslato Februar 08, 2018, 10:40:45 PRE PODNE
Citat: Łukmember=1996][/member] link=topic=119484.msg817721#msg817721 date=1518082725]
On uzima id onoga sto si kliknuo a ne uvijek 277, tako da nema veze sto se lista mijenja

Ne znam što točno misliš,možeš li dati neki primjer koda kako si ti zamislio?Ja nemam ideje kako ću iskoristiti taj ID (kada klikne na njega)
Naslov: Odg: MySQL + Dialog
Poruka od: Slade poslato Februar 08, 2018, 10:45:00 PRE PODNE
Dakle float ti odlično obavlja posao, ali ne znaš rasporedit dinamiku listitema? Je li to u pitanju?
Naslov: Odg: MySQL + Dialog
Poruka od: Paul Castellano poslato Februar 08, 2018, 10:46:29 PRE PODNE
Citat: Slade poslato Februar 08, 2018, 10:45:00 PRE PODNE
Dakle float ti odlično obavlja posao, ali ne znaš rasporedit dinamiku listitema? Je li to u pitanju?

Da ;)
Naslov: Odg: MySQL + Dialog
Poruka od: Slade poslato Februar 08, 2018, 10:50:45 PRE PODNE
[pawn]#define MAX_LISTITEMS 30 // Uredi sebi
new P_ListItem[ MAX_PLAYERS ][ MAX_LISTITEMS ];[/pawn]

[pawn]stock ClearListItem( playerid ) { //Briše unesene vrijednosti u var
   for(new i = 0; i < MAX_LISTITEMS; i++) P_ListItem[ playerid ][ i ] = -1;
}
stock AddListItem( playerid, number ) { //Unosi ih
   for(new i = 0; i < MAX_LISTITEMS; i++) {
      if(P_ListItem[ playerid ][ i ] == -1) {
            P_ListItem[ playerid ][ i ] = number;
            break;
      }
   }
}[/pawn]

Korištenje:
[pawn]LociraKucu[ playerid ] = P_ListItem[ playerid ][ listitem ]; // Output: ID Kuće koju si stavio kroz for petlju[/pawn]

Unošenje u var:
[pawn]ClearListItem( playerid );
for(new i = 1; i < MAX_LISTITEMS; i++) AddListItem( playerid, i );[/pawn]

Dakle ti to prilagodi svojoj for petlji, tačnije, drugi parametar u AddListItem treba biti ID kuće, a pod 'Korištenje', što sam stavio kao LociraKucu[ playerid ] uzima ID kuće sa tog listitema, znači samo uzmeš koordinate te kuće i deri.

Btw ovo odlično radi, nisam tek sad napravio, nego služi dugo vremena na Disaronno modu kod dinamike.
Naslov: Odg: MySQL + Dialog
Poruka od: Łuk@ poslato Februar 08, 2018, 10:51:42 PRE PODNE
Citat: Slade poslato Februar 08, 2018, 10:50:45 PRE PODNE
[pawn]#define MAX_LISTITEMS 30 // Uredi sebi
new P_ListItem[ MAX_PLAYERS ][ MAX_LISTITEMS ];[/pawn]

[pawn]stock ClearListItem( playerid ) { //Briše unesene vrijednosti u var
   for(new i = 0; i < MAX_LISTITEMS; i++) P_ListItem[ playerid ][ i ] = -1;
}
stock AddListItem( playerid, number ) { //Unosi ih
   for(new i = 0; i < MAX_LISTITEMS; i++) {
      if(P_ListItem[ playerid ][ i ] == -1) {
            P_ListItem[ playerid ][ i ] = number;
            break;
      }
   }
}[/pawn]

Korištenje:
[pawn]LociraKucu[ playerid ] = P_ListItem[ playerid ][ listitem ]; // Output: ID Kuće koju si stavio kroz for petlju[/pawn]

Unošenje u var:
[pawn]ClearListItem( playerid );
for(new i = 1; i < MAX_LISTITEMS; i++) AddListItem( playerid, i );[/pawn]

Dakle ti to prilagodi svojoj for petlji, tačnije, drugi parametar u AddListItem treba biti ID kuće, a pod 'Korištenje', što sam stavio kao LociraKucu[ playerid ] uzima ID kuće sa tog listitema, znači samo uzmeš koordinate te kuće i deri.

Btw ovo odlično radi, nisam tek sad napravio, nego služi dugo vremena na Disaronno modu kod dinamike.
vise se ne mijesam u teme oko mysqla, ovo je skroz nesto drugo sta sam ja zamislio........ my bad
Naslov: Odg: MySQL + Dialog
Poruka od: •Vodka Play• poslato Februar 08, 2018, 10:57:36 PRE PODNE
Nema potrebe da puni memoriju tim glupostima koje imaju jednokratnu upotrebu.
Kada iz dijaloga odabere neku od kuća, ponovo pozovi isti mysql upit i samo očitaj podatke iz keš memorije pod listitem (vrednost koju dobijaš kada odabere nešto iz dijaloga) id-om.
Naslov: Odg: MySQL + Dialog
Poruka od: Paul Castellano poslato Februar 08, 2018, 11:05:25 PRE PODNE
Citat: Vodka Play poslato Februar 08, 2018, 10:57:36 PRE PODNE
Nema potrebe da puni memoriju tim glupostima koje imaju jednokratnu upotrebu.
Kada iz dijaloga odabere neku od kuća, ponovo pozovi isti mysql upit i samo očitaj podatke iz keš memorije pod listitem (vrednost koju dobijaš kada odabere nešto iz dijaloga) id-om.

Mozes li mi samo dati primjer upita? (tj samo kako ću iskoristiti listitem )
Naslov: Odg: MySQL + Dialog
Poruka od: •Vodka Play• poslato Februar 08, 2018, 11:10:13 PRE PODNE
U dijalogu, ukoliko je reposnse true (nije izašao iz dijaloga), pozoveš upit
[pawn]
mysql_tquery( MySQL, "SELECT PosX, PosY, PosZ FROM `kuce` WHERE ProveraVlasnika = `0` ORDER BY `Cijena` DESC LIMIT 10", "LocateHouse", "ii", playerid, listitem);
[/pawn]

[pawn]
public LocateHouse(playerid, rowid)
{
cache_get_field_content_float(rowid, "PosX");
cache_get_field_content_float(rowid, "PosY");
....
    return 1;
}
[/pawn]
Naslov: Odg: MySQL + Dialog
Poruka od: Paul Castellano poslato Februar 08, 2018, 11:26:23 PRE PODNE
To je to :) Zahvaljujem svima na pomoći.