Jump to content
  • 0

pomoc Pickup na auta


mrazek44

Dotaz

Ahoj

Byl bych rád kdyby někdo poradil ohledně pickupu.

 

Chtěl bych pickup který změní auto, když do toho pickupu vjede aby se mu změnilo auto které tam zadám.

 

Pokoušel jsem se o to , ale marně  :(  tím Vás moc prosím o pomoc a radu.

 

Prosím jak bych měl postupovat.

 

Pickupi jsem dělal, jako na port a ammo ale na auta jsem nepřišel.

 

Děkuji

 

 

 

Asi nějak tak to


Najde se někdo, prosím.

Link to comment
Share on other sites

16 odpovědí na tuto otázku

Recommended Posts

  • 0

Vyskúšaj IsPlayerinRangeOfPoint()

 

To mu vůbec nepomůže, jinak udělal jsem tady celý kód a je funkční :)

#include <a_samp>

new mojeauto[MAX_PLAYERS];
new carpickup;
public OnFilterScriptInit()
{
	print("\n--------------------------------------");
        print(" ------ Pickup Car[By Expertik] --------");
        print("--------------------------------------\n");
	carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    if(pickupid == carpickup)
    {
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Změna vozidla", "Zadejte id Vozidla", "Změnit", "Zrušit");
    }
    return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp("/pickup", cmdtext, true, 10) == 0)
	{
		SetPlayerPos(playerid, 2057.8423,1313.7885,10.9077);
		return 1;
	}
	return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(dialogid == 1)
        {
            if(response)
                {
                        new idauta, zprava[64];
                        idauta = strval(inputtext);
                        if(idauta < 400 || idauta > 611)
                        {
                            SendClientMessage(playerid, 0xFFFFFFFF, "ID vozidla může pouze od 400 do 611.");
                        }
                        else
                        {
                            new idsmazanehoauta;
                            idsmazanehoauta= GetPlayerVehicleID(playerid);
                            DestroyVehicle(idsmazanehoauta);
                            new Float:x, Float:y, Float:z;
                            GetPlayerPos(playerid, x, y, z);
                            mojeauto[playerid] = CreateVehicle(idauta, x, y, z, 82.2873, 0, 1, 60);
                            PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
                            format(zprava, sizeof(zprava), "Vaše auto bylo změněno na auto s ID %d.", idauta);
                            SendClientMessage(playerid, 0xFFFFFFFF, zprava);
                            DestroyPickup(carpickup);
                            carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
                    }
                }
        }
        return 1;
}

Pickup jde sebrat pouze, pokud je hráč ve vozidle :)

Link to comment
Share on other sites

  • 0

172.gif

 

Pane bože, videl si to video? On to chce do závodu ako má MTA:DM preboha. A nie nejaký tvoj skopírovaný odniekadiaľ dialog :facepalm:

 

Ak viem správne tak ten pickup čo sa dá zobrať autom je nefunkčný (polofunkčný či ako to bolo). Stačí timer & WIKI: IsPlayerInRangeOfPoint. No a aby po zmene vozidla sa auto nezastavilo tak najskôr zisti starému autu WIKI: GetVehicleVelocity a tomu novému nastav cez WIKI: SetVehicleVelocity

 

1. Napsal tam, že to chce na auto které zadá, tak sem pochopil dialog.

2. Nikde tu nenapsal že to je na MTA:DM Race a to že sem přiloží toto video, neznamená to že to tak chce(Ale asi máš pravdu)

3. Jsem to nikde neskopíroval

 

Jinak by to šlo i takto

#include <a_samp>

new mojeauto[MAX_PLAYERS];
new carpickup;
public OnFilterScriptInit()
{
	print("\n--------------------------------------");
    print(" ------ Pickup Car[By Expertik] --------");
    print("--------------------------------------\n");
	carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    if(pickupid == carpickup)
    {
        new idsmazanehoauta;
        idsmazanehoauta= GetPlayerVehicleID(playerid);
        DestroyVehicle(idsmazanehoauta);
        new Float:x, Float:y, Float:z;
        GetPlayerPos(playerid, x, y, z);
        mojeauto[playerid] = CreateVehicle(idauta, x, y, z, 82.2873, 0, 1, 60);
        PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
        DestroyPickup(carpickup);
        carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
    }
    return 1;
}
Link to comment
Share on other sites

  • 0

Děkuji že pomáháte, jsem rád že se někdo našel.

Jinak to potřebuji na DM závod. něco jako na tom videu. 

 

 

#include <a_samp>

new mojeauto[MAX_PLAYERS];
new carpickup;
public OnFilterScriptInit()
{
    print("\n--------------------------------------");
print(" ------ Pickup Car[by Expertik] --------");
print("--------------------------------------\n");
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == carpickup)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
mojeauto[playerid] = CreateVehicle(idauta, x, y, z, 82.2873, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
DestroyPickup(carpickup);
carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
}
return 1;
}

 

Jede to, ale problém je ten že, jak vědu do pickupu auto se změní ale, nemůže se odlepit od toho pickupu a portuje se auto dokola. 

 

Ještě jednou díky za rady

Link to comment
Share on other sites

  • 0

Tak to zkus takto :

#include <a_samp>

new mojeauto[MAX_PLAYERS];
new carpickup;
forward pickup();
public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" ------ Pickup Car[By Expertik] --------");
    print("--------------------------------------\n");
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == carpickup)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
mojeauto[playerid] = CreateVehicle(402, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);

DestroyPickup(carpickup);
SetTimer("pickup", 5000, false);
}
return 1;
}
public pickup()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
}
Link to comment
Share on other sites

  • 0

Dík Expertik

 

Je to dobré, ještě kdyby se to auto nepřibrzdilo tak by to bylo super, ale je to zatím nejlepší rada i když děkuji všem co se snaží poradit.

 

Mám ještě dotaz.

Jak mám udělat to aby auto které vjede do pickupu bylo rovně tak jak na něho vědu a ne bokem. Pokud někdo poradí budu mu moc vděčný.

 

Jinak další auto jsem udělal tak to ale, ale problém je v tom že, když do něho vědu neukáže se. 

 

Zatím jsem to dal do fileskriptu, to abych si mohl v klidu vyzkoušet  

 

#include <a_samp>
 
#if defined FILTERSCRIPT
#endif
 
new mojeauto[MAX_PLAYERS];
new carpickup;
new carpickup1;
 
forward pickup();
forward pickup1();
 
public OnFilterScriptInit()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
    
    carpickup1 = CreatePickup(1277, 14, 2069.1807,1272.4403,10.6719, -1);
    return 1;
}
 
public OnFilterScriptExit()
{
    return 1;
}
 
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == carpickup)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
mojeauto[playerid] = CreateVehicle(402, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
 
DestroyPickup(carpickup);
SetTimer("pickup", 5000, false);
}
 
 
if(pickupid == carpickup1)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
mojeauto[playerid] = CreateVehicle(451, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
 
DestroyPickup(carpickup1);
SetTimer("pickup", 5000, false);
}
 
 
 
 
 
 
return 1;
}
public pickup()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
    carpickup1 = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
}

Prosím o radu

Link to comment
Share on other sites

  • 0

Dík Expertik

 

Je to dobré, ještě kdyby se to auto nepřibrzdilo tak by to bylo super, ale je to zatím nejlepší rada i když děkuji všem co se snaží poradit.

 

Mám ještě dotaz.

Jak mám udělat to aby auto které vjede do pickupu bylo rovně tak jak na něho vědu a ne bokem. Pokud někdo poradí budu mu moc vděčný.

 

Jinak další auto jsem udělal tak to ale, ale problém je v tom že, když do něho vědu neukáže se. 

 

Zatím jsem to dal do fileskriptu, to abych si mohl v klidu vyzkoušet  

 

#include <a_samp>
 
#if defined FILTERSCRIPT
#endif
 
new mojeauto[MAX_PLAYERS];
new carpickup;
new carpickup1;
 
forward pickup();
forward pickup1();
 
public OnFilterScriptInit()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
    
    carpickup1 = CreatePickup(1277, 14, 2069.1807,1272.4403,10.6719, -1);
    return 1;
}
 
public OnFilterScriptExit()
{
    return 1;
}
 
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == carpickup)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
mojeauto[playerid] = CreateVehicle(402, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
 
DestroyPickup(carpickup);
SetTimer("pickup", 5000, false);
}
 
 
if(pickupid == carpickup1)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
mojeauto[playerid] = CreateVehicle(451, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
 
DestroyPickup(carpickup1);
SetTimer("pickup", 5000, false);
}
 
 
 
 
 
 
return 1;
}
public pickup()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
    carpickup1 = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
}

Prosím o radu

 

Máš tam špatně if

 

Musí tam být else if

#include <a_samp>


new mojeauto[MAX_PLAYERS];
new carpickup;
new carpickup1;

forward pickup();
forward pickup1();

public OnFilterScriptInit()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
    
    carpickup1 = CreatePickup(1277, 14, 2069.1807,1272.4403,10.6719, -1);
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == carpickup)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetVehicleZAngle(GetPlayerVehicleID(i),a);
mojeauto[playerid] = CreateVehicle(402, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);

DestroyPickup(carpickup);
SetTimer("pickup", 5000, false);
}


else if(pickupid == carpickup1)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetVehicleZAngle(GetPlayerVehicleID(i),a);
mojeauto[playerid] = CreateVehicle(451, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);

DestroyPickup(carpickup1);
SetTimer("pickup", 5000, false);
}






return 1;
}
public pickup()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
    carpickup1 = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
}
Link to comment
Share on other sites

  • 0

#include <a_samp>

#define CV CreateVehicle

 

public OnGameModeInit()
{
Create3DTextLabel("Pickup", 0x1705faff, -2030.3196,-100.7644,35.1641,40,0,1); // PIckup napíš si tam co chceš | 0x1705faff farba |a to dalšie pozicia | 40 - draw distance, 0 - virtual world, 1 - nepojde videt cez steny

pickup = CreatePickup(1581,1,-2030.3196,-100.7644,35.1641); // Vytvoreni Pickup | 1581 ID objektu | 1 neviem čo znamena :d | to dalšie suradnice
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == pickup)
{

new Float:X;

new Float:Y;
new Float:Z;
CV(556,X,Y+5,Z,1,1,1,200000); // CreateVehicle | 556 ID auta | suradnice |
return 1;
}
return 0;
}

 

A tak pokračuj ďalej. :)

Link to comment
Share on other sites

  • 0
  • Globální moderátor

taková maličkost na konec, když na ten pickup vjedeš tak se to dá udělat že se změní auto, ale bohužel jen v MTA to je automaticky že můžeš jet dál. Jinak řečeno vjedeš tam, změní se ti auto, ale budeš mít nulovou rychlost. Co jsem slyšel tak existuje něco co ti jako rychlost dá ale nikdy jsem s tím nedělal ;)

Link to comment
Share on other sites

  • 0

Takže, vygooglil jsem si tu rychlost, co tu psal Hipster

#include <a_samp>


new mojeauto[MAX_PLAYERS];
new carpickup;
new carpickup1;

forward pickup();
forward pickup1();

public OnFilterScriptInit()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);

    carpickup1 = CreatePickup(1277, 14, 2069.1807,1272.4403,10.6719, -1);
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == carpickup)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetVehicleZAngle(idsmazanehoauta,a);
mojeauto[playerid] = CreateVehicle(402, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
SetVehicleSpeed(mojeauto[playerid], Float:100);

DestroyPickup(carpickup);
SetTimer("pickup", 5000, false);
}


else if(pickupid == carpickup1)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetVehicleZAngle(idsmazanehoauta,a);
mojeauto[playerid] = CreateVehicle(451, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
SetVehicleSpeed(mojeauto[playerid], Float:100);

DestroyPickup(carpickup1);
SetTimer("pickup1", 5000, false);
}
return 1;
}
public pickup()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
}
public pickup1()
{
    carpickup1 = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
}
stock SetVehicleSpeed(vehicleid, Float:speed)
{
    new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:a;
    GetVehicleVelocity(vehicleid, x1, y1, z1);
    GetVehiclePos(vehicleid, x2, y2, z2);
    GetVehicleZAngle(vehicleid, a); a = 360 - a;
    x1 = (floatsin(a, degrees) * (speed/100) + floatcos(a, degrees) * 0 + x2) - x2;
    y1 = (floatcos(a, degrees) * (speed/100) + floatsin(a, degrees) * 0 + y2) - y2;
    SetVehicleVelocity(vehicleid, x1, y1, z1);
} 

Mělo by to fungovat

Link to comment
Share on other sites

  • 0

Takže, vygooglil jsem si tu rychlost, co tu psal Hipster

 

 

#include <a_samp>


new mojeauto[MAX_PLAYERS];
new carpickup;
new carpickup1;

forward pickup();
forward pickup1();

public OnFilterScriptInit()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);

    carpickup1 = CreatePickup(1277, 14, 2069.1807,1272.4403,10.6719, -1);
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == carpickup)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetVehicleZAngle(idsmazanehoauta,a);
mojeauto[playerid] = CreateVehicle(402, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
SetVehicleSpeed(mojeauto[playerid], Float:100);

DestroyPickup(carpickup);
SetTimer("pickup", 5000, false);
}


else if(pickupid == carpickup1)
{
new idsmazanehoauta;
idsmazanehoauta= GetPlayerVehicleID(playerid);
DestroyVehicle(idsmazanehoauta);
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetVehicleZAngle(idsmazanehoauta,a);
mojeauto[playerid] = CreateVehicle(451, x, y, z, a, 0, 1, 60);
PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
SetVehicleSpeed(mojeauto[playerid], Float:100);

DestroyPickup(carpickup1);
SetTimer("pickup1", 5000, false);
}
return 1;
}
public pickup()
{
    carpickup = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
}
public pickup1()
{
    carpickup1 = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, -1);
}
stock SetVehicleSpeed(vehicleid, Float:speed)
{
    new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:a;
    GetVehicleVelocity(vehicleid, x1, y1, z1);
    GetVehiclePos(vehicleid, x2, y2, z2);
    GetVehicleZAngle(vehicleid, a); a = 360 - a;
    x1 = (floatsin(a, degrees) * (speed/100) + floatcos(a, degrees) * 0 + x2) - x2;
    y1 = (floatcos(a, degrees) * (speed/100) + floatsin(a, degrees) * 0 + y2) - y2;
    SetVehicleVelocity(vehicleid, x1, y1, z1);
} 

 

 

Mělo by to fungovat

Za 1. Nechápu, proč zbytečně zakládáš timer, kde vytváříš další pickupy ( Samozřejmě, pokud je například po závodě chce resetnout, pro další tak to ano ).

Za 2. Nemusíš neustále u každého sebraného pickupu si zakládat další proměnné. Ten callb se týká, pokud sebere jakýkoliv pickup. To samé i z normálními proměnnami.  Mít tam:

new carpickup;
new carpickup1;
new carpickup2;
new carpickup3;
new carpickup4;

Není zrovna idelání.

 

Za 3: Taky, když přidáváš tu rychlost, za prvé Float: je u proměn, a za druhé 100 je moc. Co kdyby měl pomalejší auto?.

Za 4: Řekni mi, jak můžeš kontrolovat ID vozidla, které jsi zníčil?

 

Prosim (Vyzkoušeno a funguje dle přání autora :) ):

 

 

#include <a_samp>

new
    mojeauto[MAX_PLAYERS],
    carpickup[3];

public
        OnFilterScriptInit() {
    carpickup[0] = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, 0);
    carpickup[1] = CreatePickup(1277, 14, 2069.1807,1272.4403,10.6719, 0);
    carpickup[2] = CreatePickup(1277, 14, 2069.0012, 1189.341, 10.6719, 0);
    return 1;
}

public
        OnPlayerPickUpPickup(playerid, pickupid) {
    new
        Float:Pos[4],
        idsmazanehoauta = GetPlayerVehicleID(playerid);
    if(pickupid == carpickup[0]) {
        GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]), GetVehicleZAngle(idsmazanehoauta,Pos[3]);
        DestroyVehicle(GetPlayerVehicleID(playerid)); //Vztoupil na první s nějakým vozidlem.
        mojeauto[playerid] = CreateVehicle(402, Pos[0], Pos[1], Pos[2],Pos[3], 0, 1, 60);
        PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
        SetVehicleSpeed(GetPlayerVehicleID(playerid), 50.0);
        DestroyPickup(carpickup[0]);
    }


    else if(pickupid == carpickup[1]) {
        GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]), GetVehicleZAngle(idsmazanehoauta,Pos[3]);
        mojeauto[playerid] = CreateVehicle(412, Pos[0], Pos[1], Pos[2],Pos[3], 0, 1, 60);
        DestroyVehicle(idsmazanehoauta);
        PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
        SetVehicleSpeed(GetPlayerVehicleID(playerid), 50.0);
        DestroyPickup(carpickup[1]);
    }
    
    else if(pickupid == carpickup[2]) {
        GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]), GetVehicleZAngle(idsmazanehoauta,Pos[3]);
        mojeauto[playerid] = CreateVehicle(412, Pos[0], Pos[1], Pos[2],Pos[3], 0, 1, 60);
        DestroyVehicle(idsmazanehoauta);
        PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
        SetVehicleSpeed(GetPlayerVehicleID(playerid), 50.0);
        DestroyPickup(carpickup[2]);
    }
    
    return 1;
}

stock SetVehicleSpeed(vehicleid, Float:speed)
{
    new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:a;
    GetVehicleVelocity(vehicleid, x1, y1, z1);
    GetVehiclePos(vehicleid, x2, y2, z2);
    GetVehicleZAngle(vehicleid, a); a = 360 - a;
    x1 = (floatsin(a, degrees) * (speed/100) + floatcos(a, degrees) * 0 + x2) - x2;
    y1 = (floatcos(a, degrees) * (speed/100) + floatsin(a, degrees) * 0 + y2) - y2;
    SetVehicleVelocity(vehicleid, x1, y1, z1);
}

 

 

 

Link to comment
Share on other sites

  • 0

Za 1. Nechápu, proč zbytečně zakládáš timer, kde vytváříš další pickupy ( Samozřejmě, pokud je například po závodě chce resetnout, pro další tak to ano ).

Za 2. Nemusíš neustále u každého sebraného pickupu si zakládat další proměnné. Ten callb se týká, pokud sebere jakýkoliv pickup. To samé i z normálními proměnnami.  Mít tam:

new carpickup;
new carpickup1;
new carpickup2;
new carpickup3;
new carpickup4;

Není zrovna idelání.

 

Za 3: Taky, když přidáváš tu rychlost, za prvé Float: je u proměn, a za druhé 100 je moc. Co kdyby měl pomalejší auto?.

Za 4: Řekni mi, jak můžeš kontrolovat ID vozidla, které jsi zníčil?

 

Prosim (Vyzkoušeno a funguje dle přání autora :) ):

 

 

#include <a_samp>

new
    mojeauto[MAX_PLAYERS],
    carpickup[3];

public
        OnFilterScriptInit() {
    carpickup[0] = CreatePickup(1277, 14, 2069.0979,1312.9354,10.6719, 0);
    carpickup[1] = CreatePickup(1277, 14, 2069.1807,1272.4403,10.6719, 0);
    carpickup[2] = CreatePickup(1277, 14, 2069.0012, 1189.341, 10.6719, 0);
    return 1;
}

public
        OnPlayerPickUpPickup(playerid, pickupid) {
    new
        Float:Pos[4],
        idsmazanehoauta = GetPlayerVehicleID(playerid);
    if(pickupid == carpickup[0]) {
        GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]), GetVehicleZAngle(idsmazanehoauta,Pos[3]);
        DestroyVehicle(GetPlayerVehicleID(playerid)); //Vztoupil na první s nějakým vozidlem.
        mojeauto[playerid] = CreateVehicle(402, Pos[0], Pos[1], Pos[2],Pos[3], 0, 1, 60);
        PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
        SetVehicleSpeed(GetPlayerVehicleID(playerid), 50.0);
        DestroyPickup(carpickup[0]);
    }


    else if(pickupid == carpickup[1]) {
        GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]), GetVehicleZAngle(idsmazanehoauta,Pos[3]);
        mojeauto[playerid] = CreateVehicle(412, Pos[0], Pos[1], Pos[2],Pos[3], 0, 1, 60);
        DestroyVehicle(idsmazanehoauta);
        PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
        SetVehicleSpeed(GetPlayerVehicleID(playerid), 50.0);
        DestroyPickup(carpickup[1]);
    }
    
    else if(pickupid == carpickup[2]) {
        GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]), GetVehicleZAngle(idsmazanehoauta,Pos[3]);
        mojeauto[playerid] = CreateVehicle(412, Pos[0], Pos[1], Pos[2],Pos[3], 0, 1, 60);
        DestroyVehicle(idsmazanehoauta);
        PutPlayerInVehicle(playerid, mojeauto[playerid], 0);
        SetVehicleSpeed(GetPlayerVehicleID(playerid), 50.0);
        DestroyPickup(carpickup[2]);
    }
    
    return 1;
}

stock SetVehicleSpeed(vehicleid, Float:speed)
{
    new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:a;
    GetVehicleVelocity(vehicleid, x1, y1, z1);
    GetVehiclePos(vehicleid, x2, y2, z2);
    GetVehicleZAngle(vehicleid, a); a = 360 - a;
    x1 = (floatsin(a, degrees) * (speed/100) + floatcos(a, degrees) * 0 + x2) - x2;
    y1 = (floatcos(a, degrees) * (speed/100) + floatsin(a, degrees) * 0 + y2) - y2;
    SetVehicleVelocity(vehicleid, x1, y1, z1);
}

 

 

 

Celkem pěkné, ale jelikož to chce do závodu, tak když hráč projede pickupem, tak zmizí a už se neobjeví, proto jsem tam měl ten timer na vytvoření po 5 sekundách

(To zjištění a nastavení rychlosti jsem měl špatně, mělo to být s tim PlayerId :) )

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...