RuneScape 2 Development > Server Tutorials

[PI] Vote4Cash

Pages: (1/35) >>>

Gsempire:

This is Vote4Cash on PI.

In your webhost, make a new file called vote.php. Add the code inside of it.


--- Code: ---<?php

/**
 * @author Stuart <RogueX | iVariable>
 * @version 1.1 UPDATED: 06.09.2010
 * @comment fixed a few bugs
 */

/**
 * mysql database hostname
 */
define("MYSQL_HOST", "localhost");
/**
 *  mysql username to connect to the database server
 */
define("MYSQL_USERNAME", "sqlusername");
/**
 *  mysql password the password to connect to the database server
 */
define("MYSQL_PASSWORD", "sqlpass");
/**
 *  mysql database the database name in which you have your vote table setup
 */
define("MYSQL_DATABASE", "sqldatabase");
/**
 *  vote url this is the url which where users will be sent to on voting
 */
define("VOTE_URL", "/top-rsps-list/=vote&id=102");
/**
 * The number of hours between voting
 */
define("VOTE_HOURS", 24);


/**
 *  connect() this function is used to connect to the mysql database server.
 */
function connect()
{
    if (!@mysql_connect(MYSQL_HOST, MYSQL_USERNAME, MYSQL_PASSWORD))
        die("Could not connect to mysql database: " . mysql_error());
    if (!@mysql_select_db(MYSQL_DATABASE))
        die("Could not select mysql database: " . mysql_error());
    $tables = mysql_list_tables(MYSQL_DATABASE);
    while (list($temp) = mysql_fetch_array($tables)) {
        if ($temp == "votes") {
            return;
        }
    }
    query("CREATE TABLE `votes` (
        `playerName` VARCHAR( 255 ) NOT NULL ,
        `ip` VARCHAR( 255 ) NOT NULL,
        `time` BIGINT NOT NULL ,
        `recieved` INT( 1 ) NOT NULL DEFAULT '0')");
}
/**
 *  query(string query) this function is used to query the mysql database server.
 */
function query($s)
{
    $query = @mysql_query($s);
    if (!$query)
        die("Error running query('" . $s . "'): " . mysql_error());
    return $query;
}
/**
 *  anti_inject(string text) this function is used to make sure no injections can be made.
 */
function anti_inject($sql)
{
    $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),
        "", $sql);
    $sql = trim($sql);
    $sql = strip_tags($sql);
    $sql = addslashes($sql);
    $sql = strtolower($sql);
    return $sql;
}
/**
 *  clean_request(int timestamp, string username) this function is used to delete any entries if they have already expired.
 */
function clean_request($time, $username)
{
    $query = query("SELECT * FROM `votes` WHERE `playerName`='" . $username . "'");
    if (mysql_num_rows($query) > 0) {
        $row = mysql_fetch_array($query);
        $timerequested = $row['time'];
        if ($time - $timerequested > VOTE_HOURS * 3600)
            query("DELETE FROM `votes` WHERE time='" . $timerequested . "'");
    }
}
/**
 *  vote_entries(string ip) this function is used return the number of rows within the table
 */
function vote_entries($ip)
{
    $query = query("SELECT * FROM `votes` WHERE ip='" . $ip . "'");
    return mysql_num_rows($query);
}


/**
 * This is the actual working of the script please do not touch anything below if you do not know what you are doing...
 */
if (isset($_POST['submit']) || isset($_GET['username']) && isset($_GET['type'])) {
    connect();
    if ($_POST['submit']) {
        if(@fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 1))
            die("Sorry but you have port 80 open, this is to stop voting by proxy address.");
        if(isset($_COOKIE['voted']))
            die("Sorry but it looks like you have already voted...");
        $username = anti_inject($_POST['username']);
        $ip = gethostbyaddr($_SERVER['REMOTE_ADDR']);
        clean_request(time(), $username);
        if (vote_entries($ip) == 0) {
            setcookie ("voted", "yes", VOTE_HOURS * 3600);
            query("INSERT INTO `votes` (`playerName`, `ip`, `time`) VALUES ('" . $username .
                "', '" . $ip . "', '" . time() . "')");
            header("Location: " . VOTE_URL . "");
        } else {
            die("You have already voted once today.");
        }
    } elseif ($_GET['type'] == "checkvote") {
        $username = anti_inject($_GET['username']);
        $query = query("SELECT * FROM `votes` WHERE `playerName`='" . $username . "'");
        if (mysql_num_rows($query) == 1) {
            $results = mysql_fetch_array($query);
            if ($results['recieved'] == 0) {
                query("UPDATE `votes` SET `recieved`='1' WHERE `playerName`='" . $username . "'");
                die("user needs reward...");
            } else {
                die("user been given reward...");
            }
        } else {
          die("Vote not found... ".  $username .".");
        }
    }
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ";>
<html xmlns=";>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Vote for a reward!</title>
</head>
<body>
<div align="center" style="color:#00F"><h2>Vote for a reward!</h3></div>
<table align="center">

<form action="vote.php" method="post">
  <tr>
    <td align="right">Username: </td>
    <td><input name="username" type="text" /></td>
  </tr>
  <tr>
  <td>&nbsp;</td>
    <td align="center"><input type="submit" name="submit" value="Vote now" /></td>
  </tr>

</form>
</table>
</body>
</html>
--- End code ---

It would be much easier to use HostGator because the mysql is very easy to set up. For this part you'll have to go to mySQL databases on hostgator and then make a new database. and a username. Then at the bottom add that username to the database with all the privileges and fill this in at the top. Don't copy and paste, you might mess up ;). Note: On hostgator, it gives username_databasename/username in that format. Make sure you use that. An example is: runewarp_vote


--- Code: ---define("MYSQL_HOST", "localhost");
/**
 *  mysql username to connect to the database server
 */
define("MYSQL_USERNAME", "databaseusername_here");
/**
 *  mysql password the password to connect to the database server
 */
define("MYSQL_PASSWORD", "mypasswordhere");
/**
 *  mysql database the database name in which you have your vote table setup
 */
define("MYSQL_DATABASE", "yourdatabase_here");
--- End code ---

Next is server sided.

Go to client.java and search for public void initialize, over it add this:


--- Code: --- public boolean checkVotes(String playerName) {
try {
String urlString = "=checkvote&username="+playerName;
urlString = urlString.replaceAll(" ", "%20");
URL url = new URL(urlString);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String results = reader.readLine();
if(results.length() > 0) {
if(results.equals("user needs reward..."))
return true;
else
return false;
}
} catch (MalformedURLException e) {
System.out.println("Malformed URL Exception in checkVotes(String playerName)");
} catch (IOException e) {
System.out.println("IO Exception in checkVotes(String playerName)");
}
return false;
}
--- End code ---

Then search for "welcome to" or whatever your message is when you log in, and underneath it, add this:


--- Code: --- if(checkVotes(playerName)) {
getItems().addItem(995, 10000000);
sendMessage("Thanks for voting!");
}
--- End code ---

Change the 10000000 to however many coins you want.

At the top of client.java add these imports:


--- Code: ---import java.net.URL;
import java.net.MalformedURLException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;

--- End code ---

Credits to Derive[/URL]



runewings317:

Mmhm... What I vain I said... Although this is very helpful...

Gsempire:

You have no idea how long I have looked for a tutorial like this..

extinct2255:

Lol this is Tyluur's script, :fp:

Uncalled:


--- Quote from: I Vain I on February 02, 2011, 10:38:41 PM ---This is technically a snippet.

--- End quote ---
If he explains his code, they might let it slide.


--- Quote from: extinct2255 on February 04, 2011, 06:37:24 AM ---Lol this is Tyluur's script, :fp:

--- End quote ---
Tyluur can barely code, the only thing he can code is PI from what I've seen.

Pages: (1/35) >>>

Go to full version