David22 Geplaatst: 15 april 2009 Rapport Geplaatst: 15 april 2009 (bewerkt) Tutorial Verwijderbare objecten en voertuigen maken Welkom! Je kent het vast wel: heb je een leuk filterscript gemaakt waarmee je wat voertuigen en objecten plaatst, verdwijnen ze niet als je het filterscript unload! Gelukkig is daar wat simpels voor te maken, en hoe je dat doet leg ik uit in deze tutorial! Okay, voordat het werkelijke scriptwerk begint, hebben we twee variabelen nodig. CreateObject(18449, -531.890564, -144.243698, 68.263382, 0.0000, 22.3454, 269.7592); CreateObject(10757, -568.168640, -180.696716, 82.207024, 30.9397, 355.7028, 122.0311); CreateObject(16409, -532.680664, -100.009903, 83.704559, 0.0000, 0.0000, 89.0631); CreateObject(2780, -538.811340, -108.151123, 83.677376, 0.0000, 0.0000, 0.0000); CreateObject(2780, -525.228394, -106.688660, 83.685410, 0.0000, 0.0000, 0.0000); CreateObject(7419, -1254.041748, 178.796753, 6.887449, 0.0000, 0.0000, 45.0000); CreateObject(2780, -1269.653931, 129.249191, 13.148438, 0.0000, 0.0000, 0.0000); CreateObject(2780, -1260.302124, 117.892700, 13.148438, 0.0000, 0.0000, 0.0000); CreateObject(17058, -723.188721, 987.671143, 11.114426, 0.0000, 0.0000, 270.0000); CreateObject(971, -723.326050, 1002.465393, 10.924068, 0.0000, 0.0000, 0.0000); CreateObject(1411, -723.119629, 1002.380249, 16.087168, 0.0000, 0.0000, 180.0000); CreateObject(1696, -723.119629, 956.280518, 12.140042, 0.0000, 0.0000, 0.0000); CreateObject(2780, -719.088684, 948.644165, 11.132813, 0.0000, 0.0000, 0.0000); CreateObject(2780, -726.397461, 949.101013, 11.215046, 0.0000, 0.0000, 0.0000); CreateObject(3461, -565.290161, -179.846405, 79.978760, 0.0000, 0.0000, 0.0000); CreateObject(3461, -562.322144, -182.661942, 76.799942, 0.0000, 340.2330, 73.9115); CreateObject(3461, -565.504822, -175.635361, 79.273697, 0.0000, 0.0000, 0.0000); CreateObject(3267, -439.887939, -68.630669, 57.696949, 0.0000, 0.0000, 123.7500); CreateObject(3267, -439.733734, -58.771431, 57.590263, 0.0000, 0.0000, 56.2500); CreateObject(18248, -472.388763, -85.738281, 66.895912, 0.0000, 0.0000, 270.0000); CreateObject(18450, -1063.468628, 336.187775, 12.685352, 0.0000, 0.0000, 326.2500); CreateObject(18450, -1001.973328, 294.993164, 12.726391, 0.0000, 0.0000, 326.2500); CreateObject(18450, -942.352417, 255.150513, 12.713346, 0.0000, 0.0000, 326.2500); CreateObject(18450, -875.921753, 210.762375, 12.721890, 0.0000, 0.0000, 326.2500); CreateObject(18450, -810.246826, 166.857025, 4.403103, 0.0000, 12.0321, 326.2500); CreateObject(4870, -946.920593, 520.640625, 13.184609, 0.0000, 0.0000, 225.0000); CreateObject(4870, -826.310791, 641.242859, 13.138460, 0.0000, 0.0000, 225.0000); CreateObject(3461, -688.079346, 931.390991, 20.764534, 0.0000, 0.0000, 0.0000); CreateObject(1451, -700.960632, 945.600952, 12.179315, 0.0000, 0.0000, 213.7500); CreateObject(1312, -691.576050, 685.758850, 19.823063, 0.0000, 0.0000, 258.7500); CreateObject(978, -775.843201, 720.647522, 18.054016, 0.0000, 0.0000, 225.0000); CreateObject(16480, -703.594055, 901.298096, 14.225965, 0.0000, 0.0000, 326.2500); CreateObject(1681, -1373.006836, 119.500229, 16.126463, 0.0000, 0.0000, 0.0000); CreateObject(1682, -1252.160278, 58.901104, 25.446415, 0.0000, 0.0000, 45.0000); CreateObject(12986, -1286.984009, 64.705536, 14.671068, 0.0000, 0.0000, 90.0000); CreateObject(1634, -1252.099121, 200.933014, 28.708090, 0.0000, 0.0000, 0.0000); AddStaticVehicle(415,-1246.0798,67.3544,13.9075,45.2712,-1,-1); // cheetah 1 AddStaticVehicle(415,-1265.0505,94.9274,13.9182,132.6222,-1,-1); // cheetah 2 AddStaticVehicle(415,-1280.8721,58.8457,13.9197,341.9323,-1,-1); // cheetah 3 AddStaticVehicle(415,-1281.5247,137.2139,14.3180,142.2358,-1,-1); // cheetah 4 AddStaticVehicle(415,-1299.4443,174.1530,13.9204,316.5008,-1,-1); // cheetah 5 AddStaticVehicle(415,-1110.6226,351.6973,14.2697,143.0047,-1,-1); // cheetah 6 AddStaticVehicle(415,-1040.3781,447.1841,14.3167,161.1771,-1,-1); // cheetah 7 AddStaticVehicle(415,-738.8785,711.2610,17.7923,81.4575,-1,-1); // cheetah 8 AddStaticVehicle(415,-697.8035,928.7279,12.0611,187.6023,-1,-1); // cheetah 9 AddStaticVehicle(415,-448.1937,606.5637,16.6629,138.8947,-1,-1); // cheetah 10 AddStaticVehicle(481,-378.2030,549.6870,15.9394,270.0285,-1,-1); // bmx 1 AddStaticVehicle(481,-148.2919,568.3095,3.8931,202.0962,-1,-1); // bmx 2 AddStaticVehicle(481,-199.9771,205.2498,11.0562,76.5678,-1,-1); // bmx 3 AddStaticVehicle(468,-230.4081,135.4944,2.0503,89.1511,-1,-1); // sanchez 1 AddStaticVehicle(468,-316.5216,7.6442,5.0018,258.6052,-1,-1); // sanchez 2 AddStaticVehicle(468,-257.7255,247.6704,8.6487,264.6925,-1,-1); // sanchez 3 AddStaticVehicle(468,-540.0297,289.3087,1.7466,93.3793,-1,-1); // sanchez 4 AddStaticVehicle(468,-703.7765,225.9043,2.2391,95.6326,-1,-1); // sanchez 5 AddStaticVehicle(596,-852.3827,201.9853,13.8830,59.7318,-1,-1); // police car 1 AddStaticVehicle(466,-859.4181,205.8807,13.9034,56.2140,-1,-1); // glendale 1 AddStaticVehicle(596,-865.6656,208.7127,13.7868,25.0977,-1,-1); // police car 2 AddStaticVehicle(596,-1101.3206,418.7402,13.9984,308.2130,-1,-1); // police car 3 AddStaticVehicle(478,-1235.3409,225.6927,14.1417,45.2991,-1,-1); // walton 1 AddStaticVehicle(478,-1302.0500,217.9082,14.2567,311.6055,-1,-1); // walton 2 AddStaticVehicle(478,-978.1595,499.4880,14.2626,314.2122,-1,-1); // walton 3 AddStaticVehicle(478,-909.2534,548.6572,14.2583,314.2584,-1,-1); // walton 4 AddStaticVehicle(478,-777.7755,722.2853,18.2111,314.7246,-1,-1); // walton 4 AddStaticVehicle(429,-710.6606,902.5749,12.1490,102.6387,-1,-1); // banshee 1 AddStaticVehicle(429,-141.2498,565.3396,15.5928,281.3436,-1,-1); // banshee 2 AddStaticVehicle(429,-219.4510,168.5342,5.6047,336.4668,-1,-1); // banshee 3 AddStaticVehicle(532,-192.4453,149.0722,6.5522,269.7409,-1,-1); // combine 1 AddStaticVehicle(532,-173.1747,59.7661,4.0871,112.1821,-1,-1); // combine 2 AddStaticVehicle(422,-242.6467,106.5920,1.4693,29.0543,-1,-1); // bobcat 1 AddStaticVehicle(429,-505.1876,-197.7580,78.0851,2.8563,-1,-1); // banshee 4 AddStaticVehicle(493,-220.1744,290.1382,-0.2335,90.6052,-1,-1); // jetmax 1 AddStaticVehicle(493,-651.8765,868.2969,-0.1179,227.5410,-1,-1); // jetmax 2 AddStaticVehicle(493,-1110.3754,326.8241,-0.1758,346.9234,-1,-1); // jetmax 3 AddStaticVehicle(468,-970.5850,266.4257,13.9275,52.0427,-1,-1); // sanchez AddStaticVehicle(468,-894.4867,581.9889,13.9399,319.9369,-1,-1); // sanchez AddStaticVehicle(415,-681.1357,927.3202,11.9162,180.3011,-1,-1); // cheetah 11 AddStaticVehicle(415,-665.4614,939.6400,11.9039,178.2806,-1,-1); // cheetah 12 AddStaticVehicle(415,-675.4451,946.6476,11.9057,358.5767,-1,-1); // cheetah 13 AddStaticVehicle(415,-670.5839,946.5580,11.9027,1.0754,-1,-1); // cheetah 14 AddStaticVehicle(415,-713.4785,974.6740,12.0760,174.2127,-1,-1); // cheetah 15 AddStaticVehicle(555,-824.9886,795.2200,17.6882,174.5484,-1,-1); // windsor 1 AddStaticVehicle(555,-677.2943,661.9299,16.3188,270.3123,-1,-1); // windsor 2 AddStaticVehicle(540,-541.8388,-99.6982,63.2608,350.0063,-1,-1); // vincent AddStaticVehicle(540,-485.4763,-75.3216,60.7744,357.3389,-1,-1); // vincent 2 AddStaticVehicle(401,-436.9603,-72.4894,58.7233,81.8564,-1,-1); // bravura AddStaticVehicle(571,-549.8361,-45.2632,63.0628,282.8861,-1,-1); // kart AddStaticVehicle(571,-446.3446,-57.2444,58.6188,92.1363,-1,-1); // kart 2 AddStaticVehicle(551,-452.4746,-47.0027,59.5798,356.7180,-1,-1); // merit AddStaticVehicle(551,-351.9323,172.9244,6.0030,262.8865,-1,-1); // merit 2 AddStaticVehicle(551,-200.3244,219.0175,11.8002,328.8337,-1,-1); // merit 3 AddStaticVehicle(547,-203.6881,255.1527,11.9097,345.3012,-1,-1); // primo AddStaticVehicle(547,-115.2471,535.3886,6.9055,89.5871,-1,-1); // primo 2 AddStaticVehicle(547,-107.6367,578.9495,3.2030,194.6143,-1,-1); // primo 3 Zoals je ziet worden hier de AddStaticVehicle en AddObject-functies gebruikt. Deze functies gaan wij ombuigen naar de CreateDeletableVehicle en CreateDeletableObject-functies. Maar voordat we dat doen, moeten we eerst de gamemode vertellen dat de objecten en voertuigen die we maken met CreateObject en AddStaticVehicle / CreateVehicle. Dit doen we door aan te nemen dat elk voertuig en object hiermee is gemaakt, en later de uitzonderingen toe te voegen. public Instellingen() //de functie Instellingen code geven { for(new i = 0; i <= MAX_VEHICLES; i++) //Als i nog kleiner is als 700, voer de code dan uit en maak i er eentje groter { VerwijderbareAuto[i] = 0; //Het is geen verwijderbare auto. } for(new j = 0; j <= MAX_OBJECTS; j++) //Als j kleiner is als 150, voer de code dan uit en maak j er eentje groter { VerwijderbaarObject[j] = 0; //Het is geen verwijderbaar object } } Nu gaan we de CreateDeletableVehicle, CreateDeletableObject, CreateAllVehicles, CreateAllObjects, DeleteAllVehicles en DeleteAllObjects functies maken. Omdat het nogal moeilijk is om dit zin voor zin uit te leggen, plaats ik de code maar even op een andere manier, namelijk met commentaar erbij. public CreateDeletableVehicle(modelid, Float:x, Float:y,Float:z, Float:angle, color1, color2) { // De functie CreateDeletableVehicle maken new vehid; // Een variabele maken om het id van het voertuig in op te slaan vehid = AddStaticVehicle(modelid, x, y, z, angle, color1, color2); // Het voertuig neerzetten VerwijderbareAuto[vehid] = 1; // Het voertuig is verwijderbaar. return vehid; // Het id van het voertuig returnen. } public CreateDeletableObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ) { // De functie CreateDeletableObject maken new obid; // Variabele maken om het id van het object in op te slaan obid = CreateObject(modelid, X, Y, Z, rX, rY, rZ); // Het object maken VerwijderbaarObject[obid] = 1; // Het object is verwijderbaar return obid; // Het id van het net gemaakte object returnen. } public DeleteAllVehicles() { // De functie DeleteAllVehicles maken for(new i = 0; i <= MAX_VEHICLES; i++) // Maak de nieuwe variabele i aan, als deze kleiner is als 700 is wordt de code uitgevoerd en 1 bij i opgeteld. { if(VerwijderbareAuto[i] == 1) // Als de auto verwijderbaar is... { DestroyVehicle(i); // De auto verwijderen VerwijderbareAuto[i] = 0; // De auto is niet meer verwijderbaar } } } public DeleteAllObjects() { // De functie DeleteAllObjects maken for(new i = 0; i <= MAX_OBJECTS; i++) // Maak de nieuwe variabele i aan, als deze kleiner is als 150 is wordt de code uitgevoerd en 1 bij i opgeteld. { if(VerwijderbaarObject[i] == 1) // Als het object verwijderbaar is... { DestroyObject(i); // Het object verwijderen VerwijderbaarObject[i] = 0; // Het object is niet meer verwijderbaar } } } Dit zijn de belangrijkste functies. Nu moeten we alleen nog de CreateAllVehicles en CreateAllObjects functie's toevoegen, maar de inhoud van deze functies hangt compleet af van welke objecten en voertuigen je wil maken. Maar, je moet de objecten en voertuigen toevoegen in deze functie! Als je dit doet kan je namelijk de objecten en voertuigen ook verwijderen met bijvoorbeeld een command! Deze functies zien er dus ongeveer zo uit: public CreateAllVehicles() { CreateDeletableVehicle(415,-1246.0798,67.3544,13.9075,45.2712,-1,-1); // cheetah 1 CreateDeletableVehicle(415,-1265.0505,94.9274,13.9182,132.6222,-1,-1); // cheetah 2 return 1; } public CreateAllObjects() { CreateDeletableObject(12986, -1286.984009, 64.705536, 14.671068, 0.0000, 0.0000, 90.0000); CreateDeletableObject(1634, -1252.099121, 200.933014, 28.708090, 0.0000, 0.0000, 0.0000); return 1; } Nu rest ons nog een ding: we moeten de objecten en voertuigen laten maken / spawnen als het filterscript geladen wordt. Dit doen we in de OnFilterscriptInit-callback: public OnFilterscriptInit() { CreateAllVehicles(); CreateAllObjects(); return 1; } Hoewel, het is ook wel handig als de voertuigen verdwijnen als je het filterscript unload. Dat kan bij de OnFilterscriptExit-callback: public OnFilterscriptExit() { DeleteAllVehicles(); DeleteAllObjects(); return 1; } Waarom gebruik je forwards en publics? Vrij simpel. Dit is niet per se nodig, maar als je ooit eens een timer of iets dergelijks wil toepassen op een van deze functies is het wel nodig. Dit is dus simpelweg om moeite in de toekomst te besparen . HINT: Voertuigen verwijderen met een command: public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp("/delete", cmdtext, true) == 0) { DeleteAllVehicles(); DeleteAllObjects(); return 1; } return 0; } Als je alles bij elkaar gooit, komt het script er zo uit te zien: Klik! Veel succes ermee, en mocht er iets niet duidelijk zijn, vraag het gerust! Bewerkt: 5 september 2009 door David22 Reageren
Big Boss Geplaatst: 15 april 2009 Rapport Geplaatst: 15 april 2009 Ik prefereer een andere methode, die ook minder code heeft, maar zo kan het inderdaad ook. Reageren
David22 Geplaatst: 16 april 2009 Auteur Rapport Geplaatst: 16 april 2009 Ik prefereer een andere methode, die ook minder code heeft, maar zo kan het inderdaad ook. Hoe doe jij het dan? Reageren
Big Boss Geplaatst: 16 april 2009 Rapport Geplaatst: 16 april 2009 #define SCRIPT_VEHICLES 10 // dit getal pas je aan naar het aantal auto's new Vehicle[SCRIPT_VEHICLES]; public OnFilterScriptInit() { Vehicle[0] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); Vehicle[1] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); Vehicle[2] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); Vehicle[3] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); Vehicle[4] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); Vehicle[5] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); Vehicle[6] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); Vehicle[7] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); Vehicle[8] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); Vehicle[9] = CreateVehicle(427, 0.0, 0.0, 10.0, 90.0, -1, -1, 600); return 1; } public OnFilterScriptExit() { for(new i = 0; i <= sizeof(Vehicle); i++) { DestroyVehicle(Vehicle[i]); } return 1; } Het zelfde geldt uiteraard voor objects. Hier maak je dan bv een array voor aan genaamd Object o.i.d. Reageren
David22 Geplaatst: 17 april 2009 Auteur Rapport Geplaatst: 17 april 2009 [...] Kan ook, maar ik vind mijn methode simpeler . Reageren
Remcconen Geplaatst: 18 april 2009 Rapport Geplaatst: 18 april 2009 [...] Kan ook, maar ik vind mijn methode simpeler . Meningen verschillen. Die van BB is toch veel korter. Reageren
David22 Geplaatst: 18 april 2009 Auteur Rapport Geplaatst: 18 april 2009 [...] Kan ook, maar ik vind mijn methode simpeler . Meningen verschillen. Die van BB is toch veel korter. Ja, maar als je het systeem eenmaal hebt, is mijn methode simpeler. Bij die van Big Boss moet je namelijk telkens de variabele wijzigen als je een nieuw voertuig / object wil toevoegen, en bij de van mij hoef je alleen maar een aparte functie te gebruiken . Reageren
1112rutger Geplaatst: 31 december 2009 Rapport Geplaatst: 31 december 2009 Ik heb een command in dcmd: dcmd_veh(playerid, params[]) { new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); new Float:angle; new vehid; new color1; new color2; if(adminlevel[playerid] >= 2) { if(sscanf(params, "i,i,i", vehid,color1,color2)) { SendClientMessage(playerid, COLOR_DRED, "USAGE: /veh <carid> <color1> <color2>"); return 1; } AddStaticVehicle(vehid, x, y, z, angle, color1, color2); SendClientMessage(playerid, COLOR_GREEN, "You've spawned a vehicle!"); } return 1; } Werkt perfect! Maare, die auto's blijven dus niet staan. Hoe zorg ik er nou voor dat ze juist blijven staan, en niet dat ze bijv. verwijderbaar zijn? 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.