Advertisement
Guest User

Untitled

a guest
Feb 24th, 2010
508
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.04 KB | None | 0 0
  1. /* kidnap funciton
  2. written by mansonh
  3. Feb 2010
  4. */
  5. #include <a_samp>
  6. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  7.  
  8. enum KIDNAPINFO
  9. {
  10.     k_victimID,
  11.     k_ransom
  12. }
  13. new kidnapped[MAX_PLAYERS]; //the kidnapees kidnapper
  14. new kidnap[MAX_PLAYERS][KIDNAPINFO]; //the kidnapping info
  15.  
  16. public OnFilterScriptInit()
  17. {
  18.     print("\n#########################################");
  19.     print(" Kidnapping Filterscript by Mansonh");
  20.     print(" Last update: February 24rd, 2010");
  21.     print(" FS Version: 1.0");
  22.     print("#########################################\n");
  23.  
  24.     for(new playerid=0; playerid<MAX_PLAYERS; playerid++)
  25.     {
  26.         ResetKidnapping(playerid, playerid);
  27.     }
  28. }
  29. public OnPlayerConnect(playerid){
  30.     ResetKidnapping(playerid, playerid);
  31. }
  32. public OnPlayerDisconnect(playerid){
  33.     if(kidnapped[playerid] != -1) CancelKidnapper(kidnapped[playerid], playerid, "Your Victim has disconnected");
  34.     if(kidnap[playerid][k_victimID] != -1) CancelVictim(playerid, kidnap[playerid][k_victimID], "Your Kidnapper has disconnected, you are free");
  35. }
  36. public OnPlayerDeath(playerid, killerid, reason){
  37.    
  38.     if(kidnapped[playerid] != -1) CancelKidnapper(kidnapped[playerid], playerid, "Your Victim has died");
  39.     if(kidnap[playerid][k_victimID] != -1) CancelVictim(playerid, kidnap[playerid][k_victimID], "Your Kidnapper has died, you are free");
  40. }
  41. stock CancelKidnapper(kidnapperid, victimid, reason[]){
  42. //Victim has disconnected or died
  43.     if(IsPlayerConnected(kidnapperid)) SendClientMessage(kidnapperid, 0xAA0000AA, reason);
  44.     ResetKidnapping(kidnapperid, victimid);
  45. }
  46. stock CancelVictim(kidnapperid, victimid, reason[]){
  47.     if(IsPlayerConnected(victimid)) SendClientMessage(victimid, 0xAA0000AA, reason);
  48.     ResetKidnapping(kidnapperid, victimid);
  49. }
  50. stock ResetKidnapping(kidnapperid, victimid){
  51.     kidnap[kidnapperid][k_victimID] = -1;
  52.     kidnap[kidnapperid][k_ransom] = 0;
  53.     kidnapped[victimid] = -1;
  54.     TogglePlayerControllable(victimid, true);
  55. }
  56.  
  57. public OnPlayerCommandText(playerid, cmdtext[])
  58. {
  59.     dcmd(kidnap, 6, cmdtext);
  60.     dcmd(release, 7, cmdtext);
  61.     dcmd(ransom, 6, cmdtext);
  62.     return 1;
  63. }
  64. dcmd_kidnap(playerid, params[]){
  65.     new kidnapeeID, ransom;
  66.     if(sscanf(params, "dd", kidnapeeID, ransom) || GetPlayerState(playerid) != PLAYER_STATE_DRIVER
  67.         || !IsPlayerConnected(kidnapeeID) || GetPlayerState(kidnapeeID) != PLAYER_STATE_PASSENGER
  68.         || GetPlayerVehicleID(playerid) != GetPlayerVehicleID(kidnapeeID))
  69.         return SendClientMessage(playerid, 0xFF0000AA, "/kidnap id amount (player must be a passenger in your vehicle)");
  70.     //Passenger is in vehicle
  71.     if(kidnap[playerid][k_victimID] != -1)
  72.         return SendClientMessage(playerid, 0xAA0000AA, "You cannot kidnap two people use /release to let your first victim go");
  73.     if(kidnapped[playerid] != -1)
  74.         return SendClientMessage(playerid, 0xAA0000AA, "You cannot kindap someone while being kidnapped");
  75.        
  76.     //Kidnap the passenger
  77.     TogglePlayerControllable(kidnapeeID, false);
  78.     kidnap[playerid][k_victimID] = kidnapeeID;
  79.     kidnap[playerid][k_ransom] = ransom;
  80.     kidnapped[kidnapeeID] = playerid;
  81.     new msg[128];
  82.     format(msg, sizeof(msg), "You have successfully kidnapped player %d for %d, /release free them or wait for the ransom", kidnapeeID, ransom);
  83.     SendClientMessage(playerid, 0xAAAA00AA, msg);
  84.     format(msg, sizeof(msg), "You have been kidnapped by player %d, for $%d, type /ransom to pay", playerid, ransom);
  85.     SendClientMessage(kidnapeeID, 0xAA0000AA, msg);
  86.     format(msg, sizeof(msg), "Player %d has been kidnapped, type /ransom %d to pay their ransom");
  87.     SendClientMessageToAll(0x00AA00AA, msg);
  88.    
  89.     //release any kidnappers kidnappees
  90.     new subKidnapeeID = kidnap[kidnapeeID][k_victimID];
  91.     if( kidnapeeID != -1)
  92.         CancelVictim(kidnapeeID, subKidnapeeID, "Your kidnapper has been kidnapped, you are free to go");
  93.     return 1;  
  94. }
  95. dcmd_release(playerid, params[]){
  96.     #pragma unused params
  97.     if(kidnap[playerid][k_victimID] != -1)
  98.         return SendClientMessage(playerid, 0xAA0000AA, "You have not kidnapped anyone, so have no one to release");
  99.     CancelVictim(playerid, kidnap[playerid][k_victimID], "Your kidnapper has changed his mind, you are free to go");
  100.     return 1;
  101. }
  102. dcmd_ransom(playerid, params[]){
  103.     new releaseid, kidnapperid, msg[128];
  104.     if(sscanf(params, "d", releaseid))
  105.     {
  106.         kidnapperid = kidnapped[releaseid];
  107.         if(!IsPlayerConnected(playerid))
  108.         {
  109.             format(msg, sizeof(msg), "Player %d is not connected", releaseid);
  110.             return SendClientMessage(playerid, 0xAA0000AA, msg);
  111.         }
  112.         else if(kidnapperid == -1)
  113.         {
  114.             format(msg, sizeof(msg), "Player %d has not been kidnapped! /ransom id, or /ransom to release yourself", releaseid);
  115.             return SendClientMessage(playerid, 0xAA0000AA, msg);
  116.         }
  117.         else if(GetPlayerMoney(playerid) < kidnap[kidnapperid][k_ransom])
  118.         {
  119.             format(msg, sizeof(msg), "You do not have enough money to pay for Player %d's ransom: $%d", releaseid, kidnap[kidnapperid][k_ransom]);
  120.             return SendClientMessage(playerid, 0xAA0000AA, msg);
  121.         }
  122.         GivePlayerMoney(playerid, -kidnap[kidnapperid][k_ransom]);
  123.         GivePlayerMoney(kidnapperid, kidnap[kidnapperid][k_ransom]);
  124.         format(msg, sizeof(msg), "Thank you for paying Player %d's ransom, they have been released");
  125.         SendClientMessage(playerid, 0xAA00AAAA, msg);
  126.         format(msg, sizeof(msg), "Player %d, has paid %d's ransom");
  127.         SendClientMessageToAll(0xAAAAAAAA, msg);
  128.         RemovePlayerFromVehicle(releaseid);
  129.         CancelVictim(kidnapperid, releaseid, "Someone paid your ransom you have been released");
  130.     }
  131.     else if(kidnapped[playerid] != -1)
  132.     {
  133.         if(GetPlayerMoney(playerid) < kidnap[kidnapperid][k_ransom])
  134.         {
  135.             format(msg, sizeof(msg), "You do not have enough money to pay your ransom ransom: $%d", releaseid, kidnap[kidnapperid][k_ransom]);
  136.             return SendClientMessage(playerid, 0xAA0000AA, msg);
  137.         }
  138.         GivePlayerMoney(playerid, -kidnap[kidnapperid][k_ransom]);
  139.         GivePlayerMoney(kidnapperid, kidnap[kidnapperid][k_ransom]);
  140.         format(msg, sizeof(msg), "You have paid your ransom, you are free to go");
  141.         SendClientMessage(playerid, 0xAA00AAAA, msg);
  142.         format(msg, sizeof(msg), "Player %d, has paid their own ransom");
  143.         SendClientMessageToAll(0xAAAAAAAA, msg);
  144.         RemovePlayerFromVehicle(releaseid);
  145.         CancelKidnapper(kidnapperid, releaseid, "Your victim paid their ransom and have been relesed");
  146.     }
  147.     else SendClientMessage(playerid, 0xAA0000AA, "You have not been kidnapped, /release id, to release someone else");
  148.     return 1;
  149. }
  150.  
  151. stock sscanf(string[], format[], {Float,_}:...){
  152.     #if defined isnull
  153.         if (isnull(string))
  154.     #else
  155.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  156.     #endif
  157.         {
  158.             return format[0];
  159.         }
  160.     #pragma tabsize 4
  161.     new
  162.         formatPos = 0,
  163.         stringPos = 0,
  164.         paramPos = 2,
  165.         paramCount = numargs(),
  166.         delim = ' ';
  167.     while (string[stringPos] && string[stringPos] <= ' ')
  168.     {
  169.         stringPos++;
  170.     }
  171.     while (paramPos < paramCount && string[stringPos])
  172.     {
  173.         switch (format[formatPos++])
  174.         {
  175.             case '\0':
  176.             {
  177.                 return 0;
  178.             }
  179.             case 'i', 'd':
  180.             {
  181.                 new
  182.                     neg = 1,
  183.                     num = 0,
  184.                     ch = string[stringPos];
  185.                 if (ch == '-')
  186.                 {
  187.                     neg = -1;
  188.                     ch = string[++stringPos];
  189.                 }
  190.                 do
  191.                 {
  192.                     stringPos++;
  193.                     if ('0' <= ch <= '9')
  194.                     {
  195.                         num = (num * 10) + (ch - '0');
  196.                     }
  197.                     else
  198.                     {
  199.                         return -1;
  200.                     }
  201.                 }
  202.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  203.                 setarg(paramPos, 0, num * neg);
  204.             }
  205.             case 'h', 'x':
  206.             {
  207.                 new
  208.                     num = 0,
  209.                     ch = string[stringPos];
  210.                 do
  211.                 {
  212.                     stringPos++;
  213.                     switch (ch)
  214.                     {
  215.                         case 'x', 'X':
  216.                         {
  217.                             num = 0;
  218.                             continue;
  219.                         }
  220.                         case '0' .. '9':
  221.                         {
  222.                             num = (num << 4) | (ch - '0');
  223.                         }
  224.                         case 'a' .. 'f':
  225.                         {
  226.                             num = (num << 4) | (ch - ('a' - 10));
  227.                         }
  228.                         case 'A' .. 'F':
  229.                         {
  230.                             num = (num << 4) | (ch - ('A' - 10));
  231.                         }
  232.                         default:
  233.                         {
  234.                             return -1;
  235.                         }
  236.                     }
  237.                 }
  238.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  239.                 setarg(paramPos, 0, num);
  240.             }
  241.             case 'c':
  242.             {
  243.                 setarg(paramPos, 0, string[stringPos++]);
  244.             }
  245.             case 'f':
  246.             {
  247.  
  248.                 new changestr[16], changepos = 0, strpos = stringPos;
  249.                 while(changepos < 16 && string[strpos] && string[strpos] != delim)
  250.                 {
  251.                     changestr[changepos++] = string[strpos++];
  252.                     }
  253.                 changestr[changepos] = '\0';
  254.                 setarg(paramPos,0,_:floatstr(changestr));
  255.             }
  256.             case 'p':
  257.             {
  258.                 delim = format[formatPos++];
  259.                 continue;
  260.             }
  261.             case '\'':
  262.             {
  263.                 new
  264.                     end = formatPos - 1,
  265.                     ch;
  266.                 while ((ch = format[++end]) && ch != '\'') {}
  267.                 if (!ch)
  268.                 {
  269.                     return -1;
  270.                 }
  271.                 format[end] = '\0';
  272.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  273.                 {
  274.                     if (format[end + 1])
  275.                     {
  276.                         return -1;
  277.                     }
  278.                     return 0;
  279.                 }
  280.                 format[end] = '\'';
  281.                 stringPos = ch + (end - formatPos);
  282.                 formatPos = end + 1;
  283.             }
  284.             case 'u':
  285.             {
  286.                 new
  287.                     end = stringPos - 1,
  288.                     id = 0,
  289.                     bool:num = true,
  290.                     ch;
  291.                 while ((ch = string[++end]) && ch != delim)
  292.                 {
  293.                     if (num)
  294.                     {
  295.                         if ('0' <= ch <= '9')
  296.                         {
  297.                             id = (id * 10) + (ch - '0');
  298.                         }
  299.                         else
  300.                         {
  301.                             num = false;
  302.                         }
  303.                     }
  304.                 }
  305.                 if (num && IsPlayerConnected(id))
  306.                 {
  307.                     setarg(paramPos, 0, id);
  308.                 }
  309.                 else
  310.                 {
  311.                     #if !defined foreach
  312.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  313.                         #define __SSCANF_FOREACH__
  314.                     #endif
  315.                     string[end] = '\0';
  316.                     num = false;
  317.                     new
  318.                         name[MAX_PLAYER_NAME];
  319.                     id = end - stringPos;
  320.                     foreach (Player, playerid)
  321.                     {
  322.                         GetPlayerName(playerid, name, sizeof (name));
  323.                         if (!strcmp(name, string[stringPos], true, id))
  324.                         {
  325.                             setarg(paramPos, 0, playerid);
  326.                             num = true;
  327.                             break;
  328.                         }
  329.                     }
  330.                     if (!num)
  331.                     {
  332.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  333.                     }
  334.                     string[end] = ch;
  335.                     #if defined __SSCANF_FOREACH__
  336.                         #undef foreach
  337.                         #undef __SSCANF_FOREACH__
  338.                     #endif
  339.                 }
  340.                 stringPos = end;
  341.             }
  342.             case 's', 'z':
  343.             {
  344.                 new
  345.                     i = 0,
  346.                     ch;
  347.                 if (format[formatPos])
  348.                 {
  349.                     while ((ch = string[stringPos++]) && ch != delim)
  350.                     {
  351.                         setarg(paramPos, i++, ch);
  352.                     }
  353.                     if (!i)
  354.                     {
  355.                         return -1;
  356.                     }
  357.                 }
  358.                 else
  359.                 {
  360.                     while ((ch = string[stringPos++]))
  361.                     {
  362.                         setarg(paramPos, i++, ch);
  363.                     }
  364.                 }
  365.                 stringPos--;
  366.                 setarg(paramPos, i, '\0');
  367.             }
  368.             default:
  369.             {
  370.                 continue;
  371.             }
  372.         }
  373.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  374.         {
  375.             stringPos++;
  376.         }
  377.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  378.         {
  379.             stringPos++;
  380.         }
  381.         paramPos++;
  382.     }
  383.     do
  384.     {
  385.         if ((delim = format[formatPos++]) > ' ')
  386.         {
  387.             if (delim == '\'')
  388.             {
  389.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  390.             }
  391.             else if (delim != 'z')
  392.             {
  393.                 return delim;
  394.             }
  395.         }
  396.     }
  397.     while (delim > ' ');
  398.     return 0;
  399. }
  400.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement