Advertisement
Shiny_

PSD

Sep 26th, 2013
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.91 KB | None | 0 0
  1. // Includes:
  2.     #include <conio.h>
  3.     #include <cstdlib>
  4.     #include <ctime>
  5.     #include <iostream>
  6.     #include <string>
  7.  
  8.     /* SA-MP GDK: */
  9.     #include <sampgdk/a_objects.hpp>
  10.     #include <sampgdk/a_players.hpp>
  11.     #include <sampgdk/a_samp.hpp>
  12.     #include <sampgdk/a_vehicles.hpp>
  13.     #include <sampgdk/core.hpp>
  14.     #include <sampgdk/plugin.h>
  15.  
  16.     /* Namespace: */
  17.     using namespace std;
  18.  
  19.     /* Pragmas: */
  20.     #pragma comment(lib, "sampgdk3.lib")
  21.  
  22. // Macros:
  23.     #ifndef foreach
  24.         #define foreach(integer, value)                                                                                 \
  25.                 for(int integer = NULL; integer != value; integer++)
  26.     #endif
  27.     #ifndef PUBLIC
  28.         #define PUBLIC                                                                                                  \
  29.                 PLUGIN_EXPORT bool PLUGIN_CALL
  30.     #endif
  31.     #ifndef Bindkey
  32.         #define BindKey(key)                                                                                            \
  33.                 if(newkeys & PSD.BindKey_(key))
  34.     #endif
  35.     #ifndef EXPORTING
  36.         #define EXPORTING(Plugin_Name)                                                                                  \
  37.                 PLUGIN_EXPORT bool PLUGIN_CALL Load(void ** ppData) {return Plugin_Name.Load(ppData) >= NULL;}          \
  38.                 PLUGIN_EXPORT void PLUGIN_CALL Unload() {Plugin_Name.Unload();}                                         \
  39.                 PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports() {return SUPPORTS_VERSION | SUPPORTS_PROCESS_TICK;}    \
  40.                 PLUGIN_EXPORT void PLUGIN_CALL ProcessTick() {Plugin_Name.ProcessTimers();}
  41.     #endif
  42.     #ifndef TIMER
  43.         #define TIMER                                                                                                   \
  44.                 static void SAMPGDK_CALL
  45.     #endif
  46.     /* C_MapAndreas: */
  47.     #ifndef MAP_ANDREAS_MODE_NONE
  48.             #define MAP_ANDREAS_MODE_NONE                                                       \
  49.                     NULL
  50.     #endif
  51.     #ifndef MAP_ANDREAS_MODE_MINIMAL
  52.             #define MAP_ANDREAS_MODE_MINIMAL                                                    \
  53.                     NULL + 1
  54.     #endif
  55.     #ifndef MAP_ANDREAS_MODE_FULL
  56.             #define MAP_ANDREAS_MODE_FULL                                                       \
  57.                     NULL + 2
  58.     #endif
  59.     #ifndef MAP_ANDREAS_MAP_SIZE
  60.             #define MAP_ANDREAS_MAP_SIZE                                                        \
  61.                     (6000 * 6000)
  62.     #endif
  63.     #ifndef MAP_ANDREAS_POINTS_FULL
  64.             #define MAP_ANDREAS_POINTS_FULL                                                     \
  65.                     MAP_ANDREAS_MAP_SIZE
  66.     #endif
  67.     #ifndef MAP_ANDREAS_POINTS_MINIMAL
  68.             #define MAP_ANDREAS_POINTS_MINIMAL                                                  \
  69.                     (MAP_ANDREAS_MAP_SIZE / 9)
  70.     #endif
  71.     #ifndef MAP_ANDREAS_HMAP_FILE_FULL
  72.             #define MAP_ANDREAS_HMAP_FILE_FULL                                                  \
  73.                     "SAfull.hmap"
  74.     #endif
  75.     #ifndef MAP_ANDREAS_HMAP_FILE_MINIMAL
  76.             #define MAP_ANDREAS_HMAP_FILE_MINIMAL                                               \
  77.                     "SAmin.hmap"
  78.     #endif
  79.     #ifndef MAP_ANDREAS_ERROR_SUCCESS
  80.             #define MAP_ANDREAS_ERROR_SUCCESS                                                   \
  81.                     NULL
  82.     #endif
  83.     #ifndef MAP_ANDREAS_ERROR_FAILURE
  84.             #define MAP_ANDREAS_ERROR_FAILURE                                                   \
  85.                     NULL + 1
  86.     #endif
  87.     #ifndef MAP_ANDREAS_ERROR_MEMORY
  88.             #define MAP_ANDREAS_ERROR_MEMORY                                                    \
  89.                     NULL + 2
  90.     #endif
  91.     #ifndef MAP_ANDREAS_ERROR_DATA_FILES
  92.             #define MAP_ANDREAS_ERROR_DATA_FILES                                                \
  93.                     NULL + 3
  94.     #endif
  95.  
  96. // Classess:
  97.     class c_PSD {
  98.         public:
  99.         // Variables:
  100.             /* Chars: */
  101.             char str[MAX_PLAYERS][170];
  102.             char Speed3DText[MAX_PLAYERS];
  103.             char CarFireObject[MAX_PLAYERS];
  104.             char Name[MAX_PLAYERS][MAX_PLAYER_NAME];
  105.            
  106.             /* Floats: */
  107.             float Health[MAX_PLAYERS];
  108.             float xyz[MAX_PLAYERS][3];
  109.  
  110.         // Functions:
  111.             ~c_PSD();
  112.             int BindKey_(char * key);
  113.             float GetSpeed(int playerid);
  114.             inline bool PlayAudioStreamForPlayer(int playerid, const char * url);
  115.             inline bool ApplyAnimation(int playerid, const char * animlib, const char * animname, float fDelta, bool loop, bool lockx, bool locky, bool freeze, int time);
  116.     };
  117.     c_PSD PSD;
  118.  
  119.     c_PSD::~c_PSD() {
  120.         strcpy(* str, "");
  121.         strcpy(Speed3DText, "");
  122.         strcpy(CarFireObject, "");
  123.         strcpy(* Name, "");
  124.         * Health = 0.0;
  125.         strcpy((char *)xyz, "");
  126.     }
  127.  
  128.     int c_PSD::BindKey_(char * key) {
  129.         if(!strcmp("action", key)) return KEY_ACTION;
  130.         else if(!strcmp("crouch", key)) return KEY_CROUCH;
  131.         else if(!strcmp("fire", key)) return KEY_FIRE;
  132.         else if(!strcmp("sprint", key)) return KEY_SPRINT;
  133.         else if(!strcmp("attack", key)) return KEY_SECONDARY_ATTACK;
  134.         else if(!strcmp("jump", key)) return KEY_JUMP;
  135.         else if(!strcmp("lookr", key)) return KEY_LOOK_RIGHT;
  136.         else if(!strcmp("lookl", key)) return KEY_LOOK_LEFT;
  137.         else if(!strcmp("lookb", key)) return KEY_LOOK_BEHIND;
  138.         else if(!strcmp("handbrake", key)) return KEY_HANDBRAKE;
  139.         else if(!strcmp("submission", key)) return KEY_SUBMISSION;
  140.         else if(!strcmp("walk", key)) return KEY_WALK;
  141.         else if(!strcmp("aup", key)) return KEY_ANALOG_UP;
  142.         else if(!strcmp("adown", key)) return KEY_ANALOG_DOWN;
  143.         else if(!strcmp("aleft", key)) return KEY_ANALOG_LEFT;
  144.         else if(!strcmp("aright", key)) return KEY_ANALOG_RIGHT;
  145.         else if(!strcmp("yes", key)) return KEY_YES;
  146.         else if(!strcmp("no", key)) return KEY_NO;
  147.         else if(!strcmp("ctrlback", key)) return KEY_NO;
  148.         else if(!strcmp("up", key)) return KEY_UP;
  149.         else if(!strcmp("down", key)) return KEY_DOWN;
  150.         else if(!strcmp("left", key)) return KEY_LEFT;
  151.         else if(!strcmp("right", key)) return KEY_RIGHT;
  152.         else return false;
  153.     }
  154.  
  155.     float c_PSD::GetSpeed(int playerid) {
  156.         IsPlayerInAnyVehicle(playerid)? GetVehicleVelocity(GetPlayerVehicleID(playerid), &xyz[0][playerid], &xyz[1][playerid], &xyz[2][playerid]): GetPlayerVelocity(playerid, &xyz[0][playerid], &xyz[1][playerid], &xyz[2][playerid]);
  157.         return 160 * sqrtf(powf(xyz[2][playerid], 2) + powf(xyz[1][playerid], 2) + powf(xyz[0][playerid], 2));
  158.     }
  159.  
  160.     inline bool c_PSD::PlayAudioStreamForPlayer(int playerid, const char * url) {
  161.         float posX = 0.0;
  162.         float posY = 0.0;
  163.         float posZ = 0.0;
  164.         float distance = 0.0;
  165.         bool usepos = false;
  166.         return ::sampgdk_PlayAudioStreamForPlayer(playerid, url, posX, posY, posZ, distance, usepos);
  167.     }
  168.  
  169.     inline bool c_PSD::ApplyAnimation(int playerid, const char * animlib, const char * animname, float fDelta, bool loop, bool lockx, bool locky, bool freeze, int time) {
  170.         bool forcesync = false;
  171.         return ::sampgdk_ApplyAnimation(playerid, animlib, animname, fDelta, loop, lockx, locky, freeze, time, forcesync);
  172.     }
  173.  
  174. // Variables:
  175.     static ThisPlugin PSD_PLUGIN;
  176.  
  177.     char gVehicleNames[212][32] = {
  178.         "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper",
  179.         "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus", "Voodoo", "Pony", "Mule",
  180.         "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi", "Washington",
  181.         "Bobcat", "Mr Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer", "Securicar",
  182.         "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife", "Trailer 1", "Previon",
  183.         "Coach", "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster",
  184.         "Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer 2", "Turismo",
  185.         "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair", "Berkley's RC Van",
  186.         "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic",
  187.         "Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre",
  188.         "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis",
  189.         "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher", "FBI Rancher", "Virgo", "Greenwood",
  190.         "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick", "Boxville", "Benson",
  191.         "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher",
  192.         "Super GT", "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropdust", "Stunt",
  193.         "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900",
  194.         "NRG-500", "HPV1000", "Cement Truck", "Tow Truck", "Fortune", "Cadrona", "FBI Truck",
  195.         "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan",
  196.         "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet", "Clover", "Sadler",
  197.         "Firetruck LA", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit",
  198.         "Utility", "Nevada", "Yosemite", "Windsor", "Monster A", "Monster B", "Uranus", "Jester",
  199.         "Sultan", "Stratum", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna",
  200.         "Bandito", "Freight Flat", "Streak Carriage", "Kart", "Mower", "Duneride", "Sweeper",
  201.         "Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400", "Newsvan",
  202.         "Tug", "Trailer 3", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club", "Freight Carriage",
  203.         "Trailer 3", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car (LSPD)", "Police Car (SFPD)",
  204.         "Police Car (LVPD)", "Police Ranger", "Picador", "S.W.A.T. Van", "Alpha", "Phoenix", "Glendale",
  205.         "Sadler", "Luggage Trailer A", "Luggage Trailer B", "Stair Trailer", "Boxville", "Farm Plow",
  206.         "Utility Trailer"
  207.     };
  208.  
  209.     inline int SetTimer(TimerCallback callback, int interval, bool repeat, void * param = NULL) {
  210.         return SetTimer(interval, repeat, callback, param);
  211.     }
  212.    
  213.     inline int SetTimerEx(TimerCallback callback, int interval, bool repeat, void * param = NULL) {
  214.         return SetTimer(interval, repeat, callback, (void *) param);
  215.     }
  216.    
  217. // Public functions:
  218.     PUBLIC OnGameModeInit() {
  219.         UsePlayerPedAnims();
  220.         for(int i = 0; i <= 299; i++) {
  221.             AddPlayerClass(i, -1399.0179f, 2640.7385f, 55.6875f, 0.0, 0, 0, 0, 0, 0, 0);
  222.         }
  223.         return true;
  224.     }
  225.  
  226.     PUBLIC OnPlayerUpdate(int playerid) {
  227.         GetPlayerName(playerid, PSD.Name[playerid], sizeof(PSD.Name[playerid]));
  228.         GetVehicleHealth(GetPlayerVehicleID(playerid), &PSD.Health[playerid]);
  229.         IsPlayerInAnyVehicle(playerid)? sprintf(PSD.str[playerid], "\n[%s]\n%0.1f km/h\n%0.1f/1000.0", &gVehicleNames[GetVehicleModel(GetPlayerVehicleID(playerid)) - 400], PSD.GetSpeed(playerid), PSD.Health[playerid]), UpdatePlayer3DTextLabelText(playerid, PSD.Speed3DText[playerid], -1, PSD.str[playerid]): false;
  230.         return true;
  231.     }
  232.  
  233.     PUBLIC OnPlayerCommandText(int playerid, const char * cmdtext) {
  234.         if(!strcmp(cmdtext, "/life")) {
  235.             SetPlayerHealth(playerid, 100.0);
  236.             SetPlayerArmour(playerid, 100.0);
  237.             SendClientMessage(playerid, -1, "Dostajesz 100 punktów życia i pancerza.");
  238.             return true;
  239.         }
  240.         else if(!strcmp(cmdtext, "/kill")) {
  241.             SetPlayerHealth(playerid, -100.0);
  242.             return true;
  243.         }
  244.         else if(!strcmp(cmdtext, "/invisible")) {
  245.             if(GetPlayerColor(playerid) == 0xFFFFFF00) {
  246.                 return SendClientMessage(playerid, -1, "Masz już włączoną niewidzialność.");
  247.             }
  248.             SetPlayerColor(playerid, 0xFFFFFF00);
  249.             SendClientMessage(playerid, -1, "Włączasz niewidzialność.");
  250.             return true;
  251.         }
  252.         else if(!strcmp(cmdtext, "/visible")) {
  253.             SetPlayerColor(playerid, 0xFF000000);
  254.             SendClientMessage(playerid, -1, "Wyłączasz niewidzialność.");
  255.             return true;
  256.         }
  257.         return false;
  258.     }
  259.    
  260.     PUBLIC OnPlayerStateChange(int playerid, int newstate, int oldstate) {
  261.         newstate == PLAYER_STATE_DRIVER? PSD.Speed3DText[playerid] = CreatePlayer3DTextLabel(playerid, "Infernus\n666 KM/H", -1, 0, 0, 0, 15.0, INVALID_PLAYER_ID, GetPlayerVehicleID(playerid), 1): false;
  262.         oldstate == PLAYER_STATE_DRIVER? DeletePlayer3DTextLabel(playerid, PSD.Speed3DText[playerid]): false;
  263.         return true;
  264.     }
  265.    
  266.     PUBLIC OnPlayerKeyStateChange(int playerid, int newkeys, int oldkeys) {    
  267.         if((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
  268.             if(IsValidObject(PSD.CarFireObject[playerid]) == 0) {
  269.                 PSD.CarFireObject[playerid] = CreateObject(18694, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 500.0f);
  270.                 AttachObjectToVehicle(PSD.CarFireObject[playerid], GetPlayerVehicleID(playerid), 0.0f, -2.3f, 1.2f, 180.0f, 0.0f, 0.0f);
  271.             }
  272.             AddVehicleComponent(GetPlayerVehicleID(playerid), 1010);
  273.             !IsPlayerInAnyVehicle(playerid)? RemoveVehicleComponent(GetPlayerVehicleID(playerid), 1010), DestroyObject(PSD.CarFireObject[playerid]): false;
  274.             return true;
  275.         }
  276.        
  277.         else if((oldkeys & KEY_FIRE) && !(newkeys & KEY_FIRE) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
  278.             DestroyObject(PSD.CarFireObject[playerid]);
  279.             RemoveVehicleComponent(GetPlayerVehicleID(playerid), 1010);
  280.             return true;
  281.         }
  282.    
  283.         BindKey("submission") {
  284.             IsPlayerInAnyVehicle(playerid)?
  285.                     RepairVehicle(GetPlayerVehicleID(playerid)),
  286.                     GameTextForPlayer(playerid,"~y~Pojazd naprawiony!", 2000, 5),
  287.                     PlayerPlaySound(playerid, 1133, 0.0f, 0.0f, 0.0f):
  288.             false;
  289.         }
  290.         return true;
  291.     }
  292.  
  293.     PUBLIC OnPlayerRequestClass(int playerid, int classid) {
  294.         switch(GetPVarInt(playerid, "Dance")) {
  295.             case 0: ApplyAnimation(playerid, "DANCING", "dnce_M_a", 4.1f, 1, 1, 1, 1, 1, 1); break;
  296.             case 1: ApplyAnimation(playerid, "DANCING", "dnce_M_b", 4.1f, 1, 1, 1, 1, 1, 1); break;
  297.             case 2: ApplyAnimation(playerid, "DANCING", "dnce_M_c", 4.1f, 1, 1, 1, 1, 1, 1); break;
  298.             case 3: ApplyAnimation(playerid, "DANCING", "dnce_M_d", 4.1f, 1, 1, 1, 1, 1, 1); break;
  299.             case 4: ApplyAnimation(playerid, "DANCING", "dnce_M_e", 4.1f, 1, 1, 1, 1, 1, 1); break;
  300.         }
  301.         SetPVarInt(playerid, "Dance", GetPVarInt(playerid, "Dance") < 4? GetPVarInt(playerid, "Dance") + 1: 0);
  302.         return true;
  303.     }
  304.  
  305.     PUBLIC OnPlayerDisconnect(int playerid, int reason) {
  306.         !IsPlayerConnected(playerid)? DeletePlayer3DTextLabel(playerid, PSD.Speed3DText[playerid]): false;
  307.         IsValidObject(PSD.CarFireObject[playerid])? DestroyObject(PSD.CarFireObject[playerid]): false;
  308.         return true;
  309.     }
  310.  
  311.     PUBLIC OnGameModeExit() {
  312.         return true;
  313.     }
  314.  
  315. // Exports:
  316.     EXPORTING(PSD_PLUGIN);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement