Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Scriptinformation:
- @ Author(s): <NicoAiko>
- @ Version: <0.1>
- @ Type: <Include>
- @ Language(s): <German>
- */
- #include <a_samp>
- #include <Farben>
- #define function:%0(%1) \
- forward %0(%1); \
- public %0(%1)
- #define MAX_MODELID 211
- /*
- native n_VehicleInit(Hoch,Runter);
- native n_OnVehicleSpawn(vehicleid);
- native n_OnPlayerStateChange(playerid,newstate,oldstate);
- native n_OnPlayerKeyStateChange(playerid,newkeys,oldkeys);
- native SetVehicleModelMaxGangSpeed(modelid,BackGang,Gang1,Gang2=-1,Gang3=-1,Gang4=-1,Gang5=-1,Gang6=-1);
- native GetVehicleModelMaxSpeed(vehicleid,&BackGang,&Gang1,&Gang2,&Gang3,&Gang4,&Gang5,&Gang6);
- native GetVehicleModelMaxGangSpeed(vehicleid);
- native GetVehicleATMGang(vehicleid);
- */
- new n_Gang[MAX_VEHICLES] = -1;
- new n_Max_Speed_Gang_Timer[MAX_VEHICLES];
- new n_Max_Gang_Speed[MAX_MODELID][7]; // [0] = Rückwärts [1] - [6] = 1 - 6
- new n_GangRunterKey;
- new n_GangHochKey;
- function:n_VehicleInit(Hoch,Runter)
- {
- print(" - Gangschaltungs-System -\n");
- print(" - made by NicoAiko -\n");
- print(" - (c) ~~ NicoAiko ~~ -\n");
- print(" - - 2012 - -");
- for(new i = 0; i < MAX_MODELID; i++)
- {
- n_Max_Gang_Speed[i][0] = 0;
- n_Max_Gang_Speed[i][1] = 0;
- n_Max_Gang_Speed[i][2] = 0;
- n_Max_Gang_Speed[i][3] = 0;
- n_Max_Gang_Speed[i][4] = 0;
- n_Max_Gang_Speed[i][5] = 0;
- n_Max_Gang_Speed[i][6] = 0;
- }
- for(new i = 0; i < MAX_VEHICLES; i++)
- {
- n_Gang[i] = -1;
- }
- n_GangHochKey = Hoch;
- n_GangRunterKey = Runter;
- return 1;
- }
- function:n_OnVehicleSpawn(vehicleid)
- {
- n_Gang[vehicleid] = -1;
- return 1;
- }
- function:n_OnPlayerStateChange(playerid,newstate,oldstate)
- {
- new vehicleid = GetPlayerVehicleID(playerid);
- if(newstate == PLAYER_STATE_DRIVER)
- {
- n_Max_Speed_Gang_Timer[vehicleid] = SetTimerEx("UpdateVehicleState",500,1,"i",vehicleid);
- }
- if(oldstate == PLAYER_STATE_DRIVER)
- {
- KillTimer(n_Max_Speed_Gang_Timer[vehicleid]);
- }
- return 1;
- }
- function:UpdateVehicleState(vehicleid)
- {
- new modelid = GetVehicleModel(vehicleid);
- new engine,rest[6];
- GetVehicleParamsEx(vehicleid,engine,rest[0],rest[1],rest[2],rest[3],rest[4],rest[5]);
- if(engine && n_Gang[vehicleid] == -1)
- { n_Gang[vehicleid] = 1; }
- if(!engine && n_Gang[vehicleid] > -1)
- { n_Gang[vehicleid] = -1; }
- if(GetVehicleModelMaxGangSpeed(vehicleid))
- {
- if(GetVehicleATMGang(vehicleid) < 3)
- {
- new Float:x[2],Float:y[2];
- n_GetXYFrontTheVehicle(vehicleid,x[0],y[0],10);
- n_GetXYBehindTheVehicle(vehicleid,x[1],y[1],10);
- SetTimerEx("BackOrFrontVehicle",500,0,"dffff",vehicleid,x[0],y[0],x[1],y[1]);
- }
- if(n_GetSpeed(vehicleid) >= GetVehicleModelMaxGangSpeed(vehicleid))
- {
- n_SetSpeed(vehicleid,GetVehicleModelMaxGangSpeed(vehicleid));
- }
- if(n_GetSpeed(vehicleid) < n_Max_Gang_Speed[modelid-400][GetVehicleATMGang(vehicleid)-1] && GetVehicleATMGang(vehicleid) > 1)
- { SetVehicleGangDown(vehicleid); }
- }
- return 1;
- }
- function:BackOrFrontVehicle(vehicleid,Float:nx0,Float:ny0,Float:nx1,Float:ny1)
- {
- new Float:x,Float:y,Float:z;
- GetVehiclePos(vehicleid,x,y,z);
- if(GetVehicleDistanceFromPoint(vehicleid,nx0,ny0,z) > GetVehicleDistanceFromPoint(vehicleid,nx1,ny1,z) && n_Gang[vehicleid] > 0)
- { n_Gang[vehicleid] = 0; return 1; }
- else if(GetVehicleDistanceFromPoint(vehicleid,nx0,ny0,z) < GetVehicleDistanceFromPoint(vehicleid,nx1,ny1,z) && n_Gang[vehicleid] == 0)
- { n_Gang[vehicleid] = 1; return 1; }
- return 1;
- }
- function:n_OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
- {
- if(newkeys & n_GangHochKey)
- {
- if(!IsPlayerInAnyVehicle(playerid)) return 1;
- if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
- new vehicleid = GetPlayerVehicleID(playerid);
- if(!IsVehicleAbleToGangHoch(vehicleid)) return 1; // Fragt ab, ob das Fahrzeug in der Lage ist mit der derzeitigen Geschwindigkeit (siehe die Funktion) hochzuschalten
- SetVehicleGangUp(vehicleid);
- return 1;
- }
- if(newkeys & n_GangRunterKey)
- {
- if(!IsPlayerInAnyVehicle(playerid)) return 1;
- if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
- new vehicleid = GetPlayerVehicleID(playerid);
- if(!IsVehicleAbleToGangRunter(vehicleid)) return 1;
- SetVehicleGangDown(vehicleid);
- return 1;
- }
- return 1;
- }
- function:IsVehicleAbleToGangHoch(vehicleid)
- {
- new modelid = GetVehicleModel(vehicleid);
- new gang = GetVehicleATMGang(vehicleid);
- if(gang == 6) return 0;
- switch(gang)
- {
- case 0: return 1;
- case 1..3:
- {
- if(n_GetSpeed(vehicleid) < (n_Max_Gang_Speed[modelid-400][gang+1]/3)*2) return 0;
- else return 1;
- }
- case 4,5:
- {
- if(n_GetSpeed(vehicleid) < floatround((n_Max_Gang_Speed[modelid-400][gang+1]/5)*2.5)) return 0;
- else return 1;
- }
- default: return 0;
- }
- return 1;
- }
- function:IsVehicleAbleToGangRunter(vehicleid)
- {
- new modelid = GetVehicleModel(vehicleid);
- new gang = GetVehicleATMGang(vehicleid);
- if(gang == 1) return 0;
- switch(gang)
- {
- case 0: return 0;
- case 2,3:
- {
- if(n_GetSpeed(vehicleid) > (n_Max_Gang_Speed[modelid-400][gang-1]/3)*2) return 1;
- else return 0;
- }
- case 4..6:
- {
- if(n_GetSpeed(vehicleid) > floatround((n_Max_Gang_Speed[modelid-400][gang-1]/5)*2.5)) return 1;
- else return 0;
- }
- default: return 0;
- }
- return 1;
- }
- SetVehicleGangDown(vehicleid)
- return n_Gang[vehicleid]--;
- SetVehicleGangUp(vehicleid)
- return n_Gang[vehicleid]++;
- stock SetVehicleModelMaxGangSpeed(modelid,BackGang,Gang1,Gang2=-1,Gang3=-1,Gang4=-1,Gang5=-1,Gang6=-1) // MUST STAY stock!!
- {
- if(modelid < 400 || modelid > 611) { printf("Fehler! Die angegebene ModelID ist unter 400 oder über 611! Angegeben: %d",modelid); return 0; }
- if(Gang1 <= 10) { printf("Error! Gang 1 darf NICHT kleiner als 10 km/h sein!!!"); return 0; }
- if(BackGang <= 10) { printf("Error! Rückwärtsgang darf NICHT kleiner als 10 km/h sein!!!"); return 0; }
- n_Max_Gang_Speed[modelid-400][0] = BackGang;
- n_Max_Gang_Speed[modelid-400][1] = Gang1;
- if(Gang2 <= -1)
- {
- n_Max_Gang_Speed[modelid-400][2] = -1;
- n_Max_Gang_Speed[modelid-400][3] = -1;
- n_Max_Gang_Speed[modelid-400][4] = -1;
- n_Max_Gang_Speed[modelid-400][5] = -1;
- n_Max_Gang_Speed[modelid-400][6] = -1;
- return 1;
- }
- else n_Max_Gang_Speed[modelid-400][2] = Gang2;
- if(Gang3 <= -1)
- {
- n_Max_Gang_Speed[modelid-400][3] = -1;
- n_Max_Gang_Speed[modelid-400][4] = -1;
- n_Max_Gang_Speed[modelid-400][5] = -1;
- n_Max_Gang_Speed[modelid-400][6] = -1;
- return 1;
- }
- else n_Max_Gang_Speed[modelid-400][3] = Gang3;
- if(Gang4 <= -1)
- {
- n_Max_Gang_Speed[modelid-400][4] = -1;
- n_Max_Gang_Speed[modelid-400][5] = -1;
- n_Max_Gang_Speed[modelid-400][6] = -1;
- return 1;
- }
- else n_Max_Gang_Speed[modelid-400][4] = Gang4;
- if(Gang5 <= -1)
- {
- n_Max_Gang_Speed[modelid-400][5] = -1;
- n_Max_Gang_Speed[modelid-400][6] = -1;
- return 1;
- }
- else n_Max_Gang_Speed[modelid-400][5] = Gang5;
- if(Gang6 <= -1) n_Max_Gang_Speed[modelid-400][6] = -1;
- else n_Max_Gang_Speed[modelid-400][6] = Gang6;
- return 1;
- }
- function:n_GetXYBehindTheVehicle(vehicleid, &Float:x, &Float:y, Float:distance)
- {
- new Float:a;
- GetVehiclePos(vehicleid,x,y,a);
- GetVehicleZAngle(vehicleid,a);
- x -= (distance * floatsin(-a,degrees));
- y -= (distance * floatcos(-a,degrees));
- return 1;
- }
- function:n_GetXYFrontTheVehicle(vehicleid, &Float:x, &Float:y, Float:distance)
- {
- new Float:a;
- GetVehiclePos(vehicleid,x,y,a);
- GetVehicleZAngle(vehicleid,a);
- x += (distance * floatsin(-a,degrees));
- y += (distance * floatcos(-a,degrees));
- return 1;
- }
- function:Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) {
- return floatsqroot(floatpower(x1 - x2, 2) + floatpower(y1 - y2, 2) + floatpower(z1 - z2, 2)); }
- function:GetVehicleModelMaxSpeed(vehicleid,&BackGang,&Gang1,&Gang2,&Gang3,&Gang4,&Gang5,&Gang6)
- {
- new modelid = GetVehicleModel(vehicleid);
- if(n_Max_Gang_Speed[modelid-400][0] <= 0) // Rückwärtsgang (Hier fragt er ab, ob es verändert wurde)
- /* Wenn die maximale Geschwindigkeit nicht verändert wurde bzw. nicht angegeben wurde, dann ist sie 0!
- Hat ein Fahrzeug z.B. 4 Gänge sind 4 davon über -1! Gang 5 & 6 wären dann -1! */
- {
- BackGang = 0,
- Gang1 = 0,
- Gang2 = 0,
- Gang3 = 0,
- Gang4 = 0,
- Gang5 = 0,
- Gang6 = 0;
- return 1;
- }
- BackGang = n_Max_Gang_Speed[modelid-400][0];
- Gang1 = n_Max_Gang_Speed[modelid-400][1];
- Gang2 = n_Max_Gang_Speed[modelid-400][2];
- Gang3 = n_Max_Gang_Speed[modelid-400][3];
- Gang4 = n_Max_Gang_Speed[modelid-400][4];
- Gang5 = n_Max_Gang_Speed[modelid-400][5];
- Gang6 = n_Max_Gang_Speed[modelid-400][6];
- return 1;
- }
- function:GetVehicleModelMaxGangSpeed(vehicleid)
- {
- new n_MaxGangSpeed[7],n_ATMGang,modelid;
- modelid = GetVehicleModel(vehicleid);
- GetVehicleModelMaxSpeed(vehicleid,n_MaxGangSpeed[0],n_MaxGangSpeed[1],n_MaxGangSpeed[2],n_MaxGangSpeed[3],n_MaxGangSpeed[4],n_MaxGangSpeed[5],n_MaxGangSpeed[6]);
- n_ATMGang = GetVehicleATMGang(vehicleid);
- return n_Max_Gang_Speed[modelid-400][n_ATMGang];
- }
- function:ResetModelMaxSpeed(modelid)
- {
- n_Max_Gang_Speed[modelid-400][0] = -1;
- n_Max_Gang_Speed[modelid-400][1] = -1;
- n_Max_Gang_Speed[modelid-400][2] = -1;
- n_Max_Gang_Speed[modelid-400][3] = -1;
- n_Max_Gang_Speed[modelid-400][4] = -1;
- n_Max_Gang_Speed[modelid-400][5] = -1;
- n_Max_Gang_Speed[modelid-400][6] = -1;
- return 1;
- }
- function:GetVehicleATMGang(vehicleid)
- {
- return n_Gang[vehicleid];
- }
- function:n_GetSpeed(vehicleid)
- {
- new Float:x,Float:y,Float:z;
- new Float:speed;
- GetVehicleVelocity(vehicleid,x,y,z);
- speed = floatsqroot(x*x+y*y+z*z) * 200;
- new realspeed = floatround(speed);
- return realspeed;
- }
- function:n_SetSpeed(vehicleid,Float:speed)
- {
- new Float:x[2],Float:y[2],Float:z[2],Float:angle;
- GetVehicleVelocity(vehicleid,x[0],y[0],z[0]);
- GetVehiclePos(vehicleid,x[1],y[1],z[1]);
- GetVehicleZAngle(vehicleid,angle);
- angle = 360 - angle;
- x[0] = (floatsin(angle,degrees) * (speed/200) + floatcos(angle, degrees) * 0 + x[1]) - x[1];
- y[0] = (floatcos(angle,degrees) * (speed/200) + floatsin(angle, degrees) * 0 + y[1]) - y[1];
- SetVehicleVelocity(vehicleid,x[0],y[0],z[0]);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment