Advertisement
Guest User

Hit Market

a guest
Jul 23rd, 2016
653
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 25.66 KB | None | 0 0
  1. #define     FILTERSCRIPT
  2. #include    <a_samp>
  3. #include    <a_mysql>   // by BlueG & maddinat0r - http://forum.sa-mp.com/showthread.php?t=56564
  4. #include    <a_zones>   // by Cueball - http://forum.sa-mp.com/showthread.php?t=27598
  5. #include    <izcmd>     // by Yashas - http://forum.sa-mp.com/showthread.php?t=576114
  6.  
  7. enum    _:E_DIALOGS
  8. {
  9.     DIALOG_HITMARKET_MENU = 1420,
  10.     DIALOG_HITMARKET_PLACE_1,
  11.     DIALOG_HITMARKET_PLACE_2,
  12.     DIALOG_HITMARKET_ACTIVE_MENU,
  13.     DIALOG_HITMARKET_ACTIVE_LIST,
  14.     DIALOG_HITMARKET_TARGET,
  15.     DIALOG_HITMARKET_MY_HITS,
  16.     DIALOG_HITMARKET_CLAIM,
  17.     DIALOG_HITMARKET_STATS
  18. }
  19.  
  20. enum    E_HMPLAYER
  21. {
  22.     timesTargeted,
  23.     placedHits,
  24.     moneySpent,
  25.     claimedBounties,
  26.     claimedBountyAmount,
  27.     // temp
  28.     bool: hasBounty
  29. }
  30.  
  31. enum    E_PAYPHONE
  32. {
  33.     Float: phoneX, // can
  34.     Float: phoneY, // you
  35.     Float: phoneZ, // hear
  36.     Text3D: phoneLabel // me?
  37. }
  38.  
  39. new
  40.     marketSQLHandle = -1,
  41.     PurgeTimer = -1;
  42.    
  43. new
  44.     BountyData[MAX_PLAYERS][E_HMPLAYER],
  45.     SortMode[MAX_PLAYERS],
  46.     ListPage[MAX_PLAYERS];
  47.  
  48. new
  49.     PhoneData[][E_PAYPHONE] = {
  50.         {-1661.5938, 1398.0938, 6.8828},
  51.         {-1689.1172, 1359.5469, 6.8828},
  52.         {-1696.6875, 1334.4766, 6.8828},
  53.         {-1964.1406, 162.8672, 27.3516},
  54.         {-1965.2109, 162.8672, 27.3516},
  55.         {-1966.2812, 162.8672, 27.3516},
  56.         {-1967.3594, 162.8672, 27.3516},
  57.         {-2419.3516, 718.2109, 34.8594},
  58.         {1709.9922, -1604.9141, 13.2266},
  59.         {1711.3438, -1606.0391, 13.2266},
  60.         {1721.6719, -1720.3906, 13.2266},
  61.         {1721.6719, -1721.2891, 13.2266},
  62.         {1722.6094, -1720.3906, 13.2266},
  63.         {1722.6094, -1721.2891, 13.2266},
  64.         {1805.4062, -1600.4609, 13.2266},
  65.         {1806.3906, -1599.6172, 13.2266},
  66.         {1807.3828, -1598.7812, 13.2266},
  67.         {1808.3750, -1597.9219, 13.2266},
  68.         {1809.3438, -1597.0859, 13.2266},
  69.         {2068.9375, -1767.8359, 13.2109},
  70.         {2069.0000, -1766.6641, 13.2109},
  71.         {2165.9219, -1154.9609, 24.4141},
  72.         {2165.9219, -1155.8047, 24.4141},
  73.         {2257.6562, -1211.1875, 23.6797},
  74.         {2259.2031, -1211.2109, 23.6797},
  75.         {2279.2578, 2524.9844, 10.5391},
  76.         {2279.2578, 2526.7344, 10.5391},
  77.         {2279.2578, 2528.5547, 10.5391},
  78.         {278.5547, -1630.6719, 32.9297},
  79.         {279.1875, -1630.7812, 32.9297},
  80.         {295.1641, -1573.0625, 33.1562},
  81.         {296.7578, -1573.2969, 33.1562},
  82.         {302.0859, -1593.2031, 32.5156},
  83.         {303.0312, -1593.3125, 32.5156},
  84.         {355.8047, -1364.9531, 14.1641},
  85.         {356.3828, -1364.6797, 14.1641},
  86.         {379.1094, -1717.0469, 23.0391},
  87.         {379.1094, -1717.9141, 22.7734},
  88.         {638.0312, -1228.0234, 17.8203},
  89.         {638.0312, -1228.6641, 17.7891},
  90.         {339.1875, -1398.0469, 14.2266},
  91.         {523.1562, -1516.4219, 14.3438},
  92.         {523.1562, -1525.6172, 14.3438}
  93.     };
  94.  
  95. ReturnPlayerName(playerid)
  96. {
  97.     new name[MAX_PLAYER_NAME];
  98.     GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  99.     return name;
  100. }
  101.  
  102. GetPlayerID(name[])
  103. {
  104.     new id = -1;
  105.     for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
  106.     {
  107.         if(!IsPlayerConnected(i)) continue;
  108.         if(!strcmp(ReturnPlayerName(i), name))
  109.         {
  110.             id = i;
  111.             break;
  112.         }
  113.     }
  114.    
  115.     return id;
  116. }
  117.  
  118. formatInt(intVariable, iThousandSeparator = ',', iCurrencyChar = '$')
  119. {
  120.     /*
  121.         By Kar
  122.         https://gist.github.com/Kar2k/bfb0eafb2caf71a1237b349684e091b9/8849dad7baa863afb1048f40badd103567c005a5#file-formatint-function
  123.     */
  124.     static
  125.         s_szReturn[ 32 ],
  126.         s_szThousandSeparator[ 2 ] = { ' ', EOS },
  127.         s_szCurrencyChar[ 2 ] = { ' ', EOS },
  128.         s_iVariableLen,
  129.         s_iChar,
  130.         s_iSepPos,
  131.         bool:s_isNegative
  132.     ;
  133.  
  134.     format( s_szReturn, sizeof( s_szReturn ), "%d", intVariable );
  135.  
  136.     if(s_szReturn[0] == '-')
  137.         s_isNegative = true;
  138.     else
  139.         s_isNegative = false;
  140.  
  141.     s_iVariableLen = strlen( s_szReturn );
  142.  
  143.     if ( s_iVariableLen >= 4 && iThousandSeparator)
  144.     {
  145.         s_szThousandSeparator[ 0 ] = iThousandSeparator;
  146.  
  147.         s_iChar = s_iVariableLen;
  148.         s_iSepPos = 0;
  149.  
  150.         while ( --s_iChar > _:s_isNegative )
  151.         {
  152.             if ( ++s_iSepPos == 3 )
  153.             {
  154.                 strins( s_szReturn, s_szThousandSeparator, s_iChar );
  155.  
  156.                 s_iSepPos = 0;
  157.             }
  158.         }
  159.     }
  160.     if(iCurrencyChar) {
  161.         s_szCurrencyChar[ 0 ] = iCurrencyChar;
  162.         strins( s_szReturn, s_szCurrencyChar, _:s_isNegative );
  163.     }
  164.     return s_szReturn;
  165. }
  166.  
  167. formatTime(seconds)
  168. {
  169.     new string[32], days = floatround((seconds % 2592000) / 86400, floatround_floor);
  170.     if(seconds < 0)
  171.     {
  172.         format(string, sizeof(string), "Expired");
  173.         return string;
  174.     }
  175.    
  176.     if(days > 0) {
  177.         format(string, sizeof(string), "%dd %02dh %02dm %02ds", days, floatround((seconds % 86400) / 3600, floatround_floor), floatround((seconds % 3600) / 60, floatround_floor), seconds % 60);
  178.     }else{
  179.         format(string, sizeof(string), "%02dh %02dm %02ds", floatround((seconds % 86400) / 3600, floatround_floor), floatround((seconds % 3600) / 60, floatround_floor), seconds % 60);
  180.     }
  181.    
  182.     return string;
  183. }
  184.  
  185. IsPlayerNearAPayphone(playerid)
  186. {
  187.     for(new i; i < sizeof(PhoneData); i++)
  188.     {
  189.         if(IsPlayerInRangeOfPoint(playerid, 3.5, PhoneData[i][phoneX], PhoneData[i][phoneY], PhoneData[i][phoneZ])) return 1;
  190.     }
  191.    
  192.     return 0;
  193. }
  194.  
  195. ShowHitMarketMenu(playerid)
  196. {
  197.     ListPage[playerid] = 0;
  198.    
  199.     new string[128];
  200.     format(string, sizeof(string), "Hello, %s.\n» Place Hit\n» Active Hits {F1C40F}(%d)\n» My Hits {F1C40F}(%d)\n» Claim Rewards {F1C40F}(%d)\n» My Stats", ReturnPlayerName(playerid), Hitmarket_ActiveHits(), Hitmarket_ActiveHits(playerid), Hitmarket_RewardCount(playerid));
  201.     ShowPlayerDialog(playerid, DIALOG_HITMARKET_MENU, DIALOG_STYLE_TABLIST_HEADERS, "Hit Market", string, "Select", "Close");
  202.     return 1;
  203. }
  204.  
  205. ShowHitStats(playerid)
  206. {
  207.     new string[128];
  208.     format(string, sizeof(string), "Times Targeted\t%s\nHits Placed\t%s {2ECC71}(%s)\nClaims\t%s {2ECC71}(%s)", formatInt(BountyData[playerid][timesTargeted], .iCurrencyChar = '\0'), formatInt(BountyData[playerid][placedHits], .iCurrencyChar = '\0'), formatInt(BountyData[playerid][moneySpent]), formatInt(BountyData[playerid][claimedBounties], .iCurrencyChar = '\0'), formatInt(BountyData[playerid][claimedBountyAmount]));
  209.     ShowPlayerDialog(playerid, DIALOG_HITMARKET_STATS, DIALOG_STYLE_TABLIST, "Hit Market » {FFFFFF}Stats", string, "Select", "Back");
  210.     return 1;
  211. }
  212.  
  213. ShowClaimList(playerid)
  214. {
  215.     new Cache: claim_query, query[196];
  216.     mysql_format(marketSQLHandle, query, sizeof(query), "SELECT Target, Bounty, FROM_UNIXTIME(CompletedOn, '%%d/%%m/%%Y %%H:%%i') as CompDate FROM hm_hits WHERE CompletedBy='%e' && Status=1 ORDER BY CompletedOn DESC LIMIT %d, 10", ReturnPlayerName(playerid), ListPage[playerid] * 10);
  217.     claim_query = mysql_query(marketSQLHandle, query);
  218.     new rows = cache_num_rows(), show;
  219.  
  220.     if(rows) {
  221.         new target[MAX_PLAYER_NAME], date[20], string[1024];
  222.         format(string, sizeof(string), "Target\tBounty\tCompleted On\n");
  223.  
  224.         for(new i; i < rows; i++)
  225.         {
  226.             cache_get_field_content(i, "Target", target);
  227.             cache_get_field_content(i, "CompDate", date);
  228.             format(string, sizeof(string), "%s%s\t{2ECC71}%s\t%s\n", string, target, formatInt(cache_get_field_content_int(i, "Bounty")), date);
  229.         }
  230.  
  231.         new title[48];
  232.         format(title, sizeof(title), "Hit Market » {FFFFFF}Claim Rewards (Page %d)", ListPage[playerid] + 1);
  233.         format(string, sizeof(string), "%s\n \n« Previous Page\nNext Page »", string);
  234.        
  235.         SetPVarInt(playerid, "hitmarket_ListCount", rows);
  236.         ShowPlayerDialog(playerid, DIALOG_HITMARKET_CLAIM, DIALOG_STYLE_TABLIST_HEADERS, title, string, "Claim", "Back");
  237.     }else{
  238.         SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}No completed hits found.");
  239.         show = 1;
  240.     }
  241.  
  242.     cache_delete(claim_query);
  243.     if(show) ShowHitMarketMenu(playerid);
  244.     return 1;
  245. }
  246.  
  247. ShowActiveHits(playerid)
  248. {
  249.     new Cache: active_query, query[196];
  250.     mysql_format(marketSQLHandle, query, sizeof(query), "SELECT Target, Bounty, PlacedOn FROM hm_hits WHERE Status=0 ORDER BY %s DESC LIMIT %d, 10", (SortMode[playerid] == 0) ? ("Bounty") : ("PlacedOn"), ListPage[playerid] * 10);
  251.     active_query = mysql_query(marketSQLHandle, query);
  252.     new rows = cache_num_rows(), show;
  253.  
  254.     if(rows) {
  255.         new placed_on, target[MAX_PLAYER_NAME], string[1024];
  256.         format(string, sizeof(string), "Target\tBounty\tTime Left\n");
  257.  
  258.         for(new i; i < rows; i++)
  259.         {
  260.             cache_get_field_content(i, "Target", target);
  261.             placed_on = cache_get_field_content_int(i, "PlacedOn");
  262.             format(string, sizeof(string), "%s%s\t{2ECC71}%s\t%s\n", string, target, formatInt(cache_get_field_content_int(i, "Bounty")), formatTime(placed_on + (86400 * 7) - gettime()));
  263.         }
  264.  
  265.         new title[48];
  266.         format(title, sizeof(title), "Hit Market » {FFFFFF}Active Hits (Page %d)", ListPage[playerid] + 1);
  267.         format(string, sizeof(string), "%s\n \n« Previous Page\nNext Page »", string);
  268.  
  269.         SetPVarInt(playerid, "hitmarket_ListCount", rows);
  270.         ShowPlayerDialog(playerid, DIALOG_HITMARKET_ACTIVE_LIST, DIALOG_STYLE_TABLIST_HEADERS, title, string, "Details", "Back");
  271.     }else{
  272.         SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}No active hits found.");
  273.         show = 1;
  274.     }
  275.  
  276.     cache_delete(active_query);
  277.     if(show) ShowHitMarketMenu(playerid);
  278.     return 1;
  279. }
  280.  
  281. ShowHitList(playerid)
  282. {
  283.     new Cache: list_query, query[196];
  284.     mysql_format(marketSQLHandle, query, sizeof(query), "SELECT Target, Bounty, PlacedOn FROM hm_hits WHERE PlacedBy='%e' && Status=0 ORDER BY PlacedOn DESC LIMIT %d, 10", ReturnPlayerName(playerid), ListPage[playerid] * 10);
  285.     list_query = mysql_query(marketSQLHandle, query);
  286.     new rows = cache_num_rows(), show;
  287.  
  288.     if(rows) {
  289.         new placed_on, target[MAX_PLAYER_NAME], string[1024];
  290.         format(string, sizeof(string), "Target\tBounty\tTime Left\n");
  291.  
  292.         for(new i; i < rows; i++)
  293.         {
  294.             cache_get_field_content(i, "Target", target);
  295.             placed_on = cache_get_field_content_int(i, "PlacedOn");
  296.             format(string, sizeof(string), "%s%s\t{2ECC71}%s\t%s\n", string, target, formatInt(cache_get_field_content_int(i, "Bounty")), formatTime(placed_on + (86400 * 7) - gettime()));
  297.         }
  298.  
  299.         new title[48];
  300.         format(title, sizeof(title), "Hit Market » {FFFFFF}My Hits (Page %d)", ListPage[playerid] + 1);
  301.         format(string, sizeof(string), "%s\n \n« Previous Page\nNext Page »", string);
  302.  
  303.         SetPVarInt(playerid, "hitmarket_ListCount", rows);
  304.         ShowPlayerDialog(playerid, DIALOG_HITMARKET_MY_HITS, DIALOG_STYLE_TABLIST_HEADERS, title, string, "Cancel", "Back");
  305.     }else{
  306.         SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}No hits found.");
  307.         show = 1;
  308.     }
  309.  
  310.     cache_delete(list_query);
  311.     if(show) ShowHitMarketMenu(playerid);
  312.     return 1;
  313. }
  314.  
  315. Hitmarket_PlayerInit(playerid)
  316. {
  317.     new reset_enum[E_HMPLAYER];
  318.     BountyData[playerid] = reset_enum;
  319.     SortMode[playerid] = ListPage[playerid] = 0;
  320.    
  321.     new query[72];
  322.     mysql_format(marketSQLHandle, query, sizeof(query), "SELECT * FROM hm_players WHERE Player='%e'", ReturnPlayerName(playerid));
  323.     mysql_tquery(marketSQLHandle, query, "Hitmarket_LoadPlayerData", "i", playerid);
  324.     return 1;
  325. }
  326.  
  327. Hitmarket_ActiveHits(playerid = -1)
  328. {
  329.     new query[96], hit_count = 0, Cache: count_query;
  330.     if(playerid == -1) {
  331.         mysql_format(marketSQLHandle, query, sizeof(query), "SELECT null FROM hm_hits WHERE Status=0");
  332.     }else{
  333.         mysql_format(marketSQLHandle, query, sizeof(query), "SELECT null FROM hm_hits WHERE PlacedBy='%e' && Status=0", ReturnPlayerName(playerid));
  334.     }
  335.  
  336.     count_query = mysql_query(marketSQLHandle, query);
  337.     hit_count = cache_num_rows();
  338.     cache_delete(count_query);
  339.     return hit_count;
  340. }
  341.  
  342. Hitmarket_RewardCount(playerid)
  343. {
  344.     new query[96], count = 0, Cache: count_query;
  345.     mysql_format(marketSQLHandle, query, sizeof(query), "SELECT null FROM hm_hits WHERE CompletedBy='%e' && Status=1", ReturnPlayerName(playerid));
  346.     count_query = mysql_query(marketSQLHandle, query);
  347.     count = cache_num_rows();
  348.     cache_delete(count_query);
  349.     return count;
  350. }
  351.  
  352. Hitmarket_ValidName(name[])
  353. {
  354.     new query[72], count = 0, Cache: count_query;
  355.     mysql_format(marketSQLHandle, query, sizeof(query), "SELECT null FROM hm_players WHERE Player='%e'", name);
  356.     count_query = mysql_query(marketSQLHandle, query);
  357.     count = cache_num_rows();
  358.     cache_delete(count_query);
  359.     return count;
  360. }
  361.  
  362. forward Hitmarket_LoadPlayerData(playerid);
  363. public Hitmarket_LoadPlayerData(playerid)
  364. {
  365.     new query[80];
  366.    
  367.     if(cache_num_rows() > 0) {
  368.         BountyData[playerid][timesTargeted] = cache_get_field_content_int(0, "TimesTargeted");
  369.         BountyData[playerid][placedHits] = cache_get_field_content_int(0, "HitsPlaced");
  370.         BountyData[playerid][moneySpent] = cache_get_field_content_int(0, "HitsPlacedAmount");
  371.         BountyData[playerid][claimedBounties] = cache_get_field_content_int(0, "Claimed");
  372.         BountyData[playerid][claimedBountyAmount] = cache_get_field_content_int(0, "ClaimedAmount");
  373.        
  374.         mysql_format(marketSQLHandle, query, sizeof(query), "SELECT null FROM hm_hits WHERE Target='%e' && Status=0", ReturnPlayerName(playerid));
  375.         mysql_tquery(marketSQLHandle, query, "Hitmarket_HasBounty", "i", playerid);
  376.     }else{
  377.         mysql_format(marketSQLHandle, query, sizeof(query), "INSERT INTO hm_players SET Player='%e'", ReturnPlayerName(playerid));
  378.         mysql_tquery(marketSQLHandle, query);
  379.     }
  380.    
  381.     return 1;
  382. }
  383.  
  384. forward Hitmarket_HasBounty(playerid);
  385. public Hitmarket_HasBounty(playerid)
  386. {
  387.     BountyData[playerid][hasBounty] = !!cache_num_rows();
  388.     return 1;
  389. }
  390.  
  391. forward PurgeExpiredHits();
  392. public PurgeExpiredHits()
  393. {
  394.     mysql_tquery(marketSQLHandle, "DELETE FROM hm_hits WHERE PlacedOn + (86400 * 7) < UNIX_TIMESTAMP()");
  395.     return 1;
  396. }
  397.  
  398. public OnFilterScriptInit()
  399. {
  400.     // set payphone label ids to -1
  401.     for(new i; i < sizeof(PhoneData); i++) PhoneData[i][phoneLabel] = Text3D: -1;
  402.    
  403.     // mysql connection
  404.     marketSQLHandle = mysql_connect("host", "user", "dbase", "password");
  405.     if(mysql_errno()) return printf("[Hit Market] Can't connect to the MySQL Database. (Error #%d)", mysql_errno());
  406.    
  407.     // create tables if they dont exist
  408.     mysql_tquery(marketSQLHandle, "CREATE TABLE `hm_players` (\
  409.       `ID` int(11) NOT NULL AUTO_INCREMENT,\
  410.       `Player` varchar(24) NOT NULL,\
  411.       `TimesTargeted` int(11) NOT NULL,\
  412.       `HitsPlaced` int(11) NOT NULL,\
  413.       `HitsPlacedAmount` int(11) NOT NULL,\
  414.       `Claimed` int(11) NOT NULL,\
  415.       `ClaimedAmount` int(11) NOT NULL,\
  416.       PRIMARY KEY (`ID`)\
  417.     ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
  418.    
  419.     mysql_tquery(marketSQLHandle, "CREATE TABLE `hm_hits` (\
  420.       `Target` varchar(24) NOT NULL,\
  421.       `Bounty` int(11) NOT NULL,\
  422.       `PlacedBy` varchar(24) NOT NULL,\
  423.       `PlacedOn` int(11) NOT NULL,\
  424.       `CompletedBy` varchar(24) NOT NULL,\
  425.       `CompletedOn` int(11) NOT NULL,\
  426.       `Status` tinyint(1) NOT NULL,\
  427.       PRIMARY KEY (`Target`)\
  428.     ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
  429.    
  430.     // set purge timer
  431.     PurgeTimer = SetTimer("PurgeExpiredHits", 180000, true);
  432.     PurgeExpiredHits();
  433.    
  434.     // init connected players
  435.     for(new i, maxp = GetPlayerPoolSize(); i <= maxp; i++)
  436.     {
  437.         if(IsPlayerConnected(i)) Hitmarket_PlayerInit(i);
  438.     }
  439.    
  440.     // create payphone labels
  441.     for(new i; i < sizeof(PhoneData); i++) PhoneData[i][phoneLabel] = Create3DTextLabel("/hitmarket", 0x27AE60FF, PhoneData[i][phoneX], PhoneData[i][phoneY], PhoneData[i][phoneZ] + 1.5, 5.0, 0, 1);
  442.     return 1;
  443. }
  444.  
  445. public OnFilterScriptExit()
  446. {
  447.     // remove payphone labels
  448.     for(new i; i < sizeof(PhoneData); i++) if(PhoneData[i][phoneLabel] != Text3D: -1) Delete3DTextLabel(PhoneData[i][phoneLabel]);
  449.    
  450.     // kill purge timer
  451.     KillTimer(PurgeTimer);
  452.    
  453.     // close mysql connection
  454.     mysql_close(marketSQLHandle);
  455.     return 1;
  456. }
  457.  
  458. public OnPlayerConnect(playerid)
  459. {
  460.     Hitmarket_PlayerInit(playerid);
  461.     return 1;
  462. }
  463.  
  464. public OnPlayerDeath(playerid, killerid, reason)
  465. {
  466.     if(IsPlayerConnected(killerid) && BountyData[playerid][hasBounty])
  467.     {
  468.         BountyData[playerid][timesTargeted]++;
  469.         BountyData[playerid][hasBounty] = false;
  470.        
  471.         new query[140];
  472.         mysql_format(marketSQLHandle, query, sizeof(query), "UPDATE hm_hits SET CompletedOn=UNIX_TIMESTAMP(), CompletedBy='%e', Status=1 WHERE Target='%e'", ReturnPlayerName(killerid), ReturnPlayerName(playerid));
  473.         mysql_tquery(marketSQLHandle, query);
  474.        
  475.         mysql_format(marketSQLHandle, query, sizeof(query), "UPDATE hm_players SET TimesTargeted=%d WHERE Player='%e'", BountyData[playerid][timesTargeted], ReturnPlayerName(playerid));
  476.         mysql_tquery(marketSQLHandle, query);
  477.        
  478.         SendClientMessage(killerid, 0x27AE60FF, "[HIT MARKET] {FFFFFF}The person you killed had a hit, find a payphone to claim your reward.");
  479.     }
  480.    
  481.     return 1;
  482. }
  483.  
  484. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  485. {
  486.     switch(dialogid)
  487.     {
  488.         case DIALOG_HITMARKET_MENU:
  489.         {
  490.             if(!response) return 1;
  491.             if(listitem == 0) ShowPlayerDialog(playerid, DIALOG_HITMARKET_PLACE_1, DIALOG_STYLE_INPUT, "Hit Market » {FFFFFF}Place Hit (Step 1)", "Write the target's name:", "Next", "Back");
  492.  
  493.             if(listitem == 1)
  494.             {
  495.                 if(Hitmarket_ActiveHits() == 0)
  496.                 {
  497.                     SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}No active hits found.");
  498.                     return ShowHitMarketMenu(playerid);
  499.                 }
  500.  
  501.                 ShowPlayerDialog(playerid, DIALOG_HITMARKET_ACTIVE_MENU, DIALOG_STYLE_LIST, "Hit Market » {FFFFFF}Active Hits", "Sort By Bounty\nSort By Placement Date", "Select", "Back");
  502.             }
  503.  
  504.             if(listitem == 2)
  505.             {
  506.                 ListPage[playerid] = 0;
  507.                 ShowHitList(playerid);
  508.             }
  509.  
  510.             if(listitem == 3)
  511.             {
  512.                 ListPage[playerid] = 0;
  513.                 ShowClaimList(playerid);
  514.             }
  515.  
  516.             if(listitem == 4) ShowHitStats(playerid);
  517.             return 1;
  518.         }
  519.  
  520.         case DIALOG_HITMARKET_PLACE_1:
  521.         {
  522.             if(!response) return ShowHitMarketMenu(playerid);
  523.             if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_HITMARKET_PLACE_1, DIALOG_STYLE_INPUT, "Hit Market » {FFFFFF}Place Hit (Step 1)", "{E74C3C}Input can't be empty.\n\n{FFFFFF}Write the target's name:", "Next", "Back");
  524.             if(!strcmp(inputtext, ReturnPlayerName(playerid))) return ShowPlayerDialog(playerid, DIALOG_HITMARKET_PLACE_1, DIALOG_STYLE_INPUT, "Hit Market » {FFFFFF}Place Hit (Step 1)", "{E74C3C}You can't place a hit on yourself.\n\n{FFFFFF}Write the target's name:", "Next", "Back");
  525.             if(!Hitmarket_ValidName(inputtext)) return ShowPlayerDialog(playerid, DIALOG_HITMARKET_PLACE_1, DIALOG_STYLE_INPUT, "Hit Market » {FFFFFF}Place Hit (Step 1)", "{E74C3C}Name doesn't exist on our database.\n\n{FFFFFF}Write the target's name:", "Next", "Back");
  526.             SetPVarString(playerid, "hitmarket_TargetName", inputtext);
  527.             ShowPlayerDialog(playerid, DIALOG_HITMARKET_PLACE_2, DIALOG_STYLE_INPUT, "Hit Market » {FFFFFF}Place Hit (Step 2)", "Write the amount you want to place on target's head:", "Done", "Back");
  528.             return 1;
  529.         }
  530.  
  531.         case DIALOG_HITMARKET_PLACE_2:
  532.         {
  533.             if(!response) return ShowPlayerDialog(playerid, DIALOG_HITMARKET_PLACE_1, DIALOG_STYLE_INPUT, "Hit Market » {FFFFFF}Place Hit (Step 1)", "Write the target's name:", "Next", "Back");
  534.             new amount = strval(inputtext);
  535.             if(!(5000 <= amount <= 5000000)) return ShowPlayerDialog(playerid, DIALOG_HITMARKET_PLACE_2, DIALOG_STYLE_INPUT, "Hit Market » {FFFFFF}Place Hit (Step 2)", "{E74C3C}Amount must be between $5,000 - $5,000,000.\n\n{FFFFFF}Write the amount you want to place on target's head:", "Done", "Back");
  536.             if(amount > GetPlayerMoney(playerid))  return ShowPlayerDialog(playerid, DIALOG_HITMARKET_PLACE_2, DIALOG_STYLE_INPUT, "Hit Market » {FFFFFF}Place Hit (Step 2)", "{E74C3C}You don't have enough money.\n\n{FFFFFF}Write the amount you want to place on target's head:", "Done", "Back");
  537.             new name[MAX_PLAYER_NAME], query[256];
  538.             GetPVarString(playerid, "hitmarket_TargetName", name, MAX_PLAYER_NAME);
  539.             BountyData[playerid][placedHits]++;
  540.             BountyData[playerid][moneySpent] += amount;
  541.  
  542.             mysql_format(marketSQLHandle, query, sizeof(query), "INSERT INTO hm_hits SET Target='%e', Bounty=%d, PlacedBy='%e', PlacedOn=UNIX_TIMESTAMP() ON DUPLICATE KEY UPDATE Bounty=Bounty+%d", name, amount, ReturnPlayerName(playerid), amount);
  543.             mysql_tquery(marketSQLHandle, query);
  544.  
  545.             mysql_format(marketSQLHandle, query, sizeof(query), "UPDATE hm_players SET HitsPlaced=%d, HitsPlacedAmount=%d WHERE Player='%e'", BountyData[playerid][placedHits], BountyData[playerid][moneySpent], ReturnPlayerName(playerid));
  546.             mysql_tquery(marketSQLHandle, query);
  547.  
  548.             new target_id = GetPlayerID(name);
  549.             if(IsPlayerConnected(target_id)) BountyData[target_id][hasBounty] = true;
  550.  
  551.             SendClientMessage(playerid, 0x27AE60FF, "[HIT MARKET] {FFFFFF}Hit placed.");
  552.             GivePlayerMoney(playerid, -amount);
  553.             return 1;
  554.         }
  555.  
  556.         case DIALOG_HITMARKET_ACTIVE_MENU:
  557.         {
  558.             if(!response) return ShowHitMarketMenu(playerid);
  559.             SortMode[playerid] = listitem;
  560.             ListPage[playerid] = 0;
  561.             ShowActiveHits(playerid);
  562.             return 1;
  563.         }
  564.  
  565.         case DIALOG_HITMARKET_ACTIVE_LIST:
  566.         {
  567.             if(!response) return ShowHitMarketMenu(playerid);
  568.             new emptyindex = GetPVarInt(playerid, "hitmarket_ListCount");
  569.  
  570.             if(listitem == emptyindex) {
  571.                 ShowActiveHits(playerid);
  572.             }else if(listitem == emptyindex + 1) {
  573.                 ListPage[playerid]--;
  574.                 if(ListPage[playerid] < 0) ListPage[playerid] = 0;
  575.                 ShowActiveHits(playerid);
  576.             }else if(listitem == emptyindex + 2) {
  577.                 ListPage[playerid]++;
  578.                 ShowActiveHits(playerid);
  579.             }else{
  580.                 new query[172], Cache: hit_query;
  581.                 mysql_format(marketSQLHandle, query, sizeof(query), "SELECT Bounty, PlacedOn, FROM_UNIXTIME(PlacedOn, '%%d/%%m/%%Y %%H:%%i:%%s') AS PlaceDate FROM hm_hits WHERE Target='%e' && Status=0", inputtext);
  582.                 hit_query = mysql_query(marketSQLHandle, query);
  583.  
  584.                 if(cache_num_rows()) {
  585.                     new string[384], last_loc[MAX_ZONE_NAME], placeint, placedate[20];
  586.                     placeint = cache_get_field_content_int(0, "PlacedOn");
  587.                     cache_get_field_content(0, "PlaceDate", placedate);
  588.  
  589.                     new id = GetPlayerID(inputtext);
  590.                     if(!IsPlayerConnected(id)) {
  591.                         format(last_loc, sizeof(last_loc), "Unknown");
  592.                     }else{
  593.                         GetPlayer3DZone(id, last_loc, MAX_ZONE_NAME);
  594.                     }
  595.  
  596.                     format(string, sizeof(string), "{FFFFFF}Target: {F1C40F}%s\n{FFFFFF}Last Location: {F1C40F}%s\n{FFFFFF}Bounty: {2ECC71}%s\n\n{FFFFFF}Hit Placed On: {F1C40F}%s\n{FFFFFF}Time Left: {F1C40F}%s", inputtext, last_loc, formatInt(cache_get_field_content_int(0, "Bounty")), placedate, formatTime(placeint + (86400 * 7) - gettime()));
  597.                     ShowPlayerDialog(playerid, DIALOG_HITMARKET_TARGET, DIALOG_STYLE_MSGBOX, "Hit Market » {FFFFFF}Target Info", string, "Back", "");
  598.                 }else{
  599.                     SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid hit.");
  600.                 }
  601.  
  602.                 cache_delete(hit_query);
  603.             }
  604.  
  605.             return 1;
  606.         }
  607.  
  608.         case DIALOG_HITMARKET_TARGET:
  609.         {
  610.             ShowActiveHits(playerid);
  611.             return 1;
  612.         }
  613.  
  614.         case DIALOG_HITMARKET_MY_HITS:
  615.         {
  616.             if(!response) return ShowHitMarketMenu(playerid);
  617.             new emptyindex = GetPVarInt(playerid, "hitmarket_ListCount");
  618.  
  619.             if(listitem == emptyindex) {
  620.                 ShowHitList(playerid);
  621.             }else if(listitem == emptyindex + 1) {
  622.                 ListPage[playerid]--;
  623.                 if(ListPage[playerid] < 0) ListPage[playerid] = 0;
  624.                 ShowHitList(playerid);
  625.             }else if(listitem == emptyindex + 2) {
  626.                 ListPage[playerid]++;
  627.                 ShowHitList(playerid);
  628.             }else{
  629.                 new query[96];
  630.                 mysql_format(marketSQLHandle, query, sizeof(query), "DELETE FROM hm_hits WHERE Target='%e' && PlacedBy='%e' && Status=0", inputtext, ReturnPlayerName(playerid));
  631.                 mysql_tquery(marketSQLHandle, query);
  632.  
  633.                 format(query, sizeof(query), "[HIT MARKET] {FFFFFF}Hit on {F1C40F}%s {FFFFFF}cancelled.", inputtext);
  634.                 SendClientMessage(playerid, 0x27AE60FF, query);
  635.             }
  636.  
  637.             return 1;
  638.         }
  639.  
  640.         case DIALOG_HITMARKET_CLAIM:
  641.         {
  642.             if(!response) return ShowHitMarketMenu(playerid);
  643.             new emptyindex = GetPVarInt(playerid, "hitmarket_ListCount");
  644.  
  645.             if(listitem == emptyindex) {
  646.                 ShowClaimList(playerid);
  647.             }else if(listitem == emptyindex + 1) {
  648.                 ListPage[playerid]--;
  649.                 if(ListPage[playerid] < 0) ListPage[playerid] = 0;
  650.                 ShowClaimList(playerid);
  651.             }else if(listitem == emptyindex + 2) {
  652.                 ListPage[playerid]++;
  653.                 ShowClaimList(playerid);
  654.             }else{
  655.                 new query[128], Cache: claim_query;
  656.                 mysql_format(marketSQLHandle, query, sizeof(query), "SELECT Bounty FROM hm_hits WHERE Target='%e' && CompletedBy='%e' && Status=1", inputtext, ReturnPlayerName(playerid));
  657.                 claim_query = mysql_query(marketSQLHandle, query);
  658.  
  659.                 if(cache_num_rows()) {
  660.                     new money = cache_get_field_content_int(0, "Bounty"), string[128];
  661.                     GivePlayerMoney(playerid, money);
  662.  
  663.                     mysql_format(marketSQLHandle, query, sizeof(query), "DELETE FROM hm_hits WHERE Target='%e' && CompletedBy='%e' && Status=1", inputtext, ReturnPlayerName(playerid));
  664.                     mysql_tquery(marketSQLHandle, query);
  665.  
  666.                     format(string, sizeof(string), "[HIT MARKET] {FFFFFF}Hit on {F1C40F}%s {FFFFFF}completed for {2ECC71}%s.", inputtext, formatInt(money));
  667.                     SendClientMessage(playerid, 0x27AE60FF, string);
  668.  
  669.                     BountyData[playerid][claimedBounties]++;
  670.                     BountyData[playerid][claimedBountyAmount] += money;
  671.  
  672.                     mysql_format(marketSQLHandle, query, sizeof(query), "UPDATE hm_players SET Claimed=%d, ClaimedAmount=%d WHERE Player='%e'", BountyData[playerid][claimedBounties], BountyData[playerid][claimedBountyAmount], ReturnPlayerName(playerid));
  673.                     mysql_tquery(marketSQLHandle, query);
  674.                 }else{
  675.                     SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid claim.");
  676.                 }
  677.  
  678.                 cache_delete(claim_query);
  679.             }
  680.  
  681.             return 1;
  682.         }
  683.  
  684.         case DIALOG_HITMARKET_STATS:
  685.         {
  686.             if(!response) return ShowHitMarketMenu(playerid);
  687.             ShowHitStats(playerid);
  688.             return 1;
  689.         }
  690.     }
  691.    
  692.     return 0;
  693. }
  694.  
  695. CMD:hitmarket(playerid, params[])
  696. {
  697.     if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't use this command in a vehicle.");
  698.     if(!IsPlayerNearAPayphone(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near a payphone.");
  699.     ShowHitMarketMenu(playerid);
  700.     return 1;
  701. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement