Guest User

Luby

a guest
Mar 21st, 2009
928
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.35 KB | None | 0 0
  1. #include <a_samp>
  2. new IsReplaying[200];
  3. new ReplayOffset[200];
  4. enum ReplayEnum{
  5.     Float:X, Float:Y, Float:Z, Float:A, Veh, Float:Health, Float:VHealth, Float:Armour, Keys, Weapon
  6. };
  7. new Float:ReplayData[200][1001][ReplayEnum];
  8. new PlayerCar[200];
  9. new PlayerJumping[200];
  10. new Text:Texts[4];
  11. public OnFilterScriptInit(){
  12.     SetTimer("UpdateReplay", 40, true);
  13.     Texts[0] = TextDrawCreate(-10.0, -10.0, " ");
  14.     Texts[1] = TextDrawCreate(-10.0, -10.0, "~n~~n~~n~~n~");
  15.     TextDrawTextSize(Texts[1], 700.0, 100.0);
  16.     TextDrawUseBox(Texts[1], true);
  17.     TextDrawBoxColor(Texts[1], 0x000000FF);
  18.     Texts[2] = TextDrawCreate(-10.0, 400.0, "~n~~n~~n~~n~~n~~n~~n~~n~~n~");
  19.     TextDrawTextSize(Texts[2], 700.0, 400.0);
  20.     TextDrawUseBox(Texts[2], true);
  21.     TextDrawBoxColor(Texts[2], 0x000000FF);
  22.     Texts[3] = TextDrawCreate(550.0, 10.0, "Replay");
  23.     print("Replay system by Luby - Loaded");
  24.     return 1;
  25. }
  26. public OnPlayerCommandText(playerid, cmdtext[]){
  27.     new cmd[256], idx=0;
  28.     cmd = strtok(cmdtext, idx);
  29.     if(!strcmp(cmdtext, "/replay", true)){
  30.         if(!IsReplaying[playerid]){
  31.             IsReplaying[playerid] = true;
  32.             TextDrawShowForPlayer(playerid, Texts[1]);
  33.             TextDrawShowForPlayer(playerid, Texts[2]);
  34.             TextDrawShowForPlayer(playerid, Texts[3]);
  35.             SendClientMessage(playerid, 0x44FF44FF, "*** Replay playing.");
  36.             SetPlayerVirtualWorld(playerid, 3);
  37.             if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)ReplayData[playerid][1000][Veh] = GetPlayerVehicleID(playerid); else ReplayData[playerid][1000][Veh] = -1;
  38.         } else {
  39.             ReplayOffset[playerid] = 998;
  40.             SendClientMessage(playerid, 0x44FF44FF, "*** Replay stopped playing.");
  41.         }
  42.         return 1;
  43.     }
  44.     if(!strcmp(cmd, "/savereplay", true)){
  45.         new file[256];
  46.         file = strtok(cmdtext, idx);
  47.         if(!file[0])return SendClientMessage(playerid, 0xFF4444FF, "*** Usage : /savereplay name.");
  48.         if(fexist(file)) return SendClientMessage(playerid, 0xFF4444FF, "*** Name already exists.");
  49.         SaveReplay(playerid, file);
  50.         format(file, 256, "*** Saved replay  \"%s\". To load type /loadreplay name.", file);
  51.         SendClientMessage(playerid, 0x44FF44FF, file);
  52.         return 1;
  53.     }
  54.     if(!strcmp(cmd, "/loadreplay", true)){
  55.         new file[256];
  56.         file = strtok(cmdtext, idx);
  57.         if(!file[0])return SendClientMessage(playerid, 0xFF4444FF, "*** Usage : /loadreplay name.");
  58.         if(!fexist(file)) return SendClientMessage(playerid, 0xFF4444FF, "*** Name doesn't exist.");
  59.         LoadReplay(playerid, file);
  60.         format(file, 256, "*** Replay \"%s\" loaded and played.", file);
  61.         SendClientMessage(playerid, 0x44FF44FF, file);
  62.         return 1;
  63.     }
  64.     return 0;
  65. }
  66. stock strtok(const string[], &index){
  67.         new length = strlen(string);
  68.         while ((index < length) && (string[index] <= ' '))index++;
  69.         new offset = index;
  70.         new result[20];
  71.         while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))){
  72.                 result[index - offset] = string[index];
  73.                 index++;
  74.         }
  75.         result[index - offset] = EOS;
  76.         return result;
  77. }
  78. public OnPlayerConnect(playerid){
  79.     for(new g=0;g<1000;g++){
  80.         ReplayData[playerid][g][X] = 0.0;
  81.         ReplayData[playerid][g][Y] = 0.0;
  82.         ReplayData[playerid][g][Z] = 0.0;
  83.         ReplayData[playerid][g][A] = 0.0;
  84.         ReplayData[playerid][g][Veh] = -1;
  85.         ReplayData[playerid][g][Health] = 100.0;
  86.         ReplayData[playerid][g][VHealth] = 1000.0;
  87.         ReplayData[playerid][g][Armour] = 0.0;
  88.         ReplayData[playerid][g][Keys] = 0;
  89.         ReplayData[playerid][g][Weapon] = 0;
  90.     }
  91.     IsReplaying[playerid] = 0;
  92.     ReplayOffset[playerid] = 0;
  93.     PlayerCar[playerid] = 0;
  94.     TextDrawShowForPlayer(playerid, Texts[0]);
  95. }
  96. forward UpdateReplay();
  97. public UpdateReplay()for(new playerid = 0;playerid<200;playerid++)if(IsPlayerConnected(playerid)){
  98.     if(IsReplaying[playerid]){
  99.         while(ReplayData[playerid][ReplayOffset[playerid]][X] == 0.0){
  100.             ReplayOffset[playerid]++;
  101.         }
  102.         if(ReplayData[playerid][ReplayOffset[playerid]][Veh] != -1 && ReplayData[playerid][ReplayOffset[playerid]][Veh]> 400){
  103.             if(PlayerCar[playerid] == 0){
  104.                 PlayerCar[playerid] = CreateVehicle(ReplayData[playerid][ReplayOffset[playerid]][Veh], 0.0, 0.0, 0.0, 0.0, -1,-1,9999999);
  105.                 SetVehicleVirtualWorld(PlayerCar[playerid], 3);
  106.                 PutPlayerInVehicle(playerid, PlayerCar[playerid], 0);
  107.             }
  108.         }
  109.         if(ReplayData[playerid][ReplayOffset[playerid]][Veh] != -1){
  110.             SetVehiclePos(PlayerCar[playerid], ReplayData[playerid][ReplayOffset[playerid]][X], ReplayData[playerid][ReplayOffset[playerid]][Y], ReplayData[playerid][ReplayOffset[playerid]][Z]);
  111.             SetVehicleHealth(PlayerCar[playerid], ReplayData[playerid][ReplayOffset[playerid]][VHealth]);
  112.             SetVehicleZAngle(PlayerCar[playerid], ReplayData[playerid][ReplayOffset[playerid]][A]);
  113.             PutPlayerInVehicle(playerid, PlayerCar[playerid], 0);
  114.         } else {
  115.             //SetPlayerPos(playerid, ReplayData[playerid][ReplayOffset[playerid]][X], ReplayData[playerid][ReplayOffset[playerid]][Y], ReplayData[playerid][ReplayOffset[playerid]][Z]);
  116.             if(PlayerCar[playerid] > -1){
  117.                 DestroyVehicle(PlayerCar[playerid]);
  118.                 PlayerCar[playerid] = 0;
  119.             }
  120.             SetPlayerFacingAngle(playerid, ReplayData[playerid][ReplayOffset[playerid]][A]);
  121.             if(GetPlayerWeapon(playerid) != ReplayData[playerid][ReplayOffset[playerid]][Weapon]){
  122.                 ResetPlayerWeapons(playerid);
  123.                 GivePlayerWeapon(playerid, ReplayData[playerid][ReplayOffset[playerid]][Weapon], 1000);
  124.             }
  125.             if(ReplayOffset[playerid] > 0 && ReplayOffset[playerid] < 999 && floatabs(ReplayData[playerid][ReplayOffset[playerid]][X] - ReplayData[playerid][ReplayOffset[playerid]-1][X])+floatabs(ReplayData[playerid][ReplayOffset[playerid]][Y] - ReplayData[playerid][ReplayOffset[playerid]-1][Y]) != 0.0){
  126.                 if(!PlayerJumping[playerid]){
  127.                     if(ReplayData[playerid][ReplayOffset[playerid]][Keys] & 8){
  128.                         ApplyAnimation(playerid, "ped", "sprint_civi", 15.0, 0, 1, 1, 1, 1);
  129.                     } else if(ReplayData[playerid][ReplayOffset[playerid]][Keys] & 1024){
  130.                         ApplyAnimation(playerid, "ped", "WALK_player", 15.0, 0, 1, 1, 1, 1);
  131.                     } else if(ReplayData[playerid][ReplayOffset[playerid]][Keys] & 32){
  132.                         ApplyAnimation(playerid, "ped", "JUMP_glide", 15.0, 0, 1, 1, 0, 0);
  133.                         PlayerJumping[playerid]++;
  134.                     } else ApplyAnimation(playerid, "ped", "run_player", 15.0, 0, 1, 1, 1, 1);
  135.                 } else {
  136.                     PlayerJumping[playerid]++;
  137.                     if(PlayerJumping[playerid] > 17)PlayerJumping[playerid] = 0;
  138.                 }
  139.             } else {
  140.                 new Float:X2, Float:Y2, Float:Z2;
  141.                 GetPlayerPos(playerid, X2, Y2, Z2);
  142.                 if(floatabs(X2 - ReplayData[playerid][ReplayOffset[playerid]][X]) > 2.0 || floatabs(Y2 - ReplayData[playerid][ReplayOffset[playerid]][Y]) > 2.0 || ReplayOffset[playerid] == 998 || ReplayOffset[playerid] == 999){
  143.                     ClearAnimations(playerid);
  144.                     SetPlayerPos(playerid, ReplayData[playerid][ReplayOffset[playerid]][X], ReplayData[playerid][ReplayOffset[playerid]][Y], ReplayData[playerid][ReplayOffset[playerid]][Z]);
  145.                 }
  146.             }
  147.         }
  148.         SetPlayerHealth(playerid, ReplayData[playerid][ReplayOffset[playerid]][Health]);
  149.         SetPlayerArmour(playerid, ReplayData[playerid][ReplayOffset[playerid]][Armour]);
  150.         ReplayOffset[playerid]++;
  151.         if(ReplayOffset[playerid] > 998){
  152.             ReplayOffset[playerid] = 0;
  153.             IsReplaying[playerid] = 0;
  154.             //ClearAnimations(playerid);
  155.             TextDrawHideForPlayer(playerid, Texts[1]);
  156.             TextDrawHideForPlayer(playerid, Texts[2]);
  157.             TextDrawHideForPlayer(playerid, Texts[3]);
  158.             SetPlayerVirtualWorld(playerid, 0);
  159.             if(PlayerCar[playerid] > -1){
  160.                 DestroyVehicle(PlayerCar[playerid]);
  161.                 PlayerCar[playerid] = 0;
  162.             }
  163.             if(ReplayData[playerid][1000][Veh] > -1){
  164.                 SetVehiclePos(ReplayData[playerid][1000][Veh], ReplayData[playerid][1000][X], ReplayData[playerid][1000][Y], ReplayData[playerid][1000][Z]);
  165.                 SetVehicleHealth(ReplayData[playerid][1000][Veh], ReplayData[playerid][1000][VHealth]);
  166.                 SetVehicleZAngle(ReplayData[playerid][1000][Veh], ReplayData[playerid][1000][A]);
  167.             //  PutPlayerInVehicle(playerid, ReplayData[playerid][1000][Veh], 0);
  168.             } else {
  169.                 SetPlayerPos(playerid, ReplayData[playerid][1000][X], ReplayData[playerid][1000][Y], ReplayData[playerid][1000][Z]);
  170.                 if(PlayerCar[playerid] > -1){
  171.                     DestroyVehicle(PlayerCar[playerid]);
  172.                     PlayerCar[playerid] = 0;
  173.                 }
  174.                 SetPlayerFacingAngle(playerid, ReplayData[playerid][1000][A]);
  175.             }
  176.             if(ReplayData[playerid][1000][Veh] > -1){
  177.                 PutPlayerInVehicle(playerid, ReplayData[playerid][1000][Veh], 0);
  178.             } else ClearAnimations(playerid);
  179.         }
  180.     } else {
  181.         new Float:X1, Float:Y1, Float:Z1, Float:A1, Veh1, Float:Health1, Float:VHealth1, Float:Armour1;
  182.         if(IsPlayerInAnyVehicle(playerid)){
  183.             Veh1 = GetPlayerVehicleID(playerid);
  184.             GetVehiclePos(Veh1, X1, Y1, Z1);
  185.             GetVehicleZAngle(Veh1, A1);
  186.             GetVehicleHealth(Veh1, VHealth1);
  187.             Veh1 = GetVehicleModel(Veh1);
  188.         } else {
  189.             Veh1 = -1;
  190.             GetPlayerPos(playerid, X1, Y1, Z1);
  191.             GetPlayerFacingAngle(playerid, A1);
  192.         }
  193.         GetPlayerHealth(playerid, Health1);
  194.         GetPlayerArmour(playerid, Armour1);
  195.         new keys, updown, leftright, Wpn;
  196.         GetPlayerKeys(playerid, keys, updown, leftright);
  197.         Wpn = GetPlayerWeapon(playerid);
  198.         for(new g=1;g<1000;g++){
  199.             ReplayData[playerid][g-1][X] = ReplayData[playerid][g][X];
  200.             ReplayData[playerid][g-1][Y] = ReplayData[playerid][g][Y];
  201.             ReplayData[playerid][g-1][Z] = ReplayData[playerid][g][Z];
  202.             ReplayData[playerid][g-1][A] = ReplayData[playerid][g][A];
  203.             ReplayData[playerid][g-1][Veh] = ReplayData[playerid][g][Veh];
  204.             ReplayData[playerid][g-1][Health] = ReplayData[playerid][g][Health];
  205.             ReplayData[playerid][g-1][VHealth] = ReplayData[playerid][g][VHealth];
  206.             ReplayData[playerid][g-1][Armour] = ReplayData[playerid][g][Armour];
  207.             ReplayData[playerid][g-1][Keys] = ReplayData[playerid][g][Keys];
  208.             ReplayData[playerid][g-1][Weapon] = ReplayData[playerid][g][Weapon];
  209.         }
  210.         ReplayData[playerid][999][X] = X1;
  211.         ReplayData[playerid][999][Y] = Y1;
  212.         ReplayData[playerid][999][Z] = Z1;
  213.         ReplayData[playerid][999][A] = A1;
  214.         ReplayData[playerid][999][Veh] = Veh1;
  215.         ReplayData[playerid][999][Health] = Health1;
  216.         ReplayData[playerid][999][VHealth] = VHealth1;
  217.         ReplayData[playerid][999][Armour] = Armour1;
  218.         ReplayData[playerid][999][Keys] = keys;
  219.         ReplayData[playerid][999][Weapon] = Wpn;
  220.         ReplayData[playerid][1000][X] = X1;
  221.         ReplayData[playerid][1000][Y] = Y1;
  222.         ReplayData[playerid][1000][Z] = Z1;
  223.         ReplayData[playerid][1000][A] = A1;
  224.         //if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)ReplayData[playerid][1000][Veh] = GetPlayerVehicleID(playerid); else ReplayData[playerid][1000][Veh] = -1;
  225.         ReplayData[playerid][1000][Health] = Health1;
  226.         ReplayData[playerid][1000][VHealth] = VHealth1;
  227.         ReplayData[playerid][1000][Armour] = Armour1;
  228.         ReplayData[playerid][1000][Keys] = keys;
  229.         ReplayData[playerid][1000][Weapon] = Wpn;
  230.     }
  231. }
  232. stock tostr(val){
  233.     new str[256];
  234.     format(str, 256, "%d", val);
  235.     return str;
  236. }
  237. stock strfloat(Float:var){
  238.     new str[256];
  239.     format(str, 256, "%f", var);
  240.     return str;
  241. }
  242. stock Split(s1[],s2[],s3[]="",s4[]="",s5[]="",s6[]="",s7[]="",s8[]="",s9[]="",s10[]="",s11[]="",s12[]="",s13[]="",s14[]="",s15[]=""){
  243.     new str[256];
  244.     format(str, 256, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15);
  245.     return str;
  246. }
  247. SaveReplay(playerid, file[]){
  248.     new File:fh = fopen(file, io_readwrite);
  249.     new str[256];
  250.     for(new g=0;g<1000;g++){
  251.         format(str, 256, "%f %f %f %f %d %f %f %f %d %d\r\n",
  252.         ReplayData[playerid][g][X],
  253.         ReplayData[playerid][g][Y],
  254.         ReplayData[playerid][g][Z],
  255.         ReplayData[playerid][g][A],
  256.         ReplayData[playerid][g][Veh],
  257.         ReplayData[playerid][g][Health],
  258.         ReplayData[playerid][g][VHealth],
  259.         ReplayData[playerid][g][Armour],
  260.         ReplayData[playerid][g][Keys],
  261.         ReplayData[playerid][g][Weapon]);
  262.         fwrite(fh, str);
  263.     }
  264.     fclose(fh);
  265.     return true;
  266. }
  267. LoadReplay(playerid, file[]){
  268.     new File:fh = fopen(file, io_readwrite);
  269.     new str[256], tok[256], id=0, idx=0;
  270.     while(fread(fh, str)){
  271.         tok = strtok(str, idx);
  272.         ReplayData[playerid][id][X] = floatstr(tok);
  273.         tok = strtok(str, idx);
  274.         ReplayData[playerid][id][Y] = floatstr(tok);
  275.         tok = strtok(str, idx);
  276.         ReplayData[playerid][id][Z] = floatstr(tok);
  277.         tok = strtok(str, idx);
  278.         ReplayData[playerid][id][A] = floatstr(tok);
  279.         tok = strtok(str, idx);
  280.         ReplayData[playerid][id][Veh] = strval(tok);
  281.         tok = strtok(str, idx);
  282.         ReplayData[playerid][id][Health] = floatstr(tok);
  283.         tok = strtok(str, idx);
  284.         ReplayData[playerid][id][VHealth] = floatstr(tok);
  285.         tok = strtok(str, idx);
  286.         ReplayData[playerid][id][Armour] = floatstr(tok);
  287.         tok = strtok(str, idx);
  288.         ReplayData[playerid][id][Keys] = strval(tok);
  289.         tok = strtok(str, idx);
  290.         ReplayData[playerid][id][Weapon] = strval(tok);
  291.         id++;
  292.         idx=0;
  293.     }
  294.     fclose(fh);
  295.     ReplayOffset[playerid] = 0;
  296.     IsReplaying[playerid] = 1;
  297.     if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)ReplayData[playerid][1000][Veh] = GetPlayerVehicleID(playerid); else ReplayData[playerid][1000][Veh] = -1;
  298.     TextDrawShowForPlayer(playerid, Texts[1]);
  299.     TextDrawShowForPlayer(playerid, Texts[2]);
  300.     TextDrawShowForPlayer(playerid, Texts[3]);
  301.     SetPlayerVirtualWorld(playerid, 3);
  302.     return true;
  303. }
Advertisement
Add Comment
Please, Sign In to add comment