Gast Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 Nou, ik ben bezig met een systeempje waar je pickups kan plaatsen via command, die je ook nog is kan 'enteren' dat je naar een interiorID word gestuurd. Voor die script had Big Boss mij al geholpen. Nu wil ik dus dat je ze kan plaatsen via een command te typen. Maar ik heb heel veel dingen geprobeert, zoals stock.. Maar ik kom er niet uit! Dit is de code die het meest faalt, ik weet waarom hij faalt dus daar hoef je geen uitleg over te geven, tenzij je echt wilt. Ik hoop dat jullie mij hiermee kunnen helpen. new PickupData[][PDATA] = { new Float:oX, Float:oY, Float:oZ, Float:iX, Float:iY, Float: iZ, IntID; if(dini_Exists("PickupData/1.txt")) { // FILE 1 oX = dini_Float("PickupData/1.txt","oX"); // Outside X oY = dini_Float("PickupData/1.txt","oY"); // Outside Y oZ = dini_Float("PickupData/1.txt","oZ"); // Outside Z iX = dini_Float("PickupData/1.txt","iX"); // Inside X iY = dini_Float("PickupData/1.txt","iY"); // Inside Y iZ = dini_Float("PickupData/1.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/1.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/2.txt")) { // FILE 2 oX = dini_Float("PickupData/2.txt","oX"); // Outside X oY = dini_Float("PickupData/2.txt","oY"); // Outside Y oZ = dini_Float("PickupData/2.txt","oZ"); // Outside Z iX = dini_Float("PickupData/2.txt","iX"); // Inside X iY = dini_Float("PickupData/2.txt","iY"); // Inside Y iZ = dini_Float("PickupData/2.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/2.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/3.txt")) { // FILE 3 oX = dini_Float("PickupData/3.txt","oX"); // Outside X oY = dini_Float("PickupData/3.txt","oY"); // Outside Y oZ = dini_Float("PickupData/3.txt","oZ"); // Outside Z iX = dini_Float("PickupData/3.txt","iX"); // Inside X iY = dini_Float("PickupData/3.txt","iY"); // Inside Y iZ = dini_Float("PickupData/3.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/3.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/4.txt")) { // FILE 4 oX = dini_Float("PickupData/4.txt","oX"); // Outside X oY = dini_Float("PickupData/4.txt","oY"); // Outside Y oZ = dini_Float("PickupData/4.txt","oZ"); // Outside Z iX = dini_Float("PickupData/4.txt","iX"); // Inside X iY = dini_Float("PickupData/4.txt","iY"); // Inside Y iZ = dini_Float("PickupData/4.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/4.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/5.txt")) { // FILE 5 oX = dini_Float("PickupData/5.txt","oX"); // Outside X oY = dini_Float("PickupData/5.txt","oY"); // Outside Y oZ = dini_Float("PickupData/5.txt","oZ"); // Outside Z iX = dini_Float("PickupData/5.txt","iX"); // Inside X iY = dini_Float("PickupData/5.txt","iY"); // Inside Y iZ = dini_Float("PickupData/5.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/5.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/6.txt")) { // FILE 6 oX = dini_Float("PickupData/6.txt","oX"); // Outside X oY = dini_Float("PickupData/6.txt","oY"); // Outside Y oZ = dini_Float("PickupData/6.txt","oZ"); // Outside Z iX = dini_Float("PickupData/6.txt","iX"); // Inside X iY = dini_Float("PickupData/6.txt","iY"); // Inside Y iZ = dini_Float("PickupData/6.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/6.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/7.txt")) { // FILE 7 oX = dini_Float("PickupData/7.txt","oX"); // Outside X oY = dini_Float("PickupData/7.txt","oY"); // Outside Y oZ = dini_Float("PickupData/7.txt","oZ"); // Outside Z iX = dini_Float("PickupData/7.txt","iX"); // Inside X iY = dini_Float("PickupData/7.txt","iY"); // Inside Y iZ = dini_Float("PickupData/7.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/7.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/8.txt")) { // FILE 8 oX = dini_Float("PickupData/8.txt","oX"); // Outside X oY = dini_Float("PickupData/8.txt","oY"); // Outside Y oZ = dini_Float("PickupData/8.txt","oZ"); // Outside Z iX = dini_Float("PickupData/8.txt","iX"); // Inside X iY = dini_Float("PickupData/8.txt","iY"); // Inside Y iZ = dini_Float("PickupData/8.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/8.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/9.txt")) { // FILE 9 oX = dini_Float("PickupData/9.txt","oX"); // Outside X oY = dini_Float("PickupData/9.txt","oY"); // Outside Y oZ = dini_Float("PickupData/9.txt","oZ"); // Outside Z iX = dini_Float("PickupData/9.txt","iX"); // Inside X iY = dini_Float("PickupData/9.txt","iY"); // Inside Y iZ = dini_Float("PickupData/9.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/9.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/10.txt")) { // FILE 10 oX = dini_Float("PickupData/10.txt","oX"); // Outside X oY = dini_Float("PickupData/10.txt","oY"); // Outside Y oZ = dini_Float("PickupData/10.txt","oZ"); // Outside Z iX = dini_Float("PickupData/10.txt","iX"); // Inside X iY = dini_Float("PickupData/10.txt","iY"); // Inside Y iZ = dini_Float("PickupData/10.txt","iZ"); // Inside Z IntID = dini_Int(file10, "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID} } if(dini_Exists("PickupData/11.txt")) { // FILE 11 oX = dini_Float("PickupData/11.txt","oX"); // Outside X oY = dini_Float("PickupData/11.txt","oY"); // Outside Y oZ = dini_Float("PickupData/11.txt","oZ"); // Outside Z iX = dini_Float("PickupData/11.txt","iX"); // Inside X iY = dini_Float("PickupData/11.txt","iY"); // Inside Y iZ = dini_Float("PickupData/11.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/11.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/12.txt")) { // FILE 12 oX = dini_Float("PickupData/12.txt","oX"); // Outside X oY = dini_Float("PickupData/12.txt","oY"); // Outside Y oZ = dini_Float("PickupData/12.txt","oZ"); // Outside Z iX = dini_Float("PickupData/12.txt","iX"); // Inside X iY = dini_Float("PickupData/12.txt","iY"); // Inside Y iZ = dini_Float("PickupData/12.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/12.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/13.txt")) { // FILE 13 oX = dini_Float("PickupData/13.txt","oX"); // Outside X oY = dini_Float("PickupData/13.txt","oY"); // Outside Y oZ = dini_Float("PickupData/13.txt","oZ"); // Outside Z iX = dini_Float("PickupData/13.txt","iX"); // Inside X iY = dini_Float("PickupData/13.txt","iY"); // Inside Y iZ = dini_Float("PickupData/13.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/13.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/14.txt")) { // FILE 14 oX = dini_Float("PickupData/14.txt","oX"); // Outside X oY = dini_Float("PickupData/14.txt","oY"); // Outside Y oZ = dini_Float("PickupData/14.txt","oZ"); // Outside Z iX = dini_Float("PickupData/14.txt","iX"); // Inside X iY = dini_Float("PickupData/14.txt","iY"); // Inside Y iZ = dini_Float("PickupData/14.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/14.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID}, } if(dini_Exists("PickupData/15.txt")) { // FILE 15 oX = dini_Float("PickupData/15.txt","oX"); // Outside X oY = dini_Float("PickupData/15.txt","oY"); // Outside Y oZ = dini_Float("PickupData/15.txt","oZ"); // Outside Z iX = dini_Float("PickupData/15.txt","iX"); // Inside X iY = dini_Float("PickupData/15.txt","iY"); // Inside Y iZ = dini_Float("PickupData/15.txt","iZ"); // Inside Z IntID = dini_Int("PickupData/15.txt", "IntID"); {oX, oY, oZ, iX, iY, iZ, IntID} } }; Reageren
Big Boss Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 Volgens mij had je die code ook al naar mij gestuurd in een PM, maar ik heb nog geen tijd gehad om die te bekijken. Dus bij deze. Ik snap wel waar je naartoe wilt, maar dit zal zo niet werken. Je zal het op zo'n manier moeten doen: new PickupData[][PDATA]; new i = 1, j = 0, file[32]; file = "PickupData/1.txt"; while(dini_Exists(file)) { j = i - 1; // Dit is zodat slot 0 van de array ook gevuld wordt. printf("Loading: \'%s\' ...", file); PickupData[j][oX] = dini_Float(file, "oX"); PickupData[j][oY] = dini_Float(file, "oY"); PickupData[j][oZ] = dini_Float(file, "oZ"); // etc. i++; format(file, sizeof(file), "PickupData/%d.txt", i); } printf("Loaded information from %d files.", i - 1); Het script zal automatisch stoppen met zoeken als het een bestand tegenkomt dat niet bestaat. Als je bijvoorbeeld 1.txt, 2.txt, 3.txt en 5.txt hebt, zullen alleen de eerste 3 bestanden geladen worden omdat 4.txt niet gevonden kan worden. Reageren
Gast Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 (bewerkt) Bedankt, maar ik neem aan dat ik dit in een 'functie' moet zetten? zoals stock, forward(public)? Als ik de script een beetje afrond, geeft hij vooral warnings aan over dat 'i' en 'j' een variable schaduwd bij een voorafgaande niveau. En errors dat bijvoorbeld 'file=' een ongeldige expressie heeft. Edit: Ik was dit vergeten toe te voegen: Als ik het in, bijvoorbeeld, een stock zet, zal ik zowiezo alle andere 'scripts' ook moeten bijpassen, zoals /enter, /exit en dat het een pickup plaatst, want hij kan de gedefinde 'pickup' niet vinden. Bewerkt: 16 november 2010 door Gast quote verwijderd Reageren
Big Boss Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 Dit stukje code plaats je bij voorkeur in OnGameModeInit (inclusief new i, j en file). Als de server dan start worden de bestanden ingelezen en wordt er een waarde toegekend aan alle attributen (enum) van die grote array. Die waardes kan je vervolgens gebruiken om de pickups daadwerkelijk te plaatsen. Als ik me niet vergis heb ik je trouwens ook een script gegeven (d.m.v. een for-loop) waarmee je kan checken bij welke pickup de speler zich op dat moment bevindt, klopt dat? Reageren
Gast Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 (bewerkt) Dit stukje code plaats je bij voorkeur in OnGameModeInit (inclusief new i, j en file). Als de server dan start worden de bestanden ingelezen en wordt er een waarde toegekend aan alle attributen (enum) van die grote array. Die waardes kan je vervolgens gebruiken om de pickups daadwerkelijk te plaatsen. Als ik me niet vergis heb ik je trouwens ook een script gegeven (d.m.v. een for-loop) waarmee je kan checken bij welke pickup de speler zich op dat moment bevindt, klopt dat? Dat klopt. Maar als ik dat stukje code bij OnGameModeInit zet, zal mijn /enter commando niet meer werken. Dan kent hij Pickupdata niet meer. Edit: dit is de loop, die onder andere nu errors aangeeft: for(new i; i < sizeof(PickupData); i++) Als ik new PickupData[][[PDATA]; boven aan de script zet, krijg ik weer allemaal errors dat "i" bij een preceeding level is. Dat PDATA niet gedefined is, hij zegt dat: PickupData[j][oX] = dini_Float(file, "oX"); PickupData[j][oY] = dini_Float(file, "oY"); PickupData[j][oZ] = dini_Float(file, "oZ"); PickupData[j][iX] = dini_Float(file, "iX"); PickupData[j][iY] = dini_Float(file, "iY"); PickupData[j][iZ] = dini_Float(file, "iZ"); PickupData[j][intID] = dini_Int(file, "IntID"); allemaal een tagmismatch is En nog wat warnings/errors :/ Bewerkt: 14 november 2010 door Gast Reageren
Big Boss Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 Heb je nog een i bovenaan bij je globale variabelen staan? Als dat zo is, kan je twee dingen doen: Ofwel de globale i weghalen en hopen dat dat geen nieuwe errors geeft (Undefined Symbol) .. Of de lokale i in het stukje code dat ik je gaf hernoemen naar iets anders. En zou je je enum van PDATA eens willen laten zien? Mogelijk mis je nog enkele tags. Reageren
Gast Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 Heb je nog een i bovenaan bij je globale variabelen staan? Als dat zo is, kan je twee dingen doen: Ofwel de globale i weghalen en hopen dat dat geen nieuwe errors geeft (Undefined Symbol) .. Of de lokale i in het stukje code dat ik je gaf hernoemen naar iets anders. En zou je je enum van PDATA eens willen laten zien? Mogelijk mis je nog enkele tags. Ik heb i vernoemd naar thei. Ik krijg nu nog tag mismatch, enz. Dit is de enum van PDATA: enum PDATA { Float:lx1, Float:ly1, Float:lz1, Float:lx2, Float:ly2, Float:lz2, InteriorId } Reageren
Big Boss Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 Ja, met die enum is het dus volkomen logisch dat ie de waarden niet herkent. PickupData[j][lx1] = dini_Float(file, "oX"); PickupData[j][ly1] = dini_Float(file, "oY"); PickupData[j][lz1] = dini_Float(file, "oZ"); PickupData[j][lx2] = dini_Float(file, "iX"); PickupData[j][ly2] = dini_Float(file, "iY"); PickupData[j][lz2] = dini_Float(file, "iZ"); PickupData[j][interiorId] = dini_Int(file, "IntID"); Dit zou het moeten doen dan. Reageren
Gast Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 Ja, met die enum is het dus volkomen logisch dat ie de waarden niet herkent. PickupData[j][lx1] = dini_Float(file, "oX"); PickupData[j][ly1] = dini_Float(file, "oY"); PickupData[j][lz1] = dini_Float(file, "oZ"); PickupData[j][lx2] = dini_Float(file, "iX"); PickupData[j][ly2] = dini_Float(file, "iY"); PickupData[j][lz2] = dini_Float(file, "iZ"); PickupData[j][interiorId] = dini_Int(file, "IntID"); Dit zou het moeten doen dan. Oke, bedankt. Alleen ik krijg nu wat warnings waar ik nog nooit van gehoord heb, dus daarom heb ik besloten het toch maar even te posten. 1e gedeelte warning 224: indeterminate array size in "sizeof" expression (symbol "") Bij: for(new i; i < sizeof(PickupData); i++) 2e gedeelte warning 224: indeterminate array size in "sizeof" expression (symbol "") Bij: for(new i; i < sizeof(PickupData); i++) 3e gedeelte warning 224: indeterminate array size in "sizeof" expression (symbol "") Bij: for(new i; i < sizeof(PickupData); i++) Reageren
Big Boss Geplaatst: 14 november 2010 Rapport Geplaatst: 14 november 2010 Er zijn zowat 3 manieren om deze error weg te werken, maar ze zijn alle drie nogal omslachtig. Manier 1: Van je variabele een constante maken. Dit zal waarschijnlijk niet echt een optie zijn, aangezien de waarden wijzigbaar moeten zijn vanuit het script. new const PickupData[][PDATA]; Manier 2: Een effectieve waarde toekennen aan je variabele. #define MAX_DYN_PICKUPS 40 new PickupData[MAX_DYN_PICKUPS][PDATA]; Manier 3: Een functie om de upper bound van de array te berekenen. Dit is veel ingewikkelder en moet ik toch nog eens grondig testen; aangezien het een multidimensionale array betreft, in combinatie met een enum. Reageren
Gast Geplaatst: 15 november 2010 Rapport Geplaatst: 15 november 2010 Oké, bedankt. Trouwens, als ik een nieuw bestaan aan maak, zal ie dan alleen '1.txt' lezen, of ook '2.txt', enzovoort, als ik ze aanmaak? Reageren
Big Boss Geplaatst: 15 november 2010 Rapport Geplaatst: 15 november 2010 Ja, maar vanaf het ogenblik dat er een bestand tussen uit valt zal het script stoppen. Dus als je bijvoorbeeld 1 tot en met 5 hebt zullen ze alle vijf geladen worden, maar als je enkel 1,2,3 en 5 hebt zullen enkel de eerste 3 geladen worden. Reageren
Gast Geplaatst: 15 november 2010 Rapport Geplaatst: 15 november 2010 (bewerkt) Ja, maar vanaf het ogenblik dat er een bestand tussen uit valt zal het script stoppen. Dus als je bijvoorbeeld 1 tot en met 5 hebt zullen ze alle vijf geladen worden, maar als je enkel 1,2,3 en 5 hebt zullen enkel de eerste 3 geladen worden. Danku Weet je misschien ook hoe ik strings kan verwerken in de .txt bestanden? Zodra ik een string wil opvangen, krijg ik een error. PickupData[j][EntPUMessage] = dini_Get(file, "EntPUMess"); PickupData[j][ExPUMessage] = dini_Get(file, "ExPUMess"); Hij zegt dat ze niet assigned zijn aan een array. Ik heb meerdere dingen geprobeert. Ik had nog een idee om het ergens anders te plaatsen, maar dan kan ik de bestandsnaam niet ontvangen. De exacte error: error 006: must be assigned to an array error 006: must be assigned to an array p/s Kan deze post gemerged worden met de gene hierboven? >>> Door Big Boss: Op uw verzoek. Graag even op letten, volgende keer. <<< Bewerkt: 16 november 2010 door Gast Reageren
Big Boss Geplaatst: 16 november 2010 Rapport Geplaatst: 16 november 2010 Die error lijkt me vrij duidelijk. Je moet van je variabele - in je enum - een array (string) maken. Ik neem aan dat je weet hoe dat moet? Lekkere dialoog tussen ons twee, trouwens .. Reageren
Gast Geplaatst: 16 november 2010 Rapport Geplaatst: 16 november 2010 (bewerkt) Die error lijkt me vrij duidelijk. Je moet van je variabele - in je enum - een array (string) maken. Ik neem aan dat je weet hoe dat moet? Lekkere dialoog tussen ons twee, trouwens .. Ojah, was ik vergeten te vertellen. Ik had hem zo genoemd: EntPUMessage[156], ExPUMessage[156] in de Enum, maar dat leverde ook weer twee errors op, deze: error 047: array sizes do not match, or destination array is too small error 047: array sizes do not match, or destination array is too small Edit: Oké, ik weet wat de error inhoud. maar ik kan nu nog steeds niks. Deze error heb ik ook dus nog nooit eerder gehad. Lekkere dialoog tussen ons twee, trouwens .. Haha Bewerkt: 16 november 2010 door Gast 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.