Jump to content

truck job script


Recommended Posts

Geplaatst:

halllo,ik ben sinds kort (ong 105 minuten nu) bezig met een truck script. nu heb ik een stuk script waarin verteld word dat als je "/buyprod" doet, dat er een trailer aan je vrachtwagen word ge-attached.

nu heb ik 5 vrachtwagens en 5 trailers, maar wil ik liever niet dat stukje script 5x opschrijven. hoe kan ik dat makkelijk doen?

hier is het stukje script:

  if(!strcmp("/buyprod", cmdtext, true,9))
{
	if(!IsPlayerInVehicle(playerid, vehicle1))
 {
 SendClientMessage(playerid, COLOR_RED, "You have to be in a truck!");
 }
 else if(GetPlayerMoney(playerid) >= 500)
 {
 GivePlayerMoney(playerid, -500);
 SendClientMessage(playerid, COLOR_CYELLOW, "You have bought products for $500.");
 AttachTrailerToVehicle(trailer1,vehicle1);
 }
  else
  {
  SendClientMessage(playerid, COLOR_CYELLOW, "You dont have $500!");
 }
 return 1;
 }
return 0;
}

ik dacht eerst nog aan bijv "vehicle1 || vehicle2 || enz" maar dan blijft hij trailer 1 attachen, wat natuurlijk maar 1 keer kan. Hoe kan ik dan zorgen dat als je in truck 1 zit, dat trailer 1 word ge-attached, en dat als je in truck 2 zit, dat trailer 2 word ge-attached, enz., zonder een ellenlang script?

Geplaatst:

en iets met

#include <a_samp>
//--
forward AttachTrailer(vehilceid);
//--
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/AttachTrailer", cmdtext, true, 10) == 0)
{
new vehilceid = GetPlayerVehicleID(playerid);
//--
if (vehilceid == 403) //linerunner
{
	AttachTrailer(vehilceid);
}
//--
if (vehilceid == 515) //roadtrain
{
	AttachTrailer(vehilceid);
}
//--
if (vehilceid == 514) //tanker
{
	AttachTrailer(vehilceid);
}
//--
return 1;
}
return 0;
}
//--
public AttachTrailer(vehilceid)
{
	new RandomTrailer = random (4);
//--
if(RandomTrailer == 0)
{
	AttachTrailerToVehicle(584,vehilceid);
}
//--
if(RandomTrailer == 1)
{
	AttachTrailerToVehicle(435,vehilceid);
}
//--
if(RandomTrailer == 2)
{
	AttachTrailerToVehicle(450,vehilceid);
}
//--
if(RandomTrailer == 3)
{
	AttachTrailerToVehicle(591,vehilceid);
}
//--
return 1;
}

is dit wat?

owja, dit script heeft ook random trailer dan krijg je die en dan weer die is steeds verschillend

Geplaatst: (bewerkt)

Ten eerste moet je de defines veranderen, je hebt waarschijnlijk bovenaan je script:

new vehicle1, vehicle2, vehicle3, vehicle4, vehicle5;
new trailer1, trailer2, trailer3, trailer4, trailer5;

Dat moet je vervangen met:

new truck[5]; 
new trailer[5];

(Ik heb 'vehicle' even veranderd naar 'truck' voor de duidelijkheid.

Als je meer trucks/trailers hebt, verander het getal achteraan dan naar het juiste aantal.

Nu moet de code die je bij OnGameModeInit hebt staan, veranderd worden.

Er zal waarschijnlijk iets staan zoals:

vehicle1 = AddStaticVehicle(blablabla);
vehicle2 = AddStaticVehicle(blablabla);
...
trailer1 = AddStaticVehicle(blablabla);
trailer2 = AddStaticVehicle(blablabla);
...enzovoort

Dat moet je vervangen met:

truck[0] = AddStaticVehicle(blablabla);
truck[1] = AddStaticVehicle(blablabla);
truck[2] = AddStaticVehicle(blablabla);
truck[3] = AddStaticVehicle(blablabla);
truck[4] = AddStaticVehicle(blablabla);

trailer[0] = AddStaticVehicle(blablabla);
trailer[1] = AddStaticVehicle(blablabla);
trailer[2] = AddStaticVehicle(blablabla);
trailer[3] = AddStaticVehicle(blablabla);
trailer[4] = AddStaticVehicle(blablabla);

Nu komen we aan bij je commando:

We gaan een loop gebruiken (om te kijken in welke van de 5 vrachtwagens de speler zit):

if(!strcmp("/buyprod", cmdtext, true,9))
{
new TruckGevonden;
for(new i; i<sizeof(truck); i++)
{ 
	if(TruckGevonden == 0)
	{
		if(IsPlayerInVehicle(playerid, truck[i]))
		{
			TruckGevonden= 1;
			if(GetPlayerMoney(playerid) >= 500)
			{
				GivePlayerMoney(playerid, -500);
				SendClientMessage(playerid, COLOR_CYELLOW, "You have bought products for $500.");
				AttachTrailerToVehicle(trailer[i], truck[i]);
			}
			else
			{
				SendClientMessage(playerid, COLOR_CYELLOW, "You dont have $500!");
			}
		}
	}
}
if(TruckGevonden == 0)
{
	SendClientMessage(playerid, COLOR_CYELLOW, "You have to be in a truck!");
}
return 1;
}

Ik hoop dat je het begrijpt :puh:

Bewerkt: door =>Sandra<=
Geplaatst:
Ten eerste moet je de defines veranderen, je hebt waarschijnlijk bovenaan je script:

new vehicle1, vehicle2, vehicle3, vehicle4, vehicle5;
new trailer1, trailer2, trailer3, trailer4, trailer5;

Dat moet je vervangen met:

new truck[5]; 
new trailer[5];

(Ik heb 'vehicle' even veranderd naar 'truck' voor de duidelijkheid.

Als je meer trucks/trailers hebt, verander het getal achteraan dan naar het juiste aantal.

Nu moet de code die je bij OnGameModeInit hebt staan, veranderd worden.

Er zal waarschijnlijk iets staan zoals:

vehicle1 = AddStaticVehicle(blablabla);
vehicle2 = AddStaticVehicle(blablabla);
...
trailer1 = AddStaticVehicle(blablabla);
trailer2 = AddStaticVehicle(blablabla);
...enzovoort

Dat moet je vervangen met:

truck[0] = AddStaticVehicle(blablabla);
truck[1] = AddStaticVehicle(blablabla);
truck[2] = AddStaticVehicle(blablabla);
truck[3] = AddStaticVehicle(blablabla);
truck[4] = AddStaticVehicle(blablabla);

trailer[0] = AddStaticVehicle(blablabla);
trailer[1] = AddStaticVehicle(blablabla);
trailer[2] = AddStaticVehicle(blablabla);
trailer[3] = AddStaticVehicle(blablabla);
trailer[4] = AddStaticVehicle(blablabla);

Nu komen we aan bij je commando:

We gaan een loop gebruiken (om te kijken in welke van de 5 vrachtwagens de speler zit):

if(!strcmp("/buyprod", cmdtext, true,9))
{
new TruckGevonden;
for(new i; i<sizeof(trucks); i++)
{ 
	if(TruckGevonden == 0)
	{
		if(IsPlayerInVehicle(playerid, truck[i]))
		{
			TruckGevonden= 1;
			if(GetPlayerMoney(playerid) >= 500)
			{
				GivePlayerMoney(playerid, -500);
				SendClientMessage(playerid, COLOR_CYELLOW, "You have bought products for $500.");
				AttachTrailerToVehicle(trailer[i], truck[i]);
			}
			else
			{
				SendClientMessage(playerid, COLOR_CYELLOW, "You dont have $500!");
			}
		}
	}
}
if(TruckGevonden == 0)
{
	SendClientMessage(playerid, COLOR_CYELLOW, "You have to be in a truck!");
}
return 1;
}

Ik hoop dat je het begrijpt :puh:

opzich wel, maar in elk voertuig dat ik nu stap, krijg ik het bericht "You can now buy products by typing the command /buyprod"

dat gebeurt hier, maar ik heb toch echt alleen de trucks ingevoerd...:

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if (vehicleid == truck[0] || truck[1] || truck[2] || truck[3] || truck[4])
{
SendClientMessage(playerid, COLOR_GREEN, "You can now buy products by typing the command /buyprod");
return 1;
}
 return 0;
}

enig idee?

Geplaatst: (bewerkt)

Ook een loop gebruiken denk ik.

En onder OnPlayerStateChange zetten. OnPlayerEnterVehicle wordt namelijk geactiveerd wanneer een speler op de return/f toets drukt, ook al is de bewuste auto op slot.

public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
	for(new i = 0; i <= sizeof(truck); i++)
	{
		if(IsPlayerInVehicle(playerid, truck[i])
		{
			SendClientMessage(playerid, COLOR_GREEN, "You can buy products ...");
		}
	}
}
return 1;
}

Bewerkt: door Big Boss
Geplaatst:
Ook een loop gebruiken denk ik.

En onder OnPlayerStateChange zetten. OnPlayerEnterVehicle wordt namelijk geactiveerd wanneer een speler op de return/f toets drukt, ook al is de bewuste auto op slot.

public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
	for(new i = 0; i <= sizeof(truck); i++)
	{
		if(IsPlayerInVehicle(playerid, truck[i])
		{
			SendClientMessage(playerid, COLOR_GREEN, "You can buy products ...");
		}
	}
}
return 1;
}

ik snap ff niet wat je bedoel. dus ik moet gewoon de OnPlayerEnterVehicle weglate???(ik bedoel { return 1 } alleen dan)

Geplaatst:

Het is beter om OnPlayerStateChange te gebruiken in plaats van OnPlayerEnterVehicle

OnPlayerStateChange word pas gestart als de speler ook daadwerkelijk in het voertuig zit en klaar is om te rijden.

OnPlayerEnterVehicle word al gestart wanneer de speler op de 'enter'-toets drukt om in te stappen. Tijdens die handeling is het nog mogelijk om het instappen te stoppen en kan de speler het bericht krijgen zonder dat hij/zij in het voertuig zit.

Dus je kan beter de OnPlayerEnterVehicle-callback leeghalen en nu de OnPlayerStateChange-callback van Big Boss gebruiken.

Geplaatst:

hij doet het bijna!!! hij geeft alle SendClientMessages al bij alle trucks, maar als ik op de goede plek ga staan en /buyprod doe, doet hij het alleen met truck nummer 0, en niet met de rest.

Geplaatst: (bewerkt)

Ik zie nu een typfoutje van mij in de commando-code.

for(new i; i<sizeof(trucks); i++)

die "trucks" moet "truck" zijn. Dus zonder een s. Ik weet niet zeker of dit de oorzaak van het probleem was.

Bewerkt: door =>Sandra<=
  • 2 weken later...
Geplaatst:

nu heb ik het bijna voor elkaar :D, alleen als ik /sellprod doe, wil dat alleen bij de 1e truck. bij buyprod werkt het wel...

  if(!strcmp("/sellprod", cmdtext, true,9))
 for(new i; i<sizeof(truck); i++)
{
if(!PlayerToPoint(10.0,playerid,-1866.2645, 1409.7406, 7.7822))
 return SendClientMessage(playerid, COLOR_RED, "You have to be at the truck unloadstation!");
if(!IsTrailerAttachedToVehicle(truck[i]))
 return SendClientMessage(playerid, COLOR_RED, "You don't have anything to sell!");
if(!IsPlayerInVehicle(playerid, truck[i]))
	return SendClientMessage(playerid, COLOR_RED, "You have to be in a truck!");
GivePlayerMoney(playerid,600);
SendClientMessage(playerid, COLOR_GREEN, "You have sold your products for 600");
DetachTrailerFromVehicle(truck[i]);
DestroyVehicle(trailer[i]);
DestroyCheckpoint(truckcp1);
return 1;
}
 return 0;
}

wat zou ik moeten veranderen?

Geplaatst:

nu heb ik het bijna voor elkaar :D, alleen als ik /sellprod doe, wil dat alleen bij de 1e truck. bij buyprod werkt het wel...

  
if(!strcmp("/sellprod", cmdtext, true,9))
{
new truckfound = 0;
if(!PlayerToPoint(10.0,playerid,-1866.2645, 1409.7406, 7.7822))
	return SendClientMessage(playerid, COLOR_RED, "You have to be at the truck unloadstation!");
for(new i; i<sizeof(truck); i++)
{
	if(truckfound == 0 && IsPlayerInVehicle(playerid, truck[i]))
	{
		truckfound = 1;
		if(IsTrailerAttachedToVehicle(truck[i]))
		{
			GivePlayerMoney(playerid,600);
		SendClientMessage(playerid, COLOR_GREEN, "You have sold your products for 600");
		DetachTrailerFromVehicle(truck[i]);
		DestroyVehicle(trailer[i]);
			DestroyCheckpoint(truckcp1);
			break;
		}
		else
		{ 
			SendClientMessage(playerid, COLOR_RED, "You don't have anything to sell!"); 
		}
	}
	else
	{
		SendClientMessage(playerid, COLOR_RED, "You have to be in a truck!");
	}
}
return 1;
}

Geplaatst:

heeeeel erg bedankt sandra!!!! hij doet het nu. alleen krijg ik als ik /sellprod doe steeds een aantal berichten dat ik niet in een truck zit, terwijl ik dat wel zit, en hij verkoopt mn trailer ook en de checkpoint gaat ook weg, alleen stuurt ie een paar keer dat bericht...

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...