-
Sziasztok!
2 kérdéssel fordulok hozzátok, az egyik egy Ban systemhez kapcsolódik, a másik egy kocsirendszerhez.
Nos mikor meg akarom adni a ban időtartamot (Pl.: 60 napra akarom bannolni) akkor midig elakdok, hogy kéne ösze adni 2 időt. Úgy gondoltam, hogy lekérem a ban időt, madj hozzá adom az adott napot csak ez így nekem nem működött. A másik meg, hogy nem tudom az SQL-be illeszteni az Ban idejét és az az idő amikor lejár.
Nos a másik kérdésem. Az egy kocsi rendszerhez kapcsolódik, mikor elmentem a kocsit akkor midig újra kell indítanom a szervert, hogy az adati bekerüljek az enum-ba.
Válaszotok előre is köszönöm!
-
1. kérdésre a válasz ennyi időbe telt:
https://www.google.hu/?gfe_rd=cr&ei=l8PKVsGYGcrR8gf17L7gDg&gws_rd=ssl#q=mysql+now+add+days
http://stackoverflow.com/questions/3887509/mysqls-now-1-day
NOW() + INTERVAL 1 DAY
CURDATE() + INTERVAL 1 DAY
vagy esetleg másra gondolsz?
Google a barátod,
Wiki a barátnőd,
Youtube a szeretőd :P
Nos a másik kérdésem. Az egy kocsi rendszerhez kapcsolódik, mikor elmentem a kocsit akkor midig újra kell indítanom a szervert, hogy az adati bekerüljek az enum-ba.
A második kérdést nem értem...
-
Egy két fogalmat rakjunk a helyére, mert nem vagy vele tisztába. :cool2:
Mit nevezünk enumnak?
enum E_Jarmuvek
{
vID,
vSQLID,
Float:vPoz[4]
};
ehhez általában tartozik egy változó:
new Jarmuvek[MAXJARMU][E_Jarmuvek];
Az enum az egy felsorolási típus, új adattípusokat hozlétre aminek nincs korlátozva az értéke.
Használat:
OnPlayerVehicleExit(playerid, vehicleid)
{
uzenet[64];
format(uzenet, sizeof(uzenet), \"Kiszálltál a(z) %d SQLID-s járműből!\",Jarmuvek[vehicleid][vID]);
SendClientMessage(playerid, -1, uzenet);
return 1;
}
A második kérdésnek fuss neki még1xer, érthetően.
-
No akkor kicsit átgondoltabban.
Mikor a szervert indítom, egy enumba betölti az összes járműnek az adatát. Amikor elmentem a kocsit egy paranccsal akkor az SQL-hez INSERT INTO-val adom hozzá a szügséges adatokat, hogy a kocsi létezzen a szerveren. De mikor létrehozom, majd bele ülök és ki akarom kéni az adatokat semmit fog kiírni, mert ügye nincsen enumba nincsen felvéve az adatai. A kikérés parancs:
CMD:carid(playerid, params[])
{
new string[256];
new vehicleid = GetPlayerVehicleID(playerid);
if(IsPlayerInAnyVehicle(playerid))
{
if(vehicleid != INVALID_VEHICLE_ID) //ez jó kérdés mért van benne
{
format(string, sizeof(string), \"(( DBID: %d, ModelID: %d, Tulaj: %s, Rendszám: %s ))\", VehicleInfo[vehicleid-1][DBID], VehicleInfo[vehicleid-1][ModID], VehicleInfo[vehicleid-1][Owner], VehicleInfo[vehicleid-1][rendszam]);
SendClientMessage(playerid, COLOR_SIKER, string);
} else SendClientMessage(playerid, -1, \"Ismeretlen kocsi!\" );
} else SendClientMessage(playerid, -1, \"Nem vagy kocsiban!\" );
return 1;
}
------------
Nos a másik kérdésem. van egy /ban parancsom, ami a következő kép néz ki /ban [Név / id] [Év / Hó / Nap ] [indok]
PL: /ban Nagy_Mark 0 0 14 Szia. Nos remélem látszik, hogy az illetőt 14 napra bannolnák. És azt nem tudom, hogy lehet az megoldani azt, hogy a mához (2016.02.22) 14 nap-ot adjon (ha jól számolom az 2016.03.6). gondoltam, hogy getdate() és gettime() parancsal valamit kombózni kéne de nem jöttrá. Reméem így már érthetőbb egy fokkal, ha nem akkor sorry :(
-
Első:
Miért akarsz kivonni 1-et a jármű ID-jéből?
Második:
Lekéred az időt gettime() függvénnyel, majd hozzáadod a 14 napot MÁSODPERCBEN.
Hogy néz ki ez a gyakorlatban?
gettime() + (14 * 24 * 60 * 60);
Magyarázat: lekéred az időt, megszorzod 24-el. Megkapod órában az időt. Majd a kapott eredményt megszorzod 3600-al (vagy 60 * 60-al, kinek hogy) és megkapod az 14 napot másodpercben, majd ezt illeszted be az adatbázisodba. Mikor be akar lépni, megnézed mennyi az idő gettime() függvénnyel, ha a gettime() nagyobb vagy egyenlő (kicsi az esélye, de bekövetkezhet), mint az adatbázisban tárolt idő, akkor unbanolhatod.
Mivel egy féle műveletről van szó, így nem kell több zárójel.
A 14-et cseréld ki a Te változódra.
-
Nincs nullás jármű, a járművek 1-es számtól kezdődnek.
-
Megelőztél :D
-----
És akkor ez alapján ugyan így szorozzam ki évre és hóra szorozzam ki?
-
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <a_mysql>
new SQL[1];
CMD:ban(playerid, params[])
{
new jatekos,ido, oka[128];
if (sscanf(params, \"uds[128]\", jatekos,ido, oka))
return SendClientMessage(playerid, -1, \"Használat: /ban [Játékos] [Nap] [Oka]\");
if(jatekos == INVALID_PLAYER_ID)
return SendClientMessage(playerid, -1, \"Nincs ilyen játékos!\");
if(strlen(oka) >= 128)
return SendClientMessage(playerid, -1, \"Az indok maximum 128 karakter lehet!\");
if(jatekos == playerid)
return SendClientMessage(playerid, -1, \"Gratulálok sikeresen megtaláltad magad!\");
if(ido < 0)
return SendClientMessage(playerid, -1, \"Minuszba nem bannolunk!\");
new banido = gettime() + (ido * 24 * 60 * 60), bevitel[256], tiltoneve[MAX_PLAYER_NAME+1], tiltottneve[MAX_PLAYER_NAME+1], ip[16];
GetPlayerName(playerid, tiltoneve,32);
GetPlayerName(jatekos, tiltottneve,32);
GetPlayerIp(jatekos, ip, sizeof(ip));
mysql_format(SQL[0], bevitel, sizeof(bevitel), \"INSERT INTO tiltasok (ki, ip, nev, ido, oka) VALUES(\'%s\', \'%s\',\'%s\',\'%d\',\'%s\')\",tiltoneve,ip,tiltottneve, banido, oka);
mysql_tquery(SQL[0], bevitel, \"\", \"\");
new uzenetall[256];
format(uzenetall, sizeof(uzenetall), \"[szerver]: %s kitiltva %s által %d napra! | Oka: %s\",tiltottneve, tiltoneve,ido,oka);
SendClientMessageToAll(-1, uzenetall);
SetTimerEx(\"DelayedKick\", 1000, false, \"i\", jatekos);
return true;
}
forward DelayedKick(playerid);
public DelayedKick(playerid)
{
Kick(playerid);
return 1;
}
-
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <a_mysql>
new SQL[1];
CMD:ban(playerid, params[])
{
new jatekos,ido, oka[128];
if (sscanf(params, \"uds[128]\", jatekos,ido, oka))
return SendClientMessage(playerid, -1, \"Használat: /ban [Játékos] [Nap] [Oka]\");
if(jatekos == INVALID_PLAYER_ID)
return SendClientMessage(playerid, -1, \"Nincs ilyen játékos!\");
if(strlen(oka) >= 128)
return SendClientMessage(playerid, -1, \"Az indok maximum 128 karakter lehet!\");
if(jatekos == playerid)
return SendClientMessage(playerid, -1, \"Gratulálok sikeresen megtaláltad magad!\");
if(ido < 0)
return SendClientMessage(playerid, -1, \"Minuszba nem bannolunk!\");
new banido = gettime() + (ido * 24 * 60 * 60), bevitel[256], tiltoneve[MAX_PLAYER_NAME+1], tiltottneve[MAX_PLAYER_NAME+1], ip[16];
GetPlayerName(playerid, tiltoneve,32);
GetPlayerName(jatekos, tiltottneve,32);
GetPlayerIp(jatekos, ip, sizeof(ip));
mysql_format(SQL[0], bevitel, sizeof(bevitel), \"INSERT INTO tiltasok (ki, ip, nev, ido, oka) VALUES(\'%s\', \'%s\',\'%s\',\'%d\',\'%s\')\",tiltoneve,ip,tiltottneve, banido, oka);
mysql_tquery(SQL[0], bevitel, \"\", \"\");
new uzenetall[256];
format(uzenetall, sizeof(uzenetall), \"[szerver]: %s kitiltva %s által %d napra! | Oka: %s\",tiltottneve, ido,tiltoneve,oka);
SendClientMessageToAll(-1, uzenetall);
SetTimerEx(\"DelayedKick\", 1000, false, \"i\", jatekos);
return true;
}
forward DelayedKick(playerid);
public DelayedKick(playerid)
{
Kick(playerid);
return 1;
}
A formázásál elírtad a sorrendet. :)
-
Köszönöm szépen!
-
A formázásál elírtad a sorrendet. :)
Szemfüles :D ;D Javítottam, kösz h szóltál :D
Zsifon: Szívesen javítsd ki a formázást, és jól fog működni!
-
Amúgy, a kocsis problémára, van valami tippetek, hogy lehetne megoldani?
-
esetleg bemásolod azt a részt ahol van a hiba? Jelenesetben a jármű mentést?
-
A parancs véleményem szerint kura rondán lett megírva és lehet egyszerűbben is, de nekem így jött össze:
CMD:savecar(playerid, params[])
{
new benzin;
new bznev[36];
new vid = GetPlayerVehicleID(playerid);
new modelid = GetVehicleModel(vid);
new Float:vehheal;
new Float:x, Float:y, Float:z, Float:a;
new string[256];
new color_1, color_2;
new rendszam1[1];
new rendszam2[1];
new rendszam3[1];
new str[32];
if(sscanf(params, \"i\", benzin)) return SendClientMessage(playerid, COLOR_RENDSZER, \"Használat: /savecar [1 = Benzin || 2 = Disel || 3 = LPG || 3 = Elektromos || 4 = Kerozin || 0 = admin]\");
if(IsPlayerInAnyVehicle(playerid))
{
new brand = random(sizeof(brendszam));
new szrand = random(10);
new brand2 = random(sizeof(brendszam));
new szrand2 = random(10);
new brand3 = random(sizeof(brendszam));
new szrand3 = random(10);
GetVehicleColor(vid, color_1, color_2);
format(rendszam1 ,sizeof(rendszam1), brendszam[brand]);
format(rendszam2 ,sizeof(rendszam2), brendszam[brand2]);
format(rendszam3 ,sizeof(rendszam3), brendszam[brand3]);
format(str, sizeof(str), \"%s%s%s-%d%d%d\", brendszam[brand], brendszam[brand2], brendszam[brand3], szrand, szrand2, szrand3);
GetVehiclePos(vid, x, y, z);
GetVehicleZAngle(vid, a);
GetVehicleHealth(vid, vehheal);
switch (benzin)
{
case 0: format (bznev, sizeof (bznev),\"Admin\");
case 1: format (bznev, sizeof (bznev),\"Benzin\");
case 2: format (bznev, sizeof (bznev),\"Disel\");
case 3: format (bznev, sizeof (bznev),\"Elekromosság\");
case 4: format (bznev, sizeof (bznev),\"LPG\");
case 5: format (bznev, sizeof (bznev),\"Kerozin\");
}
format(string, sizeof(string), \"Sikeresen elmentetetd ezt a kocsit! Rendszáma: %s, Üzemanyag típusa: %s ((%i))\", str, bznev, benzin);
SendClientMessage(playerid, COLOR_SIKER, string);
SetVehicleNumberPlate(vid, str);
format(query, sizeof(query), \"INSERT INTO `jarmuvek` (modelid, X, Y, Z, A, color1, color2, plate, uztp) VALUES (\'%i\',\'%f\', \'%f\', \'%f\', \'%f\', \'%i\', \'%i\',\'%s\', \'%i\')\", modelid, x, y, z, a, color_1, color_2, str, benzin);
mysql_query(kapcs, query);
} else SendClientMessage(playerid, -1, \"Nem vagy kocsiban!!\" );
return 1;
}
A modban még nincsen olyan rész ami menti az össze kcosit XD (elfelejtettm még írni)
-
Nincs megadva a lerakott járműnek semmilyen érték az egy dolog h lekéred de ha pl átszínezek egy jármúvet akkor kell érték pl:
CMD:szin(playerid, params[])
{
new Szin[2], jarmu;
if (sscanf(params, \"ddd\", jarmu, Szin[0], Szin[1])
return SendClientMessage(playerid, -1, \"Használat: /szín [JárműID] [szín1] [szín1]\");
if(Szin[0] < 0 || Szin[1] < 0)
return SendClientMessage(playerid, -1, \"Nincs ilyen szín id\");
ChangeVehicleColor(jarmu, Szin[0], Szin[1]);
Jarmuvek[jarmu][vSzin][0] = Szin[0];
Jarmuvek[jarmu][vSzin][1] = Szin[1];
SendClientMessage(playerid, -1, \"Átszínezted a járművet!\");
return true;
}
Szerk:
Neked ez a rész hiányzik persze a te enum felsorolásoddal:
Jarmuvek[jarmu][vSzin][0] = Szin[0];
Jarmuvek[jarmu][vSzin][1] = Szin[1];
-
Lehet hülye vagyok, de most nem értem mi a probléma. Ez a parancs csak az SQL-ba ment. Nekem az kéne, hogy mentés után ezt a kocsit hozzá adja az enum-hoz már próbálatm úgy hogy lefuttatom utána a megint a betöltést csak akkor minden kocsi 2 szer vagy többször lesz a szerveren.
-
valahogy így, mivel én nem ismerem a te VehicleInfo változód adataid így nem tudom megírni:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
CMD:savecar(playerid, params[])
{
new benzin;
if(sscanf(params, \"i\", benzin))
{
SendClientMessage(playerid, COLOR_RENDSZER, \"Használat: /savecar [Üzemanyag]\");
SendClientMessage(playerid, -1, \"[1 = Benzin | 2 = Disel | 3 = LPG | 3 = Elektromos | 4 = Kerozin | 0 = Admin ]\");
return true;
}
if(!IsPlayerInAnyVehicle(playerid))
return SendClientMessage(playerid, -1, \"Nem vagy járműben!\");
new jarmuid = GetPlayerVehicleID(playerid), Float:vElet, Float:Poz[4], vSzin[2], szoveg[32], rendszam[3], rendszamx[32], rendszamszoveg[7];
GetVehiclePos(jarmuid, Poz[0], Poz[1], Poz[2]);
GetVehicleZAngle(jarmuid, Poz[3]);
GetVehicleHealth(jarmuid, vElet);
GetVehicleColor(jarmuid, vSzin[0], vSzin[1]);
switch (benzin)
{
case 0: format (szoveg, sizeof (szoveg),\"Admin\");
case 1: format (szoveg, sizeof (szoveg),\"Benzin\");
case 2: format (szoveg, sizeof (szoveg),\"Disel\");
case 3: format (szoveg, sizeof (szoveg),\"Elekromosság\");
case 4: format (szoveg, sizeof (szoveg),\"LPG\");
case 5: format (szoveg, sizeof (szoveg),\"Kerozin\");
}
for(new x = 0; x < 4;x++)
{
rendszam
rendszamx- = random(sizeof(brendszam));
}
format(rendszamszoveg, sizeof(rendszamszoveg), \"%s%s%s-%d%d%d\", rendszamx[0], rendszamx[1], rendszamx[2], rendszam[0], rendszam[1], rendszam[2]);
/* -- Itt adod meg a járműnek a láthatatlan adatait, szín, modelid etc. --*/
VehicleInfo[jarmuid][ModID] = GetVehicleModel(GetPlayerVehicleID(playerid));
format(VehicleInfo[jarmuid][rendszam], sizeof(VehicleInfo[jarmuid][rendszam]) \"%s\",rendszamszoveg);
..és így tovább...
SetVehicleNumberPlate(jarmu, rendszamszoveg);
/* -- Mentésnél pedig a VehicleInfo értékeket adod meg --*/
format(query, sizeof(query), \"INSERT INTO `jarmuvek` (modelid, X, Y, Z, A, color1, color2, plate, uztp) VALUES (\'%i\',\'%f\', \'%f\', \'%f\', \'%f\', \'%i\', \'%i\',\'%s\', \'%i\')\", VehicleInfo[jarmuid][vModID],... és így tovább);
mysql_query(kapcs, query);
new uzenet[256];
format(uzenet, sizeof(uzenet), \"Sikeresen elmentetted ezt a járművet! Rendszáma: %s, Üzemanyag típusa: %s ((%i))\", rendszamszoveg, szoveg, benzin);
SendClientMessage(playerid, COLOR_SIKER, uzenet);
return true;
}
Szerk:
A MySQL az \"INSERT INTO\" hozzáad egy új sort, ezt lerakásnál szoktuk használni. Ha már benne van az adatbázis akkor UPDATE SET-et szoktunk használni, így nem duplikálódik a jármű hanem frissíti a meglévő adataid.
-
Gyááááá... Értelek. ty!!!
A MySQL az \"INSERT INTO\" hozzáad egy új sort, ezt lerakásnál szoktuk használni. Ha már benne van az adatbázis akkor UPDATE SET-et szoktunk használni, így nem duplikálódik a jármű hanem frissíti a meglévő adataid.
A kocsi nem létezik az SQL-ben. Ez a kocsi csak egy ideiglenes gépjármű, ami eltűnik, ha leáll a szerver, vagy ki nem törlik.