thuron Geplaatst: 10 maart 2009 Rapport Geplaatst: 10 maart 2009 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? Reageren
Crusher!! Geplaatst: 10 maart 2009 Rapport Geplaatst: 10 maart 2009 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 Reageren
Sandra Geplaatst: 10 maart 2009 Rapport Geplaatst: 10 maart 2009 (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 Bewerkt: 11 maart 2009 door =>Sandra<= Reageren
thuron Geplaatst: 11 maart 2009 Auteur Rapport Geplaatst: 11 maart 2009 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 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? Reageren
Big Boss Geplaatst: 11 maart 2009 Rapport Geplaatst: 11 maart 2009 (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: 11 maart 2009 door Big Boss Reageren
thuron Geplaatst: 11 maart 2009 Auteur Rapport Geplaatst: 11 maart 2009 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) Reageren
Sandra Geplaatst: 11 maart 2009 Rapport Geplaatst: 11 maart 2009 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. Reageren
thuron Geplaatst: 11 maart 2009 Auteur Rapport Geplaatst: 11 maart 2009 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. Reageren
Sandra Geplaatst: 11 maart 2009 Rapport Geplaatst: 11 maart 2009 (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: 11 maart 2009 door =>Sandra<= Reageren
thuron Geplaatst: 12 maart 2009 Auteur Rapport Geplaatst: 12 maart 2009 ja, die had ik er al uitgehaald bij compilen Reageren
thuron Geplaatst: 22 maart 2009 Auteur Rapport Geplaatst: 22 maart 2009 nu heb ik het bijna voor elkaar , 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? Reageren
thuron Geplaatst: 25 maart 2009 Auteur Rapport Geplaatst: 25 maart 2009 attentie aan aarde, iemand een oplossing? Reageren
Sandra Geplaatst: 26 maart 2009 Rapport Geplaatst: 26 maart 2009 nu heb ik het bijna voor elkaar , 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; } Reageren
thuron Geplaatst: 26 maart 2009 Auteur Rapport Geplaatst: 26 maart 2009 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... Reageren
Sandra Geplaatst: 26 maart 2009 Rapport Geplaatst: 26 maart 2009 Oke, probeer deze maar eens: http://pastebin.com/f67fc7c3a Reageren
Recommended Posts
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.