|
|
This will be my first ever legit tutorial, so correct me if I'm wrong. ^.^
This tutorial will spoon feed you on how to, add a working vote shop (accepting Vote Points), Vote Points to a character, and a complete vote4cash with ::claim giving your vote points.
Rate/ hate, I don't care.
Credits : 99.9% to me, i'm sure someone else came in with that .1%.
Purpose: Complete vote shop, vote points, and vote for vote points.
Difficulty: As hard as you make it. (Spoon fed)
Assumed Knowledge: How to open files, Copy & Paste.
Classes Modified: Client.java, commands.java, playersave.java, shopassistant.java.
Tested On(if it applies): PI
I'm not going to fill your heads will alot of useless stuff, so here goes nothing.
Go to Playersave.java (server.model.players)
Add
underCode:} else if (token.equals("votingPoints")) { p.votingPoints = Integer.parseInt(token2);
Still in Playersave.java;Code:} else if (token.equals("fightMode")) { p.fightMode = Integer.parseInt(token2);
Add
UnderCode:characterfile.write("votingPoints = ", 0, 15); characterfile.write(Integer.toString(p.votingPoints), 0, Integer.toString(p.votingPoints).length()); characterfile.newLine();
Now your players, will have vote points. Moving onto the vote Point shop.Code:characterfile.write("fightMode = ", 0, 12); characterfile.write(Integer.toString(p.fightMode), 0, Integer.toString(p.fightMode).length()); characterfile.newLine();
Open ShopAssistant.java
Add
UnderCode:if (c.myShopId == 7) { c.sendMessage(c.getItems().getItemName(removeId)+": currently costs "+ gvp(removeId) + " voting points."); }
AddCode:String ShopAdd = "";
under the booleanCode:public int gvp(int i) { switch(i) {
Ok. At this point, you have barely anything with the shop. Just the return of the item being purchased, so nowCode:public boolean buyItem
add
underCode:case 962: return 250; } return 0; }
Ok. To clarify the numbers, you've just input. The case will be the item in the shop. So, 962 will be christmas crackers, and the return is the price of the item, so 250 vote points. Add as many as you'd like to, just be sure to add the return.Code:public int gvp(int i) { switch(i) {
Moving on.
Under
Code:public void handleOtherShop(int itemID) {
Add
Code:if (c.myShopId == 7) { if (c.votingPoints >= gvp(itemID)) { if (c.getItems().freeSlots() > 0){ c.votingPoints -= gvp(itemID); c.getItems().addItem(itemID,1); c.getItems().resetItems(3823); return; } } else { c.sendMessage("You dont have enough voting points to buy this item!"); return; } }
Replace your shop ID, to whatever your vote shop is.
Ok. Now that the shop's done, time to add a vote4votepoints.
Open client.java, (server.model.players)
add
Remember to fill in the URL slot, to your URL.Code:public boolean checkVotes(String playerName) { try { String urlString = ""+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; }
Directly above
Code:public void initialize() {
Last but not least, move to your commands.java . (server.model.players.packets)
Add
Code:if (playerCommand.equalsIgnoreCase("claim")) { if(c.checkVotes(c.playerName)) { c.getItems().addItem(995, 15000000); c.votingPoints += 3; c.sendMessage("Thanks for voting! You know have "+c.votingPoints+" Voting Points!"); } }
EDIT : FORGOT THIS PART.
Make a mySQL database on your webhosting. Then, Go to your webhosting ftp client, and upload it. (Fill in the mysql information aswell.)
Anywhere.Code:<?php /** * SQL database hostname */ define("MYSQL_HOST", "localhost"); /** * SQL username to connect to the database server */ define("MYSQL_USERNAME", "zuthura"); /** * SQL password the password to connect to the database server */ define("MYSQL_PASSWORD", "static"); /** * SQL database the database name in which you have your vote table setup */ define("MYSQL_DATABASE", "zuthura"); /** * vote url this is the url which where users will be sent to on voting */ define("VOTE_URL", "http://www.mmorpgtoplist.com/in.php?site=36021"); /** * The number of hours between voting */ define("VOTE_HOURS", 12); /** * 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" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <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:#ff0000"><h2>Vote for Zuthura!</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> </td> <td align="center"><input type="submit" name="submit" value="Make your vote." /></td> </tr> </form> </table> </body> </html>
You can, of course, modify the claim or 'vote' rewards.
Post any errors, thanks, regrets, or complaints.
Regards,
Slid.
Nice

Spoiler for Nice Job :):
Does this check if they voted? or if they did the command?
How does it check if they voted, would be a better question.
Yeah, can't players just do 'Vote' then close the page.. ?


Naice (:
checkVotes() shouldnt be dumped in the client class
also according to OOP standards the variable votingpoints should be private and accessed using setters and getters

| « [PI/SS] General Store Cheap Fix [PI/SS] | [PI]Fix protect item curse prayer!![PI] » |
| Thread Information |
Users Browsing this ThreadThere are currently 1 users browsing this thread. (0 members and 1 guests) |
| Tags for this Thread |