Vipgetcar problem


Započeo Maxwellâ„¢, Maj 09, 2021, 23:38:18 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Problem(error/warning): Zelim da napravim komandu za vipove /vipgetcar.Medjutim uspem da napravim da vip moze da porta do sebe vozilo sa slota2 ,ali kada hocu da to uradim za slot1 i slot3 nastaje problem.
Deo skripte:
https://pastebin.com/DuHaJzqb
if(vehid != VoziloInfo[Vozilo_1][vID] || vehid != VoziloInfo[Vozilo_2][vID] || vehid != VoziloInfo[Vozilo_3][vID]) return Greska(playerid, "Mozete samo ID svog vozila da portujete ( /v )");
kada stavim ovako ne radi komanda

Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log):
Ne crasha
Poslednja Izmena: Maj 13, 2021, 01:04:37 PRE PODNE od M Ө M Σ N Z I

Galardo

*

mgWhosyGD

Uradi debbug pa vidi gdje ti zapne kada pokusas 1 ili 3 slot.

Nazalost debug ne mogu da pokrenem crasha mi.

CMD:vipgetcar(playerid, params[])
{
    if(PlayerInfo[playerid][pVip] < 1) return Greska(playerid, "Nemate dozvolu da koristite ovu komandu!");
	new vehid, Float:Poz_X, Float:Poz_Y, Float:Poz_Z, Float:Angle, string[156];
	new Vozilo_1 = PlayerInfo[playerid][pVozilo_1], Vozilo_2 = PlayerInfo[playerid][pVozilo_2], Vozilo_3 = PlayerInfo[playerid][pVozilo_3];
	if(sscanf(params, "i", vehid)) return Koristi(playerid, "/vipgetcar [ID Vozila]");
    if(vehid == IVI) return Greska(playerid, "Pogresan ID vozila!");
    if(vehid > MAX_VEHICLES - 1 || vehid <= 0) return Greska(playerid, "Taj ID vozila ne postoji na serveru!");
    if(vehid != VoziloInfo[Vozilo_1][vID] || vehid != VoziloInfo[Vozilo_2][vID] || vehid != VoziloInfo[Vozilo_3][vID]) return Greska(playerid, "Mozete samo ID svog vozila da portujete ( /v )");
    if(WARPInfo[playerid][war_ID] != -1) return Greska(playerid, "Ne mozete koristiti ovu komandu dok ste u waru!");
	GetPlayerPos(playerid, Poz_X, Poz_Y, Poz_Z); GetPlayerFacingAngle(playerid, Angle);
 	F_SetVehiclePos(vehid, Poz_X, Poz_Y+3, Poz_Z); SetVehicleZAngle(vehid, Angle);
	if(PrivatnoVozilo(vehid))
	{
		SetVehicleVirtualWorld(vehid, GetPlayerVirtualWorld(playerid));
	}
	format(string, sizeof(string),""IGBOJA"[Info]  "BIJELA"Portovali ste vozilo ID: %d do sebe!", vehid);
	SCM(playerid, -1,string);
	format(string, sizeof(string), "PORTVOZILO | Admin: %s | ID Vozila: %d", GetName(playerid), vehid);
	return 1;
}


Compilujem ovo ne izbaci ni error ni warning.Ispise da je nepostojeca komanda.
if(vehid != VoziloInfo[Vozilo_1][vID] || vehid != VoziloInfo[Vozilo_2][vID] || vehid != VoziloInfo[Vozilo_3][vID]) return Greska(playerid, "Mozete samo ID svog vozila da portujete ( /v )");

Galardo

*

mgWhosyGD

Sam debbuguj, pisi ispod svake linije print(f) i pogledaj dokle dodje.

Necu ni da pocinjem o tome koliko je taj sistem pogresno napisan (ne samo komanda, citav sistem). Da nema gresaka, i verovatno moze da radi ako se izmajmunise nesto.
Ali prvi problem ti je pVozilo_1, pVozilo_2, pVozilo_3. To treba da bude  pVozilo[3] u enum. Druga stvar je da ti igracima trazis da unesu ID vozila na samp serveru. Zasto? Zar nemozes da im trazis ID slota pa sam da nadjes id vozila za respawn?
Sledeci problem ti je redosled stvari. Prvo uzmes unos, proveris id vozila pa tek onda proveravas da li je igrac i war ili nije, a to je provera koja zaustavlja komandu odmah. Zar nije pametnije i lakse staviti to odmah ispod ViP provere?
Jos jedan problem je kako pravis promenive. Ti ih pravis skoro pa na pocetku funkcije, vrsis razne provere, vracas greske i tek onda koristis te promenive. Pametnije i lakse ti je da te promenive definises odmah pre nego sto se koriste da ne zauzimas i otpustas memoriju bezveze zato sto igrac nije uneo dobar ID ili nesto slicno. Svedi na minimum to, jeste da neces osetiti performanse ali nema potrebe za time, videces i sam koliko ce ti biti laksi zivot.

Sto se tice crash-a, ubaci CreashDetect on ce da ti kaze vise o tome zasto crash. Ja predpostavljam da nisi validovao vozila u slotovima, i da pristupas nepostojecem. Verovatno ti igrac nema sva tri vozila pa ti je recimo PlayerInfo[playerid][pVozilo_3] = -1 negde kao invalid i kad pristupas vehid != VoziloInfo[Vozilo_3][vID] onda odes u overflow posto -1 nije validni index VehicleInfo niza.

CMD:vportvozilo(playerid, params[])
{
    if(UsaoEvent[playerid] == 1) return SCM(playerid,NS_ORANGE, "* Ne mozete koristiti ovu komandu dok ste na live eventu.");
    for(new idzons = 0; idzons < sizeof(GZ); idzons++)
    if(IsPlayerInRangeOfPoint(playerid, 60.0, GZ[idzons][gPickupx], GZ[idzons][gPickupy], GZ[idzons][gPickupz])) return SCM(playerid, NS_ORANGE, "* Ne mozete koristiti ovu komandu ukoliko ste unutar zone.");
    if(PlayerInfo[playerid][pVip] < 4 && PlayerInfo[playerid][pPromoter] < 2) return SCM(playerid,NS_ORANGE,"* Nemate ovlascenje za upotrebu ove komande");
    if(PlayerInfo[playerid][pRadi] == 1) return SCM(playerid,NS_ORANGE,"* Radis posao ne mozes koristi ovu komandu!");
    if(Zavezan[playerid] == 1) return SCM(playerid,NS_ORANGE,"* Zavezani ste ne mozete koristi ovu komandu!");
    if(PlayerInfo[playerid][pTrazeniLevel] >= 1) return SCM(playerid,NS_ORANGE,"* Ne mozete koristi ovu komandu ako imate Wanted Level!");
    if(PlayerInfo[playerid][pZatvor] != 0) return SCM(playerid,NS_ORANGE,"* Ne mozete koristi ovu komandu ukoliko ste u zatvoru!");
    if(PolicajacNaDuznosti[playerid] == 1) return SendClientMessage(playerid,NS_ORANGE,"* Ne mozete koristi ovu komandu ukoliko ste na duznosti!");
    if(GetPlayerInterior(playerid) > 0) return SCM(playerid,NS_ORANGE,"* Ne mozete koristiti ovu komandu ukoliko ste u enterijeru!");
    SPD(playerid,16120,DIALOG_STYLE_LIST, "VIP Port Vozila", "Auto 1\nAuto2\nMotor\nLetelica\nPlovilo", "Port", "Izadji");
    return 1;
}

fDialog(16120)
{
if(!response) return 1;

switch(listitem) {
case 0, 1: { // auto 1 ili 2
new vehId = ((listitem == 0) ? (PlayerInfo[playerid][pPosedovanjeAuta]) : (PlayerInfo[playerid][pPosedovanjeAuta2]));

if(vehId < 0 || strcmp(VoziloInfo[vehId][vVlasnik], GetName(playerid)) != 0) {
return SCM(playerid,NS_ORANGE, "* Ne posedujes vozilo.");
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
SetVehiclePos(VoziloInfo[vehId][vID], x,y,z);
SCM(playerid,NS_YELLOW, "[INFO] "BELA"Vozilo je teleportovano.");
}
case 2:
{
new idmotora = PlayerInfo[playerid][pPosedovanjeMotora];

if(idmotora < 0 || strcmp(MotorInfo[idmotora][mVlasnik], GetName(playerid)) != 0) {
return SCM(playerid,NS_ORANGE, "* Ne posedujes motor.");
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
SetVehiclePos(MotorInfo[idmotora][mID], x,y,z);
SCM(playerid,NS_YELLOW, "[INFO] "BELA"Motor je teleportovan.");
}
case 3:
{
new idletelice = PlayerInfo[playerid][pPosedovanjeAviona];

if(idletelice < 0 || strcmp(AvionInfo[idletelice][avVlasnik], GetName(playerid)) != 0) {
return SCM(playerid,NS_ORANGE, "* Ne posedujes letjelicu.");
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
SetVehiclePos(AvionInfo[idletelice][avID], x,y,z);
SCM(playerid,NS_YELLOW, "[INFO] "BELA"Letjelica je teleportovana.");
}
case 4:
{
new idplovila = PlayerInfo[playerid][pPosedovanjePlovila];

if(idplovila < 0 || strcmp(PlovilaInfo[idplovila][plVlasnik], GetName(playerid)) != 0) {
return SCM(playerid,NS_ORANGE, "* Ne posedujes plovilo.");
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
SetVehiclePos(PlovilaInfo[idplovila][plID], x,y,z);
SCM(playerid,NS_YELLOW, "[INFO] "BELA"Plovilo je teleportovano.");
}
}
return 1;
}
fDialog(16121)
{
if(!response) return 1;

switch(listitem) {
case 0, 1: { // auto 1 ili 2
new vehId = ((listitem == 0) ? (PlayerInfo[playerid][pPosedovanjeAuta]) : (PlayerInfo[playerid][pPosedovanjeAuta2]));

if(vehId < 0 || strcmp(VoziloInfo[vehId][vVlasnik], GetName(playerid)) != 0) {
return SendClientMessage(playerid, -1, "Vi ne posedujete vozilo.");
}
SetVehicleToRespawn(VoziloInfo[vehId][vID]);
SendClientMessage(playerid, -1, "Vozilo je respawnovano.");
}
case 2:
{
new idmotora = PlayerInfo[playerid][pPosedovanjeMotora];

if(idmotora < 0 || strcmp(MotorInfo[idmotora][mVlasnik], GetName(playerid)) != 0) {
return SendClientMessage(playerid, -1, "Vi ne posedujete motor.");
}
SetVehicleToRespawn(MotorInfo[idmotora][mID]);
SendClientMessage(playerid, -1, "Vozilo je respawnovano.");
}
case 3:
{
new idletelice = PlayerInfo[playerid][pPosedovanjeAviona];

if(idletelice < 0 || strcmp(AvionInfo[idletelice][avVlasnik], GetName(playerid)) != 0) {
return SendClientMessage(playerid, -1, "Vi ne posedujete avion.");
}
SetVehicleToRespawn(AvionInfo[idletelice][avID]);
SendClientMessage(playerid, -1, "Vozilo je respawnovano.");
}
case 4:
{
new idplovila = PlayerInfo[playerid][pPosedovanjePlovila];

if(idplovila < 0 || strcmp(PlovilaInfo[idplovila][plVlasnik], GetName(playerid)) != 0) {
return SendClientMessage(playerid, -1, "Vi ne posedujete plovilo.");
}
SetVehicleToRespawn(PlovilaInfo[idplovila][plID]);
SendClientMessage(playerid, -1, "Vozilo je respawnovano.");
}
}
return 1;
}

Citat: Dime123 poslato Maj 11, 2021, 00:54:09 PRE PODNE
CMD:vportvozilo(playerid, params[])
{
    if(UsaoEvent[playerid] == 1) return SCM(playerid,NS_ORANGE, "* Ne mozete koristiti ovu komandu dok ste na live eventu.");
    for(new idzons = 0; idzons < sizeof(GZ); idzons++)
    if(IsPlayerInRangeOfPoint(playerid, 60.0, GZ[idzons][gPickupx], GZ[idzons][gPickupy], GZ[idzons][gPickupz])) return SCM(playerid, NS_ORANGE, "* Ne mozete koristiti ovu komandu ukoliko ste unutar zone.");
    if(PlayerInfo[playerid][pVip] < 4 && PlayerInfo[playerid][pPromoter] < 2) return SCM(playerid,NS_ORANGE,"* Nemate ovlascenje za upotrebu ove komande");
    if(PlayerInfo[playerid][pRadi] == 1) return SCM(playerid,NS_ORANGE,"* Radis posao ne mozes koristi ovu komandu!");
    if(Zavezan[playerid] == 1) return SCM(playerid,NS_ORANGE,"* Zavezani ste ne mozete koristi ovu komandu!");
    if(PlayerInfo[playerid][pTrazeniLevel] >= 1) return SCM(playerid,NS_ORANGE,"* Ne mozete koristi ovu komandu ako imate Wanted Level!");
    if(PlayerInfo[playerid][pZatvor] != 0) return SCM(playerid,NS_ORANGE,"* Ne mozete koristi ovu komandu ukoliko ste u zatvoru!");
    if(PolicajacNaDuznosti[playerid] == 1) return SendClientMessage(playerid,NS_ORANGE,"* Ne mozete koristi ovu komandu ukoliko ste na duznosti!");
    if(GetPlayerInterior(playerid) > 0) return SCM(playerid,NS_ORANGE,"* Ne mozete koristiti ovu komandu ukoliko ste u enterijeru!");
    SPD(playerid,16120,DIALOG_STYLE_LIST, "VIP Port Vozila", "Auto 1\nAuto2\nMotor\nLetelica\nPlovilo", "Port", "Izadji");
    return 1;
}

fDialog(16120)
{
if(!response) return 1;

switch(listitem) {
case 0, 1: { // auto 1 ili 2
new vehId = ((listitem == 0) ? (PlayerInfo[playerid][pPosedovanjeAuta]) : (PlayerInfo[playerid][pPosedovanjeAuta2]));

if(vehId < 0 || strcmp(VoziloInfo[vehId][vVlasnik], GetName(playerid)) != 0) {
return SCM(playerid,NS_ORANGE, "* Ne posedujes vozilo.");
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
SetVehiclePos(VoziloInfo[vehId][vID], x,y,z);
SCM(playerid,NS_YELLOW, "[INFO] "BELA"Vozilo je teleportovano.");
}
case 2:
{
new idmotora = PlayerInfo[playerid][pPosedovanjeMotora];

if(idmotora < 0 || strcmp(MotorInfo[idmotora][mVlasnik], GetName(playerid)) != 0) {
return SCM(playerid,NS_ORANGE, "* Ne posedujes motor.");
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
SetVehiclePos(MotorInfo[idmotora][mID], x,y,z);
SCM(playerid,NS_YELLOW, "[INFO] "BELA"Motor je teleportovan.");
}
case 3:
{
new idletelice = PlayerInfo[playerid][pPosedovanjeAviona];

if(idletelice < 0 || strcmp(AvionInfo[idletelice][avVlasnik], GetName(playerid)) != 0) {
return SCM(playerid,NS_ORANGE, "* Ne posedujes letjelicu.");
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
SetVehiclePos(AvionInfo[idletelice][avID], x,y,z);
SCM(playerid,NS_YELLOW, "[INFO] "BELA"Letjelica je teleportovana.");
}
case 4:
{
new idplovila = PlayerInfo[playerid][pPosedovanjePlovila];

if(idplovila < 0 || strcmp(PlovilaInfo[idplovila][plVlasnik], GetName(playerid)) != 0) {
return SCM(playerid,NS_ORANGE, "* Ne posedujes plovilo.");
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x,y,z);
SetVehiclePos(PlovilaInfo[idplovila][plID], x,y,z);
SCM(playerid,NS_YELLOW, "[INFO] "BELA"Plovilo je teleportovano.");
}
}
return 1;
}
fDialog(16121)
{
if(!response) return 1;

switch(listitem) {
case 0, 1: { // auto 1 ili 2
new vehId = ((listitem == 0) ? (PlayerInfo[playerid][pPosedovanjeAuta]) : (PlayerInfo[playerid][pPosedovanjeAuta2]));

if(vehId < 0 || strcmp(VoziloInfo[vehId][vVlasnik], GetName(playerid)) != 0) {
return SendClientMessage(playerid, -1, "Vi ne posedujete vozilo.");
}
SetVehicleToRespawn(VoziloInfo[vehId][vID]);
SendClientMessage(playerid, -1, "Vozilo je respawnovano.");
}
case 2:
{
new idmotora = PlayerInfo[playerid][pPosedovanjeMotora];

if(idmotora < 0 || strcmp(MotorInfo[idmotora][mVlasnik], GetName(playerid)) != 0) {
return SendClientMessage(playerid, -1, "Vi ne posedujete motor.");
}
SetVehicleToRespawn(MotorInfo[idmotora][mID]);
SendClientMessage(playerid, -1, "Vozilo je respawnovano.");
}
case 3:
{
new idletelice = PlayerInfo[playerid][pPosedovanjeAviona];

if(idletelice < 0 || strcmp(AvionInfo[idletelice][avVlasnik], GetName(playerid)) != 0) {
return SendClientMessage(playerid, -1, "Vi ne posedujete avion.");
}
SetVehicleToRespawn(AvionInfo[idletelice][avID]);
SendClientMessage(playerid, -1, "Vozilo je respawnovano.");
}
case 4:
{
new idplovila = PlayerInfo[playerid][pPosedovanjePlovila];

if(idplovila < 0 || strcmp(PlovilaInfo[idplovila][plVlasnik], GetName(playerid)) != 0) {
return SendClientMessage(playerid, -1, "Vi ne posedujete plovilo.");
}
SetVehicleToRespawn(PlovilaInfo[idplovila][plID]);
SendClientMessage(playerid, -1, "Vozilo je respawnovano.");
}
}
return 1;
}

Sta si ti to poslao majke ti? Pa pogledaj malo jebem mu mater, ovako kad posaljete neku budalastinu iz prvog moda sto naidjete samo odmazete.
Procitaj kod, videces zasto niko nece da se bakce oko njega, citav sistem je prelose odradjen, da ne spominjem samu komandu.
Necu ni da govorim vise od onog sto sam rekao, njemu je problem crash, on treba da ubaci crash detect i vidi gde mu je i zasto crash.
Ako nemoze sam da shvati zasto, onda ce poslati log ovde i delove koda koji trebaju. Mada sam prilicno siguran da je problem ono sto sam rekao iznad, i dok to ne proveri necu da nagadjam dalje.

Citat: Deleted User poslato Maj 11, 2021, 01:12:03 PRE PODNE
Sta si ti to poslao majke ti? Pa pogledaj malo jebem mu mater, ovako kad posaljete neku budalastinu iz prvog moda sto naidjete samo odmazete.
Procitaj kod, videces zasto niko nece da se bakce oko njega, citav sistem je prelose odradjen, da ne spominjem samu komandu.
Necu ni da govorim vise od onog sto sam rekao, njemu je problem crash, on treba da ubaci crash detect i vidi gde mu je i zasto crash.
Ako nemoze sam da shvati zasto, onda ce poslati log ovde i delove koda koji trebaju. Mada sam prilicno siguran da je problem ono sto sam rekao iznad, i dok to ne proveri necu da nagadjam dalje.
Sta sam ja njemu tu pogresno poslo? ja znam da je njemu to sranje pa sam mu poslao nesto sto bi radilo makar izgledalo shit ili glupo radi svoj posao kako treba sto je i najbitnije.

Citat: Dime123 poslato Maj 11, 2021, 01:14:30 PRE PODNE
Sta sam ja njemu tu pogresno poslo? ja znam da je njemu to sranje pa sam mu poslao nesto sto bi radilo makar izgledalo shit ili glupo radi svoj posao kako treba sto je i najbitnije.
Kako ce to da radi svoj posao ako to sto si ti njemu poslao on to nema?! Kako?!!!! Ajde molim te objasni kako ti mislis da to sto si ti poslao on integrise u to sto ima...

Pokusaj ovako
https://pastebin.com/snuM1szU


EDIT: btw nije ti radilo iz jednog razloga ukoliko igrac nema jedno od vozila, znaci ako ima auto 1 i 2 nema 3 opet bi crashalo zato sto radis ovo
new Vozilo_2 = PlayerInfo[playerid][pVozilo_2]; // u slucaju da on nema to vrijednost ce biti 0 ukoliko je nigdje gore nisi setao na -1 ili slicno
if (vehid == VoziloInfo[Vozilo_2][vID])



i on pokusa da pristupi enumu VoziloInfo na id 0 ili -1 koji mozda ne postoji i crasha server

Poslednja Izmena: Maj 11, 2021, 11:50:09 PRE PODNE od __vedran.xyz77

Hvala za pomoc,moze lock reseno.