GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: halaloszto100 - 2014. február 13. - 19:13:32

Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 13. - 19:13:32
Sziasztok!!
Lenne nekem egy olyan kérdésem, hogy hogyan tudnám megcsinálni azt, hogy egy dialogból kiválasztani egy random versenyt és azt elindítani.Sok dologgal próbálkoztam már de egyik se sikerült.
Arra gondoltam, hogy ha beírja valaki, hogy /races akkor kihoz neki egy dialogot és benne szerepelnének versenyek pl: Las Venturas - The Big Ear , San Fierro - Los Santos, Los Santos - Las Venturas, de nem csak ez a 3 hanem mondjuk lenne 15 versenyem és azokat berakná a dialogba 3 lehetõségbe és ha rá kattol akkor a rá kattolt versenyt elindítaná neki.
Remélem értelmesen leírtam és nem bonyolult.Élõre is köszi a válaszokat. :)
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: ZyZu. - 2014. február 13. - 21:45:16
Esetleg leírnád milyen verseny rendszert használsz? Mert így nem tudok segíteni..
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 13. - 22:18:56
Saját race rendszert használok.Nem a szokásosat, hogy több check point hanem 1 start pont és egy finnish pont.
Ami eddig megvan:
 
enum Racesi
{
    Starti[512],
    Endl[512],
    Float:startx,
    Float:starty,
    Float:startz,
    Float:endx,
    Float:endy,
    Float:endz
}
new Races[][Racesi] =
{
{\"Las Venturas\",\"San Fierro\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203}
....
};

 
(van bent több is csak pédaként tettem be)
és én ezt úgy akarnám, hogy a /races parancs alatt elõ jöjjön egy dialog és ebbe random szerûen jelenjenek meg a versenyek 3 lehetõségbe és ha rákattol egyre akkor azt a randomot elindítsa neki.
ezzel próbáltam, de akkor mindig mást indított el:
 

new rand = random(sizeof(Races));
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: Kovacs_Richard - 2014. február 14. - 08:05:10
Starti[512],
Endl[512],

 
itt szerintem felesleges az 512 cella, 16 vagy 32 is elég lenne szerintem, attól függ milyen hosszú a név, de biztos nincs 512 :)
 
egy dialogból kiválasztani egy random versenyt és azt elindítani[/quote]
 
mondjuk lenne 15 versenyem és azokat berakná a dialogba 3 lehetõségbe és ha rá kattol akkor a rá kattolt versenyt elindítaná neki[/quote]
lenne mondjuk 5db LS-LV 6DB SF-LV ... és a dialogban rányom az LS-LV-re akkor az 5 LS-LV közül 1 verseny indulna ezt akarod?
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 14. - 14:49:47
Idézetet írta: Kovacs_Richard date=1392361510\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"46491\" data-ipsquote-contentclass=\"forums_Topic

Starti[512],
Endl[512],

 
itt szerintem felesleges az 512 cella, 16 vagy 32 is elég lenne szerintem, attól függ milyen hosszú a név, de biztos nincs 512 :)
 
egy dialogból kiválasztani egy random versenyt és azt elindítani

mondjuk lenne 15 versenyem és azokat berakná a dialogba 3 lehetõségbe és ha rá kattol akkor a rá kattolt versenyt elindítaná neki[/quote]
lenne mondjuk 5db LS-LV 6DB SF-LV ... és a dialogban rányom az LS-LV-re akkor az 5 LS-LV közül 1 verseny indulna ezt akarod?
 
[/quote]
Lehet, hogy elég annyi :D
úgy szeretném, hogy van pl 15 versenyem.
Las Venturas - San fierro
The Big Ear - San Fierro
Los Santos - Area 69
Snake Farm - Los Santos
Angel Pine - Las Venturas
San Fierro - Las Venturas
és akkor ezt egy dialogba 3 lehetõségben ha beírja a /races parancsot.Így valahogy
1. random dialogba
Las Venturas - San Fierro
Angel Pine - Las Venturas
San Fierro - Las Venturas
2. random dialogba
San Fierro Las Venturas
The Big Ear - San Fierro
Los Santos - Area 69
(Ezeket berakni 1 dialogba)
és így sorban randomokba 3 versenyt berakni és ha rákattol az egyikre akkor azt elindítani.Remélem érthetõ voltam. :)
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: Pedró - 2014. február 14. - 19:36:43
Megpróbálom. :)
 
#define FILTERSCRIPT
#include <a_samp>
#define DIALOG_RACES    1024
enum Racesi
{
    Starti[64],
    Endl[64],
    Float:startx,
    Float:starty,
    Float:startz,
    Float:endx,
    Float:endy,
    Float:endz
}
new Races[][Racesi] =
{
{\"Verseny1 Start\",\"Verseny1 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny2 Start\",\"Verseny2 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny3 Start\",\"Verseny3 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny4 Start\",\"Verseny4 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny5 Start\",\"Verseny5 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny6 Start\",\"Verseny6 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny7 Start\",\"Verseny7 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny8 Start\",\"Verseny8 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203}
};
public OnPlayerCommandText(playerid, cmdtext[]) {
if(!strcmp(cmdtext, \"/races\")) {
    new bool:voltmar[128] = {false, ...}, string[1024], rand;
for(new x; x < 3; x++) {
start_:
    rand = random(sizeof(Races));
   
    if(voltmar[rand] == true) goto start_;
   
    voltmar[rand] = true;
   
    format(string, sizeof(string), \"%s%s - %s\\n\", string, Races[rand][starti], Races[rand][Endl]);
}
ShowPlayerDialog(playerid, DIALOG_RACES, DIALOG_STYLE_LIST, \"Válassz a veresenyek közül!\", string, \"Tovább\", \"Mégse\");
    return 1;
}
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
if(dialogid == DIALOG_RACES && response) {
    new line[256], id = -1;
for(new x; x < sizeof(Races); x++) {
    format(line, sizeof(line), \"%s - %s\", Races
  • [starti], Races
  • [Endl]);

    if(!strcmp(line, inputtext)) {
        id = x;
        break;
    }
}
if(id == -1) print(\"Error\");
else {
    printf(\"%i azonosítójú verseny hamarosan indul..\", id);
}
}
return 1;
}

 
Így hibamentes. Szerintem jó lesz, próbáld ki elsõnek így.. :)
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 15. - 13:48:23
Idézetet írta: Pedró date=1392403003\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"46491\" data-ipsquote-contentclass=\"forums_Topic
Megpróbálom. :)
 
#define FILTERSCRIPT
#include <a_samp>
#define DIALOG_RACES    1024
enum Racesi
{
    Starti[64],
    Endl[64],
    Float:startx,
    Float:starty,
    Float:startz,
    Float:endx,
    Float:endy,
    Float:endz
}
new Races[][Racesi] =
{
{\"Verseny1 Start\",\"Verseny1 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny2 Start\",\"Verseny2 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny3 Start\",\"Verseny3 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny4 Start\",\"Verseny4 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny5 Start\",\"Verseny5 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny6 Start\",\"Verseny6 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny7 Start\",\"Verseny7 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny8 Start\",\"Verseny8 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203}
};
public OnPlayerCommandText(playerid, cmdtext[]) {
if(!strcmp(cmdtext, \"/races\")) {
    new bool:voltmar[128] = {false, ...}, string[1024], rand;
for(new x; x < 3; x++) {
start_:
    rand = random(sizeof(Races));
   
    if(voltmar[rand] == true) goto start_;
   
    voltmar[rand] = true;
   
    format(string, sizeof(string), \"%s%s - %s\\n\", string, Races[rand][starti], Races[rand][Endl]);
}
ShowPlayerDialog(playerid, DIALOG_RACES, DIALOG_STYLE_LIST, \"Válassz a veresenyek közül!\", string, \"Tovább\", \"Mégse\");
    return 1;
}
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
if(dialogid == DIALOG_RACES && response) {
    new line[256], id = -1;
for(new x; x < sizeof(Races); x++) {
    format(line, sizeof(line), \"%s - %s\", Races
  • [starti], Races
  • [Endl]);

    if(!strcmp(line, inputtext)) {
        id = x;
        break;
    }
}
if(id == -1) print(\"Error\");
else {
    printf(\"%i azonosítójú verseny hamarosan indul..\", id);
}
}
return 1;
}

 
Így hibamentes. Szerintem jó lesz, próbáld ki elsõnek így.. :)
 
Ez jó, a szöveg meg a dialog jó, de az a baj, hogy más koordinátával indítja el és nem azzal ami a versenyhez van berakva.
Példa:
Rákattolok arra, hogy San Fierro - Las Venturas és a Los Santos - Angel Pine koordinátákkal indítja.
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: Pedró - 2014. február 15. - 18:00:25
Hogy indítod el?
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 15. - 21:01:58
RaceIndit(playerid, startx, starty, startz, endx, endy, endz]);
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: Pedró - 2014. február 16. - 19:16:39
Akkor kódom esetében:
 
RaceIndit(playerid, Races[id][startx], Races[id][starty], Races[id][startz], Races[id][endx], Races[id][endy], Races[id][endz]);

 
(printf(\"%i azonosítójú verseny hamarosan indul..\", id); helyére)
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 16. - 20:26:30
Idézetet írta: Pedró date=1392574599\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"46491\" data-ipsquote-contentclass=\"forums_Topic
Akkor kódom esetében:
 
RaceIndit(playerid, Races[id][startx], Races[id][starty], Races[id][startz], Races[id][endx], Races[id][endy], Races[id][endz]);

 
(printf(\"%i azonosítójú verseny hamarosan indul..\", id); helyére)
 
Most meg akár melyikre kattintok nem csinál semmit, csak a logba beírja, hogy Error.
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: Pedró - 2014. február 16. - 20:28:37
if(!strcmp(line, inputtext)) - > if(!strcmp(inputtext, line))
??


Teszteltem, nálam tökéletesen mûködik a print-es rész.
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 16. - 20:56:30
Ugyan az a hiba, semmit se csinál csak a logba beírja, hogy Error.
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: Pedró - 2014. február 16. - 20:57:35
Mutasd a komplett kódodat, egyszerûen kizárt, hogy ez hibás..
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 16. - 21:13:59
#define FILTERSCRIPT
#include <a_samp>
#define DIALOG_RACES    1024
enum Racesi
{
    Starti[64],
    Endl[64],
    Float:startx,
    Float:starty,
    Float:startz,
    Float:endx,
    Float:endy,
    Float:endz
}
new Races[][Racesi] =
{
{\"Verseny1 Start\",\"Verseny1 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny2 Start\",\"Verseny2 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny3 Start\",\"Verseny3 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny4 Start\",\"Verseny4 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny5 Start\",\"Verseny5 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny6 Start\",\"Verseny6 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny7 Start\",\"Verseny7 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny8 Start\",\"Verseny8 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203}
};
public OnPlayerCommandText(playerid, cmdtext[]) {
if(!strcmp(cmdtext, \"/races\")) {
    new bool:voltmar[128] = {false, ...}, string[1024], rand;
for(new x; x < 3; x++) {
start_:
    rand = random(sizeof(Races));
   
    if(voltmar[rand] == true) goto start_;
   
    voltmar[rand] = true;
   
    format(string, sizeof(string), \"%s%s - %s\\n\", string, Races[rand][starti], Races[rand][Endl]);
}
ShowPlayerDialog(playerid, DIALOG_RACES, DIALOG_STYLE_LIST, \"Válassz a veresenyek közül!\", string, \"Tovább\", \"Mégse\");
    return 1;
}
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
if(dialogid == DIALOG_RACES && response) {
    new line[256], id = -1;
for(new x; x < sizeof(Races); x++) {
    format(line, sizeof(line), \"%s - %s\", Races
  • [starti], Races
  • [Endl]);

    if(!strcmp(inputtext, line)) {
        id = x;
        break;
    }
}
if(id == -1) print(\"Error\");
else {
    RaceIndit(playerid, Races[id][startx], Races[id][starty], Races[id][startz], Races[id][endx], Races[id][endy], Races[id][endz]);
}
}
return 1;
}
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: Pedró - 2014. február 17. - 06:07:09
Nálam tökéletesen mûködik!
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 17. - 16:01:09
Az nem lehet a probléma, hogy én zcmd parancs feldolgozót használok és nem strcmpt??
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: Pedró - 2014. február 17. - 16:07:27
Mondtam, hogy így teszteld elsõnek, aztán írtam, hogy muti hogy tesztelted, és az nem volt ZCMD-s, á abba is hagyom, kiszállok innen.. Majd segít aki akar. :)
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 17. - 17:17:09
Mielõtt sült bolondnak néznél vagy szimplán genetikai hulladéknak, leírnám, hogy strcmpben teszteltem le,de én a szerverembe zcmd parancs feldolgozót használok és akkor ugyebár szerény tudomásom szerint az OnPlayerCommandText alatt nemfog lefutni a parancs.Elõször OnPlayerCommanText alatt teszteltem le de a szerver azt írta, hogy nincs ilyen parancs.Utána a OnPlayerCommandReceived alatt teszteltem le és mûködött.Ezért írtam, hogy nem kavar e be valamit ha én zcmd parancsfeldolgozót használok.
Megvan, hogy hol rontottam el én.
E helyett:
 
      if(id == -1) print(\"Error\");
else {
    RaceIndit(playerid, Races[id][startx], Races[id][starty], Races[id][startz], Races[id][endx], Races[id][endy], Races[id][endz]);
}

 
Én ezt írtam:
 
      if(id != -1) print(\"Error\");
else {
    RaceIndit(playerid, Races[id][startx], Races[id][starty], Races[id][startz], Races[id][endx], Races[id][endy], Races[id][endz]);
}

 
De a hiba még mindig fent áll, más koordinátával indítja el.Inkább nem is mással hanem csak az id 0 versenyt indítja el akármire kattintok.
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: Pedró - 2014. február 17. - 21:40:25
Mert az én példa szkriptembe az összes verseny 1 pozíciót használ.
Cím: Dialogból random verseny kiválasztása és azt elindítani
Írta: halaloszto100 - 2014. február 17. - 22:02:24
Raktam be más koordinátákat is:
 
#define FILTERSCRIPT
#include <a_samp>
#define DIALOG_RACES    1024
enum Racesi
{
    Starti[64],
    Endl[64],
    Float:startx,
    Float:starty,
    Float:startz,
    Float:endx,
    Float:endy,
    Float:endz
}
new Races[][Racesi] =
{
{\"Verseny1 Start\",\"Verseny1 Vége\", 4118.9805,-1304.5021,11.0081, 2524.2917,2819.3291,10.8203},
{\"Verseny2 Start\",\"Verseny2 Vége\", 4739.9312,-2368.0493,10.8731, 1066.2122,1241.1855,10.8275},
{\"Verseny3 Start\",\"Verseny3 Vége\", 2524.2917,2819.3291,10.8203, -576.1246,-545.7786,25.5234},
{\"Verseny4 Start\",\"Verseny4 Vége\", 1728.2246,977.7601,10.8203, 2338.1992,73.0833,26.4786},
{\"Verseny5 Start\",\"Verseny5 Vége\", 2728.2246,977.7601,10.8203, -309.1451,1194.3457,19.7422}
};
public OnPlayerCommandText(playerid, cmdtext[]) {
if(!strcmp(cmdtext, \"/races\")) {
    new bool:voltmar[128] = {false, ...}, string[1024], rand;
for(new x; x < 3; x++) {
start_:
    rand = random(sizeof(Races));
    if(voltmar[rand] == true) goto start_;
    voltmar[rand] = true;
    format(string, sizeof(string), \"%s%s - %s\\n\", string, Races[rand][starti], Races[rand][Endl]);
}
ShowPlayerDialog(playerid, DIALOG_RACES, DIALOG_STYLE_LIST, \"Válassz a veresenyek közül!\", string, \"Tovább\", \"Mégse\");
    return 1;
}
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
if(dialogid == DIALOG_RACES && response) {
    new line[256], id = -1;
for(new x; x < sizeof(Races); x++) {
    format(line, sizeof(line), \"%s - %s\", Races
  • [starti], Races
  • [Endl]);

    if(!strcmp(inputtext, line)) {
        id = x;
        break;
    }
}
if(id == -1) print(\"Error\");
else {
    RaceIndit(playerid, Races[id][startx], Races[id][starty], Races[id][startz], Races[id][endx], Races[id][endy], Races[id][endz]);
}
}
return 1;
}