Advertisement
Guest User

global_player.pl

a guest
Jan 15th, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 19.26 KB | None | 0 0
  1. ######################################################################################################
  2. ######################################################################################################
  3. ###
  4. ### FILE NAME           :   global_player.pl
  5. ### VERSION             :   1.0.0
  6. ### UPDATED             :   Jan 15, 2014
  7. ### QUEST               :   Vote Kick Players
  8. ### PLUGINS REQURIED    :   NONE
  9. ###
  10. ### EDITS               :   YOU CAN SEARCH BELOW FOR SAME TEXT IN THESE COMMENTS, SEARCH FOR <EDIT HERE>
  11. ###
  12. ### MUST EDIT TELNET!!  :   my $ACCOUNT_NAME = "TELNET ACCOUNT"; # <--- <EDIT HERE>  Make sure its unique!
  13. ###                         my $ACCOUNT_PASS = "PASSWORD1234";   # <--- <EDIT HERE>  Add Numbers, and make sure not too long else seems to fail
  14. ###
  15. ### OPTIONAL EDITS      :   quest::setglobal("$QVOTE_IP","$GET_QTIME","7","S900");      #   <------- <EDIT HERE>
  16. ###                         quest::setglobal("$QVOTE_NAME","$GET_QTIME","7","S900");    #   <------- <EDIT HERE>
  17. ###                         my $GET_TIME_SUSPENDED = 3600;                              #   <------- <EDIT HERE>
  18. ###
  19. ######################################################################################################
  20. ######################################################################################################
  21.  
  22. sub EVENT_SAY
  23. {
  24.     if ($text =~/^Vote Kick$/i)
  25.     {
  26.         $client->Message(7, "Syntax: Vote Kick <name>");
  27.     }
  28.  
  29.     if ($text =~/^Vote Kick /i)
  30.     {
  31.         VOTE_KICK($text);
  32.     }
  33.  
  34.     if ($status > 0)
  35.     {
  36.         if ($text =~/^#Vote Kick$/i)
  37.         {
  38.             $client->Message(7, "Syntax: #Vote Kick <name> <reason>");
  39.         }
  40.         if ($text =~/^#Vote Kick /i)
  41.         {
  42.             VOTE_KICK_START($text);
  43.         }
  44.     }
  45. }
  46.  
  47.  
  48. ###################################################
  49. ###################################################
  50. ###
  51. ###     PLAYER VOTE KICK
  52. ###
  53. ###################################################
  54. ###################################################
  55. sub VOTE_KICK
  56. {
  57.  
  58.     my @values = split(' ', CLEAN_TEXT_ALL($_[0]));
  59.     my $VOTE_NAME;
  60.     my @GET_STATUS;
  61.  
  62.     # IF 3 VALUES THEN GET NAME
  63.     if ($values[2])
  64.     {
  65.         $VOTE_NAME = $values[2];
  66.     }
  67.  
  68.     # IF WE HAVE NAME, GET ID, Proper Name, and $status
  69.     if ($VOTE_NAME)
  70.     {
  71.         my $GET_CHAR_ID = GET_ID_BY_CHARACTER($VOTE_NAME);
  72.         $VOTE_NAME  = GET_CHARACTER_BY_ID($GET_CHAR_ID);
  73.         @GET_STATUS = GET_PLAYER_STATUS($VOTE_NAME);
  74.     }
  75.  
  76.     my @GET_IP_ADDRESS  = GET_PLAYER_STATUS($name); # 0-Status, 1-IP, 2-LoginCount
  77.     my $QVOTE_IP        = "$GET_IP_ADDRESS[1]" . "_VOTED_$VOTE_NAME";
  78.     my $QVOTE_NAME      = "$name" . "_VOTED_$VOTE_NAME";
  79.  
  80.     my $GET_QVOTE_IP    = GET_QGLOBAL_EXPIRE($QVOTE_IP);
  81.     my $GET_QVOTE_NAME  = GET_QGLOBAL_EXPIRE($QVOTE_NAME);
  82.     my $GET_QTIME       = time();
  83.     my $CHECK_TIME      = time();
  84.  
  85.     # IF PLAYER VOTED, DONT ALLOW AGAIN, UNLESS $status > 200
  86.     if ($GET_QVOTE_IP && $GET_QVOTE_IP > $CHECK_TIME && $status < 200 ||
  87.         $GET_QVOTE_NAME && $GET_QVOTE_NAME > $CHECK_TIME && $status < 200 )
  88.     {
  89.         $client->Message(7, "You already voted for $VOTE_NAME in the last 15 minutes!");
  90.     }
  91.     # ELSE SET GLOBAL AND DO VOTE
  92.     else
  93.     {
  94.         # If Guide or GM then don't allow their name to be vote kicked
  95.         if ($GET_STATUS[0] > 0)
  96.         {
  97.                 $client->Message(7, "You can NOT vote kick $VOTE_NAME!");
  98.         }
  99.  
  100.         # Else everyone else can be vote kicked
  101.         elsif ($VOTE_NAME)
  102.         {
  103.             $connect = LoadMySQLConnection(); # global (not 'my') cause we're going to call sub routines with while loops
  104.             my $query_handle;
  105.             my $query;
  106.             my $REQUIRED_VOTES = 5;
  107.             my $CURRENT_TIME = time();
  108.  
  109.             ##################################################################################
  110.             # START CHECK FOR CURRENT VOTE
  111.             $query = "  SELECT kick_name, vote_count, start_vote_time
  112.                         FROM _vote_kick
  113.                         WHERE kick_name LIKE '$VOTE_NAME'
  114.                         AND vote_count < '$REQUIRED_VOTES'
  115.                         AND start_vote_time > '$CURRENT_TIME'
  116.                         ";
  117.             # quest::gmsay("$query", 18, 0);
  118.             $query_handle = $connect->prepare($query);
  119.             $query_handle->execute();
  120.             # IF THERE IS CURRENT VOTING THEN ADD +1 COUNT
  121.             # START GET 1 RECORD
  122.             if ($query_handle->rows)
  123.             {
  124.                 my $ref             = $query_handle->fetchrow_hashref();
  125.                 my $GET_KICK_NAME   = $ref->{'kick_name'};
  126.                 my $GET_VOTE_COUNT  = $ref->{'vote_count'};
  127.                 my $GET_VOTE_TIME   = time() - $ref->{'start_vote_time'};
  128.  
  129.                 $GET_VOTE_COUNT++;
  130.                 quest::we(15, "$name voted to kick $GET_KICK_NAME ($GET_VOTE_COUNT / $REQUIRED_VOTES Votes Required)");
  131.                 quest::setglobal("$QVOTE_IP","$GET_QTIME","7","S900");      #   <------- <EDIT HERE> TIME IN SECONDS TO MAKE ANOTHER VOTE
  132.                 quest::setglobal("$QVOTE_NAME","$GET_QTIME","7","S900");    #   <------- <EDIT HERE> TIME IN SECONDS TO MAKE ANOTHER VOTE
  133.  
  134.                 if ($GET_VOTE_COUNT >= $REQUIRED_VOTES)
  135.                 {
  136.                     my $GET_TIME_SUSPENDED = 3600;                          #   <------- <EDIT HERE> TIME IN SECONDS TO BE SUSPENDED
  137.                     my $GET_SUSPEND_TIME = (time + $GET_TIME_SUSPENDED);
  138.                     my @GET_NAMES = WHO_IS_PLAYER_LIST($GET_KICK_NAME);     # Get all characters linked by account and IP.
  139.                     quest::we(7, "$GET_KICK_NAME has been kicked for $GET_TIME_SUSPENDED seconds!");
  140.  
  141.                     my $i = 0;
  142.                     while ($GET_NAMES[$i])
  143.                     {
  144.                         SUSPEND_PLAYER_NAME($GET_NAMES[$i], $GET_SUSPEND_TIME);
  145.                         quest::gmsay("GM: $GET_NAMES[$i] has been suspended! (VOTE_KICK)", 13, 1);
  146.                         $i++;
  147.                     }
  148.                     $i--;
  149.                     quest::gmsay("GM: $i characters has been suspended! (VOTE_KICK)", 13, 1);
  150.  
  151.                     # DISCONNECT ALL CHARACTERS LINKED BY IP IMMEDIATELY!
  152.                     KICK_PLAYER_NAME(\@GET_NAMES);
  153.  
  154.                 }
  155.  
  156.                 $query = "  UPDATE _vote_kick
  157.                             SET vote_count = '$GET_VOTE_COUNT'
  158.                             WHERE kick_name LIKE '$GET_KICK_NAME'
  159.                             ";
  160.                 # quest::gmsay("$query", 18, 0);
  161.                 $query_handle = $connect->prepare($query);
  162.                 $query_handle->execute();
  163.  
  164.             }
  165.             # END CHECK FOR CURRENT VOTE
  166.             ##################################################################################
  167.             # ELSE NO VOTE STARTED YET
  168.             else
  169.             {
  170.                 $client->Message(7, "Voting for $VOTE_NAME has not started yet.");
  171.             }
  172.             $query_handle->finish();
  173.             $connect->disconnect();
  174.         }
  175.         else
  176.         {
  177.             $client->Message(7, "Syntax: Vote Kick <name>");
  178.         }
  179.     } # End Else Not Voted Yet
  180.     return 1;
  181. } # End VOTE_KICK
  182.  
  183.  
  184. ###################################################
  185. ###################################################
  186. ###
  187. ###     GM AND GUIDE VOTE KICK
  188. ###
  189. ###################################################
  190. ###################################################
  191. sub VOTE_KICK_START
  192. {
  193.     my @values = split(' ', CLEAN_TEXT_ALL($_[0]));
  194.     my $VOTE_NAME;
  195.     my $VOTE_REASON;
  196.     my @GET_STATUS;
  197.  
  198.     # IF 3 VALUES THEN GET NAME
  199.     if ($values[2])
  200.     {
  201.         $VOTE_NAME = $values[2];
  202.     }
  203.  
  204.     if ($VOTE_NAME)
  205.     {
  206.         my $GET_CHAR_ID = GET_ID_BY_CHARACTER($VOTE_NAME);
  207.         $VOTE_NAME  = GET_CHARACTER_BY_ID($GET_CHAR_ID);
  208.         @GET_STATUS = GET_PLAYER_STATUS($VOTE_NAME);
  209.     }
  210.  
  211.     # If Guide or GM then don't allow their name to be vote kicked
  212.     if ($GET_STATUS[0] > 0)
  213.     {
  214.             $client->Message(7, "You can NOT vote kick $VOTE_NAME!");
  215.     }
  216.  
  217.     # Else everyone else can be vote kicked
  218.     elsif ($VOTE_NAME)
  219.     {
  220.         my $connect = LoadMySQLConnection();
  221.         my $query_handle;
  222.         my $query;
  223.         my $REQUIRED_VOTES = 5;
  224.         my $CURRENT_TIME = time();
  225.  
  226.         ##################################################################################
  227.         # START CHECK FOR CURRENT VOTE
  228.         $query = "  SELECT kick_name, vote_count, start_vote_time
  229.                     FROM _vote_kick
  230.                     WHERE kick_name LIKE '$VOTE_NAME'
  231.                     AND vote_count < '$REQUIRED_VOTES'
  232.                     AND start_vote_time > '$CURRENT_TIME'
  233.                     ";
  234.         # quest::gmsay("$query", 18, 0);
  235.         $query_handle = $connect->prepare($query);
  236.         $query_handle->execute();
  237.         # IF CURRENT VOTING, DONT MAKE NEW ONE
  238.         if ($query_handle->rows)
  239.         {
  240.             my $ref             = $query_handle->fetchrow_hashref();
  241.             my $GET_KICK_NAME   = $ref->{'kick_name'};
  242.             my $GET_VOTE_COUNT  = $ref->{'vote_count'};
  243.             my $GET_VOTE_TIME   = time() - $ref->{'start_vote_time'};
  244.             $client->Message(7, "$GET_KICK_NAME already has $GET_VOTE_COUNT votes and expires in $GET_VOTE_TIME seconds.");
  245.         }
  246.         # END CHECK FOR CURRENT VOTE
  247.         ##################################################################################
  248.         # ELSE NO CURRENT VOTE, LETS MAKE ONE
  249.         else
  250.         {
  251.             my $GET_DATETIME    = CUSTOM_DATE_TIME(time());
  252.             my $GET_VOTE_COUNT  = 0;
  253.             my $GET_REASON      = "";
  254.  
  255.             # IF 4+ VALUES THEN GET REASON FOR KICK
  256.             if ($values[3])
  257.             {
  258.                 # Add (concat) all words to the reason
  259.                 my $i = 3;
  260.                 while ($values[$i])
  261.                 {
  262.                     if ($i > 3)
  263.                     {
  264.                         $GET_REASON .= " ";
  265.                     }
  266.                     $GET_REASON .= "$values[$i]";
  267.                     $i++;
  268.                 }
  269.             }
  270.             # ELSE NO REASON GIVEN FOR KICK
  271.             else
  272.             {
  273.                 $GET_REASON = "None Given";
  274.             }
  275.             my $GET_START       = time() + 900;
  276.  
  277.             my $query = "   REPLACE INTO _vote_kick (datetime, mod_name, kick_name, vote_count, reason, start_vote_time)
  278.                             VALUES ('$GET_DATETIME', '$name', '$VOTE_NAME', '$GET_VOTE_COUNT', '$GET_REASON', '$GET_START')";
  279.             # quest::gmsay("$query", 18, 0);
  280.             $query_handle = $connect->prepare($query);
  281.             $query_handle->execute();
  282.  
  283.             $client->Message(7, "Vote Kick $VOTE_NAME Started!");
  284.             quest::we(15, "/say Vote Kick $VOTE_NAME (Reason: $GET_REASON)");
  285.         }
  286.         $query_handle->finish();
  287.         $connect->disconnect();
  288.     }
  289.     else
  290.     {
  291.         $client->Message(7, "Syntax: #Vote Kick <name> <reason>");
  292.     }
  293.  
  294.     return 1;
  295.  
  296. } # End VOTE_KICK_START
  297.  
  298.  
  299. # GET ACCOUNT ID VIA PLAYER NAME
  300. sub GET_PLAYER_ACCOUNT_ID
  301. {
  302.     my $FIND_TOON_NAME  = CLEAN_TEXT_ALL($_[0]);
  303.     my $GET_ID          = 0;
  304.     my $connect         = LoadMySQLConnection();
  305.     my $query           = " SELECT DISTINCT a.id
  306.                             FROM account a
  307.                             INNER JOIN character_ c ON c.account_id = a.id
  308.                             WHERE c.name LIKE '$FIND_TOON_NAME'
  309.                             LIMIT 1";
  310.     my $query_handle = $connect->prepare($query);
  311.     $query_handle->execute();
  312.     if ($query_handle->rows)
  313.     {
  314.         my $ref     = $query_handle->fetchrow_hashref();
  315.         $GET_ID = $ref->{'id'};
  316.     }
  317.     $query_handle->finish();
  318.     $connect->disconnect();
  319.     return $GET_ID;
  320. } # End GET_PLAYER_ACCOUNT_ID
  321.  
  322.  
  323. sub SUSPEND_PLAYER_NAME
  324. {
  325.     # If at least 2 parameters (Name + Time)
  326.     if ($_[1])
  327.     {
  328.         my $GET_NAME = $_[0];
  329.         my $GET_TIME = SUSPEND_DATE(CLEAN_NUMBER($_[1]));
  330.         my $GET_ACCOUNT_ID = GET_PLAYER_ACCOUNT_ID($GET_NAME);
  331.  
  332.         if ($GET_ACCOUNT_ID)
  333.         {
  334.             # SET SUSPENSION TIME
  335.             # my $connect   = LoadMySQLConnection(); # DONE BY PARENT ROUTINE
  336.             my $query   = " UPDATE account SET suspendeduntil = '$GET_TIME' WHERE id = '$GET_ACCOUNT_ID'";
  337.             # quest::gmsay("$query", 18, 1);
  338.             $query_handle = $connect->prepare($query);
  339.             $query_handle->execute();
  340.             $query_handle->finish();
  341.             # $connect->disconnect(); # DONE BY PARENT ROUTINE
  342.         }
  343.         else
  344.         {
  345.             quest::gmsay("SUSPEND_PLAYER_NAME ERROR! NO ACCOUNT ID FOR $_[0]", 18, 1);
  346.         }
  347.     }
  348.     else
  349.     {
  350.         quest::gmsay("SUSPEND_PLAYER_NAME ERROR! DOES NOT HAVE 2ND PARAMETER! $_[0] $_[1]", 18, 1);
  351.     }
  352.  
  353.     return 1;
  354. } # End SUSPEND_PLAYER_NAME
  355.  
  356.  
  357. # Special Date/Time format for suspenduntil field in account table
  358. sub SUSPEND_DATE
  359. {
  360.     my $CONVERT_TIME = 0;
  361.  
  362.     if ($_[0])
  363.     {
  364.         $CONVERT_TIME = $_[0];
  365.     }
  366.     else
  367.     {
  368.         $CONVERT_TIME = time();
  369.     }
  370.  
  371.     my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($CONVERT_TIME);
  372.     $mon++; # Required
  373.  
  374.     $mon    = sprintf("%02d", $mon);
  375.     $mday   = sprintf("%02d", $mday);
  376.     $year   = sprintf("%02d", $year % 100) + 2000;
  377.  
  378.     $hour   = sprintf("%02d", $hour);
  379.     $min    = sprintf("%02d", $min);
  380.     $sec    = sprintf("%02d", $sec);
  381.  
  382.     # RETURN FORMAT: 2014-12-31 23:59:59
  383.     my $RETURN_DATE = "$year" . "-" . "$mon" . "-" . "$mday" . " " . " $hour:$min:$sec";
  384.     return $RETURN_DATE;
  385. } # End SUSPEND_DATE()
  386.  
  387.  
  388. # CUSTOM FORMATTED DATE AND TIME
  389. sub CUSTOM_DATE_TIME
  390. {
  391.     my $CONVERT_TIME = 0;
  392.  
  393.     if ($_[0])
  394.     {
  395.         $CONVERT_TIME = $_[0];
  396.     }
  397.     else
  398.     {
  399.         $CONVERT_TIME = time();
  400.     }
  401.  
  402.     my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($CONVERT_TIME);
  403.     $mon++; # Required
  404.  
  405.     $mon    = sprintf("%02d", $mon);
  406.     $mday   = sprintf("%02d", $mday);
  407.     $year   = sprintf("%02d", $year % 100);
  408.  
  409.     $hour   = sprintf("%02d", $hour);
  410.     $min    = sprintf("%02d", $min);
  411.     $sec    = sprintf("%02d", $sec);
  412.  
  413.     # RETURN FORMAT: 01-31-14 23:59:59
  414.     my $ez_time = "$mon" . "-" . "$mday" . "-" . "$year" . " $hour:$min:$sec";
  415.     return $ez_time;
  416. } # End CUSTOM_DATE_TIME()
  417.  
  418.  
  419. # Instantly kick player offline by logging in with Telnet
  420. sub KICK_PLAYER_NAME
  421. {
  422.     my @GET_NAMES = @{$_[0]};
  423.     use Net::Telnet();
  424.     my $telnet;
  425.     $telnet = new Net::Telnet (Timeout=>10, Port=>'9000', Prompt=>'/\> $/');
  426.     $telnet->open("localhost");
  427.  
  428.     ##########################################################################
  429.     # I NOTICED LOGIN CAN BE PICKY
  430.     # ACCOUNT NAME : LIKE TO USE A SPACE IN THE ACCOUT NAME
  431.     # PASSWORD : PASSWORD1234 SEEMS TO WORK,
  432.     #            BUT NOT PASSWORD12345678, MAYBE TOO LONG?
  433.     # MAKE SURE THE ACCOUNT NAME HAS 255 STATUS IN ACCOUNT TABLE
  434.     ##########################################################################
  435.     my $ACCOUNT_NAME = "TELNET ACCOUNT"; # <--- <EDIT HERE>  Make sure its unique!
  436.     my $ACCOUNT_PASS = "PASSWORD1234";   # <--- <EDIT HERE>  Add Numbers, and make sure not too long else seems to fail
  437.     $telnet->login("$ACCOUNT_NAME", "$ACCOUNT_PASS");
  438.  
  439.     my $i = 0;
  440.     while ($GET_NAMES[$i])
  441.     {
  442.         $telnet->cmd("kick $GET_NAMES[$i]");
  443.         quest::gmsay("GM: $GET_NAMES[$i] has been kicked! (KICK_PLAYER_NAME)", 4, 1);
  444.         $i++;
  445.     }
  446.  
  447.     $i--;
  448.     quest::gmsay("GM: $i characters has been kicked! (KICK_PLAYER_NAME)", 4, 1);
  449.  
  450.     exit;
  451. }   # End KICK_PLAYER_NAME
  452.  
  453.  
  454. sub WHO_IS_PLAYER_LIST
  455. {
  456.     # my $connect = LoadMySQLConnection(); # CREATED BY PARENT ROUTINE
  457.     my $FIND_TOON_NAME  = $_[0];
  458.     my @LIST_OF_TOONS;
  459.  
  460.     my $query           = " SELECT DISTINCT a_ip.ip
  461.                             FROM account a
  462.                             INNER JOIN account_ip a_ip ON a_ip.accid = a.id
  463.                             INNER JOIN character_ c ON c.account_id = a.id
  464.                             WHERE c.name LIKE '$FIND_TOON_NAME'
  465.                             ORDER BY a_ip.lastused DESC
  466.                             LIMIT 1";
  467.     # quest::gmsay("$query", 18, 0);
  468.     my $query_handle = $connect->prepare($query);
  469.     $query_handle->execute();
  470.  
  471.     # START GET 1 RECORD
  472.     if ($query_handle->rows)
  473.     {
  474.         my $ref     = $query_handle->fetchrow_hashref();
  475.         my $GET_IP  = $ref->{'ip'};
  476.  
  477.         my $query2 = "  SELECT DISTINCT c.name
  478.                         FROM account a
  479.                         INNER JOIN account_ip a_ip ON a_ip.accid = a.id
  480.                         INNER JOIN character_ c ON c.account_id = a.id
  481.                         WHERE a_ip.ip LIKE '$GET_IP'
  482.                         ORDER BY c.name ASC
  483.                         LIMIT 200";
  484.         # quest::gmsay("$query2", 18, 0);
  485.         my $query_handle2   = $connect->prepare($query2);
  486.         $query_handle2->execute();
  487.  
  488.         my $place_count = 0;
  489.         while(my $ref2 = $query_handle2->fetchrow_hashref)
  490.         {
  491.             my $SHOW_NAME = $ref2->{'name'};
  492.             push (@LIST_OF_TOONS, $SHOW_NAME);
  493.             $place_count++;
  494.         }
  495.         $place_count--;
  496.         quest::gmsay("GM: WHO_IS_PLAYER_LIST Results : $place_count Toons Total.", 18, 1);
  497.         $query_handle2->finish();
  498.     }
  499.     else
  500.     {
  501.         quest::gmsay("GM: WHO_IS_PLAYER_LIST LIST : $FIND_TOON_NAME NOT FOUND!", 18, 1);
  502.     }
  503.     # END GET 1 RECORD
  504.  
  505.     $query_handle->finish();
  506.     # $connect->disconnect(); # DONE BY PARENT ROUTINE
  507.     return @LIST_OF_TOONS;
  508. } # End WHO_IS_PLAYER_LIST()
  509.  
  510.  
  511. # Very Simple: Get Qglobal `expdate` of `name` and Return it
  512. sub GET_QGLOBAL_EXPIRE
  513. {
  514.     my $connect = LoadMySQLConnection();
  515.     my $qglobal_name    = $_[0];
  516.     my $a_name          = "NULL";
  517.     my $b_value         = "0";
  518.     my $query           = "SELECT name, expdate FROM quest_globals WHERE name = '$qglobal_name' LIMIT 1";
  519.     my $query_handle    = $connect->prepare($query);
  520.     $query_handle->execute();
  521.     if ($query_handle->rows)
  522.     {
  523.         my $ref     = $query_handle->fetchrow_hashref();
  524.         $a_name     = $ref->{'name'};
  525.         $b_value    = $ref->{'expdate'};
  526.     }
  527.     $query_handle->finish();
  528.     $connect->disconnect();
  529.     return $b_value;
  530. } # End GET_QGLOBAL_EXPIRE()
  531.  
  532.  
  533. ### RETURN CHARACTERS NAME
  534. sub GET_CHARACTER_BY_ID
  535. {
  536.     if ($_[0])
  537.     {
  538.         my $connect         = LoadMySQLConnection();
  539.         my $CHECK_CHARID    = $_[0];
  540.         my $RETURN_NAME     = "";
  541.         my $query           = "SELECT name FROM character_ WHERE id = '$CHECK_CHARID' LIMIT 1";
  542.         my $query_handle    = $connect->prepare($query);
  543.         $query_handle->execute();
  544.  
  545.         if ($query_handle->rows)
  546.         {
  547.             my $ref         = $query_handle->fetchrow_hashref();
  548.             $RETURN_NAME    = $ref->{'name'};
  549.         }
  550.  
  551.         $query_handle->finish();
  552.         $connect->disconnect();
  553.         return $RETURN_NAME;
  554.     }
  555. } # End GET_CHARACTER_BY_ID()
  556.  
  557.  
  558. ### RETURN CHARACTERS ID
  559. sub GET_ID_BY_CHARACTER
  560. {
  561.     if ($_[0])
  562.     {
  563.         my $connect         = LoadMySQLConnection();
  564.         my $CHECK_CHAR_NAME = $_[0];
  565.         my $RETURN_ID       = 0;
  566.         my $query           = "SELECT id FROM character_ WHERE name LIKE '$CHECK_CHAR_NAME' LIMIT 1";
  567.         my $query_handle    = $connect->prepare($query);
  568.         $query_handle->execute();
  569.  
  570.         if ($query_handle->rows)
  571.         {
  572.             my $ref     = $query_handle->fetchrow_hashref();
  573.             $RETURN_ID  = $ref->{'id'};
  574.         }
  575.  
  576.         $query_handle->finish();
  577.         $connect->disconnect();
  578.         return $RETURN_ID;
  579.     }
  580. } # End GET_ID_BY_CHARACTER()
  581.  
  582.  
  583. sub GET_PLAYER_STATUS
  584. {
  585.     my $GET_NAME = $_[0];
  586.     my @GET_STATUS;
  587.  
  588.     my $connect = LoadMySQLConnection();
  589.  
  590.     my $query           = " SELECT DISTINCT a.status, a_ip.ip, SUM(a_ip.count)
  591.                             FROM account a
  592.                             INNER JOIN account_ip a_ip ON a_ip.accid = a.id
  593.                             INNER JOIN character_ c ON c.account_id = a.id
  594.                             WHERE c.name LIKE '$GET_NAME'
  595.                             ORDER BY a_ip.lastused DESC
  596.                             LIMIT 1";
  597.  
  598.     my $query_handle    = $connect->prepare($query);
  599.     $query_handle->execute();
  600.  
  601.     # START GET 1 RECORD
  602.     if ($query_handle->rows)
  603.     {
  604.         # quest::gmsay("GM: HAS STATUS", 18, 0);
  605.         my $ref                 = $query_handle->fetchrow_hashref();
  606.         my $GET_ACCOUNT_STATUS  = $ref->{'status'};
  607.         my $GET_IP_ADDRESS      = $ref->{'ip'};
  608.         my $LOGIN_COUNT         = $ref->{'SUM(a_ip.count)'};            # For another GM tool I have.
  609.  
  610.         # Get $status value from account table
  611.         if (defined($GET_ACCOUNT_STATUS))
  612.         {
  613.             push(@GET_STATUS, $GET_ACCOUNT_STATUS);
  614.         }
  615.         else
  616.         {
  617.             push(@GET_STATUS, "NA");
  618.         }
  619.  
  620.         # Get IP address from account_ip table
  621.         if ($GET_IP_ADDRESS)
  622.         {
  623.             push(@GET_STATUS, $GET_IP_ADDRESS);
  624.         }
  625.         else
  626.         {
  627.             push(@GET_STATUS, "NA");
  628.         }
  629.  
  630.         # Get number of times logged in total by IP from account_ip table
  631.         if (defined($LOGIN_COUNT))
  632.         {
  633.             push(@GET_STATUS, $LOGIN_COUNT);
  634.             # quest::gmsay("GM: LOGIN COUNT: $LOGIN_COUNT", 18, 0);
  635.         }
  636.         else
  637.         {
  638.             push(@GET_STATUS, "NA");
  639.         }
  640.     }
  641.     # END GET 1 RECORD
  642.     else
  643.     {
  644.         # quest::gmsay("GM: $GET_NAME HAS -NO- STATUS", 18, 0);
  645.         push(@GET_STATUS, "NA");
  646.         push(@GET_STATUS, "NA");
  647.         push(@GET_STATUS, "NA");
  648.     }
  649.  
  650.     $query_handle->finish();
  651.     $connect->disconnect();
  652.  
  653.     return @GET_STATUS;
  654.  
  655. }   # End GET_PLAYER_STATUS
  656.  
  657.  
  658. sub CLEAN_TEXT_ALL
  659. {
  660.     local $_    = shift;
  661.     s/[^a-zA-Z0-9(). ]+//g;
  662.     return $_;
  663. }
  664.  
  665.  
  666. sub CLEAN_TEXT
  667. {
  668.     local $_    = shift;
  669.     s/[^a-zA-Z]+//g;
  670.     return $_;
  671. }
  672.  
  673.  
  674. sub CLEAN_NUMBER
  675. {
  676.     local $_    = shift;
  677.     s/[^0-9]+//g;
  678.     return $_;
  679. }
  680.  
  681.  
  682. ### Establish a Connection with password from Config File
  683. sub LoadMySQLConnection
  684. {
  685.     use DBI;
  686.     use DBD::mysql;
  687.     my $confile = "eqemu_config.xml"; #default config file in server folder has user and pass
  688.     open(F, "<$confile") or quest::gmsay("GM: sub LoadMySQLConnection() 'open' FAILED !!!!", 15, 1);
  689.     my $indb = 0;
  690.  
  691.     while(<F>)
  692.     {
  693.         s/\r//g;
  694.         if(/<database>/i)                       { $indb = 1; }
  695.         next unless($indb == 1);
  696.         if(/<\/database>/i)                     { $indb = 0; last; }
  697.         if(/<host>(.*)<\/host>/i)               { $host = $1; }
  698.         elsif(/<username>(.*)<\/username>/i)    { $user = $1; }
  699.         elsif(/<password>(.*)<\/password>/i)    { $pass = $1; }
  700.         elsif(/<db>(.*)<\/db>/i)                { $db   = $1; }
  701.     }
  702.  
  703.     my $dsn = "dbi:mysql:$db:localhost:3306";
  704.     my $connect = DBI->connect($dsn, $user, $pass) or quest::gmsay("GM: sub LoadMySQLConnection() 'connect' FAILED !!!!", 15, 1);
  705.  
  706.     return $connect;
  707. } # End LoadMySQLConnection()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement