-
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. :)
-
Esetleg leírnád milyen verseny rendszert használsz? Mert így nem tudok segíteni..
-
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));
-
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?
-
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. :)
-
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
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.. :)
-
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
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.
-
Hogy indítod el?
-
RaceIndit(playerid, startx, starty, startz, endx, endy, endz]);
-
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)
-
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.
-
if(!strcmp(line, inputtext)) - > if(!strcmp(inputtext, line))
??
Teszteltem, nálam tökéletesen mûködik a print-es rész.
-
Ugyan az a hiba, semmit se csinál csak a logba beírja, hogy Error.
-
Mutasd a komplett kódodat, egyszerûen kizárt, hogy ez hibás..
-
#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
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;
}
-
Nálam tökéletesen mûködik!
-
Az nem lehet a probléma, hogy én zcmd parancs feldolgozót használok és nem strcmpt??
-
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. :)
-
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.
-
Mert az én példa szkriptembe az összes verseny 1 pozíciót használ.
-
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
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;
}