// This is a comment // uncomment the line below if you want to write a filterscript //#define FILTERSCRIPT /*[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Message de l'auteur]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] Ce systeme se veux relativement simpliste.Il existe surement beaucoups de moyens d'optimiser la vitesse d'execution de celui-ci sans même passer par le moindre plugin. Il existe surement des optimisations possibles sans même utiliser de bibliotheques supplémentaires.si vous désirez améliorer/modifier celui-ci, vous y êtes invités! Ce script n'est soumis à AUCUNES licences et je renonce à mes droits de propriété intelectuele car il me semble que la lois française me donne des droits de propriétés à défaut de licence. Partagez le, modifiez le, hackez le, vendsez le mais surtout apréciez le! Concernant la vente, il n'y qu'une limite: votre moral ! J'ai choisie l'utilisation de JSON (by DracoBlue) pour ses performances et sa simplicité d'utilisation. De même pour ZCMD. //--------------------------------------------------------------------------For English Readers-------------------------------------------------------------------------// For my english readers: This system is pretty simple and you may find many ways to improve the code without using more library(s) and/or plugin(s) and if you want to improve it by yourself: do it! This script is FREE and you may do everything you want with! Share it, Use it, sell it, hack it, but LOVE IT ! About selling: there is only one limit: your soul! BTW, sorry for my bad english (^_^) ------------------------------------------------------------------------Message to sa:mp team--------------------------------------------------------------------// @Sa:Mp admin team: if u read this message (i think you will never ...) please tell WHY THE HELL I GOT BANNED FROM UR FORUM ? I have just asked about sa:mp major issues to tell my opinion and i got banned without any reason! I'm Jujuv and i have done a new account wich will probably spot. //-------------------------------------------------------------------------Anyway------------------------------------------------------------------------------// Have fun and remember to play only for fun ! Jujuv. */ //--------------------------------------------------------------------------------Inclusion de bibliotheques--------------------------------------------------------------// #include #include #include //-------------------------------------------------------------------------------definitions de macros-------------------------------------------------------------------// #define VEHFILE "vehicles.json" /*Properties*/ #define VEH_RESPAWN_DELAY 60 /*Dialog IDs*/ #define DIALOG_CAR_COLOR_CHOOSE 1 /*Ces macro permetent de régler facilement les conflits d'IDs si vous utilisez d'autres boites de dialogue*/ #define DIALOG_CAR_COLOR_CHOOSE_SECOND 2 /*Colors*/ #define COLOR_RED 0xD70000FF #define COLOR_YELLOW 0xFBEE04FF //----------------------------------------------------------------------------------Structures d'enumerations----------------------------------------------------------------------------------// enum E_VEH_DATA { registered, colour1, colour2 } //-----------------------------------------------------------------------------Variables & tableaux globaux-------------------------------------------------------------------// new vehInfo[MAX_VEHICLES][E_VEH_DATA]; //----------------------------------------------------------------------------Debut des callbacks et fonctions----------------------------------------------------------------// #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { return 1; } #else main() { print("\n----------------------------------"); print(" Simple Dynamic Vehicles System"); print("----------------------------------\n"); } #endif public OnGameModeInit() { djson_GameModeInit();//DO NOT REMOVE ! THIS IS NEEDED BY DJSON LIBRARY ! if(!fexist(VEHFILE)) { djCreateFile(VEHFILE); print("Vehicle file created"); djSetInt(VEHFILE, "Total", 0);} else{ LoadRegisteredVehicles(); } return 1; } public OnGameModeExit() { djson_GameModeExit();//DO NOT REMOVE ! THIS IS NEEDED BY DJSON LIBRARY ! return 1; } public OnPlayerRequestClass(playerid, classid) { //don't use theses lines if it's a filterscript SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); return 1; } public OnPlayerConnect(playerid) { return 1; } public OnPlayerDisconnect(playerid, reason) { return 1; } public OnPlayerSpawn(playerid) { return 1; } public OnPlayerDeath(playerid, killerid, reason) { return 1; } public OnVehicleSpawn(vehicleid) { return 1; } public OnVehicleDeath(vehicleid, killerid) { return 1; } public OnPlayerText(playerid, text[]) { return 1; } /*Don't use OnPlayerCommandText callback ! ZCMD disalow use of this callback !*/ /* public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp("/mycommand", cmdtext, true, 10) == 0) { // Do something here return 1; } return 0; } */ public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { return 1; } public OnPlayerExitVehicle(playerid, vehicleid) { return 1; } public OnPlayerStateChange(playerid, newstate, oldstate) { return 1; } public OnPlayerEnterCheckpoint(playerid) { return 1; } public OnPlayerLeaveCheckpoint(playerid) { return 1; } public OnPlayerEnterRaceCheckpoint(playerid) { return 1; } public OnPlayerLeaveRaceCheckpoint(playerid) { return 1; } public OnRconCommand(cmd[]) { return 1; } public OnPlayerRequestSpawn(playerid) { return 1; } public OnObjectMoved(objectid) { return 1; } public OnPlayerObjectMoved(playerid, objectid) { return 1; } public OnPlayerPickUpPickup(playerid, pickupid) { return 1; } public OnVehicleMod(playerid, vehicleid, componentid) { return 1; } public OnVehiclePaintjob(playerid, vehicleid, paintjobid) { return 1; } public OnVehicleRespray(playerid, vehicleid, color1, color2) { return 1; } public OnPlayerSelectedMenuRow(playerid, row) { return 1; } public OnPlayerExitedMenu(playerid) { return 1; } public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid) { return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { return 1; } public OnRconLoginAttempt(ip[], password[], success) { return 1; } public OnPlayerUpdate(playerid) { return 1; } public OnPlayerStreamIn(playerid, forplayerid) { return 1; } public OnPlayerStreamOut(playerid, forplayerid) { return 1; } public OnVehicleStreamIn(vehicleid, forplayerid) { return 1; } public OnVehicleStreamOut(vehicleid, forplayerid) { return 1; } public OnPlayerClickPlayer(playerid, clickedplayerid, source) { return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DIALOG_CAR_COLOR_CHOOSE: { new colorID = strval(inputtext); if(colorID >= 0 && colorID <= 126) { SetPVarInt(playerid, "firstCarColor", colorID); ShowPlayerDialog(playerid, DIALOG_CAR_COLOR_CHOOSE_SECOND, DIALOG_STYLE_INPUT, "Choose color ID", "Please enter a second color for your vehicle (color ID)", "Ok", ""); } else { ShowPlayerDialog(playerid, DIALOG_CAR_COLOR_CHOOSE, DIALOG_STYLE_INPUT, "Wrong color ID", "Please enter a valid color ID (0-126)", "Ok", ""); } } case DIALOG_CAR_COLOR_CHOOSE_SECOND: { new colorID = strval(inputtext); if(colorID >= 0 && colorID <= 126) { new Float:x, Float:y, Float:z, Float:fA, vehID; GetPlayerPos(playerid, x, y, z); GetPlayerFacingAngle(playerid, fA); vehID = CreateVehicle(GetPVarInt(playerid, "carModelID"), x, y, z, fA, GetPVarInt(playerid, "firstCarColor"), colorID, VEH_RESPAWN_DELAY); PutPlayerInVehicle(playerid, vehID, 0); } else { ShowPlayerDialog(playerid, DIALOG_CAR_COLOR_CHOOSE_SECOND, DIALOG_STYLE_INPUT, "Wrong color ID", "Please enter a valid color ID (0-126)", "Ok", ""); } } } return 1; } stock LoadRegisteredVehicles() { new str[20], model, Float:x, Float:y, Float:z, Float:a, vehID, color1, color2, total; print("function called and executed"); total = djInt(VEHFILE, "Total"); printf("Total vehicles : %i", total); for(new i = 0; i <= total; i++) { print("one more loop"); printf("%i loop(s)", i); format(str, sizeof(str), "%i/model", i); model = djInt(VEHFILE, str); if(model != -1) { print("block is executed"); format(str, sizeof(str), "%i/axes/x", i); x = djFloat(VEHFILE, str); print("1"); format(str, sizeof(str), "%i/axes/y", i); y = djFloat(VEHFILE, str); print("2"); format(str, sizeof(str), "%i/axes/z", i); z = djFloat(VEHFILE, str); print("3"); format(str, sizeof(str), "%i/axes/facingAngle", i); a = djFloat(VEHFILE, str); print("4"); format(str, sizeof(str), "%i/colors/1", i); color2 = djInt(VEHFILE, str); print("5"); format(str, sizeof(str), "%i/colors/2", i); color1 = djInt(VEHFILE, str); print("6"); vehID = CreateVehicle(model, x, y, z, a, color1, color2, VEH_RESPAWN_DELAY); print("7"); vehInfo[vehID][registered] = true; print("8"); vehInfo[vehID][colour1] = color1; print("9"); vehInfo[vehID][colour2] = color2; print("10"); print("Not realy end of block ..."); printf("%i vehicles loaded", i); print("End of block is executed too"); } } } stock IsVehicleRegistered(vehID) { if(vehInfo[vehID][registered]) { return true; } else { return false; } } stock RegisterVehicle(vehID) { if(!IsVehicleRegistered(vehID)) { new model, Float:x, Float:y, Float:z, Float:fA, total, str[20], i; model = GetVehicleModel(vehID); GetVehiclePos(vehID, x, y, z); GetVehicleZAngle(vehID, fA); total = djInt(VEHFILE, "Total"); for(i = total; i > 0; i--) { format(str, sizeof(str), "%i/model", i); if(djInt(VEHFILE, str) == -1) {break;} } if(i == 0) { i = total+1; } format(str, sizeof(str), "%i/model", i); djSetInt(VEHFILE, str, model); format(str, sizeof(str), "%i/axes/x", i); djSetFloat(VEHFILE, str, x); format(str, sizeof(str), "%i/axes/y", i); djSetFloat(VEHFILE, str, y); format(str, sizeof(str), "%i/axes/z", i); djSetFloat(VEHFILE, str, z); format(str, sizeof(str), "%i/axes/facingAngle", i); djSetFloat(VEHFILE, str, fA); format(str, sizeof(str), "%i/colors/1", i); djSetInt(VEHFILE, str, vehInfo[vehID][colour1]); format(str, sizeof(str), "%i/colors/2", i); djSetInt(VEHFILE, str, vehInfo[vehID][colour2]); vehInfo[vehID][registered] = true; djSetInt(VEHFILE, "Total", djInt(VEHFILE, "Total")+1 ); return true; } else{ return false; } } COMMAND:v(playerid, params[]) { if(isnull(params)) { SendClientMessage(playerid, COLOR_YELLOW, "Usage: /v [modelID]");} else if(IsPlayerAdmin(playerid))//Adaptez cette condition à votre systeme d'admin' { new modelID = strval(params); if(modelID >= 400 && modelID <= 611) { SetPVarInt(playerid, "carModelID", modelID); ShowPlayerDialog(playerid, DIALOG_CAR_COLOR_CHOOSE, DIALOG_STYLE_INPUT, "Select a color", "Please enter a first color for your vehicle (color ID)", "Ok", ""); } else { SendClientMessage(playerid, COLOR_YELLOW, "Please enter a valid vehicle model ID"); } } else { SendClientMessage(playerid, COLOR_RED, "You must e dmin to use this command"); } return 1; } COMMAND:register(playerid, params[]) { if(IsPlayerAdmin(playerid))//Adaptez cette condition à votre systeme d'admin' { if(IsPlayerInAnyVehicle(playerid)) { new response = RegisterVehicle(GetPlayerVehicleID(playerid)); if(response) { SendClientMessage(playerid, COLOR_YELLOW, "Vehicle registered");} else { SendClientMessage(playerid, COLOR_RED, "This vehicle is allready registered"); } } else{ SendClientMessage(playerid, COLOR_RED, "You must be in any vehicle to do that !");} } else { SendClientMessage(playerid, COLOR_RED, "You must e dmin to use this command"); } return 1; }