Jump to content

Leaderboard


Popular Content

Showing most liked content on 06/18/17 in all areas

  1. 6 points
    It's been a long time since I've actually made a tutorial so this may not be 100% complete although I'll make sure that it is complete, but before we proceed, let me just provide a short introduction on RBSE. RBSE (Ruby Club Penguin Server Emulator) which was originally supposed to be named RBCPSE (Ruby Club Penguin Server Emulator) is an emulator written in Ruby built to support the AS2 Protocol of Club Penguin. Although RBSE is still in the works and plenty of changes will take place, it is currently ready for testing and non-commercial purposes and you are advised to kindly read the LICENSE of RBSE. Before we proceed with the tutorial, you have to know that if you are a Windows user, then this isn't the tutorial for you and you are left alone as this tutorial is for Linux users only and as well, this tutorial is for those who use Ubuntu (which is pretty much what the community uses anyway). Your to-do list and requirements: 2GB Ram or more. Quad Core Processor or any greater processor. 30 GB SSD. LAMP or LEMP Database Management Software - Adminer, Navicat, MySQL WorkBench or whatever software you prefer. Ruby 2.4 cURL Geany Adobe Flash AS2 Mediaserver setup with your server ip address/domain along with Ben's direct login implementation. Sweetalert Once you have all this setup, you may click on this link to download RBSE and extract it to wherever you want. You will find a folder with some json files called JSONS, so move this folder to var/www/html and as well don't forget to move the Register folder to the same directory. Then you would need to import the using your database management software. Here is an example using Adminer. Setting up the register is relatively simple, all you have to do is open each and every file in the folder using Geany and edit the urls and as well don't forget to edit the configuration file. Next you would need to install each and every gem listed in the README, starting from the top to the bottom one by one so you won't face any issues. You may install the gem using the following command which needs to be executed in your terminal. Example: gem install rails Once you have all this done, you may now login to your server using the default user details provided in the README As RBSE is still currently under development, any help would be appreciated and if you face any issues or need help with something except with setting up the emulator, then please feel free to create an issue and message me on Discord: Lynx#6726.
  2. 5 points
    Official thread for Icer.ink - Club Penguin Media Archive Hello everyone, I have recently taken it upon myself to produce a clone of Club Penguin's client media. I built this by parsing JSON and XML configuration files, but also by making use of other techniques such as basic web scraping and by auditing a lot of the action script code inside the client files. The end result is around 4GB of game media (uncompressed). The root directories are named after their respective web domain. Browse the directories Download media (4.4GB)
  3. 4 points
    Hello everyone, Many Club Penguin Private Servers make use of only one world server, this is generally a good thing as it keeps all of your players together and helps encourage social interaction between players in the game. Club Penguin has always given the players the option to choose which world server they want to join, but if there is only one world server, what's the point in providing users the option? I wrote some code which will give you the ability to remove the world selection screen from the game entirely, this not only makes login faster thanks to not having to ask the user for input, but also because we no longer need a login server at all, we just authenticate with the world server and call it a day. Here is the actionscript code for the dependency shockwave flash file: import com.clubpenguin.util.*; import com.clubpenguin.crypto.*; var SHELL = _global.getCurrentShell(); var AIRTOWER = _global.getCurrentAirtower(); AIRTOWER.connectToLogin = function(in_username, in_pass, login_response) { if (!AIRTOWER.is_logged_in) { AIRTOWER.on_login_response = login_response; AIRTOWER.username = in_username; AIRTOWER.password = in_pass; AIRTOWER.server.onConnection = Delegate.create(AIRTOWER, AIRTOWER.handleLoginConnection); AIRTOWER.server.onExtensionResponse = Delegate.create(AIRTOWER, AIRTOWER.onAirtowerResponse); AIRTOWER.server.debug = true; AIRTOWER.addListener(AIRTOWER.HANDLE_LOGIN, AIRTOWER.handleOnLogin); var _local1 = SHELL.getWorldCrumbs(); var _local2; var _local3; for (_local2 in _local1) { _local3 = _local1[_local2]; break; } SHELL.world_id_holder = _local3.id; AIRTOWER.server.connect(_local3.ip, _local3.port); } else { AIRTOWER.shell.$e("connectToLogin() -> Your already logged in! Cant login again"); } } AIRTOWER.handleLoginConnection = function(success) { if(success) { AIRTOWER.login(); } else { AIRTOWER.on_login_response(false); } } AIRTOWER.login = function() { AIRTOWER.server.login("w1", AIRTOWER.username, AIRTOWER.getLoginHash()); } AIRTOWER.handleOnLogin = function(obj) { AIRTOWER.removeListener(AIRTOWER.HANDLE_LOGIN, AIRTOWER.handleOnLogin); AIRTOWER.shell.setMyPlayerId(obj[1]); AIRTOWER.playerId = obj[1]; AIRTOWER.login_key = obj[2]; AIRTOWER.on_login_response(true); AIRTOWER.is_logged_in = true; SHELL.gotoState(SHELL.PLAY_STATE); } SHELL.connectToWorld = function() { var _local1 = SHELL.getWorldById(SHELL.world_id_holder); SHELL.showLoading((SHELL.getLocalizedString("Joining") + " ") + _local1.name); AIRTOWER.joinWorld(); } AIRTOWER.handleJoinWorld = function(obj) { AIRTOWER.removeListener(AIRTOWER.JOIN_WORLD, AIRTOWER.handleJoinWorld); var _local6 = Boolean(Number(obj[1])); var _local3 = Boolean(Number(obj[2])); var _local5 = Boolean(Number(obj[3])); var _local4 = Boolean(Number(obj[4])); AIRTOWER.on_world_response(true, _local6, _local3, _local5, _local4); AIRTOWER.on_world_response = undefined; } AIRTOWER.joinWorld = function() { AIRTOWER.server.onConnectionLost = Delegate.create(AIRTOWER, AIRTOWER.handleLostConnection); var _local2 = new Array(); _local2.push(AIRTOWER.playerId); _local2.push(AIRTOWER.login_key); _local2.push(AIRTOWER.shell.getLanguageAbbriviation()); if (AIRTOWER.isRedemption) { AIRTOWER.addListener(AIRTOWER.REDEMPTION_JOIN_WORLD, handleJoinRedemption, AIRTOWER); AIRTOWER.send(AIRTOWER.REDEMPTION, AIRTOWER.REDEMPTION_JOIN_WORLD, _local2, "str", -1); return(undefined); } AIRTOWER.on_world_response = SHELL.connectToWorldResponse; AIRTOWER.addListener(AIRTOWER.JOIN_WORLD, AIRTOWER.handleJoinWorld); AIRTOWER.send(AIRTOWER.PLAY_EXT, (AIRTOWER.NAVIGATION + "#") + AIRTOWER.JOIN_WORLD, _local2, "str", -1); } AIRTOWER.getLoginHash = function() { return SHA256.hash(AIRTOWER.password); } Now, since the way that the client authenticates is slightly different, your server will need to be modified to support it. In this case, I actually made mine use SHA256 hashing (thanks @Kevin) instead of MD5. There is also now no real need for a random key. Note you do not need to use SHA256 with this, it was just what I decided I wanted to use, if you want to go back to MD5, or use another authentication method entirely, you can do so by overriding 'AIRTOWER.getLoginHash'. With this code the client connects directly to the first localized world server in the world crumbs, performs the handshake, hashes the password and authenticates, then proceeds to get the players information. This is how the world server auth works: recv: <msg t='sys'><body action='verChk' r='0'><ver v='153' /></body></msg> send: <msg t='sys'><body action='apiOK' r='0'></body></msg> recv: <msg t='sys'><body action='login' r='0'><login z='w1'><nick><![CDATA[Ben_]]></nick><pword><![CDATA[SHA256]]></pword></login></body></msg> A couple of actionscript classes are required for this code to export, everything is zipped below, you'll also find a pre-exported version in there if you are happy to use mine. The SWF file goes in /play/v2/client/ of your media server, please add it to dependencies.json too: { boot: [ { id: 'airtower', title: 'Communication' }, { id: 'sentry', title: 'Communication' } ], login: [ { id: 'cookies', title: 'Login Screen' }, { id: 'login', title: 'Login Screen' } ], join: [ { id: 'engine', title: 'Engine' }, { id: 'interface', title: 'Interface' }, { id: 'gridview', title: 'Gridview' }, { id: 'mail', title: 'Mail' }, { id: 'book', title: 'Mail' }, { id: 'stampbook', title: 'StampBook' } ], create: [ { id: 'create', title: 'Create Penguin' } ], merch: [ { id: 'app', folder: 'merch/', title: 'Communication' } ] } End result: Please suggest improvements, specifically ways to improve the security, I'm sure this is pretty half-assed. Please ask if you're having troubles getting the server sided stuff to work. Works on only legacy private servers, not the new client, but could be easily ported. I'll do it if I ever find the time. cookies.zip
  4. 3 points
    Hey everyone, I frequently see people struggling with disableing the domain locking, logging services, and client checks embedded into Club Penguin client files to prevent the files being used outside the http://clubpenguin.com domain. I have written a tool in Python to help aid the process of disabling these functions, whilst maintaining the crossdomain policies within the files which actually act as a security feature. import zlib import logging import argparse from os.path import isfile, isdir, splitext, join, exists, dirname from os import walk, makedirs from glob import glob if __name__ == "__main__": logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) parser = argparse.ArgumentParser(description="Club Penguin client tool") parser.add_argument("path", type=str, nargs="*", help="Path(s) to files or directories") parser.add_argument("-d", "--domain", type=str, help="The domain to use (ex. clubpenguin.com)") parser.add_argument("-r", "--recursive", action='store_true', help="Enables recursive mode") parser.add_argument("-o", "--output", type=str, help="Output directory") parser.add_argument("-D", "--dump", action='store_true', help="Dump decompressed FWS data") arguments = parser.parse_args() logger.info("This program can overwrite files on the disk, make sure to make backups before" + " running this script or make sure the output flag is enabled!") for path in arguments.path: if isfile(path): logger.info("Found \"%s\"", path) paths = [path] elif isdir(path): if not arguments.recursive: logger.warning("\"%s\" is a directory but recursion is disabled! skipping...", path) continue else: paths = [y for x in walk(path) for y in glob(join(x[0], '*.swf'))] for file in paths: logger.info("Found \"%s\"", file) filename, file_extension = splitext(file) if file_extension != ".swf": logger.warning("\"%s\" is not an SWF file! skipping...", path) continue logger.info("Opening \"%s\"", file) raw = open(file, "rb") signature = raw.read(3) logger.info("Reading file signature for \"%s\"", file) if signature != b"CWS": logger.warning("File has invalid signature, file sig should be 0x43 0x57 0x43(\"CWS\")") continue header = raw.read(5) data = raw.read() logger.info("Read %d bytes from \"%s\"", data.__sizeof__(), file) logger.info("Decompressing") decompressed_data = zlib.decompress(data) original_data = decompressed_data if b'\x00clubpenguin\x00boot\x00BootLoader' in decompressed_data: logger.info("Found a BootLoader, cracking client checks...") s = b'\x00logEvents\x00boot\x00BootL0ader' decompressed_data = decompressed_data.replace(b'\x00logEvents\x00boot\x00BootLoader', s) s = b'clubpenguin.c0m' decompressed_data = decompressed_data.replace(b'clubpenguin.com', s) if b'clubpenguin.com' in decompressed_data: logger.info("Found clubpenguin.com") s = bytes(arguments.domain.encode()) decompressed_data = decompressed_data.replace(b'clubpenguin.com', s) if b'disney.com' in decompressed_data: logger.info("Found disney.com") s = bytes(arguments.domain.encode()) decompressed_data = decompressed_data.replace(b'disney.com', s) if decompressed_data == original_data: logger.warning("No changes were made to the data!") continue logger.info("Re-compressing data and appending file signature and header") compressed = signature + header + zlib.compress(decompressed_data) if arguments.output: file = join(arguments.output, file) if not exists(dirname(file)): makedirs(dirname(file), exist_ok=True) if arguments.dump: dump = open(file + ".fws", "w") dump.write(str(decompressed_data)) dump.close() logger.info("Copied dump to \"%s\"", file + ".fws") logger.info("Writing data to \"%s\"", file) output = open(file, "wb") output.write(compressed) output.close() raw.close() logger.info("Finished. Goodbye!") If you know Python a little then you will probably be able to understand how the script works rather quickly, as it is rather simple. It decompresses the SWF files to expose some of the actionscript constants within the file (no, this script does not make use of SWF disassemblers like RABCasm which makes my script very lightweight and very fast) The script has a few flags, some of which are just useful, and some of which you'll probably want to use every single time you run it. $ py iceburg.py -h usage: iceburg.py [-h] [-d DOMAIN] [-r] [-o OUTPUT] [-D] [path [path ...]] Club Penguin client tool positional arguments: path Path(s) to files or directories optional arguments: -h, --help show this help message and exit -d DOMAIN, --domain DOMAIN The domain to use (ex. clubpenguin.com) -r, --recursive Enables recursive mode -o OUTPUT, --output OUTPUT Output directory -D, --dump Dump decompressed FWS data Domain (required) tells the script which internet domain to replace security locks and logging services with. Recursive mode will make the script search through every directory below the path you specify for SWF files to check. Output changes the output directory, assuming the output directory is empty no files will be overwritten. Dump will make extra files containing the decompressed version of the data, useful for debugging purposes (for example if the script is making changes which break the SWF). Example usage on real Club Penguin media! /play/v2/client /play/v2/games/ Script download attached :~) Prerequisites Python 3 :) client-tool.zip
  5. 2 points
    Seeing as a few people are having issues with getting games to work and games appearing as "white screen" when attempting to launch them, I've decided to fix the issue and release the base games for people. This will work with both AS2 and AS3 (AS3 has more games, this is only the base games which were originally available) Games included: Astro Barrier, Bean Counters, Puffle Launch (the game is server sided so you have to code the actual handlers in), Dance Contest, Ice Fishing, Hydro Hopper, Jetpack Adventures, Cart Surfer, MixMaster, Pizzatron, Puffle Rescue, Puffle Roundup, Aqua Grabber, Thin Ice, Catchin Waves and Tumblers. Instructions Go to your mediaserver and go to play/v2/content/global/ Replace your games folder with the one you're about to download, clear your cache and reload and then attempt to play games. Download Here You're welcome, let me know if this works for you.
  6. 2 points
    I spent around two weeks writing numerous scripts to carry out tedious tasks. Minor files which weren't really documented anywhere I downloaded manually and that took the best part of four hours.
  7. 2 points
    CPBlog is a simple lightweight WordPress theme which will help you get a free working Club Penguin blog up and running. Version: 1.0 Download Link: Click Here This is a little project of mine which I want to continue working on and improving. Updates will come when I'm able to work on them and when I wish to work on them. I'll be working on a newer Club Penguin blog theme soon also. Requirements WordPress (download here) How to install: - Install WordPress - Go to admin Dashboard - On the left hand side hover over "Appearance" and click on "Themes" - Click on "Add New" - Click on "Upload Theme" - Download the latest version of CPBlog below, and install it as it. - Activate and Done! There is no dedicated support for this theme but you can leave issues and suggestions below. Please do not re-upload this theme elsewhere, use the same download link as when I push updates the link will be the same and I don't want people using outdated versions in the near future.
  8. 2 points
    http://tinyurl.com/cppshub - will be updating and maintaining.
  9. 1 point
    This is Music Jam 2016, with working quests. It's for AS3. All you have to do is put the files in the correct locations in your mediaserver. If there are any missing rooms you can download them from here, we had to modify a few files in order to get the Music Jam functional on CP Reborn. Hopefully it helps a few. Preview: Download Here
  10. 1 point
    Good question! Here's a whole guide on how to use Solero, and well, any IPS forum: Welcome to Solero. This guide will distinguish different functionalities of Solero and aspects of the forum that are needed to properly use Solero. Brief History Solero (pronounced soh-leh-roh) is a forum oriented toward young developers and enthusiastic gamers. It first appeared on the internet in 2015, around the time that Rile5 closed. If you're a veteran from the CPPS community, you've most likely heard of both Solero and Rile5, since this is where most of Solero's advertising is oriented. This version of Solero was established on the 11th June, 2017 by @Arthur, @Ben, and @Kevin. Please see the Community Guidelines before creating content on Solero. Be mindful of what you post. https://solero.me/announcement/2-soleros-community-guidelines/ Functionality If you have not already, please register an account (https://solero.me/register). Upon the first login to your account at Solero, you will be prompted with this page. This is the page you will always see when you log in. Above is the navigation bar. This navigation bar contains pages. Browse - Your main page for everything, including the forums itself. Forums - Categories and topics galore! Above the navigation bar image is the forums page. Categories and topics are all here on this one page. Downloads - These are downloads posted by users around Solero. You can submit a file for every user to see here, see what's new, and even see the files that are trendy. Files are categorized under Categories, located to the right on the download page. Blogs - Blogs are a collection of posts created by various users. If you were to create a blog, you could call it "My life on Solero", and post about CPPSes, for example. These blogs can be viewed by anybody on Solero. To create a blog, click "Create a blog" in the top right corner of the page. From there, follow the steps that you're prompted with to publicize your blog on Solero. Staff - This is a list of the current staff members on Solero, categorized by rank, then alphabetically (by default). Online Users - A list of the current online users can be viewed here. This can also be seen promptly above the footer inside of the Forums page. From here, you can also see what every user online is doing on Solero. Leaderboard - Reputation Leaderboard. The reputation leaderboard shows who has the most liked content for the day, and days past (by clicking Past Days). From here, you're also able to find the top members with the most reputation and the most posts. Activity - See what's happening on Solero lately at a glance. All Activity - You can view literally every reply and every topic that has been posted if you glance at All Activity. Scrolling down will bring you further in time. Activity Streams - Different streams of activity. If you liked a piece of content from @Adam , and @Scabies made a reply on the topic that you liked, this would appear in your "Liked Content" activity stream. The rest is self-explanatory, but let me know if you need any assistance with this. Unread Content - If you have not read a piece of content, this will appear in Unread Content. Tip: To easily access Unread Content, in the top right corner click Unread Content. If you want to mark it all as read so that you don't have to worry about clutter, click Mark Site As Read. Content I Started - Shows activity on content you started. Search - This is not a search bar for everything, this only searches through content in Activity, because there is a lot. If you want a full search, in the top right corner above your mailbox and notifications, there should be a search box. Moving on, let's check out the topmost part of your page. This may look different on other themes. Please note that all of these function the same way, no matter what theme you're using. Notification Bell - View all of your notifications at once. If you have a smartphone, this is sort of like your Notifications Center. You can see everything happening at a glance. If someone were to like this post, I would see it as a notification. When you click on the notification bell, this is what appears. Message Icon - Send and receive private messages from anybody on Solero. When you click on the envelope icon, this is what appears. Compose New - Send a private message to someone directly through this feature. Go to inbox - Goes to your inbox. Click on a message from someone to view it as well the conversation history with that person. If you have any recent messages, they will appear in the center of your inbox upon clicking the envelope icon. Search - Search for anything across Solero. Tabs and Widgets Recent Status Updates - Shows recent status updates from users who have changed their status within the past 24 hours. Click on reply to reply to a status updates. Next to reply should show the time when a status update was posted. This widget helps to easily update your status. Type something in "What's on your mind?" to update your status and have it visible to everybody on Solero. If you are unsure of how to enable status updates, scroll to the FAQ section. Posting Whenever you create content on Solero, please be sure that it follows the community guidelines. See the helpful links section if you're confused as to where that's located. Quote - Quotes a post in a reply. Edit - You can edit your post with the basic Solero text editor. To like a post, look for a button that looks like this in the post that you're trying to like. Click it to like that post. Next to that button, it should show who liked that specific piece of content as well. When you create a topic, you're prompted with a basic text editor. If you need assistance with this, please don't hesitate to ask around. When editing your content, you'll notice two buttons above your text editor. Poll - Create an interactive poll that people can vote on. Keep in mind that this will appear above your content. This only works if you're editing or creating a topic. You may notice this icon near the top right corner of your post. You can share your post to any social media outlet with this icon. Try it out! Reporting Content - Reporting content is important. Don't try to get involved in drama. Let a moderator or administrator handle it. To report content, look for something like this: Click Report Post. Follow the steps you're prompted with to successfully send your report to a moderator or administrator. It'll be reviewed shortly. Community Widgets These are widgets in which you can post topics. We call these Categories and subforums. In the top right corner of every category is an arrow down icon. This toggles a category so that you don't have to see recent topics from that category. Subforums Subforums are child categories of parent categories. Here's what I mean: Under General is Support, and Tutorials. These are subforums of the parent category General. Since these topics (Support and Tutorials) relate to General, that's why they are placed there. You can still make topics and reply to posts in subforums just like every other regular category. Under every category is a description of what should be posted and why that category is there. Scroll through Solero to see the descriptions of each category so you know what needs to be posted and where. I know what each category is for. How do I post a topic inside of that category? Here's the basic functionality of categories. If I wanted to post something in the General section of the CPPS category, I would click Start New Topic. By starting a new topic, you're posting a new thread. Above are examples of topics. An example is "Vintage Penguin vs Club Penguin Rewritten". This is a topic, and anybody can reply to it. Going more in depth of the functionality of categories, you can click Mark forum as reading to mark everything in this forum as you've read it so that new notifications for this category won't appear in any of your Activity Streams. Follow - Following every topic, reply, like, lock and even the slightest emoji of this category. Click the Follow button to receive notifications for everything that goes on within this category. The following format above will apply to every category. Topics Widget This widget shows topics recently made by members. Click on a topic to be linked to it. From there, you can reply to posts, like posts, and use that emoji that you're favoring. The number next to the topic on the right-hand side is how many replies it has. Posts Widget This widget is designed to show recent posts from users on topics. For example, if I were to post something on George's topic, my post would appear in Recent Posts, under the topic that it was first posted in. Popular Contributors Widget From here is where you're able to see the most reputable contributors on Solero, for the month, week, year, and all time. Arthur has 11 reputation, so he is the 3rd most popular contributor on Solero for the week. If you click "Month", you would see the most popular contributors for the month, and so on. Who's Online Widget See the members who are online. Tip: This is also accessible via Browse -> Online Users. Different roles have different name color. Here's the spectrum: Red: Administrator. Administrators are responsible for managing Solero, from implementing new features to hiring staff members. Blue: Moderator. Moderators are responsible for settling user disputes and keeping Solero a safe environment for everybody. Dark Blue: Member. Members are contributors who post content and use Solero daily. Members - Registered individuals on Solero. Anonymous - Unknown users on Solero. Guests - Unregistered visitors casually viewing topics. Member Statistics Total Members - Amount of total registered members on Solero. Most online - The amount of members most online at a time. FAQ How do I enable status updates? To learn how to enable status updates, please see this helpful topic. What about my profile? How do I customize it? Here's a tutorial that goes more in depth about customization and your profile. Can I be a mod? You'll be notified when Solero is looking for staff members. What is the official Discord of Solero? https://discord.gg/ByCczUg <- Click here to join the official Solero Discord. How do I change my theme? Scroll to the bottom of the page and click Theme, and explore new themes! Helpful Links Solero Discord: https://discord.gg/ByCczUg Solero Register: https://solero.me/register Solero Community Guidelines: https://solero.me/announcement/2-soleros-community-guidelines/ Thank you for reading my tutorial. I hope that this topic helps many users to come. Camden
  11. 1 point
    This looks amazing, nice contribution Jamie !
  12. 1 point
    You're missing the dialogue for it. See if you can find a game_strings.json from the Frozen Party. If you find one, upload it. That should fix the error.
  13. 1 point
    Really sorry about this. I'll look into fixing it ASAP.
  14. 1 point
    Hey Solero! A while back I created a relatively large archive of SWF files for anybody to use. While it's not completely up to date at this point, it might still be of some use to some of you as it contains almost every available party, catalog and room from 2005 - 2013. It's also missing a few of the lost parties and catalogs that surfaced recently. Something is better than nothing, right? Download http://www.mediafire.com/file/6sj7ik0bxyt8hyb/The_Ultimate_Club_Penguin_SWF_Archive.rar It's a rather large file so it might take some time to download depending on your internet speed. I'm possibly going to update this in the future, but I don't exactly know when that will be. I hope you guys can make good use out of this!
  15. 1 point
×