Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Scriptinformation:
- @ Author(s): <NicoAiko>
- @ Version: <0.3>
- @ Type: <Include>
- @ Language(s): <German>
- @ Changelog:
- v0.3:
- - Schaltkeys sind nun Spielerbedingt auswählbar
- v0.2:
- - Hooking eingefügt (D.h. keine Installation mehr nötig)
- - Rückwärtsgangbeschränkung aufgrund von Bugs entfernt
- - Schaltkeys vom Spiel aus bestimmbar
- v0.1:
- - Release
- @ Bugs:
- - Keine bekannt!
- */
- #include <a_samp>
- #define MAX_MODELID 211
- /*
- native SetModelMaxGearSpeed(modelid,Gang1,Gang2=-1,Gang3=-1,Gang4=-1,Gang5=-1,Gang6=-1);
- native GetModelMaxSpeed(modelid,&Gang1,&Gang2,&Gang3,&Gang4,&Gang5,&Gang6);
- native GetVehicleModelMaxGearSpeed(vehicleid);
- native GetVehicleATMGear(vehicleid);
- native SetPlayerVehicleGearKeys(playerid, Hoch, Runter);
- */
- new n_Gang[MAX_VEHICLES] = -1,
- n_Max_Speed_Gang_Timer[MAX_VEHICLES],
- n_Max_Gang_Speed[MAX_MODELID][6] // [0] = 1, [2] - [5] = 2 - 6
- ;
- // Es gibt keinen MaxSpeed für den Rückwärtsgang aber trotzdem noch den Rückwärtsgang an sich!
- new n_StandardUpKey[MAX_PLAYERS] = KEY_ANALOG_UP,
- n_StandardDownKey[MAX_PLAYERS] = KEY_ANALOG_DOWN
- ;
- forward n_VehicleInit();
- forward n_OnVehicleSpawn(vehicleid);
- forward n_OnPlayerStateChange(playerid,newstate,oldstate);
- forward n_OnPlayerKeyStateChange(playerid,newkeys,oldkeys);
- public OnGameModeInit()
- {
- print(" - Gangschaltungs-System -\n");
- print(" - v0.3 -\n");
- print(" - made by NicoAiko -\n");
- print(" - (c) ~~ NicoAiko ~~ -\n");
- print(" - - 2013 - -");
- 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;
- }
- for(new i = 0; i < MAX_VEHICLES; i++)
- {
- n_Gang[i] = -1;
- }
- return CallLocalFunction("n_VehicleInit","");
- }
- public OnVehicleSpawn(vehicleid)
- {
- n_Gang[vehicleid] = -1;
- return CallLocalFunction("n_OnVehicleSpawn","i",vehicleid);
- }
- public 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 CallLocalFunction("n_OnPlayerStateChange","iii",playerid,newstate,oldstate);
- }
- public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
- {
- if(newkeys & n_StandardUpKey[playerid] && !(oldkeys & n_StandardUpKey[playerid]))
- {
- if(!IsPlayerInAnyVehicle(playerid)) return 1;
- if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
- new vehicleid = GetPlayerVehicleID(playerid);
- if(!IsVehicleAbleToGearUp(vehicleid)) return 1; // Fragt ab, ob das Fahrzeug in der Lage ist mit der derzeitigen Geschwindigkeit (siehe die Funktion) hochzuschalten
- SetVehicleGearUp(vehicleid);
- }
- if(newkeys & n_StandardDownKey[playerid] && !(oldkeys & n_StandardDownKey[playerid]))
- {
- if(!IsPlayerInAnyVehicle(playerid)) return 1;
- if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1;
- new vehicleid = GetPlayerVehicleID(playerid);
- if(!IsVehicleAbleToGearDown(vehicleid)) return 1;
- SetVehicleGearDown(vehicleid);
- }
- return CallLocalFunction("n_OnPlayerKeyStateChange","iii",playerid,newkeys,oldkeys);
- }
- forward UpdateVehicleState(vehicleid);
- public 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(GetVehicleModelMaxGearSpeed(vehicleid))
- {
- if(GetVehicleATMGear(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",250,0,"dffff",vehicleid,x[0],y[0],x[1],y[1]);
- }
- if(n_GetSpeed(vehicleid) >= GetVehicleModelMaxGearSpeed(vehicleid))
- {
- n_SetSpeed(vehicleid,GetVehicleModelMaxGearSpeed(vehicleid));
- }
- if(n_GetSpeed(vehicleid) < n_Max_Gang_Speed[modelid-400][GetVehicleATMGear(vehicleid)-1] && GetVehicleATMGear(vehicleid) > 1)
- { SetVehicleGearDown(vehicleid); }
- }
- return 1;
- }
- forward BackOrFrontVehicle(vehicleid, Float:nx0, Float:ny0, Float:nx1, Float:ny1);
- public 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;
- }
- forward IsVehicleAbleToGearUp(vehicleid);
- public IsVehicleAbleToGearUp(vehicleid)
- {
- new modelid = GetVehicleModel(vehicleid);
- new gang = GetVehicleATMGear(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;
- }
- forward IsVehicleAbleToGearDown(vehicleid);
- public IsVehicleAbleToGearDown(vehicleid)
- {
- new modelid = GetVehicleModel(vehicleid);
- new gang = GetVehicleATMGear(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;
- }
- SetVehicleGearDown(vehicleid)
- return n_Gang[vehicleid]--;
- SetVehicleGearUp(vehicleid)
- return n_Gang[vehicleid]++;
- stock SetModelMaxGearSpeed(modelid,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; }
- n_Max_Gang_Speed[modelid-400][0] = Gang1;
- if(Gang2 <= 0)
- {
- 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;
- return 1;
- }
- else n_Max_Gang_Speed[modelid-400][1] = Gang2;
- if(Gang3 <= 0)
- {
- 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;
- return 1;
- }
- else n_Max_Gang_Speed[modelid-400][2] = Gang3;
- if(Gang4 <= 0)
- {
- n_Max_Gang_Speed[modelid-400][3] = -1;
- n_Max_Gang_Speed[modelid-400][4] = -1;
- n_Max_Gang_Speed[modelid-400][5] = -1;
- return 1;
- }
- else n_Max_Gang_Speed[modelid-400][3] = Gang4;
- if(Gang5 <= 0)
- {
- n_Max_Gang_Speed[modelid-400][4] = -1;
- n_Max_Gang_Speed[modelid-400][5] = -1;
- return 1;
- }
- else n_Max_Gang_Speed[modelid-400][4] = Gang5;
- if(Gang6 <= 0) n_Max_Gang_Speed[modelid-400][5] = -1;
- else n_Max_Gang_Speed[modelid-400][5] = Gang6;
- return 1;
- }
- forward n_GetXYBehindTheVehicle(vehicleid, &Float:x, &Float:y, Float:distance);
- public 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;
- }
- forward n_GetXYFrontTheVehicle(vehicleid, &Float:x, &Float:y, Float:distance);
- public 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;
- }
- forward Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2);
- public 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));
- }
- forward GetModelMaxSpeed(modelid,&Gang1,&Gang2,&Gang3,&Gang4,&Gang5,&Gang6);
- public GetModelMaxSpeed(modelid,&Gang1,&Gang2,&Gang3,&Gang4,&Gang5,&Gang6)
- {
- if(n_Max_Gang_Speed[modelid-400][0] <= 0) // 1.Gang (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! */
- {
- Gang1 = 0,
- Gang2 = 0,
- Gang3 = 0,
- Gang4 = 0,
- Gang5 = 0,
- Gang6 = 0;
- return 1;
- }
- Gang1 = n_Max_Gang_Speed[modelid-400][0];
- Gang2 = n_Max_Gang_Speed[modelid-400][1];
- Gang3 = n_Max_Gang_Speed[modelid-400][2];
- Gang4 = n_Max_Gang_Speed[modelid-400][3];
- Gang5 = n_Max_Gang_Speed[modelid-400][4];
- Gang6 = n_Max_Gang_Speed[modelid-400][5];
- return 1;
- }
- forward GetVehicleModelMaxGearSpeed(vehicleid);
- public GetVehicleModelMaxGearSpeed(vehicleid)
- {
- new n_MaxGangSpeed[6],n_ATMGang,modelid;
- modelid = GetVehicleModel(vehicleid);
- GetModelMaxSpeed(modelid,n_MaxGangSpeed[0],n_MaxGangSpeed[1],n_MaxGangSpeed[2],n_MaxGangSpeed[3],n_MaxGangSpeed[4],n_MaxGangSpeed[5]);
- n_ATMGang = GetVehicleATMGear(vehicleid);
- if(n_ATMGang <= 0) { return -1; }
- else return n_Max_Gang_Speed[modelid-400][n_ATMGang];
- }
- forward ResetModelMaxSpeed(modelid);
- public 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;
- return;
- }
- forward GetVehicleATMGear(vehicleid);
- public GetVehicleATMGear(vehicleid)
- {
- return n_Gang[vehicleid];
- }
- forward SetPlayerVehicleGearKeys(playerid, Hoch, Runter);
- public SetPlayerVehicleGearKeys(playerid, Hoch, Runter)
- {
- if(n_IsAValidKey(Hoch))
- {
- n_StandardUpKey[playerid] = Hoch;
- }
- if(n_IsAValidKey(Runter))
- {
- if(Runter != Hoch)
- {
- n_StandardDownKey[playerid] = Runter;
- return 1;
- }
- else return -1;
- }
- return 0;
- }
- forward n_GetSpeed(vehicleid);
- public 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;
- }
- forward n_SetSpeed(vehicleid,Float:speed);
- public 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;
- if(GetVehicleATMGear(vehicleid) > 0)
- {
- 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;
- }
- forward n_IsAValidKey(Key);
- public n_IsAValidKey(Key)
- {
- switch(Key)
- {
- case -128,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,65536,131072,262144: return 1;
- default: return 0;
- }
- return 0;
- }
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- #define OnGameModeInit n_VehicleInit
- #if defined _ALS_OnVehicleSpawn
- #undef OnVehicleSpawn
- #else
- #define _ALS_OnVehicleSpawn
- #endif
- #define OnVehicleSpawn n_OnVehicleSpawn
- #if defined _ALS_OnPlayerStateChange
- #undef OnPlayerStateChange
- #else
- #define _ALS_OnPlayerStateChange
- #endif
- #define OnPlayerStateChange n_OnPlayerStateChange
- #if defined _ALS_OnPlayerKeyStateChange
- #undef OnPlayerKeyStateChange
- #else
- #define _ALS_OnPlayerKeyStateChange
- #endif
- #define OnPlayerKeyStateChange n_OnPlayerKeyStateChange
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement