Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #define MAX_LADDERS 10
- enum LadderI_Info
- {
- Float:Height,
- Float:pX,
- Float:pY,
- Float:pZ
- }
- new
- LadderInfo[MAX_LADDERS][LadderI_Info],
- DownLadder[MAX_PLAYERS],
- ladders;
- stock CreateLadder(type, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
- {
- CreateObject(!type ? (1428) : (1437), x, y, z, rx, ry, rz);
- LadderInfo[ladders][pX] = x;
- LadderInfo[ladders][pY] = y;
- LadderInfo[ladders][pZ] = z;
- LadderInfo[ladders][Height] = !type ? (2.4402) : (5.8024);
- return (++ladders - 1);
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if(newkeys & KEY_SUBMISSION)
- {
- if(!DownLadder[playerid] && !IsPlayerInAnyVehicle(playerid))
- {
- for(new i; i < ladders; ++i)
- {
- if(IsPlayerInRangeOfPoint(playerid, 1.0, LadderInfo[i][pX], LadderInfo[i][pY], LadderInfo[i][pZ] + (LadderInfo[i][Height] / 2)))
- {
- return DownLadder[playerid] = SetTimerEx("OnPlayerDownLadders", 30, true, "ddd", playerid, i, _:true);
- }
- else if(IsPlayerInRangeOfPoint(playerid, 1.0, LadderInfo[i][pX], LadderInfo[i][pY], LadderInfo[i][pZ] - (LadderInfo[i][Height] / 2)))
- {
- return DownLadder[playerid] = SetTimerEx("OnPlayerDownLadders", 30, true, "ddd", playerid, i, _:false);
- }
- }
- }
- }
- return true;
- }
- forward OnPlayerDownLadders(playerid, ladderid, down);
- public OnPlayerDownLadders(playerid, ladderid, down)
- {
- new
- Float:p[3],
- Float:angle;
- GetPlayerPos(playerid, p[0], p[1], p[2]);
- GetPlayerFacingAngle(playerid, angle);
- if(down)
- {
- p[0] -= floatsin(-angle, degrees);
- p[1] -= floatcos(-angle, degrees);
- p[2] -= 0.500000;
- }
- else
- {
- p[0] += floatsin(-angle, degrees);
- p[1] += floatcos(-angle, degrees);
- p[2] += 0.500000;
- }
- SetPlayerPos(playerid, p[0], p[1], p[2]);
- if(down)
- {
- if((p[2] + 0.500000) >= (LadderInfo[ladderid][pZ] + (LadderInfo[ladderid][Height] / 2)))
- {
- return KillTimer(DownLadder[playerid]);
- }
- }
- else
- {
- if((p[2] + 0.500000) <= (LadderInfo[ladderid][pZ] - (LadderInfo[ladderid][Height] / 2)))
- {
- p[0] += floatsin(-angle, degrees);
- p[1] += floatcos(-angle, degrees);
- SetPlayerPos(playerid, p[0], p[1], p[2] - 0.500000);
- return KillTimer(DownLadder[playerid]);
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment